diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index d9d7d786a..f4d41d8cd 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -42,10 +42,9 @@ dependencies { implementation 'com.googlecode.mp4parser:isoparser:1.0.6' implementation 'com.stripe:stripe-android:2.0.2' implementation 'com.google.mlkit:language-id:16.1.1' - implementation 'com.android.billingclient:billing:5.1.0' + implementation 'com.android.billingclient:billing:6.0.1' implementation 'com.google.code.gson:gson:2.10' implementation 'com.google.guava:guava:31.1-android' - implementation 'com.airbnb.android:lottie:6.4.0' implementation 'com.google.android.play:integrity:1.3.0' implementation 'com.google.android.gms:play-services-safetynet:18.0.1' @@ -217,7 +216,9 @@ apply plugin: 'com.google.gms.google-services' task checkVisibility { doFirst { - def isPrivateBuild = project.gradle.startParameter.taskNames.find { it.contains("HA_private") } + def isPrivateBuild = project.gradle.startParameter.taskNames.find { + it.contains("HA_private") || it.contains("Debug") || it.contains("Release") + } def isPublicAllowed = !project.hasProperty("IS_PRIVATE") || !project.property("IS_PRIVATE").toBoolean() if (!isPrivateBuild && !isPublicAllowed) { throw new GradleException("Building public version of private code!") diff --git a/TMessagesProj/jni/CMakeLists.txt b/TMessagesProj/jni/CMakeLists.txt index 5f15aa626..3eb875975 100644 --- a/TMessagesProj/jni/CMakeLists.txt +++ b/TMessagesProj/jni/CMakeLists.txt @@ -268,6 +268,7 @@ elseif(${ANDROID_ABI} STREQUAL "arm64-v8a") rlottie/src/vector/pixman/pixman-arma64-neon-asm.S) endif() + #flac add_library(flac STATIC exoplayer/libFLAC/bitmath.c @@ -447,7 +448,8 @@ add_library(${NATIVE_LIB} SHARED exoplayer/ffmpeg_jni.cc fast-edge.cpp genann.c - secureid_ocr.cpp) + secureid_ocr.cpp +) target_compile_options(${NATIVE_LIB} PUBLIC -ffast-math -Os -funroll-loops -ffast-math -fno-strict-aliasing -fno-math-errno) diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a index ef59f86ab..3e86a329d 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a index bb75ab74e..4bd6439a4 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a index a5d4c2b77..591f2207b 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a index cf6697a67..6b3846183 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a index 7675775e3..69efdf612 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a index 2732e67fc..9f0c6d211 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a index 32f07ddd9..0d8886b8b 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a index 5f8dd2c62..4d4a94856 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a index bbd38c511..c43fffeaa 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a index 677df6492..a4816891d 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a index f7a03fba4..5dde31d83 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a index 90e94947f..fb86241f9 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a index e740c3634..f35501bca 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a index ca37d5906..a6d9ffcaa 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavcodec.a b/TMessagesProj/jni/ffmpeg/x86/libavcodec.a index 4eddf5040..002a567a9 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavcodec.a and b/TMessagesProj/jni/ffmpeg/x86/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavformat.a b/TMessagesProj/jni/ffmpeg/x86/libavformat.a index a6743018d..00c5ac2ef 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavformat.a and b/TMessagesProj/jni/ffmpeg/x86/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavresample.a b/TMessagesProj/jni/ffmpeg/x86/libavresample.a index 5c8bc6263..81563020c 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavresample.a and b/TMessagesProj/jni/ffmpeg/x86/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavutil.a b/TMessagesProj/jni/ffmpeg/x86/libavutil.a index 0b72b4145..f03fd350b 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavutil.a and b/TMessagesProj/jni/ffmpeg/x86/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libswresample.a b/TMessagesProj/jni/ffmpeg/x86/libswresample.a index 45ee7954d..00a5203be 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libswresample.a and b/TMessagesProj/jni/ffmpeg/x86/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libswscale.a b/TMessagesProj/jni/ffmpeg/x86/libswscale.a index efdf8fce0..fb56c176c 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libswscale.a and b/TMessagesProj/jni/ffmpeg/x86/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libvpx.a b/TMessagesProj/jni/ffmpeg/x86/libvpx.a index 865f97cbc..de3c1db95 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libvpx.a and b/TMessagesProj/jni/ffmpeg/x86/libvpx.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a b/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a index 13d6c3ee0..e54555cb9 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a b/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a index 730d167d4..f8e543074 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a b/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a index 11b9ada0b..a2e5997b6 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a b/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a index 130af1e6a..d982f1067 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a b/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a index ce7275144..230a28697 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a and b/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a b/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a index afb1f7ffa..3187be8df 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a and b/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a b/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a index 21e46183d..bd0383e80 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a and b/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a differ diff --git a/TMessagesProj/jni/tgnet/ApiScheme.cpp b/TMessagesProj/jni/tgnet/ApiScheme.cpp index 2e0f88ad8..fa2d2dd16 100644 --- a/TMessagesProj/jni/tgnet/ApiScheme.cpp +++ b/TMessagesProj/jni/tgnet/ApiScheme.cpp @@ -528,6 +528,9 @@ void TL_user::readParams(NativeByteBuffer *stream, int32_t instanceNum, bool &er profile_color_color = stream->readInt32(&error); profile_color_background_emoji_id = stream->readInt64(&error); } + if ((flags2 & 4096) != 0) { + bot_active_users = stream->readInt32(&error); + } } void TL_user::serializeToStream(NativeByteBuffer *stream) { @@ -605,6 +608,9 @@ void TL_user::serializeToStream(NativeByteBuffer *stream) { stream->writeInt32(profile_color_color); stream->writeInt32(profile_color_background_emoji_id); } + if ((flags2 & 4096) != 0) { + stream->writeInt32(bot_active_users); + } } InputPeer *InputPeer::TLdeserialize(NativeByteBuffer *stream, uint32_t constructor, int32_t instanceNum, bool &error) { diff --git a/TMessagesProj/jni/tgnet/ApiScheme.h b/TMessagesProj/jni/tgnet/ApiScheme.h index 4a7659ac4..a883738db 100644 --- a/TMessagesProj/jni/tgnet/ApiScheme.h +++ b/TMessagesProj/jni/tgnet/ApiScheme.h @@ -388,6 +388,7 @@ public: int64_t color_background_emoji_id; int32_t profile_color_color; int64_t profile_color_background_emoji_id; + int32_t bot_active_users; static User *TLdeserialize(NativeByteBuffer *stream, uint32_t constructor, int32_t instanceNum, bool &error); }; @@ -404,7 +405,7 @@ public: class TL_user : public User { public: - static const uint32_t constructor = 0x215c4438; + static const uint32_t constructor = 0x83314fca; void readParams(NativeByteBuffer *stream, int32_t instanceNum, bool &error); void serializeToStream(NativeByteBuffer *stream); diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index be5cda368..32526988c 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -102,7 +102,10 @@ android:requestLegacyExternalStorage="true" android:preserveLegacyExternalStorage="true" android:allowAudioPlaybackCapture="true" - tools:replace="android:supportsRtl"> + tools:replace="android:supportsRtl" + android:usesCleartextTraffic="true" + > + + + + + + + diff --git a/TMessagesProj/src/main/assets/currencies.json b/TMessagesProj/src/main/assets/currencies.json index 25205f658..b80d598b7 100644 --- a/TMessagesProj/src/main/assets/currencies.json +++ b/TMessagesProj/src/main/assets/currencies.json @@ -1 +1 @@ -{"AED":{"code":"AED","title":"United Arab Emirates Dirham","symbol":"AED","native":"د.إ.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"367","max_amount":"3673095"},"AFN":{"code":"AFN","title":"Afghan Afghani","symbol":"AFN","native":"؋","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"8729","max_amount":"87299487"},"ALL":{"code":"ALL","title":"Albanian Lek","symbol":"ALL","native":"Lek","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":false,"exp":2,"min_amount":"11842","max_amount":"118421187"},"AMD":{"code":"AMD","title":"Armenian Dram","symbol":"AMD","native":"դր.","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"40943","max_amount":"409436718"},"ARS":{"code":"ARS","title":"Argentine Peso","symbol":"ARS","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"14706","max_amount":"147065012"},"AUD":{"code":"AUD","title":"Australian Dollar","symbol":"AU$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"154","max_amount":"1541535"},"AZN":{"code":"AZN","title":"Azerbaijani Manat","symbol":"AZN","native":"ман.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"170","max_amount":"1702860"},"BAM":{"code":"BAM","title":"Bosnia & Herzegovina Convertible Mark","symbol":"BAM","native":"KM","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"199","max_amount":"1990677"},"BDT":{"code":"BDT","title":"Bangladeshi Taka","symbol":"BDT","native":"৳","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"10009","max_amount":"100094046"},"BGN":{"code":"BGN","title":"Bulgarian Lev","symbol":"BGN","native":"лв.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"199","max_amount":"1993852"},"BND":{"code":"BND","title":"Brunei Dollar","symbol":"BND","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"142","max_amount":"1421883"},"BOB":{"code":"BOB","title":"Bolivian Boliviano","symbol":"BOB","native":"Bs","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"683","max_amount":"6832607"},"BRL":{"code":"BRL","title":"Brazilian Real","symbol":"R$","native":"R$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"539","max_amount":"5397297"},"BYN":{"code":"BYN","title":"Belarusian ruble","symbol":"BYN","native":"BYN","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"249","max_amount":"2495801"},"CAD":{"code":"CAD","title":"Canadian Dollar","symbol":"CA$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"137","max_amount":"1371480"},"CHF":{"code":"CHF","title":"Swiss Franc","symbol":"CHF","native":"CHF","thousands_sep":"'","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"97","max_amount":"976430"},"CLP":{"code":"CLP","title":"Chilean Peso","symbol":"CLP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":0,"min_amount":"963","max_amount":"9637500"},"CNY":{"code":"CNY","title":"Chinese Renminbi Yuan","symbol":"CN¥","native":"CN¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"711","max_amount":"7113300"},"COP":{"code":"COP","title":"Colombian Peso","symbol":"COP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"452870","max_amount":"4528700000"},"CRC":{"code":"CRC","title":"Costa Rican Colón","symbol":"CRC","native":"₡","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"62506","max_amount":"625061070"},"CZK":{"code":"CZK","title":"Czech Koruna","symbol":"CZK","native":"Kč","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"2503","max_amount":"25036400"},"DKK":{"code":"DKK","title":"Danish Krone","symbol":"DKK","native":"kr","thousands_sep":"","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"758","max_amount":"7587520"},"DOP":{"code":"DOP","title":"Dominican Peso","symbol":"DOP","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"5275","max_amount":"52757308"},"DZD":{"code":"DZD","title":"Algerian Dinar","symbol":"DZD","native":"د.ج.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"14035","max_amount":"140351015"},"EGP":{"code":"EGP","title":"Egyptian Pound","symbol":"EGP","native":"ج.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1954","max_amount":"19544296"},"ETB":{"code":"ETB","title":"Ethiopian Birr","symbol":"ETB","native":"ብር","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"5224","max_amount":"52247069"},"EUR":{"code":"EUR","title":"Euro","symbol":"€","native":"€","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"102","max_amount":"1020295"},"GBP":{"code":"GBP","title":"British Pound","symbol":"£","native":"£","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"90","max_amount":"901955"},"GEL":{"code":"GEL","title":"Georgian Lari","symbol":"GEL","native":"GEL","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"283","max_amount":"2830146"},"GTQ":{"code":"GTQ","title":"Guatemalan Quetzal","symbol":"GTQ","native":"Q","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"778","max_amount":"7781323"},"HKD":{"code":"HKD","title":"Hong Kong Dollar","symbol":"HK$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"784","max_amount":"7849850"},"HNL":{"code":"HNL","title":"Honduran Lempira","symbol":"HNL","native":"L","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"2441","max_amount":"24413729"},"HRK":{"code":"HRK","title":"Croatian Kuna","symbol":"HRK","native":"kn","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"768","max_amount":"7681499"},"HUF":{"code":"HUF","title":"Hungarian Forint","symbol":"HUF","native":"Ft","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"42967","max_amount":"429670063"},"IDR":{"code":"IDR","title":"Indonesian Rupiah","symbol":"IDR","native":"Rp","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"1523720","max_amount":"15237200000"},"ILS":{"code":"ILS","title":"Israeli New Sheqel","symbol":"₪","native":"₪","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"356","max_amount":"3564105"},"INR":{"code":"INR","title":"Indian Rupee","symbol":"₹","native":"₹","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"8155","max_amount":"81553202"},"ISK":{"code":"ISK","title":"Icelandic Króna","symbol":"ISK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":0,"min_amount":"143","max_amount":"1431502"},"JMD":{"code":"JMD","title":"Jamaican Dollar","symbol":"JMD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"15013","max_amount":"150131044"},"JPY":{"code":"JPY","title":"Japanese Yen","symbol":"¥","native":"¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":0,"min_amount":"144","max_amount":"1447309"},"KES":{"code":"KES","title":"Kenyan Shilling","symbol":"KES","native":"Ksh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"12080","max_amount":"120800507"},"KGS":{"code":"KGS","title":"Kyrgyzstani Som","symbol":"KGS","native":"KGS","thousands_sep":" ","decimal_sep":"-","symbol_left":false,"space_between":true,"exp":2,"min_amount":"8018","max_amount":"80182900"},"KRW":{"code":"KRW","title":"South Korean Won","symbol":"₩","native":"₩","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":0,"min_amount":"1430","max_amount":"14308699"},"KZT":{"code":"KZT","title":"Kazakhstani Tenge","symbol":"KZT","native":"₸","thousands_sep":" ","decimal_sep":"-","symbol_left":true,"space_between":false,"exp":2,"min_amount":"47186","max_amount":"471867112"},"LBP":{"code":"LBP","title":"Lebanese Pound","symbol":"LBP","native":"ل.ل.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"150999","max_amount":"1509998778"},"LKR":{"code":"LKR","title":"Sri Lankan Rupee","symbol":"LKR","native":"රු.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"35546","max_amount":"355469651"},"MAD":{"code":"MAD","title":"Moroccan Dirham","symbol":"MAD","native":"د.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1093","max_amount":"10938136"},"MDL":{"code":"MDL","title":"Moldovan Leu","symbol":"MDL","native":"MDL","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1926","max_amount":"19264439"},"MNT":{"code":"MNT","title":"Mongolian Tögrög","symbol":"MNT","native":"MNT","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"322444","max_amount":"3224442056"},"MUR":{"code":"MUR","title":"Mauritian Rupee","symbol":"MUR","native":"MUR","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"4514","max_amount":"45142537"},"MVR":{"code":"MVR","title":"Maldivian Rufiyaa","symbol":"MVR","native":"MVR","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1545","max_amount":"15459951"},"MXN":{"code":"MXN","title":"Mexican Peso","symbol":"MX$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"2018","max_amount":"20186299"},"MYR":{"code":"MYR","title":"Malaysian Ringgit","symbol":"MYR","native":"RM","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"464","max_amount":"4641025"},"MZN":{"code":"MZN","title":"Mozambican Metical","symbol":"MZN","native":"MTn","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"6382","max_amount":"63829680"},"NGN":{"code":"NGN","title":"Nigerian Naira","symbol":"NGN","native":"₦","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"43203","max_amount":"432039540"},"NIO":{"code":"NIO","title":"Nicaraguan Córdoba","symbol":"NIO","native":"C$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"3556","max_amount":"35566412"},"NOK":{"code":"NOK","title":"Norwegian Krone","symbol":"NOK","native":"kr","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1072","max_amount":"10724875"},"NPR":{"code":"NPR","title":"Nepalese Rupee","symbol":"NPR","native":"नेरू","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"12954","max_amount":"129546657"},"NZD":{"code":"NZD","title":"New Zealand Dollar","symbol":"NZ$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"174","max_amount":"1748790"},"PAB":{"code":"PAB","title":"Panamanian Balboa","symbol":"PAB","native":"B\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"98","max_amount":"988722"},"PEN":{"code":"PEN","title":"Peruvian Nuevo Sol","symbol":"PEN","native":"S\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"390","max_amount":"3902208"},"PHP":{"code":"PHP","title":"Philippine Peso","symbol":"PHP","native":"₱","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"5865","max_amount":"58658497"},"PKR":{"code":"PKR","title":"Pakistani Rupee","symbol":"PKR","native":"₨","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"22642","max_amount":"226426805"},"PLN":{"code":"PLN","title":"Polish Złoty","symbol":"PLN","native":"zł","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"495","max_amount":"4950459"},"PYG":{"code":"PYG","title":"Paraguayan Guaraní","symbol":"PYG","native":"₲","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":0,"min_amount":"6977","max_amount":"69772317"},"QAR":{"code":"QAR","title":"Qatari Riyal","symbol":"QAR","native":"ر.ق.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"364","max_amount":"3641013"},"RON":{"code":"RON","title":"Romanian Leu","symbol":"RON","native":"RON","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"504","max_amount":"5049800"},"RSD":{"code":"RSD","title":"Serbian Dinar","symbol":"RSD","native":"дин.","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"11968","max_amount":"119684977"},"RUB":{"code":"RUB","title":"Russian Ruble","symbol":"RUB","native":"₽","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"7146","max_amount":"71468755"},"SAR":{"code":"SAR","title":"Saudi Riyal","symbol":"SAR","native":"ر.س.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"375","max_amount":"3758389"},"SEK":{"code":"SEK","title":"Swedish Krona","symbol":"SEK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1118","max_amount":"11187065"},"SGD":{"code":"SGD","title":"Singapore Dollar","symbol":"SGD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"143","max_amount":"1433860"},"THB":{"code":"THB","title":"Thai Baht","symbol":"฿","native":"฿","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"3798","max_amount":"37980185"},"TJS":{"code":"TJS","title":"Tajikistani Somoni","symbol":"TJS","native":"TJS","thousands_sep":" ","decimal_sep":";","symbol_left":false,"space_between":true,"exp":2,"min_amount":"975","max_amount":"9753854"},"TRY":{"code":"TRY","title":"Turkish Lira","symbol":"TRY","native":"TL","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1853","max_amount":"18536199"},"TTD":{"code":"TTD","title":"Trinidad and Tobago Dollar","symbol":"TTD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"672","max_amount":"6722681"},"TWD":{"code":"TWD","title":"New Taiwan Dollar","symbol":"NT$","native":"NT$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"3174","max_amount":"31744503"},"TZS":{"code":"TZS","title":"Tanzanian Shilling","symbol":"TZS","native":"TSh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"233200","max_amount":"2332000058"},"UAH":{"code":"UAH","title":"Ukrainian Hryvnia","symbol":"UAH","native":"₴","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":false,"exp":2,"min_amount":"3633","max_amount":"36338830"},"UGX":{"code":"UGX","title":"Ugandan Shilling","symbol":"UGX","native":"USh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":0,"min_amount":"3816","max_amount":"38166726"},"USD":{"code":"USD","title":"United States Dollar","symbol":"$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"100","max_amount":1000000},"UYU":{"code":"UYU","title":"Uruguayan Peso","symbol":"UYU","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"4080","max_amount":"40801205"},"UZS":{"code":"UZS","title":"Uzbekistani Som","symbol":"UZS","native":"UZS","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1089058","max_amount":"10890583014"},"VND":{"code":"VND","title":"Vietnamese Đồng","symbol":"₫","native":"₫","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":0,"min_amount":"23870","max_amount":"238700000"},"YER":{"code":"YER","title":"Yemeni Rial","symbol":"YER","native":"ر.ي.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"25031","max_amount":"250319621"},"ZAR":{"code":"ZAR","title":"South African Rand","symbol":"ZAR","native":"R","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1801","max_amount":"18018198"}} \ No newline at end of file +{"AED":{"code":"AED","title":"United Arab Emirates Dirham","symbol":"AED","native":"د.إ.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"367","max_amount":"3673042"},"AFN":{"code":"AFN","title":"Afghan Afghani","symbol":"AFN","native":"؋","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"7032","max_amount":"70320011"},"ALL":{"code":"ALL","title":"Albanian Lek","symbol":"ALL","native":"Lek","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"9170","max_amount":"91699858"},"AMD":{"code":"AMD","title":"Armenian Dram","symbol":"AMD","native":"դր.","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"38438","max_amount":"384379435"},"ARS":{"code":"ARS","title":"Argentine Peso","symbol":"ARS","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"93241","max_amount":"932408369"},"AUD":{"code":"AUD","title":"Australian Dollar","symbol":"AU$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"154","max_amount":"1535627"},"AZN":{"code":"AZN","title":"Azerbaijani Manat","symbol":"AZN","native":"ман.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"170","max_amount":"1703970"},"BAM":{"code":"BAM","title":"Bosnia & Herzegovina Convertible Mark","symbol":"BAM","native":"KM","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"179","max_amount":"1790780"},"BDT":{"code":"BDT","title":"Bangladeshi Taka","symbol":"BDT","native":"৳","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"11644","max_amount":"116440049"},"BGN":{"code":"BGN","title":"Bulgarian Lev","symbol":"BGN","native":"лв.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"179","max_amount":"1790871"},"BHD":{"code":"BHD","title":"Bahraini dinar","symbol":"BHD","native":"د.ب.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":3,"min_amount":"377","max_amount":"3765970"},"BND":{"code":"BND","title":"Brunei Dollar","symbol":"BND","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"132","max_amount":"1319416"},"BOB":{"code":"BOB","title":"Bolivian Boliviano","symbol":"BOB","native":"Bs","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"685","max_amount":"6847960"},"BRL":{"code":"BRL","title":"Brazilian Real","symbol":"R$","native":"R$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"570","max_amount":"5700224"},"BYN":{"code":"BYN","title":"Belarusian ruble","symbol":"BYN","native":"BYN","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"324","max_amount":"3242595"},"CAD":{"code":"CAD","title":"Canadian Dollar","symbol":"CA$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"139","max_amount":"1387250"},"CHF":{"code":"CHF","title":"Swiss Franc","symbol":"CHF","native":"CHF","thousands_sep":"'","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"86","max_amount":"858080"},"CLP":{"code":"CLP","title":"Chilean Peso","symbol":"CLP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"944","max_amount":"9438172"},"CNY":{"code":"CNY","title":"Chinese Renminbi Yuan","symbol":"CN¥","native":"CN¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"716","max_amount":"7159204"},"COP":{"code":"COP","title":"Colombian Peso","symbol":"COP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"405201","max_amount":"4052007508"},"CRC":{"code":"CRC","title":"Costa Rican Colón","symbol":"CRC","native":"₡","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"51870","max_amount":"518701644"},"CZK":{"code":"CZK","title":"Czech Koruna","symbol":"CZK","native":"Kč","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"2323","max_amount":"23232104"},"DKK":{"code":"DKK","title":"Danish Krone","symbol":"DKK","native":"kr","thousands_sep":"","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"684","max_amount":"6838604"},"DOP":{"code":"DOP","title":"Dominican Peso","symbol":"DOP","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"5895","max_amount":"58947947"},"DZD":{"code":"DZD","title":"Algerian Dinar","symbol":"DZD","native":"د.ج.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"13411","max_amount":"134106121"},"EGP":{"code":"EGP","title":"Egyptian Pound","symbol":"EGP","native":"ج.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"4863","max_amount":"48626104"},"ETB":{"code":"ETB","title":"Ethiopian Birr","symbol":"ETB","native":"ብር","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"8025","max_amount":"80247402"},"EUR":{"code":"EUR","title":"Euro","symbol":"€","native":"€","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"92","max_amount":"915704"},"GBP":{"code":"GBP","title":"British Pound","symbol":"£","native":"£","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"78","max_amount":"780853"},"GEL":{"code":"GEL","title":"Georgian Lari","symbol":"GEL","native":"GEL","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"271","max_amount":"2705040"},"GHS":{"code":"GHS","title":"Ghanaian cedi","symbol":"GHS","native":"GHS","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"1541","max_amount":"15410887"},"GTQ":{"code":"GTQ","title":"Guatemalan Quetzal","symbol":"GTQ","native":"Q","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"768","max_amount":"7680264"},"HKD":{"code":"HKD","title":"Hong Kong Dollar","symbol":"HK$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"781","max_amount":"7807950"},"HNL":{"code":"HNL","title":"Honduran Lempira","symbol":"HNL","native":"L","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"2453","max_amount":"24532344"},"HRK":{"code":"HRK","title":"Croatian Kuna","symbol":"HRK","native":"kn","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"691","max_amount":"6907950"},"HUF":{"code":"HUF","title":"Hungarian Forint","symbol":"HUF","native":"Ft","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"36510","max_amount":"365103831"},"IDR":{"code":"IDR","title":"Indonesian Rupiah","symbol":"IDR","native":"Rp","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"1617595","max_amount":"16175950000"},"ILS":{"code":"ILS","title":"Israeli New Sheqel","symbol":"₪","native":"₪","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"380","max_amount":"3799935"},"INR":{"code":"INR","title":"Indian Rupee","symbol":"₹","native":"₹","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"8377","max_amount":"83767350"},"IQD":{"code":"IQD","title":"Iraqi dinar","symbol":"IQD","native":"د.ع.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":3,"min_amount":"1298173","max_amount":"12981733280"},"IRR":{"code":"IRR","title":"Iranian rial","symbol":"IRR","native":"ريال","thousands_sep":",","decimal_sep":"\/","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"4210500","max_amount":"42105000352"},"ISK":{"code":"ISK","title":"Icelandic Króna","symbol":"ISK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"138","max_amount":"1379504"},"JMD":{"code":"JMD","title":"Jamaican Dollar","symbol":"JMD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"15504","max_amount":"155042805"},"JOD":{"code":"JOD","title":"Jordanian dinar","symbol":"JOD","native":"JOD","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":3,"min_amount":"709","max_amount":"7087040"},"JPY":{"code":"JPY","title":"Japanese Yen","symbol":"¥","native":"¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":0,"min_amount":"147","max_amount":"1465950"},"KES":{"code":"KES","title":"Kenyan Shilling","symbol":"KES","native":"Ksh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"12883","max_amount":"128828458"},"KGS":{"code":"KGS","title":"Kyrgyzstani Som","symbol":"KGS","native":"KGS","thousands_sep":" ","decimal_sep":"-","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"8403","max_amount":"84030384"},"KRW":{"code":"KRW","title":"South Korean Won","symbol":"₩","native":"₩","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":0,"min_amount":"1358","max_amount":"13581650"},"KZT":{"code":"KZT","title":"Kazakhstani Tenge","symbol":"KZT","native":"₸","thousands_sep":" ","decimal_sep":"-","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"47034","max_amount":"470338323"},"LBP":{"code":"LBP","title":"Lebanese Pound","symbol":"LBP","native":"ل.ل.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"8874340","max_amount":"88743396054"},"LKR":{"code":"LKR","title":"Sri Lankan Rupee","symbol":"LKR","native":"රු.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"29919","max_amount":"299189672"},"MAD":{"code":"MAD","title":"Moroccan Dirham","symbol":"MAD","native":"د.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"979","max_amount":"9790963"},"MDL":{"code":"MDL","title":"Moldovan Leu","symbol":"MDL","native":"MDL","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1762","max_amount":"17620290"},"MMK":{"code":"MMK","title":"Myanmar kyat","symbol":"MMK","native":"MMK","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"324796","max_amount":"3247960992"},"MNT":{"code":"MNT","title":"Mongolian Tögrög","symbol":"MNT","native":"MNT","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"345000","max_amount":"3450000346"},"MOP":{"code":"MOP","title":"Macanese pataca","symbol":"MOP","native":"MOP","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"797","max_amount":"7972623"},"MUR":{"code":"MUR","title":"Mauritian Rupee","symbol":"MUR","native":"MUR","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"4675","max_amount":"46750378"},"MVR":{"code":"MVR","title":"Maldivian Rufiyaa","symbol":"MVR","native":"MVR","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1536","max_amount":"15360378"},"MXN":{"code":"MXN","title":"Mexican Peso","symbol":"MX$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"1918","max_amount":"19178504"},"MYR":{"code":"MYR","title":"Malaysian Ringgit","symbol":"MYR","native":"RM","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"450","max_amount":"4497504"},"MZN":{"code":"MZN","title":"Mozambican Metical","symbol":"MZN","native":"MTn","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"6390","max_amount":"63899991"},"NGN":{"code":"NGN","title":"Nigerian Naira","symbol":"NGN","native":"₦","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"163595","max_amount":"1635950377"},"NIO":{"code":"NIO","title":"Nicaraguan Córdoba","symbol":"NIO","native":"C$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"3648","max_amount":"36478506"},"NOK":{"code":"NOK","title":"Norwegian Krone","symbol":"NOK","native":"kr","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1095","max_amount":"10948150"},"NPR":{"code":"NPR","title":"Nepalese Rupee","symbol":"NPR","native":"नेरू","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"13277","max_amount":"132765646"},"NZD":{"code":"NZD","title":"New Zealand Dollar","symbol":"NZ$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"168","max_amount":"1678557"},"PAB":{"code":"PAB","title":"Panamanian Balboa","symbol":"PAB","native":"B\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"99","max_amount":"990981"},"PEN":{"code":"PEN","title":"Peruvian Nuevo Sol","symbol":"PEN","native":"S\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"371","max_amount":"3708923"},"PHP":{"code":"PHP","title":"Philippine Peso","symbol":"PHP","native":"₱","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"5780","max_amount":"57795038"},"PKR":{"code":"PKR","title":"Pakistani Rupee","symbol":"PKR","native":"₨","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"27599","max_amount":"275991393"},"PLN":{"code":"PLN","title":"Polish Złoty","symbol":"PLN","native":"zł","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"393","max_amount":"3929050"},"PYG":{"code":"PYG","title":"Paraguayan Guaraní","symbol":"PYG","native":"₲","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"7505","max_amount":"75053793"},"QAR":{"code":"QAR","title":"Qatari Riyal","symbol":"QAR","native":"ر.ق.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"361","max_amount":"3613606"},"RON":{"code":"RON","title":"Romanian Leu","symbol":"RON","native":"RON","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"456","max_amount":"4560404"},"RSD":{"code":"RSD","title":"Serbian Dinar","symbol":"RSD","native":"дин.","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"10716","max_amount":"107157442"},"RUB":{"code":"RUB","title":"Russian Ruble","symbol":"RUB","native":"₽","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"8922","max_amount":"89218514"},"SAR":{"code":"SAR","title":"Saudi Riyal","symbol":"SAR","native":"ر.س.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"375","max_amount":"3753930"},"SEK":{"code":"SEK","title":"Swedish Krona","symbol":"SEK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1055","max_amount":"10554325"},"SGD":{"code":"SGD","title":"Singapore Dollar","symbol":"SGD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"133","max_amount":"1327104"},"SYP":{"code":"SYP","title":"Syrian pound","symbol":"SYP","native":"ل.س.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"251253","max_amount":"2512530370"},"THB":{"code":"THB","title":"Thai Baht","symbol":"฿","native":"฿","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"3531","max_amount":"35313038"},"TJS":{"code":"TJS","title":"Tajikistani Somoni","symbol":"TJS","native":"TJS","thousands_sep":" ","decimal_sep":";","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1048","max_amount":"10479788"},"TRY":{"code":"TRY","title":"Turkish Lira","symbol":"TRY","native":"TL","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"3310","max_amount":"33102504"},"TTD":{"code":"TTD","title":"Trinidad and Tobago Dollar","symbol":"TTD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"671","max_amount":"6710617"},"TWD":{"code":"TWD","title":"New Taiwan Dollar","symbol":"NT$","native":"NT$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"3260","max_amount":"32603904"},"TZS":{"code":"TZS","title":"Tanzanian Shilling","symbol":"TZS","native":"TSh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"268068","max_amount":"2680675731"},"UAH":{"code":"UAH","title":"Ukrainian Hryvnia","symbol":"UAH","native":"₴","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"4089","max_amount":"40888706"},"UGX":{"code":"UGX","title":"Ugandan Shilling","symbol":"UGX","native":"USh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":0,"min_amount":"3692","max_amount":"36918006"},"USD":{"code":"USD","title":"United States Dollar","symbol":"$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"100","max_amount":1000000},"UYU":{"code":"UYU","title":"Uruguayan Peso","symbol":"UYU","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"3993","max_amount":"39930412"},"UZS":{"code":"UZS","title":"Uzbekistani Som","symbol":"UZS","native":"UZS","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1246166","max_amount":"12461658197"},"VEF":{"code":"VEF","title":"Venezuelan bolívar","symbol":"VEF","native":"Bs.F.","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"362255253","max_amount":"999999999999"},"VND":{"code":"VND","title":"Vietnamese Đồng","symbol":"₫","native":"₫","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"25218","max_amount":"252175000"},"YER":{"code":"YER","title":"Yemeni Rial","symbol":"YER","native":"ر.ي.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"25035","max_amount":"250350363"},"ZAR":{"code":"ZAR","title":"South African Rand","symbol":"ZAR","native":"R","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1828","max_amount":"18278037"}} \ No newline at end of file diff --git a/TMessagesProj/src/main/assets/darkblue.attheme b/TMessagesProj/src/main/assets/darkblue.attheme index d3cac2cf7..5c400cef3 100644 --- a/TMessagesProj/src/main/assets/darkblue.attheme +++ b/TMessagesProj/src/main/assets/darkblue.attheme @@ -441,5 +441,8 @@ code_string=-7806088 code_operator=2147483647 code_number=-10887465 code_comment=2147483647 +iv_background=-16777216 +iv_backgroundGray=-14737633 +iv_navigationBackground=-16777216 table_background=177390847 table_border=436207615 diff --git a/TMessagesProj/src/main/assets/fonts/num.otf b/TMessagesProj/src/main/assets/fonts/num.otf index 320ce49b2..856f2f71e 100644 Binary files a/TMessagesProj/src/main/assets/fonts/num.otf and b/TMessagesProj/src/main/assets/fonts/num.otf differ diff --git a/TMessagesProj/src/main/assets/night.attheme b/TMessagesProj/src/main/assets/night.attheme index c259bfe71..3ad321175 100644 --- a/TMessagesProj/src/main/assets/night.attheme +++ b/TMessagesProj/src/main/assets/night.attheme @@ -466,5 +466,8 @@ code_string=-7806088 code_operator=2147483647 code_number=-10887465 code_comment=2147483647 +iv_background=-16777216 +iv_backgroundGray=-14737633 +iv_navigationBackground=-16777216 table_background=177390847 table_border=436207615 diff --git a/TMessagesProj/src/main/assets/shaders/fragment4.glsl b/TMessagesProj/src/main/assets/shaders/fragment4.glsl index 104c3a602..738446765 100644 --- a/TMessagesProj/src/main/assets/shaders/fragment4.glsl +++ b/TMessagesProj/src/main/assets/shaders/fragment4.glsl @@ -6,6 +6,7 @@ uniform sampler2D u_BackgroundTexture; uniform float f_xOffset; uniform float f_alpha; uniform mat4 world; +uniform float white; varying vec3 vNormal; varying vec2 vUV; @@ -89,5 +90,5 @@ void main() { clamp(flecksSpec * abs(vNormal.z) * (flecksNormal.z), 0.2, 0.3) - .2 ); - gl_FragColor = color * f_alpha; + gl_FragColor = mix(color * f_alpha, vec4(1.0), white); } \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java index 6afa570ed..2936edb2d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java @@ -221,6 +221,7 @@ public class AndroidUtilities { public final static int REPLACING_TAG_TYPE_BOLD = 1; public final static int REPLACING_TAG_TYPE_LINKBOLD = 2; public final static int REPLACING_TAG_TYPE_LINK_NBSP = 3; + public final static int REPLACING_TAG_TYPE_UNDERLINE = 4; public final static String TYPEFACE_ROBOTO_MEDIUM = "fonts/rmedium.ttf"; public final static String TYPEFACE_ROBOTO_MEDIUM_ITALIC = "fonts/rmediumitalic.ttf"; @@ -327,7 +328,7 @@ public class AndroidUtilities { final String HOST_NAME = "(" + IRI + "\\.)+" + GTLD; final Pattern DOMAIN_NAME = Pattern.compile("(" + HOST_NAME + "|" + IP_ADDRESS + ")"); WEB_URL = Pattern.compile( - "((?:(http|https|Http|Https|ton|tg):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "((?:(http|https|Http|Https|ton|tg|tonsite):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?" + "(?:" + DOMAIN_NAME + ")" @@ -530,13 +531,13 @@ public class AndroidUtilities { if (type == REPLACING_TAG_TYPE_LINK_NBSP) { spannableStringBuilder.replace(index, index + len, AndroidUtilities.replaceMultipleCharSequence(" ", spannableStringBuilder.subSequence(index, index + len), " ")); } - if (type == REPLACING_TAG_TYPE_LINK || type == REPLACING_TAG_TYPE_LINK_NBSP || type == REPLACING_TAG_TYPE_LINKBOLD) { + if (type == REPLACING_TAG_TYPE_LINK || type == REPLACING_TAG_TYPE_LINK_NBSP || type == REPLACING_TAG_TYPE_LINKBOLD || type == REPLACING_TAG_TYPE_UNDERLINE) { spannableStringBuilder.setSpan(new ClickableSpan() { @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); - ds.setUnderlineText(false); + ds.setUnderlineText(type == REPLACING_TAG_TYPE_UNDERLINE); if (colorKey >= 0) { ds.setColor(Theme.getColor(colorKey, resourcesProvider)); } @@ -1101,7 +1102,7 @@ public class AndroidUtilities { Linkify.addLinks(text, Linkify.PHONE_NUMBERS); } if ((mask & Linkify.WEB_URLS) != 0) { - gatherLinks(links, text, LinkifyPort.WEB_URL, new String[]{"http://", "https://", "tg://"}, sUrlMatchFilter, internalOnly); + gatherLinks(links, text, LinkifyPort.WEB_URL, new String[]{"http://", "https://", "tg://", "tonsite://"}, sUrlMatchFilter, internalOnly); } pruneOverlaps(links); if (links.size() == 0) { @@ -1124,6 +1125,7 @@ public class AndroidUtilities { if (url != null) { url = url.replaceAll("∕|⁄|%E2%81%84|%E2%88%95", "/"); } + if (Browser.isTonsitePunycode(url)) continue; text.setSpan(new URLSpan(url), link.start, link.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return true; @@ -2105,7 +2107,7 @@ public class AndroidUtilities { user.first_name = vcardData.name; user.last_name = ""; user.id = 0; - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = vcardData.vcard.toString(); reason.platform = ""; reason.reason = ""; @@ -4003,7 +4005,16 @@ public class AndroidUtilities { stringBuilder.replace(a, a + 1, " "); } } - return original; + return stringBuilder; + } else if (original instanceof SpannableString) { + if (TextUtils.indexOf(original, '\n') < 0) return original; + SpannableStringBuilder stringBuilder = new SpannableStringBuilder(original); + for (int a = 0, N = original.length(); a < N; a++) { + if (original.charAt(a) == '\n') { + stringBuilder.replace(a, a + 1, " "); + } + } + return stringBuilder; } return original.toString().replace('\n', ' '); } @@ -4734,6 +4745,21 @@ public class AndroidUtilities { } } + public static void scaleRect(RectF rect, float scale) { + scaleRect(rect, scale, rect.centerX(), rect.centerY()); + } + + public static void scaleRect(RectF rect, float scale, float px, float py) { + final float wl = px - rect.left, wr = rect.right - px; + final float ht = py - rect.top, hb = rect.bottom - py; + rect.set( + px - wl * scale, + py - ht * scale, + px + wr * scale, + py + hb * scale + ); + } + public static float cascade(float fullAnimationT, float position, float count, float waveLength) { if (count <= 0) return fullAnimationT; final float waveDuration = 1f / count * Math.min(waveLength, count); @@ -4781,6 +4807,23 @@ public class AndroidUtilities { return ""; } + public static String getCertificateSHA1Fingerprint() { + PackageManager pm = ApplicationLoader.applicationContext.getPackageManager(); + String packageName = ApplicationLoader.applicationContext.getPackageName(); + try { + PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES); + Signature[] signatures = packageInfo.signatures; + byte[] cert = signatures[0].toByteArray(); + InputStream input = new ByteArrayInputStream(cert); + CertificateFactory cf = CertificateFactory.getInstance("X509"); + X509Certificate c = (X509Certificate) cf.generateCertificate(input); + return Utilities.bytesToHex(Utilities.computeSHA1(c.getEncoded())); + } catch (Throwable ignore) { + + } + return ""; + } + private static char[] characters = new char[]{' ', ' ', '!', '"', '#', '%', '&', '\'', '(', ')', '*', ',', '-', '.', '/', ':', ';', '?', '@', '[', '\\', ']', '_', '{', '}', '¡', '§', '«', '¶', '·', '»', '¿', ';', '·', '՚', '՛', '՜', '՝', '՞', '՟', '։', '֊', '־', '׀', '׃', '׆', '׳', '״', '؉', '؊', '،', '؍', '؛', '؞', '؟', '٪', '٫', '٬', '٭', '۔', '܀', '܁', '܂', '܃', '܄', '܅', '܆', '܇', '܈', '܉', '܊', '܋', '܌', '܍', '߷', '߸', '߹', '࠰', '࠱', '࠲', '࠳', '࠴', '࠵', '࠶', '࠷', '࠸', '࠹', '࠺', '࠻', '࠼', '࠽', '࠾', '࡞', '।', '॥', '॰', '৽', '੶', '૰', '౷', '಄', '෴', '๏', '๚', '๛', '༄', '༅', '༆', '༇', '༈', '༉', '༊', '་', '༌', '།', '༎', '༏', '༐', '༑', '༒', '༔', '༺', '༻', '༼', '༽', '྅', '࿐', '࿑', '࿒', '࿓', '࿔', '࿙', '࿚', '၊', '။', '၌', '၍', '၎', '၏', '჻', '፠', '፡', '።', '፣', '፤', '፥', '፦', '፧', '፨', '᐀', '᙮', '᚛', '᚜', '᛫', '᛬', '᛭', '᜵', '᜶', '។', '៕', '៖', '៘', '៙', '៚', '᠀', '᠁', '᠂', '᠃', '᠄', '᠅', '᠆', '᠇', '᠈', '᠉', '᠊', '᥄', '᥅', '᨞', '᨟', '᪠', '᪡', '᪢', '᪣', '᪤', '᪥', '᪦', '᪨', '᪩', '᪪', '᪫', '᪬', '᪭', '᭚', '᭛', '᭜', '᭝', '᭞', '᭟', '᭠', '᯼', '᯽', '᯾', '᯿', '᰻', '᰼', '᰽', '᰾', '᰿', '᱾', '᱿', '᳀', '᳁', '᳂', '᳃', '᳄', '᳅', '᳆', '᳇', '᳓', '‐', '‑', '‒', '–', '—', '―', '‖', '‗', '‘', '’', '‚', '‛', '“', '”', '„', '‟', '†', '‡', '•', '‣', '․', '‥', '…', '‧', '‰', '‱', '′', '″', '‴', '‵', '‶', '‷', '‸', '‹', '›', '※', '‼', '‽', '‾', '‿', '⁀', '⁁', '⁂', '⁃', '⁅', '⁆', '⁇', '⁈', '⁉', '⁊', '⁋', '⁌', '⁍', '⁎', '⁏', '⁐', '⁑', '⁓', '⁔', '⁕', '⁖', '⁗', '⁘', '⁙', '⁚', '⁛', '⁜', '⁝', '⁞', '⁽', '⁾', '₍', '₎', '⌈', '⌉', '⌊', '⌋', '〈', '〉', '❨', '❩', '❪', '❫', '❬', '❭', '❮', '❯', '❰', '❱', '❲', '❳', '❴', '❵', '⟅', '⟆', '⟦', '⟧', '⟨', '⟩', '⟪', '⟫', '⟬', '⟭', '⟮', '⟯', '⦃', '⦄', '⦅', '⦆', '⦇', '⦈', '⦉', '⦊', '⦋', '⦌', '⦍', '⦎', '⦏', '⦐', '⦑', '⦒', '⦓', '⦔', '⦕', '⦖', '⦗', '⦘', '⧘', '⧙', '⧚', '⧛', '⧼', '⧽', '⳹', '⳺', '⳻', '⳼', '⳾', '⳿', '⵰', '⸀', '⸁', '⸂', '⸃', '⸄', '⸅', '⸆', '⸇', '⸈', '⸉', '⸊', '⸋', '⸌', '⸍', '⸎', '⸏', '⸐', '⸑', '⸒', '⸓', '⸔', '⸕', '⸖', '⸗', '⸘', '⸙', '⸚', '⸛', '⸜', '⸝', '⸞', '⸟', '⸠', '⸡', '⸢', '⸣', '⸤', '⸥', '⸦', '⸧', '⸨', '⸩', '⸪', '⸫', '⸬', '⸭', '⸮', '⸰', '⸱', '⸲', '⸳', '⸴', '⸵', '⸶', '⸷', '⸸', '⸹', '⸺', '⸻', '⸼', '⸽', '⸾', '⸿', '⹀', '⹁', '⹂', '⹃', '⹄', '⹅', '⹆', '⹇', '⹈', '⹉', '⹊', '⹋', '⹌', '⹍', '⹎', '⹏', '、', '。', '〃', '〈', '〉', '《', '》', '「', '」', '『', '』', '【', '】', '〔', '〕', '〖', '〗', '〘', '〙', '〚', '〛', '〜', '〝', '〞', '〟', '〰', '〽', '゠', '・', '꓾', '꓿', '꘍', '꘎', '꘏', '꙳', '꙾', '꛲', '꛳', '꛴', '꛵', '꛶', '꛷', '꡴', '꡵', '꡶', '꡷', '꣎', '꣏', '꣸', '꣹', '꣺', '꣼', '꤮', '꤯', '꥟', '꧁', '꧂', '꧃', '꧄', '꧅', '꧆', '꧇', '꧈', '꧉', '꧊', '꧋', '꧌', '꧍', '꧞', '꧟', '꩜', '꩝', '꩞', '꩟', '꫞', '꫟', '꫰', '꫱', '꯫', '﴾', '﴿', '︐', '︑', '︒', '︓', '︔', '︕', '︖', '︗', '︘', '︙', '︰', '︱', '︲', '︳', '︴', '︵', '︶', '︷', '︸', '︹', '︺', '︻', '︼', '︽', '︾', '︿', '﹀', '﹁', '﹂', '﹃', '﹄', '﹅', '﹆', '﹇', '﹈', '﹉', '﹊', '﹋', '﹌', '﹍', '﹎', '﹏', '﹐', '﹑', '﹒', '﹔', '﹕', '﹖', '﹗', '﹘', '﹙', '﹚', '﹛', '﹜', '﹝', '﹞', '﹟', '﹠', '﹡', '﹣', '﹨', '﹪', '﹫', '!', '"', '#', '%', '&', ''', '(', ')', '*', ',', '-', '.', '/', ':', ';', '?', '@', '[', '\', ']', '_', '{', '}', '⦅', '⦆', '。', '「', '」', '、', '・'}; //private static String[] longCharacters = new String[] {"𐄀", "𐄁", "𐄂", "𐎟", "𐏐", "𐕯", "𐡗", "𐤟", "𐤿", "𐩐", "𐩑", "𐩒", "𐩓", "𐩔", "𐩕", "𐩖", "𐩗", "𐩘", "𐩿", "𐫰", "𐫱", "𐫲", "𐫳", "𐫴", "𐫵", "𐫶", "𐬹", "𐬺", "𐬻", "𐬼", "𐬽", "𐬾", "𐬿", "𐮙", "𐮚", "𐮛", "𐮜", "𐽕", "𐽖", "𐽗", "𐽘", "𐽙", "𑁇", "𑁈", "𑁉", "𑁊", "𑁋", "𑁌", "𑁍", "𑂻", "𑂼", "𑂾", "𑂿", "𑃀", "𑃁", "𑅀", "𑅁", "𑅂", "𑅃", "𑅴", "𑅵", "𑇅", "𑇆", "𑇇", "𑇈", "𑇍", "𑇛", "𑇝", "𑇞", "𑇟", "𑈸", "𑈹", "𑈺", "𑈻", "𑈼", "𑈽", "𑊩", "𑑋", "𑑌", "𑑍", "𑑎", "𑑏", "𑑛", "𑑝", "𑓆", "𑗁", "𑗂", "𑗃", "𑗄", "𑗅", "𑗆", "𑗇", "𑗈", "𑗉", "𑗊", "𑗋", "𑗌", "𑗍", "𑗎", "𑗏", "𑗐", "𑗑", "𑗒", "𑗓", "𑗔", "𑗕", "𑗖", "𑗗", "𑙁", "𑙂", "𑙃", "𑙠", "𑙡", "𑙢", "𑙣", "𑙤", "𑙥", "𑙦", "𑙧", "𑙨", "𑙩", "𑙪", "𑙫", "𑙬", "𑜼", "𑜽", "𑜾", "𑠻", "𑧢", "𑨿", "𑩀", "𑩁", "𑩂", "𑩃", "𑩄", "𑩅", "𑩆", "𑪚", "𑪛", "𑪜", "𑪞", "𑪟", "𑪠", "𑪡", "𑪢", "𑱁", "𑱂", "𑱃", "𑱄", "𑱅", "𑱰", "𑱱", "𑻷", "𑻸", "𑿿", "𒑰", "𒑱", "𒑲", "𒑳", "𒑴", "𖩮", "𖩯", "𖫵", "𖬷", "𖬸", "𖬹", "𖬺", "𖬻", "𖭄", "𖺗", "𖺘", "𖺙", "𖺚", "𖿢", "𛲟", "𝪇", "𝪈", "𝪉", "𝪊", "𝪋", "𞥞", "𞥟"}; private static HashSet charactersMap; @@ -5407,11 +5450,25 @@ public class AndroidUtilities { public static boolean hasDialogOnTop(BaseFragment fragment) { if (fragment == null) return false; - if (fragment.visibleDialog != null) return true; + if (fragment.visibleDialog != null && !(fragment.visibleDialog instanceof AlertDialog) && !( + fragment.visibleDialog instanceof BottomSheet && ((BottomSheet) fragment.visibleDialog).attachedFragment != null + )) return true; if (fragment.getParentLayout() == null) return false; List globalViews = allGlobalViews(); if (globalViews == null || globalViews.isEmpty()) return false; - View lastGlobalView = globalViews.get(globalViews.size() - 1); + View lastGlobalView = null; + for (int i = globalViews.size() - 1; i >= 0; --i) { + lastGlobalView = globalViews.get(i); + if (fragment.visibleDialog instanceof AlertDialog) { + if (lastGlobalView == getRootView((((AlertDialog) fragment.visibleDialog).getContainerView()))) { + continue; + } + } + if (!( + lastGlobalView instanceof AlertDialog.AlertDialogView || + lastGlobalView instanceof PipRoundVideoView.PipFrameLayout + )) break; + } return lastGlobalView != getRootView(fragment.getParentLayout().getView()); } @@ -5464,7 +5521,7 @@ public class AndroidUtilities { canvas.drawColor(Theme.getColor(Theme.key_windowBackgroundWhite)); for (int i = 0; i < finalViews.size(); ++i) { View view = finalViews.get(i); - if (view instanceof PipRoundVideoView.PipFrameLayout || view instanceof PipRoundVideoView.PipFrameLayout || (exclude != null && exclude.contains(view))) { + if (view instanceof PipRoundVideoView.PipFrameLayout || (exclude != null && exclude.contains(view))) { continue; } @@ -5482,7 +5539,7 @@ public class AndroidUtilities { try { view.draw(canvas); } catch (Exception e) { - + FileLog.e(e); } canvas.restore(); } @@ -5559,7 +5616,7 @@ public class AndroidUtilities { private static Pattern uriParse; - private static Pattern getURIParsePattern() { + public static Pattern getURIParsePattern() { if (uriParse == null) { uriParse = Pattern.compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); // RFC 3986 B } @@ -5567,6 +5624,10 @@ public class AndroidUtilities { } public static String getHostAuthority(String uri) { + return getHostAuthority(uri, false); + } + + public static String getHostAuthority(String uri, boolean removeWWW) { if (uri == null) { return null; } @@ -5577,6 +5638,9 @@ public class AndroidUtilities { if (authority != null) { authority = authority.toLowerCase(); } + if (removeWWW && authority != null && authority.startsWith("www.")) { + authority = authority.substring(4); + } return authority; } return null; @@ -5589,6 +5653,13 @@ public class AndroidUtilities { return getHostAuthority(uri.toString()); } + public static String getHostAuthority(Uri uri, boolean removeWWW) { + if (uri == null) { + return null; + } + return getHostAuthority(uri.toString(), removeWWW); + } + public static boolean intersect1d(int x1, int x2, int y1, int y2) { return Math.max(x1, x2) > Math.min(y1, y2) && Math.max(y1, y2) > Math.min(x1, x2); } @@ -5891,27 +5962,56 @@ public class AndroidUtilities { } catch (Exception ignore) {} } - public static void applySpring(Animator anim, float stiffness, float damping) { - applySpring(anim, stiffness, damping, 1); + public static void applySpring(Animator anim, double stiffness, double damping) { + applySpring(anim, stiffness, damping, 1, 0); } - public static void applySpring(Animator anim, float stiffness, float damping, float mass) { - final double delta = damping / (2.0 * Math.sqrt(stiffness * mass)); - final double undampedFrequency = Math.sqrt(stiffness / mass); - final double omega_0 = Math.sqrt(stiffness / mass); - final double zeta = damping / (2 * Math.sqrt(stiffness * mass)); + public static void applySpring(Animator anim, double stiffness, double damping, double mass) { + applySpring(anim, stiffness, damping, mass, 0); + } + + public static void applySpring(Animator anim, double stiffness, double damping, double mass, double initialVelocity) { + final double w0 = Math.sqrt(stiffness / mass); + final double zeta = damping / (2.0 * Math.sqrt(stiffness * mass)); + final double wd, A, B; + if (zeta < 1) { + wd = w0 * Math.sqrt(1.0 - zeta * zeta); + A = 1.0; + B = (zeta * w0 + -initialVelocity) / wd; + } else { + wd = 0.0; + A = 1.0; + B = -initialVelocity + w0; + } final double threshold = 0.0025; - final double duration = Math.log(threshold) / (-zeta * omega_0); + final double duration = Math.log(threshold) / (-zeta * w0); anim.setDuration((long) (duration * 1000L)); anim.setInterpolator(new Interpolator() { @Override public float getInterpolation(float t) { - if (delta < 1) { - final double dampedFrequency = undampedFrequency * Math.sqrt(1 - delta * delta); - return (float) (1 - Math.exp(-delta * undampedFrequency * t) * - (Math.cos(dampedFrequency * t) + (delta * undampedFrequency / dampedFrequency) * Math.sin(dampedFrequency * t))); + if (zeta < 1) { + return (float) (1.0 - Math.exp(-t * zeta * w0) * (A * Math.cos(wd * t) + B * Math.sin(wd * t))); } else { - final double a = -delta * undampedFrequency * t; + return (float) (1.0 - (A + B * t) * Math.exp(-t * w0)); + } + } + }); + } + + public static void applySpring(Animator anim, float stiffness, float damping, float mass, long overrideDuration) { + final double zeta = damping / (2 * Math.sqrt(stiffness * mass)); + final double omega = Math.sqrt(stiffness / mass); + final double threshold = 0.0025; + anim.setDuration(overrideDuration); + anim.setInterpolator(new Interpolator() { + @Override + public float getInterpolation(float t) { + if (zeta < 1) { + final double dampedFrequency = omega * Math.sqrt(1 - zeta * zeta); + return (float) (1 - Math.exp(-zeta * omega * t) * + (Math.cos(dampedFrequency * t) + (zeta * omega / dampedFrequency) * Math.sin(dampedFrequency * t))); + } else { + final double a = -zeta * omega * t; return (float) (1 - (1 + a) * Math.exp(a)); } } @@ -5942,9 +6042,9 @@ public class AndroidUtilities { if (segments.size() >= 3 && "s".equals(segments.get(1))) { return false; } else if (segments.size() > 1) { - final String segment = segments.get(1); - if (TextUtils.isEmpty(segment)) return false; - switch (segment) { + final String segment0 = segments.get(0); + if (TextUtils.isEmpty(segment0)) return false; + switch (segment0) { case "joinchat": case "login": case "addstickers": @@ -5961,6 +6061,9 @@ public class AndroidUtilities { case "addlist": return false; } + final String segment1 = segments.get(1); + if (TextUtils.isEmpty(segment1)) return false; + if (segment1.matches("^\\d+$")) return false; return true; } else if (segments.size() == 1) { return !TextUtils.isEmpty(uri.getQueryParameter("startapp")); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java index 5f0d8d1d1..1dadb79a7 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java @@ -638,5 +638,4 @@ public class ApplicationLoader extends Application { public BaseFragment openSettings(int n) { return null; } - } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java b/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java index d97777a8c..407b28a7c 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java @@ -192,7 +192,7 @@ public class BillingController implements PurchasesUpdatedListener, BillingClien return; } - if ((paymentPurpose instanceof TLRPC.TL_inputStorePaymentGiftPremium || paymentPurpose instanceof TLRPC.TL_inputStorePaymentStars) && !checkedConsume) { + if ((paymentPurpose instanceof TLRPC.TL_inputStorePaymentGiftPremium || paymentPurpose instanceof TLRPC.TL_inputStorePaymentStarsTopup || paymentPurpose instanceof TLRPC.TL_inputStorePaymentStarsGift) && !checkedConsume) { queryPurchases(BillingClient.ProductType.INAPP, (billingResult, list) -> { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { Runnable callback = () -> launchBillingFlow(activity, accountInstance, paymentPurpose, productDetails, subscriptionUpdateParams, true); @@ -244,7 +244,8 @@ public class BillingController implements PurchasesUpdatedListener, BillingClien if (subscriptionUpdateParams != null) { flowParams.setSubscriptionUpdateParams(subscriptionUpdateParams); } - int responseCode = billingClient.launchBillingFlow(activity, flowParams.build()).getResponseCode(); + final BillingResult result = billingClient.launchBillingFlow(activity, flowParams.build()); + int responseCode = result.getResponseCode(); if (responseCode != BillingClient.BillingResponseCode.OK) { FileLog.d("Billing: Launch Error: " + responseCode + ", " + obfuscatedAccountId + ", " + obfuscatedData); } @@ -281,41 +282,40 @@ public class BillingController implements PurchasesUpdatedListener, BillingClien if (!purchase.isAcknowledged()) { requestingTokens.add(purchase.getPurchaseToken()); - retrievePurpose(purchase, opayload, payload -> { - TLRPC.TL_payments_assignPlayMarketTransaction req = new TLRPC.TL_payments_assignPlayMarketTransaction(); - req.receipt = new TLRPC.TL_dataJSON(); - req.receipt.data = purchase.getOriginalJson(); - req.purpose = payload.second; + TLRPC.TL_payments_assignPlayMarketTransaction req = new TLRPC.TL_payments_assignPlayMarketTransaction(); + req.receipt = new TLRPC.TL_dataJSON(); + req.receipt.data = purchase.getOriginalJson(); + req.purpose = opayload.second; - final AlertDialog progressDialog = new AlertDialog(ApplicationLoader.applicationContext, AlertDialog.ALERT_TYPE_SPINNER); - AndroidUtilities.runOnUIThread(() -> progressDialog.showDelayed(500)); + final AlertDialog progressDialog = new AlertDialog(ApplicationLoader.applicationContext, AlertDialog.ALERT_TYPE_SPINNER); + AndroidUtilities.runOnUIThread(() -> progressDialog.showDelayed(500)); - AccountInstance acc = payload.first; - acc.getConnectionsManager().sendRequest(req, (response, error) -> { - AndroidUtilities.runOnUIThread(progressDialog::dismiss); + AccountInstance acc = opayload.first; + acc.getConnectionsManager().sendRequest(req, (response, error) -> { + AndroidUtilities.runOnUIThread(progressDialog::dismiss); - requestingTokens.remove(purchase.getPurchaseToken()); + requestingTokens.remove(purchase.getPurchaseToken()); - if (response instanceof TLRPC.Updates) { - acc.getMessagesController().processUpdates((TLRPC.Updates) response, false); + if (response instanceof TLRPC.Updates) { + acc.getMessagesController().processUpdates((TLRPC.Updates) response, false); - for (String productId : purchase.getProducts()) { - Consumer listener = resultListeners.remove(productId); - if (listener != null) { - listener.accept(billing); - } + for (String productId : purchase.getProducts()) { + Consumer listener = resultListeners.remove(productId); + if (listener != null) { + listener.accept(billing); } - - consumeGiftPurchase(purchase, req.purpose); - } else if (error != null) { - if (onCanceled != null) { - onCanceled.run(); - onCanceled = null; - } - NotificationCenter.getGlobalInstance().postNotificationNameOnUIThread(NotificationCenter.billingConfirmPurchaseError, req, error); } - }, ConnectionsManager.RequestFlagFailOnServerErrors | ConnectionsManager.RequestFlagFailOnServerErrorsExceptFloodWait | ConnectionsManager.RequestFlagInvokeAfter); - }); + + consumeGiftPurchase(purchase, req.purpose); + BillingUtilities.cleanupPurchase(purchase); + } else if (error != null) { + if (onCanceled != null) { + onCanceled.run(); + onCanceled = null; + } + NotificationCenter.getGlobalInstance().postNotificationNameOnUIThread(NotificationCenter.billingConfirmPurchaseError, req, error); + } + }, ConnectionsManager.RequestFlagFailOnServerErrors | ConnectionsManager.RequestFlagFailOnServerErrorsExceptFloodWait | ConnectionsManager.RequestFlagInvokeAfter); } else { consumeGiftPurchase(purchase, opayload.second); } @@ -323,93 +323,6 @@ public class BillingController implements PurchasesUpdatedListener, BillingClien } } - private boolean retrievePurpose(Purchase purchase, Pair payload, Utilities.Callback> whenPayload) { - if (payload == null || payload.first == null) { - FileLog.d("retrievePurpose: payload or account is null"); - return false; - } - if (payload.second != null) { - FileLog.d("retrievePurpose: already has purpose"); - whenPayload.run(payload); - return true; - } - if (purchase == null || purchase.getProducts().isEmpty()) { - FileLog.d("retrievePurpose: no products found for purpose!"); - whenPayload.run(payload); - return false; - } else { - final int currentAccount = payload.first.getCurrentAccount(); - final String productId = purchase.getProducts().get(0); - - if (productId == null) { - FileLog.d("retrievePurpose: first product is null!"); - whenPayload.run(payload); - return false; - } - - ArrayList options = StarsController.getInstance(currentAccount).getOptionsCached(); - if (options == null) { - ConnectionsManager.getInstance(currentAccount).sendRequest(new TLRPC.TL_payments_getStarsTopupOptions(), (res, err) -> AndroidUtilities.runOnUIThread(() -> { - ArrayList loadedOptions = new ArrayList<>(); - if (res instanceof TLRPC.Vector) { - TLRPC.Vector vector = (TLRPC.Vector) res; - for (Object object : vector.objects) { - if (object instanceof TLRPC.TL_starsTopupOption) { - TLRPC.TL_starsTopupOption option = (TLRPC.TL_starsTopupOption) object; - loadedOptions.add(option); - } - } - } else if (err != null) { - FileLog.d("retrievePopup: getStarsTopupOptions gives error! " + err.code + ": " + err.text); - } - - TLRPC.TL_starsTopupOption foundOption = null; - for (int i = 0; i < loadedOptions.size(); ++i) { - if (productId.equals(loadedOptions.get(i).store_product)) { - foundOption = loadedOptions.get(i); - break; - } - } - - if (foundOption != null) { - TLRPC.TL_inputStorePaymentStars purpose = new TLRPC.TL_inputStorePaymentStars(); - purpose.amount = foundOption.amount; - purpose.currency = foundOption.currency; - purpose.stars = foundOption.stars; - FileLog.d("retrievePurpose: found stars option of " + productId + " from stars loaded options!"); - whenPayload.run(new Pair(payload.first, purpose)); - } else { - FileLog.d("retrievePurpose: failed to find option of " + productId + " from stars loaded options"); - whenPayload.run(payload); - } - })); - return true; - } else { - TLRPC.TL_starsTopupOption foundOption = null; - for (int i = 0; i < options.size(); ++i) { - if (productId.equals(options.get(i).store_product)) { - foundOption = options.get(i); - break; - } - } - - if (foundOption != null) { - TLRPC.TL_inputStorePaymentStars purpose = new TLRPC.TL_inputStorePaymentStars(); - purpose.amount = foundOption.amount; - purpose.currency = foundOption.currency; - purpose.stars = foundOption.stars; - FileLog.d("retrievePurpose: found stars option of " + productId + " from stars options!"); - whenPayload.run(new Pair(payload.first, purpose)); - return true; - } else { - FileLog.d("retrievePurpose: failed to find option of " + productId + " from stars options"); - whenPayload.run(payload); - return false; - } - } - } - } - /** * All consumable purchases must be consumed. For us it is a gift. * Without confirmation the user will not be able to buy the product again. @@ -417,7 +330,8 @@ public class BillingController implements PurchasesUpdatedListener, BillingClien private void consumeGiftPurchase(Purchase purchase, TLRPC.InputStorePaymentPurpose purpose) { if (purpose instanceof TLRPC.TL_inputStorePaymentGiftPremium || purpose instanceof TLRPC.TL_inputStorePaymentPremiumGiftCode - || purpose instanceof TLRPC.TL_inputStorePaymentStars + || purpose instanceof TLRPC.TL_inputStorePaymentStarsTopup + || purpose instanceof TLRPC.TL_inputStorePaymentStarsGift || purpose instanceof TLRPC.TL_inputStorePaymentPremiumGiveaway) { billingClient.consumeAsync( ConsumeParams.newBuilder() @@ -510,18 +424,19 @@ public class BillingController implements PurchasesUpdatedListener, BillingClien public static String getResponseCodeString(int code) { switch (code) { - case -3: return "SERVICE_TIMEOUT"; - case -2: return "FEATURE_NOT_SUPPORTED"; - case -1: return "SERVICE_DISCONNECTED"; - case 0: return "OK"; - case 1: return "USER_CANCELED"; - case 2: return "SERVICE_UNAVAILABLE"; - case 3: return "BILLING_UNAVAILABLE"; - case 4: return "ITEM_UNAVAILABLE"; - case 5: return "DEVELOPER_ERROR"; - case 6: return "ERROR"; - case 7: return "ITEM_ALREADY_OWNED"; - case 8: return "ITEM_NOT_OWNED"; + case BillingClient.BillingResponseCode.SERVICE_TIMEOUT: return "SERVICE_TIMEOUT"; + case BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED: return "FEATURE_NOT_SUPPORTED"; + case BillingClient.BillingResponseCode.SERVICE_DISCONNECTED: return "SERVICE_DISCONNECTED"; + case BillingClient.BillingResponseCode.OK: return "OK"; + case BillingClient.BillingResponseCode.USER_CANCELED: return "USER_CANCELED"; + case BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE: return "SERVICE_UNAVAILABLE"; + case BillingClient.BillingResponseCode.BILLING_UNAVAILABLE: return "BILLING_UNAVAILABLE"; + case BillingClient.BillingResponseCode.ITEM_UNAVAILABLE: return "ITEM_UNAVAILABLE"; + case BillingClient.BillingResponseCode.DEVELOPER_ERROR: return "DEVELOPER_ERROR"; + case BillingClient.BillingResponseCode.ERROR: return "ERROR"; + case BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED: return "ITEM_ALREADY_OWNED"; + case BillingClient.BillingResponseCode.ITEM_NOT_OWNED: return "ITEM_NOT_OWNED"; + case BillingClient.BillingResponseCode.NETWORK_ERROR: return "NETWORK_ERROR"; } return null; } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java index 51212a0de..420f4106a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java @@ -1782,7 +1782,7 @@ public class ChatObject { } public static boolean canSendAsPeers(TLRPC.Chat chat) { - return ChatObject.isChannel(chat) && chat.megagroup && (ChatObject.isPublic(chat) || chat.has_geo || chat.has_link); + return ChatObject.isChannel(chat) && (!chat.megagroup && chat.signatures && ChatObject.hasAdminRights(chat) && ChatObject.canWriteToChat(chat) || chat.megagroup && (ChatObject.isPublic(chat) || chat.has_geo || chat.has_link)); } public static boolean isChannel(TLRPC.Chat chat) { @@ -1943,6 +1943,9 @@ public class ChatObject { if (chat != null && chat.admin_rights != null && chat.admin_rights.anonymous) { return invertChannel ? -chat.id : chat.id; } + if (chat != null && ChatObject.isChannelAndNotMegaGroup(chat) && !chat.signatures) { + return invertChannel ? -chat.id : chat.id; + } return UserConfig.getInstance(UserConfig.selectedAccount).getClientUserId(); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java b/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java index 201dfe5c6..00644f532 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java @@ -309,7 +309,7 @@ public class CodeHighlighting { for (int i = 0; i < patterns.length; ++i) { if (patterns[i].pattern != null && "REST".equals(patterns[i].pattern.patternSource)) { if (result == null) { - result = new ArrayList<>(); + result = new ArrayList(); Collections.addAll(result, patterns); } result.remove(patterns[i]); @@ -447,7 +447,7 @@ public class CodeHighlighting { } private static Match matchPattern(TokenPattern pattern, int pos, String text) { - Matcher matcher = pattern.pattern.getPattern(). matcher(text); + Matcher matcher = pattern.pattern.getPattern().matcher(text); matcher.region(pos, text.length()); if (!matcher.find()) { return null; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java b/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java index 64197de0a..adfd4c505 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java @@ -610,6 +610,11 @@ public class DownloadController extends BaseController implements NotificationCe } return true; } + if (messageObject.sponsoredMedia != null) { + return true; + } + if (messageObject.isHiddenSensitive()) + return false; return canDownloadMedia(messageObject.messageOwner) == 1; } @@ -793,7 +798,7 @@ public class DownloadController extends BaseController implements NotificationCe } else { maxSize = preset.sizes[typeToIndex(type)]; } - long size = MessageObject.getMessageSize(message); + long size = MessageObject.getMediaSize(media); if (isVideo && preset.preloadVideo && size > maxSize && maxSize > 2 * 1024 * 1024) { return (mask & type) != 0 ? 2 : 0; } else { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java b/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java index 3f581487b..ff87d77ea 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java @@ -270,7 +270,7 @@ public class Emoji { } public static abstract class EmojiDrawable extends Drawable { - boolean fullSize = false; + public boolean fullSize = false; int placeholderColor = 0x10000000; public boolean isLoaded() { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java index 9b0d0c80f..608bbaf45 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java @@ -706,7 +706,7 @@ public class FileLoader extends BaseController { for (FileLoadOperation operation : loadOperationPaths.values()) { if (operation == null || operation.requestInfos == null) continue; for (FileLoadOperation.RequestInfo requestInfo : operation.requestInfos) { - if (requestInfo.requestToken == requestToken) { + if (requestInfo != null && requestInfo.requestToken == requestToken) { return operation; } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java index 1ed983c25..01a98db85 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java @@ -1,13 +1,14 @@ package org.telegram.messenger; import android.os.SystemClock; -import android.util.Log; import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Stories.StoriesController; import java.util.ArrayList; import java.util.Arrays; @@ -70,7 +71,20 @@ public class FileRefController extends BaseController { } public static String getKeyForParentObject(Object parentObject) { - if (parentObject instanceof TL_stories.StoryItem) { + if (parentObject instanceof StoriesController.BotPreview) { + StoriesController.BotPreview storyItem = (StoriesController.BotPreview) parentObject; + if (storyItem.list == null) { + FileLog.d("failed request reference can't find list in botpreview"); + return null; + } + if (storyItem.media.document != null) { + return "botstory_doc_" + storyItem.media.document.id; + } else if (storyItem.media.photo != null) { + return "botstory_photo_" + storyItem.media.photo.id; + } else { + return "botstory_" + storyItem.id; + } + } else if (parentObject instanceof TL_stories.StoryItem) { TL_stories.StoryItem storyItem = (TL_stories.StoryItem) parentObject; if (storyItem.dialogId == 0) { FileLog.d("failed request reference can't find dialogId"); @@ -81,8 +95,8 @@ public class FileRefController extends BaseController { return "premium_promo"; } else if (parentObject instanceof TLRPC.TL_availableReaction) { return "available_reaction_" + ((TLRPC.TL_availableReaction) parentObject).reaction; - } else if (parentObject instanceof TLRPC.BotInfo) { - TLRPC.BotInfo botInfo = (TLRPC.BotInfo) parentObject; + } else if (parentObject instanceof TL_bots.BotInfo) { + TL_bots.BotInfo botInfo = (TL_bots.BotInfo) parentObject; return "bot_info_" + botInfo.user_id; } else if (parentObject instanceof TLRPC.TL_attachMenuBot) { TLRPC.TL_attachMenuBot bot = (TLRPC.TL_attachMenuBot) parentObject; @@ -137,7 +151,21 @@ public class FileRefController extends BaseController { if (BuildVars.LOGS_ENABLED) { FileLog.d("start loading request reference parent " + getObjectString(parentObject) + " args = " + args[0]); } - if (args[0] instanceof TL_stories.TL_storyItem) { + if (args[0] instanceof StoriesController.BotPreview) { + StoriesController.BotPreview storyItem = (StoriesController.BotPreview) args[0]; + if (storyItem.media.document != null) { + location = new TLRPC.TL_inputDocumentFileLocation(); + location.id = storyItem.media.document.id; + locationKey = "botstory_doc_" + storyItem.media.document.id; + } else if (storyItem.media.photo != null) { + location = new TLRPC.TL_inputPhotoFileLocation(); + location.id = storyItem.media.photo.id; + locationKey = "botstory_photo_" + storyItem.media.photo.id; + } else { + locationKey = "botstory_" + storyItem.id; + location = new TLRPC.TL_inputDocumentFileLocation(); + } + } else if (args[0] instanceof TL_stories.TL_storyItem) { TL_stories.TL_storyItem storyItem = (TL_stories.TL_storyItem) args[0]; locationKey = "story_" + storyItem.id; location = new TLRPC.TL_inputDocumentFileLocation(); @@ -401,7 +429,18 @@ public class FileRefController extends BaseController { } private void requestReferenceFromServer(Object parentObject, String locationKey, String parentKey, Object[] args) { - if (parentObject instanceof TL_stories.StoryItem) { + if (parentObject instanceof StoriesController.BotPreview) { + StoriesController.BotPreview storyItem = (StoriesController.BotPreview) parentObject; + if (storyItem.list == null) { + sendErrorToObject(args, 0); + return; + } + storyItem.list.requestReference(storyItem, newStoryItem -> { + Utilities.stageQueue.postRunnable(() -> { + onRequestComplete(locationKey, parentKey, newStoryItem, null, true, false); + }); + }); + } else if (parentObject instanceof TL_stories.StoryItem) { TL_stories.StoryItem storyItem = (TL_stories.StoryItem) parentObject; TL_stories.TL_stories_getStoriesByID req = new TL_stories.TL_stories_getStoriesByID(); req.peer = getMessagesController().getInputPeer(storyItem.dialogId); @@ -424,8 +463,8 @@ public class FileRefController extends BaseController { TLRPC.TL_messages_getAvailableReactions req = new TLRPC.TL_messages_getAvailableReactions(); req.hash = 0; getConnectionsManager().sendRequest(req, (response, error) -> onRequestComplete(locationKey, parentKey, response, error, true, false)); - } else if (parentObject instanceof TLRPC.BotInfo) { - TLRPC.BotInfo botInfo = (TLRPC.BotInfo) parentObject; + } else if (parentObject instanceof TL_bots.BotInfo) { + TL_bots.BotInfo botInfo = (TL_bots.BotInfo) parentObject; TLRPC.TL_users_getFullUser req = new TLRPC.TL_users_getFullUser(); req.id = getMessagesController().getInputUser(botInfo.user_id); getConnectionsManager().sendRequest(req, (response, error) -> onRequestComplete(locationKey, parentKey, response, error, true, false)); @@ -909,7 +948,14 @@ public class FileRefController extends BaseController { needReplacement = new boolean[1]; } requester.completed = true; - if (response instanceof TLRPC.messages_Messages) { + if (response instanceof StoriesController.BotPreview) { + StoriesController.BotPreview newStoryItem = (StoriesController.BotPreview) response; + if (newStoryItem.media.document != null) { + result = getFileReference(newStoryItem.media.document, requester.location, needReplacement, locationReplacement); + } else if (newStoryItem.media.photo != null) { + result = getFileReference(newStoryItem.media.photo, requester.location, needReplacement, locationReplacement); + } + } else if (response instanceof TLRPC.messages_Messages) { TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; if (!res.messages.isEmpty()) { for (int i = 0, size3 = res.messages.size(); i < size3; i++) { @@ -1020,7 +1066,7 @@ public class FileRefController extends BaseController { getMessagesController().putUsers(usersFull.users, false); getMessagesController().putChats(usersFull.chats, false); TLRPC.UserFull userFull = usersFull.full_user; - TLRPC.BotInfo botInfo = userFull.bot_info; + TL_bots.BotInfo botInfo = userFull.bot_info; if (botInfo != null) { getMessagesStorage().updateUserInfo(userFull, true); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java index f041026ef..0765b1486 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java @@ -32,7 +32,6 @@ import android.os.Environment; import android.os.SystemClock; import android.provider.MediaStore; import android.text.TextUtils; -import android.util.Log; import android.util.Pair; import android.util.SparseArray; @@ -101,7 +100,6 @@ import java.util.zip.GZIPInputStream; * firstframe - return firstframe for Lottie or Video animation * ignoreOrientation - do not extract EXIF orientation and do not apply it to an imagereceiver * exif — check exif contents of invert/orientation - * bnb — airbnb canvas lottie impl */ public class ImageLoader { @@ -1022,11 +1020,10 @@ public class ImageLoader { cacheOptions.firstFrame = true; } } - final boolean airbnb = cacheImage.filter != null && cacheImage.filter.contains("bnb"); if (compressed) { - lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, decompressGzip(cacheImage.finalFilePath), w, h, cacheOptions, limitFps, null, fitzModifier, airbnb); + lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, decompressGzip(cacheImage.finalFilePath), w, h, cacheOptions, limitFps, null, fitzModifier); } else { - lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, w, h, cacheOptions, limitFps, null, fitzModifier, airbnb); + lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, w, h, cacheOptions, limitFps, null, fitzModifier); } } if (lastFrameBitmap || firstFrameBitmap) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java index 0bf248556..855e04fd6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java @@ -2659,8 +2659,8 @@ public class ImageReceiver implements NotificationCenter.NotificationCenterDeleg public void setEmojiPaused(boolean paused) { if (emojiPaused == paused) return; emojiPaused = paused; - RLottieDrawable rLottieDrawable = getLottieAnimation(); allowStartLottieAnimation = !paused; + RLottieDrawable rLottieDrawable = getLottieAnimation(); if (rLottieDrawable != null) { if (paused) { rLottieDrawable.stop(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java b/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java index 1e361830c..6be30c044 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java @@ -6,7 +6,7 @@ public class LinkifyPort { private static String IANA_TOP_LEVEL_DOMAINS = "(?:" - + "(?:aaa|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active" + + "(?:aaa|adnl|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active" + "|actor|ads|adult|aeg|aero|afl|agency|aig|airforce|airtel|allfinanz|alsace|amica|amsterdam" + "|android|apartments|app|apple|aquarelle|aramco|archi|army|arpa|arte|asia|associates" + "|attorney|auction|audio|auto|autos|axa|azure|a[cdefgilmoqrstuwxz])" @@ -67,7 +67,7 @@ public class LinkifyPort { + "|sky|skype|sncf|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting" + "|srl|stada|starhub|statoil|stc|stcgroup|stockholm|studio|study|style|sucks|supplies" + "|supply|support|surf|surgery|suzuki|swatch|swiss|sydney|systems|s[abcdeghijklmnortuvxyz])" - + "|(?:tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica" + + "|(?:ton|tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica" + "|temasek|tennis|thd|theater|theatre|tickets|tienda|tips|tires|tirol|today|tokyo|tools" + "|top|toray|toshiba|tours|town|toyota|toys|trade|trading|training|travel|trust|tui|t[cdfghjklmnortvwz])" + "|(?:ubs|university|uno|uol|u[agksyz])" @@ -168,13 +168,13 @@ public class LinkifyPort { private static final String LABEL_CHAR = "a-zA-Z0-9" + UCS_CHAR_FIXED; private static final String IRI_LABEL = "[" + LABEL_CHAR + "](?:[" + LABEL_CHAR + "_\\-]{0,61}[" + LABEL_CHAR + "]){0,1}"; private static String STRICT_TLD = "(?:" + IANA_TOP_LEVEL_DOMAINS + "|" + PUNYCODE_TLD + ")"; - private static final String STRICT_HOST_NAME = "(?:(?:" + IRI_LABEL + "\\.)+" + STRICT_TLD + ")"; + public static final String STRICT_HOST_NAME = "(?:(?:" + IRI_LABEL + "\\.)+" + STRICT_TLD + ")"; private static final String STRICT_DOMAIN_NAME = "(?:" + STRICT_HOST_NAME + "|" + IP_ADDRESS_STRING + ")"; private static final String TLD = "(" + PUNYCODE_TLD + "|" + "[" + TLD_CHAR + "]{2,63}" + ")"; private static final String HOST_NAME = "(" + IRI_LABEL + "\\.)+" + TLD; private static final String DOMAIN_NAME_STR = "(" + HOST_NAME + "|" + IP_ADDRESS_STRING + ")"; private static final Pattern DOMAIN_NAME = Pattern.compile(DOMAIN_NAME_STR); - private static final String PROTOCOL = "(?i:http|https|ton|tg)://"; + private static final String PROTOCOL = "(?i:http|https|ton|tg|tonsite)://"; private static final String WORD_BOUNDARY = "(?:\\b|$|^)"; private static final String USER_INFO = "(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java index d8d925279..75e8bc352 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java @@ -1394,13 +1394,22 @@ public class LocaleController { if (TextUtils.isEmpty(key)) { return "LOC_ERR:" + key; } - int resourceId = ApplicationLoader.applicationContext.getResources().getIdentifier(key, "string", ApplicationLoader.applicationContext.getPackageName()); + int resourceId = getStringResId(key); if (resourceId != 0) { return getString(key, resourceId); } return getServerString(key); } + public static int getStringResId(String key) { + return ApplicationLoader.applicationContext.getResources().getIdentifier(key, "string", ApplicationLoader.applicationContext.getPackageName()); + } + + public static String nullable(String val) { + if (val == null || val.startsWith("LOC_ERR")) return null; + return val; + } + public static String getPluralString(String key, int plural) { if (key == null || key.length() == 0 || getInstance().currentPluralRules == null) { return "LOC_ERR:" + key; @@ -1515,7 +1524,7 @@ public class LocaleController { if (BuildVars.USE_CLOUD_STRINGS && fallback != null) { value = getInstance().localeValues.get(fallback); } - if (value == null) { + if (value == null && res != 0) { try { value = ApplicationLoader.applicationContext.getString(res); } catch (Exception e) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java index 3b7e20502..4a8d75f9d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java @@ -5006,6 +5006,36 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener, return ""; } + public static File createFileInCache(String name, String ext) { + File f = null; + try { + f = AndroidUtilities.getSharingDirectory(); + f.mkdirs(); + if (AndroidUtilities.isInternalUri(Uri.fromFile(f))) { + return null; + } + int count = 0; + do { + f = AndroidUtilities.getSharingDirectory(); + if (count == 0) { + f = new File(f, name); + } else { + int lastDotIndex = name.lastIndexOf("."); + if (lastDotIndex > 0) { + f = new File(f, name.substring(0, lastDotIndex) + " (" + count + ")" + name.substring(lastDotIndex)); + } else { + f = new File(f, name + " (" + count + ")"); + } + } + count++; + } while (f.exists()); + return f; + } catch (Exception e) { + FileLog.e(e); + } + return null; + } + public static String copyFileToCache(Uri uri, String ext) { return copyFileToCache(uri, ext, -1); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java index 781b0fc0b..1380c6222 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java @@ -58,6 +58,7 @@ import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.EmojiThemes; import org.telegram.ui.ActionBar.Theme; @@ -387,9 +388,11 @@ public class MediaDataController extends BaseController { loaded = false; hints.clear(); inlineBots.clear(); + webapps.clear(); AndroidUtilities.runOnUIThread(() -> { getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); }); drafts.clear(); @@ -3960,7 +3963,7 @@ public class MediaDataController extends BaseController { } }; if (isSaved) { - loadReplyMessagesForMessages(messageObjects, dialogId, 0, lastReplyMessageId, done, guid); + loadReplyMessagesForMessages(messageObjects, dialogId, 0, lastReplyMessageId, done, guid, null); } else { done.run(); } @@ -4322,7 +4325,7 @@ public class MediaDataController extends BaseController { if (res != null && res.messages != null) { messagesCount = res.messages.size(); } - FileLog.d("process load media messagesCount " + messagesCount + " did " + dialogId + " topicId " + topicId + " count = " + count + " max_id=" + max_id + " min_id=" + min_id + " type = " + type + " cache = " + fromCache + " classGuid = " + classGuid); + FileLog.d("process load media messagesCount " + messagesCount + " did " + dialogId + " topicId " + topicId + " count = " + count + " max_id=" + max_id + " min_id=" + min_id + " type = " + type + " cache = " + fromCache + " classGuid = " + classGuid + " topReached=" + topReached); } if (fromCache != 0 && res != null && res.messages != null && ((res.messages.isEmpty() && min_id == 0) || (res.messages.size() <= 1 && min_id != 0)) && !DialogObject.isEncryptedDialog(dialogId)) { if (fromCache == 2) { @@ -4821,6 +4824,7 @@ public class MediaDataController extends BaseController { public ArrayList hints = new ArrayList<>(); public ArrayList inlineBots = new ArrayList<>(); + public ArrayList webapps = new ArrayList<>(); boolean loaded; boolean loading; @@ -5030,6 +5034,7 @@ public class MediaDataController extends BaseController { getMessagesStorage().getStorageQueue().postRunnable(() -> { ArrayList hintsNew = new ArrayList<>(); ArrayList inlineBotsNew = new ArrayList<>(); + ArrayList webappsNew = new ArrayList<>(); ArrayList users = new ArrayList<>(); ArrayList chats = new ArrayList<>(); long selfUserId = getUserConfig().getClientUserId(); @@ -5058,6 +5063,8 @@ public class MediaDataController extends BaseController { hintsNew.add(peer); } else if (type == 1) { inlineBotsNew.add(peer); + } else if (type == 2) { + webappsNew.add(peer); } } cursor.dispose(); @@ -5075,10 +5082,12 @@ public class MediaDataController extends BaseController { loaded = true; hints = hintsNew; inlineBots = inlineBotsNew; + webapps = webappsNew; buildShortcuts(); getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); - if (Math.abs(getUserConfig().lastHintsSyncTime - (int) (System.currentTimeMillis() / 1000)) >= 24 * 60 * 60) { + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); + if (Math.abs(getUserConfig().lastHintsSyncTime - (int) (System.currentTimeMillis() / 1000)) >= 24 * 60 * 60 || BuildVars.DEBUG_PRIVATE_VERSION) { loadHints(false); } }); @@ -5096,6 +5105,7 @@ public class MediaDataController extends BaseController { req.groups = false; req.channels = false; req.bots_inline = true; + req.bots_app = true; req.offset = 0; req.limit = 20; getConnectionsManager().sendRequest(req, (response, error) -> { @@ -5109,6 +5119,9 @@ public class MediaDataController extends BaseController { if (category.category instanceof TLRPC.TL_topPeerCategoryBotsInline) { inlineBots = category.peers; getUserConfig().botRatingLoadTime = (int) (System.currentTimeMillis() / 1000); + } else if (category.category instanceof TLRPC.TL_topPeerCategoryBotsApp) { + webapps = category.peers; + getUserConfig().webappRatingLoadTime = (int) (System.currentTimeMillis() / 1000); } else { hints = category.peers; long selfUserId = getUserConfig().getClientUserId(); @@ -5126,6 +5139,7 @@ public class MediaDataController extends BaseController { buildShortcuts(); getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); getMessagesStorage().getStorageQueue().postRunnable(() -> { try { getMessagesStorage().getDatabase().executeFast("DELETE FROM chat_hints WHERE 1").stepThis().dispose(); @@ -5138,6 +5152,8 @@ public class MediaDataController extends BaseController { TLRPC.TL_topPeerCategoryPeers category = topPeers.categories.get(a); if (category.category instanceof TLRPC.TL_topPeerCategoryBotsInline) { type = 1; + } else if (category.category instanceof TLRPC.TL_topPeerCategoryBotsApp) { + type = 2; } else { type = 0; } @@ -5180,8 +5196,10 @@ public class MediaDataController extends BaseController { public void clearTopPeers() { hints.clear(); inlineBots.clear(); + webapps.clear(); getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); getMessagesStorage().getStorageQueue().postRunnable(() -> { try { getMessagesStorage().getDatabase().executeFast("DELETE FROM chat_hints WHERE 1").stepThis().dispose(); @@ -5192,7 +5210,7 @@ public class MediaDataController extends BaseController { buildShortcuts(); } - public void increaseInlineRaiting(long uid) { + public void increaseInlineRating(long uid) { if (!getUserConfig().suggestContacts) { return; } @@ -5233,8 +5251,48 @@ public class MediaDataController extends BaseController { getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); } + public void increaseWebappRating(long uid) { + final TLRPC.User user = getMessagesController().getUser(uid); + if (user == null || !user.bot) return; + + int dt; + if (getUserConfig().webappRatingLoadTime != 0) { + dt = Math.max(1, ((int) (System.currentTimeMillis() / 1000)) - getUserConfig().webappRatingLoadTime); + } else { + dt = 60; + } + + TLRPC.TL_topPeer peer = null; + for (int a = 0; a < inlineBots.size(); a++) { + TLRPC.TL_topPeer p = inlineBots.get(a); + if (p.peer.user_id == uid) { + peer = p; + break; + } + } + if (peer == null) { + peer = new TLRPC.TL_topPeer(); + peer.peer = new TLRPC.TL_peerUser(); + peer.peer.user_id = uid; + webapps.add(peer); + } + peer.rating += Math.exp(dt / getMessagesController().ratingDecay); + Collections.sort(inlineBots, (lhs, rhs) -> { + if (lhs.rating > rhs.rating) { + return -1; + } else if (lhs.rating < rhs.rating) { + return 1; + } + return 0; + }); + if (webapps.size() > 20) { + webapps.remove(webapps.size() - 1); + } + savePeer(uid, 2, peer.rating); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); + } + public void removeInline(long dialogId) { - TLRPC.TL_topPeerCategoryPeers category = null; for (int a = 0; a < inlineBots.size(); a++) { if (inlineBots.get(a).peer.user_id == dialogId) { inlineBots.remove(a); @@ -5251,6 +5309,23 @@ public class MediaDataController extends BaseController { } } + public void removeWebapp(long dialogId) { + for (int a = 0; a < webapps.size(); a++) { + if (webapps.get(a).peer.user_id == dialogId) { + webapps.remove(a); + TLRPC.TL_contacts_resetTopPeerRating req = new TLRPC.TL_contacts_resetTopPeerRating(); + req.category = new TLRPC.TL_topPeerCategoryBotsApp(); + req.peer = getMessagesController().getInputPeer(dialogId); + getConnectionsManager().sendRequest(req, (response, error) -> { + + }); + deletePeer(dialogId, 2); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); + return; + } + } + } + public void removePeer(long uid) { for (int a = 0; a < hints.size(); a++) { if (hints.get(a).peer.user_id == uid) { @@ -5942,9 +6017,10 @@ public class MediaDataController extends BaseController { } } - public void loadReplyMessagesForMessages(ArrayList messages, long dialogId, int mode, long threadMessageId, Runnable callback, int classGuid) { + public void loadReplyMessagesForMessages(ArrayList messages, long dialogId, int mode, long threadMessageId, Runnable callback, int classGuid, Timer logLogger) { final boolean scheduled = mode == ChatActivity.MODE_SCHEDULED; if (DialogObject.isEncryptedDialog(dialogId)) { + Timer.Task t1 = Timer.start(logLogger, "loadReplyMessagesForMessages: (encrypted) finding messages to load"); ArrayList replyMessages = new ArrayList<>(); LongSparseArray> replyMessageRandomOwners = new LongSparseArray<>(); for (int a = 0; a < messages.size(); a++) { @@ -5971,8 +6047,11 @@ public class MediaDataController extends BaseController { } return; } - + Timer.done(t1); + Timer.Task t2 = Timer.start(logLogger, "loadReplyMessagesForMessages (encrypted) storageQueue.postRunnable"); getMessagesStorage().getStorageQueue().postRunnable(() -> { + Timer.done(t2); + Timer.Task t3 = Timer.start(logLogger, "loadReplyMessagesForMessages: (encrypted) loading those messages from storage"); try { ArrayList loadedMessages = new ArrayList<>(); SQLiteCursor cursor = getMessagesStorage().getDatabase().queryFinalized(String.format(Locale.US, "SELECT m.data, m.mid, m.date, r.random_id FROM randoms_v2 as r INNER JOIN messages_v2 as m ON r.mid = m.mid AND r.uid = m.uid WHERE r.random_id IN(%s)", TextUtils.join(",", replyMessages))); @@ -6015,7 +6094,12 @@ public class MediaDataController extends BaseController { } } } - AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.replyMessagesDidLoad, dialogId, loadedMessages, null)); + Timer.done(t3); + Timer.Task t4 = Timer.start(logLogger, "loadReplyMessagesForMessages (encrypted) runOnUIThread: posting notification"); + AndroidUtilities.runOnUIThread(() -> { + Timer.done(t4); + getNotificationCenter().postNotificationName(NotificationCenter.replyMessagesDidLoad, dialogId, loadedMessages, null); + }); if (callback != null) { callback.run(); } @@ -6027,6 +6111,7 @@ public class MediaDataController extends BaseController { LongSparseArray>> replyMessageOwners = new LongSparseArray<>(); LongSparseArray> dialogReplyMessagesIds = new LongSparseArray<>(); LongSparseArray> messagesWithUnknownStories = null; + Timer.Task t2 = Timer.start(logLogger, "loadReplyMessagesForMessages: filling replies from the same array"); for (int a = 0; a < messages.size(); a++) { MessageObject messageObject = messages.get(a); if (messageObject == null) { @@ -6054,6 +6139,8 @@ public class MediaDataController extends BaseController { } } } + Timer.done(t2); + Timer.Task t3 = Timer.start(logLogger, "loadReplyMessagesForMessages: gathering ids of missing reply data"); for (int a = 0; a < messages.size(); a++) { MessageObject messageObject = messages.get(a); if (messageObject == null) { @@ -6070,6 +6157,7 @@ public class MediaDataController extends BaseController { array = new ArrayList<>(); messagesWithUnknownStories.put(storyDialogId, array); } + Timer.log(logLogger, "+story did=" + storyDialogId + " at "+(messageObject.type == MessageObject.TYPE_STORY ? "forwarded" : "mentioned")+" #" + messageObject.getId()); array.add(messageObject); } else { long storyDialogId = DialogObject.getPeerDialogId(messageObject.messageOwner.media.peer); @@ -6086,6 +6174,7 @@ public class MediaDataController extends BaseController { array = new ArrayList<>(); messagesWithUnknownStories.put(storyDialogId, array); } + Timer.log(logLogger, "+story did=" + storyDialogId + " at replied #" + messageObject.getId()); array.add(messageObject); } else { long storyDialogId = DialogObject.getPeerDialogId(messageObject.messageOwner.reply_to.peer); @@ -6140,6 +6229,7 @@ public class MediaDataController extends BaseController { } } arrayList.add(messageObject); + Timer.log(logLogger, "+message did=" + -channelId + " mid="+messageId+" at replied #" + messageObject.getId()); } if ( messageObject.type == MessageObject.TYPE_TEXT && @@ -6162,6 +6252,7 @@ public class MediaDataController extends BaseController { array = new ArrayList<>(); messagesWithUnknownStories.put(storyDialogId, array); } + Timer.log(logLogger, "+story did=" + storyDialogId + " at webpage of #" + messageObject.getId()); array.add(messageObject); } else { long storyDialogId = DialogObject.getPeerDialogId(attrStory.peer); @@ -6171,6 +6262,7 @@ public class MediaDataController extends BaseController { } } } + Timer.done(t3); if (replyMessageOwners.isEmpty() && messagesWithUnknownStories == null) { if (callback != null) { callback.run(); @@ -6180,8 +6272,10 @@ public class MediaDataController extends BaseController { LongSparseArray> finalMessagesWithUnknownStories = messagesWithUnknownStories; + Timer.Task t4 = Timer.start(logLogger, "loadReplyMessagesForMessages: storageQueue.postRunnable"); AtomicInteger requestsCount = new AtomicInteger(2); getMessagesStorage().getStorageQueue().postRunnable(() -> { + Timer.done(t4); try { getMessagesController().getStoriesController().fillMessagesWithStories(finalMessagesWithUnknownStories, () -> { if (requestsCount.decrementAndGet() == 0) { @@ -6189,8 +6283,9 @@ public class MediaDataController extends BaseController { AndroidUtilities.runOnUIThread(callback); } } - }, classGuid); + }, classGuid, logLogger); if (replyMessageOwners.isEmpty()) { + Timer.log(logLogger, "loadReplyMessagesForMessages: empty replyMessageOwners"); if (requestsCount.decrementAndGet() == 0) { if (callback != null) { AndroidUtilities.runOnUIThread(callback); @@ -6198,6 +6293,9 @@ public class MediaDataController extends BaseController { } return; } + + Timer.Task t5 = Timer.start(logLogger, "loadReplyMessagesForMessages: getting reply messages"); + ArrayList result = new ArrayList<>(); ArrayList users = new ArrayList<>(); ArrayList chats = new ArrayList<>(); @@ -6257,13 +6355,16 @@ public class MediaDataController extends BaseController { broadcastReplyMessages(result, replyMessageOwners, users, chats, dialogId, true); if (!dialogReplyMessagesIds.isEmpty()) { + Timer.done(t5); for (int a = 0, N = dialogReplyMessagesIds.size(); a < N; a++) { long channelId = dialogReplyMessagesIds.keyAt(a); if (scheduled) { + Timer.Task t6 = Timer.start(logLogger, "loadReplyMessagesForMessages: load scheduled"); TLRPC.TL_messages_getScheduledMessages req = new TLRPC.TL_messages_getScheduledMessages(); req.peer = getMessagesController().getInputPeer(dialogId); req.id = dialogReplyMessagesIds.valueAt(a); int reqId = getConnectionsManager().sendRequest(req, (response, error) -> { + Timer.done(t6); if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; for (int i = 0; i < messagesRes.messages.size(); i++) { @@ -6317,6 +6418,8 @@ public class MediaDataController extends BaseController { getMessagesStorage().putUsersAndChats(messagesRes.users, messagesRes.chats, true, true); saveReplyMessages(replyMessageOwners, messagesRes.messages, scheduled); } + } else { + Timer.log(logLogger, "getScheduledMessages error: " + error.code + " " + error.text); } if (requestsCount.decrementAndGet() == 0) { if (callback != null) { @@ -6328,10 +6431,12 @@ public class MediaDataController extends BaseController { getConnectionsManager().bindRequestToGuid(reqId, classGuid); } } else if (channelId != 0) { + Timer.Task t6 = Timer.start(logLogger, "loadReplyMessagesForMessages: load channel messages"); TLRPC.TL_channels_getMessages req = new TLRPC.TL_channels_getMessages(); req.channel = getMessagesController().getInputChannel(channelId); req.id = dialogReplyMessagesIds.valueAt(a); int reqId = getConnectionsManager().sendRequest(req, (response, error) -> { + Timer.done(t6); if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; for (int i = 0; i < messagesRes.messages.size(); i++) { @@ -6345,6 +6450,8 @@ public class MediaDataController extends BaseController { broadcastReplyMessages(messagesRes.messages, replyMessageOwners, messagesRes.users, messagesRes.chats, dialogId, false); getMessagesStorage().putUsersAndChats(messagesRes.users, messagesRes.chats, true, true); saveReplyMessages(replyMessageOwners, messagesRes.messages, scheduled); + } else { + Timer.log(logLogger, "channels.getMessages error: " + error.code + " " + error.text); } if (requestsCount.decrementAndGet() == 0) { if (callback != null) { @@ -6356,9 +6463,11 @@ public class MediaDataController extends BaseController { getConnectionsManager().bindRequestToGuid(reqId, classGuid); } } else { + Timer.Task t6 = Timer.start(logLogger, "loadReplyMessagesForMessages: load messages"); TLRPC.TL_messages_getMessages req = new TLRPC.TL_messages_getMessages(); req.id = dialogReplyMessagesIds.valueAt(a); int reqId = getConnectionsManager().sendRequest(req, (response, error) -> { + Timer.done(t6); if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; for (int i = 0; i < messagesRes.messages.size(); i++) { @@ -6371,6 +6480,8 @@ public class MediaDataController extends BaseController { broadcastReplyMessages(messagesRes.messages, replyMessageOwners, messagesRes.users, messagesRes.chats, dialogId, false); getMessagesStorage().putUsersAndChats(messagesRes.users, messagesRes.chats, true, true); saveReplyMessages(replyMessageOwners, messagesRes.messages, scheduled); + } else { + Timer.log(logLogger, "messages.getMessages error: " + error.code + " " + error.text); } if (requestsCount.decrementAndGet() == 0) { if (callback != null) { @@ -6384,6 +6495,7 @@ public class MediaDataController extends BaseController { } } } else { + Timer.done(t5); if (requestsCount.decrementAndGet() == 0) { if (callback != null) { AndroidUtilities.runOnUIThread(callback); @@ -7721,7 +7833,7 @@ public class MediaDataController extends BaseController { //---------------- DRAFT END ---------------- - private HashMap botInfos = new HashMap<>(); + private HashMap botInfos = new HashMap<>(); private LongSparseArray> botDialogKeyboards = new LongSparseArray<>(); private HashMap botKeyboards = new HashMap<>(); private LongSparseArray botKeyboardsByMids = new LongSparseArray(); @@ -7813,8 +7925,8 @@ public class MediaDataController extends BaseController { }); } - private TLRPC.BotInfo loadBotInfoInternal(long uid, long dialogId) throws SQLiteException { - TLRPC.BotInfo botInfo = null; + private TL_bots.BotInfo loadBotInfoInternal(long uid, long dialogId) throws SQLiteException { + TL_bots.BotInfo botInfo = null; SQLiteCursor cursor = getMessagesStorage().getDatabase().queryFinalized(String.format(Locale.US, "SELECT info FROM bot_info_v2 WHERE uid = %d AND dialogId = %d", uid, dialogId)); if (cursor.next()) { NativeByteBuffer data; @@ -7822,7 +7934,7 @@ public class MediaDataController extends BaseController { if (!cursor.isNull(0)) { data = cursor.byteBufferValue(0); if (data != null) { - botInfo = TLRPC.BotInfo.TLdeserialize(data, data.readInt32(false), false); + botInfo = TL_bots.BotInfo.TLdeserialize(data, data.readInt32(false), false); data.reuse(); } } @@ -7831,9 +7943,16 @@ public class MediaDataController extends BaseController { return botInfo; } + public TL_bots.BotInfo getBotInfoCached(long uid, long dialogId) { + return botInfos.get(uid + "_" + dialogId); + } + public void loadBotInfo(long uid, long dialogId, boolean cache, int classGuid) { + loadBotInfo(uid, dialogId, cache, classGuid, null); + } + public void loadBotInfo(long uid, long dialogId, boolean cache, int classGuid, Utilities.Callback whenReceived) { if (cache) { - TLRPC.BotInfo botInfo = botInfos.get(uid + "_" + dialogId); + TL_bots.BotInfo botInfo = botInfos.get(uid + "_" + dialogId); if (botInfo != null) { getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, classGuid); return; @@ -7841,9 +7960,20 @@ public class MediaDataController extends BaseController { } getMessagesStorage().getStorageQueue().postRunnable(() -> { try { - TLRPC.BotInfo botInfo = loadBotInfoInternal(uid, dialogId); + TL_bots.BotInfo botInfo = loadBotInfoInternal(uid, dialogId); if (botInfo != null) { - AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, classGuid)); + AndroidUtilities.runOnUIThread(() -> { + if (whenReceived != null) { + whenReceived.run(botInfo); + } + getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, classGuid); + }); + } else if (whenReceived != null) { + AndroidUtilities.runOnUIThread(() -> { + if (whenReceived != null) { + whenReceived.run(null); + } + }); } } catch (Exception e) { FileLog.e(e); @@ -7918,7 +8048,7 @@ public class MediaDataController extends BaseController { } } - public void putBotInfo(long dialogId, TLRPC.BotInfo botInfo) { + public void putBotInfo(long dialogId, TL_bots.BotInfo botInfo) { if (botInfo == null) { return; } @@ -7942,14 +8072,14 @@ public class MediaDataController extends BaseController { } public void updateBotInfo(long dialogId, TLRPC.TL_updateBotCommands update) { - TLRPC.BotInfo botInfo = botInfos.get(update.bot_id + "_" + dialogId); + TL_bots.BotInfo botInfo = botInfos.get(update.bot_id + "_" + dialogId); if (botInfo != null) { botInfo.commands = update.commands; getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, 0); } getMessagesStorage().getStorageQueue().postRunnable(() -> { try { - TLRPC.BotInfo info = loadBotInfoInternal(update.bot_id, dialogId); + TL_bots.BotInfo info = loadBotInfoInternal(update.bot_id, dialogId); if (info != null) { info.commands = update.commands; } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java deleted file mode 100644 index 6e7421ae5..000000000 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.telegram.messenger; - -public class MessageLoaderLogger { - - final long dialogId; - final int count; - final int loadIndex; - final long startTime; - - long moveToStorageQueueTime; - long getFromDatabaseTime; - long moveToStageQueueTime; - long stageQueueProccessing; - - boolean reload; - - public MessageLoaderLogger(long dialogId, int loadIndex, int count) { - this.dialogId = dialogId; - this.count = count; - this.loadIndex = loadIndex; - startTime = System.currentTimeMillis(); - } - - public void logStorageQueuePost() { - moveToStorageQueueTime = System.currentTimeMillis() - startTime; - } - - public void logStorageProccessing() { - getFromDatabaseTime = System.currentTimeMillis() - startTime; - } - - public void logStageQueuePost() { - moveToStageQueueTime = System.currentTimeMillis() - startTime; - } - - public void reload() { - reload = true; - } - - public void logStageQueueProcessing() { - stageQueueProccessing = System.currentTimeMillis() - startTime; - } - - public void finish() { - long totalTime = System.currentTimeMillis() - startTime; - FileLog.d("MessageLoaderLogger dialogId=" + dialogId + " index=" + loadIndex + " count=" + count + " " + - " moveToStorageQueueTime=" + moveToStorageQueueTime + - " getFromDatabaseTime=" + getFromDatabaseTime + - " moveToStageQueueTime=" + moveToStageQueueTime + - " stageQueueProccessing=" + stageQueueProccessing + - " wasReload=" + reload + " totalTime=" + totalTime - ); - } -} diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java index 744ff92bf..d75f5e8d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java @@ -33,6 +33,7 @@ import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.text.util.Linkify; import android.util.Base64; +import android.util.Log; import androidx.annotation.NonNull; import androidx.collection.LongSparseArray; @@ -75,6 +76,8 @@ import org.telegram.ui.Components.spoilers.SpoilerEffect; import org.telegram.ui.PeerColorActivity; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stories.StoriesController; +import org.telegram.ui.web.BotWebViewContainer; import java.io.BufferedReader; import java.io.File; @@ -131,6 +134,7 @@ public class MessageObject { public static final int TYPE_JOINED_CHANNEL = 27; // recommendations list public static final int TYPE_GIVEAWAY_RESULTS = 28; public static final int TYPE_PAID_MEDIA = 29; // messageMediaPaidMedia with stars + public static final int TYPE_GIFT_STARS = 30; public int localType; public String localName; @@ -141,8 +145,10 @@ public class MessageObject { public boolean localSupergroup; public Boolean cachedIsSupergroup; public boolean localEdit; + public StoriesController.StoriesList parentStoriesList; public TLRPC.Message messageOwner; public TL_stories.StoryItem storyItem; + public StoriesController.UploadingStory uploadingStory; public TLRPC.Document emojiAnimatedSticker; public Long emojiAnimatedStickerId; public boolean isTopicMainMessage; @@ -222,6 +228,7 @@ public class MessageObject { public String sponsoredInfo, sponsoredAdditionalInfo; public String sponsoredButtonText; public TLRPC.TL_peerColor sponsoredColor; + public TLRPC.MessageMedia sponsoredMedia; public boolean sponsoredCanReport; public boolean replyTextEllipsized; @@ -287,7 +294,7 @@ public class MessageObject { private boolean hasUnwrappedEmoji; public int emojiOnlyCount, animatedEmojiCount; - private int totalAnimatedEmojiCount; + public int totalAnimatedEmojiCount; private boolean layoutCreated; private int generatedWithMinSize; private float generatedWithDensity; @@ -488,7 +495,54 @@ public class MessageObject { } public boolean hasMediaSpoilers() { - return !isRepostPreview && (messageOwner.media != null && messageOwner.media.spoiler || needDrawBluredPreview()); + return !isRepostPreview && (messageOwner.media != null && messageOwner.media.spoiler || needDrawBluredPreview()) || isHiddenSensitive(); + } + + public Boolean isSensitiveCached; + public boolean isSensitive() { + if (isSensitiveCached != null) return isSensitiveCached; + if (messageOwner == null) return false; + if (!canBeSensitive()) return false; + if (!messageOwner.restriction_reason.isEmpty()) { + for (int i = 0; i < messageOwner.restriction_reason.size(); ++i) { + TLRPC.RestrictionReason reason = messageOwner.restriction_reason.get(i); + if ( + "sensitive".equals(reason.reason) && + ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) + ) { + return isSensitiveCached = true; + } + } + } + if (getDialogId() < 0) { + final TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-getDialogId()); + if (chat != null && chat.restriction_reason != null) { + for (int i = 0; i < chat.restriction_reason.size(); ++i) { + TLRPC.RestrictionReason reason = chat.restriction_reason.get(i); + if ( + "sensitive".equals(reason.reason) && + ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) + ) { + return isSensitiveCached = true; + } + } + } + } + return isSensitiveCached = false; + } + + public boolean isHiddenSensitive() { + return isSensitive() && !MessagesController.getInstance(currentAccount).showSensitiveContent(); + } + + public boolean canBeSensitive() { + return messageOwner != null && ( + type == TYPE_PHOTO || + type == TYPE_VIDEO || + type == TYPE_FILE || + type == TYPE_GIF || + type == TYPE_ROUND_VIDEO + ) && !sendPreview && !isRepostPreview && !isOutOwner() && messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT; } public boolean shouldDrawReactions() { @@ -760,6 +814,7 @@ public class MessageObject { public int padTop, padBottom; public int charactersOffset; public int charactersEnd; + public int originalWidth; public int height; public int heightByOffset; public byte directionFlags; @@ -2414,6 +2469,12 @@ public class MessageObject { } else { messageText = replaceWithLink(LocaleController.getString("EventLogToggledSignaturesOff", R.string.EventLogToggledSignaturesOff), "un1", fromUser); } + } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionToggleSignatureProfiles) { + if (((TLRPC.TL_channelAdminLogEventActionToggleSignatureProfiles) event.action).value) { + messageText = replaceWithLink(LocaleController.getString(R.string.EventLogToggledSignaturesProfilesOn), "un1", fromUser); + } else { + messageText = replaceWithLink(LocaleController.getString(R.string.EventLogToggledSignaturesProfilesOff), "un1", fromUser); + } } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionToggleInvites) { if (((TLRPC.TL_channelAdminLogEventActionToggleInvites) event.action).new_value) { messageText = replaceWithLink(LocaleController.getString("EventLogToggledInvitesOn", R.string.EventLogToggledInvitesOn), "un1", fromUser); @@ -2695,9 +2756,12 @@ public class MessageObject { } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) { TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite action = (TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) event.action; if (action.via_chatlist) { - messageText = replaceWithLink(LocaleController.getString("ActionInviteUserFolder", R.string.ActionInviteUserFolder), "un1", fromUser); + messageText = replaceWithLink(LocaleController.getString(ChatObject.isChannelAndNotMegaGroup(chat) ? R.string.ActionInviteChannelUserFolder : R.string.ActionInviteUserFolder), "un1", fromUser); } else { - messageText = replaceWithLink(LocaleController.getString("ActionInviteUser", R.string.ActionInviteUser), "un1", fromUser); + messageText = replaceWithLink(LocaleController.getString(ChatObject.isChannelAndNotMegaGroup(chat) ? R.string.ActionInviteChannelUser : R.string.ActionInviteUser), "un1", fromUser); + } + if (action.invite != null && !TextUtils.isEmpty(action.invite.link)) { + messageText = TextUtils.concat(messageText, " ", action.invite.link); } } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionToggleNoForwards) { TLRPC.TL_channelAdminLogEventActionToggleNoForwards action = (TLRPC.TL_channelAdminLogEventActionToggleNoForwards) event.action; @@ -3538,6 +3602,7 @@ public class MessageObject { } message.reactions = reactions; message.flags |= 1048576; + FileLog.d("msg#"+message.id+" updateReactions out=" + message.out); } public boolean hasReactions() { @@ -4144,6 +4209,16 @@ public class MessageObject { messageText = replaceWithLink(messageText, "un1", fromObject); } } + } else if (messageOwner.action instanceof TLRPC.TL_messageActionPaymentRefunded) { + TLRPC.TL_messageActionPaymentRefunded action = (TLRPC.TL_messageActionPaymentRefunded) messageOwner.action; + long did = DialogObject.getPeerDialogId(action.peer); + TLObject who; + if (did >= 0) { + who = getUser(users, sUsers, did); + } else { + who = getChat(chats, sChats, -did); + } + messageText = StarsIntroActivity.replaceStars(replaceWithLink(LocaleController.formatString(R.string.ActionRefunded, action.currency + " " + LocaleController.formatNumber(action.total_amount, ',')), "un1", who)); } else if (messageOwner.action instanceof TLRPC.TL_messageActionChatAddUser) { long singleUserId = messageOwner.action.user_id; if (singleUserId == 0 && messageOwner.action.users.size() == 1) { @@ -4200,9 +4275,9 @@ public class MessageObject { } } else if (messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByLink) { if (isOut()) { - messageText = LocaleController.getString("ActionInviteYou", R.string.ActionInviteYou); + messageText = LocaleController.getString(R.string.ActionInviteYou); } else { - messageText = replaceWithLink(LocaleController.getString("ActionInviteUser", R.string.ActionInviteUser), "un1", fromObject); + messageText = replaceWithLink(LocaleController.getString(R.string.ActionInviteUser), "un1", fromObject); } } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiveawayLaunch) { TLRPC.Chat chat = messageOwner.peer_id != null && messageOwner.peer_id.channel_id != 0 ? getChat(chats, sChats, messageOwner.peer_id.channel_id) : null; @@ -4245,6 +4320,24 @@ public class MessageObject { stringBuilder.append(LocaleController.formatPluralString(isChannel ? "BoostingGiveawayServiceUndistributed" : "BoostingGiveawayServiceUndistributedGroup", giveawayResults.unclaimed_count)); } messageText = stringBuilder; + } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftStars) { + if (fromObject instanceof TLRPC.User && ((TLRPC.User) fromObject).self) { + TLRPC.User user = getUser(users, sUsers, messageOwner.peer_id.user_id); + messageText = replaceWithLink(AndroidUtilities.replaceTags(LocaleController.getString(R.string.ActionGiftOutbound)), "un1", user); + } else if (fromObject instanceof TLRPC.User && UserObject.isService(((TLRPC.User) fromObject).id)) { + messageText = TextUtils.replace(AndroidUtilities.replaceTags(LocaleController.getString(R.string.ActionGiftInbound)), new String[] {"un1"}, new CharSequence[]{ LocaleController.getString(R.string.StarsTransactionUnknown) }); + } else { + messageText = replaceWithLink(AndroidUtilities.replaceTags(LocaleController.getString(R.string.ActionGiftInbound)), "un1", fromObject); + } + int i = messageText.toString().indexOf("un2"); + if (i != -1) { + SpannableStringBuilder sb = SpannableStringBuilder.valueOf(messageText); + CharSequence price = BillingController.getInstance().formatCurrency(messageOwner.action.amount, messageOwner.action.currency); + if ((messageOwner.action.flags & 1) != 0) { + price = String.format("%.2f", (messageOwner.action.cryptoAmount * Math.pow(10, -9))) + " " + messageOwner.action.cryptoCurrency + " (~ " + price + ")"; + } + messageText = sb.replace(i, i + 3, price); + } } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftCode && ((TLRPC.TL_messageActionGiftCode) messageOwner.action).boost_peer != null) { messageText = LocaleController.getString("BoostingReceivedGiftNoName", R.string.BoostingReceivedGiftNoName); } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || messageOwner.action instanceof TLRPC.TL_messageActionGiftCode) { @@ -4748,11 +4841,11 @@ public class MessageObject { } } else { isRestrictedMessage = false; - String restrictionReason = MessagesController.getRestrictionReason(messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { messageText = restrictionReason; isRestrictedMessage = true; - } else if (!isMediaEmpty()) { + } else if (!isMediaEmpty() && !isSponsored()) { // messageText = getMediaTitle(getMedia(messageOwner)); // I'm afraid doing this if (getMedia(messageOwner) instanceof TLRPC.TL_messageMediaGiveaway) { boolean isChannel; @@ -5004,6 +5097,9 @@ public class MessageObject { if (messageObject == null || messageObject.messageOwner == null) { return null; } + if (messageObject.sponsoredMedia != null) { + return messageObject.sponsoredMedia; + } return getMedia(messageObject.messageOwner); } @@ -5063,7 +5159,9 @@ public class MessageObject { int oldType = type; type = 1000; isRoundVideoCached = 0; - if (channelJoined) { + if (isSponsored()) { + type = TYPE_TEXT; + } else if (channelJoined) { type = TYPE_JOINED_CHANNEL; channelJoinedExpanded = MessagesController.getInstance(currentAccount).getMainSettings().getBoolean("c" + getDialogId() + "_rec", true); } else if (messageOwner instanceof TLRPC.TL_message || messageOwner instanceof TLRPC.TL_messageForwarded_old2) { @@ -5190,6 +5288,9 @@ public class MessageObject { } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || messageOwner.action instanceof TLRPC.TL_messageActionGiftCode) { contentType = 1; type = TYPE_GIFT_PREMIUM; + } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftStars) { + contentType = 1; + type = TYPE_GIFT_STARS; } else if (messageOwner.action instanceof TLRPC.TL_messageActionChatEditPhoto || messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) { contentType = 1; type = TYPE_ACTION_PHOTO; @@ -5545,6 +5646,27 @@ public class MessageObject { } } } + } else if (sponsoredMedia != null) { + TLRPC.Photo photo = sponsoredMedia.photo; + TLRPC.Document document = sponsoredMedia.document; + if (photo != null) { + if (!update || photoThumbs == null) { + photoThumbs = new ArrayList<>(photo.sizes); + } else if (!photoThumbs.isEmpty()) { + updatePhotoSizeLocations(photoThumbs, photo.sizes); + } + photoThumbsObject = photo; + } else if (document != null) { + if (isDocumentHasThumb(document)) { + if (!update) { + photoThumbs = new ArrayList<>(); + photoThumbs.addAll(document.thumbs); + } else if (photoThumbs != null && !photoThumbs.isEmpty()) { + updatePhotoSizeLocations(photoThumbs, document.thumbs); + } + photoThumbsObject = document; + } + } } else if (sponsoredPhoto != null) { if (!update || photoThumbs == null) { photoThumbs = new ArrayList<>(sponsoredPhoto.sizes); @@ -6515,10 +6637,11 @@ public class MessageObject { } else if (run.urlEntity instanceof TLRPC.TL_messageEntityUrl) { hasUrls = true; String lowerCase = url.toLowerCase(); - url = !lowerCase.contains("://") ? "http://" + url : url; + url = !lowerCase.contains("://") ? (BotWebViewContainer.isTonsite(url) ? "tonsite://" : "http://") + url : url; if (url != null) { url = url.replaceAll("∕|⁄|%E2%81%84|%E2%88%95", "/"); } + if (Browser.isTonsitePunycode(url)) continue; spannable.setSpan(new URLSpanBrowser(url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (run.urlEntity instanceof TLRPC.TL_messageEntityBankCard) { hasUrls = true; @@ -6535,6 +6658,7 @@ public class MessageObject { if (url != null) { url = url.replaceAll("∕|⁄|%E2%81%84|%E2%88%95", "/"); } + if (Browser.isTonsitePunycode(url)) continue; spannable.setSpan(new URLSpanReplacement(url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (run.urlEntity instanceof TLRPC.TL_messageEntityMentionName) { spannable.setSpan(new URLSpanUserMention("" + ((TLRPC.TL_messageEntityMentionName) run.urlEntity).user_id, t, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -6841,6 +6965,7 @@ public class MessageObject { maxWidth -= AndroidUtilities.dp(15); } + int textLayoutOriginalWidth; StaticLayout textLayout; TextPaint paint; @@ -6852,6 +6977,7 @@ public class MessageObject { CharSequence text = messageText; try { + textLayoutOriginalWidth = maxWidth; textLayout = makeStaticLayout(text, paint, maxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, emojiOnlyCount > 0); } catch (Exception e) { FileLog.e(e); @@ -6897,6 +7023,7 @@ public class MessageObject { }, text.length() - readMore.length(), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); try { + textLayoutOriginalWidth = maxWidth; textLayout = makeStaticLayout(text, paint, maxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, emojiOnlyCount > 0); } catch (Exception e) { FileLog.e(e); @@ -7024,7 +7151,10 @@ public class MessageObject { } else { sb = new SpannableString(blockText.toString()); } + block.originalWidth = textLayoutOriginalWidth = blockMaxWidth; textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, emojiOnlyCount > 0); + } else { + block.originalWidth = textLayoutOriginalWidth; } block.textLayout = textLayout; @@ -7061,6 +7191,7 @@ public class MessageObject { } else { sb = SpannableString.valueOf(blockText); } + block.originalWidth = blockMaxWidth; block.textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, false); block.height = block.textLayout.getHeight();//Math.max(block.height, block.textLayout.getLineBottom(block.textLayout.getLineCount() - 1)); @@ -7305,11 +7436,9 @@ public class MessageObject { width -= AndroidUtilities.dp(15); } - final float lineSpacing = 1f; - final float lineAdd = 0; - Layout.Alignment align = Layout.Alignment.ALIGN_NORMAL; //type == TYPE_EMOJIS && isOut() ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL; + int textLayoutOriginalWidth; try { - textLayout = makeStaticLayout(text, textPaint, width, 1f, 0f, false); + textLayout = makeStaticLayout(text, textPaint, textLayoutOriginalWidth = width, 1f, 0f, false); } catch (Exception e) { FileLog.e(e); return; @@ -7353,6 +7482,7 @@ public class MessageObject { }, text.length() - readMore.length(), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); try { + textLayoutOriginalWidth = width; textLayout = makeStaticLayout(text, textPaint, width, 1f, 0f, false); } catch (Exception e) { FileLog.e(e); @@ -7471,7 +7601,10 @@ public class MessageObject { } else { sb = new SpannableString(text.subSequence(range.start, range.end)); } + block.originalWidth = textLayoutOriginalWidth = blockMaxWidth; textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, 0f, false); + } else { + block.originalWidth = textLayoutOriginalWidth; } block.textLayout = textLayout; @@ -7495,6 +7628,7 @@ public class MessageObject { } else { sb = SpannableString.valueOf(text.subSequence(startCharacter, endCharacter)); } + block.originalWidth = blockMaxWidth; block.textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, 0f, false); block.height = block.textLayout.getHeight(); @@ -7672,7 +7806,7 @@ public class MessageObject { } } TLRPC.Chat chat = messageOwner.peer_id != null && messageOwner.peer_id.channel_id != 0 ? getChat(null, null, messageOwner.peer_id.channel_id) : null; - if (!messageOwner.out || !(messageOwner.from_id instanceof TLRPC.TL_peerUser) && (!(messageOwner.from_id instanceof TLRPC.TL_peerChannel) || ChatObject.isChannel(chat) && !chat.megagroup) || messageOwner.post) { + if (!messageOwner.out || !(messageOwner.from_id instanceof TLRPC.TL_peerUser) && (!(messageOwner.from_id instanceof TLRPC.TL_peerChannel) || ChatObject.isChannelAndNotMegaGroup(chat)) || messageOwner.post) { return isOutOwnerCached = false; } if (messageOwner.fwd_from == null) { @@ -7686,6 +7820,9 @@ public class MessageObject { } public boolean needDrawAvatar() { + if (type == TYPE_JOINED_CHANNEL) { + return false; + } if (isRepostPreview) { return true; } @@ -7698,7 +7835,12 @@ public class MessageObject { if (searchType != 0) { return true; } - return !isSponsored() && (isFromUser() || isFromGroup() || eventId != 0 || messageOwner.fwd_from != null && messageOwner.fwd_from.saved_from_peer != null); + boolean channelSignatureProfiles = false; + if (getDialogId() < 0) { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-getDialogId()); + channelSignatureProfiles = (chat != null && chat.signature_profiles); + } + return !isSponsored() && (isFromUser() || isFromGroup() || channelSignatureProfiles || eventId != 0 || messageOwner.fwd_from != null && messageOwner.fwd_from.saved_from_peer != null); } private boolean needDrawAvatarInternal() { @@ -8814,7 +8956,7 @@ public class MessageObject { return dp(82); } else if (type == 10) { return dp(30); - } else if (type == TYPE_ACTION_PHOTO || type == TYPE_GIFT_PREMIUM || type == TYPE_GIFT_PREMIUM_CHANNEL || type == TYPE_SUGGEST_PHOTO) { + } else if (type == TYPE_ACTION_PHOTO || type == TYPE_GIFT_PREMIUM || type == TYPE_GIFT_STARS || type == TYPE_GIFT_PREMIUM_CHANNEL || type == TYPE_SUGGEST_PHOTO) { return dp(50); } else if (type == TYPE_ROUND_VIDEO) { return AndroidUtilities.roundMessageSize; @@ -9948,6 +10090,141 @@ public class MessageObject { return !isEditing() && !isSponsored() && isSent() && messageOwner.action == null && !isExpiredStory(); } + public boolean isPaidReactionChosen() { + if (messageOwner.reactions == null) return false; + for (int i = 0; i < messageOwner.reactions.results.size(); i++) { + if (messageOwner.reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + return messageOwner.reactions.results.get(i).chosen; + } + } + return false; + } + + public void addPaidReactions(int amount, boolean chosen, boolean anonymous) { + if (messageOwner.reactions == null) { + messageOwner.reactions = new TLRPC.TL_messageReactions(); + messageOwner.reactions.reactions_as_tags = MessageObject.getDialogId(messageOwner) == UserConfig.getInstance(currentAccount).getClientUserId(); + messageOwner.reactions.can_see_list = isFromGroup() || isFromUser(); + } + addPaidReactions(currentAccount, messageOwner.reactions, amount, anonymous, chosen); + } + + public Boolean isMyPaidReactionAnonymous() { + if (messageOwner == null || messageOwner.reactions == null) return null; + if (messageOwner.reactions.top_reactors == null) return null; + for (TLRPC.MessageReactor reactor : messageOwner.reactions.top_reactors) { + if (reactor != null && reactor.my) { + return reactor.anonymous; + } + } + return null; + } + + public static Boolean isMyPaidReactionAnonymous(TLRPC.MessageReactions reactions) { + if (reactions == null) return null; + if (reactions.top_reactors == null) return null; + for (TLRPC.MessageReactor reactor : reactions.top_reactors) { + if (reactor != null && reactor.my) { + return reactor.anonymous; + } + } + return null; + } + + public void setMyPaidReactionAnonymous(boolean value) { + if (messageOwner == null || messageOwner.reactions == null) return; + if (messageOwner.reactions.top_reactors == null) return; + for (TLRPC.MessageReactor reactor : messageOwner.reactions.top_reactors) { + if (reactor != null && reactor.my) { + reactor.anonymous = value; + } + } + } + + public boolean doesPaidReactionExist() { + if (messageOwner.reactions == null) { + messageOwner.reactions = new TLRPC.TL_messageReactions(); + messageOwner.reactions.reactions_as_tags = MessageObject.getDialogId(messageOwner) == UserConfig.getInstance(currentAccount).getClientUserId(); + messageOwner.reactions.can_see_list = isFromGroup() || isFromUser(); + } + for (int i = 0; i < messageOwner.reactions.results.size(); i++) { + if (messageOwner.reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + return true; + } + } + return false; + } + + public boolean ensurePaidReactionsExist(boolean chosen) { + if (messageOwner.reactions == null) { + messageOwner.reactions = new TLRPC.TL_messageReactions(); + messageOwner.reactions.reactions_as_tags = MessageObject.getDialogId(messageOwner) == UserConfig.getInstance(currentAccount).getClientUserId(); + messageOwner.reactions.can_see_list = isFromGroup() || isFromUser(); + } + TLRPC.ReactionCount reactionCount = null; + for (int i = 0; i < messageOwner.reactions.results.size(); i++) { + if (messageOwner.reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + reactionCount = messageOwner.reactions.results.get(i); + } + } + if (reactionCount == null) { + reactionCount = new TLRPC.TL_reactionCount(); + reactionCount.reaction = new TLRPC.TL_reactionPaid(); + reactionCount.count = 1; + reactionCount.chosen = chosen; + messageOwner.reactions.results.add(0, reactionCount); + return true; + } + return false; + } + + public static void addPaidReactions( + int currentAccount, + TLRPC.MessageReactions reactions, + int amount, + boolean anonymous, + boolean chosen + ) { + TLRPC.ReactionCount reactionCount = null; + for (int i = 0; i < reactions.results.size(); i++) { + if (reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + reactionCount = reactions.results.get(i); + } + } + TLRPC.MessageReactor reactor = null; + for (int i = 0; i < reactions.top_reactors.size(); i++) { + if (reactions.top_reactors.get(i).my) { + reactor = reactions.top_reactors.get(i); + break; + } + } + if (reactionCount == null && amount > 0) { + reactionCount = new TLRPC.TL_reactionCount(); + reactionCount.reaction = new TLRPC.TL_reactionPaid(); + reactions.results.add(0, reactionCount); + } + if (reactionCount != null) { + reactionCount.chosen = chosen; + reactionCount.count = Math.max(0, reactionCount.count + amount); + if (reactionCount.count <= 0) { + reactions.results.remove(reactionCount); + } + } + if (reactor == null && amount > 0) { + reactor = new TLRPC.TL_messageReactor(); + reactor.my = true; + reactor.peer_id = MessagesController.getInstance(currentAccount).getPeer(UserConfig.getInstance(currentAccount).getClientUserId()); + reactions.top_reactors.add(reactor); + } + if (reactor != null) { + reactor.count = Math.max(0, reactor.count + amount); + reactor.anonymous = anonymous; + if (reactor.count <= 0) { + reactions.top_reactors.remove(reactor); + } + } + } + public boolean selectReaction(ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean big, boolean fromDoubleTap) { if (messageOwner.reactions == null) { messageOwner.reactions = new TLRPC.TL_messageReactions(); @@ -9959,8 +10236,8 @@ public class MessageObject { TLRPC.ReactionCount newReaction = null; int maxChoosenOrder = 0; for (int i = 0; i < messageOwner.reactions.results.size(); i++) { - if (messageOwner.reactions.results.get(i).chosen) { - TLRPC.ReactionCount reactionCount = messageOwner.reactions.results.get(i); + final TLRPC.ReactionCount reactionCount = messageOwner.reactions.results.get(i); + if (reactionCount.chosen && !(reactionCount.reaction instanceof TLRPC.TL_reactionPaid)) { choosenReactions.add(reactionCount); if (reactionCount.chosen_order > maxChoosenOrder) { maxChoosenOrder = reactionCount.chosen_order; @@ -10013,7 +10290,10 @@ public class MessageObject { while (!choosenReactions.isEmpty() && choosenReactions.size() >= maxReactionsCount) { int minIndex = 0; for (int i = 1; i < choosenReactions.size(); i++) { - if (choosenReactions.get(i).chosen_order < choosenReactions.get(minIndex).chosen_order) { + if ( + !(choosenReactions.get(i).reaction instanceof TLRPC.TL_reactionPaid) && + choosenReactions.get(i).chosen_order < choosenReactions.get(minIndex).chosen_order + ) { minIndex = i; } } @@ -10037,7 +10317,15 @@ public class MessageObject { if (newReaction == null) { int maxChatReactions = MessagesController.getInstance(currentAccount).getChatMaxUniqReactions(getDialogId()); - if (messageOwner.reactions.results.size() + 1 > maxChatReactions) { + int chosenCount = 0; + if (messageOwner != null && messageOwner.reactions != null) { + for (TLRPC.ReactionCount reactionCount : messageOwner.reactions.results) { + if (!(reactionCount.reaction instanceof TLRPC.TL_reactionPaid)) { + chosenCount++; + } + } + } + if (chosenCount + 1 > maxChatReactions) { return false; } newReaction = new TLRPC.TL_reactionCount(); @@ -10115,6 +10403,10 @@ public class MessageObject { return storyItem != null; } + public boolean isBotPreview() { + return storyItem instanceof StoriesController.BotPreview; + } + private TLRPC.WebPage storyMentionWebpage; public TLRPC.WebPage getStoryMentionWebpage() { if (!isStoryMention()) { @@ -10153,7 +10445,7 @@ public class MessageObject { } public boolean isAnyGift() { - return type == MessageObject.TYPE_GIFT_PREMIUM || type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL; + return type == MessageObject.TYPE_GIFT_STARS || type == MessageObject.TYPE_GIFT_PREMIUM || type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL; } private static CharSequence[] userSpan; @@ -10641,4 +10933,8 @@ public class MessageObject { return getMedia(this) instanceof TLRPC.TL_messageMediaPaidMedia; } + public float getProgress() { + return 0f; + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java index 14695dd10..78a749457 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java @@ -213,7 +213,7 @@ public class MessagePreviewParams { replyMessageObject = null; replyQuote = null; } - hasSecretMessages = replyMessageObject != null && (replyMessageObject.isVoiceOnce() || replyMessageObject.isRoundOnce()); + hasSecretMessages = replyMessageObject != null && (replyMessageObject.isVoiceOnce() || replyMessageObject.isRoundOnce() || replyMessageObject.type == MessageObject.TYPE_GIFT_STARS); if (replyMessageObject != null || replyQuote != null) { if (group != null) { replyMessage = new Messages(null, 1, group.messages, dialogId, null); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index fcaabc71d..9ec4bdfd9 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -8,6 +8,8 @@ package org.telegram.messenger; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.getString; import static org.telegram.messenger.NotificationsController.TYPE_CHANNEL; import static org.telegram.messenger.NotificationsController.TYPE_PRIVATE; import static org.telegram.messenger.NotificationsController.TYPE_REACTIONS_MESSAGES; @@ -32,6 +34,9 @@ import android.util.Pair; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; +import android.view.Gravity; +import android.view.View; +import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -55,12 +60,17 @@ import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_account; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.tgnet.tl.TL_chatlists; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.QuickRepliesController; +import org.telegram.ui.Cells.ChatMessageCell; +import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.ChannelMonetizationLayout; import org.telegram.ui.ChatActivity; import org.telegram.ui.ChatReactionsEditActivity; @@ -70,6 +80,7 @@ import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.ImageUpdater; import org.telegram.ui.Components.JoinCallAlert; +import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.MotionBackgroundDrawable; import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; @@ -84,7 +95,11 @@ import org.telegram.ui.SecretMediaViewer; import org.telegram.ui.Stars.BotStarsController; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stories.StoriesController; +import org.telegram.ui.ThemeActivity; import org.telegram.ui.TopicsFragment; +import org.telegram.ui.bots.BotWebViewAttachedSheet; +import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import java.io.File; import java.util.ArrayList; @@ -104,17 +119,17 @@ import java.util.concurrent.CountDownLatch; public class MessagesController extends BaseController implements NotificationCenter.NotificationCenterDelegate { public int lastKnownSessionsCount; - private ConcurrentHashMap chats = new ConcurrentHashMap<>(100, 1.0f, 2); - private ConcurrentHashMap encryptedChats = new ConcurrentHashMap<>(10, 1.0f, 2); - private ConcurrentHashMap users = new ConcurrentHashMap<>(100, 1.0f, 3); - private ConcurrentHashMap objectsByUsernames = new ConcurrentHashMap<>(100, 1.0f, 2); + private final ConcurrentHashMap chats = new ConcurrentHashMap<>(100, 1.0f, 2); + private final ConcurrentHashMap encryptedChats = new ConcurrentHashMap<>(10, 1.0f, 2); + private final ConcurrentHashMap users = new ConcurrentHashMap<>(100, 1.0f, 3); + private final ConcurrentHashMap objectsByUsernames = new ConcurrentHashMap<>(100, 1.0f, 2); public static int stableIdPointer = 100; - private HashMap activeVoiceChatsMap = new HashMap<>(); + private final HashMap activeVoiceChatsMap = new HashMap<>(); - private ArrayList joiningToChannels = new ArrayList<>(); + private final ArrayList joiningToChannels = new ArrayList<>(); - private LongSparseArray exportedChats = new LongSparseArray<>(); + private final LongSparseArray exportedChats = new LongSparseArray<>(); public ArrayList hintDialogs = new ArrayList<>(); public SparseArray> dialogsByFolder = new SparseArray<>(); @@ -543,6 +558,7 @@ public class MessagesController extends BaseController implements NotificationCe public int boostsChannelLevelMax; public int channelRestrictSponsoredLevelMin; public Set webAppAllowedProtocols; + public Set ignoreRestrictionReasons; public int channelsLimitDefault; public int channelsLimitPremium; @@ -613,6 +629,15 @@ public class MessagesController extends BaseController implements NotificationCe public int factcheckLengthLimit; public long starsRevenueWithdrawalMin; public long starsPaidPostAmountMax; + public int botPreviewMediasMax; + public String tonProxyAddress; + public String weatherSearchUsername; + public boolean storyWeatherPreload; + public boolean starsGiftsEnabled; + public long starsPaidReactionAmountMax; + public long starsSubscriptionAmountMax; + public float starsUsdSellRate1000; + public float starsUsdWithdrawRate1000; public int savedDialogsPinnedLimitDefault; public int savedDialogsPinnedLimitPremium; @@ -626,9 +651,9 @@ public class MessagesController extends BaseController implements NotificationCe public String premiumBotUsername; public String premiumInvoiceSlug; - private SharedPreferences notificationsPreferences; - private SharedPreferences mainPreferences; - private SharedPreferences emojiPreferences; + private final SharedPreferences notificationsPreferences; + private final SharedPreferences mainPreferences; + private final SharedPreferences emojiPreferences; public volatile boolean ignoreSetOnline; public boolean premiumLocked; @@ -1555,7 +1580,17 @@ public class MessagesController extends BaseController implements NotificationCe factcheckLengthLimit = mainPreferences.getInt("factcheckLengthLimit", 1024); starsRevenueWithdrawalMin = mainPreferences.getLong("starsRevenueWithdrawalMin", 1000); starsPaidPostAmountMax = mainPreferences.getLong("starsPaidPostAmountMax", 10_000); + botPreviewMediasMax = mainPreferences.getInt("botPreviewMediasMax", 10); webAppAllowedProtocols = mainPreferences.getStringSet("webAppAllowedProtocols", new HashSet<>(Arrays.asList("http", "https"))); + ignoreRestrictionReasons = mainPreferences.getStringSet("ignoreRestrictionReasons", new HashSet<>(Arrays.asList())); + tonProxyAddress = mainPreferences.getString("tonProxyAddress", "magic.org"); + weatherSearchUsername = mainPreferences.getString("weatherSearchUsername", "izweatherbot"); + storyWeatherPreload = mainPreferences.getBoolean("storyWeatherPreload", true); + starsGiftsEnabled = mainPreferences.getBoolean("starsGiftsEnabled", true); + starsPaidReactionAmountMax = mainPreferences.getLong("starsPaidReactionAmountMax", 10_000L); + starsSubscriptionAmountMax = mainPreferences.getLong("starsSubscriptionAmountMax", 2500L); + starsUsdSellRate1000 = mainPreferences.getFloat("starsUsdSellRate1000", 2000); + starsUsdWithdrawRate1000 = mainPreferences.getFloat("starsUsdWithdrawRate1000", 1200); scheduleTranscriptionUpdate(); BuildVars.GOOGLE_AUTH_CLIENT_ID = mainPreferences.getString("googleAuthClientId", BuildVars.GOOGLE_AUTH_CLIENT_ID); if (mainPreferences.contains("dcDomainName2")) { @@ -1597,6 +1632,7 @@ public class MessagesController extends BaseController implements NotificationCe exportUri.add("content://(\\d+@)?com\\.whatsapp\\.w4b\\.provider\\.media/export_chat/"); exportUri.add("content://jp\\.naver\\.line\\.android\\.line\\.common\\.FileProvider/export-chat/"); exportUri.add(".*WhatsApp.*\\.txt$"); + exportUri.add(".*WhatsApp.*\\.zip$"); } exportGroupUri = mainPreferences.getStringSet("exportGroupUri", null); @@ -4151,6 +4187,28 @@ public class MessagesController extends BaseController implements NotificationCe } break; } + case "bot_preview_medias_max": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if ((int) num.value != botPreviewMediasMax) { + botPreviewMediasMax = (int) num.value; + editor.putInt("botPreviewMediasMax", botPreviewMediasMax); + changed = true; + } + } + break; + } + case "ton_proxy_address": { + if (value.value instanceof TLRPC.TL_jsonString) { + TLRPC.TL_jsonString str = (TLRPC.TL_jsonString) value.value; + if (!TextUtils.equals(str.value, tonProxyAddress)) { + tonProxyAddress = str.value; + editor.putString("tonProxyAddress", tonProxyAddress); + changed = true; + } + } + break; + } case "web_app_allowed_protocols": { HashSet newProtocols = new HashSet<>(); if (value.value instanceof TLRPC.TL_jsonArray) { @@ -4170,6 +4228,102 @@ public class MessagesController extends BaseController implements NotificationCe } break; } + case "weather_search_username": { + if (value.value instanceof TLRPC.TL_jsonString) { + TLRPC.TL_jsonString str = (TLRPC.TL_jsonString) value.value; + if (!TextUtils.equals(str.value, weatherSearchUsername)) { + weatherSearchUsername = str.value; + editor.putString("weatherSearchUsername", weatherSearchUsername); + changed = true; + } + } + break; + } + case "story_weather_preload": { + if (value.value instanceof TLRPC.TL_jsonBool) { + TLRPC.TL_jsonBool bool = (TLRPC.TL_jsonBool) value.value; + if (bool.value != storyWeatherPreload) { + storyWeatherPreload = bool.value; + editor.putBoolean("storyWeatherPreload", storyWeatherPreload); + changed = true; + } + } + break; + } + case "stars_gifts_enabled": { + if (value.value instanceof TLRPC.TL_jsonBool) { + TLRPC.TL_jsonBool bool = (TLRPC.TL_jsonBool) value.value; + if (bool.value != starsGiftsEnabled) { + starsGiftsEnabled = bool.value; + editor.putBoolean("starsGiftsEnabled", starsGiftsEnabled); + changed = true; + } + } + break; + } + case "stars_paid_reaction_amount_max": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if ((long) num.value != starsPaidReactionAmountMax) { + starsPaidReactionAmountMax = (long) num.value; + editor.putLong("starsPaidReactionAmountMax", starsPaidReactionAmountMax); + changed = true; + } + } + break; + } + case "stars_subscription_amount_max": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if ((long) num.value != starsSubscriptionAmountMax) { + starsSubscriptionAmountMax = (long) num.value; + editor.putLong("starsSubscriptionAmountMax", starsSubscriptionAmountMax); + changed = true; + } + } + break; + } + case "stars_usd_sell_rate_x1000": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if (Math.abs(num.value - starsUsdSellRate1000) > 0.001f) { + starsUsdSellRate1000 = (float) num.value; + editor.putFloat("starsUsdSellRate1000", starsUsdSellRate1000); + changed = true; + } + } + break; + } + case "stars_usd_withdraw_rate_x1000": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if (Math.abs(num.value - starsUsdWithdrawRate1000) > 0.001f) { + starsUsdWithdrawRate1000 = (float) num.value; + editor.putFloat("starsUsdWithdrawRate1000", starsUsdWithdrawRate1000); + changed = true; + } + } + break; + } + case "ignore_restriction_reasons": { + HashSet newReasons = new HashSet<>(); + if (value.value instanceof TLRPC.TL_jsonArray) { + TLRPC.TL_jsonArray array = (TLRPC.TL_jsonArray) value.value; + for (int b = 0, N2 = array.value.size(); b < N2; b++) { + TLRPC.JSONValue val = array.value.get(b); + if (val instanceof TLRPC.TL_jsonString) { + TLRPC.TL_jsonString string = (TLRPC.TL_jsonString) val; + newReasons.add(string.value.toLowerCase()); + } + } + } + if (!ignoreRestrictionReasons.equals(newReasons)) { + ignoreRestrictionReasons = newReasons; + editor.putStringSet("ignoreRestrictionReasons", ignoreRestrictionReasons); + changed = true; + } + break; + } } } @@ -5755,6 +5909,13 @@ public class MessagesController extends BaseController implements NotificationCe return objectsByUsernames.get(username.toLowerCase()); } + public TLRPC.User getUser(String username) { + TLObject obj = getUserOrChat(username); + if (obj instanceof TLRPC.User) + return (TLRPC.User) obj; + return null; + } + public ConcurrentHashMap getUsers() { return users; } @@ -6523,7 +6684,7 @@ public class MessagesController extends BaseController implements NotificationCe applyDialogNotificationsSettings(-chatId, 0, res.full_chat.notify_settings); for (int a = 0; a < res.full_chat.bot_info.size(); a++) { - TLRPC.BotInfo botInfo = res.full_chat.bot_info.get(a); + TL_bots.BotInfo botInfo = res.full_chat.bot_info.get(a); getMediaDataController().putBotInfo(-chatId, botInfo); } int index = blockePeers.indexOfKey(-chatId); @@ -6584,7 +6745,10 @@ public class MessagesController extends BaseController implements NotificationCe } public void loadFullUser(final TLRPC.User user, int classGuid, boolean force) { - if (user == null || loadingFullUsers.contains(user.id) || !force && loadedFullUsers.get(user.id) > 0) { + loadFullUser(user, classGuid, force, null); + } + public void loadFullUser(final TLRPC.User user, int classGuid, boolean force, Utilities.Callback whenReceivedFullUser) { + if (user == null || whenReceivedFullUser == null && (loadingFullUsers.contains(user.id) || !force && loadedFullUsers.get(user.id) > 0)) { return; } loadingFullUsers.add(user.id); @@ -6605,11 +6769,15 @@ public class MessagesController extends BaseController implements NotificationCe getStoriesController().updateStoriesFromFullPeer(dialogId, userFull.stories); ChatThemeController.getInstance(currentAccount).saveChatWallpaper(res.full_user.id, res.full_user.wallpaper); + if (whenReceivedFullUser != null) { + whenReceivedFullUser.run(userFull); + } + AndroidUtilities.runOnUIThread(() -> { savePeerSettings(userFull.user.id, userFull.settings, false); applyDialogNotificationsSettings(user.id, 0, userFull.notify_settings); - if (userFull.bot_info instanceof TLRPC.TL_botInfo) { + if (userFull.bot_info instanceof TL_bots.TL_botInfo) { userFull.bot_info.user_id = user.id; getMediaDataController().putBotInfo(user.id, userFull.bot_info); } @@ -6640,7 +6808,7 @@ public class MessagesController extends BaseController implements NotificationCe if (userFull.user.photo != null && userFull.user.photo.has_video) { getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, UPDATE_MASK_AVATAR); } - if (userFull.bot_info instanceof TLRPC.TL_botInfo) { + if (userFull.bot_info instanceof TL_bots.TL_botInfo) { userFull.bot_info.user_id = userFull.id; getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, userFull.bot_info, classGuid); } @@ -9965,12 +10133,12 @@ public class MessagesController extends BaseController implements NotificationCe loadMessagesInternal(dialogId, mergeDialogId, loadInfo, count, max_id, offset_date, fromCache, midDate, classGuid, load_type, last_message_id, mode, threadMessageId, loadIndex, first_unread, unread_count, last_date, queryFromServer, mentionsCount, true, true, isTopic, null, 0L); } - private void loadMessagesInternal(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, boolean fromCache, int minDate, int classGuid, int load_type, int last_message_id, int mode, long threadMessageId, int loadIndex, int first_unread, int unread_count, int last_date, boolean queryFromServer, int mentionsCount, boolean loadDialog, boolean processMessages, boolean isTopic, MessageLoaderLogger loaderLogger, long hash) { + private void loadMessagesInternal(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, boolean fromCache, int minDate, int classGuid, int load_type, int last_message_id, int mode, long threadMessageId, int loadIndex, int first_unread, int unread_count, int last_date, boolean queryFromServer, int mentionsCount, boolean loadDialog, boolean processMessages, boolean isTopic, Timer loaderLogger, long hash) { if (BuildVars.LOGS_ENABLED) { FileLog.d("load messages in chat " + dialogId + " topic_id " + threadMessageId + " count " + count + " max_id " + max_id + " cache " + fromCache + " mindate = " + minDate + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " mode " + mode + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer + " isTopic " + isTopic); } if (BuildVars.LOGS_ENABLED && loaderLogger == null && mode == 0) { - loaderLogger = new MessageLoaderLogger(dialogId, loadIndex, count); + loaderLogger = new Timer("MessageLoaderLogger dialogId=" + dialogId + " index=" + loadIndex + " count=" + count); } if ((threadMessageId == 0 || isTopic || mode == ChatActivity.MODE_SAVED || mode == ChatActivity.MODE_QUICK_REPLIES) && mode != ChatActivity.MODE_PINNED && (fromCache || DialogObject.isEncryptedDialog(dialogId))) { getMessagesStorage().getMessages(dialogId, mergeDialogId, loadInfo, count, max_id, offset_date, minDate, classGuid, load_type, mode, threadMessageId, loadIndex, processMessages, isTopic, loaderLogger); @@ -10281,10 +10449,11 @@ public class MessagesController extends BaseController implements NotificationCe } public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCount, long dialogId, long mergeDialogId, int count, int max_id, int offset_date, boolean isCache, int classGuid, - int first_unread, int last_message_id, int unread_count, int last_date, int load_type, boolean isEnd, int mode, long threadMessageId, int loadIndex, boolean queryFromServer, int mentionsCount, boolean needProcess, boolean isTopic, MessageLoaderLogger loaderLogger) { + int first_unread, int last_message_id, int unread_count, int last_date, int load_type, boolean isEnd, int mode, long threadMessageId, int loadIndex, boolean queryFromServer, int mentionsCount, boolean needProcess, boolean isTopic, Timer loaderLogger) { if (BuildVars.LOGS_ENABLED) { - FileLog.d("processLoadedMessages size " + messagesRes.messages.size() + " in chat " + dialogId + " topic_id " + threadMessageId + " count " + count + " max_id " + max_id + " cache " + isCache + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer + " isTopic " + isTopic); + FileLog.d("processLoadedMessages size " + messagesRes.messages.size() + " in chat " + dialogId + " topic_id " + threadMessageId + " count " + count + " max_id " + max_id + " cache " + isCache + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer + " isTopic " + isTopic + " mode " + mode); } + Timer.Task t1 = Timer.start(loaderLogger, "processLoadedMessages"); long startProcessTime = SystemClock.elapsedRealtime(); boolean createDialog = false; @@ -10385,9 +10554,6 @@ public class MessagesController extends BaseController implements NotificationCe } } } - if (loaderLogger != null) { - loaderLogger.reload(); - } final long finalHash = hash; AndroidUtilities.runOnUIThread(() -> loadMessagesInternal(dialogId, mergeDialogId, false, count, load_type == LOAD_FROM_UNREAD && queryFromServer ? first_unread : max_id, offset_date, false, 0, classGuid, load_type, last_message_id, mode, threadMessageId, loadIndex, first_unread, unread_count, last_date, queryFromServer, mentionsCount, true, needProcess, isTopic, loaderLogger, finalHash)); if (messagesRes.messages.isEmpty()) { @@ -10485,9 +10651,6 @@ public class MessagesController extends BaseController implements NotificationCe if (BuildVars.LOGS_ENABLED) { FileLog.d("process time=" + (SystemClock.elapsedRealtime() - startProcessTime) + " count=" + objects.size() + " for dialog " + dialogId); } - if (loaderLogger != null) { - loaderLogger.logStageQueueProcessing(); - } if (mode == ChatActivity.MODE_SCHEDULED) { Collections.sort(objects, (o1, o2) -> { if (o1.messageOwner.date == o2.messageOwner.date && o1.getId() >= 0 && o2.getId() >= 0) { @@ -10519,13 +10682,15 @@ public class MessagesController extends BaseController implements NotificationCe } } } + + Timer.done(t1); + Timer.Task t2 = Timer.start(loaderLogger, "processLoadedMessages: runOnUIThread"); AndroidUtilities.runOnUIThread(() -> { + Timer.done(t2); + Timer.Task t3 = Timer.start(loaderLogger, "processLoadedMessages: post runOnUIThread"); putUsers(messagesRes.users, isCache); putChats(messagesRes.chats, isCache); - if (loaderLogger != null) { - loaderLogger.finish(); - } if (messagesRes.animatedEmoji != null && needProcess) { AnimatedEmojiDrawable.getDocumentFetcher(currentAccount).processDocuments(messagesRes.animatedEmoji); } @@ -10552,13 +10717,15 @@ public class MessagesController extends BaseController implements NotificationCe if (!DialogObject.isEncryptedDialog(dialogId) && mode != ChatActivity.MODE_QUICK_REPLIES) { int finalFirst_unread_final = first_unread_final; + Timer.Task t5 = Timer.start(loaderLogger, "loadReplyMessagesForMessages"); getMediaDataController().loadReplyMessagesForMessages(objects, dialogId, mode, threadMessageId, () -> { + Timer.done(t5); if (!needProcess) { getNotificationCenter().postNotificationName(NotificationCenter.messagesDidLoadWithoutProcess, classGuid, resCount, isCache, isEnd, last_message_id); } else { getNotificationCenter().postNotificationName(NotificationCenter.messagesDidLoad, dialogId, count, objects, isCache, finalFirst_unread_final, last_message_id, unread_count, last_date, load_type, isEnd, classGuid, loadIndex, max_id, mentionsCount, mode); } - }, classGuid); + }, classGuid, loaderLogger); } else { getNotificationCenter().postNotificationName(NotificationCenter.messagesDidLoad, dialogId, count, objects, isCache, first_unread_final, last_message_id, unread_count, last_date, load_type, isEnd, classGuid, loadIndex, max_id, mentionsCount, mode); } @@ -10569,6 +10736,11 @@ public class MessagesController extends BaseController implements NotificationCe if (!webpagesToReload.isEmpty()) { reloadWebPages(dialogId, webpagesToReload, mode); } + + Timer.done(t3); + if (loaderLogger != null) { + loaderLogger.finish(); + } }); } @@ -13453,16 +13625,26 @@ public class MessagesController extends BaseController implements NotificationCe }, ConnectionsManager.RequestFlagInvokeAfter); } - public void toggleChannelSignatures(long chatId, boolean enabled) { + public void toggleChannelSignatures(long chatId, boolean signaturesEnabled, boolean profilesEnabled) { + TLRPC.Chat chat = getChat(chatId); + if (chat != null) { + chat.signatures = signaturesEnabled; + chat.signature_profiles = profilesEnabled; + putChat(chat, true); + } + TLRPC.TL_channels_toggleSignatures req = new TLRPC.TL_channels_toggleSignatures(); req.channel = getInputChannel(chatId); - req.enabled = enabled; + req.signatures_enabled = signaturesEnabled; + req.profiles_enabled = profilesEnabled; getConnectionsManager().sendRequest(req, (response, error) -> { if (response != null) { processUpdates((TLRPC.Updates) response, false); AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, UPDATE_MASK_CHAT)); } }, ConnectionsManager.RequestFlagInvokeAfter); + + getNotificationCenter().postNotificationName(NotificationCenter.updateAllMessages, -chatId); } public void toggleChannelForum(long chatId, boolean enabled) { @@ -15046,7 +15228,7 @@ public class MessagesController extends BaseController implements NotificationCe updateInterfaceWithMessages(dialogId, arr, 0); getNotificationCenter().postNotificationName(NotificationCenter.dialogsNeedReload); }); - }, 0); + }, 0, null); } }); @@ -17297,8 +17479,21 @@ public class MessagesController extends BaseController implements NotificationCe message.out = true; } } - if (!message.out && message.from_id instanceof TLRPC.TL_peerUser && message.from_id.user_id == clientUserId) { - message.out = true; + if (!message.out) { + long from_id = DialogObject.getPeerDialogId(message.from_id); + if (from_id == clientUserId) { + message.out = true; + } else { + TLRPC.TL_channels_sendAsPeers peers = getSendAsPeers(MessageObject.getDialogId(message)); + if (peers != null) { + for (TLRPC.TL_sendAsPeer peer : peers.peers) { + if (peer != null && from_id == DialogObject.getPeerDialogId(peer.peer)) { + message.out = true; + break; + } + } + } + } } if (!fromGetDifference) { for (int a = 0, count = message.entities.size(); a < count; a++) { @@ -18275,6 +18470,11 @@ public class MessagesController extends BaseController implements NotificationCe } else if (baseUpdate instanceof TLRPC.TL_updateMessageReactions) { TLRPC.TL_updateMessageReactions update = (TLRPC.TL_updateMessageReactions) baseUpdate; long dialogId = MessageObject.getPeerId(update.peer); + long pendingPaid = StarsController.getInstance(currentAccount).getPendingPaidReactions(dialogId, update.msg_id); + if (pendingPaid != 0) { + final StarsController starsController = StarsController.getInstance(currentAccount); + MessageObject.addPaidReactions(currentAccount, update.reactions, (int) pendingPaid, starsController.arePaidReactionsAnonymous(StarsController.MessageId.from(dialogId, update.msg_id), update.reactions), true); + } getNotificationCenter().postNotificationName(NotificationCenter.didUpdateReactions, dialogId, update.msg_id, update.reactions); } else if (baseUpdate instanceof TLRPC.TL_updateMessageExtendedMedia) { TLRPC.TL_updateMessageExtendedMedia extendedMedia = (TLRPC.TL_updateMessageExtendedMedia) baseUpdate; @@ -18296,8 +18496,8 @@ public class MessagesController extends BaseController implements NotificationCe getNotificationCenter().postNotificationName(NotificationCenter.webViewResultSent, resultSent.query_id); } else if (baseUpdate instanceof TLRPC.TL_updateAttachMenuBots) { getMediaDataController().loadAttachMenuBots(false, true); - } else if (baseUpdate instanceof TLRPC.TL_updateBotMenuButton) { - TLRPC.TL_updateBotMenuButton updateBotMenuButton = (TLRPC.TL_updateBotMenuButton) baseUpdate; + } else if (baseUpdate instanceof TL_bots.TL_updateBotMenuButton) { + TL_bots.TL_updateBotMenuButton updateBotMenuButton = (TL_bots.TL_updateBotMenuButton) baseUpdate; getNotificationCenter().postNotificationName(NotificationCenter.updateBotMenuButton, updateBotMenuButton.bot_id, updateBotMenuButton.button); } else if (baseUpdate instanceof TLRPC.TL_updateReadChannelDiscussionInbox) { TLRPC.TL_updateReadChannelDiscussionInbox update = (TLRPC.TL_updateReadChannelDiscussionInbox) baseUpdate; @@ -18563,7 +18763,7 @@ public class MessagesController extends BaseController implements NotificationCe } } } - getMediaDataController().loadReplyMessagesForMessages(arrayList, dialogId, 0, 0,null, 0); + getMediaDataController().loadReplyMessagesForMessages(arrayList, dialogId, 0, 0,null, 0, null); getNotificationCenter().postNotificationName(NotificationCenter.replaceMessagesObjects, dialogId, arrayList, false); } } @@ -19082,7 +19282,6 @@ public class MessagesController extends BaseController implements NotificationCe for (int a = 0, N = res.messages.size(); a < N; a++) { TLRPC.TL_sponsoredMessage sponsoredMessage = res.messages.get(a); TLRPC.TL_message message = new TLRPC.TL_message(); - message.message = sponsoredMessage.message; if (!sponsoredMessage.entities.isEmpty()) { message.entities = sponsoredMessage.entities; message.flags |= 128; @@ -19091,6 +19290,11 @@ public class MessagesController extends BaseController implements NotificationCe message.flags |= 256; message.date = getConnectionsManager().getCurrentTime(); message.id = messageId--; + message.message = sponsoredMessage.message; + if (sponsoredMessage.media != null) { + message.flags |= 512; + } + message.media = sponsoredMessage.media; MessageObject messageObject = new MessageObject(currentAccount, message, usersDict, chatsDict, true, true); messageObject.sponsoredId = sponsoredMessage.random_id; messageObject.sponsoredTitle = sponsoredMessage.title; @@ -19102,6 +19306,10 @@ public class MessagesController extends BaseController implements NotificationCe messageObject.sponsoredButtonText = sponsoredMessage.button_text; messageObject.sponsoredCanReport = sponsoredMessage.can_report; messageObject.sponsoredColor = sponsoredMessage.color; + messageObject.sponsoredMedia = sponsoredMessage.media; + messageObject.setType(); + messageObject.textLayoutBlocks = new ArrayList<>(); + messageObject.generateThumbs(true); result.add(messageObject); } } @@ -19154,17 +19362,6 @@ public class MessagesController extends BaseController implements NotificationCe putUsers(res.users, false); putChats(res.chats, false); }); - final LongSparseArray usersDict = new LongSparseArray<>(); - final LongSparseArray chatsDict = new LongSparseArray<>(); - - for (int a = 0; a < res.users.size(); a++) { - TLRPC.User u = res.users.get(a); - usersDict.put(u.id, u); - } - for (int a = 0; a < res.chats.size(); a++) { - TLRPC.Chat c = res.chats.get(a); - chatsDict.put(c.id, c); - } } } else { result = null; @@ -19317,7 +19514,7 @@ public class MessagesController extends BaseController implements NotificationCe } } } - getMediaDataController().loadReplyMessagesForMessages(messages, dialogId, mode, 0, null, 0); + getMediaDataController().loadReplyMessagesForMessages(messages, dialogId, mode, 0, null, 0, null); if (mode == ChatActivity.MODE_QUICK_REPLIES) { QuickRepliesController.getInstance(currentAccount).checkLocalMessages(messages); } @@ -19790,12 +19987,14 @@ public class MessagesController extends BaseController implements NotificationCe } } - public static String getRestrictionReason(ArrayList reasons) { + public String getRestrictionReason(ArrayList reasons) { if (reasons.isEmpty()) { return null; } for (int a = 0, N = reasons.size(); a < N; a++) { - TLRPC.TL_restrictionReason reason = reasons.get(a); + TLRPC.RestrictionReason reason = reasons.get(a); + if (ignoreRestrictionReasons != null && ignoreRestrictionReasons.contains(reason.reason)) continue; + if ("sensitive".equals(reason.reason)) continue; if ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) { return reason.text; } @@ -19803,6 +20002,83 @@ public class MessagesController extends BaseController implements NotificationCe return null; } + public boolean isSensitive(ArrayList reasons) { + if (reasons == null || reasons.isEmpty()) { + return false; + } + for (int a = 0, N = reasons.size(); a < N; a++) { + TLRPC.RestrictionReason reason = reasons.get(a); + if (ignoreRestrictionReasons != null && ignoreRestrictionReasons.contains(reason.reason)) continue; + if ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) { + if ("sensitive".equals(reason.reason)) return true; + } + } + return false; + } + + public void checkSensitive(BaseFragment fragment, long did, Runnable done, Runnable canceled) { + ArrayList reasons = null; + if (did < 0) { + TLRPC.Chat chat = getChat(-did); + reasons = chat != null ? chat.restriction_reason : null; + } else if (did >= 0) { + TLRPC.User user = getUser(did); + reasons = user != null ? user.restriction_reason : null; + } + if (!isSensitive(reasons) || sensitiveAgreed.contains(did)) { + if (done != null) { + done.run(); + } + return; + } + final AlertDialog progressDialog = new AlertDialog(fragment.getContext(), AlertDialog.ALERT_TYPE_SPINNER); + progressDialog.showDelayed(200); + getContentSettings(settings -> { + progressDialog.dismissUnless(200); + boolean[] always = new boolean[1]; + FrameLayout frameLayout = new FrameLayout(fragment.getContext()); + if (settings != null && settings.sensitive_can_change) { + CheckBoxCell checkbox = new CheckBoxCell(fragment.getContext(), 1, fragment.getResourceProvider()); + checkbox.setBackground(Theme.getSelectorDrawable(false)); + checkbox.setText(getString(R.string.MessageShowSensitiveContentAlways), "", always[0], false); + checkbox.setPadding(LocaleController.isRTL ? dp(16) : dp(8), 0, LocaleController.isRTL ? dp(8) : dp(16), 0); + frameLayout.addView(checkbox, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.LEFT, 0, 0, 0, 0)); + checkbox.setOnClickListener(v -> { + CheckBoxCell cell1 = (CheckBoxCell) v; + always[0] = !always[0]; + cell1.setChecked(always[0], true); + }); + } + final boolean[] doneSet = new boolean[1]; + new AlertDialog.Builder(fragment.getContext(), fragment.getResourceProvider()) + .setTitle(getString(R.string.MessageShowSensitiveContentChannelTitle)) + .setMessage(getString(R.string.MessageShowSensitiveContentChannelText)) + .setView(frameLayout).setCustomViewOffset(9) + .setNegativeButton(getString(R.string.Cancel), null) + .setPositiveButton(getString(R.string.MessageShowSensitiveContentButton), (di, w) -> { + doneSet[0] = true; + sensitiveAgreed.add(did); + if (always[0] && settings != null && settings.sensitive_can_change) { + getMessagesController().setContentSettings(true); + BulletinFactory.of(fragment) + .createSimpleBulletinDetail(R.raw.chats_infotip, AndroidUtilities.replaceArrows(AndroidUtilities.premiumText(getString(R.string.SensitiveContentSettingsToast), () -> { + fragment.presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC).highlightSensitiveRow()); + }), true)) + .show(true); + } + if (done != null) { + done.run(); + } + }) + .setOnDismissListener(di -> { + if (!doneSet[0] && canceled != null) { + canceled.run(); + } + }) + .show(); + }); + } + public static void showCantOpenAlert(BaseFragment fragment, String reason) { if (fragment == null || fragment.getParentActivity() == null) { return; @@ -19827,6 +20103,8 @@ public class MessagesController extends BaseController implements NotificationCe return checkCanOpenChat(bundle, fragment, originalMessage, null); } + private final HashSet sensitiveAgreed = new HashSet<>(); + public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment, MessageObject originalMessage, Browser.Progress progress) { if (bundle == null || fragment == null) { return true; @@ -19836,9 +20114,12 @@ public class MessagesController extends BaseController implements NotificationCe long userId = bundle.getLong("user_id", 0); long chatId = bundle.getLong("chat_id", 0); int messageId = bundle.getInt("message_id", 0); + long dialogId = 0; if (userId != 0) { + dialogId = userId; user = getUser(userId); } else if (chatId != 0) { + dialogId = -chatId; chat = getChat(chatId); } if (user == null && chat == null) { @@ -19936,7 +20217,7 @@ public class MessagesController extends BaseController implements NotificationCe return true; } - public static void openChatOrProfileWith(TLRPC.User user, TLRPC.Chat chat, BaseFragment fragment, int type, boolean closeLast) { + public void openChatOrProfileWith(TLRPC.User user, TLRPC.Chat chat, BaseFragment fragment, int type, boolean closeLast) { if (user == null && chat == null || fragment == null) { return; } @@ -20201,7 +20482,7 @@ public class MessagesController extends BaseController implements NotificationCe }); } - public void setCustomChatReactions(long chatId, int type, List reactions, int reactionsCount, Utilities.Callback onError, Runnable onSuccess) { + public void setCustomChatReactions(long chatId, int type, List reactions, int reactionsCount, Boolean allow_paid, Utilities.Callback onError, Runnable onSuccess) { TLRPC.TL_messages_setChatAvailableReactions req = new TLRPC.TL_messages_setChatAvailableReactions(); req.peer = getInputPeer(-chatId); if (type == ChatReactionsEditActivity.SELECT_TYPE_NONE || reactions.isEmpty()) { @@ -20213,6 +20494,10 @@ public class MessagesController extends BaseController implements NotificationCe req.available_reactions = someReactions; someReactions.reactions.addAll(reactions); } + if (allow_paid != null) { + req.flags |= 2; + req.paid_enabled = allow_paid; + } req.flags |= 1; req.reactions_limit = reactionsCount; getConnectionsManager().sendRequest(req, (response, error) -> { @@ -20252,6 +20537,9 @@ public class MessagesController extends BaseController implements NotificationCe chatFull.flags |= 1048576; } chatFull.reactions_limit = reactionsCount; + if (allow_paid != null) { + chatFull.paid_reactions_available = allow_paid; + } getMessagesStorage().updateChatInfo(chatFull, false); } } @@ -21485,4 +21773,219 @@ public class MessagesController extends BaseController implements NotificationCe return true; } }; + + public static boolean equals(TLRPC.MessageMedia a, TLRPC.MessageMedia b) { + if (a instanceof TLRPC.TL_messageMediaDocument) { + if (!(b instanceof TLRPC.TL_messageMediaDocument)) return false; + return a.document.id == b.document.id; + } else if (b instanceof TLRPC.TL_messageMediaPhoto) { + if (!(b instanceof TLRPC.TL_messageMediaPhoto)) return false; + return a.photo.id == b.photo.id; + } + return false; + } + + public static TLRPC.InputDocument toInputDocument(TLRPC.Document document) { + TLRPC.TL_inputDocument id = new TLRPC.TL_inputDocument(); + id.id = document.id; + id.access_hash = document.access_hash; + id.file_reference = document.file_reference; + return id; + } + + public static TLRPC.InputMedia toInputMedia(TLRPC.MessageMedia media) { + if (media instanceof TLRPC.TL_messageMediaDocument) { + TLRPC.TL_inputMediaDocument input = new TLRPC.TL_inputMediaDocument(); + input.id = new TLRPC.TL_inputDocument(); + input.id.id = media.document.id; + input.id.access_hash = media.document.access_hash; + input.id.file_reference = media.document.file_reference; + return input; + } else if (media instanceof TLRPC.TL_messageMediaPhoto) { + TLRPC.TL_inputMediaPhoto input = new TLRPC.TL_inputMediaPhoto(); + input.id = new TLRPC.TL_inputPhoto(); + input.id.id = media.photo.id; + input.id.access_hash = media.photo.access_hash; + input.id.file_reference = media.photo.file_reference; + return input; + } + return null; + } + + public void openApp(TLRPC.User bot, int classGuid) { + openApp(null, bot, classGuid, null); + } + public void openApp(BaseFragment _fragment, TLRPC.User bot, int classGuid, Browser.Progress progress) { + if (bot == null) return; + + boolean[] cancelled = new boolean[] { false }; + if (progress != null) { + progress.onCancel(() -> cancelled[0] = true); + progress.init(); + } + + final TL_bots.BotInfo[] botInfo = new TL_bots.BotInfo[1]; + Runnable open = () -> { + BaseFragment fragment = _fragment != null ? _fragment : LaunchActivity.getSafeLastFragment(); + if (fragment == null) return; + if (progress != null) { + progress.end(); + } + if (cancelled[0]) return; + if (bot.bot_has_main_app) { + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + AndroidUtilities.hideKeyboard(fragment.getFragmentView()); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, bot.id, bot.id, null, null, BotWebViewAttachedSheet.TYPE_WEB_VIEW_BOT_MAIN, 0, false, null, false, null, bot, 0, false); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { + return; + } + if (AndroidUtilities.isTablet()) { + BotWebViewSheet webViewSheet = new BotWebViewSheet(fragment.getContext(), fragment.getResourceProvider()); + webViewSheet.setDefaultFullsize(true); + webViewSheet.setNeedsContext(true); + webViewSheet.setParentActivity(fragment.getParentActivity()); + webViewSheet.requestWebView(null, props); + webViewSheet.show(); + } else { + BotWebViewAttachedSheet sheet = fragment.createBotViewer(); + sheet.setDefaultFullsize(true); + sheet.setNeedsContext(false); + sheet.setParentActivity(fragment.getParentActivity()); + sheet.requestWebView(null, props); + sheet.show(); + } + } else if (botInfo[0] != null && botInfo[0].menu_button instanceof TL_bots.TL_botMenuButton) { + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + TL_bots.TL_botMenuButton btn = (TL_bots.TL_botMenuButton) botInfo[0].menu_button; + AndroidUtilities.hideKeyboard(fragment.getFragmentView()); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, bot.id, bot.id, btn.text, btn.url, BotWebViewAttachedSheet.TYPE_BOT_MENU_BUTTON, 0, false, null, false, null, bot, 0, false); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { + return; + } + if (AndroidUtilities.isTablet()) { + BotWebViewSheet webViewSheet = new BotWebViewSheet(fragment.getContext(), fragment.getResourceProvider()); + webViewSheet.setDefaultFullsize(false); + webViewSheet.setNeedsContext(true); + webViewSheet.setParentActivity(fragment.getParentActivity()); + webViewSheet.requestWebView(null, props); + webViewSheet.show(); + } else { + BotWebViewAttachedSheet sheet = fragment.createBotViewer(); + sheet.setDefaultFullsize(false); + sheet.setNeedsContext(false); + sheet.setParentActivity(fragment.getParentActivity()); + sheet.requestWebView(null, props); + sheet.show(); + } + } else { + fragment.presentFragment(ChatActivity.of(bot.id)); + } + }; + + botInfo[0] = getMediaDataController().getBotInfoCached(bot.id, bot.id); + if (bot.bot_has_main_app) { + open.run(); + } else if (botInfo[0] == null) { + getMediaDataController().loadBotInfo(bot.id, bot.id, false, classGuid, _botInfo -> { + if (cancelled[0]) return; + botInfo[0] = _botInfo; + if (botInfo[0] == null) { + TLRPC.UserFull userFull = getUserFull(bot.id); + if (userFull == null) { + if (cancelled[0]) return; + loadFullUser(bot, classGuid, true, userFull1 -> { + if (cancelled[0]) return; + if (userFull1 != null) { + botInfo[0] = userFull1.bot_info; + } + AndroidUtilities.runOnUIThread(open); + }); + } else { + botInfo[0] = userFull.bot_info; + open.run(); + } + } else { + open.run(); + } + }); + } else { + open.run(); + } + } + + + private boolean contentSettingsLoading; + private ArrayList> contentSettingsCallbacks; + private long contentSettingsLoadedTime; + private TL_account.contentSettings contentSettings; + + public TL_account.contentSettings getContentSettings() { + return contentSettings; + } + + public void getContentSettings(Utilities.Callback whenReceived) { + if (contentSettings != null && System.currentTimeMillis() - contentSettingsLoadedTime < 1000 * 60 * 60) { + if (whenReceived != null) whenReceived.run(contentSettings); + return; + } + + if (contentSettingsCallbacks == null) contentSettingsCallbacks = new ArrayList<>(); + if (whenReceived != null) contentSettingsCallbacks.add(whenReceived); + if (contentSettingsLoading) return; + contentSettingsLoading = true; + + TL_account.getContentSettings req = new TL_account.getContentSettings(); + getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_account.contentSettings) { + contentSettings = (TL_account.contentSettings) res; + contentSettingsLoadedTime = System.currentTimeMillis(); + } + contentSettingsLoading = false; + if (contentSettingsCallbacks != null) { + for (Utilities.Callback callback : contentSettingsCallbacks) { + callback.run(contentSettings); + } + contentSettingsCallbacks.clear(); + contentSettingsCallbacks = null; + } + })); + } + + public void invalidateContentSettings() { + contentSettings = null; + contentSettingsLoadedTime = 0; + } + + public void setContentSettings(boolean showSensitiveContent) { + if (contentSettings != null) { + if (!contentSettings.sensitive_can_change) { + return; + } + contentSettings.sensitive_enabled = showSensitiveContent; + } + + if (ignoreRestrictionReasons == null) ignoreRestrictionReasons = new HashSet<>(); + if (showSensitiveContent) ignoreRestrictionReasons.add("sensitive"); + else ignoreRestrictionReasons.remove("sensitive"); + + TL_account.setContentSettings req = new TL_account.setContentSettings(); + req.sensitive_enabled = showSensitiveContent; + getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (err != null) { + BulletinFactory.showError(err); + } + })); + } + + public boolean showSensitiveContent() { + if (contentSettings != null && System.currentTimeMillis() - contentSettingsLoadedTime < 1000 * 60 * 60) { + return contentSettings.sensitive_enabled; + } + return ignoreRestrictionReasons == null || ignoreRestrictionReasons.contains("sensitive"); + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java index 73590c2fb..5fd111729 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java @@ -38,6 +38,7 @@ import org.telegram.tgnet.NativeByteBuffer; import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Adapters.DialogsSearchAdapter; @@ -1404,6 +1405,7 @@ public class MessagesStorage extends BaseController { database.executeFast("DELETE FROM business_replies").stepThis().dispose(); database.executeFast("DELETE FROM quick_replies_messages").stepThis().dispose(); database.executeFast("DELETE FROM effects").stepThis().dispose(); + database.executeFast("DELETE FROM app_config").stepThis().dispose(); cursor = database.queryFinalized("SELECT did FROM dialogs WHERE 1"); @@ -2183,6 +2185,9 @@ public class MessagesStorage extends BaseController { for (int a = 0; a < dialogs.size(); a++) { long did = dialogs.keyAt(a); ReadDialog dialog = dialogs.valueAt(a); + if (getMessagesController().isForum(did)) { + getMessagesController().markAllTopicsAsRead(did); + } getMessagesController().markDialogAsRead(did, dialog.lastMid, dialog.lastMid, dialog.date, false, 0, dialog.unreadCount, true, 0); } }); @@ -7453,7 +7458,7 @@ public class MessagesStorage extends BaseController { cursor.dispose(); cursor = null; for (int a = 0; a < info.bot_info.size(); a++) { - TLRPC.BotInfo botInfo = info.bot_info.get(a); + TL_bots.BotInfo botInfo = info.bot_info.get(a); usersToLoad.add(botInfo.user_id); } } @@ -8282,7 +8287,7 @@ public class MessagesStorage extends BaseController { }); } - public Runnable getMessagesInternal(long dialogId, long mergeDialogId, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long threadMessageId, int loadIndex, boolean processMessages, boolean isTopic, MessageLoaderLogger loaderLogger) { + public Runnable getMessagesInternal(long dialogId, long mergeDialogId, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long threadMessageId, int loadIndex, boolean processMessages, boolean isTopic, Timer loaderLogger) { TLRPC.TL_messages_messages res = new TLRPC.TL_messages_messages(); long currentUserId = getUserConfig().clientUserId; int count_unread = 0; @@ -9267,19 +9272,16 @@ public class MessagesStorage extends BaseController { } } - public void getMessages(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long replyMessageId, int loadIndex, boolean processMessages, boolean isTopic, MessageLoaderLogger loaderLogger) { + public void getMessages(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long replyMessageId, int loadIndex, boolean processMessages, boolean isTopic, Timer loaderLogger) { + Timer.Task t1 = Timer.start(loaderLogger, "MessagesStorage.getMessages: storageQueue.postRunnable"); storageQueue.postRunnable(() -> { - if (loaderLogger != null) { - loaderLogger.logStorageQueuePost(); - } + Timer.done(t1); + Timer.Task t2 = Timer.start(loaderLogger, "MessagesStorage.getMessages"); Runnable processMessagesRunnable = getMessagesInternal(dialogId, mergeDialogId, count, max_id, offset_date, minDate, classGuid, load_type, mode, replyMessageId, loadIndex, processMessages, isTopic, loaderLogger); - if (loaderLogger != null) { - loaderLogger.logStorageProccessing(); - } + Timer.done(t2); + Timer.Task t3 = Timer.start(loaderLogger, "MessagesStorage.getMessages: stageQueue.postRunnable"); Utilities.stageQueue.postRunnable(() -> { - if (loaderLogger != null) { - loaderLogger.logStageQueuePost(); - } + Timer.done(t3); processMessagesRunnable.run(); }); }); @@ -14819,6 +14821,9 @@ public class MessagesStorage extends BaseController { } else if (oldMessage.media instanceof TLRPC.TL_messageMediaDocument && message.media instanceof TLRPC.TL_messageMediaDocument && oldMessage.media.document != null && message.media.document != null) { sameMedia = oldMessage.media.document.id == message.media.document.id; } + if (oldMessage.out && !message.out) { + message.out = oldMessage.out; + } if (!sameMedia) { addFilesToDelete(oldMessage, filesToDelete, idsToDelete, namesToDelete, false); } @@ -15362,6 +15367,14 @@ public class MessagesStorage extends BaseController { } } } + if (message.reactions != null && message.reactions.top_reactors != null) { + for (int i = 0; i < message.reactions.top_reactors.size(); ++i) { + final TLRPC.MessageReactor reactor = message.reactions.top_reactors.get(i); + if (reactor != null && reactor.peer_id != null) { + addLoadPeerInfo(reactor.peer_id, usersToLoad, chatsToLoad); + } + } + } } public static void addLoadPeerInfo(TLRPC.Peer peer, ArrayList usersToLoad, ArrayList chatsToLoad) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java index cc9a31426..ea5cfb9b6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java @@ -105,6 +105,7 @@ public class NotificationCenter { public static final int wasUnableToFindCurrentLocation = totalEvents++; public static final int reloadHints = totalEvents++; public static final int reloadInlineHints = totalEvents++; + public static final int reloadWebappsHints = totalEvents++; public static final int newDraftReceived = totalEvents++; public static final int recentDocumentsDidLoad = totalEvents++; public static final int needAddArchivedStickers = totalEvents++; @@ -143,6 +144,8 @@ public class NotificationCenter { public static final int businessMessagesUpdated = totalEvents++; public static final int quickRepliesUpdated = totalEvents++; public static final int quickRepliesDeleted = totalEvents++; + public static final int bookmarkAdded = totalEvents++; + public static final int starReactionAnonymousUpdate = totalEvents++; public static final int businessLinksUpdated = totalEvents++; public static final int businessLinkCreated = totalEvents++; @@ -250,12 +253,16 @@ public class NotificationCenter { public static final int premiumFloodWaitReceived = totalEvents++; public static final int availableEffectsUpdate = totalEvents++; public static final int starOptionsLoaded = totalEvents++; + public static final int starGiftOptionsLoaded = totalEvents++; public static final int starBalanceUpdated = totalEvents++; public static final int starTransactionsLoaded = totalEvents++; + public static final int starSubscriptionsLoaded = totalEvents++; public static final int factCheckLoaded = totalEvents++; public static final int botStarsUpdated = totalEvents++; public static final int botStarsTransactionsLoaded = totalEvents++; public static final int channelStarsUpdated = totalEvents++; + public static final int webViewResolved = totalEvents++; + public static final int updateAllMessages = totalEvents++; //global public static final int pushMessagesUpdated = totalEvents++; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java index 58c0536b9..770c07adb 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java @@ -34,7 +34,6 @@ import android.provider.OpenableColumns; import android.text.Spannable; import android.text.TextUtils; import android.util.Base64; -import android.util.Log; import android.util.SparseArray; import android.util.TypedValue; import android.view.Gravity; @@ -85,12 +84,12 @@ import org.telegram.ui.TwoStepVerificationSetupActivity; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -100,6 +99,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; public class SendMessagesHelper extends BaseController implements NotificationCenter.NotificationCenterDelegate { @@ -3098,7 +3099,15 @@ public class SendMessagesHelper extends BaseController implements NotificationCe return voteSendTime.get(pollId, 0L); } - public void sendReaction(MessageObject messageObject, ArrayList visibleReactions, ReactionsLayoutInBubble.VisibleReaction addedReaction, boolean big, boolean addToRecent, BaseFragment parentFragment, Runnable callback) { + public void sendReaction( + MessageObject messageObject, + ArrayList visibleReactions, + ReactionsLayoutInBubble.VisibleReaction addedReaction, + boolean big, + boolean addToRecent, + BaseFragment parentFragment, + Runnable callback + ) { if (messageObject == null || parentFragment == null) { return; } @@ -3148,7 +3157,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe TLRPC.TL_messages_requestUrlAuth req = new TLRPC.TL_messages_requestUrlAuth(); req.url = url; req.flags |= 4; - getConnectionsManager().sendRequest(req, (response, error) -> { + getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { if (response != null) { if (response instanceof TLRPC.TL_urlAuthResultRequest) { TLRPC.TL_urlAuthResultRequest res = (TLRPC.TL_urlAuthResultRequest) response; @@ -3162,7 +3171,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe } else { AlertsCreator.showOpenUrlAlert(parentFragment, url, false, ask); } - }, ConnectionsManager.RequestFlagFailOnServerErrors); + }), ConnectionsManager.RequestFlagFailOnServerErrors); } public void sendCallback(final boolean cache, final MessageObject messageObject, final TLRPC.KeyboardButton button, final ChatActivity parentFragment) { @@ -3654,7 +3663,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe user.phone = newMsg.media.phone_number; user.first_name = newMsg.media.first_name; user.last_name = newMsg.media.last_name; - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.platform = ""; reason.reason = ""; reason.text = newMsg.media.vcard; @@ -3936,7 +3945,8 @@ public class SendMessagesHelper extends BaseController implements NotificationCe } newMsg.local_id = newMsg.id = getUserConfig().getNewMessageId(); newMsg.out = true; - if (isChannel && sendToPeer != null) { + TLRPC.Chat chat = sendToPeer != null ? getMessagesController().getChat(sendToPeer.channel_id) : null; + if (isChannel && sendToPeer != null && (chat == null || !chat.signatures)) { newMsg.from_id = new TLRPC.TL_peerChannel(); newMsg.from_id.channel_id = sendToPeer.channel_id; } else if (fromPeer != null) { @@ -4006,10 +4016,10 @@ public class SendMessagesHelper extends BaseController implements NotificationCe newMsg.unread = true; } else { newMsg.post = true; - if (chat.signatures) { - newMsg.from_id = new TLRPC.TL_peerUser(); - newMsg.from_id.user_id = myId; - } +// if (chat.signatures && !chat.signature_profiles) { +// newMsg.from_id = new TLRPC.TL_peerUser(); +// newMsg.from_id.user_id = myId; +// } } } } else { @@ -7029,7 +7039,46 @@ public class SendMessagesHelper extends BaseController implements NotificationCe continue; } - String path = MediaController.copyFileToCache(mediaUri, "txt"); + String ext = "txt"; + String filename = FileLoader.fixFileName(MediaController.getFileName(uri)); + if (filename != null && filename.endsWith(".zip")) { + ext = "zip"; + } + + String path = MediaController.copyFileToCache(mediaUri, ext); + if ("zip".equals(ext)) { + File zipfile = new File(path); + try { + try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipfile))) { + ZipEntry zipEntry = zis.getNextEntry(); + while (zipEntry != null) { + if (zipEntry.getName().endsWith(".txt")) { + File newFile = MediaController.createFileInCache(zipEntry.getName(), "txt"); + path = newFile.getAbsolutePath(); + FileOutputStream fos = new FileOutputStream(newFile); + byte[] buffer = new byte[1024]; + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); + break; + } + zipEntry = zis.getNextEntry(); + } + zis.closeEntry(); + } catch (IOException e) { + FileLog.e(e); + } + } catch (Exception e2) { + FileLog.e(e2); + } + try { + zipfile.delete(); + } catch (Exception e) { + FileLog.e(e); + } + } if (path == null) { continue; } @@ -8064,7 +8113,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe user.phone = result.send_message.phone_number; user.first_name = result.send_message.first_name; user.last_name = result.send_message.last_name; - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = result.send_message.vcard; reason.platform = ""; reason.reason = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java index 778dfb3ee..bf5844d4b 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java @@ -275,12 +275,16 @@ public class SharedConfig { // public static int saveToGalleryFlags; public static int mapPreviewType = 2; + public static int searchEngineType = 0; + public static String searchEngineCustomURLQuery, searchEngineCustomURLAutocomplete; public static boolean chatBubbles = Build.VERSION.SDK_INT >= 30; public static boolean raiseToSpeak = false; public static boolean raiseToListen = true; public static boolean nextMediaTap = true; public static boolean recordViaSco = false; public static boolean customTabs = true; + public static boolean inappBrowser = true; + public static boolean adaptableColorInBrowser = true; public static boolean directShare = true; public static boolean inappCamera = true; public static boolean roundCamera16to9 = true; @@ -578,11 +582,14 @@ public class SharedConfig { preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); SaveToGallerySettingsHelper.load(preferences); mapPreviewType = preferences.getInt("mapPreviewType", 2); + searchEngineType = preferences.getInt("searchEngineType", 0); raiseToListen = preferences.getBoolean("raise_to_listen", true); raiseToSpeak = preferences.getBoolean("raise_to_speak", false); nextMediaTap = preferences.getBoolean("next_media_on_tap", true); recordViaSco = preferences.getBoolean("record_via_sco", false); customTabs = preferences.getBoolean("custom_tabs", true); + inappBrowser = preferences.getBoolean("inapp_browser", true); + adaptableColorInBrowser = preferences.getBoolean("adaptableBrowser", false); directShare = preferences.getBoolean("direct_share", true); shuffleMusic = preferences.getBoolean("shuffleMusic", false); playOrderReversed = !shuffleMusic && preferences.getBoolean("playOrderReversed", false); @@ -1185,6 +1192,14 @@ public class SharedConfig { editor.apply(); } + public static void setSearchEngineType(int value) { + searchEngineType = value; + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("searchEngineType", searchEngineType); + editor.apply(); + } + public static void setNoSoundHintShowed(boolean value) { if (noSoundHintShowed == value) { return; @@ -1224,14 +1239,30 @@ public class SharedConfig { return raiseToListen && (!speak || raiseToSpeak); } - public static void toggleCustomTabs() { - customTabs = !customTabs; + public static void toggleCustomTabs(boolean newValue) { + customTabs = newValue; SharedPreferences preferences = MessagesController.getGlobalMainSettings(); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("custom_tabs", customTabs); editor.apply(); } + public static void toggleInappBrowser() { + inappBrowser = !inappBrowser; + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean("inapp_browser", inappBrowser); + editor.apply(); + } + + public static void toggleBrowserAdaptableColors() { + adaptableColorInBrowser = !adaptableColorInBrowser; + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean("adaptableBrowser", adaptableColorInBrowser); + editor.apply(); + } + public static void toggleDirectShare() { directShare = !directShare; SharedPreferences preferences = MessagesController.getGlobalMainSettings(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Timer.java b/TMessagesProj/src/main/java/org/telegram/messenger/Timer.java new file mode 100644 index 000000000..fb92829b0 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Timer.java @@ -0,0 +1,104 @@ +package org.telegram.messenger; + +import java.util.ArrayList; + +public class Timer { + + public static Timer create(String name) { + if (!BuildVars.LOGS_ENABLED) + return null; + return new Timer(name); + } + + public static Task start(Timer logger, String task) { + if (logger != null) { + return logger.start(task); + } + return null; + } + + public static void log(Timer logger, String log) { + if (logger != null) { + logger.log(log); + } + } + + public static void done(Task task) { + if (task != null) { + task.done(); + } + } + + + int pad = 0; + + final String name; + final long startTime; + + public Timer(String name) { + this.name = name; + this.startTime = System.currentTimeMillis(); + } + + public ArrayList tasks = new ArrayList<>(); + + public Task start(String task) { + Task timer = new Task(task); + tasks.add(timer); + return timer; + } + + public void log(String log) { + tasks.add(new Log(log)); + } + + public void finish() { + final long totalTime = System.currentTimeMillis() - startTime; + StringBuilder s = new StringBuilder(); + s.append(name).append(" total=").append(totalTime).append("ms\n"); + for (int i = 0; i < tasks.size(); i++) { + if (tasks.get(i) == null) continue; + s.append("#").append(i); + final int pad = tasks.get(i).pad; + for (int j = 0; j < pad; ++j) s.append(" "); + s.append(" ").append(tasks.get(i)).append("\n"); + } + FileLog.d(s.toString()); + } + + public class Task { + final long startTime; + long endTime = -1; + + final String task; + int pad; + + public Task(String task) { + startTime = System.currentTimeMillis(); + this.task = task; + Timer.this.pad++; + } + + public void done() { + if (this.endTime < 0) + this.pad = Timer.this.pad--; + this.endTime = System.currentTimeMillis(); + } + + @Override + public String toString() { + return task + ": " + (endTime < 0 ? "not done" : (endTime - startTime) + "ms"); + } + } + + public class Log extends Task { + public Log(String task) { + super(task); + } + @Override + public String toString() { + return task; + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java index b6f521b29..151002867 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java @@ -46,6 +46,7 @@ public class UserConfig extends BaseController { public TLRPC.TL_account_tmpPassword tmpPassword; public int ratingLoadTime; public int botRatingLoadTime; + public int webappRatingLoadTime; public boolean contactsReimported; public boolean hasValidDialogLoadIds; public int migrateOffsetId = -1; @@ -154,6 +155,7 @@ public class UserConfig extends BaseController { editor.putBoolean("unreadDialogsLoaded", unreadDialogsLoaded); editor.putInt("ratingLoadTime", ratingLoadTime); editor.putInt("botRatingLoadTime", botRatingLoadTime); + editor.putInt("webappRatingLoadTime", webappRatingLoadTime); editor.putBoolean("contactsReimported", contactsReimported); editor.putInt("loginTime", loginTime); editor.putBoolean("syncContacts", syncContacts); @@ -298,6 +300,7 @@ public class UserConfig extends BaseController { contactsReimported = preferences.getBoolean("contactsReimported", false); ratingLoadTime = preferences.getInt("ratingLoadTime", 0); botRatingLoadTime = preferences.getInt("botRatingLoadTime", 0); + webappRatingLoadTime = preferences.getInt("webappRatingLoadTime", 0); loginTime = preferences.getInt("loginTime", currentAccount); syncContacts = preferences.getBoolean("syncContacts", true); suggestContacts = preferences.getBoolean("suggestContacts", true); @@ -466,6 +469,7 @@ public class UserConfig extends BaseController { migrateOffsetAccess = -1; ratingLoadTime = 0; botRatingLoadTime = 0; + webappRatingLoadTime = 0; draftsLoaded = false; contactsReimported = true; syncContacts = true; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java index 8a042abab..19658ad66 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java @@ -121,7 +121,7 @@ public class UserObject { if (name == null) { return LocaleController.getString(R.string.HiddenName); } - int index = name.indexOf(" "); + int index = name.indexOf(" ", 2); if (index >= 0) { name = name.substring(0, index); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java index c24bb729f..edfe41d9e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java @@ -14,6 +14,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; +import android.net.Uri; import com.carrotsearch.randomizedtesting.Xoroshiro128PlusRandom; @@ -612,4 +613,12 @@ public class Utilities { return list == null || list.isEmpty(); } + public static Uri uriParseSafe(String link) { + try { + return Uri.parse(link); + } catch (Exception ignore) { + return null; + } + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java index 30aeb0383..257537b87 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java @@ -26,6 +26,7 @@ import org.telegram.ui.Components.PhotoFilterView; import org.telegram.ui.Components.Point; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.Weather; import java.util.ArrayList; import java.util.Locale; @@ -127,6 +128,7 @@ public class VideoEditedInfo { public static final byte TYPE_ROUND = 5; public static final byte TYPE_MESSAGE = 6; public static final byte TYPE_LINK = 7; + public static final byte TYPE_WEATHER = 8; public byte type; public byte subType; @@ -175,6 +177,7 @@ public class VideoEditedInfo { public TL_stories.MediaArea mediaArea; public TLRPC.MessageMedia media; + public Weather.State weather; public float density; public long roundOffset; @@ -255,6 +258,11 @@ public class VideoEditedInfo { roundDuration = data.readInt64(exception); } else if (type == TYPE_PHOTO) { segmentedPath = data.readString(exception); + } else if (type == TYPE_WEATHER) { + int magic = data.readInt32(exception); + if (magic == 0x7EA7539) { + weather = Weather.State.TLdeserialize(data); + } } } @@ -321,6 +329,13 @@ public class VideoEditedInfo { data.writeInt64(roundDuration); } else if (type == TYPE_PHOTO) { data.writeString(segmentedPath); + } else if (type == TYPE_WEATHER) { + if (weather == null) { + data.writeInt32(0xdeadbeef); + } else { + data.writeInt32(0x7EA7539); + weather.serializeToStream(data); + } } } @@ -374,6 +389,7 @@ public class VideoEditedInfo { entity.roundLeft = roundLeft; entity.roundRight = roundRight; entity.linkSettings = linkSettings; + entity.weather = weather; return entity; } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java index 4bf72a64a..f558a3b1a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java @@ -13,10 +13,10 @@ import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -43,15 +43,20 @@ import org.telegram.messenger.support.customtabsclient.shared.ServiceConnection; import org.telegram.messenger.support.customtabsclient.shared.ServiceConnectionCallback; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabs; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.LaunchActivity; +import org.telegram.ui.web.RestrictedDomainsList; import java.lang.ref.WeakReference; +import java.net.IDN; import java.net.URLEncoder; -import java.util.Collections; import java.util.List; import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Browser { @@ -221,9 +226,12 @@ public class Browser { public void end() { end(false); } - public void end(boolean replaced) {} + public void end(boolean replaced) { + if (onEndListener != null) { + onEndListener.run(); + } + } - private Runnable onCancelListener; public void cancel() { cancel(false); } @@ -233,20 +241,27 @@ public class Browser { } end(replaced); } + + private Runnable onCancelListener; public void onCancel(Runnable onCancelListener) { this.onCancelListener = onCancelListener; } + + private Runnable onEndListener; + public void onEnd(Runnable onEndListener) { + this.onEndListener = onEndListener; + } } public static void openUrl(final Context context, Uri uri, final boolean allowCustom, boolean tryTelegraph) { - openUrl(context, uri, allowCustom, tryTelegraph, false, null, null); + openUrl(context, uri, allowCustom, tryTelegraph, false, null, null, false); } public static void openUrl(final Context context, Uri uri, final boolean allowCustom, boolean tryTelegraph, Progress inCaseLoading) { - openUrl(context, uri, allowCustom, tryTelegraph, false, inCaseLoading, null); + openUrl(context, uri, allowCustom, tryTelegraph, false, inCaseLoading, null, false); } - public static void openUrl(final Context context, Uri uri, boolean _allowCustom, boolean tryTelegraph, boolean forceNotInternalForApps, Progress inCaseLoading, String browser) { + public static void openUrl(final Context context, Uri uri, boolean _allowCustom, boolean tryTelegraph, boolean forceNotInternalForApps, Progress inCaseLoading, String browser, boolean allowIntent) { if (context == null || uri == null) { return; } @@ -338,56 +353,8 @@ public class Browser { } uri = Uri.parse("https://" + finalPath); } - if (allowCustom && SharedConfig.customTabs && !internalUri && !scheme.equals("tel")) { - String[] browserPackageNames = null; - try { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); - List list = context.getPackageManager().queryIntentActivities(browserIntent, 0); - if (list != null && !list.isEmpty()) { - browserPackageNames = new String[list.size()]; - for (int a = 0; a < list.size(); a++) { - browserPackageNames[a] = list.get(a).activityInfo.packageName; - if (BuildVars.LOGS_ENABLED) { - FileLog.d("default browser name = " + browserPackageNames[a]); - } - } - } - } catch (Exception ignore) { - - } - - List allActivities = null; - try { - Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri); - allActivities = context.getPackageManager().queryIntentActivities(viewIntent, 0); - if (browserPackageNames != null) { - for (int a = 0; a < allActivities.size(); a++) { - for (int b = 0; b < browserPackageNames.length; b++) { - if (browserPackageNames[b].equals(allActivities.get(a).activityInfo.packageName)) { - allActivities.remove(a); - a--; - break; - } - } - } - } else { - for (int a = 0; a < allActivities.size(); a++) { - if (allActivities.get(a).activityInfo.packageName.toLowerCase().contains("browser") || allActivities.get(a).activityInfo.packageName.toLowerCase().contains("chrome")) { - allActivities.remove(a); - a--; - } - } - } - if (BuildVars.LOGS_ENABLED) { - for (int a = 0; a < allActivities.size(); a++) { - FileLog.d("device has " + allActivities.get(a).activityInfo.packageName + " to open " + uri.toString()); - } - } - } catch (Exception ignore) { - - } - - if (forceBrowser[0] || allActivities == null || allActivities.isEmpty()) { + if (allowCustom && !SharedConfig.inappBrowser && SharedConfig.customTabs && !internalUri && !scheme.equals("tel") && !isTonsite(uri.toString())) { + if (forceBrowser[0] || !openInExternalApp(context, uri.toString(), false) || !hasAppToOpen(context, uri.toString())) { if (MessagesController.getInstance(currentAccount).authDomains.contains(host)) { Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -401,11 +368,13 @@ public class Browser { PendingIntent copy = PendingIntent.getBroadcast(ApplicationLoader.applicationContext, 0, new Intent(ApplicationLoader.applicationContext, CustomTabsCopyReceiver.class), PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(getSession()); - builder.addMenuItem(LocaleController.getString("CopyLink", R.string.CopyLink), copy); + + builder.addMenuItem(LocaleController.getString(R.string.CopyLink), copy); builder.setToolbarColor(Theme.getColor(Theme.key_actionBarBrowser)); builder.setShowTitle(true); builder.setActionButton(BitmapFactory.decodeResource(context.getResources(), R.drawable.msg_filled_shareout), LocaleController.getString("ShareFile", R.string.ShareFile), PendingIntent.getBroadcast(ApplicationLoader.applicationContext, 0, share, PendingIntent.FLAG_MUTABLE ), true); + CustomTabsIntent intent = builder.build(); intent.setUseNewTask(); intent.launchUrl(context, uri); @@ -416,29 +385,24 @@ public class Browser { FileLog.e(e); } try { - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - if (internalUri) { - ComponentName componentName = new ComponentName(context.getPackageName(), LaunchActivity.class.getName()); - intent.setComponent(componentName); - } - if (!TextUtils.isEmpty(browserPackage)) { - intent.setPackage(browserPackage); - } - intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); - intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, context.getPackageName()); - if (internalUri && context instanceof LaunchActivity) { - intent.putExtra(LaunchActivity.EXTRA_FORCE_NOT_INTERNAL_APPS, forceNotInternalForApps); - ((LaunchActivity) context).onNewIntent(intent, inCaseLoading); + final boolean inappBrowser = ( + SharedConfig.inappBrowser && + TextUtils.isEmpty(browserPackage) && + !RestrictedDomainsList.getInstance().isRestricted(AndroidUtilities.getHostAuthority(uri, true)) && + (uri.getScheme() == null || "https".equals(uri.getScheme()) || "http".equals(uri.getScheme()) || "tonsite".equals(uri.getScheme())) + || + isTonsite(uri.toString()) + ); + if (internalUri && LaunchActivity.instance != null) { + LaunchActivity.dismissAllWeb(); + openAsInternalIntent(LaunchActivity.instance, uri.toString(), forceNotInternalForApps, inCaseLoading); } else { - try { - context.startActivity(intent); - } catch (Exception e2) { - if (browserPackage != null) { - intent.setPackage(browserPackage = null); - context.startActivity(intent); - } else { - FileLog.e(e2); + if (inappBrowser) { + if (!openInExternalApp(context, uri.toString(), allowIntent)) { + openInTelegramBrowser(context, uri.toString(), inCaseLoading); } + } else { + openInExternalBrowser(context, uri.toString(), allowIntent, browserPackage); } } } catch (Exception e) { @@ -446,6 +410,189 @@ public class Browser { } } + public static boolean openAsInternalIntent(Context context, String url) { + return openAsInternalIntent(context, url, false, null); + } + public static boolean openAsInternalIntent(Context context, String url, Browser.Progress progress) { + return openAsInternalIntent(context, url, false, progress); + } + public static boolean openAsInternalIntent(Context context, String url, boolean forceNotInternalForApps) { + return openAsInternalIntent(context, url, forceNotInternalForApps, null); + } + public static boolean openAsInternalIntent(Context context, String url, boolean forceNotInternalForApps, Browser.Progress progress) { + if (url == null) return false; + LaunchActivity activity = null; + if (AndroidUtilities.findActivity(context) instanceof LaunchActivity) { + activity = (LaunchActivity) AndroidUtilities.findActivity(context); + } else if (LaunchActivity.instance != null) { + activity = LaunchActivity.instance; + } else { + return false; + } + if (activity == null) return false; + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + ComponentName componentName = new ComponentName(context.getPackageName(), LaunchActivity.class.getName()); + intent.setComponent(componentName); + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, context.getPackageName()); + intent.putExtra(LaunchActivity.EXTRA_FORCE_NOT_INTERNAL_APPS, forceNotInternalForApps); + activity.onNewIntent(intent, progress); + return true; + } + + public static boolean openInTelegramBrowser(Context context, String url, Browser.Progress progress) { + if (LaunchActivity.instance != null) { + BottomSheetTabs tabs = LaunchActivity.instance.getBottomSheetTabs(); + if (tabs != null && tabs.tryReopenTab(url) != null) { + return true; + } + } + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null && fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + if (fragment == null) { + return false; + } + fragment.createArticleViewer(false).open(url, progress); + return true; + } + + public static boolean openInExternalBrowser(Context context, String url, boolean allowIntent) { + return openInExternalBrowser(context, url, allowIntent, null); + } + public static boolean openInExternalBrowser(Context context, String url, boolean allowIntent, String browser) { + if (url == null) return false; + try { + Uri uri = Uri.parse(url); + final boolean isIntentScheme = uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("intent"); + if (isIntentScheme && !allowIntent) return false; + final Intent intent = isIntentScheme ? + Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME) : + new Intent(Intent.ACTION_VIEW, uri); + if (!TextUtils.isEmpty(browser)) { + intent.setPackage(browser); + } + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, context.getPackageName()); + context.startActivity(intent); + return true; + } catch (Exception e) { + FileLog.e(e); + } + return false; + } + + public static boolean isTonsite(String url) { + String domain = AndroidUtilities.getHostAuthority(url, true); + if (domain != null && (domain.endsWith(".ton") || domain.endsWith(".adnl"))) { + return true; + } + Uri uri = Uri.parse(url); + if (uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("tonsite")) { + return true; + } + return false; + } + + private static Pattern domainPattern; + public static boolean isTonsitePunycode(String url) { + if (domainPattern == null) domainPattern = Pattern.compile("^[a-zA-Z0-9\\-\\_\\.]+\\.[a-zA-Z0-9\\-\\_]+$"); + String domain = AndroidUtilities.getHostAuthority(url, true); + if (domain != null && (domain.endsWith(".ton") || domain.endsWith(".adnl"))) { + return !domainPattern.matcher(domain).matches(); + } + Uri uri = Uri.parse(url); + if (uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("tonsite")) { + return !domainPattern.matcher(uri.getScheme()).matches(); + } + return false; + } + + public static boolean openInExternalApp(Context context, String url, boolean allowIntent) { + if (url == null) return false; + try { + if (isTonsite(url) || isInternalUrl(url, null)) return false; + Uri uri = Uri.parse(url); + url = Browser.replace( + uri, + uri.getScheme() == null ? "https" : uri.getScheme(), + uri.getHost() != null ? uri.getHost().toLowerCase() : uri.getHost(), + TextUtils.isEmpty(uri.getPath()) ? "/" : uri.getPath() + ); + uri = Uri.parse(url); + final boolean isIntentScheme = uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("intent"); + if (isIntentScheme && !allowIntent) return false; + final Intent intent = isIntentScheme ? + Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME) : + new Intent(Intent.ACTION_VIEW, uri); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_REQUIRE_NON_BROWSER); + } else if (!hasAppToOpen(context, url)) { + return false; + } + context.startActivity(intent); + return true; + } catch (Exception e) { + FileLog.e(e); + } + return false; + } + + public static boolean hasAppToOpen(Context context, String url) { + if (url == null) return false; + + String[] browserPackageNames = null; + try { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); + List list = context.getPackageManager().queryIntentActivities(browserIntent, 0); + if (list != null && !list.isEmpty()) { + browserPackageNames = new String[list.size()]; + for (int a = 0; a < list.size(); a++) { + browserPackageNames[a] = list.get(a).activityInfo.packageName; + if (BuildVars.LOGS_ENABLED) { + FileLog.d("default browser name = " + browserPackageNames[a]); + } + } + } + } catch (Exception ignore) {} + + List allActivities = null; + try { + Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + allActivities = context.getPackageManager().queryIntentActivities(viewIntent, 0); + if (browserPackageNames != null) { + for (int a = 0; a < allActivities.size(); a++) { + for (int b = 0; b < browserPackageNames.length; b++) { + if (browserPackageNames[b].equals(allActivities.get(a).activityInfo.packageName)) { + allActivities.remove(a); + a--; + break; + } + } + } + } else { + for (int a = 0; a < allActivities.size(); a++) { + final String packageName = allActivities.get(a).activityInfo.packageName.toLowerCase(); + if (isBrowserPackageName(packageName)) { + allActivities.remove(a); + a--; + } + } + } + if (BuildVars.LOGS_ENABLED) { + for (int a = 0; a < allActivities.size(); a++) { + FileLog.d("device has " + allActivities.get(a).activityInfo.packageName + " to open " + url); + } + } + } catch (Exception ignore) {} + + return allActivities != null && !allActivities.isEmpty(); + } + public static boolean isInternalUrl(String url, boolean[] forceBrowser) { return isInternalUri(Uri.parse(url), false, forceBrowser); } @@ -596,30 +743,76 @@ public class Browser { return null; } - public static String replaceHostname(Uri originalUri, String newHostname) { - String scheme = originalUri.getScheme(); - String userInfo = originalUri.getUserInfo(); - int port = originalUri.getPort(); - String path = originalUri.getPath(); - String query = originalUri.getQuery(); - String fragment = originalUri.getFragment(); + public static boolean isBrowserPackageName(String name) { + return name != null && ( + name.contains("browser") || + name.contains("chrome") || + name.contains("firefox") || + "com.microsoft.emmx".equals(name) || + "com.opera.mini.native".equals(name) || + "com.duckduckgo.mobile.android".equals(name) || + "com.UCMobile.intl".equals(name) + ); + } - StringBuilder modifiedUriBuilder = new StringBuilder(); - modifiedUriBuilder.append(scheme).append("://"); - if (userInfo != null) { - modifiedUriBuilder.append(userInfo).append("@"); + public static boolean isPunycodeAllowed(String host) { + if (host == null) return true; + String[] levels = host.split("\\."); + if (levels.length <= 0) return true; + String topLevel = levels[levels.length - 1]; + return topLevel.startsWith("xn--"); + } + + public static String IDN_toUnicode(String host) { + try { + host = IDN.toASCII(host, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) { + FileLog.e(e); } - modifiedUriBuilder.append(newHostname); - if (port != -1) { - modifiedUriBuilder.append(":").append(port); + if (!isPunycodeAllowed(host)) return host; + try { + host = IDN.toUnicode(host, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) { + FileLog.e(e); } - modifiedUriBuilder.append(path); - if (query != null) { - modifiedUriBuilder.append("?").append(query); + return host; + } + + public static String replaceHostname(Uri originalUri, String newHostname, String newScheme) { + return replace(originalUri, newScheme, newHostname, null); + } + + public static String replace(Uri originalUri, String newScheme, String newHostname, String newPath) { + final StringBuilder modifiedUriBuilder = new StringBuilder(); + final String scheme = newScheme == null ? originalUri.getScheme() : newScheme; + if (scheme != null) { + modifiedUriBuilder.append(scheme).append("://"); } - if (fragment != null) { - modifiedUriBuilder.append("#").append(fragment); + if (originalUri.getUserInfo() != null) { + modifiedUriBuilder.append(originalUri.getUserInfo()).append("@"); + } + if (newHostname == null) { + if (originalUri.getHost() != null) { + modifiedUriBuilder.append(originalUri.getHost()); + } + } else { + modifiedUriBuilder.append(newHostname); + } + if (originalUri.getPort() != -1) { + modifiedUriBuilder.append(":").append(originalUri.getPort()); + } + if (newPath != null) { + modifiedUriBuilder.append(newPath); + } else { + modifiedUriBuilder.append(originalUri.getPath()); + } + if (originalUri.getQuery() != null) { + modifiedUriBuilder.append("?").append(originalUri.getQuery()); + } + if (originalUri.getFragment() != null) { + modifiedUriBuilder.append("#").append(originalUri.getFragment()); } return modifiedUriBuilder.toString(); } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java index bc37ca6d8..207b15f9f 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java @@ -355,6 +355,17 @@ public class Camera2Session { } } + private boolean flashing; + public void setFlash(boolean flash) { + if (flashing != flash) { + flashing = flash; + updateCaptureRequest(); + } + } + public boolean getFlash() { + return flashing; + } + public float getZoom() { return currentZoom; } @@ -476,6 +487,8 @@ public class Camera2Session { captureRequestBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, isFront ? CameraMetadata.CONTROL_SCENE_MODE_NIGHT_PORTRAIT : CameraMetadata.CONTROL_SCENE_MODE_NIGHT); } + captureRequestBuilder.set(CaptureRequest.FLASH_MODE, flashing ? (recordingVideo ? CaptureRequest.FLASH_MODE_TORCH : CaptureRequest.FLASH_MODE_SINGLE) : CaptureRequest.FLASH_MODE_OFF); + if (recordingVideo) { captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range(30, 60)); captureRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java index 1f493014d..7349338bf 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java @@ -554,6 +554,22 @@ public class CameraController implements MediaRecorder.OnInfoListener { } Camera.Parameters params = camera.getParameters(); + List rawFlashModes = params.getSupportedFlashModes(); + session.availableFlashModes.clear(); + if (rawFlashModes != null) { + for (int a = 0; a < rawFlashModes.size(); a++) { + String rawFlashMode = rawFlashModes.get(a); + if (rawFlashMode.equals(Camera.Parameters.FLASH_MODE_OFF) || rawFlashMode.equals(Camera.Parameters.FLASH_MODE_ON) || rawFlashMode.equals(Camera.Parameters.FLASH_MODE_AUTO)) { + session.availableFlashModes.add(rawFlashMode); + } + } + if (!TextUtils.equals(session.getCurrentFlashMode(), params.getFlashMode()) || !session.availableFlashModes.contains(session.getCurrentFlashMode())) { + session.checkFlashMode(session.availableFlashModes.get(0)); + } else { + session.checkFlashMode(session.getCurrentFlashMode()); + } + } + session.configureRoundCamera(true); if (configureCallback != null) { configureCallback.run(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java index ae79192cb..ce82a9b91 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java @@ -138,22 +138,34 @@ public class CameraSession { return; } currentFlashMode = mode; - configurePhotoCamera(); - SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); - sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + if (isRound) { + configureRoundCamera(false); + } else { + configurePhotoCamera(); + SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); + sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + } } public void setCurrentFlashMode(String mode) { currentFlashMode = mode; - configurePhotoCamera(); - SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); - sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + if (isRound) { + configureRoundCamera(false); + } else { + configurePhotoCamera(); + SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); + sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + } } public void setTorchEnabled(boolean enabled) { try { currentFlashMode = enabled ? Camera.Parameters.FLASH_MODE_TORCH : Camera.Parameters.FLASH_MODE_OFF; - configurePhotoCamera(); + if (isRound) { + configureRoundCamera(false); + } else { + configurePhotoCamera(); + } } catch (Exception e) { FileLog.e(e); } @@ -262,7 +274,7 @@ public class CameraSession { } catch (Exception e) { // } - params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); + params.setFlashMode(currentFlashMode); params.setZoom((int) (currentZoom * maxZoom)); try { camera.setParameters(params); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java index f0566c216..69b1fb34c 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java @@ -89,7 +89,7 @@ public class RingtoneUploader implements NotificationCenter.NotificationCenterDe } else if (error.text.equals("RINGTONE_SIZE_TOO_BIG")) { NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_ERROR_SUBTITLE, LocaleController.formatString("TooLargeError", R.string.TooLargeError), LocaleController.formatString("ErrorRingtoneSizeTooBig", R.string.ErrorRingtoneSizeTooBig, (MessagesController.getInstance(currentAccount).ringtoneSizeMax / 1024))); } else { - NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_ERROR_SUBTITLE, LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.formatString("ErrorRingtoneInvalidFormat", R.string.ErrorRingtoneInvalidFormat)); + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_ERROR_SUBTITLE, LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.getString(R.string.ErrorRingtoneInvalidFormat)); } }); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java index 1c819bf6c..41bdd821d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java @@ -1,6 +1,8 @@ package org.telegram.messenger.utils; +import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.util.Base64; import androidx.core.util.Pair; @@ -15,7 +17,10 @@ import org.telegram.messenger.AccountInstance; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import java.io.InputStream; @@ -28,8 +33,6 @@ public class BillingUtilities { private static final String CURRENCY_FILE = "currencies.json"; private static final String CURRENCY_EXP = "exp"; - private static TLRPC.InputStorePaymentPurpose remPaymentPurpose; - @SuppressWarnings("ConstantConditions") public static void extractCurrencyExp(Map currencyExpMap) { if (!currencyExpMap.isEmpty()) { @@ -55,21 +58,146 @@ public class BillingUtilities { long currentAccountId = accountInstance.getUserConfig().getClientUserId(); byte[] currentAccountIdBytes = String.valueOf(currentAccountId).getBytes(Charsets.UTF_8); String obfuscatedAccountId = Base64.encodeToString(currentAccountIdBytes, Base64.DEFAULT); + return Pair.create(obfuscatedAccountId, savePurpose(paymentPurpose)); + } - SerializedData serializedData = new SerializedData(paymentPurpose.getObjectSize()); - paymentPurpose.serializeToStream(serializedData); - String obfuscatedData = Base64.encodeToString(serializedData.toByteArray(), Base64.DEFAULT); - serializedData.cleanup(); - if ( - paymentPurpose instanceof TLRPC.TL_inputStorePaymentPremiumGiftCode || - paymentPurpose instanceof TLRPC.TL_inputStorePaymentPremiumGiveaway - ) { - remPaymentPurpose = paymentPurpose; - return Pair.create(obfuscatedAccountId, obfuscatedAccountId); - } else { - remPaymentPurpose = null; + public static String savePurpose(TLRPC.InputStorePaymentPurpose paymentPurpose) { + final long id = Utilities.random.nextLong(); + FileLog.d("BillingUtilities.savePurpose id=" + id + " paymentPurpose=" + paymentPurpose); + + SerializedData id_data = new SerializedData(8); + id_data.writeInt64(id); + String id_hex = Utilities.bytesToHex(id_data.toByteArray()); + id_data.cleanup(); + + FileLog.d("BillingUtilities.savePurpose id_hex=" + id_hex + " paymentPurpose=" + paymentPurpose); + + TL_savedPurpose savedPurpose = new TL_savedPurpose(); + savedPurpose.id = id; + savedPurpose.flags = 1; + savedPurpose.purpose = paymentPurpose; + + SerializedData data = new SerializedData(savedPurpose.getObjectSize()); + savedPurpose.serializeToStream(data); + String full_data_hex = Utilities.bytesToHex(data.toByteArray()); + data.cleanup(); + + if (savedPurpose.getObjectSize() > 28) { + FileLog.d("BillingUtilities.savePurpose: sending short version, original size is " + savedPurpose.getObjectSize() + " bytes"); + + savedPurpose.flags = 0; + savedPurpose.purpose = null; + } + + data = new SerializedData(savedPurpose.getObjectSize()); + savedPurpose.serializeToStream(data); + String data_hex = Utilities.bytesToHex(data.toByteArray()); + data.cleanup(); + + SharedPreferences prefs = ApplicationLoader.applicationContext.getSharedPreferences("purchases", Activity.MODE_PRIVATE); + prefs.edit().putString(id_hex, full_data_hex).apply(); + FileLog.d("BillingUtilities.savePurpose: saved {" + full_data_hex + "} under " + id_hex); + FileLog.d("BillingUtilities.savePurpose: but sending {" + data_hex + "}"); + + return data_hex; + } + + public static TLRPC.InputStorePaymentPurpose getPurpose(String data_hex) throws RuntimeException { + FileLog.d("BillingUtilities.getPurpose " + data_hex); + + SerializedData data = new SerializedData(Utilities.hexToBytes(data_hex)); + TL_savedPurpose savedPurpose = TL_savedPurpose.TLdeserialize(data, data.readInt32(true), true); + data.cleanup(); + + if (savedPurpose.purpose != null) { + FileLog.d("BillingUtilities.getPurpose: got purpose from received obfuscated profile id"); + return savedPurpose.purpose; + } + + SerializedData id_data = new SerializedData(8); + id_data.writeInt64(savedPurpose.id); + String id_hex = Utilities.bytesToHex(id_data.toByteArray()); + id_data.cleanup(); + + FileLog.d("BillingUtilities.getPurpose: searching purpose under " + id_hex); + + SharedPreferences prefs = ApplicationLoader.applicationContext.getSharedPreferences("purchases", Activity.MODE_PRIVATE); + String full_data_hex = prefs.getString(id_hex, null); + if (full_data_hex == null) { + FileLog.d("BillingUtilities.getPurpose: purpose under " + id_hex + " not found"); + throw new RuntimeException("no purpose under " + id_hex + " found :("); + } + + FileLog.d("BillingUtilities.getPurpose: got {" + full_data_hex + "} under " + id_hex); + + SerializedData full_data = new SerializedData(Utilities.hexToBytes(full_data_hex)); + savedPurpose = TL_savedPurpose.TLdeserialize(full_data, full_data.readInt32(true), true); + full_data.cleanup(); + + return savedPurpose.purpose; + } + + public static void clearPurpose(String data_hex) { + try { + FileLog.d("BillingUtilities.clearPurpose: got {" + data_hex + "}"); + + SerializedData data = new SerializedData(Utilities.hexToBytes(data_hex)); + TL_savedPurpose savedPurpose = TL_savedPurpose.TLdeserialize(data, data.readInt32(true), true); + + SerializedData id_data = new SerializedData(8); + id_data.writeInt64(savedPurpose.id); + String id_hex = Utilities.bytesToHex(id_data.toByteArray()); + id_data.cleanup(); + FileLog.d("BillingUtilities.clearPurpose: id_hex = " + id_hex); + + SharedPreferences prefs = ApplicationLoader.applicationContext.getSharedPreferences("purchases", Activity.MODE_PRIVATE); + prefs.edit().remove(id_hex).apply(); + } catch (Exception e) { + FileLog.e(e); + } + } + + public static class TL_savedPurpose extends TLObject { + public static final int constructor = 0x1d8ad892; + + public int flags; + public long id; + public TLRPC.InputStorePaymentPurpose purpose; + + public static TL_savedPurpose TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + TL_savedPurpose result = null; + switch (constructor) { + case TL_savedPurpose.constructor: + result = new TL_savedPurpose(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_savedPurpose", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + id = stream.readInt64(exception); + if ((flags & 1) != 0) { + purpose = TLRPC.InputStorePaymentPurpose.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt64(id); + if ((flags & 1) != 0) { + purpose.serializeToStream(stream); + } } - return Pair.create(obfuscatedAccountId, obfuscatedData); } private static AccountInstance findAccountById(long accountId) { @@ -99,19 +227,11 @@ public class BillingUtilities { try { TLRPC.InputStorePaymentPurpose purpose; - if (remPaymentPurpose == null) { - try { - byte[] obfuscatedDataBytes = Base64.decode(obfuscatedData, Base64.DEFAULT); - SerializedData data = new SerializedData(obfuscatedDataBytes); - purpose = TLRPC.InputStorePaymentPurpose.TLdeserialize(data, data.readInt32(true), true); - data.cleanup(); - } catch (Exception e) { - FileLog.e("Billing: Extract payload, no remPaymentPurpose; failed to get purpose", e); - purpose = null; - } - } else { - purpose = remPaymentPurpose; - remPaymentPurpose = null; + try { + purpose = getPurpose(obfuscatedData); + } catch (Exception e) { + FileLog.e("Billing: Extract payload, failed to get purpose", e); + purpose = null; } byte[] obfuscatedAccountIdBytes = Base64.decode(obfuscatedAccountId, Base64.DEFAULT); @@ -128,4 +248,9 @@ public class BillingUtilities { return null; } } + + public static void cleanupPurchase(Purchase purchase) { + AccountIdentifiers identifiers = purchase.getAccountIdentifiers(); + clearPurpose(identifiers.getObfuscatedProfileId()); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java b/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java index 95ad24841..c0176b151 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java @@ -41,11 +41,7 @@ import android.view.View; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.exifinterface.media.ExifInterface; - -import com.google.zxing.common.detector.MathUtils; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; @@ -1342,9 +1338,14 @@ public class TextureRenderer { } private void initLocationEntity(VideoEditedInfo.MediaEntity entity) { - LocationMarker marker = new LocationMarker(ApplicationLoader.applicationContext, entity.density, 0); + final int variant = entity.type == VideoEditedInfo.MediaEntity.TYPE_LOCATION ? LocationMarker.VARIANT_LOCATION : LocationMarker.VARIANT_WEATHER; + LocationMarker marker = new LocationMarker(ApplicationLoader.applicationContext, variant, entity.density, 0); + marker.setIsVideo(true); marker.setText(entity.text); marker.setType(entity.subType, entity.color); + if (entity.weather != null && entity.entities.isEmpty()) { + marker.setCodeEmoji(UserConfig.selectedAccount, entity.weather.getEmoji()); + } marker.setMaxWidth(entity.viewWidth); if (entity.entities.size() == 1) { marker.forceEmoji(); diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java index 795ca50a9..b09615521 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java @@ -372,8 +372,9 @@ public class ConnectionsManager extends BaseController { if (response != 0) { NativeByteBuffer buff = NativeByteBuffer.wrap(response); buff.reused = true; + int magic = buff.readInt32(true); try { - resp = object.deserializeResponse(buff, buff.readInt32(true), true); + resp = object.deserializeResponse(buff, magic, true); } catch (Exception e2) { if (BuildVars.DEBUG_PRIVATE_VERSION) { throw e2; diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java index 7fac04eac..f7ee2e99a 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java @@ -26,6 +26,7 @@ import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.Utilities; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stats; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.Stories.MessageMediaStoryFull; @@ -78,7 +79,7 @@ public class TLRPC { public static final int MESSAGE_FLAG_HAS_BOT_ID = 0x00000800; public static final int MESSAGE_FLAG_EDITED = 0x00008000; - public static final int LAYER = 183; + public static final int LAYER = 186; public static abstract class EmailVerifyPurpose extends TLObject { @@ -1745,6 +1746,7 @@ public class TLRPC { public boolean voice; public byte[] waveform; public int preload_prefix_size; + public double video_start_ts; public boolean nosound; public static DocumentAttribute TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { @@ -1768,9 +1770,12 @@ public class TLRPC { case 0x15590068: result = new TL_documentAttributeFilename(); break; - case 0xd38ff1c2: + case TL_documentAttributeVideo.constructor: result = new TL_documentAttributeVideo(); break; + case TL_documentAttributeVideo_layer184.constructor: + result = new TL_documentAttributeVideo_layer184(); + break; case 0x5910cccb: result = new TL_documentAttributeVideo_layer65(); break; @@ -1886,6 +1891,43 @@ public class TLRPC { } public static class TL_documentAttributeVideo extends DocumentAttribute { + public static final int constructor = 0x17399fad; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + round_message = (flags & 1) != 0; + supports_streaming = (flags & 2) != 0; + nosound = (flags & 8) != 0; + duration = stream.readDouble(exception); + w = stream.readInt32(exception); + h = stream.readInt32(exception); + if ((flags & 4) != 0) { + preload_prefix_size = stream.readInt32(exception); + } + if ((flags & 16) != 0) { + video_start_ts = stream.readDouble(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = round_message ? (flags | 1) : (flags &~ 1); + flags = supports_streaming ? (flags | 2) : (flags &~ 2); + flags = nosound ? (flags | 8) : (flags &~ 8); + stream.writeInt32(flags); + stream.writeDouble(duration); + stream.writeInt32(w); + stream.writeInt32(h); + if ((flags & 4) != 0) { + stream.writeInt32(preload_prefix_size); + } + if ((flags & 16) != 0) { + stream.writeDouble(video_start_ts); + } + } + } + + public static class TL_documentAttributeVideo_layer184 extends TL_documentAttributeVideo { public static final int constructor = 0xd38ff1c2; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -6069,7 +6111,10 @@ public class TLRPC { public boolean verified; public boolean scam; public boolean fake; + public boolean can_refulfill_subscription; public int color; + public TL_starsSubscriptionPricing subscription_pricing; + public long subscription_form_id; public static ChatInvite TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { ChatInvite result = null; @@ -6077,6 +6122,9 @@ public class TLRPC { case TL_chatInvite.constructor: result = new TL_chatInvite(); break; + case TL_chatInvite_layer185.constructor: + result = new TL_chatInvite_layer185(); + break; case TL_chatInvite_layer165.constructor: result = new TL_chatInvite_layer165(); break; @@ -6098,6 +6146,90 @@ public class TLRPC { } public static class TL_chatInvite extends ChatInvite { + public static final int constructor = 0xfe65389d; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + channel = (flags & 1) != 0; + broadcast = (flags & 2) != 0; + isPublic = (flags & 4) != 0; + megagroup = (flags & 8) != 0; + request_needed = (flags & 64) != 0; + verified = (flags & 128) != 0; + scam = (flags & 256) != 0; + fake = (flags & 512) != 0; + can_refulfill_subscription = (flags & 2048) != 0; + title = stream.readString(exception); + boolean hasAbout = (flags & 32) != 0; + if (hasAbout) { + about = stream.readString(exception); + } + photo = Photo.TLdeserialize(stream, stream.readInt32(exception), exception); + participants_count = stream.readInt32(exception); + if ((flags & 16) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + User object = User.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + participants.add(object); + } + } + color = stream.readInt32(exception); + if ((flags & 1024) != 0) { + subscription_pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 4096) != 0) { + subscription_form_id = stream.readInt64(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = channel ? (flags | 1) : (flags &~ 1); + flags = broadcast ? (flags | 2) : (flags &~ 2); + flags = isPublic ? (flags | 4) : (flags &~ 4); + flags = megagroup ? (flags | 8) : (flags &~ 8); + flags = about != null ? (flags | 32) : (flags &~ 32); + flags = request_needed ? (flags | 64) : (flags &~ 64); + flags = verified ? (flags | 128) : (flags &~ 128); + flags = scam ? (flags | 256) : (flags &~ 256); + flags = fake ? (flags | 512) : (flags &~ 512); + flags = can_refulfill_subscription ? (flags | 2048) : (flags &~ 2048); + stream.writeInt32(flags); + stream.writeString(title); + if (about != null) { + stream.writeString(about); + } + photo.serializeToStream(stream); + stream.writeInt32(participants_count); + if ((flags & 16) != 0) { + stream.writeInt32(0x1cb5c415); + int count = participants.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + participants.get(a).serializeToStream(stream); + } + } + stream.writeInt32(color); + if ((flags & 1024) != 0) { + subscription_pricing.serializeToStream(stream); + } + if ((flags & 4096) != 0) { + stream.writeInt64(subscription_form_id); + } + } + } + + public static class TL_chatInvite_layer185 extends TL_chatInvite { public static final int constructor = 0xcde0ec40; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -11230,375 +11362,6 @@ public class TLRPC { } } - public static class TL_bots_setBotInfo extends TLObject { - public static final int constructor = 0x10cf3123; - - public int flags; - public InputUser bot; - public String lang_code; - public String name; - public String about; - public String description; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - if ((flags & 4) != 0) { - bot.serializeToStream(stream); - } - stream.writeString(lang_code); - if ((flags & 8) != 0) { - stream.writeString(name); - } - if ((flags & 1) != 0) { - stream.writeString(about); - } - if ((flags & 2) != 0) { - stream.writeString(description); - } - } - } - - public static class TL_bots_getBotInfo extends TLObject { - public static final int constructor = 0xdcd914fd; - - public int flags; - public InputUser bot; - public String lang_code; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return BotInfo.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - if ((flags & 1) != 0) { - bot.serializeToStream(stream); - } - stream.writeString(lang_code); - } - } - - public static class TL_bots_reorderUsernames extends TLObject { - public static final int constructor = 0x9709b1c2; - - public InputUser bot; - public ArrayList order = new ArrayList<>(); - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - stream.writeInt32(0x1cb5c415); - int count = order.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - stream.writeString(order.get(a)); - } - } - } - - public static class TL_bots_toggleUsername extends TLObject { - public static final int constructor = 0x53ca973; - - public InputUser bot; - public String username; - public boolean active; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - stream.writeString(username); - stream.writeBool(active); - } - } - - public static abstract class BotInfo extends TLObject { - public long user_id; - public String description; - public ArrayList commands = new ArrayList<>(); - public int version; - public BotMenuButton menu_button; - public int flags; - public Photo description_photo; - public Document description_document; - - public static BotInfo TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - BotInfo result = null; - switch (constructor) { - case 0xe4169b5d: - result = new TL_botInfo_layer140(); - break; - case 0xbb2e37ce: - result = new TL_botInfoEmpty_layer48(); - break; - case 0x98e81d3a: - result = new TL_botInfo_layer131(); - break; - case 0x9cf585d: - result = new TL_botInfo_layer48(); - break; - case 0x1b74b335: - result = new TL_botInfo_layer139(); - break; - case 0x8f300b57: - result = new TL_botInfo(); - break; - } - if (result == null && exception) { - throw new RuntimeException(String.format("can't parse magic %x in BotInfo", constructor)); - } - if (result != null) { - result.readParams(stream, exception); - } - return result; - } - } - - public static class TL_botInfoEmpty_layer48 extends TL_botInfo { - public static final int constructor = 0xbb2e37ce; - - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_botInfo_layer131 extends TL_botInfo { - public static final int constructor = 0x98e81d3a; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt32(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32((int) user_id); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - } - - public static class TL_botInfo_layer48 extends TL_botInfo { - public static final int constructor = 0x9cf585d; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt32(exception); - version = stream.readInt32(exception); - stream.readString(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32((int) user_id); - stream.writeInt32(version); - stream.writeString(""); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - } - - public static class TL_botInfo_layer139 extends BotInfo { - public static final int constructor = 0x1b74b335; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt64(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt64(user_id); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - } - - public static class TL_botInfo extends BotInfo { - public static final int constructor = 0x8f300b57; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - if ((flags & 1) != 0) { - user_id = stream.readInt64(exception); - } - if ((flags & 2) != 0) { - description = stream.readString(exception); - } - if ((flags & 16) != 0) { - description_photo = Photo.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 32) != 0) { - description_document = Document.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 4) != 0) { - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - if ((flags & 8) != 0) { - menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - if ((flags & 1) != 0) { - stream.writeInt64(user_id); - } - if ((flags & 2) != 0) { - stream.writeString(description); - } - if ((flags & 16) != 0) { - description_photo.serializeToStream(stream); - } - if ((flags & 32) != 0) { - description_document.serializeToStream(stream); - } - if ((flags & 4) != 0) { - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - if ((flags & 8) != 0) { - menu_button.serializeToStream(stream); - } - } - } - - public static class TL_botInfo_layer140 extends TL_botInfo { - public static final int constructor = 0xe4169b5d; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt64(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt64(user_id); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - menu_button.serializeToStream(stream); - } - } - public static abstract class InputGame extends TLObject { public InputUser bot_id; public String short_name; @@ -12995,7 +12758,7 @@ public class TLRPC { public Photo chat_photo; public PeerNotifySettings notify_settings; public TL_chatInviteExported exported_invite; - public ArrayList bot_info = new ArrayList<>(); + public ArrayList bot_info = new ArrayList<>(); public int flags; public boolean can_view_participants; public boolean can_set_username; @@ -13055,6 +12818,7 @@ public class TLRPC { public boolean can_view_revenue; public boolean can_view_stars_revenue; public boolean paid_media_allowed; + public boolean paid_reactions_available; public long inviterId; //custom public int invitesCount; //custom @@ -13265,7 +13029,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13405,7 +13169,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13512,7 +13276,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13694,7 +13458,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13795,7 +13559,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13950,7 +13714,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14043,7 +13807,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14162,7 +13926,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14356,7 +14120,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14454,7 +14218,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14599,7 +14363,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14845,7 +14609,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15086,7 +14850,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15279,7 +15043,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15416,7 +15180,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15547,7 +15311,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15690,6 +15454,7 @@ public class TLRPC { can_view_revenue = (flags2 & 4096) != 0; can_view_stars_revenue = (flags2 & 32768) != 0; paid_media_allowed = (flags2 & 16384) != 0; + paid_reactions_available = (flags2 & 65536) != 0; id = stream.readInt64(exception); about = stream.readString(exception); if ((flags & 1) != 0) { @@ -15724,7 +15489,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15852,6 +15617,7 @@ public class TLRPC { flags2 = can_view_revenue ? (flags2 | 4096) : (flags2 &~ 4096); flags2 = paid_media_allowed ? (flags2 | 16384) : (flags2 &~ 16384); flags2 = can_view_stars_revenue ? (flags2 | 32768) : (flags2 &~ 32768); + flags2 = paid_reactions_available ? (flags2 | 65536) : (flags2 &~ 65536); stream.writeInt32(flags2); stream.writeInt64(id); stream.writeString(about); @@ -16034,7 +15800,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -16334,7 +16100,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -16630,7 +16396,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -16908,7 +16674,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17178,7 +16944,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17437,7 +17203,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17706,7 +17472,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17974,7 +17740,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18183,7 +17949,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18361,7 +18127,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18527,7 +18293,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18672,7 +18438,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18810,7 +18576,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18942,7 +18708,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19042,7 +18808,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19108,7 +18874,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19230,7 +18996,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19345,7 +19111,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19441,7 +19207,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19521,7 +19287,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19594,7 +19360,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19658,7 +19424,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19734,7 +19500,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19831,7 +19597,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19925,7 +19691,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -20018,7 +19784,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -25321,6 +25087,7 @@ public class TLRPC { public boolean bot_nochats; public boolean bot_can_edit; public boolean bot_business; + public boolean bot_has_main_app; public boolean verified; public boolean restricted; public boolean min; @@ -25339,7 +25106,7 @@ public class TLRPC { public String lang_code; public boolean inactive; public boolean explicit_content; - public ArrayList restriction_reason = new ArrayList<>(); + public ArrayList restriction_reason = new ArrayList<>(); public boolean bot_attach_menu; public boolean bot_menu_webview; public boolean attach_menu_enabled; @@ -25348,6 +25115,7 @@ public class TLRPC { public int stories_max_id; public TL_peerColor color; public TL_peerColor profile_color; + public int bot_active_users; public static User TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { User result = null; @@ -25355,6 +25123,12 @@ public class TLRPC { case TL_user.constructor: result = new TL_user(); break; + case TL_user_layer185.constructor: + result = new TL_user_layer185(); + break; + case TL_user_layer184.constructor: + result = new TL_user_layer184(); + break; case TL_user_layer166.constructor: result = new TL_user_layer166(); break; @@ -25501,6 +25275,444 @@ public class TLRPC { } public static class TL_user extends User { + public static final int constructor = 0x83314fca; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + self = (flags & 1024) != 0; + contact = (flags & 2048) != 0; + mutual_contact = (flags & 4096) != 0; + deleted = (flags & 8192) != 0; + bot = (flags & 16384) != 0; + bot_chat_history = (flags & 32768) != 0; + bot_nochats = (flags & 65536) != 0; + verified = (flags & 131072) != 0; + restricted = (flags & 262144) != 0; + min = (flags & 1048576) != 0; + bot_inline_geo = (flags & 2097152) != 0; + support = (flags & 8388608) != 0; + scam = (flags & 16777216) != 0; + apply_min_photo = (flags & 33554432) != 0; + fake = (flags & 67108864) != 0; + bot_attach_menu = (flags & 134217728) != 0; + premium = (flags & 268435456) != 0; + attach_menu_enabled = (flags & 536870912) != 0; + flags2 = stream.readInt32(exception); + bot_can_edit = (flags2 & 2) != 0; + close_friend = (flags2 & 4) != 0; + stories_hidden = (flags2 & 8) != 0; + stories_unavailable = (flags2 & 16) != 0; + contact_require_premium = (flags2 & 1024) != 0; + bot_business = (flags2 & 2048) != 0; + bot_has_main_app = (flags2 & 8192) != 0; + id = stream.readInt64(exception); + if ((flags & 1) != 0) { + access_hash = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + first_name = stream.readString(exception); + } + if ((flags & 4) != 0) { + last_name = stream.readString(exception); + } + if ((flags & 8) != 0) { + username = stream.readString(exception); + } + if ((flags & 16) != 0) { + phone = stream.readString(exception); + } + if ((flags & 32) != 0) { + photo = UserProfilePhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 64) != 0) { + status = UserStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 16384) != 0) { + bot_info_version = stream.readInt32(exception); + } + if ((flags & 262144) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 524288) != 0) { + bot_inline_placeholder = stream.readString(exception); + } + if ((flags & 4194304) != 0) { + lang_code = stream.readString(exception); + } + if ((flags & 1073741824) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + try { + if ((flags2 & 32) != 0) { + stories_max_id = stream.readInt32(exception); + } + } catch (Throwable e) { + FileLog.e(e); + } + if ((flags2 & 256) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 4096) != 0) { + bot_active_users = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + if (username == null) { + flags = flags & ~8; + } + stream.writeInt32(constructor); + flags = self ? (flags | 1024) : (flags &~ 1024); + flags = contact ? (flags | 2048) : (flags &~ 2048); + flags = mutual_contact ? (flags | 4096) : (flags &~ 4096); + flags = deleted ? (flags | 8192) : (flags &~ 8192); + flags = bot ? (flags | 16384) : (flags &~ 16384); + flags = bot_chat_history ? (flags | 32768) : (flags &~ 32768); + flags = bot_nochats ? (flags | 65536) : (flags &~ 65536); + flags = verified ? (flags | 131072) : (flags &~ 131072); + flags = restricted ? (flags | 262144) : (flags &~ 262144); + flags = min ? (flags | 1048576) : (flags &~ 1048576); + flags = bot_inline_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = support ? (flags | 8388608) : (flags &~ 8388608); + flags = scam ? (flags | 16777216) : (flags &~ 16777216); + flags = apply_min_photo ? (flags | 33554432) : (flags &~ 33554432); + flags = fake ? (flags | 67108864) : (flags &~ 67108864); + flags = bot_attach_menu ? (flags | 134217728) : (flags &~ 134217728); + flags = premium ? (flags | 268435456) : (flags &~ 268435456); + flags = attach_menu_enabled ? (flags | 536870912) : (flags &~ 536870912); + stream.writeInt32(flags); + flags2 = bot_can_edit ? (flags2 | 2) : (flags2 &~ 2); + flags2 = close_friend ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_hidden ? (flags2 | 8) : (flags2 &~ 8); + flags2 = stories_unavailable ? (flags2 | 16) : (flags2 &~ 16); + flags2 = contact_require_premium ? (flags2 | 1024) : (flags2 &~ 1024); + flags2 = bot_business ? (flags2 | 2048) : (flags2 &~ 2048); + flags2 = bot_has_main_app ? (flags2 | 8192) : (flags2 &~ 8192); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 1) != 0) { + stream.writeInt64(access_hash); + } + if ((flags & 2) != 0) { + stream.writeString(first_name); + } + if ((flags & 4) != 0) { + stream.writeString(last_name); + } + if ((flags & 8) != 0) { + stream.writeString(username); + } + if ((flags & 16) != 0) { + stream.writeString(phone); + } + if ((flags & 32) != 0) { + photo.serializeToStream(stream); + } + if ((flags & 64) != 0) { + status.serializeToStream(stream); + } + if ((flags & 16384) != 0) { + stream.writeInt32(bot_info_version); + } + if ((flags & 262144) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 524288) != 0) { + stream.writeString(bot_inline_placeholder); + } + if ((flags & 4194304) != 0) { + stream.writeString(lang_code); + } + if ((flags & 1073741824) != 0) { + emoji_status.serializeToStream(stream); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 32) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 256) != 0) { + if (color == null) { + color = new TL_peerColor(); + } + color.serializeToStream(stream); + } + if ((flags2 & 512) != 0) { + if (profile_color == null) { + profile_color = new TL_peerColor(); + } + profile_color.serializeToStream(stream); + } + if ((flags2 & 4096) != 0) { + stream.writeInt32(bot_active_users); + } + } + } + + public static class TL_user_layer185 extends TL_user { + public static final int constructor = 0x4fe9cce0; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + self = (flags & 1024) != 0; + contact = (flags & 2048) != 0; + mutual_contact = (flags & 4096) != 0; + deleted = (flags & 8192) != 0; + bot = (flags & 16384) != 0; + bot_chat_history = (flags & 32768) != 0; + bot_nochats = (flags & 65536) != 0; + verified = (flags & 131072) != 0; + restricted = (flags & 262144) != 0; + min = (flags & 1048576) != 0; + bot_inline_geo = (flags & 2097152) != 0; + support = (flags & 8388608) != 0; + scam = (flags & 16777216) != 0; + apply_min_photo = (flags & 33554432) != 0; + fake = (flags & 67108864) != 0; + bot_attach_menu = (flags & 134217728) != 0; + premium = (flags & 268435456) != 0; + attach_menu_enabled = (flags & 536870912) != 0; + flags2 = stream.readInt32(exception); + bot_can_edit = (flags2 & 2) != 0; + close_friend = (flags2 & 4) != 0; + stories_hidden = (flags2 & 8) != 0; + stories_unavailable = (flags2 & 16) != 0; + contact_require_premium = (flags2 & 1024) != 0; + bot_business = (flags2 & 2048) != 0; + id = stream.readInt64(exception); + if ((flags & 1) != 0) { + access_hash = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + first_name = stream.readString(exception); + } + if ((flags & 4) != 0) { + last_name = stream.readString(exception); + } + if ((flags & 8) != 0) { + username = stream.readString(exception); + } + if ((flags & 16) != 0) { + phone = stream.readString(exception); + } + if ((flags & 32) != 0) { + photo = UserProfilePhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 64) != 0) { + status = UserStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 16384) != 0) { + bot_info_version = stream.readInt32(exception); + } + if ((flags & 262144) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 524288) != 0) { + bot_inline_placeholder = stream.readString(exception); + } + if ((flags & 4194304) != 0) { + lang_code = stream.readString(exception); + } + if ((flags & 1073741824) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + try { + if ((flags2 & 32) != 0) { + stories_max_id = stream.readInt32(exception); + } + } catch (Throwable e) { + FileLog.e(e); + } + if ((flags2 & 256) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 4096) != 0) { + bot_active_users = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + if (username == null) { + flags = flags & ~8; + } + stream.writeInt32(constructor); + flags = self ? (flags | 1024) : (flags &~ 1024); + flags = contact ? (flags | 2048) : (flags &~ 2048); + flags = mutual_contact ? (flags | 4096) : (flags &~ 4096); + flags = deleted ? (flags | 8192) : (flags &~ 8192); + flags = bot ? (flags | 16384) : (flags &~ 16384); + flags = bot_chat_history ? (flags | 32768) : (flags &~ 32768); + flags = bot_nochats ? (flags | 65536) : (flags &~ 65536); + flags = verified ? (flags | 131072) : (flags &~ 131072); + flags = restricted ? (flags | 262144) : (flags &~ 262144); + flags = min ? (flags | 1048576) : (flags &~ 1048576); + flags = bot_inline_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = support ? (flags | 8388608) : (flags &~ 8388608); + flags = scam ? (flags | 16777216) : (flags &~ 16777216); + flags = apply_min_photo ? (flags | 33554432) : (flags &~ 33554432); + flags = fake ? (flags | 67108864) : (flags &~ 67108864); + flags = bot_attach_menu ? (flags | 134217728) : (flags &~ 134217728); + flags = premium ? (flags | 268435456) : (flags &~ 268435456); + flags = attach_menu_enabled ? (flags | 536870912) : (flags &~ 536870912); + stream.writeInt32(flags); + flags2 = bot_can_edit ? (flags2 | 2) : (flags2 &~ 2); + flags2 = close_friend ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_hidden ? (flags2 | 8) : (flags2 &~ 8); + flags2 = stories_unavailable ? (flags2 | 16) : (flags2 &~ 16); + flags2 = contact_require_premium ? (flags2 | 1024) : (flags2 &~ 1024); + flags2 = bot_business ? (flags2 | 2048) : (flags2 &~ 2048); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 1) != 0) { + stream.writeInt64(access_hash); + } + if ((flags & 2) != 0) { + stream.writeString(first_name); + } + if ((flags & 4) != 0) { + stream.writeString(last_name); + } + if ((flags & 8) != 0) { + stream.writeString(username); + } + if ((flags & 16) != 0) { + stream.writeString(phone); + } + if ((flags & 32) != 0) { + photo.serializeToStream(stream); + } + if ((flags & 64) != 0) { + status.serializeToStream(stream); + } + if ((flags & 16384) != 0) { + stream.writeInt32(bot_info_version); + } + if ((flags & 262144) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 524288) != 0) { + stream.writeString(bot_inline_placeholder); + } + if ((flags & 4194304) != 0) { + stream.writeString(lang_code); + } + if ((flags & 1073741824) != 0) { + emoji_status.serializeToStream(stream); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 32) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 256) != 0) { + if (color == null) { + color = new TL_peerColor(); + } + color.serializeToStream(stream); + } + if ((flags2 & 512) != 0) { + if (profile_color == null) { + profile_color = new TL_peerColor(); + } + profile_color.serializeToStream(stream); + } + if ((flags2 & 4096) != 0) { + stream.writeInt32(bot_active_users); + } + } + } + + public static class TL_user_layer184 extends TL_user { public static final int constructor = 0x215c4438; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -25565,7 +25777,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -25775,7 +25987,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -25981,7 +26193,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26170,7 +26382,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26344,7 +26556,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26485,7 +26697,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26618,7 +26830,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -27716,6 +27928,8 @@ public class TLRPC { public String cryptoCurrency; public long cryptoAmount; public WallPaper wallpaper; + public Peer peer; + public byte[] payload; public static MessageAction TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { MessageAction result = null; @@ -27915,6 +28129,12 @@ public class TLRPC { case TL_messageActionRequestedPeer.constructor: result = new TL_messageActionRequestedPeer(); break; + case TL_messageActionPaymentRefunded.constructor: + result = new TL_messageActionPaymentRefunded(); + break; + case TL_messageActionGiftStars.constructor: + result = new TL_messageActionGiftStars(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in MessageAction", constructor)); @@ -27942,6 +28162,72 @@ public class TLRPC { } } + public static class TL_messageActionPaymentRefunded extends MessageAction { + public static final int constructor = 0x41b3e202; + + public TL_paymentCharge charge; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + currency = stream.readString(exception); + total_amount = stream.readInt64(exception); + if ((flags & 1) != 0) { + payload = stream.readByteArray(exception); + } + charge = TL_paymentCharge.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeString(currency); + stream.writeInt64(total_amount); + if ((flags & 1) != 0) { + stream.writeByteArray(payload); + } + charge.serializeToStream(stream); + } + } + + public static class TL_messageActionGiftStars extends MessageAction { + public static final int constructor = 0x45d5b021; + + public long stars; + public TL_paymentCharge charge; + public String transaction_id; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + currency = stream.readString(exception); + amount = stream.readInt64(exception); + stars = stream.readInt64(exception); + if ((flags & 1) != 0) { + cryptoCurrency = stream.readString(exception); + cryptoAmount = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + transaction_id = stream.readString(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeString(currency); + stream.writeInt64(amount); + stream.writeInt64(stars); + if ((flags & 1) != 0) { + stream.writeString(cryptoCurrency); + stream.writeInt64(cryptoAmount); + } + if ((flags & 2) != 0) { + stream.writeString(transaction_id); + } + } + } + public static class TL_messageEncryptedAction extends MessageAction { public static final int constructor = 0x555555F7; @@ -28984,6 +29270,7 @@ public class TLRPC { public byte[] payload; public TL_paymentRequestedInfo info; public String shipping_option_id; + public TL_paymentCharge charge; public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); @@ -28998,6 +29285,7 @@ public class TLRPC { if ((flags & 2) != 0) { shipping_option_id = stream.readString(exception); } + charge = TL_paymentCharge.TLdeserialize(stream, stream.readInt32(exception), exception); } public void serializeToStream(AbstractSerializedData stream) { @@ -29014,6 +29302,7 @@ public class TLRPC { if ((flags & 2) != 0) { stream.writeString(shipping_option_id); } + charge.serializeToStream(stream); } } @@ -29952,6 +30241,83 @@ public class TLRPC { } } + public static class MessageReactor extends TLObject { + + public int flags; + public boolean top; + public boolean my; + public boolean anonymous; + public Peer peer_id; + public int count; + + public static MessageReactor TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + MessageReactor result = null; + switch (constructor) { + case TL_messageReactor.constructor: + result = new TL_messageReactor(); + break; + case TL_messageReactor_old.constructor: + result = new TL_messageReactor_old(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in MessageReactor", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_messageReactor extends MessageReactor { + public static final int constructor = 0x4ba3a95a; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + top = (flags & 1) != 0; + my = (flags & 2) != 0; + anonymous = (flags & 4) != 0; + if ((flags & 8) != 0) { + peer_id = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + } + count = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = top ? (flags | 1) : (flags &~ 1); + flags = my ? (flags | 2) : (flags &~ 2); + flags = anonymous ? (flags | 4) : (flags &~ 4); + stream.writeInt32(flags); + if ((flags & 8) != 0) { + peer_id.serializeToStream(stream); + } + stream.writeInt32(count); + } + } + + public static class TL_messageReactor_old extends TL_messageReactor { + public static final int constructor = 0xef00d448; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + top = (flags & 1) != 0; + my = (flags & 2) != 0; + peer_id = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + count = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = top ? (flags | 1) : (flags &~ 1); + flags = my ? (flags | 2) : (flags &~ 2); + stream.writeInt32(flags); + peer_id.serializeToStream(stream); + stream.writeInt32(count); + } + } + public static abstract class MessageReactions extends TLObject { public int flags; @@ -29960,6 +30326,7 @@ public class TLRPC { public boolean reactions_as_tags; public ArrayList results = new ArrayList<>(); public ArrayList recent_reactions = new ArrayList<>(); + public ArrayList top_reactors = new ArrayList<>(); public static TL_messageReactions TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { TL_messageReactions result = null; @@ -29967,9 +30334,12 @@ public class TLRPC { case 0x87b6e36: result = new TL_messageReactionsOld(); break; - case 0x4f2b9479: + case TL_messageReactions.constructor: result = new TL_messageReactions(); break; + case TL_messageReactions_layer185.constructor: + result = new TL_messageReactions_layer185(); + break; case 0xb87a24d1: result = new TL_messageReactions_layer137(); break; @@ -29985,6 +30355,96 @@ public class TLRPC { } public static class TL_messageReactions extends MessageReactions { + public static final int constructor = 0xa339f0b; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + min = (flags & 1) != 0; + can_see_list = (flags & 4) != 0; + reactions_as_tags = (flags & 8) != 0; + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + ReactionCount object = ReactionCount.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + results.add(object); + } + if ((flags & 2) != 0) { + magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessagePeerReaction object = MessagePeerReaction.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + recent_reactions.add(object); + } + } + if ((flags & 16) != 0) { + magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageReactor object = MessageReactor.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + top_reactors.add(object); + } + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = min ? (flags | 1) : (flags &~ 1); + flags = can_see_list ? (flags | 4) : (flags &~ 4); + flags = reactions_as_tags ? (flags | 8) : (flags &~ 8); + stream.writeInt32(flags); + stream.writeInt32(0x1cb5c415); + int count = results.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + results.get(a).serializeToStream(stream); + } + if ((flags & 2) != 0) { + stream.writeInt32(0x1cb5c415); + count = recent_reactions.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + recent_reactions.get(a).serializeToStream(stream); + } + } + if ((flags & 16) != 0) { + stream.writeInt32(0x1cb5c415); + count = top_reactors.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + top_reactors.get(a).serializeToStream(stream); + } + } + } + } + + public static class TL_messageReactions_layer185 extends TL_messageReactions { public static final int constructor = 0x4f2b9479; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -30739,6 +31199,9 @@ public class TLRPC { case 0x637b7ed: result = new TL_topPeerCategoryCorrespondents(); break; + case TL_topPeerCategoryBotsApp.constructor: + result = new TL_topPeerCategoryBotsApp(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in TopPeerCategory", constructor)); @@ -30822,6 +31285,15 @@ public class TLRPC { } } + public static class TL_topPeerCategoryBotsApp extends TopPeerCategory { + public static final int constructor = 0xfd9e7bec; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + public static abstract class MessageReplyHeader extends TLObject { public int flags; @@ -32385,6 +32857,8 @@ public class TLRPC { public int groupId; //custom public PhotoSize thumb; //custom public TLObject thumbObject; //custom + public int cachedWidth; //custom + public int cachedHeight; //custom public static PageBlock TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { PageBlock result = null; @@ -35764,8 +36238,8 @@ public class TLRPC { case TL_updateChatDefaultBannedRights.constructor: result = new TL_updateChatDefaultBannedRights(); break; - case TL_updateBotMenuButton.constructor: - result = new TL_updateBotMenuButton(); + case TL_bots.TL_updateBotMenuButton.constructor: + result = new TL_bots.TL_updateBotMenuButton(); break; case TL_updateChannelPinnedTopics.constructor: result = new TL_updateChannelPinnedTopics(); @@ -42734,7 +43208,7 @@ public class TLRPC { } public static class TL_sponsoredMessage extends TLObject { - public static final int constructor = 0xbdedf566; + public static final int constructor = 0x4d93a990; public int flags; public boolean recommended; @@ -42749,6 +43223,7 @@ public class TLRPC { public String sponsor_info; public String additional_info; public TL_peerColor color; + public MessageMedia media; public static TL_sponsoredMessage TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { if (TL_sponsoredMessage.constructor != constructor) { @@ -42791,6 +43266,9 @@ public class TLRPC { if ((flags & 64) != 0) { photo = Photo.TLdeserialize(stream, stream.readInt32(exception), exception); } + if ((flags & 16384) != 0) { + media = MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + } if ((flags & 8192) != 0) { color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); } @@ -42823,6 +43301,9 @@ public class TLRPC { if ((flags & 64) != 0) { photo.serializeToStream(stream); } + if ((flags & 16384) != 0) { + media.serializeToStream(stream); + } if ((flags & 8192) != 0) { color.serializeToStream(stream); } @@ -43831,6 +44312,7 @@ public class TLRPC { public String rank; public boolean via_invite; public long user_id; + public int subscription_until_date; public static ChannelParticipant TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { ChannelParticipant result = null; @@ -43859,9 +44341,12 @@ public class TLRPC { case 0x34c3bb53: result = new TL_channelParticipantAdmin(); break; - case 0xc00c07c0: + case TL_channelParticipant.constructor: result = new TL_channelParticipant(); break; + case TL_channelParticipant_layer185.constructor: + result = new TL_channelParticipant_layer185(); + break; case 0x2fe601d3: result = new TL_channelParticipantCreator(); break; @@ -43871,9 +44356,12 @@ public class TLRPC { case 0xa82fa898: result = new TL_channelParticipantAdmin_layer92(); break; - case 0x35a8bfa7: + case TL_channelParticipantSelf.constructor: result = new TL_channelParticipantSelf(); break; + case TL_channelParticipantSelf_layer185.constructor: + result = new TL_channelParticipantSelf_layer185(); + break; case 0x28a8bc67: result = new TL_channelParticipantSelf_layer133(); break; @@ -43913,6 +44401,31 @@ public class TLRPC { } public static class TL_channelParticipant extends ChannelParticipant { + public static final int constructor = 0xcb397619; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + peer = new TLRPC.TL_peerUser(); + peer.user_id = stream.readInt64(exception); + date = stream.readInt32(exception); + if ((flags & 1) != 0) { + subscription_until_date = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt64(peer.user_id); + stream.writeInt32(date); + if ((flags & 1) != 0) { + stream.writeInt32(subscription_until_date); + } + } + } + + public static class TL_channelParticipant_layer185 extends TL_channelParticipant { public static final int constructor = 0xc00c07c0; @@ -43930,6 +44443,33 @@ public class TLRPC { } public static class TL_channelParticipantSelf extends ChannelParticipant { + public static final int constructor = 0x4f607bef; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + via_invite = (flags & 1) != 0; + user_id = stream.readInt64(exception); + inviter_id = stream.readInt64(exception); + date = stream.readInt32(exception); + if ((flags & 2) != 0) { + subscription_until_date = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = via_invite ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + stream.writeInt64(user_id); + stream.writeInt64(inviter_id); + stream.writeInt32(date); + if ((flags & 2) != 0) { + stream.writeInt32(subscription_until_date); + } + } + } + + public static class TL_channelParticipantSelf_layer185 extends TL_channelParticipantSelf { public static final int constructor = 0x35a8bfa7; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -46531,6 +47071,9 @@ public class TLRPC { case TL_channelAdminLogEventActionChangeEmojiStatus.constructor: result = new TL_channelAdminLogEventActionChangeEmojiStatus(); break; + case TL_channelAdminLogEventActionToggleSignatureProfiles.constructor: + result = new TL_channelAdminLogEventActionToggleSignatureProfiles(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in ChannelAdminLogEventAction", constructor)); @@ -47178,6 +47721,21 @@ public class TLRPC { } } + public static class TL_channelAdminLogEventActionToggleSignatureProfiles extends ChannelAdminLogEventAction { + public static final int constructor = 0x60a79c79; + + public boolean value; + + public void readParams(AbstractSerializedData stream, boolean exception) { + value = stream.readBool(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeBool(value); + } + } + public static class TL_channelAdminLogEventActionPinTopic extends ChannelAdminLogEventAction { public static final int constructor = 0x5d8d353b; @@ -47815,7 +48373,7 @@ public class TLRPC { public boolean gigagroup; public boolean noforwards; public boolean forum; - public ArrayList restriction_reason = new ArrayList<>(); + public ArrayList restriction_reason = new ArrayList<>(); public TL_channelAdminRights_layer92 admin_rights_layer92; public TL_channelBannedRights_layer92 banned_rights_layer92; public TL_chatAdminRights admin_rights; @@ -47827,11 +48385,13 @@ public class TLRPC { public boolean stories_hidden; public boolean stories_hidden_min; public boolean stories_unavailable; + public boolean signature_profiles; public int stories_max_id; public TL_peerColor color; public TL_peerColor profile_color; public EmojiStatus emoji_status; public int level; + public int subscription_until_date; public ArrayList usernames = new ArrayList<>(); @@ -47857,6 +48417,9 @@ public class TLRPC { case TL_channel.constructor: result = new TL_channel(); break; + case TL_channel_layer185.constructor: + result = new TL_channel_layer185(); + break; case TL_channel_layer167_3.constructor: result = new TL_channel_layer167_3(); break; @@ -48358,7 +48921,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -48531,7 +49094,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -48662,6 +49225,199 @@ public class TLRPC { } public static class TL_channel extends Chat { + public static final int constructor = 0xfe4478bd; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + creator = (flags & 1) != 0; + left = (flags & 4) != 0; + broadcast = (flags & 32) != 0; + verified = (flags & 128) != 0; + megagroup = (flags & 256) != 0; + restricted = (flags & 512) != 0; + signatures = (flags & 2048) != 0; + min = (flags & 4096) != 0; + scam = (flags & 524288) != 0; + has_link = (flags & 1048576) != 0; + has_geo = (flags & 2097152) != 0; + slowmode_enabled = (flags & 4194304) != 0; + call_active = (flags & 8388608) != 0; + call_not_empty = (flags & 16777216) != 0; + fake = (flags & 33554432) != 0; + gigagroup = (flags & 67108864) != 0; + noforwards = (flags & 134217728) != 0; + join_to_send = (flags & 268435456) != 0; + join_request = (flags & 536870912) != 0; + forum = (flags & 1073741824) != 0; + flags2 = stream.readInt32(exception); + stories_hidden = (flags2 & 2) != 0; + stories_hidden_min = (flags2 & 4) != 0; + stories_unavailable = (flags2 & 8) != 0; + signature_profiles = (flags2 & 4096) != 0; + id = stream.readInt64(exception); + if ((flags & 8192) != 0) { + access_hash = stream.readInt64(exception); + } + title = stream.readString(exception); + if ((flags & 64) != 0) { + username = stream.readString(exception); + } + photo = ChatPhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + date = stream.readInt32(exception); + if ((flags & 512) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 16384) != 0) { + admin_rights = TL_chatAdminRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32768) != 0) { + banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 262144) != 0) { + default_banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 131072) != 0) { + participants_count = stream.readInt32(exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + if ((flags2 & 16) != 0) { + stories_max_id = stream.readInt32(exception); + } + if ((flags2 & 128) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 256) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 1024) != 0) { + level = stream.readInt32(exception); + } + if ((flags2 & 2048) != 0) { + subscription_until_date = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = creator ? (flags | 1) : (flags &~ 1); + flags = left ? (flags | 4) : (flags &~ 4); + flags = broadcast ? (flags | 32) : (flags &~ 32); + flags = verified ? (flags | 128) : (flags &~ 128); + flags = megagroup ? (flags | 256) : (flags &~ 256); + flags = restricted ? (flags | 512) : (flags &~ 512); + flags = signatures ? (flags | 2048) : (flags &~ 2048); + flags = min ? (flags | 4096) : (flags &~ 4096); + flags = scam ? (flags | 524288) : (flags &~ 524288); + flags = has_link ? (flags | 1048576) : (flags &~ 1048576); + flags = has_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = slowmode_enabled ? (flags | 4194304) : (flags &~ 4194304); + flags = call_active ? (flags | 8388608) : (flags &~ 8388608); + flags = call_not_empty ? (flags | 16777216) : (flags &~ 16777216); + flags = fake ? (flags | 33554432) : (flags &~ 33554432); + flags = gigagroup ? (flags | 67108864) : (flags &~ 67108864); + flags = noforwards ? (flags | 134217728) : (flags &~ 134217728); + flags = join_to_send ? (flags | 268435456) : (flags &~ 268435456); + flags = join_request ? (flags | 536870912) : (flags &~ 536870912); + flags = forum ? (flags | 1073741824) : (flags &~ 1073741824); + stream.writeInt32(flags); + flags2 = stories_hidden ? (flags2 | 2) : (flags2 &~ 2); + flags2 = stories_hidden_min ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_unavailable ? (flags2 | 8) : (flags2 &~ 8); + flags2 = signature_profiles ? (flags2 | 4096) : (flags2 &~ 4096); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 8192) != 0) { + stream.writeInt64(access_hash); + } + stream.writeString(title); + if ((flags & 64) != 0) { + stream.writeString(username); + } + photo.serializeToStream(stream); + stream.writeInt32(date); + if ((flags & 512) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 16384) != 0) { + admin_rights.serializeToStream(stream); + } + if ((flags & 32768) != 0) { + banned_rights.serializeToStream(stream); + } + if ((flags & 262144) != 0) { + default_banned_rights.serializeToStream(stream); + } + if ((flags & 131072) != 0) { + stream.writeInt32(participants_count); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 16) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 128) != 0) { + color.serializeToStream(stream); + } + if ((flags2 & 256) != 0) { + profile_color.serializeToStream(stream); + } + if ((flags2 & 512) != 0) { + emoji_status.serializeToStream(stream); + } + if ((flags2 & 1024) != 0) { + stream.writeInt32(level); + } + if ((flags2 & 2048) != 0) { + stream.writeInt32(subscription_until_date); + } + } + } + + public static class TL_channel_layer185 extends TL_channel { public static final int constructor = 0xaadfc8f; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -48710,7 +49466,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -48895,7 +49651,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49062,7 +49818,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49239,7 +49995,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49412,7 +50168,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49563,7 +50319,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49848,7 +50604,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -50303,25 +51059,32 @@ public class TLRPC { } } - public static class TL_restrictionReason extends TLObject { - public static final int constructor = 0xd072acb4; + public static class RestrictionReason extends TLObject { public String platform; public String reason; public String text; - public static TL_restrictionReason TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - if (TL_restrictionReason.constructor != constructor) { - if (exception) { - throw new RuntimeException(String.format("can't parse magic %x in TL_restrictionReason", constructor)); - } else { - return null; - } + public static RestrictionReason TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + RestrictionReason result = null; + switch (constructor) { + case TL_reastrictionReason.constructor: + result = new TL_reastrictionReason(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in RestrictionReason", constructor)); + } + if (result != null) { + result.readParams(stream, exception); } - TL_restrictionReason result = new TL_restrictionReason(); - result.readParams(stream, exception); return result; } + } + + public static class TL_reastrictionReason extends RestrictionReason { + public static final int constructor = 0xd072acb4; + public void readParams(AbstractSerializedData stream, boolean exception) { platform = stream.readString(exception); @@ -52486,9 +53249,12 @@ public class TLRPC { public static TL_chatInviteExported TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { TL_chatInviteExported result = null; switch (constructor) { - case 0xab4a819: + case TL_chatInviteExported.constructor: result = new TL_chatInviteExported(); break; + case TL_chatInviteExported_layer185.constructor: + result = new TL_chatInviteExported_layer185(); + break; case 0xb18105e8: result = new TL_chatInviteExported_layer133(); break; @@ -52516,7 +53282,7 @@ public class TLRPC { } public static class TL_chatInviteExported extends ExportedChatInvite { - public static final int constructor = 0xab4a819; + public static final int constructor = 0xa22cbd96; public int flags; public boolean revoked; @@ -52530,10 +53296,85 @@ public class TLRPC { public int usage_limit; public int usage; public int requested; + public int subscription_expired; public String title; + public TL_starsSubscriptionPricing subscription_pricing; public ArrayList importers; //custom public boolean expired; //custom + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + revoked = (flags & 1) != 0; + permanent = (flags & 32) != 0; + request_needed = (flags & 64) != 0; + link = stream.readString(exception); + admin_id = stream.readInt64(exception); + date = stream.readInt32(exception); + if ((flags & 16) != 0) { + start_date = stream.readInt32(exception); + } + if ((flags & 2) != 0) { + expire_date = stream.readInt32(exception); + } + if ((flags & 4) != 0) { + usage_limit = stream.readInt32(exception); + } + if ((flags & 8) != 0) { + usage = stream.readInt32(exception); + } + if ((flags & 128) != 0) { + requested = stream.readInt32(exception); + } + if ((flags & 1024) != 0) { + subscription_expired = stream.readInt32(exception); + } + if ((flags & 256) != 0) { + title = stream.readString(exception); + } + if ((flags & 512) != 0) { + subscription_pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = revoked ? (flags | 1) : (flags &~ 1); + flags = permanent ? (flags | 32) : (flags &~ 32); + flags = request_needed ? (flags | 64) : (flags &~ 64); + stream.writeInt32(flags); + stream.writeString(link); + stream.writeInt64(admin_id); + stream.writeInt32(date); + if ((flags & 16) != 0) { + stream.writeInt32(start_date); + } + if ((flags & 2) != 0) { + stream.writeInt32(expire_date); + } + if ((flags & 4) != 0) { + stream.writeInt32(usage_limit); + } + if ((flags & 8) != 0) { + stream.writeInt32(usage); + } + if ((flags & 128) != 0) { + stream.writeInt32(requested); + } + if ((flags & 1024) != 0) { + stream.writeInt32(subscription_expired); + } + if ((flags & 256) != 0) { + stream.writeString(title); + } + if ((flags & 512) != 0) { + subscription_pricing.serializeToStream(stream); + } + } + } + + public static class TL_chatInviteExported_layer185 extends TL_chatInviteExported { + public static final int constructor = 0xab4a819; + public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); revoked = (flags & 1) != 0; @@ -52719,12 +53560,15 @@ public class TLRPC { public static InputFile TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { InputFile result = null; switch (constructor) { - case 0xfa4f0bb5: + case TL_inputFileBig.constructor: result = new TL_inputFileBig(); break; - case 0xf52ff27f: + case TL_inputFile.constructor: result = new TL_inputFile(); break; + case TL_inputFileStoryDocument.constructor: + result = new TL_inputFileStoryDocument(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in InputFile", constructor)); @@ -52754,6 +53598,21 @@ public class TLRPC { } } + public static class TL_inputFileStoryDocument extends InputFile { + public static final int constructor = 0x62dc8b48; + + public TLRPC.InputDocument doc; + + public void readParams(AbstractSerializedData stream, boolean exception) { + doc = TLRPC.InputDocument.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + doc.serializeToStream(stream); + } + } + public static class TL_inputFile extends InputFile { public static final int constructor = 0xf52ff27f; @@ -53074,7 +53933,7 @@ public class TLRPC { public Photo personal_photo; public Photo profile_photo; public PeerNotifySettings notify_settings; - public BotInfo bot_info; + public TL_bots.BotInfo bot_info; public int pinned_msg_id; public int common_chats_count; public int folder_id; @@ -53199,7 +54058,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53402,7 +54261,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53596,7 +54455,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53784,7 +54643,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53964,7 +54823,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54117,7 +54976,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54265,7 +55124,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54405,7 +55264,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54535,7 +55394,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54658,7 +55517,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54777,7 +55636,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54870,7 +55729,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54952,7 +55811,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55026,7 +55885,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55086,7 +55945,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55142,7 +56001,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55212,7 +56071,7 @@ public class TLRPC { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -57907,6 +58766,9 @@ public class TLRPC { case 0x1b2286b8: result = new TL_reactionEmoji(); break; + case TL_reactionPaid.constructor: + result = new TL_reactionPaid(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in Reaction", constructor)); @@ -57954,6 +58816,15 @@ public class TLRPC { } } + public static class TL_reactionPaid extends Reaction { + public static final int constructor = 0x523da4eb; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + public static class TL_reactionEmoji extends Reaction { public static final int constructor = 0x1b2286b8; @@ -60690,6 +61561,7 @@ public class TLRPC { public boolean forward_chats; public boolean groups; public boolean channels; + public boolean bots_app; public int offset; public int limit; public long hash; @@ -60708,6 +61580,7 @@ public class TLRPC { flags = forward_chats ? (flags | 32) : (flags &~ 32); flags = groups ? (flags | 1024) : (flags &~ 1024); flags = channels ? (flags | 32768) : (flags &~ 32768); + flags = bots_app ? (flags | 65536) : (flags &~ 65536); stream.writeInt32(flags); stream.writeInt32(offset); stream.writeInt32(limit); @@ -61807,7 +62680,7 @@ public class TLRPC { } public static class TL_messages_exportChatInvite extends TLObject { - public static final int constructor = 0xa02ce5d5; + public static final int constructor = 0xa455de90; public int flags; public boolean legacy_revoke_permanent; @@ -61816,6 +62689,7 @@ public class TLRPC { public int expire_date; public int usage_limit; public String title; + public TL_starsSubscriptionPricing subscription_pricing; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return ExportedChatInvite.TLdeserialize(stream, constructor, exception); @@ -61836,6 +62710,9 @@ public class TLRPC { if ((flags & 16) != 0) { stream.writeString(title); } + if ((flags & 32) != 0) { + subscription_pricing.serializeToStream(stream); + } } } @@ -63314,6 +64191,50 @@ public class TLRPC { } } + public static class TL_messages_sendPaidReaction extends TLObject { + public static final int constructor = 0x25c8fe3e; + + public int flags; + public boolean isPrivate; + public InputPeer peer; + public int msg_id; + public int count; + public long random_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Updates.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = isPrivate ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + stream.writeInt32(count); + stream.writeInt64(random_id); + } + } + + public static class TL_messages_togglePaidReactionPrivacy extends TLObject { + public static final int constructor = 0x849ad397; + + public InputPeer peer; + public int msg_id; + public boolean isPrivate; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + stream.writeBool(isPrivate); + } + } + public static class TL_messages_setDefaultReaction extends TLObject { public static final int constructor = 0x4f47a016; @@ -63493,12 +64414,13 @@ public class TLRPC { } public static class TL_messages_setChatAvailableReactions extends TLObject { - public static final int constructor = 0x5a150bd4; + public static final int constructor = 0x864b2581; public int flags; public InputPeer peer; public ChatReactions available_reactions; public int reactions_limit; + public boolean paid_enabled; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return Updates.TLdeserialize(stream, constructor, exception); @@ -63512,6 +64434,9 @@ public class TLRPC { if ((flags & 1) != 0) { stream.writeInt32(reactions_limit); } + if ((flags & 2) != 0) { + stream.writeBool(paid_enabled); + } } } @@ -64075,6 +65000,7 @@ public class TLRPC { public int flags; public boolean requested; + public boolean subscription_expired; public InputPeer peer; public String link; public String q; @@ -64089,6 +65015,7 @@ public class TLRPC { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); flags = requested ? (flags | 1) : (flags &~ 1); + flags = subscription_expired ? (flags | 8) : (flags &~ 8); stream.writeInt32(flags); peer.serializeToStream(stream); if ((flags & 2) != 0) { @@ -65023,10 +65950,12 @@ public class TLRPC { } public static class TL_channels_toggleSignatures extends TLObject { - public static final int constructor = 0x1f69b606; + public static final int constructor = 0x418d549c; public InputChannel channel; - public boolean enabled; + public int flags; + public boolean signatures_enabled; + public boolean profiles_enabled; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return Updates.TLdeserialize(stream, constructor, exception); @@ -65034,8 +65963,10 @@ public class TLRPC { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); + flags = signatures_enabled ? flags | 1 : flags &~ 1; + flags = profiles_enabled ? flags | 2 : flags &~ 2; + stream.writeInt32(flags); channel.serializeToStream(stream); - stream.writeBool(enabled); } } @@ -66517,8 +67448,11 @@ public class TLRPC { case TL_inputStorePaymentPremiumGiveaway.constructor: result = new TL_inputStorePaymentPremiumGiveaway(); break; - case TL_inputStorePaymentStars.constructor: - result = new TL_inputStorePaymentStars(); + case TL_inputStorePaymentStarsGift.constructor: + result = new TL_inputStorePaymentStarsGift(); + break; + case TL_inputStorePaymentStarsTopup.constructor: + result = new TL_inputStorePaymentStarsTopup(); break; } if (result == null && exception) { @@ -67062,6 +67996,7 @@ public class TLRPC { public boolean voice; public long stars_amount; public ArrayList extended_media = new ArrayList<>(); + public String attachPath; //custom for bot previews public static MessageMedia TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { MessageMedia result = null; @@ -67633,7 +68568,7 @@ public class TLRPC { public String post_author; public long grouped_id; public TL_messageReactions reactions; - public ArrayList restriction_reason = new ArrayList<>(); + public ArrayList restriction_reason = new ArrayList<>(); public int ttl_period; public int quick_reply_shortcut_id; public long effect; @@ -68601,7 +69536,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -68825,7 +69760,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69043,7 +69978,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69250,7 +70185,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69452,7 +70387,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69645,7 +70580,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69832,7 +70767,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70013,7 +70948,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70189,7 +71124,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70364,7 +71299,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70532,7 +71467,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70693,7 +71628,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70854,7 +71789,7 @@ public class TLRPC { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -73633,6 +74568,37 @@ public class TLRPC { } } + public static class TL_messages_requestMainWebView extends TLObject { + public static final int constructor = 0xc9e01e7b; + + public int flags; + public boolean compact; + public InputPeer peer; + public InputUser bot; + public String start_param; + public TL_dataJSON theme_params; + public String platform; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_webViewResultUrl.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = compact ? (flags | 128) : (flags &~ 128); + stream.writeInt32(flags); + peer.serializeToStream(stream); + bot.serializeToStream(stream); + if ((flags & 2) != 0) { + stream.writeString(start_param); + } + if ((flags & 1) != 0) { + theme_params.serializeToStream(stream); + } + stream.writeString(platform); + } + } + public static class TL_messages_prolongWebView extends TLObject { public static final int constructor = 0xb0d81a83; @@ -74168,117 +75134,6 @@ public class TLRPC { } } - public static abstract class BotMenuButton extends TLObject { - - public static BotMenuButton TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - BotMenuButton result = null; - switch (constructor) { - case 0xc7b57ce6: - result = new TL_botMenuButton(); - break; - case 0x7533a588: - result = new TL_botMenuButtonDefault(); - break; - case 0x4258c205: - result = new TL_botMenuButtonCommands(); - break; - } - if (result == null && exception) { - throw new RuntimeException(String.format("can't parse magic %x in BotMenuButton", constructor)); - } - if (result != null) { - result.readParams(stream, exception); - } - return result; - } - } - - public static class TL_botMenuButton extends BotMenuButton { - public static final int constructor = 0xc7b57ce6; - - public String text; - public String url; - - public void readParams(AbstractSerializedData stream, boolean exception) { - text = stream.readString(exception); - url = stream.readString(exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeString(text); - stream.writeString(url); - } - } - - public static class TL_botMenuButtonDefault extends BotMenuButton { - public static final int constructor = 0x7533a588; - - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_botMenuButtonCommands extends BotMenuButton { - public static final int constructor = 0x4258c205; - - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_updateBotMenuButton extends Update { - public static final int constructor = 0x14b85813; - - public long bot_id; - public BotMenuButton button; - - public void readParams(AbstractSerializedData stream, boolean exception) { - bot_id = stream.readInt64(exception); - button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt64(bot_id); - button.serializeToStream(stream); - } - } - - public static class TL_bots_setBotMenuButton extends TLObject { - public static final int constructor = 0x4504d54f; - - public InputUser user_id; - public BotMenuButton button; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - user_id.serializeToStream(stream); - button.serializeToStream(stream); - } - } - - public static class TL_bots_getBotMenuButton extends TLObject { - public static final int constructor = 0x9c60eb28; - - public InputUser user_id; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return BotMenuButton.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - user_id.serializeToStream(stream); - } - } - public static abstract class InputBotApp extends TLObject { public static InputBotApp TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { @@ -74710,9 +75565,12 @@ public class TLRPC { case 0xc326caef: result = new TL_inputInvoiceSlug(); break; - case 0x1da33ad8: + case TL_inputInvoiceStars.constructor: result = new TL_inputInvoiceStars(); break; + case TL_inputInvoiceChatInviteSubscription.constructor: + result = new TL_inputInvoiceChatInviteSubscription(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in InputInvoice", constructor)); @@ -76955,55 +77813,6 @@ public class TLRPC { } } - public static class TL_bots_canSendMessage extends TLObject { - public static final int constructor = 0x1359f4e6; - - public InputUser bot; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - } - } - - public static class TL_bots_allowSendMessage extends TLObject { - public static final int constructor = 0xf132e3ef; - - public InputUser bot; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Updates.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - } - } - - public static class TL_bots_invokeWebViewCustomMethod extends TLObject { - public static final int constructor = 0x87fc5e7; - - public InputUser bot; - public String custom_method; - public TL_dataJSON params; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return TL_dataJSON.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - stream.writeString(custom_method); - params.serializeToStream(stream); - } - } - public static class TL_messages_webPage extends TLObject { public static final int constructor = 0xfd5e12bd; @@ -77302,16 +78111,14 @@ public class TLRPC { } } - public static class TL_inputStorePaymentStars extends InputStorePaymentPurpose { - public static final int constructor = 0x4f0ee8df; + public static class TL_inputStorePaymentStarsTopup extends InputStorePaymentPurpose { + public static final int constructor = 0xdddd0f56; - public int flags; public long stars; public String currency; public long amount; public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); stars = stream.readInt64(exception); currency = stream.readString(exception); amount = stream.readInt64(exception); @@ -77319,7 +78126,30 @@ public class TLRPC { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); - stream.writeInt32(flags); + stream.writeInt64(stars); + stream.writeString(currency); + stream.writeInt64(amount); + } + } + + public static class TL_inputStorePaymentStarsGift extends InputStorePaymentPurpose { + public static final int constructor = 0x1d741ef7; + + public InputUser user_id; + public long stars; + public String currency; + public long amount; + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = InputUser.TLdeserialize(stream, stream.readInt32(exception), exception); + stars = stream.readInt64(exception); + currency = stream.readString(exception); + amount = stream.readInt64(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + user_id.serializeToStream(stream); stream.writeInt64(stars); stream.writeString(currency); stream.writeInt64(amount); @@ -77345,17 +78175,32 @@ public class TLRPC { } public static class TL_inputInvoiceStars extends InputInvoice { - public static int constructor = 0x1da33ad8; + public static final int constructor = 0x65f00ce3; - public TL_starsTopupOption option; + public InputStorePaymentPurpose purpose; public void readParams(AbstractSerializedData stream, boolean exception) { - option = TL_starsTopupOption.TLdeserialize(stream, stream.readInt32(exception), exception); + purpose = InputStorePaymentPurpose.TLdeserialize(stream, stream.readInt32(exception), exception); } public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); - option.serializeToStream(stream); + purpose.serializeToStream(stream); + } + } + + public static class TL_inputInvoiceChatInviteSubscription extends InputInvoice { + public static final int constructor = 0x34e793f1; + + public String hash; + + public void readParams(AbstractSerializedData stream, boolean exception) { + hash = stream.readString(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(hash); } } @@ -81400,12 +82245,13 @@ public class TLRPC { public static final int constructor = 0xbd915c0; public int flags; + public boolean extended; public long stars; public String store_product; public String currency; public long amount; - public boolean collapsed; //custom public boolean loadingStorePrice; //custom + public boolean missingStorePrice; //custom public static TL_starsTopupOption TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { if (TL_starsTopupOption.constructor != constructor) { @@ -81422,6 +82268,7 @@ public class TLRPC { public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); + extended = (flags & 2) != 0; stars = stream.readInt64(exception); if ((flags & 1) != 0) { store_product = stream.readString(exception); @@ -81432,6 +82279,56 @@ public class TLRPC { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); + flags = extended ? flags | 2 : flags &~ 2; + stream.writeInt32(flags); + stream.writeInt64(stars); + if ((flags & 1) != 0) { + stream.writeString(store_product); + } + stream.writeString(currency); + stream.writeInt64(amount); + } + } + + public static class TL_starsGiftOption extends TLObject { + public static final int constructor = 0x5e0589f1; + + public int flags; + public boolean extended; + public long stars; + public String store_product; + public String currency; + public long amount; + public boolean loadingStorePrice; //custom + public boolean missingStorePrice; //custom + + public static TL_starsGiftOption TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_starsGiftOption.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_starsGiftOption", constructor)); + } else { + return null; + } + } + TL_starsGiftOption result = new TL_starsGiftOption(); + result.readParams(stream, exception); + return result; + } + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + extended = (flags & 2) != 0; + stars = stream.readInt64(exception); + if ((flags & 1) != 0) { + store_product = stream.readString(exception); + } + currency = stream.readString(exception); + amount = stream.readInt64(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = extended ? flags | 2 : flags &~ 2; stream.writeInt32(flags); stream.writeInt64(stars); if ((flags & 1) != 0) { @@ -81560,6 +82457,9 @@ public class TLRPC { public boolean refund; public boolean pending; public boolean failed; + public boolean gift; + public boolean reaction; + public boolean subscription; public String id; public long stars; public int date; @@ -81572,6 +82472,10 @@ public class TLRPC { public byte[] bot_payload; public int msg_id; public ArrayList extended_media = new ArrayList<>(); + public int subscription_period; + + public Peer sent_by; //custom + public Peer received_by; //custom public static StarsTransaction TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { StarsTransaction result = null; @@ -81582,6 +82486,9 @@ public class TLRPC { case TL_starsTransaction_layer182.constructor: result = new TL_starsTransaction_layer182(); break; + case TL_starsTransaction_layer185.constructor: + result = new TL_starsTransaction_layer185(); + break; case TL_starsTransaction.constructor: result = new TL_starsTransaction(); break; @@ -81690,6 +82597,107 @@ public class TLRPC { } public static class TL_starsTransaction extends StarsTransaction { + public static final int constructor = 0x433aeb2b; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + refund = (flags & 8) != 0; + pending = (flags & 16) != 0; + failed = (flags & 64) != 0; + gift = (flags & 1024) != 0; + reaction = (flags & 2048) != 0; + subscription = (flags & 4096) != 0; + id = stream.readString(exception); + stars = stream.readInt64(exception); + date = stream.readInt32(exception); + peer = StarsTransactionPeer.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 1) != 0) { + title = stream.readString(exception); + } + if ((flags & 2) != 0) { + description = stream.readString(exception); + } + if ((flags & 4) != 0) { + photo = WebDocument.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32) != 0) { + transaction_date = stream.readInt32(exception); + transaction_url = stream.readString(exception); + } + if ((flags & 128) != 0) { + bot_payload = stream.readByteArray(exception); + } + if ((flags & 256) != 0) { + msg_id = stream.readInt32(exception); + } + if ((flags & 512) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageMedia object = MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + extended_media.add(object); + } + } + if ((flags & 4096) != 0) { + subscription_period = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = refund ? flags | 8 : flags &~ 8; + flags = pending ? flags | 16 : flags &~ 16; + flags = failed ? flags | 64 : flags &~ 64; + flags = gift ? flags | 1024 : flags &~ 1024; + flags = reaction ? flags | 2048 : flags &~ 2048; + flags = subscription ? flags | 4096 : flags &~ 4096; + stream.writeInt32(flags); + stream.writeInt64(stars); + stream.writeInt32(date); + peer.serializeToStream(stream); + if ((flags & 1) != 0) { + stream.writeString(title); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + if ((flags & 4) != 0) { + photo.serializeToStream(stream); + } + if ((flags & 32) != 0) { + stream.writeInt32(transaction_date); + stream.writeString(transaction_url); + } + if ((flags & 128) != 0) { + stream.writeByteArray(bot_payload); + } + if ((flags & 256) != 0) { + stream.writeInt32(msg_id); + } + if ((flags & 512) != 0) { + stream.writeInt32(0x1cb5c415); + int count = extended_media.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + extended_media.get(i).serializeToStream(stream); + } + } + if ((flags & 4096) != 0) { + stream.writeInt32(subscription_period); + } + } + } + + public static class TL_starsTransaction_layer185 extends TL_starsTransaction { public static final int constructor = 0x2db5418f; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -81697,6 +82705,7 @@ public class TLRPC { refund = (flags & 8) != 0; pending = (flags & 16) != 0; failed = (flags & 64) != 0; + gift = (flags & 1024) != 0; id = stream.readString(exception); stars = stream.readInt64(exception); date = stream.readInt32(exception); @@ -81744,6 +82753,7 @@ public class TLRPC { flags = refund ? flags | 8 : flags &~ 8; flags = pending ? flags | 16 : flags &~ 16; flags = failed ? flags | 64 : flags &~ 64; + flags = gift ? flags | 1024 : flags &~ 1024; stream.writeInt32(flags); stream.writeInt64(stars); stream.writeInt32(date); @@ -81779,10 +82789,13 @@ public class TLRPC { } public static class TL_payments_starsStatus extends TLObject { - public static final int constructor = 0x8cf4ee60; + public static final int constructor = 0xbbfa316c; public int flags; public long balance; + public ArrayList subscriptions = new ArrayList<>(); + public String subscriptions_next_offset; + public long subscriptions_missing_balance; public ArrayList history = new ArrayList<>(); public String next_offset; public ArrayList chats = new ArrayList<>(); @@ -81804,6 +82817,49 @@ public class TLRPC { public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); balance = stream.readInt64(exception); + if ((flags & 2) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + StarsSubscription object = StarsSubscription.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + subscriptions.add(object); + } + } + if ((flags & 4) != 0) { + subscriptions_next_offset = stream.readString(exception); + } + if ((flags & 16) != 0) { + subscriptions_missing_balance = stream.readInt64(exception); + } + if ((flags & 8) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + StarsTransaction object = StarsTransaction.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + history.add(object); + } + } + if ((flags & 1) != 0) { + next_offset = stream.readString(exception); + } int magic = stream.readInt32(exception); if (magic != 0x1cb5c415) { if (exception) { @@ -81812,24 +82868,6 @@ public class TLRPC { return; } int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - StarsTransaction object = StarsTransaction.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - history.add(object); - } - if ((flags & 1) != 0) { - next_offset = stream.readString(exception); - } - magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - count = stream.readInt32(exception); for (int a = 0; a < count; a++) { Chat object = Chat.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { @@ -81858,6 +82896,20 @@ public class TLRPC { stream.writeInt32(constructor); stream.writeInt32(flags); stream.writeInt64(balance); + if ((flags & 2) != 0) { + stream.writeInt32(0x1cb5c415); + int count = subscriptions.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + subscriptions.get(i).serializeToStream(stream); + } + } + if ((flags & 4) != 0) { + stream.writeString(subscriptions_next_offset); + } + if ((flags & 16) != 0) { + stream.writeInt64(subscriptions_missing_balance); + } stream.writeInt32(0x1cb5c415); int count = history.size(); stream.writeInt32(count); @@ -81903,6 +82955,34 @@ public class TLRPC { } } + public static class TL_payments_getStarsGiftOptions extends TLObject { + public static final int constructor = 0xd3c96bc8; + + public int flags; + public InputUser user_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + Vector vector = new Vector(); + int size = stream.readInt32(exception); + for (int a = 0; a < size; a++) { + TL_starsGiftOption object = TL_starsGiftOption.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return vector; + } + vector.objects.add(object); + } + return vector; + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + user_id.serializeToStream(stream); + } + } + } + public static class TL_payments_getStarsStatus extends TLObject { public static final int constructor = 0x104fcfa7; @@ -82261,5 +83341,230 @@ public class TLRPC { peer.serializeToStream(stream); } } + + public static class TL_paymentCharge extends TLObject { + public static final int constructor = 0xea02c27e; + + public String id; + public String provider_charge_id; + + public static TL_paymentCharge TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_paymentCharge.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_paymentCharge", constructor)); + } else { + return null; + } + } + TL_paymentCharge result = new TL_paymentCharge(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + id = stream.readString(exception); + provider_charge_id = stream.readString(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(id); + stream.writeString(provider_charge_id); + } + } + + public static class StarsSubscription extends TLObject { + + public int flags; + public boolean canceled; + public boolean can_refulfill; + public boolean missing_balance; + public String id; + public Peer peer; + public int until_date; + public TL_starsSubscriptionPricing pricing; + public String chat_invite_hash; + + public static StarsSubscription TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + StarsSubscription result = null; + switch (constructor) { + case TL_starsSubscription.constructor: + result = new TL_starsSubscription(); + break; + case TL_starsSubscription_old.constructor: + result = new TL_starsSubscription_old(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in StarsTransaction", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + + } + + public static class TL_starsSubscription extends StarsSubscription { + public static final int constructor = 0x538ecf18; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + canceled = (flags & 1) != 0; + can_refulfill = (flags & 2) != 0; + missing_balance = (flags & 4) != 0; + id = stream.readString(exception); + peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + until_date = stream.readInt32(exception); + pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 8) != 0) { + chat_invite_hash = stream.readString(exception); + } + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = canceled ? (flags | 1) : (flags &~ 1); + flags = can_refulfill ? (flags | 2) : (flags &~ 2); + flags = missing_balance ? (flags | 4) : (flags &~ 4); + stream.writeInt32(flags); + stream.writeString(id); + peer.serializeToStream(stream); + stream.writeInt32(until_date); + pricing.serializeToStream(stream); + if ((flags & 8) != 0) { + stream.writeString(chat_invite_hash); + } + } + } + + public static class TL_starsSubscription_old extends TL_starsSubscription { + public static final int constructor = 0xd073f1e6; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + canceled = (flags & 1) != 0; + can_refulfill = (flags & 2) != 0; + missing_balance = (flags & 4) != 0; + id = stream.readString(exception); + peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + until_date = stream.readInt32(exception); + pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = canceled ? (flags | 1) : (flags &~ 1); + flags = can_refulfill ? (flags | 2) : (flags &~ 2); + flags = missing_balance ? (flags | 4) : (flags &~ 4); + stream.writeInt32(flags); + stream.writeString(id); + peer.serializeToStream(stream); + stream.writeInt32(until_date); + pricing.serializeToStream(stream); + } + } + + public static class TL_starsSubscriptionPricing extends TLObject { + public static final int constructor = 0x5416d58; + + public int period; + public long amount; + + public static TL_starsSubscriptionPricing TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_starsSubscriptionPricing.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_starsSubscriptionPricing", constructor)); + } else { + return null; + } + } + TL_starsSubscriptionPricing result = new TL_starsSubscriptionPricing(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + period = stream.readInt32(exception); + amount = stream.readInt64(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(period); + stream.writeInt64(amount); + } + } + + public static class TL_getStarsSubscriptions extends TLObject { + public static final int constructor = 0x32512c5; + + public int flags; + public boolean missing_balance; + public InputPeer peer; + public String offset; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_payments_starsStatus.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = missing_balance ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeString(offset); + } + } + + public static class TL_changeStarsSubscription extends TLObject { + public static final int constructor = 0xc7770878; + + public int flags; + public InputPeer peer; + public String subscription_id; + public Boolean canceled; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = (canceled != null) ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeString(subscription_id); + if ((flags & 1) != 0) { + stream.writeBool(canceled); + } + } + } + + public static class TL_fulfillStarsSubscription extends TLObject { + public static final int constructor = 0xcc5bebb3; + + public InputPeer peer; + public String subscription_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + peer.serializeToStream(stream); + stream.writeString(subscription_id); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java new file mode 100644 index 000000000..34f0b3b0e --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java @@ -0,0 +1,78 @@ +package org.telegram.tgnet.tl; + +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; + +public class TL_account { + + public static class contentSettings extends TLObject { + public static final int constructor = 0x57e28221; + + public int flags; + public boolean sensitive_enabled; + public boolean sensitive_can_change; + + public static contentSettings TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (contentSettings.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_account.contentSettings", constructor)); + } else { + return null; + } + } + contentSettings result = new contentSettings(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + sensitive_enabled = (flags & 1) != 0; + sensitive_can_change = (flags & 2) != 0; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = sensitive_enabled ? (flags | 1) : (flags &~ 1); + flags = sensitive_can_change ? (flags | 2) : (flags &~ 2); + stream.writeInt32(flags); + } + } + + public static class setContentSettings extends TLObject { + public static final int constructor = 0xb574b16b; + + public int flags; + public boolean sensitive_enabled; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = sensitive_enabled ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + } + } + + public static class getContentSettings extends TLObject { + public static final int constructor = 0x8b9b4dae; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return contentSettings.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java new file mode 100644 index 000000000..b9fea938d --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java @@ -0,0 +1,937 @@ +package org.telegram.tgnet.tl; + +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; + +import java.util.ArrayList; + +public class TL_bots { + + public static class botPreviewMedia extends TLObject { + public static final int constructor = 0x23e91ba3; + + public int date; + public TLRPC.MessageMedia media; + + public static botPreviewMedia TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (botPreviewMedia.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in botPreviewMedia", constructor)); + } else { + return null; + } + } + botPreviewMedia result = new botPreviewMedia(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + date = stream.readInt32(exception); + media = TLRPC.MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(date); + media.serializeToStream(stream); + } + } + + public static class addPreviewMedia extends TLObject { + public static final int constructor = 0x17aeb75a; + + public TLRPC.InputUser bot; + public String lang_code = ""; + public TLRPC.InputMedia media; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return botPreviewMedia.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + media.serializeToStream(stream); + } + } + + public static class editPreviewMedia extends TLObject { + public static final int constructor = 0x8525606f; + + public TLRPC.InputUser bot; + public String lang_code = ""; + + public TLRPC.InputMedia media; + public TLRPC.InputMedia new_media; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return botPreviewMedia.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + media.serializeToStream(stream); + new_media.serializeToStream(stream); + } + } + + public static class deletePreviewMedia extends TLObject { + public static final int constructor = 0x2d0135b3; + + public TLRPC.InputUser bot; + public String lang_code = ""; + public ArrayList media = new ArrayList<>(); + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + stream.writeInt32(0x1cb5c415); + int count = media.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + media.get(a).serializeToStream(stream); + } + } + } + + public static class reorderPreviewMedias extends TLObject { + public static final int constructor = 0xb627f3aa; + + public TLRPC.InputUser bot; + public String lang_code = ""; + public ArrayList order = new ArrayList<>(); + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + stream.writeInt32(0x1cb5c415); + int count = order.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + order.get(a).serializeToStream(stream); + } + } + } + + public static class getPreviewMedias extends TLObject { + public static final int constructor = 0xa2a5594d; + + public TLRPC.InputUser bot; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + TLRPC.Vector vector = new TLRPC.Vector(); + int size = stream.readInt32(exception); + for (int a = 0; a < size; a++) { + vector.objects.add(botPreviewMedia.TLdeserialize(stream, stream.readInt32(exception), exception)); + } + return vector; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + } + } + + public static class getPreviewInfo extends TLObject { + public static final int constructor = 0x423ab3ad; + + public TLRPC.InputUser bot; + public String lang_code = ""; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return previewInfo.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + } + } + + public static class previewInfo extends TLObject { + public static final int constructor = 0xca71d64; + + public ArrayList media = new ArrayList<>(); + public ArrayList lang_codes = new ArrayList<>(); + + public static previewInfo TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (previewInfo.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in previewInfo", constructor)); + } else { + return null; + } + } + previewInfo result = new previewInfo(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + botPreviewMedia object = botPreviewMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + media.add(object); + } + magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + lang_codes.add(stream.readString(exception)); + } + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(0x1cb5c415); + int count = media.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + media.get(i).serializeToStream(stream); + } + stream.writeInt32(0x1cb5c415); + count = lang_codes.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + stream.writeString(lang_codes.get(i)); + } + } + } + + public static class setBotInfo extends TLObject { + public static final int constructor = 0x10cf3123; + + public int flags; + public TLRPC.InputUser bot; + public String lang_code; + public String name; + public String about; + public String description; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 4) != 0) { + bot.serializeToStream(stream); + } + stream.writeString(lang_code); + if ((flags & 8) != 0) { + stream.writeString(name); + } + if ((flags & 1) != 0) { + stream.writeString(about); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + } + } + + public static class getBotInfo extends TLObject { + public static final int constructor = 0xdcd914fd; + + public int flags; + public TLRPC.InputUser bot; + public String lang_code; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return BotInfo.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + bot.serializeToStream(stream); + } + stream.writeString(lang_code); + } + } + + public static class reorderUsernames extends TLObject { + public static final int constructor = 0x9709b1c2; + + public TLRPC.InputUser bot; + public ArrayList order = new ArrayList<>(); + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeInt32(0x1cb5c415); + int count = order.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + stream.writeString(order.get(a)); + } + } + } + + public static class toggleUsername extends TLObject { + public static final int constructor = 0x53ca973; + + public TLRPC.InputUser bot; + public String username; + public boolean active; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(username); + stream.writeBool(active); + } + } + + public static abstract class BotInfo extends TLObject { + public long user_id; + public String description; + public ArrayList commands = new ArrayList<>(); + public int version; + public BotMenuButton menu_button; + public int flags; + public TLRPC.Photo description_photo; + public TLRPC.Document description_document; + public boolean has_preview_medias; + public String privacy_policy_url; + + public static BotInfo TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + BotInfo result = null; + switch (constructor) { + case TL_botInfo_layer140.constructor: + result = new TL_botInfo_layer140(); + break; + case TL_botInfoEmpty_layer48.constructor: + result = new TL_botInfoEmpty_layer48(); + break; + case TL_botInfo_layer131.constructor: + result = new TL_botInfo_layer131(); + break; + case TL_botInfo_layer48.constructor: + result = new TL_botInfo_layer48(); + break; + case TL_botInfo_layer139.constructor: + result = new TL_botInfo_layer139(); + break; + case TL_botInfo_layer185.constructor: + result = new TL_botInfo_layer185(); + break; + case TL_botInfo.constructor: + result = new TL_botInfo(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in BotInfo", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_botInfoEmpty_layer48 extends TL_botInfo { + public static final int constructor = 0xbb2e37ce; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_botInfo_layer131 extends TL_botInfo { + public static final int constructor = 0x98e81d3a; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt32(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32((int) user_id); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + } + + public static class TL_botInfo_layer48 extends TL_botInfo { + public static final int constructor = 0x9cf585d; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt32(exception); + version = stream.readInt32(exception); + stream.readString(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32((int) user_id); + stream.writeInt32(version); + stream.writeString(""); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + } + + public static class TL_botInfo_layer139 extends BotInfo { + public static final int constructor = 0x1b74b335; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt64(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(user_id); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + } + + public static class TL_botInfo extends BotInfo { + public static final int constructor = 0x82437e74; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + has_preview_medias = (flags & 64) != 0; + if ((flags & 1) != 0) { + user_id = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + description = stream.readString(exception); + } + if ((flags & 16) != 0) { + description_photo = TLRPC.Photo.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32) != 0) { + description_document = TLRPC.Document.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 4) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + if ((flags & 8) != 0) { + menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 128) != 0) { + privacy_policy_url = stream.readString(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = has_preview_medias ? flags | 64 : flags &~ 64; + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeInt64(user_id); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + if ((flags & 16) != 0) { + description_photo.serializeToStream(stream); + } + if ((flags & 32) != 0) { + description_document.serializeToStream(stream); + } + if ((flags & 4) != 0) { + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + if ((flags & 8) != 0) { + menu_button.serializeToStream(stream); + } + if ((flags & 128) != 0) { + stream.writeString(privacy_policy_url); + } + } + } + + public static class TL_botInfo_layer185 extends TL_botInfo { + public static final int constructor = 0x8f300b57; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + has_preview_medias = (flags & 64) != 0; + if ((flags & 1) != 0) { + user_id = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + description = stream.readString(exception); + } + if ((flags & 16) != 0) { + description_photo = TLRPC.Photo.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32) != 0) { + description_document = TLRPC.Document.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 4) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + if ((flags & 8) != 0) { + menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = has_preview_medias ? flags | 64 : flags &~ 64; + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeInt64(user_id); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + if ((flags & 16) != 0) { + description_photo.serializeToStream(stream); + } + if ((flags & 32) != 0) { + description_document.serializeToStream(stream); + } + if ((flags & 4) != 0) { + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + if ((flags & 8) != 0) { + menu_button.serializeToStream(stream); + } + } + } + + public static class TL_botInfo_layer140 extends TL_botInfo { + public static final int constructor = 0xe4169b5d; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt64(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(user_id); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + menu_button.serializeToStream(stream); + } + } + + public static abstract class BotMenuButton extends TLObject { + + public static BotMenuButton TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + BotMenuButton result = null; + switch (constructor) { + case 0xc7b57ce6: + result = new TL_botMenuButton(); + break; + case 0x7533a588: + result = new TL_botMenuButtonDefault(); + break; + case 0x4258c205: + result = new TL_botMenuButtonCommands(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in BotMenuButton", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_botMenuButton extends BotMenuButton { + public static final int constructor = 0xc7b57ce6; + + public String text; + public String url; + + public void readParams(AbstractSerializedData stream, boolean exception) { + text = stream.readString(exception); + url = stream.readString(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(text); + stream.writeString(url); + } + } + + public static class TL_botMenuButtonDefault extends BotMenuButton { + public static final int constructor = 0x7533a588; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_botMenuButtonCommands extends BotMenuButton { + public static final int constructor = 0x4258c205; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_updateBotMenuButton extends TLRPC.Update { + public static final int constructor = 0x14b85813; + + public long bot_id; + public BotMenuButton button; + + public void readParams(AbstractSerializedData stream, boolean exception) { + bot_id = stream.readInt64(exception); + button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(bot_id); + button.serializeToStream(stream); + } + } + + public static class setBotMenuButton extends TLObject { + public static final int constructor = 0x4504d54f; + + public TLRPC.InputUser user_id; + public BotMenuButton button; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + user_id.serializeToStream(stream); + button.serializeToStream(stream); + } + } + + public static class getBotMenuButton extends TLObject { + public static final int constructor = 0x9c60eb28; + + public TLRPC.InputUser user_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return BotMenuButton.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + user_id.serializeToStream(stream); + } + } + + public static class canSendMessage extends TLObject { + public static final int constructor = 0x1359f4e6; + + public TLRPC.InputUser bot; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + } + } + + public static class allowSendMessage extends TLObject { + public static final int constructor = 0xf132e3ef; + + public TLRPC.InputUser bot; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Updates.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + } + } + + public static class invokeWebViewCustomMethod extends TLObject { + public static final int constructor = 0x87fc5e7; + + public TLRPC.InputUser bot; + public String custom_method; + public TLRPC.TL_dataJSON params; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.TL_dataJSON.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(custom_method); + params.serializeToStream(stream); + } + } + + public static class getPopularAppBots extends TLObject { + public static final int constructor = 0xc2510192; + + public String offset; + public int limit; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return popularAppBots.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(offset); + stream.writeInt32(limit); + } + } + + public static class popularAppBots extends TLObject { + public static final int constructor = 0x1991b13b; + + public int flags; + public String next_offset; + public ArrayList users = new ArrayList<>(); + + public static popularAppBots TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (popularAppBots.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_bots_popularAppBots", constructor)); + } else { + return null; + } + } + popularAppBots result = new popularAppBots(); + result.readParams(stream, exception); + return result; + } + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + if ((flags & 1) != 0) { + next_offset = stream.readString(exception); + } + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.User object = TLRPC.User.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + users.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeString(next_offset); + } + stream.writeInt32(0x1cb5c415); + int count = users.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + users.get(i).serializeToStream(stream); + } + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java index 35670094d..d79443907 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java @@ -3120,13 +3120,21 @@ public class TL_stories { case TL_mediaAreaChannelPost.constructor: result = new TL_mediaAreaChannelPost(); break; - case TL_inputMediaAreaVenue.constructor: result = new TL_inputMediaAreaVenue(); break; case TL_inputMediaAreaChannelPost.constructor: result = new TL_inputMediaAreaChannelPost(); break; + case TL_mediaAreaWeather.constructor: + result = new TL_mediaAreaWeather(); + break; + case TL_mediaAreaWeatherOld.constructor: + result = new TL_mediaAreaWeatherOld(); + break; + case TL_mediaAreaWeather2.constructor: + result = new TL_mediaAreaWeather2(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in MediaArea", constructor)); @@ -3233,6 +3241,83 @@ public class TL_stories { } } + public static class TL_mediaAreaWeather2 extends MediaArea { + public static final int constructor = 0x855f223e; + + public String emoji; + public int temperature_c; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + dark = (flags & 1) != 0; + coordinates = MediaAreaCoordinates.TLdeserialize(stream, stream.readInt32(exception), exception); + emoji = stream.readString(exception); + temperature_c = stream.readInt32(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = dark ? flags | 1 : flags &~ 1; + stream.writeInt32(flags); + coordinates.serializeToStream(stream); + stream.writeString(emoji); + stream.writeInt32(temperature_c); + } + } + + public static class TL_mediaAreaWeather extends MediaArea { + public static final int constructor = 0x49a6549c; + + public String emoji; + public double temperature_c; + public int color; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + coordinates = MediaAreaCoordinates.TLdeserialize(stream, stream.readInt32(exception), exception); + emoji = stream.readString(exception); + temperature_c = stream.readDouble(exception); + color = stream.readInt32(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + coordinates.serializeToStream(stream); + stream.writeString(emoji); + stream.writeDouble(temperature_c); + stream.writeInt32(color); + } + } + + public static class TL_mediaAreaWeatherOld extends MediaArea { + public static final int constructor = 0x4386f849; + + public String emoji; + public double temperature_c; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + dark = (flags & 1) != 0; + coordinates = MediaAreaCoordinates.TLdeserialize(stream, stream.readInt32(exception), exception); + emoji = stream.readString(exception); + temperature_c = stream.readDouble(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = dark ? flags | 1 : flags &~ 1; + stream.writeInt32(flags); + coordinates.serializeToStream(stream); + stream.writeString(emoji); + stream.writeDouble(temperature_c); + } + } + public static class TL_inputMediaAreaVenue extends MediaArea { public static final int constructor = 0xb282217f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java index cb33c51af..cb68038b6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java @@ -27,6 +27,8 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; +import android.graphics.RenderEffect; +import android.graphics.RuntimeShader; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; @@ -61,6 +63,9 @@ import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.Utilities; import org.telegram.ui.Components.BackButtonMenu; +import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.EmptyBaseFragment; +import org.telegram.ui.Stars.SuperRipple; import org.telegram.ui.bots.BotWebViewSheet; import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.ChatAttachAlert; @@ -118,7 +123,12 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F if (!fragmentsStack.isEmpty()) { lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); } - if (storyViewerAttached() && lastFragment != null && lastFragment.getLastSheet() != null && lastFragment.getLastSheet().isFullyVisible() && lastFragment.getLastSheet().getWindowView() != child) { + if (sheetFragment != null && sheetFragment.sheetsStack != null && !sheetFragment.sheetsStack.isEmpty()) { + lastFragment = sheetFragment; + } + BaseFragment.AttachedSheet lastSheet = null; + if (lastFragment != null) lastSheet = lastFragment.getLastSheet(); + if (lastSheet != null && lastSheet.isFullyVisible() && lastSheet.getWindowView() != child) { return true; } if (child instanceof ActionBar) { @@ -367,6 +377,11 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F } } + @Override + public boolean allowSwipe() { + return (sheetFragment == null || sheetFragment.getLastSheet() == null || !sheetFragment.getLastSheet().isShown()); + } + private static Drawable headerShadowDrawable; private static Drawable layerShadowDrawable; private static Paint scrimPaint; @@ -381,11 +396,36 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F private ColorDrawable previewBackgroundDrawable; public LayoutContainer containerView; - private LayoutContainer containerViewBack; + public LayoutContainer containerViewBack; + public LayoutContainer sheetContainer; private DrawerLayoutContainer drawerLayoutContainer; private ActionBar currentActionBar; private BottomSheetTabs bottomSheetTabs; + private EmptyBaseFragment sheetFragment; + public EmptyBaseFragment getSheetFragment() { + return getSheetFragment(true); + } + public EmptyBaseFragment getSheetFragment(boolean create) { + if (parentActivity == null) + return null; + if (sheetFragment == null) { + sheetFragment = new EmptyBaseFragment(); + sheetFragment.setParentLayout(this); + View fragmentView = sheetFragment.fragmentView; + if (fragmentView == null) { + fragmentView = sheetFragment.createView(parentActivity); + } + if (fragmentView.getParent() != sheetContainer) { + AndroidUtilities.removeFromParent(fragmentView); + sheetContainer.addView(fragmentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } + sheetFragment.onResume(); + sheetFragment.onBecomeFullyVisible(); + } + return sheetFragment; + } + private BaseFragment newFragment; private BaseFragment oldFragment; @@ -476,7 +516,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F public void setFragmentStack(List stack) { this.fragmentsStack = stack; - FrameLayout.LayoutParams layoutParams; + LayoutParams layoutParams; if (main) { if (bottomSheetTabs != null) { AndroidUtilities.removeFromParent(bottomSheetTabs); @@ -484,7 +524,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F } bottomSheetTabs = new BottomSheetTabs(parentActivity, this); - layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(68 + 8)); + layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(68 + 8)); layoutParams.gravity = Gravity.BOTTOM | Gravity.FILL_HORIZONTAL; addView(bottomSheetTabs, layoutParams); @@ -493,22 +533,40 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F } } + if (containerViewBack != null) { + AndroidUtilities.removeFromParent(containerViewBack); + } this.containerViewBack = new LayoutContainer(parentActivity); addView(containerViewBack); - layoutParams = (FrameLayout.LayoutParams) containerViewBack.getLayoutParams(); + layoutParams = (LayoutParams) containerViewBack.getLayoutParams(); layoutParams.width = LayoutHelper.MATCH_PARENT; layoutParams.height = LayoutHelper.MATCH_PARENT; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; containerViewBack.setLayoutParams(layoutParams); + if (containerView != null) { + AndroidUtilities.removeFromParent(containerView); + } containerView = new LayoutContainer(parentActivity); addView(containerView); - layoutParams = (FrameLayout.LayoutParams) containerView.getLayoutParams(); + layoutParams = (LayoutParams) containerView.getLayoutParams(); layoutParams.width = LayoutHelper.MATCH_PARENT; layoutParams.height = LayoutHelper.MATCH_PARENT; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; containerView.setLayoutParams(layoutParams); + if (sheetContainer != null) { + AndroidUtilities.removeFromParent(sheetContainer); + } + sheetContainer = new LayoutContainer(parentActivity); + addView(sheetContainer); + layoutParams = (LayoutParams) sheetContainer.getLayoutParams(); + layoutParams.width = LayoutHelper.MATCH_PARENT; + layoutParams.height = LayoutHelper.MATCH_PARENT; + layoutParams.gravity = Gravity.TOP | Gravity.LEFT; + sheetContainer.setLayoutParams(layoutParams); + + for (BaseFragment fragment : fragmentsStack) { fragment.setParentLayout(this); } @@ -728,6 +786,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onResume(); } + if (sheetFragment != null) { + sheetFragment.onResume(); + } } @Override @@ -736,6 +797,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onUserLeaveHint(); } + if (sheetFragment != null) { + sheetFragment.onUserLeaveHint(); + } } @Override @@ -744,6 +808,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onPause(); } + if (sheetFragment != null) { + sheetFragment.onPause(); + } } @Override @@ -951,6 +1018,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F containerView = containerViewBack; containerViewBack = temp; bringChildToFront(containerView); + if (sheetContainer != null) { + bringChildToFront(sheetContainer); + } lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); currentActionBar = lastFragment.actionBar; @@ -1041,7 +1111,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F @Override public boolean onTouchEvent(MotionEvent ev) { if (!checkTransitionAnimation() && !inActionMode && !animationInProgress) { - if (fragmentsStack.size() > 1) { + if (fragmentsStack.size() > 1 && allowSwipe()) { if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN) { BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1); if (!currentFragment.isSwipeBackEnabled(ev)) { @@ -1189,6 +1259,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F currentActionBar.closeSearchField(); return; } + if (sheetFragment != null && !sheetFragment.onBackPressed()) { + return; + } BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); if (lastFragment.onBackPressed()) { if (!fragmentsStack.isEmpty()) { @@ -1340,7 +1413,18 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F Integer newNavigationBarColor = newFragment != null ? newFragment.getNavigationBarColor() : null; if (newFragment != null && oldNavigationBarColor != null) { float ratio = MathUtils.clamp(4f * animationProgress, 0f, 1f); - newFragment.setNavigationBarColor(ColorUtils.blendARGB(oldNavigationBarColor, newNavigationBarColor, ratio)); + int color = ColorUtils.blendARGB(oldNavigationBarColor, newNavigationBarColor, ratio); + if (sheetFragment != null) { + if (sheetFragment.sheetsStack != null) { + for (int i = 0; i < sheetFragment.sheetsStack.size(); ++i) { + BaseFragment.AttachedSheet sheet = sheetFragment.sheetsStack.get(i); + if (sheet.attachedToParent()) { + color = sheet.getNavigationBarColor(color); + } + } + } + } + newFragment.setNavigationBarColor(color); } float interpolated; if (preview) { @@ -1564,6 +1648,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F } bringChildToFront(containerView); + if (sheetContainer != null) { + bringChildToFront(sheetContainer); + } if (!needAnimation) { presentFragmentInternalRemoveOld(removeLast, currentFragment); if (backgroundView != null) { @@ -1884,6 +1971,9 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F containerViewBack.setVisibility(View.INVISIBLE); containerViewBack.setTranslationY(0); bringChildToFront(containerView); + if (sheetContainer != null) { + bringChildToFront(sheetContainer); + } onFragmentStackChanged("closeLastFragmentInternalRemoveOld"); } @@ -2817,11 +2907,17 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F @Override public boolean dispatchTouchEvent(MotionEvent ev) { final boolean tabs = ev.getY() > getHeight() - getBottomTabsHeight(true); - if ( - getLastFragment() != null && - getLastFragment().getLastSheet() != null && - getLastFragment().getLastSheet().attachedToParent() - ) { + + BaseFragment.AttachedSheet lastSheet = null; + if (lastSheet == null && sheetFragment != null && sheetFragment.getLastSheet() != null) { + lastSheet = sheetFragment.getLastSheet(); + if (!lastSheet.attachedToParent() || lastSheet.getWindowView() == null) lastSheet = null; + } + if (lastSheet == null && getLastFragment() != null && getLastFragment().getLastSheet() != null) { + lastSheet = getLastFragment().getLastSheet(); + if (!lastSheet.attachedToParent() || lastSheet.getWindowView() == null) lastSheet = null; + } + if (lastSheet != null) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { tabsEvents = tabs; } @@ -2829,7 +2925,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { tabsEvents = false; } - return getLastFragment().getLastSheet().getWindowView().dispatchTouchEvent(ev); + return lastSheet.getWindowView().dispatchTouchEvent(ev); } } if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { @@ -2885,6 +2981,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F requestLayout(); containerView.requestLayout(); containerViewBack.requestLayout(); + sheetContainer.requestLayout(); if (animated) { bottomTabsAnimator = ValueAnimator.ofFloat(bottomTabsProgress, bottomTabsHeight); bottomTabsAnimator.addUpdateListener(anm -> { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java index 69b74d6ad..dd9a24747 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java @@ -25,7 +25,7 @@ import org.telegram.ui.Components.RLottieImageView; public class ActionBarMenuSubItem extends FrameLayout { private TextView textView; - private TextView subtextView; + public TextView subtextView; public RLottieImageView imageView; private boolean checkViewLeft; private CheckBox2 checkView; @@ -237,7 +237,9 @@ public class ActionBarMenuSubItem extends FrameLayout { } public void setSubtextColor(int color) { - subtextView.setTextColor(color); + if (subtextView != null) { + subtextView.setTextColor(color); + } } public void setSubtext(String text) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java index 96ce38829..7b7b389c5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java @@ -298,6 +298,7 @@ public class AlertDialog extends Dialog implements Drawable.Callback, Notificati @Override public void show() { if (!AndroidUtilities.isSafeToShow(getContext())) return; + dismissed = false; super.show(); if (progressViewContainer != null && progressViewStyle == ALERT_TYPE_SPINNER) { progressViewContainer.setScaleX(0); @@ -311,275 +312,285 @@ public class AlertDialog extends Dialog implements Drawable.Callback, Notificati shownAt = System.currentTimeMillis(); } - protected View inflateContent(boolean setContent) { - LinearLayout containerView = new LinearLayout(getContext()) { + public class AlertDialogView extends LinearLayout { + public AlertDialogView(Context context) { + super(context); + } - private boolean inLayout; + private boolean inLayout; - @Override - public boolean onTouchEvent(MotionEvent event) { - if (progressViewStyle == ALERT_TYPE_SPINNER) { - showCancelAlert(); - return false; - } - return super.onTouchEvent(event); - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - if (progressViewStyle == ALERT_TYPE_SPINNER) { - showCancelAlert(); - return false; - } - return super.onInterceptTouchEvent(ev); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (progressViewStyle == ALERT_TYPE_SPINNER) { - progressViewContainer.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY)); - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)); - } else { - inLayout = true; - int width = MeasureSpec.getSize(widthMeasureSpec); - int height = MeasureSpec.getSize(heightMeasureSpec); - - if (customWidth > 0) { - width = customWidth + backgroundPaddings.left + backgroundPaddings.right; - } - - int maxContentHeight; - int availableHeight = maxContentHeight = height - getPaddingTop() - getPaddingBottom(); - int availableWidth = width - getPaddingLeft() - getPaddingRight(); - - int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth - AndroidUtilities.dp(48), MeasureSpec.EXACTLY); - int childFullWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY); - LayoutParams layoutParams; - - if (buttonsLayout != null) { - int count = buttonsLayout.getChildCount(); - for (int a = 0; a < count; a++) { - View child = buttonsLayout.getChildAt(a); - if (child instanceof TextView) { - TextView button = (TextView) child; - button.setMaxWidth(AndroidUtilities.dp((availableWidth - AndroidUtilities.dp(24)) / 2)); - } - } - buttonsLayout.measure(childFullWidthMeasureSpec, heightMeasureSpec); - layoutParams = (LayoutParams) buttonsLayout.getLayoutParams(); - availableHeight -= buttonsLayout.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - if (secondTitleTextView != null) { - secondTitleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec), MeasureSpec.AT_MOST), heightMeasureSpec); - } - if (titleTextView != null) { - if (secondTitleTextView != null) { - titleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec) - secondTitleTextView.getMeasuredWidth() - AndroidUtilities.dp(8), MeasureSpec.EXACTLY), heightMeasureSpec); - } else { - titleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); - } - } - if (titleContainer != null) { - titleContainer.measure(childWidthMeasureSpec, heightMeasureSpec); - layoutParams = (LayoutParams) titleContainer.getLayoutParams(); - availableHeight -= titleContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - if (subtitleTextView != null) { - subtitleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); - layoutParams = (LayoutParams) subtitleTextView.getLayoutParams(); - availableHeight -= subtitleTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - if (topImageView != null) { - topImageView.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(topHeight), MeasureSpec.EXACTLY)); - availableHeight -= topImageView.getMeasuredHeight(); - } - if (topView != null) { - int w = width; - int h; - if (aspectRatio == 0) { - float scale = w / 936.0f; - h = (int) (354 * scale); - } else { - h = (int) (w * aspectRatio); - } - topView.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)); - topView.getLayoutParams().height = h; - availableHeight -= topView.getMeasuredHeight(); - } - if (progressViewStyle == ALERT_TYPE_MESSAGE) { - layoutParams = (LayoutParams) contentScrollView.getLayoutParams(); - - if (customView != null) { - layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE && items == null ? AndroidUtilities.dp(16) : 0; - layoutParams.bottomMargin = buttonsLayout == null ? AndroidUtilities.dp(8) : 0; - } else if (items != null) { - layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE ? AndroidUtilities.dp(8) : 0; - layoutParams.bottomMargin = AndroidUtilities.dp(8); - } else if (messageTextView.getVisibility() == VISIBLE) { - layoutParams.topMargin = titleTextView == null ? AndroidUtilities.dp(19) : 0; - layoutParams.bottomMargin = AndroidUtilities.dp(20); - } - - availableHeight -= layoutParams.bottomMargin + layoutParams.topMargin; - contentScrollView.measure(childFullWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - availableHeight -= contentScrollView.getMeasuredHeight(); - } else { - if (progressViewContainer != null) { - progressViewContainer.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - layoutParams = (LayoutParams) progressViewContainer.getLayoutParams(); - availableHeight -= progressViewContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } else if (messageTextView != null) { - messageTextView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - if (messageTextView.getVisibility() != GONE) { - layoutParams = (LayoutParams) messageTextView.getLayoutParams(); - availableHeight -= messageTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - } - if (lineProgressView != null) { - lineProgressView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(4), MeasureSpec.EXACTLY)); - layoutParams = (LayoutParams) lineProgressView.getLayoutParams(); - availableHeight -= lineProgressView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - - lineProgressViewPercent.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - layoutParams = (LayoutParams) lineProgressViewPercent.getLayoutParams(); - availableHeight -= lineProgressViewPercent.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - } - - setMeasuredDimension(width, maxContentHeight - availableHeight + getPaddingTop() + getPaddingBottom() - (topAnimationIsNew ? AndroidUtilities.dp(8) : 0)); - inLayout = false; - - if (lastScreenWidth != AndroidUtilities.displaySize.x) { - AndroidUtilities.runOnUIThread(() -> { - lastScreenWidth = AndroidUtilities.displaySize.x; - final int calculatedWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(56); - int maxWidth; - if (AndroidUtilities.isTablet()) { - if (AndroidUtilities.isSmallTablet()) { - maxWidth = AndroidUtilities.dp(446); - } else { - maxWidth = AndroidUtilities.dp(496); - } - } else { - maxWidth = AndroidUtilities.dp(356); - } - - Window window = getWindow(); - WindowManager.LayoutParams params = new WindowManager.LayoutParams(); - params.copyFrom(window.getAttributes()); - params.width = Math.min(maxWidth, calculatedWidth) + backgroundPaddings.left + backgroundPaddings.right; - try { - window.setAttributes(params); - } catch (Throwable e) { - FileLog.e(e); - } - }); - } - } - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - if (progressViewStyle == ALERT_TYPE_SPINNER) { - int x = (r - l - progressViewContainer.getMeasuredWidth()) / 2; - int y = (b - t - progressViewContainer.getMeasuredHeight()) / 2; - progressViewContainer.layout(x, y, x + progressViewContainer.getMeasuredWidth(), y + progressViewContainer.getMeasuredHeight()); - } else if (contentScrollView != null) { - if (onScrollChangedListener == null) { - onScrollChangedListener = () -> { - runShadowAnimation(0, titleTextView != null && contentScrollView.getScrollY() > scrollContainer.getTop()); - runShadowAnimation(1, buttonsLayout != null && contentScrollView.getScrollY() + contentScrollView.getHeight() < scrollContainer.getBottom()); - contentScrollView.invalidate(); - }; - contentScrollView.getViewTreeObserver().addOnScrollChangedListener(onScrollChangedListener); - } - onScrollChangedListener.onScrollChanged(); - } - - getLocationOnScreen(containerViewLocation); - if (blurMatrix != null && blurShader != null) { - blurMatrix.reset(); - blurMatrix.postScale(8f, 8f); - blurMatrix.postTranslate(-containerViewLocation[0], -containerViewLocation[1]); - blurShader.setLocalMatrix(blurMatrix); - } - } - - @Override - public void requestLayout() { - if (inLayout) { - return; - } - super.requestLayout(); - } - - @Override - public boolean hasOverlappingRendering() { + @Override + public boolean onTouchEvent(MotionEvent event) { + if (progressViewStyle == ALERT_TYPE_SPINNER) { + showCancelAlert(); return false; } + return super.onTouchEvent(event); + } - private AnimatedFloat blurPaintAlpha = new AnimatedFloat(0, this); - private Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (progressViewStyle == ALERT_TYPE_SPINNER) { + showCancelAlert(); + return false; + } + return super.onInterceptTouchEvent(ev); + } - @Override - public void draw(Canvas canvas) { - if (blurredBackground && !blurredNativeBackground) { - float r; - if (progressViewStyle == ALERT_TYPE_SPINNER && progressViewContainer != null) { - r = AndroidUtilities.dp(18); - float w = progressViewContainer.getWidth() * progressViewContainer.getScaleX(); - float h = progressViewContainer.getHeight() * progressViewContainer.getScaleY(); - AndroidUtilities.rectTmp.set( + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (progressViewStyle == ALERT_TYPE_SPINNER) { + progressViewContainer.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY)); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)); + } else { + inLayout = true; + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + + if (customWidth > 0) { + width = customWidth + backgroundPaddings.left + backgroundPaddings.right; + } + + int maxContentHeight; + int availableHeight = maxContentHeight = height - getPaddingTop() - getPaddingBottom(); + int availableWidth = width - getPaddingLeft() - getPaddingRight(); + + int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth - AndroidUtilities.dp(48), MeasureSpec.EXACTLY); + int childFullWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY); + LayoutParams layoutParams; + + if (buttonsLayout != null) { + int count = buttonsLayout.getChildCount(); + for (int a = 0; a < count; a++) { + View child = buttonsLayout.getChildAt(a); + if (child instanceof TextView) { + TextView button = (TextView) child; + button.setMaxWidth(AndroidUtilities.dp((availableWidth - AndroidUtilities.dp(24)) / 2)); + } + } + buttonsLayout.measure(childFullWidthMeasureSpec, heightMeasureSpec); + layoutParams = (LayoutParams) buttonsLayout.getLayoutParams(); + availableHeight -= buttonsLayout.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + if (secondTitleTextView != null) { + secondTitleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec), MeasureSpec.AT_MOST), heightMeasureSpec); + } + if (titleTextView != null) { + if (secondTitleTextView != null) { + titleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec) - secondTitleTextView.getMeasuredWidth() - AndroidUtilities.dp(8), MeasureSpec.EXACTLY), heightMeasureSpec); + } else { + titleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); + } + } + if (titleContainer != null) { + titleContainer.measure(childWidthMeasureSpec, heightMeasureSpec); + layoutParams = (LayoutParams) titleContainer.getLayoutParams(); + availableHeight -= titleContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + if (subtitleTextView != null) { + subtitleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); + layoutParams = (LayoutParams) subtitleTextView.getLayoutParams(); + availableHeight -= subtitleTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + if (topImageView != null) { + topImageView.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(topHeight), MeasureSpec.EXACTLY)); + availableHeight -= topImageView.getMeasuredHeight(); + } + if (topView != null) { + int w = width; + int h; + if (aspectRatio == 0) { + float scale = w / 936.0f; + h = (int) (354 * scale); + } else { + h = (int) (w * aspectRatio); + } + topView.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)); + topView.getLayoutParams().height = h; + availableHeight -= topView.getMeasuredHeight(); + } + if (progressViewStyle == ALERT_TYPE_MESSAGE) { + layoutParams = (LayoutParams) contentScrollView.getLayoutParams(); + + if (customView != null) { + layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE && items == null ? AndroidUtilities.dp(16) : 0; + layoutParams.bottomMargin = buttonsLayout == null ? AndroidUtilities.dp(8) : 0; + } else if (items != null) { + layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE ? AndroidUtilities.dp(8) : 0; + layoutParams.bottomMargin = AndroidUtilities.dp(8); + } else if (messageTextView.getVisibility() == VISIBLE) { + layoutParams.topMargin = titleTextView == null ? AndroidUtilities.dp(19) : 0; + layoutParams.bottomMargin = AndroidUtilities.dp(20); + } + + availableHeight -= layoutParams.bottomMargin + layoutParams.topMargin; + contentScrollView.measure(childFullWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + availableHeight -= contentScrollView.getMeasuredHeight(); + } else { + if (progressViewContainer != null) { + progressViewContainer.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + layoutParams = (LayoutParams) progressViewContainer.getLayoutParams(); + availableHeight -= progressViewContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } else if (messageTextView != null) { + messageTextView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + if (messageTextView.getVisibility() != GONE) { + layoutParams = (LayoutParams) messageTextView.getLayoutParams(); + availableHeight -= messageTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + } + if (lineProgressView != null) { + lineProgressView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(4), MeasureSpec.EXACTLY)); + layoutParams = (LayoutParams) lineProgressView.getLayoutParams(); + availableHeight -= lineProgressView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + + lineProgressViewPercent.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + layoutParams = (LayoutParams) lineProgressViewPercent.getLayoutParams(); + availableHeight -= lineProgressViewPercent.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + } + + setMeasuredDimension(width, maxContentHeight - availableHeight + getPaddingTop() + getPaddingBottom() - (topAnimationIsNew ? AndroidUtilities.dp(8) : 0)); + inLayout = false; + + if (lastScreenWidth != AndroidUtilities.displaySize.x) { + AndroidUtilities.runOnUIThread(() -> { + lastScreenWidth = AndroidUtilities.displaySize.x; + final int calculatedWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(56); + int maxWidth; + if (AndroidUtilities.isTablet()) { + if (AndroidUtilities.isSmallTablet()) { + maxWidth = AndroidUtilities.dp(446); + } else { + maxWidth = AndroidUtilities.dp(496); + } + } else { + maxWidth = AndroidUtilities.dp(356); + } + + Window window = getWindow(); + WindowManager.LayoutParams params = new WindowManager.LayoutParams(); + params.copyFrom(window.getAttributes()); + params.width = Math.min(maxWidth, calculatedWidth) + backgroundPaddings.left + backgroundPaddings.right; + try { + window.setAttributes(params); + } catch (Throwable e) { + FileLog.e(e); + } + }); + } + } + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + if (progressViewStyle == ALERT_TYPE_SPINNER) { + int x = (r - l - progressViewContainer.getMeasuredWidth()) / 2; + int y = (b - t - progressViewContainer.getMeasuredHeight()) / 2; + progressViewContainer.layout(x, y, x + progressViewContainer.getMeasuredWidth(), y + progressViewContainer.getMeasuredHeight()); + } else if (contentScrollView != null) { + if (onScrollChangedListener == null) { + onScrollChangedListener = () -> { + runShadowAnimation(0, titleTextView != null && contentScrollView.getScrollY() > scrollContainer.getTop()); + runShadowAnimation(1, buttonsLayout != null && contentScrollView.getScrollY() + contentScrollView.getHeight() < scrollContainer.getBottom()); + contentScrollView.invalidate(); + }; + contentScrollView.getViewTreeObserver().addOnScrollChangedListener(onScrollChangedListener); + } + onScrollChangedListener.onScrollChanged(); + } + + getLocationOnScreen(containerViewLocation); + if (blurMatrix != null && blurShader != null) { + blurMatrix.reset(); + blurMatrix.postScale(8f, 8f); + blurMatrix.postTranslate(-containerViewLocation[0], -containerViewLocation[1]); + blurShader.setLocalMatrix(blurMatrix); + } + } + + @Override + public void requestLayout() { + if (inLayout) { + return; + } + super.requestLayout(); + } + + @Override + public boolean hasOverlappingRendering() { + return false; + } + + private AnimatedFloat blurPaintAlpha = new AnimatedFloat(0, this); + private Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + @Override + public void draw(Canvas canvas) { + if (blurredBackground && !blurredNativeBackground) { + float r; + if (progressViewStyle == ALERT_TYPE_SPINNER && progressViewContainer != null) { + r = AndroidUtilities.dp(18); + float w = progressViewContainer.getWidth() * progressViewContainer.getScaleX(); + float h = progressViewContainer.getHeight() * progressViewContainer.getScaleY(); + AndroidUtilities.rectTmp.set( (getWidth() - w) / 2f, (getHeight() - h) / 2f, (getWidth() + w) / 2f, (getHeight() + h) / 2f - ); - } else { - r = AndroidUtilities.dp(10); - AndroidUtilities.rectTmp.set(getPaddingLeft(), getPaddingTop(), getMeasuredWidth() - getPaddingRight(), getMeasuredHeight() - getPaddingBottom()); - } - - // draw blur of background - float blurAlpha = blurPaintAlpha.set(blurPaint != null ? 1f : 0f); - if (blurPaint != null) { - blurPaint.setAlpha((int) (0xFF * blurAlpha)); - canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, blurPaint); - } - - // draw dim above blur - if (dimBlurPaint == null) { - dimBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - dimBlurPaint.setColor(ColorUtils.setAlphaComponent(0xff000000, (int) (0xFF * dimAlpha))); - } - canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, dimBlurPaint); - - // draw background - backgroundPaint.setColor(backgroundColor); - backgroundPaint.setAlpha((int) (backgroundPaint.getAlpha() * (blurAlpha * (blurOpacity - 1f) + 1f))); - canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, backgroundPaint); + ); + } else { + r = AndroidUtilities.dp(10); + AndroidUtilities.rectTmp.set(getPaddingLeft(), getPaddingTop(), getMeasuredWidth() - getPaddingRight(), getMeasuredHeight() - getPaddingBottom()); } - super.draw(canvas); - } - @Override - protected void dispatchDraw(Canvas canvas) { - if (drawBackground && !blurredBackground) { - shadowDrawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); - if (topView != null && notDrawBackgroundOnTopView) { - int clipTop = topView.getBottom(); - canvas.save(); - canvas.clipRect(0, clipTop, getMeasuredWidth(), getMeasuredHeight()); - shadowDrawable.draw(canvas); - canvas.restore(); - } else { - shadowDrawable.draw(canvas); - } + // draw blur of background + float blurAlpha = blurPaintAlpha.set(blurPaint != null ? 1f : 0f); + if (blurPaint != null) { + blurPaint.setAlpha((int) (0xFF * blurAlpha)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, blurPaint); } - super.dispatchDraw(canvas); + + // draw dim above blur + if (dimBlurPaint == null) { + dimBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + dimBlurPaint.setColor(ColorUtils.setAlphaComponent(0xff000000, (int) (0xFF * dimAlpha))); + } + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, dimBlurPaint); + + // draw background + backgroundPaint.setColor(backgroundColor); + backgroundPaint.setAlpha((int) (backgroundPaint.getAlpha() * (blurAlpha * (blurOpacity - 1f) + 1f))); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, backgroundPaint); } - }; + super.draw(canvas); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + if (drawBackground && !blurredBackground) { + shadowDrawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); + if (topView != null && notDrawBackgroundOnTopView) { + int clipTop = topView.getBottom(); + canvas.save(); + canvas.clipRect(0, clipTop, getMeasuredWidth(), getMeasuredHeight()); + shadowDrawable.draw(canvas); + canvas.restore(); + } else { + shadowDrawable.draw(canvas); + } + } + super.dispatchDraw(canvas); + } + } + + private AlertDialogView containerView; + public AlertDialogView getContainerView() { + return containerView; + } + + protected View inflateContent(boolean setContent) { + containerView = new AlertDialogView(getContext()); containerView.setOrientation(LinearLayout.VERTICAL); if ((blurredBackground || progressViewStyle == ALERT_TYPE_SPINNER) && progressViewStyle != ALERT_TYPE_LOADING) { containerView.setBackgroundDrawable(null); @@ -1320,6 +1331,11 @@ public class AlertDialog extends Dialog implements Drawable.Callback, Notificati } } + private boolean dismissed; + public boolean isDismissed() { + return dismissed; + } + @Override public void dismiss() { if (overridenDissmissListener != null) { @@ -1328,6 +1344,8 @@ public class AlertDialog extends Dialog implements Drawable.Callback, Notificati listener.run(this::dismiss); return; } + if (dismissed) return; + dismissed = true; NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.emojiLoaded); if (onDismissListener != null) { onDismissListener.onDismiss(this); @@ -1681,8 +1699,24 @@ public class AlertDialog extends Dialog implements Drawable.Callback, Notificati return alertDialog; } + private final boolean[] red = new boolean[3]; + public Builder makeRed(int button) { + int index = (-button) - 1; + if (index >= 0 && index < red.length) { + red[index] = true; + } + return this; + } + public AlertDialog show() { alertDialog.show(); + for (int i = 0; i < red.length; i++) { + if (!red[i]) continue; + TextView button = (TextView) alertDialog.getButton(-(i + 1)); + if (button != null) { + button.setTextColor(alertDialog.getThemedColor(Theme.key_text_RedBold)); + } + } return alertDialog; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java index bfe7df8d9..314e2776a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java @@ -39,6 +39,10 @@ public class BackDrawable extends Drawable { private boolean rotated = true; private int arrowRotation; + public float getRotation() { + return finalRotation; + } + public BackDrawable(boolean close) { super(); paint.setStrokeWidth(AndroidUtilities.dp(2)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java index 9b3a90d43..95ccde75e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java @@ -53,6 +53,7 @@ import org.telegram.messenger.SecretChatHelper; import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.UserConfig; import org.telegram.tgnet.ConnectionsManager; +import org.telegram.ui.ArticleViewer; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.LaunchActivity; import org.telegram.ui.Stories.StoryViewer; @@ -83,6 +84,7 @@ public abstract class BaseFragment { private boolean removingFromStack; private PreviewDelegate previewDelegate; protected Theme.ResourcesProvider resourceProvider; + private boolean isFullyVisible; // public ArrayList storyViewerStack; // public ArrayList botsStack; // @@ -99,14 +101,17 @@ public abstract class BaseFragment { public boolean attachedToParent(); - public boolean onBackPressed(); + public boolean onAttachedBackPressed(); public boolean showDialog(Dialog dialog); public void setKeyboardHeightFromParent(int keyboardHeight); + public boolean isAttachedLightStatusBar(); public int getNavigationBarColor(int color); public void setOnDismissListener(Runnable onDismiss); + + default void setLastVisible(boolean lastVisible) {}; } public static interface AttachedSheetWindow {} @@ -142,6 +147,24 @@ public abstract class BaseFragment { return sheetsStack != null && !sheetsStack.isEmpty(); } + public boolean hasShownSheet() { + if (!hasSheet()) return false; + for (int i = sheetsStack.size() - 1; i >= 0; --i) { + if (sheetsStack.get(i).isShown()) { + return true; + } + } + return false; + } + + public static boolean hasSheets(BaseFragment fragment) { + if (fragment == null) return false; + if (fragment.hasShownSheet()) return true; + if (!(fragment.getParentLayout() instanceof ActionBarLayout)) return false; + final BaseFragment sheetFragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(false); + return sheetFragment != null && sheetFragment.hasShownSheet(); + } + public void clearSheets() { if (sheetsStack == null || sheetsStack.isEmpty()) return; @@ -286,7 +309,9 @@ public abstract class BaseFragment { } public void onRemoveFromParent() { - clearSheets(); + if (sheetsStack == null || sheetsStack.isEmpty()) + return; + updateSheetsVisibility(); } public void setParentFragment(BaseFragment fragment) { @@ -425,6 +450,15 @@ public abstract class BaseFragment { if (hasForceLightStatusBar() && !AndroidUtilities.isTablet() && getParentLayout().getLastFragment() == this && getParentActivity() != null && !finishing) { AndroidUtilities.setLightStatusBar(getParentActivity().getWindow(), Theme.getColor(Theme.key_actionBarDefault) == Color.WHITE); } + + if (sheetsStack != null) { + for (int i = sheetsStack.size() - 1; i >= 0; --i) { + AttachedSheet sheet = sheetsStack.get(i); + sheet.setLastVisible(false); + sheet.dismiss(true); + sheetsStack.remove(i); + } + } } public boolean needDelayOpenAnimation() { @@ -509,7 +543,7 @@ public abstract class BaseFragment { if (sheetsStack != null) { for (int i = sheetsStack.size() - 1; i >= 0; --i) { if (sheetsStack.get(i).isShown()) { - return sheetsStack.get(i).onBackPressed(); + return sheetsStack.get(i).onAttachedBackPressed(); } } } @@ -656,6 +690,7 @@ public abstract class BaseFragment { } public void onBecomeFullyVisible() { + isFullyVisible = true; AccessibilityManager mgr = (AccessibilityManager) ApplicationLoader.applicationContext.getSystemService(Context.ACCESSIBILITY_SERVICE); if (mgr.isEnabled()) { ActionBar actionBar = getActionBar(); @@ -671,6 +706,15 @@ public abstract class BaseFragment { fullyVisibleListener = null; c.run(); } + updateSheetsVisibility(); + } + + private void updateSheetsVisibility() { + if (sheetsStack == null) return; + for (int i = 0; i < sheetsStack.size(); ++i) { + AttachedSheet sheet = sheetsStack.get(i); + sheet.setLastVisible(i == sheetsStack.size() - 1 && isFullyVisible); + } } private Runnable fullyVisibleListener; @@ -683,7 +727,8 @@ public abstract class BaseFragment { } public void onBecomeFullyHidden() { - + isFullyVisible = false; + updateSheetsVisibility(); } public AnimatorSet onCustomTransitionAnimation(boolean isOpen, Runnable callback) { @@ -1191,10 +1236,29 @@ public abstract class BaseFragment { storyViewer.fromBottomSheet = true; } sheetsStack.add(storyViewer); + updateSheetsVisibility(); } return storyViewer; } + public void removeSheet(BaseFragment.AttachedSheet sheet) { + if (sheetsStack == null) return; + sheetsStack.remove(sheet); + updateSheetsVisibility(); + } + + public void addSheet(BaseFragment.AttachedSheet sheet) { + if (sheetsStack == null) { + sheetsStack = new ArrayList<>(); + } + StoryViewer storyViewer = getLastStoryViewer(); + if (storyViewer != null) { + storyViewer.listenToAttachedSheet(sheet); + } + sheetsStack.add(sheet); + updateSheetsVisibility(); + } + public StoryViewer createOverlayStoryViewer() { if (sheetsStack == null) { sheetsStack = new ArrayList<>(); @@ -1204,19 +1268,39 @@ public abstract class BaseFragment { storyViewer.fromBottomSheet = true; } sheetsStack.add(storyViewer); + updateSheetsVisibility(); return storyViewer; } - public BotWebViewAttachedSheet createBotViewer() { + public ArticleViewer createArticleViewer(boolean forceRecreate) { if (sheetsStack == null) { sheetsStack = new ArrayList<>(); } - BotWebViewAttachedSheet botViewer = new BotWebViewAttachedSheet(this); - StoryViewer storyViewer = getLastStoryViewer(); - if (storyViewer != null) { - storyViewer.listenToAttachedSheet(botViewer); + if (!forceRecreate) { + if (getLastSheet() instanceof ArticleViewer.Sheet && getLastSheet().isShown()) { + return ((ArticleViewer.Sheet) getLastSheet()).getArticleViewer(); + } + if ( + parentLayout instanceof ActionBarLayout && + ((ActionBarLayout) parentLayout).getSheetFragment(false) != null && + ((ActionBarLayout) parentLayout).getSheetFragment(false).getLastSheet() instanceof ArticleViewer.Sheet + ) { + ArticleViewer.Sheet lastSheet = (ArticleViewer.Sheet) ((ActionBarLayout) parentLayout).getSheetFragment(false).getLastSheet(); + if (lastSheet.isShown()) { + return lastSheet.getArticleViewer(); + } + } } - sheetsStack.add(botViewer); + ArticleViewer articleViewer = ArticleViewer.makeSheet(this); + addSheet(articleViewer.sheet); + BottomSheetTabDialog.checkSheet(articleViewer.sheet); + return articleViewer; + } + + public BotWebViewAttachedSheet createBotViewer() { + BotWebViewAttachedSheet botViewer = new BotWebViewAttachedSheet(this); + addSheet(botViewer); + BottomSheetTabDialog.checkSheet(botViewer); return botViewer; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java index 442d53179..dcc5a4ea2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java @@ -30,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.KeyEvent; @@ -43,12 +44,15 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Interpolator; +import android.view.inputmethod.InputMethodManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.core.graphics.ColorUtils; import androidx.core.view.NestedScrollingParent; import androidx.core.view.NestedScrollingParentHelper; import androidx.core.view.ViewCompat; @@ -60,15 +64,17 @@ import org.telegram.messenger.LocaleController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; import org.telegram.messenger.camera.CameraView; import org.telegram.ui.Components.AnimationProperties; import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.LaunchActivity; import java.util.ArrayList; -public class BottomSheet extends Dialog { +public class BottomSheet extends Dialog implements BaseFragment.AttachedSheet { private final static boolean AVOID_SYSTEM_CUTOUT_FULLSCREEN = false; protected int currentAccount = UserConfig.selectedAccount; @@ -382,7 +388,7 @@ public class BottomSheet extends Dialog { container.invalidate(); } } else if (ev == null || ev.getPointerId(0) == startedTrackingPointerId && (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_UP)) { - containerView.setTranslationX(0); +// containerView.setTranslationX(0); if (velocityTracker == null) { velocityTracker = VelocityTracker.obtain(); } @@ -394,13 +400,15 @@ public class BottomSheet extends Dialog { ValueAnimator animator = ValueAnimator.ofFloat(swipeBackX, 0); animator.addUpdateListener(animation -> { swipeBackX = (float) animation.getAnimatedValue(); - setTranslationX(swipeBackX); + containerView.setTranslationX(swipeBackX); + container.invalidate(); }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { swipeBackX = 0; - setTranslationX(0); + containerView.setTranslationX(0); + container.invalidate(); } }); animator.setInterpolator(CubicBezierInterpolator.DEFAULT); @@ -410,18 +418,30 @@ public class BottomSheet extends Dialog { ValueAnimator animator = ValueAnimator.ofFloat(swipeBackX, getMeasuredWidth()); animator.addUpdateListener(animation -> { swipeBackX = (float) animation.getAnimatedValue(); - setTranslationX(swipeBackX); + containerView.setTranslationX(swipeBackX); + container.invalidate(); }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { skipDismissAnimation = true; + containerView.setTranslationX(getMeasuredWidth()); dismiss(); + container.invalidate(); } }); - animator.setInterpolator(CubicBezierInterpolator.DEFAULT); - animator.setDuration(150); + animator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animator.setDuration(320); animator.start(); + + ValueAnimator dimAnimator = ValueAnimator.ofFloat(1f, 0f); + dimAnimator.addUpdateListener(animation -> { + final float t = (float) animation.getAnimatedValue(); + backDrawable.setAlpha(dimBehind ? (int) (dimBehindAlpha * t) : 0); + }); + dimAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + dimAnimator.setDuration(320); + dimAnimator.start(); } maybeStartTracking = false; startedTracking = false; @@ -1104,7 +1124,7 @@ public class BottomSheet extends Dialog { Bulletin.removeDelegate(this); } }; - container.setBackgroundDrawable(backDrawable); + container.setBackground(backDrawable); focusable = needFocus; if (Build.VERSION.SDK_INT >= 21) { container.setFitsSystemWindows(true); @@ -1155,10 +1175,32 @@ public class BottomSheet extends Dialog { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + onCreateInternal(); + } - Window window = getWindow(); - window.setWindowAnimations(R.style.DialogNoAnimation); - setContentView(container, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + private void onCreateInternal() { + + Window window = null; + if (attachedFragment != null) { + attachedFragment.addSheet(this); + if (attachedFragment.getLayoutContainer() == null) return; + + InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm.hideSoftInputFromWindow(attachedFragment.getLayoutContainer().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)) { + AndroidUtilities.runOnUIThread(() -> { + AndroidUtilities.removeFromParent(container); + attachedFragment.getLayoutContainer().addView(container); + }, 80); + } else { + AndroidUtilities.removeFromParent(container); + attachedFragment.getLayoutContainer().addView(container); + } + + } else { + window = getWindow(); + window.setWindowAnimations(R.style.DialogNoAnimation); + setContentView(container, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + } if (useLightStatusBar && Build.VERSION.SDK_INT >= 23) { int color = Theme.getColor(Theme.key_actionBarDefault, null, true); @@ -1183,7 +1225,7 @@ public class BottomSheet extends Dialog { public void setTranslationY(float translationY) { super.setTranslationY(translationY); if (topBulletinContainer != null) { - topBulletinContainer.setTranslationY(-getHeight() + translationY - getPaddingTop() - AndroidUtilities.statusBarHeight + backgroundPaddingTop); + topBulletinContainer.setTranslationY(-(container.getHeight() - containerView.getY()) + backgroundPaddingTop); } onContainerTranslationYChanged(translationY); } @@ -1281,30 +1323,34 @@ public class BottomSheet extends Dialog { } } - WindowManager.LayoutParams params = window.getAttributes(); - params.width = ViewGroup.LayoutParams.MATCH_PARENT; - params.gravity = Gravity.TOP | Gravity.LEFT; - params.dimAmount = 0; - params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; - if (focusable) { - params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; - } else { - params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; - } - if (isFullscreen) { - if (Build.VERSION.SDK_INT >= 21) { - params.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | - WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | - WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; + if (attachedFragment != null) { + + } else if (window != null) { + WindowManager.LayoutParams params = window.getAttributes(); + params.width = ViewGroup.LayoutParams.MATCH_PARENT; + params.gravity = Gravity.TOP | Gravity.LEFT; + params.dimAmount = 0; + params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; + if (focusable) { + params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + } else { + params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; } - params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; - container.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN); + if (isFullscreen) { + if (Build.VERSION.SDK_INT >= 21) { + params.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | + WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | + WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; + } + params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; + container.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN); + } + params.height = ViewGroup.LayoutParams.MATCH_PARENT; + if (Build.VERSION.SDK_INT >= 28) { + params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + } + window.setAttributes(params); } - params.height = ViewGroup.LayoutParams.MATCH_PARENT; - if (Build.VERSION.SDK_INT >= 28) { - params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; - } - window.setAttributes(params); } @Override @@ -1324,6 +1370,14 @@ public class BottomSheet extends Dialog { } container.setSystemUiVisibility(flags); } + if (attachedFragment != null) { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + } + } + + @Override + public boolean isAttachedLightStatusBar() { + return useLightStatusBar; } public boolean isFocusable() { @@ -1358,7 +1412,11 @@ public class BottomSheet extends Dialog { @Override public void show() { if (!AndroidUtilities.isSafeToShow(getContext())) return; - super.show(); + if (attachedFragment != null) { + onCreateInternal(); + } else { + super.show(); + } setShowing(true); if (focusable) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); @@ -1738,6 +1796,16 @@ public class BottomSheet extends Dialog { forceKeyboardOnDismiss = true; } + @Override + public View getWindowView() { + return container; + } + + @Override + public boolean isShown() { + return !dismissed; + } + @Override public void dismiss() { if (delegate != null && !delegate.canDismiss()) { @@ -1836,16 +1904,77 @@ public class BottomSheet extends Dialog { setShowing(false); } + @Override + public void dismiss(boolean tabs) { + this.dismiss(); + } + + @Override + public void release() { + dismissInternal(); + } + + @Override + public boolean isFullyVisible() { + return false; + } + + @Override + public boolean attachedToParent() { + return container != null && container.isAttachedToWindow(); + } + + @Override + public boolean showDialog(Dialog dialog) { + return false; + } + + @Override + public void setKeyboardHeightFromParent(int keyboardHeight) { + + } + + @Override + public int getNavigationBarColor(int color) { + final float t; + if (!attachedToParent() || containerView == null) { + t = 0; + } else if (transitionFromRight) { + t = containerView.getAlpha(); + } else { + final float fullHeight = getContainerViewHeight() + keyboardHeight + AndroidUtilities.dp(10) + (scrollNavBar ? getBottomInset() : 0); + t = Utilities.clamp01(1f - containerView.getTranslationY() / fullHeight); + } + return ColorUtils.blendARGB(color, navBarColor, t); + } + + @Override + public void setOnDismissListener(Runnable onDismiss) { + if (onDismiss != null) { + setOnHideListener(d -> onDismiss.run()); + } + } + + @Override + public void setOnDismissListener(@Nullable OnDismissListener listener) { + super.setOnDismissListener(listener); + } + public int getSheetAnimationType() { return currentSheetAnimationType; } public void dismissInternal() { - try { - super.dismiss(); - } catch (Exception e) { - //ignore: not attached to window manager - FileLog.e(e, false); + if (attachedFragment != null) { + attachedFragment.removeSheet(this); + AndroidUtilities.removeFromParent(container); + } else { + try { + super.dismiss(); + } catch (Exception e) { + //ignore: not attached to window manager + FileLog.e(e, false); + } } } @@ -2061,6 +2190,12 @@ public class BottomSheet extends Dialog { container.invalidate(); } + if (attachedFragment != null) { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + AndroidUtilities.setLightNavigationBar(getWindowView(), AndroidUtilities.computePerceivedBrightness(getNavigationBarColor(getThemedColor(Theme.key_windowBackgroundGray))) >= .721f); +// AndroidUtilities.setLightStatusBar(dialog != null ? dialog.windowView : windowView, attachedToActionBar && AndroidUtilities.computePerceivedBrightness(actionBar.getBackgroundColor()) > .721f); + return; + } // if (Color.alpha(color) > 120) { // AndroidUtilities.setLightStatusBar(getWindow(), false); // AndroidUtilities.setLightNavigationBar(getWindow(), false); @@ -2124,4 +2259,28 @@ public class BottomSheet extends Dialog { protected void onSmoothContainerViewLayout(float ty) { } + + + public BaseFragment attachedFragment; + + public void makeAttached(BaseFragment fragment) { + if (AndroidUtilities.isTablet()) return; + this.attachedFragment = fragment; + } + + @Override + public boolean onAttachedBackPressed() { + onBackPressed(); + return true; + } + + @Override + public void onBackPressed() { + if (attachedFragment == null) { + super.onBackPressed(); + } else { + dismiss(); + } + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java new file mode 100644 index 000000000..03e169303 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java @@ -0,0 +1,157 @@ +package org.telegram.ui.ActionBar; + +import android.app.Dialog; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.RectF; +import android.os.Build; +import android.os.Bundle; +import android.view.Gravity; +import android.view.KeyboardShortcutGroup; +import android.view.Menu; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowInsets; +import android.view.WindowManager; +import android.widget.FrameLayout; + +import androidx.annotation.Nullable; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.R; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.LaunchActivity; + +import java.util.List; + +public class BottomSheetTabDialog extends Dialog { + + public static BottomSheetTabsOverlay.Sheet checkSheet(BottomSheetTabsOverlay.Sheet sheet) { + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment == null) return sheet; + if (AndroidUtilities.isTablet() || AndroidUtilities.hasDialogOnTop(fragment)) { + final BottomSheetTabDialog dialog = new BottomSheetTabDialog(sheet); + if (sheet.setDialog(dialog)) { + dialog.windowView.putView(); + return sheet; + } + } + return sheet; + } + + public final BottomSheetTabsOverlay.Sheet sheet; + public final BottomSheetTabsOverlay.SheetView sheetView; + + public final WindowView windowView; + + public BottomSheetTabDialog(BottomSheetTabsOverlay.Sheet sheet) { + super(sheet.getWindowView().getContext(), R.style.TransparentDialog); + + this.sheet = sheet; + this.sheetView = sheet.getWindowView(); + + setContentView(windowView = new WindowView(sheetView), new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Window window = getWindow(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + } + window.setWindowAnimations(R.style.DialogNoAnimation); + + WindowManager.LayoutParams params = window.getAttributes(); + params.width = ViewGroup.LayoutParams.MATCH_PARENT; + params.gravity = Gravity.TOP | Gravity.LEFT; + params.dimAmount = 0; + params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; + params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + params.height = ViewGroup.LayoutParams.MATCH_PARENT; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + } + window.setAttributes(params); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + window.setStatusBarColor(Color.TRANSPARENT); + } + + windowView.setFitsSystemWindows(true); + windowView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + windowView.setPadding(0, 0, 0, 0); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + windowView.setOnApplyWindowInsetsListener((v, insets) -> { + v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); + if (Build.VERSION.SDK_INT >= 30) { + return WindowInsets.CONSUMED; + } else { + return insets.consumeSystemWindowInsets(); + } + }); + } + } + + public void updateNavigationBarColor() { + final int color = sheet.getNavigationBarColor(0); + AndroidUtilities.setNavigationBarColor(getWindow(), color); + AndroidUtilities.setLightNavigationBar(getWindow(), AndroidUtilities.computePerceivedBrightness(color) >= .721f); + } + + public static class WindowView extends FrameLayout implements BottomSheetTabsOverlay.SheetView { + + public final BottomSheetTabsOverlay.SheetView sheetView; + + public WindowView(BottomSheetTabsOverlay.SheetView sheetView) { + super(sheetView.getContext()); + this.sheetView = sheetView; + } + + public void putView() { + View view = (View) sheetView; + AndroidUtilities.removeFromParent(view); + addView(view, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + } + + @Override + public void setDrawingFromOverlay(boolean value) { + sheetView.setDrawingFromOverlay(value); + } + + @Override + public RectF getRect() { + return sheetView.getRect(); + } + + @Override + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { + return sheetView.drawInto(canvas, finalRect, progress, clipRect, alpha, opening); + } + + } + + private boolean attached; + public void attach() { + if (attached) return; + attached = true; + super.show(); + } + + public void detach() { + sheet.setDialog(null); + if (!attached) return; + attached = false; + super.dismiss(); + } + + @Override + public void dismiss() { + sheet.dismiss(false); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java index cf6788616..c8d06bbfb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java @@ -2,15 +2,22 @@ package org.telegram.ui.ActionBar; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.getString; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.text.TextPaint; +import android.text.TextUtils; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; @@ -21,14 +28,17 @@ import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ContactsController; +import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ArticleViewer; import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.AnimatedColor; import org.telegram.ui.Components.AnimatedFloat; @@ -36,8 +46,9 @@ import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.Text; import org.telegram.ui.LaunchActivity; import org.telegram.ui.bots.BotWebViewAttachedSheet; -import org.telegram.ui.bots.BotWebViewContainer; +import org.telegram.ui.web.BotWebViewContainer; import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import java.util.ArrayList; import java.util.HashMap; @@ -61,7 +72,10 @@ public class BottomSheetTabs extends FrameLayout { final int count = tabs.size(); if (count == 0) return; WebTabData lastTab = tabs.get(tabs.size() - 1); - BottomSheetTabsOverlay overlay = LaunchActivity.instance.getBottomSheetTabsOverlay(); + BottomSheetTabsOverlay overlay = LaunchActivity.instance == null ? null : LaunchActivity.instance.getBottomSheetTabsOverlay(); + if (overlay != null) { + overlay.stopAnimations(); + } if (count == 1 || overlay == null) { openTab(lastTab); @@ -82,6 +96,18 @@ public class BottomSheetTabs extends FrameLayout { ((ChatActivity) lastFragment).getChatActivityEnterView().hidePopup(true, false); } } + if (tab.articleViewer != null) { + BaseFragment fragment = actionBarLayout.getSheetFragment(); + final ArticleViewer articleViewer = tab.articleViewer; + BottomSheetTabDialog.checkSheet(articleViewer.sheet); + fragment.addSheet(articleViewer.sheet); + articleViewer.sheet.reset(); + articleViewer.setParentActivity(fragment.getParentActivity(), fragment); + articleViewer.sheet.attachInternal(fragment); + articleViewer.sheet.animateOpen(true, true, null); + removeTab(tab, false); + return; + } boolean closed = closeAttachedSheets(); Utilities.Callback open = fragment -> { if (fragment == null) return; @@ -91,10 +117,10 @@ public class BottomSheetTabs extends FrameLayout { ((ChatActivity) fragment).getChatActivityEnterView().hidePopup(true, false); } } - if (fragment.getContext() == null) { + if (fragment.getContext() == null || fragment.getParentActivity() == null) { return; } - if (AndroidUtilities.isTablet()) { + if (AndroidUtilities.isTablet() && !tab.isWeb) { BotWebViewSheet sheet = new BotWebViewSheet(fragment.getContext(), fragment.getResourceProvider()); sheet.setParentActivity(fragment.getParentActivity()); if (sheet.restoreState(fragment, tab)) { @@ -102,30 +128,26 @@ public class BottomSheetTabs extends FrameLayout { sheet.show(); } } else { - BottomSheetTabsOverlay overlay = LaunchActivity.instance.getBottomSheetTabsOverlay(); - BotWebViewAttachedSheet webViewSheet = fragment.createBotViewer(); + BaseFragment sheetFragment = actionBarLayout.getSheetFragment(); + if (sheetFragment == null) return; + BotWebViewAttachedSheet webViewSheet = sheetFragment.createBotViewer(); webViewSheet.setParentActivity(fragment.getParentActivity()); if (webViewSheet.restoreState(fragment, tab)) { -// if (overlay != null && overlay.isOpened() && overlay.openSheet(webViewSheet, tab, null)) { -// removeTab(tab, false); -// webViewSheet.show(closed, true); -// } else { - removeTab(tab, false); - webViewSheet.show(closed); -// } + removeTab(tab, false); + webViewSheet.show(closed); } } }; + open.run(lastFragment); if (tab.needsContext && (!(lastFragment instanceof ChatActivity) || ((ChatActivity) lastFragment).getDialogId() != tab.props.botId)) { BaseFragment chatActivity = ChatActivity.of(tab.props.botId); - chatActivity.whenFullyVisible(() -> open.run(chatActivity)); - lastFragment.presentFragment(chatActivity); - } else { - open.run(lastFragment); + AndroidUtilities.runOnUIThread(() -> { + lastFragment.presentFragment(chatActivity); + }, 220); } } - public WebTabData tryReopenTab(BotWebViewAttachedSheet.WebViewRequestProps props) { + public WebTabData tryReopenTab(WebViewRequestProps props) { ArrayList tabs = this.tabs.get(currentAccount); if (tabs == null) this.tabs.put(currentAccount, tabs = new ArrayList<>()); @@ -140,6 +162,63 @@ public class BottomSheetTabs extends FrameLayout { return null; } + public static String urlWithoutFragment(String url) { + if (url == null) return null; + int index = url.indexOf('#'); + if (index >= 0) return url.substring(0, index + 1); + return url; + } + + public WebTabData tryReopenTab(String url) { + if (TextUtils.isEmpty(url)) return null; + final ArrayList tabs = getTabs(); + for (int i = 0; i < tabs.size(); ++i) { + WebTabData tab = tabs.get(i); + if (tab.articleViewer != null && !tab.articleViewer.pagesStack.isEmpty()) { + Object lastPage = tab.articleViewer.pagesStack.get(tab.articleViewer.pagesStack.size() - 1); + if (lastPage instanceof ArticleViewer.CachedWeb) { + ArticleViewer.CachedWeb web = (ArticleViewer.CachedWeb) lastPage; + BotWebViewContainer.MyWebView webView = web.webView; + if (webView == null && tab.articleViewer.pages != null && tab.articleViewer.pages[0] != null) { + webView = tab.articleViewer.pages[0].getWebView(); + } + if (webView != null && TextUtils.equals(urlWithoutFragment(webView.canGoBack() ? webView.getUrl() : webView.getOpenURL()), urlWithoutFragment(url))) { + openTab(tab); + return tab; + } + } + } + } + return null; + } + + public WebTabData tryReopenTab(TLRPC.WebPage webpage) { + if (webpage == null) return null; + final ArrayList tabs = getTabs(); + for (int i = 0; i < tabs.size(); ++i) { + WebTabData tab = tabs.get(i); + if (tab.articleViewer != null && !tab.articleViewer.pagesStack.isEmpty()) { + Object lastPage = tab.articleViewer.pagesStack.get(tab.articleViewer.pagesStack.size() - 1); + if (lastPage instanceof TLRPC.WebPage) { + TLRPC.WebPage pageWebPage = (TLRPC.WebPage) lastPage; + if (pageWebPage != null && pageWebPage.id == webpage.id) { + openTab(tab); + return tab; + } + } + } + } + return null; + } + + public WebTabData tryReopenTab(MessageObject messageObject) { + if (messageObject == null) return null; + if (messageObject.messageOwner == null) return null; + if (messageObject.messageOwner.media == null) return null; + if (messageObject.messageOwner.media.webpage == null) return null; + return tryReopenTab(messageObject.messageOwner.media.webpage); + } + public boolean closeAttachedSheets() { boolean had = false; BottomSheetTabsOverlay overlay = LaunchActivity.instance.getBottomSheetTabsOverlay(); @@ -221,12 +300,20 @@ public class BottomSheetTabs extends FrameLayout { } public ArrayList getTabs() { + return getTabs(this.currentAccount); + } + + public ArrayList getTabDrawables() { + return getTabDrawables(this.currentAccount); + } + + public ArrayList getTabs(int currentAccount) { ArrayList tabs = this.tabs.get(currentAccount); if (tabs == null) this.tabs.put(currentAccount, tabs = new ArrayList<>()); return tabs; } - public ArrayList getTabDrawables() { + public ArrayList getTabDrawables(int currentAccount) { ArrayList tabDrawables = this.tabDrawables.get(currentAccount); if (tabDrawables == null) this.tabDrawables.put(currentAccount, tabDrawables = new ArrayList<>()); return tabDrawables; @@ -274,21 +361,31 @@ public class BottomSheetTabs extends FrameLayout { return super.verifyDrawable(who) || true; } + private static TextPaint textPaint; + private static TextPaint getTextPaint() { + if (textPaint == null) { + textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + textPaint.setTypeface(AndroidUtilities.bold()); + textPaint.setTextSize(AndroidUtilities.dp(17)); + } + return textPaint; + } + private void updateMultipleTitle() { final ArrayList tabs = getTabs(); final ArrayList tabDrawables = getTabDrawables(); - String title = null; + CharSequence title = null; for (int i = 0; i < tabDrawables.size(); ++i) { TabDrawable drawable = tabDrawables.get(i); if (tabs.size() > 1 && drawable.position == 0) { - TLRPC.User user = MessagesController.getInstance(drawable.tab.props.currentAccount).getUser(drawable.tab.props.botId); - title = LocaleController.formatPluralString("BotMoreTabs", tabs.size() - 1, UserObject.getUserName(user)); + title = LocaleController.formatPluralString("BotMoreTabs", tabs.size() - 1, drawable.tab.getTitle()); + title = Emoji.replaceEmoji(title, getTextPaint().getFontMetricsInt(), false); drawable.setOverrideTitle(title); } else { - TLRPC.User user = MessagesController.getInstance(drawable.tab.props.currentAccount).getUser(drawable.tab.props.botId); - title = UserObject.getUserName(user); + title = drawable.tab.getTitle(); + title = Emoji.replaceEmoji(title, getTextPaint().getFontMetricsInt(), false); drawable.setOverrideTitle(null); } } @@ -320,6 +417,20 @@ public class BottomSheetTabs extends FrameLayout { return tabs.isEmpty(); } + public boolean tryRemoveTabWith(ArticleViewer articleViewer) { + for (int account = 0; account < this.tabs.size(); ++account) { + ArrayList tabs = this.tabs.get(account); + if (tabs != null) { + for (WebTabData tab : tabs) { + if (tab.articleViewer == articleViewer) { + return removeTab(account, tab, true); + } + } + } + } + return false; + } + public void removeTab(WebTabData tab, Utilities.Callback callback) { if (tab == null) { callback.run(true); @@ -341,14 +452,14 @@ public class BottomSheetTabs extends FrameLayout { final AlertDialog[] dialog = new AlertDialog[1]; dialog[0] = new AlertDialog.Builder(getContext()) .setTitle(botName) - .setMessage(LocaleController.getString(R.string.BotWebViewChangesMayNotBeSaved)) - .setPositiveButton(LocaleController.getString(R.string.BotWebViewCloseAnyway), (d, w) -> { + .setMessage(getString(R.string.BotWebViewChangesMayNotBeSaved)) + .setPositiveButton(getString(R.string.BotWebViewCloseAnyway), (d, w) -> { clicked[0] = true; removeTab(tab, true); callback.run(true); dialog[0].dismiss(); }) - .setNegativeButton(LocaleController.getString(R.string.Cancel), (d, w) -> { + .setNegativeButton(getString(R.string.Cancel), (d, w) -> { clicked[0] = true; callback.run(false); dialog[0].dismiss(); @@ -366,8 +477,12 @@ public class BottomSheetTabs extends FrameLayout { } public boolean removeTab(WebTabData tab, boolean destroy) { - final ArrayList tabs = getTabs(); - final ArrayList tabDrawables = getTabDrawables(); + return removeTab(currentAccount, tab, destroy); + } + + public boolean removeTab(int currentAccount, WebTabData tab, boolean destroy) { + final ArrayList tabs = getTabs(currentAccount); + final ArrayList tabDrawables = getTabDrawables(currentAccount); tabs.remove(tab); if (destroy) { @@ -495,7 +610,9 @@ public class BottomSheetTabs extends FrameLayout { public final AnimatedFloat animatedAlpha; private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint iconPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint faviconPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); public int closeRippleColor; public final Drawable closeRipple = Theme.createSelectorDrawable(0x30ffffff, Theme.RIPPLE_MASK_CIRCLE_20DP); @@ -504,7 +621,12 @@ public class BottomSheetTabs extends FrameLayout { private int backgroundColor, tabColor; private boolean backgroundIsDark, tabIsDark; - private Text title; + private float progress; + + private Bitmap favicon; + private Drawable iconDrawable; + private int iconDrawableColor = Color.WHITE; + private final Text title; private Text overrideTitle; public TabDrawable(View view, WebTabData tab) { @@ -519,10 +641,15 @@ public class BottomSheetTabs extends FrameLayout { animatedPosition = new AnimatedFloat(view, 320, CubicBezierInterpolator.EASE_OUT_QUINT); animatedAlpha = new AnimatedFloat(view, 320, CubicBezierInterpolator.EASE_OUT_QUINT); - TLRPC.User user = MessagesController.getInstance(tab.props.currentAccount).getUser(tab.getBotId()); - this.title = new Text(UserObject.getUserName(user), 17, AndroidUtilities.bold()); + this.favicon = tab.favicon; + CharSequence title = Emoji.replaceEmoji(tab.getTitle(), getTextPaint().getFontMetricsInt(), false); + this.title = new Text(title, 17, AndroidUtilities.bold()); this.tabColor = tab.actionBarColor; this.tabIsDark = AndroidUtilities.computePerceivedBrightness(tabColor) < .721f; + if (tab.isArticle()) { + iconDrawable = view.getContext().getResources().getDrawable(R.drawable.msg_instant).mutate(); + } + progress = tab.articleProgress; closePath.rewind(); closePath.moveTo(0, 0); @@ -536,7 +663,7 @@ public class BottomSheetTabs extends FrameLayout { expandPath.lineTo(dp(12.66f), dp(6.33f) / 2f); } - public void setOverrideTitle(String title) { + public void setOverrideTitle(CharSequence title) { if (title == null) { overrideTitle = null; } else { @@ -595,6 +722,14 @@ public class BottomSheetTabs extends FrameLayout { rectPath.addRoundRect(bounds, radii, Path.Direction.CW); canvas.drawPath(rectPath, backgroundPaint); + if (progress > 0 && expandProgress > 0 && alpha > 0) { + canvas.save(); + canvas.clipPath(rectPath); + progressPaint.setColor(Theme.multAlpha(AndroidUtilities.computePerceivedBrightness(backgroundColor) > .721f ? Color.BLACK : Color.WHITE, .07f * alpha * expandProgress)); + canvas.drawRect(bounds.left, bounds.top, bounds.left + bounds.width() * progress, bounds.bottom, progressPaint); + canvas.restore(); + } + final float isDark = lerp(backgroundIsDark ? 1f : 0f, tabIsDark ? 1f : 0f, expandProgress); final int iconColor = ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, isDark); @@ -628,28 +763,69 @@ public class BottomSheetTabs extends FrameLayout { canvas.drawPath(expandPath, iconPaint); canvas.restore(); + int leftPadding = 0; + if (favicon != null) { + final int sz = dp(24); + + canvas.save(); + AndroidUtilities.rectTmp2.set( + (int) (bounds.left + dp(56)), + (int) (bounds.centerY() - sz / 2f), + (int) (bounds.left + dp(56) + sz), + (int) (bounds.centerY() + sz / 2f) + ); + faviconPaint.setAlpha((int) (0xFF * alpha * contentAlpha)); + canvas.drawBitmap(favicon, null, AndroidUtilities.rectTmp2, faviconPaint); + canvas.restore(); + + leftPadding = sz + dp(4); + } else if (iconDrawable != null) { + final int sz = dp(24); + + final int h = sz; + final int w = (int) (sz / (float) iconDrawable.getIntrinsicHeight() * iconDrawable.getIntrinsicWidth()); + final float s = .7f; + + AndroidUtilities.rectTmp2.set( + (int) (bounds.left + dp(56)), + (int) (bounds.centerY() - h / 2f * s), + (int) (bounds.left + dp(56) + w * s), + (int) (bounds.centerY() + h / 2f * s) + ); + if (iconColor != iconDrawableColor) { + iconDrawable.setColorFilter(new PorterDuffColorFilter(iconDrawableColor = iconColor, PorterDuff.Mode.SRC_IN)); + } + iconDrawable.setAlpha((int) (0xFF * alpha * contentAlpha)); + iconDrawable.setBounds(AndroidUtilities.rectTmp2); + iconDrawable.draw(canvas); + + leftPadding = w - dp(2); + } + if (overrideTitle != null) { overrideTitle - .ellipsize((int) (bounds.width() - dp(100))) - .draw(canvas, bounds.left + dp(60), bounds.centerY(), iconColor, (1f - expandProgress) * alpha * contentAlpha); + .ellipsize((int) (bounds.width() - dp(100) - leftPadding)) + .draw(canvas, bounds.left + dp(60) + leftPadding, bounds.centerY(), iconColor, (1f - expandProgress) * alpha * contentAlpha); } title - .ellipsize((int) (bounds.width() - dp(100))) - .draw(canvas, bounds.left + dp(60), bounds.centerY(), iconColor, (overrideTitle == null ? 1f : expandProgress) * alpha * contentAlpha); + .ellipsize((int) (bounds.width() - dp(100) - leftPadding)) + .draw(canvas, bounds.left + dp(60) + leftPadding, bounds.centerY(), iconColor, (overrideTitle == null ? 1f : expandProgress) * alpha * contentAlpha); } } public static class WebTabData { - public BotWebViewAttachedSheet.WebViewRequestProps props; + public WebViewRequestProps props; public Bundle webViewState; public BotWebViewContainer.MyWebView webView; - public BotWebViewContainer.WebViewProxy webViewProxy; - public int webViewWidth, webViewHeight; - public int webViewScroll; + public View view2; + public Object proxy; + public int viewWidth, viewHeight; + public int viewScroll; public boolean expanded; public float expandedOffset = Float.MAX_VALUE; + public boolean allowSwipes = true; public Bitmap previewBitmap; public Object previewNode; @@ -671,6 +847,19 @@ public class BottomSheetTabs extends FrameLayout { public boolean themeIsDark; + public boolean isWeb; + public String title; + public Bitmap favicon; + public String startUrl; + public String currentUrl; + + public boolean error; + public int errorCode; + public String errorDescription; + + public float articleProgress; + public ArticleViewer articleViewer; + public long getBotId() { if (props == null) return 0; return props.botId; @@ -682,11 +871,29 @@ public class BottomSheetTabs extends FrameLayout { webView.destroy(); webView = null; } + if (articleViewer != null) { + articleViewer.destroy(); + } } catch (Exception e) { FileLog.e(e); } } + public boolean isArticle() { + return articleViewer != null && articleViewer.isLastArticle(); + } + + public String getTitle() { + if (isWeb || articleViewer != null) { + if (TextUtils.isEmpty(title)) + return getString(R.string.WebEmpty); + return title; + } + if (props == null) return ""; + TLRPC.User user = MessagesController.getInstance(props.currentAccount).getUser(props.botId); + return UserObject.getUserName(user); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java index 88ee535fa..e42571ee1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java @@ -2,6 +2,7 @@ package org.telegram.ui.ActionBar; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.AndroidUtilities.scaleRect; import static org.telegram.messenger.LocaleController.getString; import static org.telegram.messenger.Utilities.clamp01; @@ -50,20 +51,43 @@ import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.Text; import org.telegram.ui.GradientClip; -import org.telegram.ui.bots.BotWebViewAttachedSheet; -import org.telegram.ui.bots.BotWebViewMenuContainer; -import org.telegram.ui.bots.BotWebViewSheet; import java.util.ArrayList; public class BottomSheetTabsOverlay extends FrameLayout { - private BottomSheetTabs tabsView; + public interface Sheet { + public SheetView getWindowView(); - private BotWebViewAttachedSheet dismissingSheet; - private BotWebViewSheet dismissingSheet2; - private BotWebViewAttachedSheet openingSheet; - private BotWebViewMenuContainer dismissingMenuContainer; + public void show(); + public void dismiss(boolean tabs); + + public BottomSheetTabs.WebTabData saveState(); + public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData tab); + + public void release(); + public boolean isFullSize(); + + public boolean setDialog(BottomSheetTabDialog dialog); + + default void setLastVisible(boolean lastVisible) {}; + + public int getNavigationBarColor(int color); + } + + public interface SheetView { + public Context getContext(); + + public void setDrawingFromOverlay(boolean value); + public RectF getRect(); + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening); + + public boolean post(Runnable r); + } + + private BottomSheetTabs tabsView; + private Sheet dismissingSheet; + private Sheet openingSheet; private BottomSheetTabs.TabDrawable dismissingTab; private BottomSheetTabs.TabDrawable openingTab; private float openingTabScroll; @@ -361,6 +385,10 @@ public class BottomSheetTabsOverlay extends FrameLayout { return Math.min(SharedConfig.botTabs3DEffect ? 3 : 6, getScrollRange()); } + public float getScrollWindow(boolean animated) { + return Math.min(SharedConfig.botTabs3DEffect ? 3 : 6, getScrollRange(animated)); + } + public float getScrollMin() { return getScrollMin(true); } @@ -374,7 +402,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { } public float getScrollMax(boolean animated) { - return getScrollRange(animated) - getScrollWindow() - getScrollWindow() / 3f * Utilities.clamp(4f - getScrollRange(animated), .5f, 0); + return getScrollRange(animated) - getScrollWindow(animated) - getScrollWindow(animated) / 3f * Utilities.clamp(4f - getScrollRange(animated), .5f, 0); } public boolean canScroll() { @@ -401,7 +429,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { this.slowerDismiss = slowerDismiss; } - public boolean openSheet(BotWebViewAttachedSheet sheet, BottomSheetTabs.WebTabData tab, Runnable whenOpened) { + public boolean openSheet(Sheet sheet, BottomSheetTabs.WebTabData tab, Runnable whenOpened) { if (sheet == null) return false; if (tabsView == null) return false; @@ -455,7 +483,14 @@ public class BottomSheetTabsOverlay extends FrameLayout { return true; } - public boolean dismissSheet(BotWebViewAttachedSheet sheet) { + public void stopAnimations() { + if (animator != null) { + animator.cancel(); + animator = null; + } + } + + public boolean dismissSheet(Sheet sheet) { if (sheet == null) return false; if (tabsView == null) return false; @@ -467,6 +502,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { } dismissingSheet = sheet; + sheet.setLastVisible(false); sheet.getWindowView().setDrawingFromOverlay(true); invalidate(); @@ -477,10 +513,6 @@ public class BottomSheetTabsOverlay extends FrameLayout { BottomSheetTabs.WebTabData tab = sheet.saveState(); dismissingTab = tabsView.pushTab(tab); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - renderHardwareViewToBitmap(tab.webView, -tab.webViewScroll, b -> tab.previewBitmap = b); - } - dismissProgress = 0; animator = ValueAnimator.ofFloat(0, 1); animator.addUpdateListener(anm -> { @@ -490,12 +522,16 @@ public class BottomSheetTabsOverlay extends FrameLayout { animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - if (tab.webView != null && tab.previewBitmap == null && tab.webViewWidth > 0 && tab.webViewHeight > 0) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - tab.previewBitmap = Bitmap.createBitmap(tab.webViewWidth, tab.webViewHeight, Bitmap.Config.RGB_565); + sheet.getWindowView().setDrawingFromOverlay(false); + View view = tab.webView != null ? tab.webView : tab.view2; + if (view != null && tab.previewBitmap == null && tab.viewWidth > 0 && tab.viewHeight > 0) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + renderHardwareViewToBitmap(view, -tab.viewScroll, b -> tab.previewBitmap = b); + } else { + tab.previewBitmap = Bitmap.createBitmap(tab.viewWidth, tab.viewHeight, Bitmap.Config.RGB_565); Canvas canvas = new Canvas(tab.previewBitmap); - canvas.translate(0, -tab.webViewScroll); - tab.webView.draw(canvas); + canvas.translate(0, -tab.viewScroll); + view.draw(canvas); } } sheet.release(); @@ -503,8 +539,8 @@ public class BottomSheetTabsOverlay extends FrameLayout { invalidate(); } }); - if (slowerDismiss || sheet.getFullSize()) { - AndroidUtilities.applySpring(animator, 260, 30, 1); + if (slowerDismiss || sheet.isFullSize()) { + AndroidUtilities.applySpring(animator, 220, 30, 1); } else { AndroidUtilities.applySpring(animator, 350, 30, 1); } @@ -515,112 +551,6 @@ public class BottomSheetTabsOverlay extends FrameLayout { return true; } - public boolean dismissSheet(BotWebViewSheet sheet) { - if (sheet == null) return false; - if (tabsView == null) return false; - - if (dismissingSheet != null || openingSheet != null) { - if (animator != null) { - animator.end(); - animator = null; - } - } - - dismissingSheet2 = sheet; - sheet.getWindowView().setDrawingFromOverlay(true); - invalidate(); - - if (animator != null) { - animator.cancel(); - } - - BottomSheetTabs.WebTabData tab = sheet.saveState(); - dismissingTab = tabsView.pushTab(tab); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - renderHardwareViewToBitmap(tab.webView, -tab.webViewScroll, b -> tab.previewBitmap = b); - } - - dismissProgress = 0; - animator = ValueAnimator.ofFloat(0, 1); - animator.addUpdateListener(anm -> { - dismissProgress = (float) anm.getAnimatedValue(); - invalidate(); - }); - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (tab.webView != null && tab.previewBitmap == null && tab.webViewWidth > 0 && tab.webViewHeight > 0) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - tab.previewBitmap = Bitmap.createBitmap(tab.webViewWidth, tab.webViewHeight, Bitmap.Config.RGB_565); - Canvas canvas = new Canvas(tab.previewBitmap); - canvas.translate(0, -tab.webViewScroll); - tab.webView.draw(canvas); - } - } - sheet.release(); - dismissingSheet2 = null; - invalidate(); - } - }); - AndroidUtilities.applySpring(animator, 350, 30, 1); - animator.setDuration(animator.getDuration() * 2); - animator.start(); - - slowerDismiss = false; - - return true; - } - - public boolean dismissSheet(BotWebViewMenuContainer menuContainer) { - if (menuContainer == null) return false; - if (tabsView == null) return false; - - dismissingMenuContainer = menuContainer; - menuContainer.setDrawingFromOverlay(true); - invalidate(); - - if (animator != null) { - animator.cancel(); - } - - BottomSheetTabs.WebTabData tab = menuContainer.saveState(); - dismissingTab = tabsView.pushTab(tab); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - renderHardwareViewToBitmap(tab.webView, -tab.webViewScroll, b -> tab.previewBitmap = b); - } - - dismissProgress = 0; - animator = ValueAnimator.ofFloat(0, 1); - animator.addUpdateListener(anm -> { - dismissProgress = (float) anm.getAnimatedValue(); - invalidate(); - }); - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (tab.webView != null && tab.previewBitmap == null && tab.webViewWidth > 0 && tab.webViewHeight > 0) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - tab.previewBitmap = Bitmap.createBitmap(tab.webViewWidth, tab.webViewHeight, Bitmap.Config.RGB_565); - Canvas canvas = new Canvas(tab.previewBitmap); - canvas.translate(0, -tab.webViewScroll); - tab.webView.draw(canvas); - } - } - menuContainer.onDismiss(); - menuContainer.setDrawingFromOverlay(false); - dismissingMenuContainer = null; - invalidate(); - } - }); - AndroidUtilities.applySpring(animator, 350, 30, 1); - animator.setDuration(animator.getDuration()); - animator.start(); - - return true; - } - public boolean onBackPressed() { if (isOpen) { closeTabsView(); @@ -634,7 +564,9 @@ public class BottomSheetTabsOverlay extends FrameLayout { private Paint blurBitmapPaint; private Matrix blurMatrix; private void prepareBlur(View view) { + AndroidUtilities.makingGlobalBlurBitmap = true; blurBitmap = AndroidUtilities.makeBlurBitmap(view, 14, 14); + AndroidUtilities.makingGlobalBlurBitmap = false; blurBitmapPaint = new Paint(Paint.ANTI_ALIAS_FLAG); blurBitmapPaint.setShader(blurBitmapShader = new BitmapShader(blurBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); @@ -651,6 +583,8 @@ public class BottomSheetTabsOverlay extends FrameLayout { public void openTabsView() { if (tabsView == null || !(tabsView.getParent() instanceof View)) return; + stopAnimations(); + actionBarLayout = (View) tabsView.getParent(); if (actionBarLayout != null) { actionBarLayout.getLocationOnScreen(pos); @@ -777,48 +711,6 @@ public class BottomSheetTabsOverlay extends FrameLayout { canvas.restore(); } } - - if (dismissingSheet2 != null) { - BotWebViewSheet.WindowView windowView = dismissingSheet2.getWindowView(); - getLocationOnScreen(pos2); - tabsView.getLocationOnScreen(pos); - tabsView.getTabBounds(rect, 0); - rect.offset(pos[0] - pos2[0], pos[1] - pos2[1]); - float radius = windowView.drawInto(canvas, rect, dismissProgress, clipRect); - - if (dismissingTab != null) { - clipPath.rewind(); - clipPath.addRoundRect(clipRect, radius, radius, Path.Direction.CW); - canvas.save(); - canvas.clipPath(clipPath); - final float y = clipRect.top - dp(50) * (1f - dismissProgress); - rect.set(clipRect.left, y, clipRect.right, y + dp(50)); - tabsView.setupTab(dismissingTab); - dismissingTab.draw(canvas, rect, radius, dismissProgress, 1f); - canvas.restore(); - } - } - - if (dismissingMenuContainer != null) { - getLocationOnScreen(pos2); - dismissingMenuContainer.getLocationOnScreen(pos3); - tabsView.getLocationOnScreen(pos); - tabsView.getTabBounds(rect, 0); - rect.offset(pos[0] - pos2[0], pos[1] - pos2[1]); - float radius = dismissingMenuContainer.drawInto(canvas, rect, dismissProgress, clipRect); - - if (dismissingTab != null) { - clipPath.rewind(); - clipPath.addRoundRect(clipRect, radius, radius, Path.Direction.CW); - canvas.save(); - canvas.clipPath(clipPath); - final float y = clipRect.top - dp(50) * (1f - dismissProgress); - rect.set(clipRect.left, y, clipRect.right, y + dp(50)); - tabsView.setupTab(dismissingTab); - dismissingTab.draw(canvas, rect, radius, dismissProgress, 1f); - canvas.restore(); - } - } } @Override @@ -867,7 +759,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { final float paddingBottom = dp(68); final int width = (int) Math.min(dp(340), thisWidth * .95f); - final int height = (int) (AndroidUtilities.isTablet() ? Math.min(thisWidth, thisHeight) * .75f : thisHeight * .75f); + final int height = (int) (AndroidUtilities.isTablet() ? tabsViewBounds.height() * .5f : thisHeight * .75f); final float cx = thisWidth / 2f; float tabCount = 0; for (int i = 0; i < tabs.size(); ++i) { @@ -922,8 +814,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { boolean drawSimple = tab.tabDrawable != openingTab && (rect2.top > thisHeight || rect2.bottom < 0 || open < .1f) && position < count - 3; if (openingSheet != null && tab.tabDrawable == openingTab) { - BotWebViewAttachedSheet.WindowView windowView = openingSheet.getWindowView(); - rect.set(windowView.getRect()); + rect.set(openingSheet.getWindowView().getRect()); AndroidUtilities.lerpCentered(rect2, rect, opening, rect2); } else { tabsView.getTabBounds(rect, Utilities.clamp(tab.tabDrawable.getPosition(), 1, 0)); @@ -979,8 +870,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { ); if (openingSheet != null && tab.tabDrawable == openingTab) { - BotWebViewAttachedSheet.WindowView windowView = openingSheet.getWindowView(); - windowView.drawInto(canvas, rect2, 1f, rect2, opening, true); + openingSheet.getWindowView().drawInto(canvas, rect2, 1f, rect2, opening, true); } canvas.restore(); @@ -995,7 +885,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { openProgress ); canvas.scale(s, s, rect2.centerX(), rect2.top); - scale(tab.clickBounds, s, rect.centerX(), rect2.top); + scaleRect(tab.clickBounds, s, rect.centerX(), rect2.top); tab.draw(canvas, rect2, drawSimple, lerp(tab.tabDrawable.getAlpha(), 1f, openProgress), open, 0f, lerp(clamp01(position - count + 2), 1f, clamp01((open - .1f) / .8f))); canvas.restore(); @@ -1036,17 +926,6 @@ public class BottomSheetTabsOverlay extends FrameLayout { canvas.restore(); } - private void scale(RectF rect, float s, float px, float py) { - final float wl = px - rect.left, wr = rect.right - px; - final float ht = py - rect.top, hb = rect.bottom - py; - rect.set( - px - wl * s, - py - ht * s, - px + wr * s, - py + hb * s - ); - } - @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); @@ -1062,9 +941,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { public final View parentView; public final BottomSheetTabs.WebTabData tabData; public final BottomSheetTabs.TabDrawable tabDrawable; - public final Bitmap previewBitmap; public WebView webView; - public final Object previewNode; private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -1122,9 +999,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { this.parentView = parentView; this.tabData = tabData; this.tabDrawable = tabDrawable; - this.previewBitmap = tabData.previewBitmap; this.webView = null;// tabData.webView; - this.previewNode = tabData.previewNode; this.bounce = new ButtonBounce(parentView); backgroundPaint.setColor(tabData.backgroundColor); @@ -1155,7 +1030,7 @@ public class BottomSheetTabsOverlay extends FrameLayout { final float s = bounce.getScale(.01f); canvas.scale(s, s, bounds.centerX(), bounds.centerY()); - final float r = lerp(dp(10), dp(8), expandProgress); + final float r = lerp(dp(10), dp(6), expandProgress); if (simple) { shadowPaint.setColor(0); shadowPaint.setShadowLayer(dp(30), 0, dp(10), Theme.multAlpha(0x20000000, alpha * expandProgress * (1f - openingProgress))); @@ -1174,23 +1049,23 @@ public class BottomSheetTabsOverlay extends FrameLayout { canvas.drawPath(clipPath, shadowPaint); canvas.clipPath(clipPath); - backgroundPaint.setAlpha((int) (0xFF * alpha)); + backgroundPaint.setAlpha((int) (0xFF * alpha * expandProgress)); canvas.drawRoundRect(bounds, r, r, backgroundPaint); canvas.save(); canvas.translate(bounds.left, bounds.top + dp(50) * tabScaleY + tabTranslateY); canvas.scale(1f, lerp(1f, 1.25f, expandProgress * (1f - openingProgress))); - if (previewNode != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && ((RenderNode) previewNode).hasDisplayList()) { - RenderNode node = (RenderNode) previewNode; + if (tabData != null && tabData.previewNode != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && ((RenderNode) tabData.previewNode).hasDisplayList()) { + RenderNode node = (RenderNode) tabData.previewNode; final float s2 = bounds.width() / node.getWidth(); canvas.scale(s2, s2); node.setAlpha(alpha * expandProgress); canvas.drawRenderNode(node); - } else if (previewBitmap != null) { - final float s2 = bounds.width() / previewBitmap.getWidth(); + } else if (tabData != null && tabData.previewBitmap != null) { + final float s2 = bounds.width() / tabData.previewBitmap.getWidth(); canvas.scale(s2, s2); bitmapPaint.setAlpha((int) (0xFF * alpha * expandProgress)); - canvas.drawBitmap(previewBitmap, 0, 0, bitmapPaint); + canvas.drawBitmap(tabData.previewBitmap, 0, 0, bitmapPaint); } else if (webView != null) { final float s2 = bounds.width() / webView.getWidth(); canvas.scale(s2, s2); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java index bf797933c..ea367c6be 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java @@ -47,6 +47,7 @@ import org.telegram.messenger.FileLog; import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.ui.Components.PasscodeView; +import org.telegram.ui.Stars.SuperRipple; public class DrawerLayoutContainer extends FrameLayout { @@ -449,7 +450,7 @@ public class DrawerLayoutContainer extends FrameLayout { return true; } - if ((allowOpenDrawerBySwipe || drawerOpened) && allowOpenDrawer && parentActionBarLayout.getFragmentStack().size() == 1 && (parentActionBarLayout.getLastFragment().getLastSheet() == null || !parentActionBarLayout.getLastFragment().getLastSheet().attachedToParent())) { + if ((allowOpenDrawerBySwipe || drawerOpened) && allowOpenDrawer && parentActionBarLayout.getFragmentStack().size() == 1 && parentActionBarLayout.allowSwipe() && (parentActionBarLayout.getLastFragment().getLastSheet() == null || !parentActionBarLayout.getLastFragment().getLastSheet().attachedToParent())) { if (ev != null && (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE) && !startedTracking && !maybeStartTracking) { View scrollingChild = findScrollingChild(this, ev.getX(),ev.getY()); if (scrollingChild != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java index 234622a67..1c489e500 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java @@ -41,6 +41,7 @@ public interface INavigationLayout { void setFragmentStackChangedListener(Runnable onFragmentStackChanged); boolean isTransitionAnimationInProgress(); void resumeDelayedFragmentAnimation(); + boolean allowSwipe(); boolean isInPassivePreviewMode(); void setInBubbleMode(boolean bubbleMode); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java index 8f64af7e8..902bff228 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java @@ -282,7 +282,7 @@ public class SimpleTextView extends View implements Drawable.Callback { return size; } - public Paint getPaint() { + public TextPaint getPaint() { return textPaint; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java index 4fa4bb5d9..3ae0f49af 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java @@ -4160,6 +4160,11 @@ public class Theme { public static final int key_code_comment = colorsCount++; public static final int key_code_function = colorsCount++; + public static final int key_iv_background = colorsCount++; + public static final int key_iv_backgroundGray = colorsCount++; + public static final int key_iv_ab_progress = colorsCount++; + public static final int key_iv_navigationBackground = colorsCount++; + public static final String key_drawable_botInline = "drawableBotInline"; public static final String key_drawable_botLink = "drawableBotLink"; public static final String key_drawable_botWebView = "drawableBotWebView"; @@ -4248,6 +4253,10 @@ public class Theme { static { defaultColors = ThemeColors.createDefaultColors(); + fallbackKeys.put(key_iv_background, key_windowBackgroundWhite); + fallbackKeys.put(key_iv_backgroundGray, key_windowBackgroundGray); + fallbackKeys.put(key_iv_navigationBackground, key_windowBackgroundGray); + fallbackKeys.put(key_iv_ab_progress, key_featuredStickers_addButton); fallbackKeys.put(key_chat_inQuote, key_featuredStickers_addButtonPressed); fallbackKeys.put(key_chat_outQuote, key_chat_outReplyLine); fallbackKeys.put(key_chat_outReplyLine2, key_chat_outReplyLine); @@ -5222,6 +5231,21 @@ public class Theme { return defaultDrawable; } + public static ShapeDrawable createCircleDrawable(int size, int colorTop, int colorBottom) { + OvalShape ovalShape = new OvalShape(); + ovalShape.resize(size, size); + ShapeDrawable defaultDrawable = new ShapeDrawable(ovalShape); + defaultDrawable.setIntrinsicWidth(size); + defaultDrawable.setIntrinsicHeight(size); + LinearGradient gradient = new LinearGradient( + 0, 0, 0, size, + colorTop, colorBottom, + Shader.TileMode.CLAMP + ); + defaultDrawable.getPaint().setShader(gradient); + return defaultDrawable; + } + public static CombinedDrawable createCircleDrawableWithIcon(int size, int iconRes) { return createCircleDrawableWithIcon(size, iconRes, 0); } @@ -5314,13 +5338,13 @@ public class Theme { } } - public static Drawable createRoundRectDrawable(int rad, int defaultColor) { + public static ShapeDrawable createRoundRectDrawable(int rad, int defaultColor) { ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(new float[]{rad, rad, rad, rad, rad, rad, rad, rad}, null, null)); defaultDrawable.getPaint().setColor(defaultColor); return defaultDrawable; } - public static Drawable createRoundRectDrawable(int topRad, int bottomRad, int defaultColor) { + public static ShapeDrawable createRoundRectDrawable(int topRad, int bottomRad, int defaultColor) { ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(new float[]{topRad, topRad, topRad, topRad, bottomRad, bottomRad, bottomRad, bottomRad}, null, null)); defaultDrawable.getPaint().setColor(defaultColor); return defaultDrawable; @@ -10543,6 +10567,10 @@ public class Theme { } } + public interface Colorable { + public void updateColors(); + } + public static Paint DEBUG_RED = new Paint(); static { DEBUG_RED.setColor(0xffff0000); } public static Paint DEBUG_BLUE = new Paint(); static { DEBUG_BLUE.setColor(0xff0000ff); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java index 28822f696..2f15e9042 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java @@ -790,6 +790,11 @@ public class ThemeColors { defaultColors[key_code_comment] = 0x80000000; defaultColors[key_code_function] = 0xFFF28C39; + defaultColors[key_iv_background] = 0xFFFFFFFF; + defaultColors[key_iv_backgroundGray] = 0xfff0f0f0; + defaultColors[key_iv_ab_progress] = 0xff50a8eb; + defaultColors[key_iv_navigationBackground] = 0xfff0f0f0; + return defaultColors; } @@ -1538,6 +1543,10 @@ public class ThemeColors { colorKeysMap.put(key_code_number, "code_number"); colorKeysMap.put(key_code_comment, "code_comment"); colorKeysMap.put(key_code_function, "code_function"); + colorKeysMap.put(key_iv_background, "iv_background"); + colorKeysMap.put(key_iv_backgroundGray, "iv_backgroundGray"); + colorKeysMap.put(key_iv_navigationBackground, "iv_navigationBackground"); + colorKeysMap.put(key_iv_ab_progress, "iv_ab_progress"); return colorKeysMap; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java index 5a6909ce5..3592a51c0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java @@ -46,6 +46,7 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.QuickRepliesActivity; @@ -103,7 +104,7 @@ public class MentionsAdapter extends RecyclerListView.SelectionAdapter implement private TLRPC.TL_inlineBotSwitchPM searchResultBotContextSwitch; private TLRPC.TL_inlineBotWebView searchResultBotWebViewSwitch; private MentionsAdapterDelegate delegate; - private LongSparseArray botInfo; + private LongSparseArray botInfo; private int resultStartPosition; private int resultLength; private String lastText; @@ -494,7 +495,7 @@ public class MentionsAdapter extends RecyclerListView.SelectionAdapter implement needBotContext = value; } - public void setBotInfo(LongSparseArray info) { + public void setBotInfo(LongSparseArray info) { botInfo = info; } @@ -1417,7 +1418,7 @@ public class MentionsAdapter extends RecyclerListView.SelectionAdapter implement ArrayList newResultUsers = new ArrayList<>(); String command = result.toString().toLowerCase(); for (int b = 0; b < botInfo.size(); b++) { - TLRPC.BotInfo info = botInfo.valueAt(b); + TL_bots.BotInfo info = botInfo.valueAt(b); for (int a = 0; a < info.commands.size(); a++) { TLRPC.TL_botCommand botCommand = info.commands.get(a); if (botCommand != null && botCommand.command != null && botCommand.command.startsWith(command)) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java index 1665b5c8a..f6411fd61 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java @@ -86,8 +86,8 @@ public class MessagesSearchAdapter extends RecyclerListView.SelectionAdapter imp }; public void searchStories(String hashtag, boolean instant) { - if (hashtag.startsWith("$")) hashtag = ""; - if (hashtag.startsWith("#")) hashtag = hashtag.substring(1); +// if (hashtag.startsWith("$")) hashtag = hashtag.substring(1); +// if (hashtag.startsWith("#")) hashtag = hashtag.substring(1); final String currentHashtag = storiesList == null ? "" : storiesList.query; if (TextUtils.equals(currentHashtag, hashtag)) return; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java index 723e9de94..14e4c119e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java @@ -8,6 +8,9 @@ package org.telegram.ui; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import static org.telegram.messenger.MessageObject.POSITION_FLAG_BOTTOM; import static org.telegram.messenger.MessageObject.POSITION_FLAG_LEFT; @@ -31,7 +34,9 @@ import android.database.DataSetObserver; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; @@ -40,9 +45,11 @@ import android.graphics.RectF; import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.location.LocationListener; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Looper; import android.text.Editable; import android.text.Layout; import android.text.Spannable; @@ -55,16 +62,14 @@ import android.text.TextWatcher; import android.text.style.DynamicDrawableSpan; import android.text.style.MetricAffectingSpan; import android.text.style.URLSpan; +import android.text.util.Linkify; import android.util.Property; import android.util.SparseArray; import android.util.TypedValue; -import android.view.ActionMode; import android.view.DisplayCutout; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuItem; import android.view.MotionEvent; import android.view.SoundEffectConstants; import android.view.Surface; @@ -72,18 +77,18 @@ import android.view.SurfaceView; import android.view.TextureView; import android.view.VelocityTracker; import android.view.View; -import android.view.ViewAnimationUtils; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.DecelerateInterpolator; -import android.view.inputmethod.EditorInfo; import android.webkit.CookieManager; import android.webkit.JavascriptInterface; import android.webkit.RenderProcessGoneDetail; +import android.webkit.WebBackForwardList; import android.webkit.WebChromeClient; +import android.webkit.WebHistoryItem; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -96,8 +101,11 @@ import android.widget.Toast; import androidx.annotation.Keep; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.collection.LongSparseArray; import androidx.core.content.ContextCompat; +import androidx.core.graphics.ColorUtils; +import androidx.core.view.ViewCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManagerFixed; @@ -123,11 +131,13 @@ import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MediaController; +import org.telegram.messenger.MediaDataController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesStorage; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; +import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.UserConfig; import org.telegram.messenger.Utilities; @@ -138,31 +148,37 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; -import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarLayout; +import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.ActionBarPopupWindow; import org.telegram.ui.ActionBar.AlertDialog; -import org.telegram.ui.ActionBar.BackDrawable; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; -import org.telegram.ui.ActionBar.SimpleTextView; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; +import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.TextSelectionHelper; import org.telegram.ui.Components.AlertsCreator; import org.telegram.ui.Components.AnchorSpan; import org.telegram.ui.Components.AnimatedArrowDrawable; +import org.telegram.ui.Components.AnimatedColor; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.AnimationProperties; import org.telegram.ui.Components.AvatarDrawable; +import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.BulletinFactory; -import org.telegram.ui.Components.CloseProgressDrawable2; import org.telegram.ui.Components.CombinedDrawable; import org.telegram.ui.Components.ContextProgressView; import org.telegram.ui.Components.CubicBezierInterpolator; -import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; -import org.telegram.ui.Components.LineProgressView; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; +import org.telegram.ui.Components.LoadingDrawable; import org.telegram.ui.Components.MediaActionDrawable; import org.telegram.ui.Components.RadialProgress2; import org.telegram.ui.Components.RadioButton; @@ -171,6 +187,7 @@ import org.telegram.ui.Components.SeekBar; import org.telegram.ui.Components.SeekBarView; import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.SizeNotifierFrameLayout; +import org.telegram.ui.Components.SmoothScroller; import org.telegram.ui.Components.StaticLayoutEx; import org.telegram.ui.Components.TableLayout; import org.telegram.ui.Components.TextPaintImageReceiverSpan; @@ -182,8 +199,22 @@ import org.telegram.ui.Components.TranslateAlert2; import org.telegram.ui.Components.TypefaceSpan; import org.telegram.ui.Components.VideoPlayer; import org.telegram.ui.Components.WebPlayerView; +import org.telegram.ui.Stories.DarkThemeResourceProvider; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; +import org.telegram.ui.Stories.recorder.KeyboardNotifier; +import org.telegram.ui.web.AddressBarList; +import org.telegram.ui.web.BookmarksFragment; +import org.telegram.ui.web.BotWebViewContainer; +import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout; +import org.telegram.ui.web.BrowserHistory; +import org.telegram.ui.web.HistoryFragment; +import org.telegram.ui.web.RestrictedDomainsList; +import org.telegram.ui.web.SearchEngine; +import org.telegram.ui.web.WebActionBar; +import org.telegram.ui.web.WebBrowserSettings; import java.io.File; +import java.net.IDN; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Collections; @@ -193,12 +224,20 @@ import java.util.Locale; public class ArticleViewer implements NotificationCenter.NotificationCenterDelegate { + public static final boolean BOTTOM_ACTION_BAR = false; + public final boolean isSheet; public final ArticleViewer.Sheet sheet; - public ArticleViewer(boolean sheet, Context context) { - this.isSheet = sheet; - this.sheet = sheet ? new ArticleViewer.Sheet(context) : null; + public ArticleViewer() { + this.isSheet = false; + this.sheet = null; + } + + public ArticleViewer(BaseFragment fragment) { + this.isSheet = true; + this.sheet = new Sheet(fragment); + setParentActivity(fragment.getParentActivity(), fragment); } private Activity parentActivity; @@ -230,20 +269,28 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private long transitionAnimationStartTime; private DecelerateInterpolator interpolator = new DecelerateInterpolator(1.5f); - private ArrayList pagesStack = new ArrayList<>(); + public final ArrayList pagesStack = new ArrayList<>(); + public boolean isLastArticle() { + if (pagesStack.isEmpty()) return false; + Object last = pagesStack.get(pagesStack.size() - 1); + return last instanceof TLRPC.WebPage; + } private WindowManager.LayoutParams windowLayoutParams; private WindowView windowView; private FrameLayout containerView; - private FrameLayout headerView; - private SimpleTextView titleTextView; - private LineProgressView lineProgressView; + private WebActionBar actionBar; + private AddressBarList addressBarList; +// private FrameLayout headerView; +// private SimpleTextView titleTextView; +// private LineProgressView lineProgressView; private Runnable lineProgressTickRunnable; - private ImageView backButton; - private ActionBarMenuItem menuButton; - private FrameLayout menuContainer; +// private ImageView backButton; +// private ActionBarMenuItem menuButton; +// private ActionBarMenuItem collapseButton; +// private FrameLayout menuContainer; private ContextProgressView progressView; - private BackDrawable backDrawable; +// private BackDrawable backDrawable; private Dialog visibleDialog; private Paint backgroundPaint; private Drawable layerShadowDrawable; @@ -253,21 +300,24 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private AnimatorSet runAfterKeyboardClose; private boolean keyboardVisible; - private FrameLayout searchContainer; - private ImageView clearButton; - private EditTextBoldCursor searchField; - private boolean animateClear = true; - private boolean ignoreOnTextChange; - private View searchShadow; +// private FrameLayout searchContainer; +// private ImageView clearButton; +// private EditTextBoldCursor searchField; +// private boolean animateClear = true; +// private boolean ignoreOnTextChange; +// private View searchShadow; + private float searchPanelTranslation; private FrameLayout searchPanel; private ImageView searchUpButton; private ImageView searchDownButton; - private SimpleTextView searchCountText; + private AnimatedTextView searchCountText; - private RecyclerListView[] listView; - private LinearLayoutManager[] layoutManager; - private WebpageAdapter[] adapter; + private FrameLayout bulletinContainer; + public PageLayout[] pages; +// private RecyclerListView[] listView; +// private LinearLayoutManager[] layoutManager; +// private WebpageAdapter[] adapter; private AnimatorSet pageSwitchAnimation; @@ -298,6 +348,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private int pressCount = 0; private CheckForTap pendingCheckForTap = null; + private Browser.Progress loadingProgress; + private TextPaintUrlSpan loadingLink; + private DrawingText loadingText; + private View loadingLinkView; + private LoadingDrawable loadingLinkDrawable; + private LinkSpanDrawable pressedLink; private LinkSpanDrawable.LinkCollector links = new LinkSpanDrawable.LinkCollector(); private BottomSheet linkSheet; @@ -307,11 +363,6 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private boolean drawBlockSelection; private LinkPath urlPath = new LinkPath(); - private static final int search_item = 1; - private static final int share_item = 2; - private static final int open_item = 3; - private static final int settings_item = 4; - private int anchorsOffsetMeasuredWidth; TextSelectionHelper.ArticleTextSelectionHelper textSelectionHelper; @@ -336,15 +387,15 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg synchronized (ArticleViewer.class) { localInstance = Instance; if (localInstance == null) { - Instance = localInstance = new ArticleViewer(false, null); + Instance = localInstance = new ArticleViewer(); } } } return localInstance; } - public static ArticleViewer makeSheet(Context context) { - return new ArticleViewer(true, context); + public static ArticleViewer makeSheet(BaseFragment fragment) { + return new ArticleViewer(fragment); } public static boolean hasInstance() { @@ -473,7 +524,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg width = getWidth(); x = 0; } - canvas.drawRect(-AndroidUtilities.dp(2) + x, 0, x + width + AndroidUtilities.dp(2), getHeight(), urlPaint); + canvas.drawRect(-dp(2) + x, 0, x + width + dp(2), getHeight(), urlPaint); } textLayout.draw(canvas); isDrawing = false; @@ -554,9 +605,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg setWillNotDraw(false); textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - textPaint.setTextSize(AndroidUtilities.dp(16)); + textPaint.setTextSize(dp(16)); - sizeBar = new SeekBarView(context); + sizeBar = new SeekBarView(context, getResourcesProvider()); sizeBar.setReportChanges(true); sizeBar.setSeparatorsCount(endFontSize - startFontSize + 1); sizeBar.setDelegate(new SeekBarView.SeekBarViewDelegate() { @@ -569,7 +620,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg SharedPreferences.Editor editor = preferences.edit(); editor.putInt("iv_font_size", SharedConfig.ivFontSize); editor.commit(); - adapter[0].searchTextOffset.clear(); + pages[0].getAdapter().searchTextOffset.clear(); updatePaintSize(); invalidate(); } @@ -594,8 +645,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onDraw(Canvas canvas) { - textPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteValueText)); - canvas.drawText("" + SharedConfig.ivFontSize, getMeasuredWidth() - AndroidUtilities.dp(39), AndroidUtilities.dp(28), textPaint); + textPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteValueText)); + canvas.drawText("" + SharedConfig.ivFontSize, getMeasuredWidth() - dp(39), dp(28), textPaint); } @Override @@ -615,7 +666,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - public static class FontCell extends FrameLayout { + public class FontCell extends FrameLayout { private TextView textView; private RadioButton radioButton; @@ -623,15 +674,15 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg public FontCell(Context context) { super(context); - setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 2)); + setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 2)); radioButton = new RadioButton(context); - radioButton.setSize(AndroidUtilities.dp(20)); - radioButton.setColor(Theme.getColor(Theme.key_dialogRadioBackground), Theme.getColor(Theme.key_dialogRadioBackgroundChecked)); + radioButton.setSize(dp(20)); + radioButton.setColor(getThemedColor(Theme.key_dialogRadioBackground), getThemedColor(Theme.key_dialogRadioBackgroundChecked)); addView(radioButton, LayoutHelper.createFrame(22, 22, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, (LocaleController.isRTL ? 0 : 22), 13, (LocaleController.isRTL ? 22 : 0), 0)); textView = new TextView(context); - textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + textView.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); textView.setLines(1); textView.setMaxLines(1); @@ -642,7 +693,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(48), MeasureSpec.EXACTLY)); + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(48), MeasureSpec.EXACTLY)); } public void select(boolean value, boolean animated) { @@ -701,6 +752,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private boolean maybeStartTracking; private boolean startedTracking; private boolean movingPage; + private boolean openingPage; private int startMovingHeaderHeight; private int startedTrackingX; private int startedTrackingY; @@ -717,6 +769,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @TargetApi(21) @Override public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) { + if (sheet != null) return super.dispatchApplyWindowInsets(insets); WindowInsets oldInsets = (WindowInsets) lastInsets; lastInsets = insets; if (oldInsets == null || !oldInsets.toString().equals(insets.toString())) { @@ -765,8 +818,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } else { setMeasuredDimension(widthSize, heightSize); } - menuButton.setAdditionalYOffset(-(currentHeaderHeight - AndroidUtilities.dp(56)) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); - keyboardVisible = heightSize < AndroidUtilities.displaySize.y - AndroidUtilities.dp(100); +// menuButton.setAdditionalYOffset(-(currentHeaderHeight - dp(56)) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); +// collapseButton.setAdditionalYOffset(-(currentHeaderHeight - dp(56)) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); + if (sheet == null) { + keyboardVisible = heightSize < AndroidUtilities.displaySize.y - dp(100); + } containerView.measure(View.MeasureSpec.makeMeasureSpec(widthSize, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(heightSize, View.MeasureSpec.EXACTLY)); fullscreenVideoContainer.measure(View.MeasureSpec.makeMeasureSpec(widthSize, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(heightSize, View.MeasureSpec.EXACTLY)); } @@ -786,7 +842,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (selectionOverlay.checkOnTap(ev)) { - ev.setAction(MotionEvent.ACTION_CANCEL); + if (pages != null && pages[0] != null && pages[0].isWeb() && pagesStack != null && pagesStack.size() <= 1) { + ev.setAction(MotionEvent.ACTION_UP); + } else { + ev.setAction(MotionEvent.ACTION_CANCEL); + } } if (ev.getAction() == MotionEvent.ACTION_DOWN && textSelectionHelper.isInSelectionMode() && (ev.getY() < containerView.getTop() || ev.getY() > containerView.getBottom())) { @@ -807,8 +867,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } int width = right - left; if (anchorsOffsetMeasuredWidth != width) { - for (int i = 0; i < listView.length; i++) { - for (HashMap.Entry entry : adapter[i].anchorsOffset.entrySet()) { + for (int i = 0; i < pages.length; i++) { + for (HashMap.Entry entry : pages[i].adapter.anchorsOffset.entrySet()) { entry.setValue(-1); } } @@ -902,12 +962,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg scrimPaint.setColor((int) (((0x99000000 & 0xff000000) >>> 24) * opacity) << 24); canvas.drawRect(0, 0, translationX, getHeight(), scrimPaint); - final float alpha = Math.max(0, Math.min((width - translationX) / (float) AndroidUtilities.dp(20), 1.0f)); + final float alpha = Math.max(0, Math.min((width - translationX) / (float) dp(20), 1.0f)); layerShadowDrawable.setBounds(translationX - layerShadowDrawable.getIntrinsicWidth(), child.getTop(), translationX, child.getBottom()); layerShadowDrawable.setAlpha((int) (0xff * alpha)); layerShadowDrawable.draw(canvas); } - return result; } @@ -920,20 +979,26 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg maybeStartTracking = false; startedTracking = true; startedTrackingX = (int) ev.getX(); - if (pagesStack.size() > 1) { + if (pagesStack.size() > 1 && (actionBar == null || !actionBar.isSearching() && !actionBar.isAddressing())) { movingPage = true; startMovingHeaderHeight = currentHeaderHeight; - listView[1].setVisibility(VISIBLE); - listView[1].setAlpha(1.0f); - listView[1].setTranslationX(0.0f); - listView[0].setBackgroundColor(backgroundPaint.getColor()); + pages[1].setVisibility(VISIBLE); + pages[1].setAlpha(1.0f); + pages[1].setTranslationX(0.0f); + pages[0].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); updateInterfaceForCurrentPage(pagesStack.get(pagesStack.size() - 2), true, -1); + if (containerView.indexOfChild(pages[0]) < containerView.indexOfChild(pages[1])) { + int index = containerView.indexOfChild(pages[0]); + containerView.removeView(pages[1]); + containerView.addView(pages[1], index); + } } else { movingPage = false; } cancelCheckLongPress(); } + private boolean lastWebviewAllowedScroll; public boolean handleTouchEvent(MotionEvent event) { if (pageSwitchAnimation == null && !closeAnimationInProgress && fullscreenVideoContainer.getVisibility() != VISIBLE && !textSelectionHelper.isInSelectionMode()) { if (event != null && event.getAction() == MotionEvent.ACTION_DOWN && !startedTracking && !maybeStartTracking) { @@ -951,13 +1016,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int dx = Math.max(0, (int) (event.getX() - startedTrackingX)); int dy = Math.abs((int) event.getY() - startedTrackingY); tracker.addMovement(event); - if (maybeStartTracking && !startedTracking && dx >= AndroidUtilities.getPixelsInCM(0.4f, true) && Math.abs(dx) / 3 > dy) { + lastWebviewAllowedScroll = pages[0] == null || !pages[0].isWeb() || pages[0].swipeContainer.allowingScroll(true) && !pages[0].swipeContainer.isScrolling; + if ((sheet == null || !sheet.nestedVerticalScroll) && maybeStartTracking && !startedTracking && dx >= AndroidUtilities.getPixelsInCM(0.4f, true) && Math.abs(dx) / 3 > dy && lastWebviewAllowedScroll) { prepareForMoving(event); } else if (startedTracking) { pressedLinkOwnerLayout = null; pressedLinkOwnerView = null; - if (movingPage) { - listView[0].setTranslationX(dx); + if (movingPage && pages[0] != null) { + pages[0].setTranslationX(dx); + } else if (sheet != null) { + sheet.setBackProgress(dx / (float) getWidth()); } else { containerView.setTranslationX(dx); setInnerTranslationX(dx); @@ -970,74 +1038,96 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg tracker.computeCurrentVelocity(1000); float velX = tracker.getXVelocity(); float velY = tracker.getYVelocity(); - if (!startedTracking && velX >= 3500 && velX > Math.abs(velY)) { + if ((sheet == null || !sheet.nestedVerticalScroll) && !startedTracking && velX >= 3500 && velX > Math.abs(velY)) { prepareForMoving(event); } if (startedTracking) { - View movingView = movingPage ? listView[0] : containerView; - float x = movingView.getX(); - final boolean backAnimation = x < movingView.getMeasuredWidth() / 3.0f && (velX < 3500 || velX < velY); + View movingView = movingPage ? pages[0] : containerView; + float x = !movingPage && sheet != null ? sheet.getBackProgress() * sheet.windowView.getWidth() : movingView.getX(); + + final boolean backAnimation = x < movingView.getMeasuredWidth() * .3f && (velX < 2500 || velX < velY) || !lastWebviewAllowedScroll; float distToMove; AnimatorSet animatorSet = new AnimatorSet(); if (!backAnimation) { distToMove = movingView.getMeasuredWidth() - x; if (movingPage) { animatorSet.playTogether( - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) ); } else { - animatorSet.playTogether( + if (sheet != null) { + animatorSet.playTogether( + sheet.animateBackProgressTo(1f) + ); + } else { + animatorSet.playTogether( ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, movingView.getMeasuredWidth()), ObjectAnimator.ofFloat(this, ARTICLE_VIEWER_INNER_TRANSLATION_X, (float) movingView.getMeasuredWidth()) - ); + ); + } } } else { distToMove = x; if (movingPage) { animatorSet.playTogether( - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_X, 0) + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, 0) ); } else { - animatorSet.playTogether( + if (sheet != null) { + animatorSet.playTogether( + sheet.animateBackProgressTo(0) + ); + } else { + animatorSet.playTogether( ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, 0), ObjectAnimator.ofFloat(this, ARTICLE_VIEWER_INNER_TRANSLATION_X, 0.0f) - ); + ); + } } } - animatorSet.setDuration(Math.max((int) (200.0f / movingView.getMeasuredWidth() * distToMove), 50)); + animatorSet.setDuration(Math.max((int) (420.0f / movingView.getMeasuredWidth() * distToMove), 250)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animator) { if (movingPage) { - listView[0].setBackgroundDrawable(null); + Object removed = null; + pages[0].setBackgroundDrawable(null); if (!backAnimation) { - WebpageAdapter adapterToUpdate = adapter[1]; - adapter[1] = adapter[0]; - adapter[0] = adapterToUpdate; + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } - RecyclerListView listToUpdate = listView[1]; - listView[1] = listView[0]; - listView[0] = listToUpdate; + removed = pagesStack.remove(pagesStack.size() - 1); - LinearLayoutManager layoutManagerToUpdate = layoutManager[1]; - layoutManager[1] = layoutManager[0]; - layoutManager[0] = layoutManagerToUpdate; - - pagesStack.remove(pagesStack.size() - 1); - - textSelectionHelper.setParentView(listView[0]); - textSelectionHelper.layoutManager = layoutManager[0]; - titleTextView.setText(adapter[0].currentPage.site_name == null ? "" : adapter[0].currentPage.site_name); + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; textSelectionHelper.clear(true); - headerView.invalidate(); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); } - listView[1].setVisibility(GONE); - headerView.invalidate(); } else { if (!backAnimation) { - saveCurrentPagePosition(); - onClosed(); + if (sheet != null) { + sheet.release(); + destroy(); + } else { + saveCurrentPagePosition(); + onClosed(); + } } } movingPage = false; @@ -1068,7 +1158,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg textSelectionHelper.clear(); } } - return startedTracking; + return startedTracking && lastWebviewAllowedScroll; } return false; } @@ -1090,23 +1180,25 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onDraw(Canvas canvas) { - int w = getMeasuredWidth(); - int h = getMeasuredHeight(); - canvas.drawRect(innerTranslationX, 0, w, h, backgroundPaint); - if (Build.VERSION.SDK_INT >= 21 && lastInsets != null) { - WindowInsets insets = (WindowInsets) lastInsets; - canvas.drawRect(innerTranslationX, 0, w, insets.getSystemWindowInsetTop(), statusBarPaint); - if (hasCutout) { - int left = insets.getSystemWindowInsetLeft(); - if (left != 0) { - canvas.drawRect(0, 0, left, h, statusBarPaint); - } - int right = insets.getSystemWindowInsetRight(); - if (right != 0) { - canvas.drawRect(w - right, 0, w, h, statusBarPaint); + if (sheet == null) { + int w = getMeasuredWidth(); + int h = getMeasuredHeight(); + canvas.drawRect(innerTranslationX, 0, w, h, backgroundPaint); + if (Build.VERSION.SDK_INT >= 21 && lastInsets != null) { + WindowInsets insets = (WindowInsets) lastInsets; + canvas.drawRect(innerTranslationX, 0, w, insets.getSystemWindowInsetTop(), statusBarPaint); + if (hasCutout) { + int left = insets.getSystemWindowInsetLeft(); + if (left != 0) { + canvas.drawRect(0, 0, left, h, statusBarPaint); + } + int right = insets.getSystemWindowInsetRight(); + if (right != 0) { + canvas.drawRect(w - right, 0, w, h, statusBarPaint); + } } + canvas.drawRect(0, h - insets.getStableInsetBottom(), w, h, navigationBarPaint); } - canvas.drawRect(0, h - insets.getStableInsetBottom(), w, h, navigationBarPaint); } } @@ -1131,9 +1223,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { - if (searchField.isFocused()) { - searchField.clearFocus(); - AndroidUtilities.hideKeyboard(searchField); + if (actionBar.searchEditText.isFocused()) { + actionBar.searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(actionBar.searchEditText); + } else if (actionBar.addressEditText.isFocused()) { + actionBar.addressEditText.clearFocus(); + AndroidUtilities.hideKeyboard(actionBar.addressEditText); + } else if (keyboardVisible) { + AndroidUtilities.hideKeyboard(this); + } else if (pages[0] != null && pages[0].isWeb() && pages[0].getWebView() != null && pages[0].getWebView().canGoBack()) { + pages[0].getWebView().goBack(); } else { close(true, false); } @@ -1171,15 +1270,15 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int[] location = new int[2]; pressedLinkOwnerView.getLocationInWindow(location); - int y = location[1] + pressedLayoutY - AndroidUtilities.dp(54); + int y = location[1] + pressedLayoutY - dp(54); if (y < 0) { y = 0; } pressedLinkOwnerView.invalidate(); drawBlockSelection = true; showPopup(pressedLinkOwnerView, Gravity.TOP, 0, y); - listView[0].setLayoutFrozen(true); - listView[0].setLayoutFrozen(false); + pages[0].listView.setLayoutFrozen(true); + pages[0].listView.setLayoutFrozen(false); } } } @@ -1193,11 +1292,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg tableLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); tableLinePaint.setStyle(Paint.Style.STROKE); - tableLinePaint.setStrokeWidth(AndroidUtilities.dp(1)); + tableLinePaint.setStrokeWidth(dp(1)); tableHalfLinePaint = new Paint(); tableHalfLinePaint.setStyle(Paint.Style.STROKE); - tableHalfLinePaint.setStrokeWidth(AndroidUtilities.dp(1) / 2.0f); + tableHalfLinePaint.setStrokeWidth(dp(1) / 2.0f); tableHeaderPaint = new Paint(); tableStripPaint = new Paint(); @@ -1212,35 +1311,35 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return; } - int color2 = Theme.getColor(Theme.key_windowBackgroundWhite); + int color2 = getThemedColor(Theme.key_windowBackgroundWhite); float lightness = (0.2126f * Color.red(color2) + 0.7152f * Color.green(color2) + 0.0722f * Color.blue(color2)) / 255.0f; webpageSearchPaint.setColor(lightness <= 0.705f ? 0xffd1982e : 0xffffe669); - webpageUrlPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + webpageUrlPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); webpageUrlPaint.setPathEffect(LinkPath.getRoundedEffect()); - urlPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + urlPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); urlPaint.setPathEffect(LinkPath.getRoundedEffect()); - tableHalfLinePaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteInputField)); - tableLinePaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteInputField)); + tableHalfLinePaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteInputField)); + tableLinePaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteInputField)); photoBackgroundPaint.setColor(0x0f000000); - dividerPaint.setColor(Theme.getColor(Theme.key_divider)); - webpageMarkPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + dividerPaint.setColor(getThemedColor(Theme.key_divider)); + webpageMarkPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); webpageMarkPaint.setPathEffect(LinkPath.getRoundedEffect()); - int color = Theme.getColor(Theme.key_switchTrack); + int color = getThemedColor(Theme.key_switchTrack); int r = Color.red(color); int g = Color.green(color); int b = Color.blue(color); tableStripPaint.setColor(Color.argb(20, r, g, b)); tableHeaderPaint.setColor(Color.argb(34, r, g, b)); - color = Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection); + color = getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection); r = Color.red(color); g = Color.green(color); b = Color.blue(color); preformattedBackgroundPaint.setColor(Color.argb(20, r, g, b)); - quoteLinePaint.setColor(Theme.getColor(Theme.key_chat_inReplyLine)); + quoteLinePaint.setColor(getThemedColor(Theme.key_chat_inReplyLine)); } private void showCopyPopup(String urlFinal) { @@ -1262,17 +1361,17 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg builder.setTitle(formattedUrl); builder.setTitleMultipleLines(true); builder.setItems(new CharSequence[]{LocaleController.getString("Open", R.string.Open), LocaleController.getString("Copy", R.string.Copy)}, (dialog, which) -> { - if (parentActivity == null) { + if (parentActivity == null || pages[0].adapter.currentPage == null) { return; } if (which == 0) { int index; if ((index = urlFinal.lastIndexOf('#')) != -1) { String webPageUrl; - if (!TextUtils.isEmpty(adapter[0].currentPage.cached_page.url)) { - webPageUrl = adapter[0].currentPage.cached_page.url.toLowerCase(); + if (!TextUtils.isEmpty(pages[0].adapter.currentPage.cached_page.url)) { + webPageUrl = pages[0].adapter.currentPage.cached_page.url.toLowerCase(); } else { - webPageUrl = adapter[0].currentPage.url.toLowerCase(); + webPageUrl = pages[0].adapter.currentPage.url.toLowerCase(); } String anchor; try { @@ -1282,10 +1381,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (urlFinal.toLowerCase().contains(webPageUrl)) { if (TextUtils.isEmpty(anchor)) { - layoutManager[0].scrollToPositionWithOffset(0, 0); + pages[0].layoutManager.scrollToPositionWithOffset(sheet != null && sheet.halfSize() ? 1 : 0, sheet != null ? dp(56 - 24) : 0); checkScrollAnimated(); } else { - scrollToAnchor(anchor); + scrollToAnchor(anchor, false); } return; } @@ -1315,7 +1414,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (popupLayout == null) { popupRect = new android.graphics.Rect(); popupLayout = new ActionBarPopupWindow.ActionBarPopupWindowLayout(parentActivity); - popupLayout.setPadding(AndroidUtilities.dp(1), AndroidUtilities.dp(1), AndroidUtilities.dp(1), AndroidUtilities.dp(1)); + popupLayout.setPadding(dp(1), dp(1), dp(1), dp(1)); popupLayout.setBackgroundDrawable(parentActivity.getResources().getDrawable(R.drawable.menu_copy)); popupLayout.setAnimationEnabled(false); popupLayout.setOnTouchListener((v, event) -> { @@ -1337,9 +1436,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg popupLayout.setShownFromBottom(false); deleteView = new TextView(parentActivity); - deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 2)); + deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 2)); deleteView.setGravity(Gravity.CENTER_VERTICAL); - deleteView.setPadding(AndroidUtilities.dp(20), 0, AndroidUtilities.dp(20), 0); + deleteView.setPadding(dp(20), 0, dp(20), 0); deleteView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); deleteView.setTypeface(AndroidUtilities.bold()); deleteView.setText(LocaleController.getString("Copy", R.string.Copy).toUpperCase()); @@ -1373,12 +1472,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg }); } - deleteView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem)); + deleteView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); if (popupLayout != null) { - popupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); + popupLayout.setBackgroundColor(getThemedColor(Theme.key_actionBarDefaultSubmenuBackground)); } - popupLayout.measure(View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST)); + popupLayout.measure(View.MeasureSpec.makeMeasureSpec(dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(dp(1000), View.MeasureSpec.AT_MOST)); popupWindow.setFocusable(true); popupWindow.showAtLocation(parent, gravity, x, y); popupWindow.startAnimation(); @@ -1575,150 +1674,499 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return childBlock; } - private void updateInterfaceForCurrentPage(TLRPC.WebPage webPage, boolean previous, int order) { - if (webPage == null || webPage.cached_page == null) { + public PageLayout getCurrentPageLayout() { + return pages[0]; + } + + private void updateInterfaceForCurrentPage(Object obj, boolean previous, int order) { + if (obj == null || !( + obj instanceof TLRPC.WebPage && ((TLRPC.WebPage) obj).cached_page != null || + obj instanceof CachedWeb + )) { return; } if (!previous && order != 0) { - WebpageAdapter adapterToUpdate = adapter[1]; - adapter[1] = adapter[0]; - adapter[0] = adapterToUpdate; + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } - RecyclerListView listToUpdate = listView[1]; - listView[1] = listView[0]; - listView[0] = listToUpdate; - - LinearLayoutManager layoutManagerToUpdate = layoutManager[1]; - layoutManager[1] = layoutManager[0]; - layoutManager[0] = layoutManagerToUpdate; - - int index1 = containerView.indexOfChild(listView[0]); - int index2 = containerView.indexOfChild(listView[1]); + int index1 = containerView.indexOfChild(pages[0]); + int index2 = containerView.indexOfChild(pages[1]); if (order == 1) { if (index1 < index2) { - containerView.removeView(listView[0]); - containerView.addView(listView[0], index2); + containerView.removeView(pages[0]); + containerView.addView(pages[0], index2); } } else { if (index2 < index1) { - containerView.removeView(listView[0]); - containerView.addView(listView[0], index1); + containerView.removeView(pages[0]); + containerView.addView(pages[0], index1); } } pageSwitchAnimation = new AnimatorSet(); - listView[0].setVisibility(View.VISIBLE); + pages[0].setVisibility(View.VISIBLE); int index = order == 1 ? 0 : 1; - listView[index].setBackgroundColor(backgroundPaint.getColor()); + pages[index].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); if (Build.VERSION.SDK_INT >= 18) { - listView[index].setLayerType(View.LAYER_TYPE_HARDWARE, null); + pages[index].setLayerType(View.LAYER_TYPE_HARDWARE, null); } if (order == 1) { - pageSwitchAnimation.playTogether(ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_X, AndroidUtilities.dp(56), 0), - ObjectAnimator.ofFloat(listView[0], View.ALPHA, 0.0f, 1.0f)); + pages[0].setTranslationX(AndroidUtilities.displaySize.x); + pageSwitchAnimation.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, AndroidUtilities.displaySize.x, 0) + ); } else if (order == -1) { - listView[0].setAlpha(1.0f); - listView[0].setTranslationX(0.0f); - pageSwitchAnimation.playTogether(ObjectAnimator.ofFloat(listView[1], View.TRANSLATION_X, 0, AndroidUtilities.dp(56)), - ObjectAnimator.ofFloat(listView[1], View.ALPHA, 1.0f, 0.0f)); +// pages[0].setAlpha(1.0f); + pages[0].setTranslationX(0.0f); + pageSwitchAnimation.playTogether( + ObjectAnimator.ofFloat(pages[1], View.TRANSLATION_X, 0, AndroidUtilities.displaySize.x)//, +// ObjectAnimator.ofFloat(pages[1], View.ALPHA, 1.0f, 0.0f) + ); } - pageSwitchAnimation.setDuration(150); - pageSwitchAnimation.setInterpolator(interpolator); + pageSwitchAnimation.setDuration(320); + pageSwitchAnimation.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); pageSwitchAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - listView[1].setVisibility(View.GONE); - textSelectionHelper.setParentView(listView[0]); - textSelectionHelper.layoutManager = layoutManager[0]; - listView[index].setBackgroundDrawable(null); + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + pages[index].setBackgroundDrawable(null); if (Build.VERSION.SDK_INT >= 18) { - listView[index].setLayerType(View.LAYER_TYPE_NONE, null); + pages[index].setLayerType(View.LAYER_TYPE_NONE, null); } pageSwitchAnimation = null; + windowView.openingPage = false; } }); - pageSwitchAnimation.start(); + windowView.openingPage = true; + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + AndroidUtilities.runOnUIThread(pageSwitchAnimation::start); } - if (!previous) { - titleTextView.setText(webPage.site_name == null ? "" : webPage.site_name); - textSelectionHelper.clear(true); - headerView.invalidate(); - } - int index = previous ? 1 : 0; - TLRPC.WebPage page = previous ? pagesStack.get(pagesStack.size() - 2) : webPage; - adapter[index].isRtl = webPage.cached_page.rtl; - adapter[index].cleanup(); - adapter[index].currentPage = page; - int numBlocks = 0; - int count = page.cached_page.blocks.size(); - for (int a = 0; a < count; a++) { - TLRPC.PageBlock block = page.cached_page.blocks.get(a); - if (a == 0) { - block.first = true; - if (block instanceof TLRPC.TL_pageBlockCover) { - TLRPC.TL_pageBlockCover pageBlockCover = (TLRPC.TL_pageBlockCover) block; - TLRPC.RichText caption = getBlockCaption(pageBlockCover, 0); - TLRPC.RichText credit = getBlockCaption(pageBlockCover, 1); - if ((caption != null && !(caption instanceof TLRPC.TL_textEmpty) || credit != null && !(credit instanceof TLRPC.TL_textEmpty)) && count > 1) { - TLRPC.PageBlock next = page.cached_page.blocks.get(1); - if (next instanceof TLRPC.TL_pageBlockChannel) { - adapter[index].channelBlock = (TLRPC.TL_pageBlockChannel) next; + final int index = previous ? 1 : 0; + if (!previous) { + textSelectionHelper.clear(true); + } + final WebpageAdapter adapter = pages[index].adapter; + + Object page = previous ? pagesStack.get(pagesStack.size() - 2) : obj; + pages[index].cleanup(); + if (page instanceof TLRPC.WebPage) { + TLRPC.WebPage webPage = (TLRPC.WebPage) page; + + pages[index].setWeb(null); + pages[index].setType(PageLayout.TYPE_ARTICLE); + adapter.isRtl = webPage.cached_page.rtl; + adapter.currentPage = webPage; + + int numBlocks = 0; + int count = webPage.cached_page.blocks.size(); + for (int a = 0; a < count; a++) { + TLRPC.PageBlock block = webPage.cached_page.blocks.get(a); + if (a == 0) { + block.first = true; + if (block instanceof TLRPC.TL_pageBlockCover) { + TLRPC.TL_pageBlockCover pageBlockCover = (TLRPC.TL_pageBlockCover) block; + TLRPC.RichText caption = getBlockCaption(pageBlockCover, 0); + TLRPC.RichText credit = getBlockCaption(pageBlockCover, 1); + if ((caption != null && !(caption instanceof TLRPC.TL_textEmpty) || credit != null && !(credit instanceof TLRPC.TL_textEmpty)) && count > 1) { + TLRPC.PageBlock next = webPage.cached_page.blocks.get(1); + if (next instanceof TLRPC.TL_pageBlockChannel) { + adapter.channelBlock = (TLRPC.TL_pageBlockChannel) next; + } } } + } else if (a == 1 && adapter.channelBlock != null) { + continue; } - } else if (a == 1 && adapter[index].channelBlock != null) { - continue; + adapter.addBlock(adapter, block, 0, 0, a == count - 1 ? a : 0); } - adapter[index].addBlock(adapter[index], block, 0, 0, a == count - 1 ? a : 0); - } - adapter[index].notifyDataSetChanged(); + adapter.notifyDataSetChanged(); - if (pagesStack.size() == 1 || order == -1) { - SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE); - String key = "article" + page.id; - int position = preferences.getInt(key, -1); - int offset; - if (preferences.getBoolean(key + "r", true) == AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y) { - offset = preferences.getInt(key + "o", 0) - listView[index].getPaddingTop(); + if (pagesStack.size() == 1 || order == -1) { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE); + String key = "article" + webPage.id; + int position = preferences.getInt(key, -1); + int offset; + if (preferences.getBoolean(key + "r", true) == AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y) { + offset = preferences.getInt(key + "o", 0) - pages[index].listView.getPaddingTop(); + } else { + offset = dp(10); + } + if (position != -1) { + pages[index].layoutManager.scrollToPositionWithOffset(position, offset); + } } else { - offset = AndroidUtilities.dp(10); + pages[index].layoutManager.scrollToPositionWithOffset(sheet != null && sheet.halfSize() ? 1 : 0, sheet != null ? dp(56 - 24) : 0); } - if (position != -1) { - layoutManager[index].scrollToPositionWithOffset(position, offset); - } - } else { - layoutManager[index].scrollToPositionWithOffset(0, 0); + } else if (page instanceof CachedWeb) { + pages[index].setType(PageLayout.TYPE_WEB); + pages[index].scrollToTop(false); + pages[index].setWeb((CachedWeb) page); } if (!previous) { checkScrollAnimated(); } + + updateTitle(false); + updatePages(); + } + + public BotWebViewContainer.MyWebView getLastWebView() { + if (pages[0] != null && pages[0].isWeb()) { + if (pages[0].getWebView() == null) { + pages[0].webViewContainer.checkCreateWebView(); + } + return pages[0].getWebView(); + } + return null; } private boolean addPageToStack(TLRPC.WebPage webPage, String anchor, int order) { saveCurrentPagePosition(); pagesStack.add(webPage); - showSearch(false); + actionBar.showSearch(false, true); updateInterfaceForCurrentPage(webPage, false, order); - return scrollToAnchor(anchor); + return scrollToAnchor(anchor, false); } - private boolean scrollToAnchor(String anchor) { + private boolean addPageToStack(String url, int order) { + saveCurrentPagePosition(); + CachedWeb web = new CachedWeb(url); + pagesStack.add(web); + actionBar.showSearch(false, true); + updateInterfaceForCurrentPage(web, false, order); + return false; + } + + private void goBack() { + if (pagesStack.size() <= 1) { + windowView.movingPage = false; + windowView.startedTracking = false; + View movingView = containerView; + float x = sheet != null ? sheet.getBackProgress() * sheet.windowView.getWidth() : movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + distToMove = movingView.getMeasuredWidth() - x; + if (sheet != null) { + animatorSet.playTogether(sheet.animateBackProgressTo(1f)); + } else { + animatorSet.playTogether( + ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, movingView.getMeasuredWidth()), + ObjectAnimator.ofFloat(windowView, ARTICLE_VIEWER_INNER_TRANSLATION_X, (float) movingView.getMeasuredWidth()) + ); + } + + animatorSet.setDuration(Math.max((int) (420.0f / movingView.getMeasuredWidth() * distToMove), 250)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.movingPage) { + Object removed = null; + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + removed = pagesStack.remove(pagesStack.size() - 1); + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } + } else { + if (!backAnimation) { + if (sheet != null) { + sheet.release(); + destroy(); + } else { + saveCurrentPagePosition(); + onClosed(); + } + } + } + windowView.movingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + closeAnimationInProgress = true; + return; + } + windowView.openingPage = true; + pages[1].setVisibility(View.VISIBLE); + pages[1].setAlpha(1.0f); + pages[1].setTranslationX(0.0f); + pages[0].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); + updateInterfaceForCurrentPage(pagesStack.get(pagesStack.size() - 2), true, -1); + + View movingView = pages[0]; + float x = movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + if (!backAnimation) { + distToMove = movingView.getMeasuredWidth() - x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) + ); + } else { + distToMove = x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, 0) + ); + } + + animatorSet.setDuration(420); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.openingPage) { + Object removed = null; + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + removed = pagesStack.remove(pagesStack.size() - 1); + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } + } else { + if (!backAnimation) { + saveCurrentPagePosition(); + onClosed(); + } + } + windowView.openingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + closeAnimationInProgress = true; + } + + private void goBack(int intoIndex) { + if (pagesStack.size() <= 1) { + windowView.movingPage = false; + windowView.startedTracking = false; + View movingView = containerView; + float x = sheet != null ? sheet.getBackProgress() * sheet.windowView.getWidth() : movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + distToMove = movingView.getMeasuredWidth() - x; + if (sheet != null) { + animatorSet.playTogether( + sheet.animateBackProgressTo(1f) + ); + } else { + animatorSet.playTogether( + ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, movingView.getMeasuredWidth()), + ObjectAnimator.ofFloat(windowView, ARTICLE_VIEWER_INNER_TRANSLATION_X, (float) movingView.getMeasuredWidth()) + ); + } + + animatorSet.setDuration(Math.max((int) (420.0f / movingView.getMeasuredWidth() * distToMove), 250)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.movingPage) { + Object removed = null; + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + removed = pagesStack.remove(pagesStack.size() - 1); + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } + } else { + if (!backAnimation) { + if (sheet != null) { + sheet.release(); + destroy(); + } else { + saveCurrentPagePosition(); + onClosed(); + } + } + } + windowView.movingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + closeAnimationInProgress = true; + return; + } + + windowView.openingPage = true; + pages[1].setVisibility(View.VISIBLE); + pages[1].setAlpha(1.0f); + pages[1].setTranslationX(0.0f); + pages[0].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); + updateInterfaceForCurrentPage(pagesStack.get(intoIndex), true, -1); + + View movingView = pages[0]; + float x = movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + if (!backAnimation) { + distToMove = movingView.getMeasuredWidth() - x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) + ); + } else { + distToMove = x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, 0) + ); + } + + animatorSet.setDuration(420); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.openingPage) { + ArrayList removed = new ArrayList<>(); + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + for (int i = pagesStack.size() - 1; i > intoIndex; --i) { + removed.add(pagesStack.remove(i)); + } + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + for (Object obj : removed) { + if (obj instanceof CachedWeb) { + ((CachedWeb) obj).destroy(); + } + } + } else { + if (!backAnimation) { + saveCurrentPagePosition(); + onClosed(); + } + } + windowView.openingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + closeAnimationInProgress = true; + } + + private boolean scrollToAnchor(String anchor, boolean animated) { if (TextUtils.isEmpty(anchor)) { return false; } anchor = anchor.toLowerCase(); - Integer row = adapter[0].anchors.get(anchor); + Integer row = pages[0].adapter.anchors.get(anchor); if (row != null) { - TLRPC.TL_textAnchor textAnchor = adapter[0].anchorsParent.get(anchor); + TLRPC.TL_textAnchor textAnchor = pages[0].adapter.anchorsParent.get(anchor); if (textAnchor != null) { TLRPC.TL_pageBlockParagraph paragraph = new TLRPC.TL_pageBlockParagraph(); paragraph.text = textAnchor.text; - int type = adapter[0].getTypeForBlock(paragraph); - RecyclerView.ViewHolder holder = adapter[0].onCreateViewHolder(null, type); - adapter[0].bindBlockToHolder(type, holder, paragraph, 0, 0); + int type = pages[0].adapter.getTypeForBlock(paragraph); + RecyclerView.ViewHolder holder = pages[0].adapter.onCreateViewHolder(null, type); + pages[0].adapter.bindBlockToHolder(type, holder, paragraph, 0, 0); BottomSheet.Builder builder = new BottomSheet.Builder(parentActivity); builder.setApplyTopPadding(false); @@ -1746,10 +2194,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); textView.setTypeface(AndroidUtilities.bold()); textView.setText(LocaleController.getString("InstantViewReference", R.string.InstantViewReference)); - textView.setGravity((adapter[0].isRtl ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); + textView.setGravity((pages[0].adapter.isRtl ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); textView.setTextColor(getTextColor()); - textView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); - linearLayout.addView(textView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, AndroidUtilities.dp(48) + 1)); + textView.setPadding(dp(18), 0, dp(18), 0); + linearLayout.addView(textView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(48) + 1)); holder.itemView.setTag(BOTTOM_SHEET_VIEW_TAG); linearLayout.addView(holder.itemView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 7, 0, 0)); @@ -1783,7 +2231,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - heightMeasureSpec = MeasureSpec.makeMeasureSpec(linearLayout.getMeasuredHeight() + AndroidUtilities.dp(8), MeasureSpec.EXACTLY); + heightMeasureSpec = MeasureSpec.makeMeasureSpec(linearLayout.getMeasuredHeight() + dp(8), MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }; @@ -1807,31 +2255,31 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } showDialog(linkSheet = builder.create()); } else { - if (row < 0 || row >= adapter[0].blocks.size()) { + if (row < 0 || row >= pages[0].adapter.blocks.size()) { return false; } - TLRPC.PageBlock originalBlock = adapter[0].blocks.get(row); + TLRPC.PageBlock originalBlock = pages[0].adapter.blocks.get(row); TLRPC.PageBlock block = getLastNonListPageBlock(originalBlock); if (block instanceof TL_pageBlockDetailsChild) { if (openAllParentBlocks((TL_pageBlockDetailsChild) block)) { - adapter[0].updateRows(); - adapter[0].notifyDataSetChanged(); + pages[0].adapter.updateRows(); + pages[0].adapter.notifyDataSetChanged(); } } - int position = adapter[0].localBlocks.indexOf(originalBlock); + int position = pages[0].adapter.localBlocks.indexOf(originalBlock); if (position != -1) { row = position; } - Integer offset = adapter[0].anchorsOffset.get(anchor); + Integer offset = pages[0].adapter.anchorsOffset.get(anchor); if (offset != null) { if (offset == -1) { - int type = adapter[0].getTypeForBlock(originalBlock); - RecyclerView.ViewHolder holder = adapter[0].onCreateViewHolder(null, type); - adapter[0].bindBlockToHolder(type, holder, originalBlock, 0, 0); - holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(listView[0].getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); - offset = adapter[0].anchorsOffset.get(anchor); + int type = pages[0].adapter.getTypeForBlock(originalBlock); + RecyclerView.ViewHolder holder = pages[0].adapter.onCreateViewHolder(null, type); + pages[0].adapter.bindBlockToHolder(type, holder, originalBlock, 0, 0); + holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(pages[0].listView.getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + offset = pages[0].adapter.anchorsOffset.get(anchor); if (offset == -1) { offset = 0; } @@ -1839,7 +2287,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } else { offset = 0; } - layoutManager[0].scrollToPositionWithOffset(row, currentHeaderHeight - AndroidUtilities.dp(56) - offset); + if (animated) { + SmoothScroller s = new SmoothScroller(pages[0].getContext()); + s.setTargetPosition(row + (sheet != null && sheet.halfSize() ? 1 : 0)); + s.setOffset((- dp(56) - offset)); + pages[0].layoutManager.startSmoothScroll(s); + } else { + pages[0].layoutManager.scrollToPositionWithOffset(row, - dp(56) - offset); + } } return true; } @@ -1850,7 +2305,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (pagesStack.size() < 2) { return false; } - pagesStack.remove(pagesStack.size() - 1); + Object removed = pagesStack.remove(pagesStack.size() - 1); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } updateInterfaceForCurrentPage(pagesStack.get(pagesStack.size() - 1), false, -1); return true; } @@ -1895,28 +2353,28 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private static final int TEXT_FLAG_SUP = 256; private static final int TEXT_FLAG_WEBPAGE_URL = 512; - private static TextPaint audioTimePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + private static final TextPaint audioTimePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); private static TextPaint errorTextPaint; - private static SparseArray photoCaptionTextPaints = new SparseArray<>(); - private static SparseArray photoCreditTextPaints = new SparseArray<>(); - private static SparseArray titleTextPaints = new SparseArray<>(); - private static SparseArray kickerTextPaints = new SparseArray<>(); - private static SparseArray headerTextPaints = new SparseArray<>(); - private static SparseArray subtitleTextPaints = new SparseArray<>(); - private static SparseArray subheaderTextPaints = new SparseArray<>(); - private static SparseArray authorTextPaints = new SparseArray<>(); - private static SparseArray footerTextPaints = new SparseArray<>(); - private static SparseArray paragraphTextPaints = new SparseArray<>(); - private static SparseArray listTextPaints = new SparseArray<>(); - private static SparseArray preformattedTextPaints = new SparseArray<>(); - private static SparseArray quoteTextPaints = new SparseArray<>(); - private static SparseArray embedPostTextPaints = new SparseArray<>(); - private static SparseArray embedPostCaptionTextPaints = new SparseArray<>(); - private static SparseArray mediaCaptionTextPaints = new SparseArray<>(); - private static SparseArray mediaCreditTextPaints = new SparseArray<>(); - private static SparseArray relatedArticleTextPaints = new SparseArray<>(); - private static SparseArray detailsTextPaints = new SparseArray<>(); - private static SparseArray tableTextPaints = new SparseArray<>(); + private static final SparseArray photoCaptionTextPaints = new SparseArray<>(); + private static final SparseArray photoCreditTextPaints = new SparseArray<>(); + private static final SparseArray titleTextPaints = new SparseArray<>(); + private static final SparseArray kickerTextPaints = new SparseArray<>(); + private static final SparseArray headerTextPaints = new SparseArray<>(); + private static final SparseArray subtitleTextPaints = new SparseArray<>(); + private static final SparseArray subheaderTextPaints = new SparseArray<>(); + private static final SparseArray authorTextPaints = new SparseArray<>(); + private static final SparseArray footerTextPaints = new SparseArray<>(); + private static final SparseArray paragraphTextPaints = new SparseArray<>(); + private static final SparseArray listTextPaints = new SparseArray<>(); + private static final SparseArray preformattedTextPaints = new SparseArray<>(); + private static final SparseArray quoteTextPaints = new SparseArray<>(); + private static final SparseArray embedPostTextPaints = new SparseArray<>(); + private static final SparseArray embedPostCaptionTextPaints = new SparseArray<>(); + private static final SparseArray mediaCaptionTextPaints = new SparseArray<>(); + private static final SparseArray mediaCreditTextPaints = new SparseArray<>(); + private static final SparseArray relatedArticleTextPaints = new SparseArray<>(); + private static final SparseArray detailsTextPaints = new SparseArray<>(); + private static final SparseArray tableTextPaints = new SparseArray<>(); private static TextPaint embedPostAuthorPaint; private static TextPaint embedPostDatePaint; @@ -2122,8 +2580,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg TLRPC.Document document = WebPageUtils.getDocumentWithId(page, textImage.document_id); if (document != null) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("*"); - int w = AndroidUtilities.dp(textImage.w); - int h = AndroidUtilities.dp(textImage.h); + int w = dp(textImage.w); + int h = dp(textImage.h); maxWidth = Math.abs(maxWidth); if (w > maxWidth) { float scale = maxWidth / (float) w; @@ -2131,7 +2589,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg h *= scale; } if (parentView != null) { - int color = Theme.getColor(Theme.key_windowBackgroundWhite); + int color = getThemedColor(Theme.key_windowBackgroundWhite); float lightness = (0.2126f * Color.red(color) + 0.7152f * Color.green(color) + 0.0722f * Color.blue(color)) / 255.0f; spannableStringBuilder.setSpan(new TextPaintImageReceiverSpan(parentView, document, page, w, h, false, lightness <= 0.705f), 0, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } @@ -2210,194 +2668,194 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } private int getTextColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteBlackText); + return getThemedColor(Theme.key_windowBackgroundWhiteBlackText); } private int getLinkTextColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteLinkText); + return getThemedColor(Theme.key_windowBackgroundWhiteLinkText); } - private static int getGrayTextColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteGrayText); + private int getGrayTextColor() { + return getThemedColor(Theme.key_windowBackgroundWhiteGrayText); } private TextPaint getTextPaint(TLRPC.RichText parentRichText, TLRPC.RichText richText, TLRPC.PageBlock parentBlock) { int flags = getTextFlags(richText); SparseArray currentMap = null; - int textSize = AndroidUtilities.dp(14); + int textSize = dp(14); int textColor = 0xffff0000; - int additionalSize = AndroidUtilities.dp(SharedConfig.ivFontSize - 16); + int additionalSize = dp(SharedConfig.ivFontSize - 16); if (parentBlock instanceof TLRPC.TL_pageBlockPhoto) { TLRPC.TL_pageBlockPhoto pageBlockPhoto = (TLRPC.TL_pageBlockPhoto) parentBlock; if (pageBlockPhoto.caption.text == richText || pageBlockPhoto.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockMap) { TLRPC.TL_pageBlockMap pageBlockMap = (TLRPC.TL_pageBlockMap) parentBlock; if (pageBlockMap.caption.text == richText || pageBlockMap.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockTitle) { currentMap = titleTextPaints; - textSize = AndroidUtilities.dp(23); + textSize = dp(23); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockKicker) { currentMap = kickerTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockAuthorDate) { currentMap = authorTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockFooter) { currentMap = footerTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockSubtitle) { currentMap = subtitleTextPaints; - textSize = AndroidUtilities.dp(20); + textSize = dp(20); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockHeader) { currentMap = headerTextPaints; - textSize = AndroidUtilities.dp(20); + textSize = dp(20); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockSubheader) { currentMap = subheaderTextPaints; - textSize = AndroidUtilities.dp(17); + textSize = dp(17); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockBlockquote) { TLRPC.TL_pageBlockBlockquote pageBlockBlockquote = (TLRPC.TL_pageBlockBlockquote) parentBlock; if (pageBlockBlockquote.text == parentRichText) { currentMap = quoteTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } else if (pageBlockBlockquote.caption == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } } else if (parentBlock instanceof TLRPC.TL_pageBlockPullquote) { TLRPC.TL_pageBlockPullquote pageBlockBlockquote = (TLRPC.TL_pageBlockPullquote) parentBlock; if (pageBlockBlockquote.text == parentRichText) { currentMap = quoteTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } else if (pageBlockBlockquote.caption == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } } else if (parentBlock instanceof TLRPC.TL_pageBlockPreformatted) { currentMap = preformattedTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockParagraph) { currentMap = paragraphTextPaints; - textSize = AndroidUtilities.dp(16); + textSize = dp(16); textColor = getTextColor(); } else if (isListItemBlock(parentBlock)) { currentMap = listTextPaints; - textSize = AndroidUtilities.dp(16); + textSize = dp(16); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockEmbed) { TLRPC.TL_pageBlockEmbed pageBlockEmbed = (TLRPC.TL_pageBlockEmbed) parentBlock; if (pageBlockEmbed.caption.text == richText || pageBlockEmbed.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockSlideshow) { TLRPC.TL_pageBlockSlideshow pageBlockSlideshow = (TLRPC.TL_pageBlockSlideshow) parentBlock; if (pageBlockSlideshow.caption.text == richText || pageBlockSlideshow.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockCollage) { TLRPC.TL_pageBlockCollage pageBlockCollage = (TLRPC.TL_pageBlockCollage) parentBlock; if (pageBlockCollage.caption.text == richText || pageBlockCollage.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockEmbedPost) { TLRPC.TL_pageBlockEmbedPost pageBlockEmbedPost = (TLRPC.TL_pageBlockEmbedPost) parentBlock; if (richText == pageBlockEmbedPost.caption.text) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } else if (richText == pageBlockEmbedPost.caption.credit) { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); textColor = getGrayTextColor(); } else if (richText != null) { currentMap = embedPostTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getTextColor(); } } else if (parentBlock instanceof TLRPC.TL_pageBlockVideo) { TLRPC.TL_pageBlockVideo pageBlockVideo = (TLRPC.TL_pageBlockVideo) parentBlock; if (richText == pageBlockVideo.caption.text) { currentMap = mediaCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = mediaCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockAudio) { TLRPC.TL_pageBlockAudio pageBlockAudio = (TLRPC.TL_pageBlockAudio) parentBlock; if (richText == pageBlockAudio.caption.text) { currentMap = mediaCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = mediaCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockRelatedArticles) { currentMap = relatedArticleTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockDetails) { currentMap = detailsTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockTable) { currentMap = tableTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } if ((flags & TEXT_FLAG_SUP) != 0 || (flags & TEXT_FLAG_SUB) != 0) { - textSize -= AndroidUtilities.dp(4); + textSize -= dp(4); } if (currentMap == null) { if (errorTextPaint == null) { errorTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); errorTextPaint.setColor(0xffff0000); } - errorTextPaint.setTextSize(AndroidUtilities.dp(14)); + errorTextPaint.setTextSize(dp(14)); return errorTextPaint; } TextPaint paint = currentMap.get(flags); @@ -2443,9 +2901,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg textColor = getLinkTextColor(); } if ((flags & TEXT_FLAG_SUP) != 0) { - paint.baselineShift -= AndroidUtilities.dp(6.0f); + paint.baselineShift -= dp(6.0f); } else if ((flags & TEXT_FLAG_SUB) != 0) { - paint.baselineShift += AndroidUtilities.dp(2.0f); + paint.baselineShift += dp(2.0f); } paint.setColor(textColor); currentMap.put(flags, paint); @@ -2467,7 +2925,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return null; } if (width < 0) { - width = AndroidUtilities.dp(10); + width = dp(10); } CharSequence text; @@ -2480,7 +2938,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return null; } - int additionalSize = AndroidUtilities.dp(SharedConfig.ivFontSize - 16); + int additionalSize = dp(SharedConfig.ivFontSize - 16); TextPaint paint; if (parentBlock instanceof TLRPC.TL_pageBlockEmbedPost && richText == null) { @@ -2490,14 +2948,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg embedPostAuthorPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); embedPostAuthorPaint.setColor(getTextColor()); } - embedPostAuthorPaint.setTextSize(AndroidUtilities.dp(15) + additionalSize); + embedPostAuthorPaint.setTextSize(dp(15) + additionalSize); paint = embedPostAuthorPaint; } else { if (embedPostDatePaint == null) { embedPostDatePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); embedPostDatePaint.setColor(getGrayTextColor()); } - embedPostDatePaint.setTextSize(AndroidUtilities.dp(14) + additionalSize); + embedPostDatePaint.setTextSize(dp(14) + additionalSize); paint = embedPostDatePaint; } } else if (parentBlock instanceof TLRPC.TL_pageBlockChannel) { @@ -2509,10 +2967,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg channelNamePhotoPaint.setTypeface(AndroidUtilities.bold()); } channelNamePaint.setColor(getTextColor()); - channelNamePaint.setTextSize(AndroidUtilities.dp(15)); + channelNamePaint.setTextSize(dp(15)); channelNamePhotoPaint.setColor(0xffffffff); - channelNamePhotoPaint.setTextSize(AndroidUtilities.dp(15)); + channelNamePhotoPaint.setTextSize(dp(15)); paint = parentAdapter.channelBlock != null ? channelNamePhotoPaint : channelNamePaint; } else if (parentBlock instanceof TL_pageBlockRelatedArticlesChild) { @@ -2523,14 +2981,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg relatedArticleHeaderPaint.setTypeface(AndroidUtilities.bold()); } relatedArticleHeaderPaint.setColor(getTextColor()); - relatedArticleHeaderPaint.setTextSize(AndroidUtilities.dp(15) + additionalSize); + relatedArticleHeaderPaint.setTextSize(dp(15) + additionalSize); paint = relatedArticleHeaderPaint; } else { if (relatedArticleTextPaint == null) { relatedArticleTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); } relatedArticleTextPaint.setColor(getGrayTextColor()); - relatedArticleTextPaint.setTextSize(AndroidUtilities.dp(14) + additionalSize); + relatedArticleTextPaint.setTextSize(dp(14) + additionalSize); paint = relatedArticleTextPaint; } } else if (isListItemBlock(parentBlock) && plainText != null) { @@ -2542,8 +3000,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg listTextNumPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); listTextNumPaint.setColor(getTextColor()); } - listTextPointerPaint.setTextSize(AndroidUtilities.dp(19) + additionalSize); - listTextNumPaint.setTextSize(AndroidUtilities.dp(16) + additionalSize); + listTextPointerPaint.setTextSize(dp(19) + additionalSize); + listTextNumPaint.setTextSize(dp(16) + additionalSize); if (parentBlock instanceof TL_pageBlockListItem && !((TL_pageBlockListItem) parentBlock).parent.pageBlockList.ordered) { paint = listTextPointerPaint; } else { @@ -2558,7 +3016,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (parentBlock instanceof TLRPC.TL_pageBlockPullquote) { result = StaticLayoutEx.createStaticLayout(text, paint, width, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width, maxLines); } else { - result = StaticLayoutEx.createStaticLayout(text, paint, width, align, 1.0f, AndroidUtilities.dp(4), false, TextUtils.TruncateAt.END, width, maxLines); + result = StaticLayoutEx.createStaticLayout(text, paint, width, align, 1.0f, dp(4), false, TextUtils.TruncateAt.END, width, maxLines); } } else { if (text.charAt(text.length() - 1) == '\n') { @@ -2567,7 +3025,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (parentBlock instanceof TLRPC.TL_pageBlockPullquote) { result = new StaticLayout(text, paint, width, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); } else { - result = new StaticLayout(text, paint, width, align, 1.0f, AndroidUtilities.dp(4), false); + result = new StaticLayout(text, paint, width, align, 1.0f, dp(4), false); } } if (result == null) { @@ -2584,7 +3042,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg while ((index = lowerString.indexOf(searchText, startIndex)) >= 0) { startIndex = index + searchText.length(); if (index == 0 || AndroidUtilities.isPunctuationCharacter(lowerString.charAt(index - 1))) { - adapter[0].searchTextOffset.put(searchText + parentBlock + richText + index, textY + result.getLineTop(result.getLineForOffset(index))); + pages[0].adapter.searchTextOffset.put(searchText + parentBlock + richText + index, textY + result.getLineTop(result.getLineForOffset(index))); } } } @@ -2616,7 +3074,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int end = spanned.getSpanEnd(innerSpans[a]); textPath.setCurrentLayout(result, start, 0); int shift = innerSpans[a].getTextPaint() != null ? innerSpans[a].getTextPaint().baselineShift : 0; - textPath.setBaselineShift(shift != 0 ? shift + AndroidUtilities.dp(shift > 0 ? 5 : -2) : 0); + textPath.setBaselineShift(shift != 0 ? shift + dp(shift > 0 ? 5 : -2) : 0); result.getSelectionPath(start, end, textPath); } textPath.setAllowReset(true); @@ -2634,7 +3092,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int end = spanned.getSpanEnd(innerSpans[a]); markPath.setCurrentLayout(result, start, 0); int shift = innerSpans[a].getTextPaint() != null ? innerSpans[a].getTextPaint().baselineShift : 0; - markPath.setBaselineShift(shift != 0 ? shift + AndroidUtilities.dp(shift > 0 ? 5 : -2) : 0); + markPath.setBaselineShift(shift != 0 ? shift + dp(shift > 0 ? 5 : -2) : 0); result.getSelectionPath(start, end, markPath); } markPath.setAllowReset(true); @@ -2702,14 +3160,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg links.removeLink(pressedLink); } pressedLink = new LinkSpanDrawable(selectedLink, null, x, y); - pressedLink.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + pressedLink.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); links.addLink(pressedLink, pressedLinkOwnerLayout); try { LinkPath path = pressedLink.obtainNewPath(); path.setCurrentLayout(layout, pressedStart, 0); TextPaint textPaint = selectedLink.getTextPaint(); int shift = textPaint != null ? textPaint.baselineShift : 0; - path.setBaselineShift(shift != 0 ? shift + AndroidUtilities.dp(shift > 0 ? 5 : -2) : 0); + path.setBaselineShift(shift != 0 ? shift + dp(shift > 0 ? 5 : -2) : 0); layout.getSelectionPath(pressedStart, pressedEnd, path); parentView.invalidate(); } catch (Exception e) { @@ -2749,10 +3207,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (url.toLowerCase().contains(webPageUrl)) { if (TextUtils.isEmpty(anchor)) { - layoutManager[0].scrollToPositionWithOffset(0, 0); + pages[0].layoutManager.scrollToPositionWithOffset(0, 0); checkScrollAnimated(); } else { - scrollToAnchor(anchor); + scrollToAnchor(anchor, true); } isAnchor = true; } @@ -2760,7 +3218,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg anchor = null; } if (!isAnchor) { - openWebpageUrl(pressedLink.getSpan().getUrl(), anchor); + openWebpageUrl(pressedLink.getSpan().getUrl(), anchor, pressedLinkOwnerLayout == null ? null : makeProgress(pressedLink, pressedLinkOwnerLayout)); } } } @@ -2784,6 +3242,46 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } + private Browser.Progress makeProgress(LinkSpanDrawable link, DrawingText text) { + if (link == null) return null; + return new Browser.Progress() { + @Override + public void init() { + loadingText = text; + loadingLinkView = text != null ? text.latestParentView : null; + loadingLink = link.getSpan(); + + links.removeLoading(loadingLinkDrawable, true); + if (text != null) { + loadingLinkDrawable = LinkSpanDrawable.LinkCollector.makeLoading(text.textLayout, link.getSpan(), 0); + final int color = getThemedColor(Theme.key_chat_linkSelectBackground); + loadingLinkDrawable.setColors( + Theme.multAlpha(color, .8f), + Theme.multAlpha(color, 1.3f), + Theme.multAlpha(color, 1f), + Theme.multAlpha(color, 4f) + ); + loadingLinkDrawable.strokePaint.setStrokeWidth(AndroidUtilities.dpf2(1.25f)); + links.addLoading(loadingLinkDrawable, text); + } + + if (loadingLinkView != null) { + loadingLinkView.invalidate(); + } + super.init(); + } + @Override + public void end() { + links.removeLoading(loadingLinkDrawable, true); + if (loadingLinkView != null) { + loadingLinkView.invalidate(); + } + loadingLink = null; + super.end(); + } + }; + } + private void removePressedLink() { if (pressedLink == null && pressedLinkOwnerView == null) { return; @@ -2798,11 +3296,47 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - private void openWebpageUrl(String url, String anchor) { + private void openWebpageUrl(String url, String anchor, Browser.Progress progress) { + if (loadingProgress != null) { + loadingProgress.cancel(); + } + loadingProgress = progress; if (openUrlReqId != 0) { ConnectionsManager.getInstance(currentAccount).cancelRequest(openUrlReqId, false); openUrlReqId = 0; } + + final boolean[] forceBrowser = new boolean[1]; + if (Browser.openInExternalApp(parentActivity, url, false)) { + if (pagesStack.isEmpty()) { + if (sheet != null) { + sheet.dismiss(false); + } + } + return; + } + Utilities.Callback0Return checkInternal = () -> { + if (!Browser.isInternalUri(Uri.parse(url), forceBrowser)) { + return false; + } + if (progress != null) { + progress.onEnd(() -> { + if (sheet != null) { + sheet.dismiss(true); + } + if (loadingProgress == progress) { + loadingProgress = null; + } + }); + } else { + if (sheet != null) { + sheet.dismiss(true); + } + } + Browser.openUrl(parentActivity, Uri.parse(url), true, true, false, progress, null, true); + return true; + }; + int reqId = ++lastReqId; showProgressView(true, true); final TLRPC.TL_messages_getWebPage req = new TLRPC.TL_messages_getWebPage(); @@ -2812,6 +3346,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (openUrlReqId == 0 || reqId != lastReqId) { return; } + if (progress != null) { + progress.end(); + } openUrlReqId = 0; showProgressView(true, false); if (isVisible) { @@ -2821,27 +3358,40 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg MessagesController.getInstance(currentAccount).putChats(res.chats, false); if (res.webpage != null && res.webpage.cached_page instanceof TLRPC.TL_page) { addPageToStack(res.webpage, anchor, 1); - } else { - Browser.openUrl(parentActivity, req.url); + } else if (!checkInternal.run()) { + addPageToStack(req.url, 1); } } else if (response instanceof TLRPC.TL_webPage && ((TLRPC.TL_webPage) response).cached_page instanceof TLRPC.TL_page) { addPageToStack((TLRPC.TL_webPage) response, anchor, 1); - } else { - Browser.openUrl(parentActivity, req.url); + } else if (!checkInternal.run()) { + addPageToStack(req.url, 1); } } })); + if (progress != null) { + progress.onCancel(() -> { + if (lastReqId == reqId && openUrlReqId != 0) { + ConnectionsManager.getInstance(currentAccount).cancelRequest(openUrlReqId, false); + openUrlReqId = 0; + } + if (loadingProgress == progress) { + loadingProgress = null; + } + }); + progress.init(); + } + } @Override public void didReceivedNotification(int id, int account, Object... args) { if (id == NotificationCenter.messagePlayingDidStart) { MessageObject messageObject = (MessageObject) args[0]; - if (listView != null) { - for (int i = 0; i < listView.length; i++) { - int count = listView[i].getChildCount(); + if (pages != null) { + for (int i = 0; i < pages.length; i++) { + int count = pages[i].listView.getChildCount(); for (int a = 0; a < count; a++) { - View view = listView[i].getChildAt(a); + View view = pages[i].listView.getChildAt(a); if (view instanceof BlockAudioCell) { BlockAudioCell cell = (BlockAudioCell) view; cell.updateButtonState(true); @@ -2850,11 +3400,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } } else if (id == NotificationCenter.messagePlayingDidReset || id == NotificationCenter.messagePlayingPlayStateChanged) { - if (listView != null) { - for (int i = 0; i < listView.length; i++) { - int count = listView[i].getChildCount(); + if (pages != null) { + for (int i = 0; i < pages.length; i++) { + int count = pages[i].listView.getChildCount(); for (int a = 0; a < count; a++) { - View view = listView[i].getChildAt(a); + View view = pages[i].listView.getChildAt(a); if (view instanceof BlockAudioCell) { BlockAudioCell cell = (BlockAudioCell) view; MessageObject messageObject = cell.getMessageObject(); @@ -2867,11 +3417,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } else if (id == NotificationCenter.messagePlayingProgressDidChanged) { Integer mid = (Integer) args[0]; - if (listView != null) { - for (int i = 0; i < listView.length; i++) { - int count = listView[i].getChildCount(); + if (pages != null) { + for (int i = 0; i < pages.length; i++) { + int count = pages[i].listView.getChildCount(); for (int a = 0; a < count; a++) { - View view = listView[i].getChildAt(a); + View view = pages[i].listView.getChildAt(a); if (view instanceof BlockAudioCell) { BlockAudioCell cell = (BlockAudioCell) view; MessageObject playing = cell.getMessageObject(); @@ -2896,20 +3446,21 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg refreshThemeColors(); updatePaintColors(); if (windowView != null) { - listView[0].invalidateViews(); - listView[1].invalidateViews(); + pages[0].listView.invalidateViews(); + pages[1].listView.invalidateViews(); windowView.invalidate(); searchPanel.invalidate(); if (progress == 1) { - adapter[0].notifyDataSetChanged(); - adapter[1].notifyDataSetChanged(); + pages[0].adapter.notifyDataSetChanged(); + pages[1].adapter.notifyDataSetChanged(); } } } private void updatePaintSize() { for (int i = 0; i < 2; i++) { - adapter[i].notifyDataSetChanged(); + pages[i].adapter.notifyDataSetChanged(); + pages[i].adapter.resetCachedHeights(); } } @@ -2982,10 +3533,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } private void updatePaintColors() { - backgroundPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - for (int i = 0; i < listView.length; i++) { - listView[i].setGlowColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - } + backgroundPaint.setColor(getThemedColor(Theme.key_iv_background)); +// for (int i = 0; i < pages.length; i++) { +// pages[i].listView.setGlowColor(getThemedColor(Theme.key_windowBackgroundWhite)); +// } if (listTextPointerPaint != null) { listTextPointerPaint.setColor(getTextColor()); @@ -3041,6 +3592,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg for (int a = 0; a < map.size(); a++) { int flags = map.keyAt(a); TextPaint paint = map.valueAt(a); + if (paint == null) continue; if ((flags & TEXT_FLAG_URL) != 0 || (flags & TEXT_FLAG_WEBPAGE_URL) != 0) { paint.setColor(getLinkTextColor()); } else { @@ -3051,7 +3603,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg public void setParentActivity(Activity activity, BaseFragment fragment) { parentFragment = fragment; - currentAccount = fragment != null ? fragment.getCurrentAccount() : UserConfig.selectedAccount; + currentAccount = fragment != null && !(fragment instanceof EmptyBaseFragment) ? fragment.getCurrentAccount() : UserConfig.selectedAccount; NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagePlayingProgressDidChanged); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagePlayingDidReset); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagePlayingPlayStateChanged); @@ -3081,15 +3633,15 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { - if (windowView.movingPage) { + if (windowView != null && (windowView.movingPage || windowView.openingPage)) { int width = getMeasuredWidth(); - int translationX = (int) listView[0].getTranslationX(); + int translationX = (int) pages[0].getTranslationX(); int clipLeft = 0; int clipRight = width; - if (child == listView[1]) { + if (child == pages[1]) { clipRight = translationX; - } else if (child == listView[0]) { + } else if (child == pages[0]) { clipLeft = translationX; } @@ -3099,12 +3651,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restoreToCount(restoreCount); if (translationX != 0) { - if (child == listView[0]) { - final float alpha = Math.max(0, Math.min((width - translationX) / (float) AndroidUtilities.dp(20), 1.0f)); + if (child == pages[0]) { + final float alpha = Math.max(0, Math.min((width - translationX) / (float) dp(20), 1.0f)); layerShadowDrawable.setBounds(translationX - layerShadowDrawable.getIntrinsicWidth(), child.getTop(), translationX, child.getBottom()); layerShadowDrawable.setAlpha((int) (0xff * alpha)); layerShadowDrawable.draw(canvas); - } else if (child == listView[1]) { + } else if (child == pages[1]) { float opacity = Math.min(0.8f, (width - translationX) / (float) width); if (opacity < 0) { opacity = 0; @@ -3127,7 +3679,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg }; windowView.addView(containerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT)); //containerView.setFitsSystemWindows(true); - if (Build.VERSION.SDK_INT >= 21) { + if (Build.VERSION.SDK_INT >= 21 && sheet == null) { windowView.setFitsSystemWindows(true); containerView.setOnApplyWindowInsetsListener((v, insets) -> { if (Build.VERSION.SDK_INT >= 30) { @@ -3150,79 +3702,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg fullscreenTextureView = new TextureView(activity); - listView = new RecyclerListView[2]; - adapter = new WebpageAdapter[2]; - layoutManager = new LinearLayoutManager[2]; - for (int i = 0; i < listView.length; i++) { - WebpageAdapter webpageAdapter = adapter[i] = new WebpageAdapter(parentActivity); - listView[i] = new RecyclerListView(activity) { - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - int count = getChildCount(); - for (int a = 0; a < count; a++) { - View child = getChildAt(a); - if (child.getTag() instanceof Integer) { - Integer tag = (Integer) child.getTag(); - if (tag == 90) { - int bottom = child.getBottom(); - if (bottom < getMeasuredHeight()) { - int height = getMeasuredHeight(); - child.layout(0, height - child.getMeasuredHeight(), child.getMeasuredWidth(), height); - break; - } - } - } - } - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent e) { - if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { - pressedLink = null; - pressedLinkOwnerLayout = null; - pressedLinkOwnerView = null; - } else if (pressedLinkOwnerLayout != null && pressedLink != null && e.getAction() == MotionEvent.ACTION_UP) { - checkLayoutForLinks(webpageAdapter, e, pressedLinkOwnerView, pressedLinkOwnerLayout, 0, 0); - } - return super.onInterceptTouchEvent(e); - } - - @Override - public boolean onTouchEvent(MotionEvent e) { - if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { - pressedLink = null; - pressedLinkOwnerLayout = null; - pressedLinkOwnerView = null; - } - return super.onTouchEvent(e); - } - - @Override - public void setTranslationX(float translationX) { - super.setTranslationX(translationX); - if (windowView.movingPage) { - containerView.invalidate(); - float progress = translationX / getMeasuredWidth(); - setCurrentHeaderHeight((int) (windowView.startMovingHeaderHeight + (AndroidUtilities.dp(56) - windowView.startMovingHeaderHeight) * progress)); - } - } - - @Override - protected void dispatchDraw(Canvas canvas) { - checkVideoPlayer(); - super.dispatchDraw(canvas); - } - }; - ((DefaultItemAnimator) listView[i].getItemAnimator()).setDelayAnimations(false); - listView[i].setLayoutManager(layoutManager[i] = new LinearLayoutManager(parentActivity, LinearLayoutManager.VERTICAL, false)); - listView[i].setAdapter(webpageAdapter); - listView[i].setClipToPadding(false); - listView[i].setVisibility(i == 0 ? View.VISIBLE : View.GONE); - listView[i].setPadding(0, AndroidUtilities.dp(56), 0, 0); - listView[i].setTopGlowOffset(AndroidUtilities.dp(56)); - containerView.addView(listView[i], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - listView[i].setOnItemLongClickListener((view, position) -> { + pages = new PageLayout[2]; + for (int i = 0; i < pages.length; i++) { + PageLayout page = pages[i] = new PageLayout(activity, getResourcesProvider()); + page.setVisibility(i == 0 ? View.VISIBLE : View.GONE); + containerView.addView(page, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL, 0, !BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 56 : 0, 0, BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 24 : 0)); + page.listView.setOnItemLongClickListener((view, position) -> { if (view instanceof BlockRelatedArticlesCell) { BlockRelatedArticlesCell cell = (BlockRelatedArticlesCell) view; showCopyPopup(cell.currentBlock.parent.articles.get(cell.currentBlock.num).url); @@ -3230,7 +3715,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } return false; }); - listView[i].setOnItemClickListener((view, position, x, y) -> { + page.listView.setOnItemClickListener((view, position, x, y) -> { + if (sheet != null) { + position--; + if (position < 0) return; + } if (textSelectionHelper != null) { if (textSelectionHelper.isInSelectionMode()) { textSelectionHelper.clear(); @@ -3238,17 +3727,18 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } textSelectionHelper.clear(); } - if (view instanceof ReportCell && webpageAdapter.currentPage != null) { + final WebpageAdapter adapter = page.getAdapter(); + if (view instanceof ReportCell && adapter.currentPage != null) { ReportCell cell = (ReportCell) view; if (previewsReqId != 0 || cell.hasViews && x < view.getMeasuredWidth() / 2) { return; } TLObject object = MessagesController.getInstance(currentAccount).getUserOrChat("previews"); if (object instanceof TLRPC.TL_user) { - openPreviewsChat((TLRPC.User) object, webpageAdapter.currentPage.id); + openPreviewsChat((TLRPC.User) object, adapter.currentPage.id); } else { final int currentAccount = UserConfig.selectedAccount; - final long pageId = webpageAdapter.currentPage.id; + final long pageId = adapter.currentPage.id; showProgressView(true, true); TLRPC.TL_contacts_resolveUsername req = new TLRPC.TL_contacts_resolveUsername(); req.username = "previews"; @@ -3268,8 +3758,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } })); } - } else if (position >= 0 && position < webpageAdapter.localBlocks.size()) { - TLRPC.PageBlock pageBlock = webpageAdapter.localBlocks.get(position); + } else if (position >= 0 && position < adapter.localBlocks.size()) { + TLRPC.PageBlock pageBlock = adapter.localBlocks.get(position); TLRPC.PageBlock originalBlock = pageBlock; pageBlock = getLastNonListPageBlock(pageBlock); if (pageBlock instanceof TL_pageBlockDetailsChild) { @@ -3282,7 +3772,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg close(false, true); } else if (pageBlock instanceof TL_pageBlockRelatedArticlesChild) { TL_pageBlockRelatedArticlesChild pageBlockRelatedArticlesChild = (TL_pageBlockRelatedArticlesChild) pageBlock; - openWebpageUrl(pageBlockRelatedArticlesChild.parent.articles.get(pageBlockRelatedArticlesChild.num).url, null); + openWebpageUrl(pageBlockRelatedArticlesChild.parent.articles.get(pageBlockRelatedArticlesChild.num).url, null, null); } else if (pageBlock instanceof TLRPC.TL_pageBlockDetails) { view = getLastNonListCell(view); if (!(view instanceof BlockDetailsCell)) { @@ -3291,16 +3781,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg pressedLinkOwnerLayout = null; pressedLinkOwnerView = null; - int index = webpageAdapter.blocks.indexOf(originalBlock); + int index = adapter.blocks.indexOf(originalBlock); if (index < 0) { return; } TLRPC.TL_pageBlockDetails pageBlockDetails = (TLRPC.TL_pageBlockDetails) pageBlock; pageBlockDetails.open = !pageBlockDetails.open; - int oldCount = webpageAdapter.getItemCount(); - webpageAdapter.updateRows(); - int newCount = webpageAdapter.getItemCount(); + int oldCount = adapter.getItemCount(); + adapter.updateRows(); + int newCount = adapter.getItemCount(); int changeCount = Math.abs(newCount - oldCount); BlockDetailsCell cell = (BlockDetailsCell) view; @@ -3308,99 +3798,198 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg cell.invalidate(); if (changeCount != 0) { if (pageBlockDetails.open) { - webpageAdapter.notifyItemRangeInserted(position + 1, changeCount); + adapter.notifyItemRangeInserted(position + 1, changeCount); } else { - webpageAdapter.notifyItemRangeRemoved(position + 1, changeCount); + adapter.notifyItemRangeRemoved(position + 1, changeCount); } } } } }); - listView[i].setOnScrollListener(new RecyclerView.OnScrollListener() { - - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - textSelectionHelper.stopScrolling(); - } - } - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - if (recyclerView.getChildCount() == 0) { - return; - } - recyclerView.invalidate(); - textSelectionHelper.onParentScrolled(); - headerView.invalidate(); - checkScroll(dy); - } - }); } + bulletinContainer = new FrameLayout(activity); + containerView.addView(bulletinContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL, 0, !BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 56 : 0, 0, BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 24 : 0)); headerPaint.setColor(0xff000000); statusBarPaint.setColor(0xff000000); headerProgressPaint.setColor(0xff242426); navigationBarPaint.setColor(Color.BLACK); - headerView = new FrameLayout(activity) { + actionBar = new WebActionBar(activity, getResourcesProvider()) { @Override - protected void onDraw(Canvas canvas) { - int width = getMeasuredWidth(); - int height = getMeasuredHeight(); - canvas.drawRect(0, 0, width, height, headerPaint); - if (layoutManager == null) { - return; + protected void onOpenedMenu() { + pages[0].listView.stopScroll(); + checkScrollAnimated(); + } + @Override + protected void onSearchUpdated(String s) { + processSearch(s.toLowerCase()); + } + @Override + protected void onColorsUpdated() { + if (sheet != null) { + sheet.checkNavColor(); } - int first = layoutManager[0].findFirstVisibleItemPosition(); - int last = layoutManager[0].findLastVisibleItemPosition(); - int count = layoutManager[0].getItemCount(); - View view; - if (last >= count - 2) { - view = layoutManager[0].findViewByPosition(count - 2); - } else { - view = layoutManager[0].findViewByPosition(first); + } + @Override + protected void onScrolledProgress(float delta) { + pages[0].addProgress(delta); + } + + @Override + protected void onAddressColorsChanged(int backgroundColor, int textColor) { + if (addressBarList != null) { + addressBarList.setColors(backgroundColor, textColor); } - if (view == null) { - return; + } + + @Override + protected void onAddressingProgress(float progress) { + super.onAddressingProgress(progress); + if (addressBarList != null) { + addressBarList.setOpenProgress(progress); } - - float itemProgress = width / (float) (count - 1); - - int childCount = layoutManager[0].getChildCount(); - - float viewHeight = view.getMeasuredHeight(); - float viewProgress; - if (last >= count - 2) { - viewProgress = (count - 2 - first) * itemProgress * (listView[0].getMeasuredHeight() - view.getTop()) / viewHeight; - } else { - viewProgress = itemProgress * (1.0f - (Math.min(0, view.getTop() - listView[0].getPaddingTop()) + viewHeight) / viewHeight); + if (sheet != null) { + sheet.checkNavColor(); } - float progress = first * itemProgress + viewProgress; + } - canvas.drawRect(0, 0, progress, height, headerProgressPaint); + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + ((MarginLayoutParams) addressBarList.getLayoutParams()).topMargin = getMeasuredHeight(); + } + + @Override + public void showAddress(boolean show, boolean animated) { + super.showAddress(show, animated); + if (addressBarList != null) { + addressBarList.setOpened(show); + } } }; - headerView.setWillNotDraw(false); - containerView.addView(headerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56)); - headerView.setOnClickListener(v -> listView[0].smoothScrollToPosition(0)); + actionBar.occupyStatusBar(sheet != null && !BOTTOM_ACTION_BAR); + containerView.addView(actionBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, BOTTOM_ACTION_BAR ? Gravity.BOTTOM : Gravity.TOP)); + actionBar.setOnClickListener(v -> { + if (actionBar.longClicked) return; + final PageLayout page = pages[0]; + if (page.isWeb()) { + if (page.getWebView() != null && !actionBar.isAddressing()) { + if (addressBarList != null) { + BotWebViewContainer.MyWebView webView = page.getWebView(); + final String title = webView != null ? webView.getTitle() : null; + final String url = BotWebViewContainer.magic2tonsite(webView != null ? webView.getUrl() : null); + addressBarList.setCurrent( + webView != null ? webView.getFavicon() : null, + TextUtils.isEmpty(title) ? getString(R.string.WebEmpty) : title, + TextUtils.isEmpty(url) ? "about:blank" : url, - titleTextView = new SimpleTextView(activity); - titleTextView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); - titleTextView.setTextSize(20); - titleTextView.setTypeface(AndroidUtilities.bold()); - titleTextView.setTextColor(0xffb3b3b3); - titleTextView.setPivotX(0.0f); - titleTextView.setPivotY(AndroidUtilities.dp(28)); - headerView.addView(titleTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56, Gravity.LEFT | Gravity.TOP, 72, 0, 48 * 2, 0)); + () -> { + actionBar.addressEditText.setText(TextUtils.isEmpty(url) ? "about:blank" : url); + actionBar.addressEditText.setSelection(actionBar.addressEditText.getText().length()); + AndroidUtilities.showKeyboard(actionBar.addressEditText); + }, + query -> { + if (TextUtils.isEmpty(query)) return; + if (page.getWebView() == null) return; + SpannableStringBuilder sb = new SpannableStringBuilder(query.trim()); + AndroidUtilities.addLinksSafe(sb, Linkify.WEB_URLS, false, true); + URLSpan[] spans = sb.getSpans(0, sb.length(), URLSpan.class); + int start = sb.length(), end = 0; + for (int i = 0; i < spans.length; ++i) { + start = Math.min(sb.getSpanStart(spans[i]), start); + end = Math.max(sb.getSpanEnd(spans[i]), end); + } + actionBar.showAddress(false, true); + Uri uri = Utilities.uriParseSafe(query); + if (spans.length > 0 && start == 0 && end > 0 || uri != null && uri.getScheme() != null) { + if (uri != null && uri.getScheme() == null && uri.getHost() == null && uri.getPath() != null) { + query = Browser.replace(uri, "https", uri.getPath(), "/"); + } + page.getWebView().loadUrl(query); + } else { + AddressBarList.pushRecentSearch(activity, query); + page.getWebView().loadUrl(SearchEngine.getCurrent().getSearchURL(query)); + } + }, + query -> { + if (TextUtils.isEmpty(query)) return; + actionBar.addressEditText.setText(query); + actionBar.addressEditText.setSelection(actionBar.addressEditText.getText().length()); + AndroidUtilities.showKeyboard(actionBar.addressEditText); + }, + ArticleViewer.this::openBookmark, + view -> { + actionBar.showAddress(false, true); + AndroidUtilities.hideKeyboard(actionBar.addressEditText); + final String link = TextUtils.isEmpty(url) ? "about:blank" : url; + AndroidUtilities.addToClipboard(link); + BulletinFactory.of(page.webViewContainer, getResourcesProvider()).createCopyLinkBulletin().show(true); + } + ); + } + actionBar.showAddress("", url -> { + if (TextUtils.isEmpty(url)) return; + if (page.getWebView() == null) return; + SpannableStringBuilder sb = new SpannableStringBuilder(url.trim()); + AndroidUtilities.addLinksSafe(sb, Linkify.WEB_URLS, false, true); + URLSpan[] spans = sb.getSpans(0, sb.length(), URLSpan.class); + int start = sb.length(), end = 0; + for (int i = 0; i < spans.length; ++i) { + start = Math.min(sb.getSpanStart(spans[i]), start); + end = Math.max(sb.getSpanEnd(spans[i]), end); + } + Uri uri = Utilities.uriParseSafe(url); + if (spans.length > 0 && start == 0 && end > 0 || uri != null && uri.getScheme() != null) { + if (uri.getScheme() == null && uri.getHost() == null && uri.getPath() != null) { + url = Browser.replace(uri, "https", uri.getPath(), "/"); + } + page.getWebView().loadUrl(url); + } else { + AddressBarList.pushRecentSearch(activity, url); + page.getWebView().loadUrl(SearchEngine.getCurrent().getSearchURL(url)); + } + }); + } + } else if (sheet != null) { + SmoothScroller s = new SmoothScroller(activity); + if (sheet.halfSize()) { + s.setTargetPosition(1); + s.setOffset(-dp(56 - 24)); + } else { + s.setTargetPosition(0); + } + page.layoutManager.startSmoothScroll(s); + } else { + page.listView.smoothScrollToPosition(0); + } + }); + actionBar.addressEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + @Override + public void afterTextChanged(Editable s) { + if (!actionBar.isAddressing()) return; + if (addressBarList == null) return; + addressBarList.setInput(s == null ? null : s.toString()); + } + }); - lineProgressView = new LineProgressView(activity); - lineProgressView.setProgressColor(0xffffffff); - lineProgressView.setPivotX(0.0f); - lineProgressView.setPivotY(AndroidUtilities.dp(2)); - headerView.addView(lineProgressView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 2, Gravity.LEFT | Gravity.BOTTOM, 0, 0, 0, 1)); + addressBarList = new AddressBarList(activity); + addressBarList.setOpenProgress(0f); + addressBarList.listView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (addressBarList.listView.scrollingByUser) { + AndroidUtilities.hideKeyboard(actionBar.addressEditText); + } + } + }); + containerView.addView(addressBarList, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); lineProgressTickRunnable = () -> { - float progressLeft = 0.7f - lineProgressView.getCurrentProgress(); + float progressLeft = 0.7f - actionBar.lineProgressView.getCurrentProgress(); if (progressLeft > 0.0f) { float tick; if (progressLeft < 0.25f) { @@ -3408,286 +3997,470 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } else { tick = 0.02f; } - lineProgressView.setProgress(lineProgressView.getCurrentProgress() + tick, true); + actionBar.lineProgressView.setProgress(actionBar.lineProgressView.getCurrentProgress() + tick, true); AndroidUtilities.runOnUIThread(lineProgressTickRunnable, 100); } }; - - menuContainer = new FrameLayout(activity); - headerView.addView(menuContainer, LayoutHelper.createFrame(48, 56, Gravity.TOP | Gravity.RIGHT)); - - searchShadow = new View(activity); - searchShadow.setBackgroundResource(R.drawable.header_shadow); - searchShadow.setAlpha(0.0f); - containerView.addView(searchShadow, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 3, Gravity.LEFT | Gravity.TOP, 0, 56, 0, 0)); - - searchContainer = new FrameLayout(parentActivity); - searchContainer.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - searchContainer.setVisibility(View.INVISIBLE); - if (Build.VERSION.SDK_INT < 21) { - searchContainer.setAlpha(0.0f); - } - headerView.addView(searchContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56)); - - searchField = new EditTextBoldCursor(parentActivity) { - @Override - public boolean onTouchEvent(MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (!AndroidUtilities.showKeyboard(this)) { - clearFocus(); - requestFocus(); - } - } - return super.onTouchEvent(event); - } - }; - searchField.setCursorWidth(1.5f); - searchField.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setCursorColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); - searchField.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteHintText)); - searchField.setSingleLine(true); - searchField.setHint(LocaleController.getString("Search", R.string.Search)); - searchField.setBackgroundResource(0); - searchField.setPadding(0, 0, 0, 0); - int inputType = searchField.getInputType() | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS; - searchField.setInputType(inputType); - if (Build.VERSION.SDK_INT < 23) { - searchField.setCustomSelectionActionModeCallback(new ActionMode.Callback() { - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - public void onDestroyActionMode(ActionMode mode) { - - } - - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - return false; - } - - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - return false; - } - }); - } - searchField.setOnEditorActionListener((v, actionId, event) -> { - if (event != null && (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == KeyEvent.KEYCODE_SEARCH || event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { - AndroidUtilities.hideKeyboard(searchField); - } - return false; - }); - searchField.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (ignoreOnTextChange) { - ignoreOnTextChange = false; - return; - } - processSearch(s.toString().toLowerCase()); - if (clearButton != null) { - if (TextUtils.isEmpty(s)) { - if (clearButton.getTag() != null) { - clearButton.setTag(null); - clearButton.clearAnimation(); - if (animateClear) { - clearButton.animate().setInterpolator(new DecelerateInterpolator()).alpha(0.0f).setDuration(180).scaleY(0.0f).scaleX(0.0f).rotation(45).withEndAction(() -> clearButton.setVisibility(View.INVISIBLE)).start(); - } else { - clearButton.setAlpha(0.0f); - clearButton.setRotation(45); - clearButton.setScaleX(0.0f); - clearButton.setScaleY(0.0f); - clearButton.setVisibility(View.INVISIBLE); - animateClear = true; - } - } - } else { - if (clearButton.getTag() == null) { - clearButton.setTag(1); - clearButton.clearAnimation(); - clearButton.setVisibility(View.VISIBLE); - if (animateClear) { - clearButton.animate().setInterpolator(new DecelerateInterpolator()).alpha(1.0f).setDuration(180).scaleY(1.0f).scaleX(1.0f).rotation(0).start(); - } else { - clearButton.setAlpha(1.0f); - clearButton.setRotation(0); - clearButton.setScaleX(1.0f); - clearButton.setScaleY(1.0f); - animateClear = true; - } - } - } - } - } - - @Override - public void afterTextChanged(Editable s) { - - } - }); - searchField.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_SEARCH); - searchField.setTextIsSelectable(false); - searchContainer.addView(searchField, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 36, Gravity.CENTER_VERTICAL, 72, 0, 48, 0)); - - clearButton = new ImageView(parentActivity) { - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - clearAnimation(); - if (getTag() == null) { - clearButton.setVisibility(INVISIBLE); - clearButton.setAlpha(0.0f); - clearButton.setRotation(45); - clearButton.setScaleX(0.0f); - clearButton.setScaleY(0.0f); - } else { - clearButton.setAlpha(1.0f); - clearButton.setRotation(0); - clearButton.setScaleX(1.0f); - clearButton.setScaleY(1.0f); - } - } - }; - clearButton.setImageDrawable(new CloseProgressDrawable2() { - @Override - protected int getCurrentColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteBlackText); - } - }); - clearButton.setScaleType(ImageView.ScaleType.CENTER); - clearButton.setAlpha(0.0f); - clearButton.setRotation(45); - clearButton.setScaleX(0.0f); - clearButton.setScaleY(0.0f); - clearButton.setOnClickListener(v -> { - if (searchField.length() != 0) { - searchField.setText(""); - } - searchField.requestFocus(); - AndroidUtilities.showKeyboard(searchField); - }); - clearButton.setContentDescription(LocaleController.getString("ClearButton", R.string.ClearButton)); - searchContainer.addView(clearButton, LayoutHelper.createFrame(48, LayoutHelper.MATCH_PARENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT)); - - backButton = new ImageView(activity); - backButton.setScaleType(ImageView.ScaleType.CENTER); - backDrawable = new BackDrawable(false); - backDrawable.setAnimationTime(200.0f); - backDrawable.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - backDrawable.setRotatedColor(0xffb3b3b3); - backDrawable.setRotation(1.0f, false); - backButton.setImageDrawable(backDrawable); - backButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); - headerView.addView(backButton, LayoutHelper.createFrame(54, 56)); - backButton.setOnClickListener(v -> { - /*if (collapsed) { - uncollapse(); - } else { - collapse(); - }*/ - if (searchContainer.getTag() != null) { - showSearch(false); + actionBar.backButton.setOnClickListener(v -> { + if (actionBar.isSearching()) { + actionBar.showSearch(false, true); + } else if (actionBar.isAddressing()) { + actionBar.showAddress(false, true); + } else if (isFirstArticle() && pages[0].hasBackButton()) { + pages[0].back(); + } else if (pagesStack.size() > 1) { + goBack(); + } else if (sheet != null) { + sheet.dismiss(false); } else { close(true, true); } }); - backButton.setContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack)); + actionBar.backButton.setOnLongClickListener(v -> { + if (pages[0] == null) return false; - menuButton = new ActionBarMenuItem(parentActivity, null, Theme.ACTION_BAR_WHITE_SELECTOR_COLOR, 0xffb3b3b3) { - @Override - public void toggleSubMenu() { - super.toggleSubMenu(); - listView[0].stopScroll(); - checkScrollAnimated(); + final float wasRotation = actionBar.backButtonDrawable.getRotation(); + ItemOptions options = ItemOptions.makeOptions(sheet != null ? sheet.windowView : windowView, v); + + final int backgroundColor = SharedConfig.adaptableColorInBrowser ? Theme.getColor(Theme.key_iv_background) : pages[0].getBackgroundColor(); + final int textColor = SharedConfig.adaptableColorInBrowser ? Theme.getColor(Theme.key_windowBackgroundWhiteBlackText) : AndroidUtilities.computePerceivedBrightness(pages[0].getBackgroundColor()) >= .721f ? Color.BLACK : Color.WHITE; + final int subtextColor = Theme.multAlpha(textColor, .65f); + + final BotWebViewContainer.MyWebView webView = pages[0].getWebView(); + if (webView != null) { + final WebBackForwardList history = webView.copyBackForwardList(); + final int currentIndex = history.getCurrentIndex(); + if (history.getCurrentIndex() > 0) { + for (int i = 0; i < currentIndex; ++i) { + WebHistoryItem item = history.getItemAtIndex(i); + final int index = i; + options.add(item.getTitle(), () -> { + for (int j = 0; j < (currentIndex - index); ++j) webView.goBack(); + }); + ActionBarMenuSubItem menuItem = options.getLast(); + if (menuItem != null) { + menuItem.setSubtext(item.getUrl()); + Bitmap bitmap = webView.getFavicon(item.getUrl()); + if (bitmap == null) { + bitmap = item.getFavicon(); + } + final Bitmap finalBitmap = bitmap; + final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + menuItem.setTextAndIcon(item.getTitle(), 0, new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + if (finalBitmap != null) { + canvas.save(); + canvas.translate(getBounds().left, getBounds().top); + canvas.scale(getBounds().width() / (float) finalBitmap.getWidth(), getBounds().height() / (float) finalBitmap.getHeight()); + canvas.drawBitmap(finalBitmap, 0, 0, paint); + canvas.restore(); + } + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + + } + + @Override + public void setAlpha(int alpha) { + + } + + @Override + public int getIntrinsicHeight() { + return dp(24); + } + + @Override + public int getIntrinsicWidth() { + return dp(24); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + }); + menuItem.setTextColor(textColor); + menuItem.setSubtextColor(subtextColor); + } + } + } } - }; - menuButton.setLayoutInScreen(true); - menuButton.setDuplicateParentStateEnabled(false); - menuButton.setClickable(true); - menuButton.setIcon(R.drawable.ic_ab_other); - menuButton.addSubItem(search_item, R.drawable.msg_search, LocaleController.getString("Search", R.string.Search)); - menuButton.addSubItem(share_item, R.drawable.msg_share, LocaleController.getString("ShareFile", R.string.ShareFile)); - menuButton.addSubItem(open_item, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp)); - menuButton.addSubItem(settings_item, R.drawable.msg_settings_old, LocaleController.getString("Settings", R.string.Settings)); - menuButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); - menuButton.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); - menuContainer.addView(menuButton, LayoutHelper.createFrame(48, 56)); - progressView = new ContextProgressView(activity, 2); - progressView.setVisibility(View.GONE); - menuContainer.addView(progressView, LayoutHelper.createFrame(48, 56)); - menuButton.setOnClickListener(v -> menuButton.toggleSubMenu()); - menuButton.setDelegate(id -> { - if (adapter[0].currentPage == null || parentActivity == null) { + for (int i = pagesStack.size() - 2; i >= 0; --i) { + Object obj = pagesStack.get(i); + if (obj instanceof CachedWeb) { + CachedWeb web = (CachedWeb) obj; + final int index = i; + options.add(web.getTitle(), () -> { + goBack(index); + }); + ActionBarMenuSubItem item = options.getLast(); + if (item != null) { + item.setSubtext(web.lastUrl); + Bitmap bitmap = webView != null ? webView.getFavicon(web.lastUrl) : null; + if (bitmap == null) { + bitmap = web.favicon; + } + final Bitmap finalBitmap = bitmap; + final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + item.setTextAndIcon(web.getTitle(), 0, new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + if (finalBitmap != null) { + canvas.save(); + canvas.translate(getBounds().left, getBounds().top); + canvas.scale(getBounds().width() / (float) finalBitmap.getWidth(), getBounds().height() / (float) finalBitmap.getHeight()); + canvas.drawBitmap(finalBitmap, 0, 0, paint); + canvas.restore(); + } + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + + } + + @Override + public void setAlpha(int alpha) { + + } + + @Override + public int getIntrinsicHeight() { + return dp(24); + } + + @Override + public int getIntrinsicWidth() { + return dp(24); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + }); + item.setTextColor(textColor); + item.setSubtextColor(subtextColor); + item.setColors(textColor, textColor); + } + } else if (obj instanceof TLRPC.WebPage) { + TLRPC.WebPage webpage = (TLRPC.WebPage) obj; + final int index = i; + options.add(webpage.title, () -> { + goBack(index); + }); + ActionBarMenuSubItem item = options.getLast(); + if (item != null) { + item.setTextAndIcon(webpage.title, R.drawable.msg_instant); + item.setTextColor(textColor); + if (!TextUtils.isEmpty(webpage.site_name)) { + item.setSubtext(webpage.site_name); + } + item.setSubtextColor(subtextColor); + item.imageView.getLayoutParams().width = dp(24); + item.imageView.setScaleX(1.45f); + item.imageView.setScaleY(1.45f); + item.setColors(textColor, textColor); + } + } + } + options.setScrimViewBackground(Theme.createCircleDrawable(dp(40), actionBar.getBackgroundColor())); + options.setBackgroundColor(backgroundColor); + options.updateColors(); + if (options.getItemsCount() <= 0) return false; + checkScrollAnimated(() -> { + actionBar.backButtonDrawable.setRotation(0f, true); + options.setOnDismiss(() -> { + actionBar.backButtonDrawable.setRotation(wasRotation, true); + }); + options.show(); + }); + + return true; + }); +// actionBar.forwardButton.setOnLongClickListener(v -> { +// if (pages[0] == null) return false; +// final BotWebViewContainer.MyWebView webView = pages[0].getWebView(); +// if (webView == null) return false; +// final WebBackForwardList history = webView.copyBackForwardList(); +// final int currentIndex = history.getCurrentIndex(); +// if (history.getSize() - (currentIndex + 1) <= 0) return false; +// +// ItemOptions options = ItemOptions.makeOptions(sheet != null ? sheet.windowView : windowView, v); +// final int textColor = AndroidUtilities.computePerceivedBrightness(pages[0].getBackgroundColor()) >= .721f ? Color.BLACK : Color.WHITE; +// final int subtextColor = Theme.multAlpha(textColor, .65f); +// +// for (int i = currentIndex + 1; i < history.getSize(); ++i) { +// WebHistoryItem item = history.getItemAtIndex(i); +// final int index = i; +// options.add(item.getTitle(), () -> { +// for (int j = 0; j < (index - currentIndex); ++j) webView.goForward(); +// }); +// ActionBarMenuSubItem menuItem = options.getLast(); +// if (menuItem != null) { +// menuItem.setSubtext(item.getUrl()); +// Bitmap bitmap = webView.getFavicon(item.getUrl()); +// if (bitmap == null) { +// bitmap = item.getFavicon(); +// } +// final Bitmap finalBitmap = bitmap; +// final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); +// menuItem.setTextAndIcon(item.getTitle(), 0, new Drawable() { +// @Override +// public void draw(@NonNull Canvas canvas) { +// if (finalBitmap != null) { +// canvas.save(); +// canvas.translate(getBounds().left, getBounds().top); +// canvas.scale(getBounds().width() / (float) finalBitmap.getWidth(), getBounds().height() / (float) finalBitmap.getHeight()); +// canvas.drawBitmap(finalBitmap, 0, 0, paint); +// canvas.restore(); +// } +// } +// @Override +// public void setColorFilter(@Nullable ColorFilter colorFilter) {} +// @Override +// public void setAlpha(int alpha) {} +// @Override +// public int getIntrinsicHeight() { +// return dp(24); +// } +// @Override +// public int getIntrinsicWidth() { +// return dp(24); +// } +// @Override +// public int getOpacity() { +// return PixelFormat.TRANSPARENT; +// } +// }); +// menuItem.setColors(textColor, textColor); +// menuItem.setSubtextColor(subtextColor); +// } +// } +// options.setScrimViewBackground(Theme.createCircleDrawable(dp(40), actionBar.getBackgroundColor())); +// options.setBackgroundColor(pages[0].getBackgroundColor()); +// checkScrollAnimated(options::show); +// +// return true; +// }); + + actionBar.setMenuListener(id -> { + if (pages[0].isArticle() && pages[0].adapter.currentPage == null || parentActivity == null) { return; } - if (id == search_item) { - showSearch(true); - } else if (id == share_item) { - showDialog(new ShareAlert(parentActivity, null, adapter[0].currentPage.url, false, adapter[0].currentPage.url, false)); - } else if (id == open_item) { - String webPageUrl; - if (!TextUtils.isEmpty(adapter[0].currentPage.cached_page.url)) { - webPageUrl = adapter[0].currentPage.cached_page.url; + if (id == WebActionBar.search_item) { + actionBar.showSearch(true, true); + } else if (id == WebActionBar.share_item) { + String url; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + url = pages[0].getWebView().getUrl(); } else { - webPageUrl = adapter[0].currentPage.url; + if (pages[0].adapter.currentPage == null) return; + url = pages[0].adapter.currentPage.url; + } + url = BotWebViewContainer.magic2tonsite(url); + showDialog(new ShareAlert(parentActivity, null, url, false, url, false, AndroidUtilities.computePerceivedBrightness(actionBar.getBackgroundColor()) < .721f ? new DarkThemeResourceProvider() : null)); + } else if (id == WebActionBar.bookmark_item) { + String url; + final FrameLayout container; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + url = pages[0].getWebView().getUrl(); + container = pages[0].webViewContainer; + } else { + if (pages[0].adapter.currentPage == null) return; + url = pages[0].adapter.currentPage.url; + container = pages[0]; + } + url = BotWebViewContainer.magic2tonsite(url); + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + SendMessagesHelper.getInstance(currentAccount).sendMessage(SendMessagesHelper.SendMessageParams.of(url, selfId)); + TLRPC.TL_message msg = new TLRPC.TL_message(); + msg.peer_id = new TLRPC.TL_peerUser(); + msg.peer_id.user_id = selfId; + msg.from_id = new TLRPC.TL_peerUser(); + msg.from_id.user_id = selfId; + msg.message = url; + msg.media = new TLRPC.TL_messageMediaWebPage(); + msg.media.webpage = new TLRPC.TL_webPage(); + msg.media.webpage.url = url; + msg.media.webpage.display_url = url; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.bookmarkAdded, new MessageObject(currentAccount, msg, false, false)); + BulletinFactory.of(container, getResourcesProvider()).createSimpleBulletin(R.raw.saved_messages, AndroidUtilities.replaceSingleTag(LocaleController.getString(R.string.WebBookmarkedToast), () -> { + if (sheet != null) { + sheet.dismiss(true); + } + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + Bundle args = new Bundle(); + args.putLong("user_id", selfId); + lastFragment.presentFragment(new ChatActivity(args)); + } + })).show(true); + } else if (id == WebActionBar.bookmarks_item) { + BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); + params.transitionFromLeft = true; + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.showAsSheet(new BookmarksFragment(sheet == null ? null : () -> sheet.dismiss(true), ArticleViewer.this::openBookmark), params); + } + } else if (id == WebActionBar.history_item) { + BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); + params.transitionFromLeft = true; + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.showAsSheet(new HistoryFragment(sheet == null ? null : () -> sheet.dismiss(true), ArticleViewer.this::openHistoryEntry), params); + } + } else if (id == WebActionBar.forward_item) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().goForward(); + } + } else if (id == WebActionBar.open_item) { + String webPageUrl, webPageOpenUrl; + final FrameLayout container; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + webPageUrl = pages[0].getWebView().getUrl(); + webPageOpenUrl = pages[0].getWebView().getOpenURL(); + container = pages[0].webViewContainer; + } else { + if (pages[0].adapter.currentPage == null) return; + webPageUrl = pages[0].adapter.currentPage.url; + webPageOpenUrl = null; + container = pages[0]; } if (parentActivity == null || parentActivity.isFinishing()) return; - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webPageUrl)); - intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); - intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, parentActivity.getPackageName()); - parentActivity.startActivity(intent); - } else if (id == settings_item) { - BottomSheet.Builder builder = new BottomSheet.Builder(parentActivity); - builder.setApplyTopPadding(false); - - LinearLayout settingsContainer = new LinearLayout(parentActivity); - settingsContainer.setPadding(0, 0, 0, AndroidUtilities.dp(4)); - settingsContainer.setOrientation(LinearLayout.VERTICAL); - - HeaderCell headerCell = new HeaderCell(parentActivity); - headerCell.setText(LocaleController.getString("FontSize", R.string.FontSize)); - settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 1, 3, 0)); - - TextSizeCell sizeCell = new TextSizeCell(parentActivity); - settingsContainer.addView(sizeCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 0, 3, 0)); - - headerCell = new HeaderCell(parentActivity); - headerCell.setText(LocaleController.getString("FontType", R.string.FontType)); - settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 4, 3, 2)); - - for (int a = 0; a < 2; a++) { - fontCells[a] = new FontCell(parentActivity); - switch (a) { - case 0: - fontCells[a].setTextAndTypeface(LocaleController.getString("Default", R.string.Default), Typeface.DEFAULT); - break; - case 1: - fontCells[a].setTextAndTypeface("Serif", Typeface.SERIF); - break; + if (webPageUrl == null) return; + final String open_domain = AndroidUtilities.getHostAuthority(webPageOpenUrl, true); + final String domain = AndroidUtilities.getHostAuthority(webPageUrl, true); + final Runnable open = () -> { + Browser.openInExternalBrowser(parentActivity, webPageUrl, false); + }; + final Utilities.Callback restrict = waitForResume -> { + RestrictedDomainsList.getInstance().setRestricted(true, domain, !TextUtils.isEmpty(open_domain) && !TextUtils.equals(open_domain, domain) ? open_domain : null); + if (!waitForResume) { + showRestrictedWebsiteToast(); + } else { + LaunchActivity.whenResumed = this::showRestrictedWebsiteToast; } - fontCells[a].select(a == selectedFont, false); - fontCells[a].setTag(a); - fontCells[a].setOnClickListener(v -> { - int num = (Integer) v.getTag(); - selectedFont = num; - for (int a1 = 0; a1 < 2; a1++) { - fontCells[a1].select(a1 == num, true); + }; + if (pages[0].isWeb() && !RestrictedDomainsList.getInstance().isRestricted(domain) && RestrictedDomainsList.getInstance().incrementOpen(domain) >= 2) { + AlertDialog.Builder a = new AlertDialog.Builder(activity, getResourcesProvider()); + a.setTitle(getString(R.string.BrowserExternalTitle)); + + LinearLayout linearLayout = new LinearLayout(activity); + linearLayout.setOrientation(LinearLayout.VERTICAL); + TextView textView = new TextView(activity); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + textView.setLetterSpacing(0.025f); + } + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 24, 0, 24, 0)); + + CheckBoxCell cell = new CheckBoxCell(activity, 1, null); + cell.setMultiline(true); + cell.getTextView().getLayoutParams().width = LayoutHelper.MATCH_PARENT; + cell.getTextView().setSingleLine(false); + cell.getTextView().setMaxLines(3); + cell.getTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + cell.setOnClickListener(v -> { + cell.setChecked(!cell.isChecked(), true); + }); + cell.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_listSelector), 9, 9)); + linearLayout.addView(cell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT, 8, 6, 8, 4)); + + textView.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.BrowserExternalText))); + cell.setText(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BrowserExternalCheck, domain)), "", false, false); + a.setView(linearLayout); + + a.setPositiveButton(LocaleController.getString(R.string.Continue), (di, w) -> { + if (cell.isChecked()) { + restrict.run(true); } - updatePaintFonts(); - for (int i = 0; i < listView.length; i++) { - adapter[i].notifyDataSetChanged(); + open.run(); + }); + a.setNegativeButton(LocaleController.getString(R.string.Cancel), (di, w) -> { + if (cell.isChecked()) { + restrict.run(false); } }); - settingsContainer.addView(fontCells[a], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); - } - builder.setCustomView(settingsContainer); - showDialog(linkSheet = builder.create()); + a.show(); + } else open.run(); + } else if (id == WebActionBar.settings_item) { + if (pages[0].isWeb()) { + openWebSettings(); + } else { + + BottomSheet.Builder builder = new BottomSheet.Builder(parentActivity); + builder.setApplyTopPadding(false); + + LinearLayout settingsContainer = new LinearLayout(parentActivity); + settingsContainer.setPadding(0, 0, 0, dp(4)); + settingsContainer.setOrientation(LinearLayout.VERTICAL); + + HeaderCell headerCell = new HeaderCell(parentActivity, getResourcesProvider()); + headerCell.setText(LocaleController.getString(R.string.FontSize)); + settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 1, 3, 0)); + + TextSizeCell sizeCell = new TextSizeCell(parentActivity); + settingsContainer.addView(sizeCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 0, 3, 0)); + + headerCell = new HeaderCell(parentActivity, getResourcesProvider()); + headerCell.setText(LocaleController.getString("FontType", R.string.FontType)); + settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 4, 3, 2)); + + for (int a = 0; a < 2; a++) { + fontCells[a] = new FontCell(parentActivity); + switch (a) { + case 0: + fontCells[a].setTextAndTypeface(LocaleController.getString("Default", R.string.Default), Typeface.DEFAULT); + break; + case 1: + fontCells[a].setTextAndTypeface("Serif", Typeface.SERIF); + break; + } + fontCells[a].select(a == selectedFont, false); + fontCells[a].setTag(a); + fontCells[a].setOnClickListener(v -> { + int num = (Integer) v.getTag(); + selectedFont = num; + for (int a1 = 0; a1 < 2; a1++) { + fontCells[a1].select(a1 == num, true); + } + updatePaintFonts(); + for (int i = 0; i < pages.length; i++) { + pages[i].adapter.notifyDataSetChanged(); + } + }); + settingsContainer.addView(fontCells[a], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); + } + + builder.setCustomView(settingsContainer); + showDialog(linkSheet = builder.create()); + } + } else if (id == WebActionBar.reload_item) { + if (pages[0].isWeb() && pages[0].getWebView() != null) { + pages[0].getWebView().reload(); + } + } + }); + + actionBar.forwardButton.setOnClickListener(v -> { + if (sheet != null) { +// if (pages[0].hasForwardButton()) { +// if (pages[0].getWebView() != null) { +// pages[0].getWebView().goForward(); +// } +// } else { + sheet.dismiss(true); +// } } }); @@ -3702,36 +4475,60 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg }; searchPanel.setOnTouchListener((v, event) -> true); searchPanel.setWillNotDraw(false); + searchPanel.setTranslationY(dp(51)); searchPanel.setVisibility(View.INVISIBLE); searchPanel.setFocusable(true); searchPanel.setFocusableInTouchMode(true); searchPanel.setClickable(true); - searchPanel.setPadding(0, AndroidUtilities.dp(3), 0, 0); + searchPanel.setPadding(0, dp(3), 0, 0); containerView.addView(searchPanel, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 51, Gravity.BOTTOM)); + new KeyboardNotifier(windowView, (keyboardHeight) -> { + searchPanel.setTranslationY((searchPanelTranslation = -keyboardHeight) + dp(51) * (1f - searchPanelAlpha)); + }); + searchUpButton = new ImageView(parentActivity); searchUpButton.setScaleType(ImageView.ScaleType.CENTER); searchUpButton.setImageResource(R.drawable.msg_go_up); - searchUpButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchUpButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); searchPanel.addView(searchUpButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.TOP, 0, 0, 48, 0)); - searchUpButton.setOnClickListener(view -> scrollToSearchIndex(currentSearchIndex - 1)); + searchUpButton.setOnClickListener(view -> { + if (pages[0].isWeb()) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().findNext(false); + } + } else { + scrollToSearchIndex(currentSearchIndex - 1); + } + }); searchUpButton.setContentDescription(LocaleController.getString("AccDescrSearchNext", R.string.AccDescrSearchNext)); searchDownButton = new ImageView(parentActivity); searchDownButton.setScaleType(ImageView.ScaleType.CENTER); searchDownButton.setImageResource(R.drawable.msg_go_down); - searchDownButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchDownButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); searchPanel.addView(searchDownButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.TOP, 0, 0, 0, 0)); - searchDownButton.setOnClickListener(view -> scrollToSearchIndex(currentSearchIndex + 1)); + searchDownButton.setOnClickListener(view -> { + if (pages[0].isWeb()) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().findNext(true); + } + } else { + scrollToSearchIndex(currentSearchIndex + 1); + } + }); searchDownButton.setContentDescription(LocaleController.getString("AccDescrSearchPrev", R.string.AccDescrSearchPrev)); - searchCountText = new SimpleTextView(parentActivity); - searchCountText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchCountText.setTextSize(15); + searchCountText = new AnimatedTextView(parentActivity, true, true, true); + searchCountText.setScaleProperty(.6f); + searchCountText.setAnimationProperties(0.4f, 0, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + searchCountText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + searchCountText.setTextSize(dp(15)); searchCountText.setTypeface(AndroidUtilities.bold()); searchCountText.setGravity(Gravity.LEFT); + searchCountText.getDrawable().setOverrideFullWidth(AndroidUtilities.displaySize.x); searchPanel.addView(searchCountText, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.CENTER_VERTICAL, 18, 0, 108, 0)); windowLayoutParams = new WindowManager.LayoutParams(); @@ -3744,7 +4541,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - int navigationColor = Theme.getColor(Theme.key_windowBackgroundGray, null, true); + int navigationColor = sheet == null ? Theme.getColor(Theme.key_windowBackgroundGray, null, true) : getThemedColor(Theme.key_windowBackgroundGray); float navigationBrightness = AndroidUtilities.computePerceivedBrightness(navigationColor); boolean isLightNavigation = navigationBrightness >= 0.721f; if (isLightNavigation && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -3763,18 +4560,18 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } textSelectionHelper = new TextSelectionHelper.ArticleTextSelectionHelper(); - textSelectionHelper.setParentView(listView[0]); + textSelectionHelper.setParentView(pages[0].listView); if (MessagesController.getInstance(currentAccount).getTranslateController().isContextTranslateEnabled()) { textSelectionHelper.setOnTranslate((text, fromLang, toLang, onAlertDismiss) -> { TranslateAlert2.showAlert(parentActivity, parentFragment, currentAccount, fromLang, toLang, text, null, false, null, onAlertDismiss); }); } - textSelectionHelper.layoutManager = layoutManager[0]; + textSelectionHelper.layoutManager = pages[0].layoutManager; textSelectionHelper.setCallback(new TextSelectionHelper.Callback() { @Override public void onStateChanged(boolean isSelected) { if (isSelected) { - showSearch(false); + actionBar.showSearch(false, true); } } @@ -3790,25 +4587,79 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg pinchToZoomHelper = new PinchToZoomHelper(containerView, containerView); pinchToZoomHelper.setClipBoundsListener(topBottom -> { topBottom[0] = currentHeaderHeight; - topBottom[1] = listView[0].getMeasuredHeight(); + topBottom[1] = pages[0].listView.getMeasuredHeight(); }); pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() { @Override public void onZoomStarted(MessageObject messageObject) { - if (listView[0] != null) { - listView[0].cancelClickRunnables(true); + if (pages[0] != null) { + pages[0].listView.cancelClickRunnables(true); } } }); updatePaintColors(); } + private boolean showRestrictedToastOnResume; + private void showRestrictedWebsiteToast() { + showRestrictedToastOnResume = false; + if (!attachedToWindow || LaunchActivity.instance == null || LaunchActivity.instance.isFinishing()) return; + final FrameLayout container; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + container = pages[0].webViewContainer; + } else { + if (pages[0].adapter.currentPage == null) return; + container = pages[0]; + } + BulletinFactory.of(container, getResourcesProvider()) + .createSimpleBulletin(R.raw.chats_infotip, AndroidUtilities.replaceSingleTag(getString(R.string.BrowserExternalRestricted), this::openWebSettings), 4) + .show(true); + } + + public void openBookmark(String link) { + if (parentActivity == null) return; + if (link == null) return; + actionBar.showAddress(false, true); + if (Browser.isInternalUri(Uri.parse(link), null)) { + if (sheet != null) { + sheet.dismiss(true); + } + Browser.openAsInternalIntent(parentActivity, link); + } else if (!Browser.openInExternalApp(parentActivity, link, false)) { + if (pages[0] == null || pages[0].getWebView() == null) { + Browser.openInTelegramBrowser(parentActivity, link, null); + } else { + pages[0].getWebView().loadUrl(link); + } + } + } + + public void openHistoryEntry(BrowserHistory.Entry entry) { + if (parentActivity == null || entry == null) return; + actionBar.showAddress(false, true); + if (pages[0] == null || pages[0].getWebView() == null) { + Browser.openInTelegramBrowser(parentActivity, entry.url, null); + } else { + pages[0].getWebView().loadUrl(entry.url, entry.meta); + } + } + + public void openWebSettings() { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); + params.transitionFromLeft = true; + lastFragment.showAsSheet(new WebBrowserSettings(this::openHistoryEntry), params); + } + } + VideoPlayerHolderBase videoPlayer; BlockVideoCell currentPlayer; private void checkVideoPlayer() { - RecyclerView recyclerView = listView[0]; - if (recyclerView == null && attachedToWindow) { + RecyclerView recyclerView = pages[0].listView; + if (recyclerView == null || !attachedToWindow) { return; } BlockVideoCell bestView = null; @@ -3846,103 +4697,6 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } - private void showSearch(boolean show) { - if (searchContainer == null || (searchContainer.getTag() != null) == show) { - return; - } - searchContainer.setTag(show ? 1 : null); - searchResults.clear(); - searchText = null; - adapter[0].searchTextOffset.clear(); - currentSearchIndex = 0; - if (attachedToWindow) { - AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.setDuration(250); - if (show) { - searchContainer.setVisibility(View.VISIBLE); - backDrawable.setRotation(0.0f, true); - } else { - menuButton.setVisibility(View.VISIBLE); - listView[0].invalidateViews(); - AndroidUtilities.hideKeyboard(searchField); - updateWindowLayoutParamsForSearch(); - } - ArrayList animators = new ArrayList<>(); - if (Build.VERSION.SDK_INT >= 21) { - if (show) { - searchContainer.setAlpha(1.0f); - } - int x = menuContainer.getLeft() + menuContainer.getMeasuredWidth() / 2; - int y = menuContainer.getTop() + menuContainer.getMeasuredHeight() / 2; - float rad = (float) Math.sqrt(x * x + y * y); - Animator animator = ViewAnimationUtils.createCircularReveal(searchContainer, x, y, show ? 0 : rad, show ? rad : 0); - animators.add(animator); - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (!show) { - searchContainer.setAlpha(0.0f); - } - } - }); - } else { - animators.add(ObjectAnimator.ofFloat(searchContainer, View.ALPHA, show ? 1.0f : 0.0f)); - } - if (!show) { - animators.add(ObjectAnimator.ofFloat(searchPanel, View.ALPHA, 0.0f)); - } - animators.add(ObjectAnimator.ofFloat(searchShadow, View.ALPHA, show ? 1.0f : 0.0f)); - animatorSet.playTogether(animators); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (show) { - updateWindowLayoutParamsForSearch(); - searchField.requestFocus(); - AndroidUtilities.showKeyboard(searchField); - menuButton.setVisibility(View.INVISIBLE); - } else { - searchContainer.setVisibility(View.INVISIBLE); - searchPanel.setVisibility(View.INVISIBLE); - searchField.setText(""); - } - } - - @Override - public void onAnimationStart(Animator animation) { - if (!show) { - backDrawable.setRotation(1.0f, true); - } - } - }); - animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT); - if (!show && !AndroidUtilities.usingHardwareInput && keyboardVisible) { - runAfterKeyboardClose = animatorSet; - AndroidUtilities.runOnUIThread(() -> { - if (runAfterKeyboardClose != null) { - runAfterKeyboardClose.start(); - runAfterKeyboardClose = null; - } - }, 300); - } else { - animatorSet.start(); - } - } else { - searchContainer.setAlpha(show ? 1.0f : 0.0f); - menuButton.setVisibility(show ? View.INVISIBLE : View.VISIBLE); - backDrawable.setRotation(show ? 0.0f : 1.0f, false); - searchShadow.setAlpha(show ? 1.0f : 0.0f); - if (show) { - searchContainer.setVisibility(View.VISIBLE); - } else { - searchContainer.setVisibility(View.INVISIBLE); - searchPanel.setVisibility(View.INVISIBLE); - searchField.setText(""); - } - updateWindowLayoutParamsForSearch(); - } - } - private void updateWindowLayoutParamsForSearch() { /*try { WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); @@ -3958,14 +4712,22 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } private void updateSearchButtons() { - if (searchResults == null) { + if (searchResults == null && !pages[0].isWeb()) { return; } - searchUpButton.setEnabled(!searchResults.isEmpty() && currentSearchIndex != 0); - searchDownButton.setEnabled(!searchResults.isEmpty() && currentSearchIndex != searchResults.size() - 1); + int index, count; + if (pages[0].isWeb()) { + index = pages[0].getWebView() == null ? 0 : pages[0].getWebView().getSearchIndex(); + count = pages[0].getWebView() == null ? 0 : pages[0].getWebView().getSearchCount(); + } else { + index = currentSearchIndex; + count = searchResults.size(); + } + searchUpButton.setEnabled(count > 0 && index != 0); + searchDownButton.setEnabled(count > 0 && index != count - 1); searchUpButton.setAlpha(searchUpButton.isEnabled() ? 1.0f : 0.5f); searchDownButton.setAlpha(searchDownButton.isEnabled() ? 1.0f : 0.5f); - int count = searchResults.size(); + searchCountText.cancelAnimation(); if (count < 0) { searchCountText.setText(""); } else if (count == 0) { @@ -3973,7 +4735,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } else if (count == 1) { searchCountText.setText(LocaleController.getString("OneResult", R.string.OneResult)); } else { - searchCountText.setText(String.format(LocaleController.getPluralString("CountOfResults", count), currentSearchIndex + 1, count)); + searchCountText.setText(String.format(LocaleController.getPluralString("CountOfResults", count), index + 1, count)); } } @@ -3997,61 +4759,102 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (TextUtils.isEmpty(text)) { searchResults.clear(); searchText = text; - adapter[0].searchTextOffset.clear(); - searchPanel.setVisibility(View.INVISIBLE); - listView[0].invalidateViews(); - scrollToSearchIndex(0); + pages[0].adapter.searchTextOffset.clear(); + showSearchPanel(false); + if (pages[0].isWeb()) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().search("", this::updateSearchButtons); + updateSearchButtons(); + } + } else { + pages[0].listView.invalidateViews(); + scrollToSearchIndex(0); + } lastSearchIndex = -1; return; } int searchIndex = ++lastSearchIndex; - AndroidUtilities.runOnUIThread(searchRunnable = () -> { - HashMap copy = new HashMap<>(adapter[0].textToBlocks); - ArrayList array = new ArrayList<>(adapter[0].textBlocks); - searchRunnable = null; - Utilities.searchQueue.postRunnable(() -> { - ArrayList results = new ArrayList<>(); - for (int b = 0, N = array.size(); b < N; b++) { - Object object = array.get(b); - TLRPC.PageBlock block = copy.get(object); - String textToSearchIn = null; - if (object instanceof TLRPC.RichText) { - TLRPC.RichText richText = (TLRPC.RichText) object; - CharSequence innerText = getText(adapter[0], null, richText, richText, block, 1000); - if (!TextUtils.isEmpty(innerText)) { - textToSearchIn = innerText.toString().toLowerCase(); + if (pages[0].isWeb()) { + showSearchPanel(true); + if (pages[0].getWebView() != null) { + pages[0].getWebView().search(text, this::updateSearchButtons); + updateSearchButtons(); + } + } else { + AndroidUtilities.runOnUIThread(searchRunnable = () -> { + HashMap copy = new HashMap<>(pages[0].adapter.textToBlocks); + ArrayList array = new ArrayList<>(pages[0].adapter.textBlocks); + searchRunnable = null; + Utilities.searchQueue.postRunnable(() -> { + ArrayList results = new ArrayList<>(); + for (int b = 0, N = array.size(); b < N; b++) { + Object object = array.get(b); + TLRPC.PageBlock block = copy.get(object); + String textToSearchIn = null; + if (object instanceof TLRPC.RichText) { + TLRPC.RichText richText = (TLRPC.RichText) object; + CharSequence innerText = getText(pages[0].adapter, null, richText, richText, block, 1000); + if (!TextUtils.isEmpty(innerText)) { + textToSearchIn = innerText.toString().toLowerCase(); + } + } else if (object instanceof String) { + textToSearchIn = ((String) object).toLowerCase(); } - } else if (object instanceof String) { - textToSearchIn = ((String) object).toLowerCase(); - } - if (textToSearchIn != null) { - int startIndex = 0; - int index; - while ((index = textToSearchIn.indexOf(text, startIndex)) >= 0) { - startIndex = index + text.length(); - if (index == 0 || AndroidUtilities.isPunctuationCharacter(textToSearchIn.charAt(index - 1))) { - SearchResult result = new SearchResult(); - result.index = index; - result.block = block; - result.text = object; - results.add(result); + if (textToSearchIn != null) { + int startIndex = 0; + int index; + while ((index = textToSearchIn.indexOf(text, startIndex)) >= 0) { + startIndex = index + text.length(); + if (index == 0 || AndroidUtilities.isPunctuationCharacter(textToSearchIn.charAt(index - 1))) { + SearchResult result = new SearchResult(); + result.index = index; + result.block = block; + result.text = object; + results.add(result); + } } } } - } - AndroidUtilities.runOnUIThread(() -> { - if (searchIndex == lastSearchIndex) { - searchPanel.setAlpha(1.0f); - searchPanel.setVisibility(View.VISIBLE); - searchResults = results; - searchText = text; - adapter[0].searchTextOffset.clear(); - listView[0].invalidateViews(); - scrollToSearchIndex(0); - } + AndroidUtilities.runOnUIThread(() -> { + if (searchIndex == lastSearchIndex) { + showSearchPanel(true); + searchResults = results; + searchText = text; + pages[0].adapter.searchTextOffset.clear(); + pages[0].listView.invalidateViews(); + scrollToSearchIndex(0); + } + }); }); - }); - }, 400); + }, 400); + } + } + + private ValueAnimator searchPanelAnimator; + private float searchPanelAlpha; + public void showSearchPanel(boolean show) { + searchPanel.setVisibility(View.VISIBLE); + if (searchPanelAnimator != null) { + searchPanelAnimator.cancel(); + } + searchPanelAnimator = ValueAnimator.ofFloat(searchPanelAlpha, show ? 1f : 0f); + searchPanelAnimator.addUpdateListener(anm -> { + searchPanelAlpha = (float) anm.getAnimatedValue(); + searchPanel.setTranslationY(searchPanelTranslation + (1f - searchPanelAlpha) * dp(51)); + }); + searchPanelAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + searchPanelAlpha = show ? 1f : 0f; + searchPanel.setTranslationY(searchPanelTranslation + (1f - searchPanelAlpha) * dp(51)); + if (!show) { + searchPanel.setVisibility(View.GONE); + } + } + }); + searchPanelAnimator.setDuration(320); + searchPanelAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + searchPanelAnimator.start(); } private void scrollToSearchIndex(int index) { @@ -4065,21 +4868,21 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg TLRPC.PageBlock block = getLastNonListPageBlock(result.block); int row = -1; - for (int a = 0, N = adapter[0].blocks.size(); a < N; a++) { - TLRPC.PageBlock localBlock = adapter[0].blocks.get(a); + for (int a = 0, N = pages[0].adapter.blocks.size(); a < N; a++) { + TLRPC.PageBlock localBlock = pages[0].adapter.blocks.get(a); if (localBlock instanceof TL_pageBlockDetailsChild) { TL_pageBlockDetailsChild child = (TL_pageBlockDetailsChild) localBlock; if (child.block == result.block || child.block == block) { if (openAllParentBlocks(child)) { - adapter[0].updateRows(); - adapter[0].notifyDataSetChanged(); + pages[0].adapter.updateRows(); + pages[0].adapter.notifyDataSetChanged(); } break; } } } - for (int a = 0, N = adapter[0].localBlocks.size(); a < N; a++) { - TLRPC.PageBlock localBlock = adapter[0].localBlocks.get(a); + for (int a = 0, N = pages[0].adapter.localBlocks.size(); a < N; a++) { + TLRPC.PageBlock localBlock = pages[0].adapter.localBlocks.get(a); if (localBlock == result.block || localBlock == block) { row = a; break; @@ -4098,25 +4901,29 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (block instanceof TL_pageBlockDetailsChild) { if (openAllParentBlocks((TL_pageBlockDetailsChild) block)) { - adapter[0].updateRows(); - adapter[0].notifyDataSetChanged(); + pages[0].adapter.updateRows(); + pages[0].adapter.notifyDataSetChanged(); } } String key = searchText + result.block + result.text + result.index; - Integer offset = adapter[0].searchTextOffset.get(key); + Integer offset = pages[0].adapter.searchTextOffset.get(key); if (offset == null) { - int type = adapter[0].getTypeForBlock(result.block); - RecyclerView.ViewHolder holder = adapter[0].onCreateViewHolder(null, type); - adapter[0].bindBlockToHolder(type, holder, result.block, 0, 0); - holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(listView[0].getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); - offset = adapter[0].searchTextOffset.get(key); + int type = pages[0].adapter.getTypeForBlock(result.block); + RecyclerView.ViewHolder holder = pages[0].adapter.onCreateViewHolder(null, type); + pages[0].adapter.bindBlockToHolder(type, holder, result.block, 0, 0); + holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(pages[0].listView.getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + offset = pages[0].adapter.searchTextOffset.get(key); if (offset == null) { offset = 0; } } - layoutManager[0].scrollToPositionWithOffset(row, currentHeaderHeight - AndroidUtilities.dp(56) - offset + AndroidUtilities.dp(100)); - listView[0].invalidateViews(); + SmoothScroller s = new SmoothScroller(pages[0].getContext()); + s.setTargetPosition( + row); + s.setOffset(-(currentHeaderHeight - dp(56) - offset + dp(100))); + s.setDurationScale(1.2f); + pages[0].layoutManager.startSmoothScroll(s); + pages[0].listView.invalidateViews(); } public static class ScrollEvaluator extends IntEvaluator { @@ -4128,57 +4935,48 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } private void checkScrollAnimated() { - int maxHeight = AndroidUtilities.dp(56); + checkScrollAnimated(null); + } + private void checkScrollAnimated(Runnable callback) { + int maxHeight = dp(56); if (currentHeaderHeight == maxHeight) { + if (callback != null) { + callback.run(); + } return; } - ValueAnimator va = ValueAnimator.ofObject(new IntEvaluator(), currentHeaderHeight, AndroidUtilities.dp(56)).setDuration(180); + ValueAnimator va = ValueAnimator.ofObject(new IntEvaluator(), currentHeaderHeight, dp(56)).setDuration(180); va.setInterpolator(new DecelerateInterpolator()); va.addUpdateListener(animation -> setCurrentHeaderHeight((int) animation.getAnimatedValue())); + va.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + if (callback != null) { + callback.run(); + } + } + }); + if (callback != null) { + va.setDuration(va.getDuration() / 2); + } va.start(); } private void setCurrentHeaderHeight(int newHeight) { - if (searchContainer.getTag() != null) { + if (actionBar == null || actionBar.isSearching() || actionBar.isAddressing()) { return; } - int maxHeight = AndroidUtilities.dp(56); - int minHeight = AndroidUtilities.dp(24); - - if (newHeight < minHeight) { - newHeight = minHeight; - } else if (newHeight > maxHeight) { - newHeight = maxHeight; - } - - float heightDiff = maxHeight - minHeight; - if (heightDiff == 0) { - heightDiff = 1; - } - - currentHeaderHeight = newHeight; - float scale = 0.8f + (currentHeaderHeight - minHeight) / heightDiff * 0.2f; - float scale2 = 0.5f + (currentHeaderHeight - minHeight) / heightDiff * 0.5f; - backButton.setScaleX(scale); - backButton.setScaleY(scale); - backButton.setTranslationY((maxHeight - currentHeaderHeight) / 2); - menuContainer.setScaleX(scale); - menuContainer.setScaleY(scale); - titleTextView.setScaleX(scale); - titleTextView.setScaleY(scale); - lineProgressView.setScaleY(scale2); - menuContainer.setTranslationY((maxHeight - currentHeaderHeight) / 2); - titleTextView.setTranslationY((maxHeight - currentHeaderHeight) / 2); - headerView.setTranslationY(currentHeaderHeight - maxHeight); - searchShadow.setTranslationY(currentHeaderHeight - maxHeight); - menuButton.setAdditionalYOffset(-(currentHeaderHeight - maxHeight) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); + currentHeaderHeight = Utilities.clamp(newHeight, dp(56), dp(24)); + actionBar.setHeight(currentHeaderHeight); textSelectionHelper.setTopOffset(currentHeaderHeight); - for (int i = 0; i < listView.length; i++) { - listView[i].setTopGlowOffset(currentHeaderHeight); + for (int i = 0; i < pages.length; i++) { + pages[i].listView.setTopGlowOffset(currentHeaderHeight); } } private void checkScroll(int dy) { + if (sheet != null && !sheet.attachedToActionBar) return; setCurrentHeaderHeight(currentHeaderHeight - dy); } @@ -4194,18 +4992,30 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } public boolean open(MessageObject messageObject) { - return open(messageObject, null, null, true); + return open(messageObject, null, null, null, null); } public boolean open(TLRPC.TL_webPage webpage, String url) { - return open(null, webpage, url, true); + return open(null, webpage, url, null, null); } - private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, String url, boolean first) { - if (parentActivity == null || isVisible && !collapsed || messageObject == null && webpage == null) { + public boolean open(String url) { + return open(null, null, null, url, null); + } + + public boolean open(String url, Browser.Progress progress) { + return open(null, null, null, url, progress); + } + + private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, String url, String webUrl, Browser.Progress progress) { + if (parentActivity == null || sheet == null && isVisible && !collapsed/* || messageObject == null && webpage == null && webUrl == null*/) { return false; } + if (parentFragment != null && parentFragment.getParentLayout() instanceof ActionBarLayout) { + AndroidUtilities.hideKeyboard((ActionBarLayout) parentFragment.getParentLayout()); + } + String anchor = null; if (messageObject != null) { webpage = messageObject.messageOwner.media.webpage; @@ -4239,26 +5049,40 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - pagesStack.clear(); - collapsed = false; - containerView.setTranslationX(0); - containerView.setTranslationY(0); - listView[0].setTranslationY(0); - listView[0].setTranslationX(0.0f); - listView[1].setTranslationX(0.0f); - listView[0].setAlpha(1.0f); - windowView.setInnerTranslationX(0); + final boolean openingAbove = sheet != null && !pagesStack.isEmpty(); + + collapsed = false; + if (openingAbove) { - layoutManager[0].scrollToPositionWithOffset(0, 0); - if (first) { - setCurrentHeaderHeight(AndroidUtilities.dp(56)); } else { - checkScrollAnimated(); + pagesStack.clear(); + containerView.setTranslationX(0); + if (sheet != null) { + sheet.setBackProgress(0); + } + containerView.setTranslationY(0); + pages[0].setTranslationY(0); + pages[0].setTranslationX(0.0f); + pages[1].setTranslationX(0.0f); + pages[0].setAlpha(1.0f); + windowView.setInnerTranslationX(0); + + pages[0].scrollToTop(false); + // if (first) { + setCurrentHeaderHeight(dp(56)); + // } else { + // checkScrollAnimated(); + // } } - boolean scrolledToAnchor = addPageToStack(webpage, anchor, 0); + boolean scrolledToAnchor; - if (first) { + if (sheet != null && BotWebViewContainer.firstWebView) { + sheet.animationsLock.lock(); + } + + if (webpage != null) { + scrolledToAnchor = addPageToStack(webpage, anchor, openingAbove ? 1 : 0); final String anchorFinal = !scrolledToAnchor && anchor != null ? anchor : null; TLRPC.TL_messages_getWebPage req = new TLRPC.TL_messages_getWebPage(); req.url = webpage.url; @@ -4290,12 +5114,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg messagesRes.messages.add(messageObject.messageOwner); MessagesStorage.getInstance(currentAccount).putMessages(messagesRes, messageObject.getDialogId(), -2, 0, false, messageObject.scheduled ? 1 : 0, 0); } - pagesStack.set(0, webPage); + if (openingAbove) { + pagesStack.add(webPage); + } else { + pagesStack.set(0, webPage); + } if (pagesStack.size() == 1) { ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE).edit().remove("article" + webPage.id).commit(); - updateInterfaceForCurrentPage(webPage, false, 0); + updateInterfaceForCurrentPage(webPage, false, openingAbove ? 1 : 0); if (anchorFinal != null) { - scrollToAnchor(anchorFinal); + scrollToAnchor(anchorFinal, false); } } } @@ -4309,12 +5137,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (webPageFinal.cached_page.views != webPage.cached_page_views) { webPageFinal.cached_page.views = webPage.cached_page_views; webPageFinal.cached_page.flags |= 8; - for (int a = 0; a < adapter.length; a++) { - if (adapter[a].currentPage == webPageFinal) { - int p = adapter[a].getItemCount() - 1; - RecyclerView.ViewHolder holder = listView[a].findViewHolderForAdapterPosition(p); + for (int a = 0; a < pages.length; a++) { + if (pages[a].adapter.currentPage == webPageFinal) { + int p = pages[a].adapter.getItemCount() - 1; + RecyclerView.ViewHolder holder = pages[a].listView.findViewHolderForAdapterPosition(p); if (holder != null) { - adapter[a].onViewAttachedToWindow(holder); + pages[a].adapter.onViewAttachedToWindow(holder); } } } @@ -4327,12 +5155,17 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } })); + } else { + scrolledToAnchor = addPageToStack(webUrl, openingAbove ? 1 : 0); } lastInsets = null; if (sheet != null) { - AndroidUtilities.removeFromParent(windowView); - sheet.windowView.addView(windowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + if (!openingAbove) { + AndroidUtilities.removeFromParent(windowView); + sheet.setContainerView(windowView); + sheet.windowView.addView(windowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } } else if (!isVisible) { WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); if (attachedToWindow) { @@ -4366,46 +5199,78 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } isVisible = true; animationInProgress = 1; - windowView.setAlpha(0); - containerView.setAlpha(0); - final AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.playTogether( - ObjectAnimator.ofFloat(windowView, View.ALPHA, 0, 1.0f), - ObjectAnimator.ofFloat(containerView, View.ALPHA, 0.0f, 1.0f), - ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, AndroidUtilities.dp(56), 0) - ); + if (openingAbove) { - animationEndRunnable = () -> { - if (containerView == null || windowView == null) { - return; + } else if (sheet != null) { + if (openingAbove) { + if (sheet != null) { + sheet.animationsLock.unlock(); + } + } else { + if (progress != null) { + // feature: to show progress before opening webview +// BotWebViewContainer.MyWebView webView = pages[0].getWebView(); +// if (webView != null) { +// boolean[] cancelled = new boolean[] { false }; +// progress.onCancel(() -> { +// cancelled[0] = true; +// sheet.dismissInstant(); +// }); +// progress.init(); +// webView.whenPageLoaded(() -> { +// progress.end(); +// if (!cancelled[0]) { +// AndroidUtilities.runOnUIThread(sheet::show, 80); +// } +// }, 1200); +// return true; +// } + } + sheet.show(); } - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_NONE, null); - } - animationInProgress = 0; - AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus()); - }; + } else { + windowView.setAlpha(0); + containerView.setAlpha(0); - animatorSet.setDuration(150); - animatorSet.setInterpolator(interpolator); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - AndroidUtilities.runOnUIThread(() -> { - notificationsLocker.unlock(); - if (animationEndRunnable != null) { - animationEndRunnable.run(); - animationEndRunnable = null; - } - }); - } - }); - transitionAnimationStartTime = System.currentTimeMillis(); - AndroidUtilities.runOnUIThread(() -> { - notificationsLocker.lock(); - animatorSet.start(); - }); + final AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether( + ObjectAnimator.ofFloat(windowView, View.ALPHA, 0, 1.0f), + ObjectAnimator.ofFloat(containerView, View.ALPHA, 0.0f, 1.0f), + ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, dp(56), 0) + ); + + animationEndRunnable = () -> { + if (containerView == null || windowView == null) { + return; + } + if (Build.VERSION.SDK_INT >= 18) { + containerView.setLayerType(View.LAYER_TYPE_NONE, null); + } + animationInProgress = 0; + AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus()); + }; + + animatorSet.setDuration(150); + animatorSet.setInterpolator(interpolator); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + AndroidUtilities.runOnUIThread(() -> { + notificationsLocker.unlock(); + if (animationEndRunnable != null) { + animationEndRunnable.run(); + animationEndRunnable = null; + } + }); + } + }); + transitionAnimationStartTime = System.currentTimeMillis(); + AndroidUtilities.runOnUIThread(() -> { + notificationsLocker.lock(); + animatorSet.start(); + }); + } if (Build.VERSION.SDK_INT >= 18) { containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); } @@ -4416,11 +5281,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (useLine) { AndroidUtilities.cancelRunOnUIThread(lineProgressTickRunnable); if (show) { - lineProgressView.setProgress(0.0f, false); - lineProgressView.setProgress(0.3f, true); + actionBar.lineProgressView.setProgress(0.0f, false); + actionBar.lineProgressView.setProgress(0.3f, true); AndroidUtilities.runOnUIThread(lineProgressTickRunnable, 100); } else { - lineProgressView.setProgress(1.0f, true); + actionBar.lineProgressView.setProgress(1.0f, true); } } else { if (progressViewAnimation != null) { @@ -4429,24 +5294,32 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg progressViewAnimation = new AnimatorSet(); if (show) { progressView.setVisibility(View.VISIBLE); - menuContainer.setEnabled(false); +// menuContainer.setEnabled(false); progressViewAnimation.playTogether( - ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 0.1f), - ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 0.1f), - ObjectAnimator.ofFloat(menuButton, View.ALPHA, 0.0f), +// ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 0.1f), +// ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 0.1f), +// ObjectAnimator.ofFloat(menuButton, View.ALPHA, 0.0f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_X, 0.1f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_Y, 0.1f), +// ObjectAnimator.ofFloat(collapseButton, View.ALPHA, 0.0f), ObjectAnimator.ofFloat(progressView, View.SCALE_X, 1.0f), ObjectAnimator.ofFloat(progressView, View.SCALE_Y, 1.0f), ObjectAnimator.ofFloat(progressView, View.ALPHA, 1.0f)); } else { - menuButton.setVisibility(View.VISIBLE); - menuContainer.setEnabled(true); +// menuButton.setVisibility(View.VISIBLE); +// collapseButton.setVisibility(View.VISIBLE); +// menuContainer.setEnabled(true); progressViewAnimation.playTogether( ObjectAnimator.ofFloat(progressView, View.SCALE_X, 0.1f), ObjectAnimator.ofFloat(progressView, View.SCALE_Y, 0.1f), - ObjectAnimator.ofFloat(progressView, View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 1.0f), - ObjectAnimator.ofFloat(menuButton, View.ALPHA, 1.0f)); + ObjectAnimator.ofFloat(progressView, View.ALPHA, 0.0f)//, +// ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 1.0f), +// ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 1.0f), +// ObjectAnimator.ofFloat(menuButton, View.ALPHA, 1.0f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_X, 1.0f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_Y, 1.0f), +// ObjectAnimator.ofFloat(collapseButton, View.ALPHA, 1.0f) + ); } progressViewAnimation.addListener(new AnimatorListenerAdapter() { @Override @@ -4455,7 +5328,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (!show) { progressView.setVisibility(View.INVISIBLE); } else { - menuButton.setVisibility(View.INVISIBLE); +// menuButton.setVisibility(View.INVISIBLE); +// collapseButton.setVisibility(View.INVISIBLE); } } } @@ -4472,195 +5346,47 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - public void collapse() { - if (parentActivity == null || !isVisible || checkAnimation()) { - return; - } - if (fullscreenVideoContainer.getVisibility() == View.VISIBLE) { - if (customView != null) { - fullscreenVideoContainer.setVisibility(View.INVISIBLE); - customViewCallback.onCustomViewHidden(); - fullscreenVideoContainer.removeView(customView); - customView = null; - } else if (fullscreenedVideo != null) { - fullscreenedVideo.exitFullscreen(); - } - } - try { - if (visibleDialog != null) { - visibleDialog.dismiss(); - visibleDialog = null; - } - } catch (Exception e) { - FileLog.e(e); - } - - AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.playTogether( - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, containerView.getMeasuredWidth() - AndroidUtilities.dp(56)), - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_Y, ActionBar.getCurrentActionBarHeight() + (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0)), - ObjectAnimator.ofFloat(windowView, View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(listView[0], View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_Y, -AndroidUtilities.dp(56)), - ObjectAnimator.ofFloat(headerView, View.TRANSLATION_Y, 0), - - ObjectAnimator.ofFloat(backButton, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(backButton, View.SCALE_Y, 1.0f), - ObjectAnimator.ofFloat(backButton, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(menuContainer, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_Y, 1.0f) - ); - collapsed = true; - animationInProgress = 2; - animationEndRunnable = () -> { - if (containerView == null) { - return; - } - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_NONE, null); - } - animationInProgress = 0; - - //windowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; - WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); - wm.updateViewLayout(windowView, windowLayoutParams); - - //onClosed(); - //containerView.setScaleX(1.0f); - //containerView.setScaleY(1.0f); - }; - animatorSet.setInterpolator(new DecelerateInterpolator()); - animatorSet.setDuration(250); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (animationEndRunnable != null) { - animationEndRunnable.run(); - animationEndRunnable = null; - } - } - }); - transitionAnimationStartTime = System.currentTimeMillis(); - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - } - backDrawable.setRotation(1, true); - animatorSet.start(); - } - - public void uncollapse() { - if (parentActivity == null || !isVisible || checkAnimation()) { - return; - } - - /*windowLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; - WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); - wm.updateViewLayout(windowView, windowLayoutParams);*/ - - AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.playTogether( - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, 0), - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(windowView, View.ALPHA, 1.0f), - ObjectAnimator.ofFloat(listView[0], View.ALPHA, 1.0f), - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(headerView, View.TRANSLATION_Y, 0), - - ObjectAnimator.ofFloat(backButton, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(backButton, View.SCALE_Y, 1.0f), - ObjectAnimator.ofFloat(backButton, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(menuContainer, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_Y, 1.0f) - ); - collapsed = false; - animationInProgress = 2; - animationEndRunnable = () -> { - if (containerView == null) { - return; - } - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_NONE, null); - } - animationInProgress = 0; - //onClosed(); - }; - animatorSet.setDuration(250); - animatorSet.setInterpolator(new DecelerateInterpolator()); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (animationEndRunnable != null) { - animationEndRunnable.run(); - animationEndRunnable = null; - } - } - }); - transitionAnimationStartTime = System.currentTimeMillis(); - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - } - backDrawable.setRotation(0, true); - animatorSet.start(); - } - private void saveCurrentPagePosition() { - if (adapter[0].currentPage == null) { + if (pages[0].adapter.currentPage == null) { return; } - int position = layoutManager[0].findFirstVisibleItemPosition(); + int position = pages[0].layoutManager.findFirstVisibleItemPosition(); if (position != RecyclerView.NO_POSITION) { int offset; - View view = layoutManager[0].findViewByPosition(position); + View view = pages[0].layoutManager.findViewByPosition(position); if (view != null) { offset = view.getTop(); } else { offset = 0; } SharedPreferences.Editor editor = ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE).edit(); - String key = "article" + adapter[0].currentPage.id; + String key = "article" + pages[0].adapter.currentPage.id; editor.putInt(key, position).putInt(key + "o", offset).putBoolean(key + "r", AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y).commit(); } } private void refreshThemeColors() { if (deleteView != null) { - deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 2)); - deleteView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem)); + deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 2)); + deleteView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); } if (popupLayout != null) { - popupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); - } - if (searchContainer != null) { - searchContainer.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - } - if (searchField != null) { - searchField.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setCursorColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteHintText)); + popupLayout.setBackgroundColor(getThemedColor(Theme.key_actionBarDefaultSubmenuBackground)); } if (searchUpButton != null) { - searchUpButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchUpButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); } if (searchDownButton != null) { - searchDownButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchDownButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); } if (searchCountText != null) { - searchCountText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + searchCountText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); } - if (menuButton != null) { - menuButton.redrawPopup(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); - menuButton.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), false); - menuButton.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItemIcon), true); - } - if (clearButton != null) { - clearButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - } - if (backDrawable != null) { - backDrawable.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + if (actionBar != null) { + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); } } @@ -4668,6 +5394,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (parentActivity == null || closeAnimationInProgress || !isVisible || checkAnimation()) { return; } + if (sheet != null) { + sheet.dismiss(false); + return; + } if (fullscreenVideoContainer.getVisibility() == View.VISIBLE) { if (customView != null) { fullscreenVideoContainer.setVisibility(View.INVISIBLE); @@ -4685,8 +5415,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg textSelectionHelper.clear(); return; } - if (searchContainer.getTag() != null) { - showSearch(false); + if (actionBar.isSearching()) { + actionBar.showSearch(false, true); + return; + } + if (actionBar.isAddressing()) { + actionBar.showAddress(false, true); return; } if (openUrlReqId != 0) { @@ -4724,7 +5458,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg animatorSet.playTogether( ObjectAnimator.ofFloat(windowView, View.ALPHA, 0), ObjectAnimator.ofFloat(containerView, View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, 0, AndroidUtilities.dp(56)) + ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, 0, dp(56)) ); animationInProgress = 2; animationEndRunnable = () -> { @@ -4753,7 +5487,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); } animatorSet.start(); - + for (int i = 0; i < videoStates.size(); ++i) { BlockVideoCellState state = videoStates.valueAt(i); if (state.lastFrameBitmap != null) { @@ -4766,8 +5500,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private void onClosed() { isVisible = false; - for (int i = 0; i < listView.length; i++) { - adapter[i].cleanup(); + for (int i = 0; i < pages.length; i++) { + pages[i].cleanup(); } try { parentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); @@ -4875,14 +5609,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (parentActivity == null || windowView == null) { return; } - try { - if (windowView.getParent() != null) { - WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); - wm.removeViewImmediate(windowView); + if (sheet == null) { + try { + if (windowView.getParent() != null) { + WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); + wm.removeViewImmediate(windowView); + } + windowView = null; + } catch (Exception e) { + FileLog.e(e); } - windowView = null; - } catch (Exception e) { - FileLog.e(e); } for (int a = 0; a < createdWebViews.size(); a++) { BlockEmbedCell cell = createdWebViews.get(a); @@ -5021,9 +5757,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private TLRPC.WebPage currentPage; private TLRPC.TL_pageBlockChannel channelBlock; private boolean isRtl; + private final boolean padding; - public WebpageAdapter(Context ctx) { + public WebpageAdapter(Context ctx, boolean withPadding) { context = ctx; + padding = withPadding; } private TLRPC.Photo getPhotoWithId(long id) { @@ -5574,6 +6312,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { + case (Integer.MAX_VALUE - 1): { + view = new View(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int height = AndroidUtilities.displaySize.y; + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) (height * .4f), MeasureSpec.EXACTLY)); + } + }; + break; + } case 0: { view = new BlockParagraphCell(context, this); break; @@ -5720,7 +6468,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (position < localBlocks.size()) { + if (padding) { + position--; + } + if (position >= 0 && position < localBlocks.size()) { TLRPC.PageBlock block = localBlocks.get(position); bindBlockToHolder(holder.getItemViewType(), holder, block, position, localBlocks.size()); } @@ -5964,6 +6715,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public int getItemViewType(int position) { + if (padding) { + if (position == 0) + return Integer.MAX_VALUE - 1; + position--; + } if (position == localBlocks.size()) { return 90; } @@ -5976,7 +6732,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public int getItemCount() { - return currentPage != null && currentPage.cached_page != null ? localBlocks.size() + 1 : 0; + int count = 0; + if (currentPage != null && currentPage.cached_page != null) { + count += localBlocks.size() + 1; + } + if (padding) { + count++; + } + return count; } private boolean isBlockOpened(TL_pageBlockDetailsChild child) { @@ -5994,6 +6757,17 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return false; } + public void resetCachedHeights() { + for (int i = 0; i < localBlocks.size(); ++i) { + TLRPC.PageBlock pageBlock = localBlocks.get(i); + if (pageBlock != null) { + pageBlock.cachedWidth = 0; + pageBlock.cachedHeight = 0; + } + } + calculateContentHeight(); + } + private void updateRows() { localBlocks.clear(); for (int a = 0, size = blocks.size(); a < size; a++) { @@ -6007,8 +6781,63 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } localBlocks.add(originalBlock); } + + if (localBlocks.size() < 100) + calculateContentHeight(); + else itemHeights = null; } + public int[] itemHeights; + public int[] sumItemHeights; + public int fullHeight; + + public void calculateContentHeight() { + Utilities.globalQueue.cancelRunnable(calculateContentHeightRunnable); + Utilities.globalQueue.postRunnable(calculateContentHeightRunnable, 100); + } + + private final Runnable calculateContentHeightRunnable = () -> { + final ArrayList blocks = new ArrayList<>(localBlocks); + final int itemCount = blocks.size() + (sheet != null && sheet.halfSize() ? 1 : 0); + int fullHeight = 0; + final int[] itemHeights = new int[itemCount]; + final int[] sumItemHeights = new int[itemCount]; + if (pages[0] == null) return; + final RecyclerView listView = pages[0].listView; + if (listView == null) return; + int widthSpec = View.MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, View.MeasureSpec.AT_MOST); + int heightSpec = View.MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.y, View.MeasureSpec.AT_MOST); + for (int i = 0; i < itemCount; i++) { + if (ArticleViewer.WebpageAdapter.this.padding && i == 0) { + itemHeights[0] = 0; + } else { + final int position = ArticleViewer.WebpageAdapter.this.padding ? i - 1 : i; + TLRPC.PageBlock page = position < 0 || position >= blocks.size() ? null : blocks.get(position); + if (page != null && page.cachedHeight != 0 && page.cachedWidth == View.MeasureSpec.getSize(widthSpec)) { + itemHeights[i] = page.cachedHeight; + } else { + RecyclerView.ViewHolder viewHolder = createViewHolder(listView, getTypeForBlock(page)); + bindBlockToHolder(viewHolder.getItemViewType(), viewHolder, page, position, blocks.size()); + viewHolder.itemView.measure(widthSpec, heightSpec); + itemHeights[i] = viewHolder.itemView.getMeasuredHeight(); + if (page != null) { + page.cachedHeight = itemHeights[i]; + page.cachedWidth = View.MeasureSpec.getSize(widthSpec); + } + } + } + sumItemHeights[i] = (i - 1 < 0 ? 0 : sumItemHeights[i - 1]) + itemHeights[i]; + fullHeight += itemHeights[i]; + } + final int finalFullHeight = fullHeight; + AndroidUtilities.runOnUIThread(() -> { + this.fullHeight = finalFullHeight; + this.itemHeights = itemHeights; + this.sumItemHeights = sumItemHeights; + updatePages(); + }); + }; + private void cleanup() { currentPage = null; blocks.clear(); @@ -6244,7 +7073,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } float x = event.getX(); float y = event.getY(); - if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + AndroidUtilities.dp(39)) { + if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + dp(39)) { if (parentAdapter.channelBlock != null && event.getAction() == MotionEvent.ACTION_UP) { MessagesController.getInstance(currentAccount).openByUserName(ChatObject.getPublicUsername(parentAdapter.channelBlock.channel), parentFragment, 2); close(false, true); @@ -6252,7 +7081,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return true; } if (event.getAction() == MotionEvent.ACTION_DOWN && imageView.isInsideImage(x, y)) { - if (buttonState != -1 && x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) || buttonState == 0) { + if (buttonState != -1 && x >= buttonX && x <= buttonX + dp(48) && y >= buttonY && y <= buttonY + dp(48) || buttonState == 0) { buttonPressed = 1; invalidate(); } else { @@ -6292,16 +7121,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int photoX; int textWidth; if (currentType == 0 && currentBlock.level > 0) { - textX = photoX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - photoWidth -= photoX + AndroidUtilities.dp(18); + textX = photoX = dp(14 * currentBlock.level) + dp(18); + photoWidth -= photoX + dp(18); textWidth = photoWidth; } else { photoX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } if (currentDocument != null) { - int size = AndroidUtilities.dp(48); + int size = dp(48); TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(currentDocument.thumbs, 48); if (currentType == 0) { float scale; @@ -6324,7 +7153,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (parentBlock instanceof TLRPC.TL_pageBlockCover) { height = Math.min(height, photoWidth); } else { - int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(56)) * 0.9f); + int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - dp(56)) * 0.9f); if (height > maxHeight) { height = maxHeight; scale = height / h; @@ -6333,21 +7162,21 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } if (height == 0) { - height = AndroidUtilities.dp(100); + height = dp(100); } else if (height < size) { height = size; } photoHeight = height; } else if (currentType == 2) { if ((groupPosition.flags & POSITION_FLAG_RIGHT) == 0) { - photoWidth -= AndroidUtilities.dp(2); + photoWidth -= dp(2); } if ((groupPosition.flags & POSITION_FLAG_BOTTOM) == 0) { - photoHeight -= AndroidUtilities.dp(2); + photoHeight -= dp(2); } } imageView.setQualityThumbDocument(currentDocument); - int photoY = (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8); + int photoY = (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : dp(8); imageView.setImageCoords(photoX, photoY, photoWidth, photoHeight); if (isGif) { if (videoState != null && videoState.lastFrameBitmap != null) { @@ -6374,34 +7203,34 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg buttonY = (int) (imageView.getImageY() + (imageView.getImageHeight() - size) / 2.0f); radialProgress.setProgressRect(buttonX, buttonY, buttonX + size, buttonY + size); } - textY = (int) (imageView.getImageY() + imageView.getImageHeight() + AndroidUtilities.dp(8)); + textY = (int) (imageView.getImageY() + imageView.getImageHeight() + dp(8)); if (currentType == 0) { captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } } if (!isFirst && currentType == 0 && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } boolean nextIsChannel = parentBlock instanceof TLRPC.TL_pageBlockCover && parentAdapter.blocks.size() > 1 && parentAdapter.blocks.get(1) instanceof TLRPC.TL_pageBlockChannel; if (currentType != 2 && !nextIsChannel) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; } channelCell.measure(widthMeasureSpec, heightMeasureSpec); - channelCell.setTranslationY(imageView.getImageHeight() - AndroidUtilities.dp(39)); + channelCell.setTranslationY(imageView.getImageHeight() - dp(39)); FrameLayout.LayoutParams params = (LayoutParams) aspectRationContainer.getLayoutParams(); params.leftMargin = (int) imageView.getImageX(); params.topMargin = (int) imageView.getImageY(); @@ -6437,7 +7266,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } super.onDraw(canvas); @@ -6602,7 +7431,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg aspectRatioFrameLayout.setAspectRatio(videoAttr.w / (float) videoAttr.h, 0); } } - Uri uri = FileStreamLoadOperation.prepareUri(currentAccount, document, parentAdapter.currentPage); + Uri uri = parentAdapter.currentPage == null ? null : FileStreamLoadOperation.prepareUri(currentAccount, document, parentAdapter.currentPage); if (uri == null) { return; } @@ -6678,7 +7507,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private SeekBar seekBar; private boolean isFirst; private int textX; - private int textY = AndroidUtilities.dp(58); + private int textY = dp(58); private int creditOffset; private String lastTimeString; @@ -6707,7 +7536,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg parentAdapter = adapter; radialProgress = new RadialProgress2(this); - radialProgress.setCircleRadius(AndroidUtilities.dp(24)); + radialProgress.setCircleRadius(dp(24)); TAG = DownloadController.getInstance(currentAccount).generateObserverTag(); seekBar = new SeekBar(this); @@ -6731,7 +7560,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg isFirst = first; - seekBar.setColors(Theme.getColor(Theme.key_chat_inAudioSeekbar), Theme.getColor(Theme.key_chat_inAudioCacheSeekbar), Theme.getColor(Theme.key_chat_inAudioSeekbarFill), Theme.getColor(Theme.key_chat_inAudioSeekbarFill), Theme.getColor(Theme.key_chat_inAudioSeekbarSelected)); + seekBar.setColors(getThemedColor(Theme.key_chat_inAudioSeekbar), getThemedColor(Theme.key_chat_inAudioCacheSeekbar), getThemedColor(Theme.key_chat_inAudioSeekbarFill), getThemedColor(Theme.key_chat_inAudioSeekbarFill), getThemedColor(Theme.key_chat_inAudioSeekbarSelected)); updateButtonState(false); requestLayout(); @@ -6755,7 +7584,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return true; } if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (buttonState != -1 && x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) || buttonState == 0) { + if (buttonState != -1 && x >= buttonX && x <= buttonX + dp(48) && y >= buttonY && y <= buttonY + dp(48) || buttonState == 0) { buttonPressed = 1; invalidate(); } @@ -6776,39 +7605,39 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); - int height = AndroidUtilities.dp(54); + int height = dp(54); if (currentBlock != null) { int textWidth; if (currentBlock.level > 0) { - textX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); + textX = dp(14 * currentBlock.level) + dp(18); } else { - textX = AndroidUtilities.dp(18); + textX = dp(18); } - textWidth = width - textX - AndroidUtilities.dp(18); - int size = AndroidUtilities.dp(44); - buttonX = AndroidUtilities.dp(16); - buttonY = AndroidUtilities.dp(5); + textWidth = width - textX - dp(18); + int size = dp(44); + buttonX = dp(16); + buttonY = dp(5); radialProgress.setProgressRect(buttonX, buttonY, buttonX + size, buttonY + size); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(8) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(8); + creditOffset = dp(8) + captionLayout.getHeight(); + height += creditOffset + dp(8); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } if (!isFirst && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } String author = currentMessageObject.getMusicAuthor(false); String title = currentMessageObject.getMusicTitle(false); - seekBarX = buttonX + AndroidUtilities.dp(50) + size; - int w = width - seekBarX - AndroidUtilities.dp(18); + seekBarX = buttonX + dp(50) + size; + int w = width - seekBarX - dp(18); if (!TextUtils.isEmpty(title) || !TextUtils.isEmpty(author)) { SpannableStringBuilder stringBuilder; if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) { @@ -6826,12 +7655,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg titleLayout = new DrawingText(); titleLayout.textLayout = new StaticLayout(stringFinal, audioTimePaint, w, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); titleLayout.parentBlock = currentBlock; - seekBarY = buttonY + (size - AndroidUtilities.dp(30)) / 2 + AndroidUtilities.dp(11); + seekBarY = buttonY + (size - dp(30)) / 2 + dp(11); } else { titleLayout = null; - seekBarY = buttonY + (size - AndroidUtilities.dp(30)) / 2; + seekBarY = buttonY + (size - dp(30)) / 2; } - seekBar.setSize(w, AndroidUtilities.dp(30)); + seekBar.setSize(w, dp(30)); } else { height = 1; } @@ -6846,7 +7675,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return; } radialProgress.setColorKeys(Theme.key_chat_inLoader, Theme.key_chat_inLoaderSelected, Theme.key_chat_inMediaIcon, Theme.key_chat_inMediaIconSelected); - radialProgress.setProgressColor(Theme.getColor(Theme.key_chat_inFileProgress)); + radialProgress.setProgressColor(getThemedColor(Theme.key_chat_inFileProgress)); radialProgress.draw(canvas); canvas.save(); canvas.translate(seekBarX, seekBarY); @@ -6855,14 +7684,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int count = 0; if (durationLayout != null) { canvas.save(); - canvas.translate(buttonX + AndroidUtilities.dp(54), seekBarY + AndroidUtilities.dp(6)); + canvas.translate(buttonX + dp(54), seekBarY + dp(6)); durationLayout.draw(canvas); canvas.restore(); } if (titleLayout != null) { canvas.save(); - titleLayout.x = buttonX + AndroidUtilities.dp(54); - titleLayout.y = seekBarY - AndroidUtilities.dp(16); + titleLayout.x = buttonX + dp(54); + titleLayout.y = seekBarY - dp(16); canvas.translate(titleLayout.x, titleLayout.y); drawTextSelection(canvas, this, count++); titleLayout.draw(canvas, this); @@ -6887,7 +7716,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -6927,7 +7756,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg String timeString = AndroidUtilities.formatShortDuration(duration); if (lastTimeString == null || lastTimeString != null && !lastTimeString.equals(timeString)) { lastTimeString = timeString; - audioTimePaint.setTextSize(AndroidUtilities.dp(16)); + audioTimePaint.setTextSize(dp(16)); int timeWidth = (int) Math.ceil(audioTimePaint.measureText(timeString)); durationLayout = new StaticLayout(timeString, audioTimePaint, timeWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); } @@ -7082,8 +7911,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg parentAdapter = adapter; avatarImageView = new ImageReceiver(this); - avatarImageView.setRoundRadius(AndroidUtilities.dp(20)); - avatarImageView.setImageCoords(AndroidUtilities.dp(18 + 14), AndroidUtilities.dp(8), AndroidUtilities.dp(40), AndroidUtilities.dp(40)); + avatarImageView.setRoundRadius(dp(20)); + avatarImageView.setImageCoords(dp(18 + 14), dp(8), dp(40), dp(40)); avatarDrawable = new AvatarDrawable(); } @@ -7107,53 +7936,53 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { if (currentBlock instanceof TL_pageBlockEmbedPostCaption) { height = 0; - textX = AndroidUtilities.dp(18); - textY = AndroidUtilities.dp(4); - int textWidth = width - AndroidUtilities.dp(36 + 14); + textX = dp(18); + textY = dp(4); + int textWidth = width - dp(36 + 14); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } } else { if (avatarVisible = (currentBlock.author_photo_id != 0)) { TLRPC.Photo photo = parentAdapter.getPhotoWithId(currentBlock.author_photo_id); if (avatarVisible = (photo instanceof TLRPC.TL_photo)) { avatarDrawable.setInfo(0, currentBlock.author, null); - TLRPC.PhotoSize image = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, AndroidUtilities.dp(40), true); + TLRPC.PhotoSize image = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, dp(40), true); avatarImageView.setImage(ImageLocation.getForPhoto(image, photo), "40_40", avatarDrawable, 0, null, parentAdapter.currentPage, 1); } } - nameLayout = createLayoutForText(this, currentBlock.author, null, width - AndroidUtilities.dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); + nameLayout = createLayoutForText(this, currentBlock.author, null, width - dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); if (nameLayout != null) { - nameLayout.x = AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); - nameLayout.y = AndroidUtilities.dp(dateLayout != null ? 10 : 19); + nameLayout.x = dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); + nameLayout.y = dp(dateLayout != null ? 10 : 19); } if (currentBlock.date != 0) { - dateLayout = createLayoutForText(this, LocaleController.getInstance().getChatFullDate().format((long) currentBlock.date * 1000), null, width - AndroidUtilities.dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), AndroidUtilities.dp(29), currentBlock, parentAdapter); + dateLayout = createLayoutForText(this, LocaleController.getInstance().getChatFullDate().format((long) currentBlock.date * 1000), null, width - dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), dp(29), currentBlock, parentAdapter); } else { dateLayout = null; } - height = AndroidUtilities.dp(40 + 8 + 8); + height = dp(40 + 8 + 8); if (currentBlock.blocks.isEmpty()) { - textX = AndroidUtilities.dp(18 + 14); - textY = AndroidUtilities.dp(40 + 8 + 8); - int textWidth = width - AndroidUtilities.dp(36 + 14); + textX = dp(18 + 14); + textY = dp(40 + 8 + 8); + int textWidth = width - dp(36 + 14); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } } else { captionLayout = null; @@ -7161,8 +7990,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (dateLayout != null) { - dateLayout.x = AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); - dateLayout.y = AndroidUtilities.dp(29); + dateLayout.x = dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); + dateLayout.y = dp(29); } if (captionLayout != null) { @@ -7194,19 +8023,19 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (nameLayout != null) { canvas.save(); - canvas.translate(AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), AndroidUtilities.dp(dateLayout != null ? 10 : 19)); + canvas.translate(dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), dp(dateLayout != null ? 10 : 19)); drawTextSelection(canvas, this, count++); nameLayout.draw(canvas, this); canvas.restore(); } if (dateLayout != null) { canvas.save(); - canvas.translate(AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), AndroidUtilities.dp(29)); + canvas.translate(dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), dp(29)); drawTextSelection(canvas, this, count++); dateLayout.draw(canvas, this); canvas.restore(); } - canvas.drawRect(AndroidUtilities.dp(18), AndroidUtilities.dp(6), AndroidUtilities.dp(20), lineHeight - (currentBlock.level != 0 ? 0 : AndroidUtilities.dp(6)), quoteLinePaint); + canvas.drawRect(dp(18), dp(6), dp(20), lineHeight - (currentBlock.level != 0 ? 0 : dp(6)), quoteLinePaint); } if (captionLayout != null) { canvas.save(); @@ -7274,19 +8103,19 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { if (currentBlock.level == 0) { - textY = AndroidUtilities.dp(8); - textX = AndroidUtilities.dp(18); + textY = dp(8); + textX = dp(18); } else { textY = 0; - textX = AndroidUtilities.dp(18 + 14 * currentBlock.level); + textX = dp(18 + 14 * currentBlock.level); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, 0, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, 0, parentAdapter); if (textLayout != null) { height = textLayout.getHeight(); if (currentBlock.level > 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } else { - height += AndroidUtilities.dp(8 + 8); + height += dp(8 + 8); } textLayout.x = textX; textLayout.y = textY; @@ -7312,7 +8141,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -7352,8 +8181,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - private TouchyWebView webView; - private WebPlayerView videoView; + @Nullable + private final TouchyWebView webView; + @Nullable + private final WebPlayerView videoView; private DrawingText captionLayout; private DrawingText creditLayout; private int textX; @@ -7394,246 +8225,273 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg parentAdapter = adapter; setWillNotDraw(false); - videoView = new WebPlayerView(context, false, false, new WebPlayerView.WebPlayerViewDelegate() { - @Override - public void onInitFailed() { - webView.setVisibility(VISIBLE); - videoView.setVisibility(INVISIBLE); - videoView.loadVideo(null, null, null, null, false); - HashMap args = new HashMap<>(); - args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); - webView.loadUrl(currentBlock.url, args); - } + if (Looper.myLooper() == Looper.getMainLooper()) { + videoView = new WebPlayerView(context, false, false, new WebPlayerView.WebPlayerViewDelegate() { + @Override + public void onInitFailed() { + webView.setVisibility(VISIBLE); + videoView.setVisibility(INVISIBLE); + videoView.loadVideo(null, null, null, null, false); + HashMap args = new HashMap<>(); + args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); + webView.loadUrl(currentBlock.url, args); + } - @Override - public void onVideoSizeChanged(float aspectRatio, int rotation) { - fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); - } - - @Override - public void onInlineSurfaceTextureReady() { - - } - - @Override - public TextureView onSwitchToFullscreen(View controlsView, boolean fullscreen, float aspectRatio, int rotation, boolean byButton) { - if (fullscreen) { - fullscreenAspectRatioView.addView(fullscreenTextureView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - fullscreenAspectRatioView.setVisibility(View.VISIBLE); + @Override + public void onVideoSizeChanged(float aspectRatio, int rotation) { fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); - fullscreenedVideo = videoView; - fullscreenVideoContainer.addView(controlsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - fullscreenVideoContainer.setVisibility(VISIBLE); - } else { - fullscreenAspectRatioView.removeView(fullscreenTextureView); - fullscreenedVideo = null; - fullscreenAspectRatioView.setVisibility(View.GONE); - fullscreenVideoContainer.setVisibility(INVISIBLE); } - return fullscreenTextureView; - } - @Override - public void prepareToSwitchInlineMode(boolean inline, Runnable switchInlineModeRunnable, float aspectRatio, boolean animated) { + @Override + public void onInlineSurfaceTextureReady() { - } - - @Override - public TextureView onSwitchInlineMode(View controlsView, boolean inline, int videoWidth, int videoHeight, int rotation, boolean animated) { - return null; - } - - @Override - public void onSharePressed() { - if (parentActivity == null) { - return; } - showDialog(new ShareAlert(parentActivity, null, currentBlock.url, false, currentBlock.url, false)); - } - @Override - public void onPlayStateChanged(WebPlayerView playerView, boolean playing) { - if (playing) { - if (currentPlayingVideo != null && currentPlayingVideo != playerView) { - currentPlayingVideo.pause(); - } - currentPlayingVideo = playerView; - try { - parentActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } catch (Exception e) { - FileLog.e(e); - } - } else { - if (currentPlayingVideo == playerView) { - currentPlayingVideo = null; - } - try { - parentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } catch (Exception e) { - FileLog.e(e); - } - } - } - - @Override - public boolean checkInlinePermissions() { - return false; - } - - @Override - public ViewGroup getTextureViewContainer() { - return null; - } - }); - addView(videoView); - createdWebViews.add(this); - - webView = new TouchyWebView(context); - webView.getSettings().setJavaScriptEnabled(true); - webView.getSettings().setDomStorageEnabled(true); - - webView.getSettings().setAllowContentAccess(true); - if (Build.VERSION.SDK_INT >= 17) { - webView.getSettings().setMediaPlaybackRequiresUserGesture(false); - webView.addJavascriptInterface(new TelegramWebviewProxy(), "TelegramWebviewProxy"); - } - - if (Build.VERSION.SDK_INT >= 21) { - webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - CookieManager cookieManager = CookieManager.getInstance(); - cookieManager.setAcceptThirdPartyCookies(webView, true); - } - - webView.setWebChromeClient(new WebChromeClient() { - - @Override - public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { - onShowCustomView(view, callback); - } - - @Override - public void onShowCustomView(View view, CustomViewCallback callback) { - if (customView != null) { - callback.onCustomViewHidden(); - return; - } - customView = view; - customViewCallback = callback; - AndroidUtilities.runOnUIThread(() -> { - if (customView != null) { - fullscreenVideoContainer.addView(customView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + @Override + public TextureView onSwitchToFullscreen(View controlsView, boolean fullscreen, float aspectRatio, int rotation, boolean byButton) { + if (fullscreen) { + fullscreenAspectRatioView.addView(fullscreenTextureView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + fullscreenAspectRatioView.setVisibility(View.VISIBLE); + fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); + fullscreenedVideo = videoView; + fullscreenVideoContainer.addView(controlsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); fullscreenVideoContainer.setVisibility(VISIBLE); + } else { + fullscreenAspectRatioView.removeView(fullscreenTextureView); + fullscreenedVideo = null; + fullscreenAspectRatioView.setVisibility(View.GONE); + fullscreenVideoContainer.setVisibility(INVISIBLE); } - }, 100); + return fullscreenTextureView; + } + + @Override + public void prepareToSwitchInlineMode(boolean inline, Runnable switchInlineModeRunnable, float aspectRatio, boolean animated) { + + } + + @Override + public TextureView onSwitchInlineMode(View controlsView, boolean inline, int videoWidth, int videoHeight, int rotation, boolean animated) { + return null; + } + + @Override + public void onSharePressed() { + if (parentActivity == null) { + return; + } + showDialog(new ShareAlert(parentActivity, null, currentBlock.url, false, currentBlock.url, false)); + } + + @Override + public void onPlayStateChanged(WebPlayerView playerView, boolean playing) { + if (playing) { + if (currentPlayingVideo != null && currentPlayingVideo != playerView) { + currentPlayingVideo.pause(); + } + currentPlayingVideo = playerView; + try { + parentActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } catch (Exception e) { + FileLog.e(e); + } + } else { + if (currentPlayingVideo == playerView) { + currentPlayingVideo = null; + } + try { + parentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } catch (Exception e) { + FileLog.e(e); + } + } + } + + @Override + public boolean checkInlinePermissions() { + return false; + } + + @Override + public ViewGroup getTextureViewContainer() { + return null; + } + }); + addView(videoView); + createdWebViews.add(this); + + webView = new TouchyWebView(context); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); + + webView.getSettings().setAllowContentAccess(true); + if (Build.VERSION.SDK_INT >= 17) { + webView.getSettings().setMediaPlaybackRequiresUserGesture(false); + webView.addJavascriptInterface(new TelegramWebviewProxy(), "TelegramWebviewProxy"); } - @Override - public void onHideCustomView() { - super.onHideCustomView(); - if (customView == null) { - return; - } - fullscreenVideoContainer.setVisibility(INVISIBLE); - fullscreenVideoContainer.removeView(customView); - if (customViewCallback != null && !customViewCallback.getClass().getName().contains(".chromium.")) { - customViewCallback.onCustomViewHidden(); - } - customView = null; + if (Build.VERSION.SDK_INT >= 21) { + webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + CookieManager cookieManager = CookieManager.getInstance(); + cookieManager.setAcceptThirdPartyCookies(webView, true); } - }); - webView.setWebViewClient(new WebViewClient() { - @Override - public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { - if (LaunchActivity.instance != null && LaunchActivity.instance.isFinishing()) { + webView.setWebChromeClient(new WebChromeClient() { + + @Override + public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { + onShowCustomView(view, callback); + } + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + if (customView != null) { + callback.onCustomViewHidden(); + return; + } + customView = view; + customViewCallback = callback; + AndroidUtilities.runOnUIThread(() -> { + if (customView != null) { + fullscreenVideoContainer.addView(customView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + fullscreenVideoContainer.setVisibility(VISIBLE); + } + }, 100); + } + + @Override + public void onHideCustomView() { + super.onHideCustomView(); + if (customView == null) { + return; + } + fullscreenVideoContainer.setVisibility(INVISIBLE); + fullscreenVideoContainer.removeView(customView); + if (customViewCallback != null && !customViewCallback.getClass().getName().contains(".chromium.")) { + customViewCallback.onCustomViewHidden(); + } + customView = null; + } + }); + + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { + if (LaunchActivity.instance != null && LaunchActivity.instance.isFinishing()) { + return true; + } + new AlertDialog.Builder(getContext(), null) + .setTitle(getString(R.string.ChromeCrashTitle)) + .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) + .setPositiveButton(getString(R.string.OK), null) + .show(); return true; } - new AlertDialog.Builder(getContext(), null) - .setTitle(getString(R.string.ChromeCrashTitle)) - .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) - .setPositiveButton(getString(R.string.OK), null) - .show(); - return true; - } - @Override - public void onLoadResource(WebView view, String url) { - super.onLoadResource(view, url); - } - - @Override - public void onPageFinished(WebView view, String url) { - super.onPageFinished(view, url); - //progressBar.setVisibility(INVISIBLE); - } - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (wasUserInteraction) { - Browser.openUrl(parentActivity, url); - return true; + @Override + public void onLoadResource(WebView view, String url) { + super.onLoadResource(view, url); } - return false; - } - }); - addView(webView); + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + //progressBar.setVisibility(INVISIBLE); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (wasUserInteraction) { + Browser.openUrl(parentActivity, url); + return true; + } + return false; + } + }); + addView(webView); + } else { + videoView = null; + webView = null; + } } public void destroyWebView(boolean completely) { try { - webView.stopLoading(); - webView.loadUrl("about:blank"); - if (completely) { - webView.destroy(); + if (webView != null) { + webView.stopLoading(); + webView.loadUrl("about:blank"); + if (completely) { + webView.destroy(); + } } currentBlock = null; } catch (Exception e) { FileLog.e(e); } - videoView.destroy(); + if (videoView != null) { + videoView.destroy(); + } } public void setBlock(TLRPC.TL_pageBlockEmbed block) { TLRPC.TL_pageBlockEmbed previousBlock = currentBlock; currentBlock = block; - webView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + if (webView != null) { + webView.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + } if (previousBlock != currentBlock) { wasUserInteraction = false; - if (currentBlock.allow_scrolling) { - webView.setVerticalScrollBarEnabled(true); - webView.setHorizontalScrollBarEnabled(true); - } else { - webView.setVerticalScrollBarEnabled(false); - webView.setHorizontalScrollBarEnabled(false); + if (webView != null) { + if (currentBlock.allow_scrolling) { + webView.setVerticalScrollBarEnabled(true); + webView.setHorizontalScrollBarEnabled(true); + } else { + webView.setVerticalScrollBarEnabled(false); + webView.setHorizontalScrollBarEnabled(false); + } } exactWebViewHeight = 0; - try { - webView.loadUrl("about:blank"); - } catch (Exception e) { - FileLog.e(e); + if (webView != null) { + try { + webView.loadUrl("about:blank"); + } catch (Exception e) { + FileLog.e(e); + } } try { if (currentBlock.html != null) { - webView.loadDataWithBaseURL("https://telegram.org/embed", currentBlock.html, "text/html", "UTF-8", null); - videoView.setVisibility(INVISIBLE); - videoView.loadVideo(null, null, null, null, false); - webView.setVisibility(VISIBLE); + if (webView != null) { + webView.loadDataWithBaseURL("https://telegram.org/embed", currentBlock.html, "text/html", "UTF-8", null); + webView.setVisibility(VISIBLE); + } + if (videoView != null) { + videoView.setVisibility(INVISIBLE); + videoView.loadVideo(null, null, null, null, false); + } } else { TLRPC.Photo thumb = currentBlock.poster_photo_id != 0 ? parentAdapter.getPhotoWithId(currentBlock.poster_photo_id) : null; boolean handled = videoView.loadVideo(block.url, thumb, parentAdapter.currentPage, null, false); if (handled) { - webView.setVisibility(INVISIBLE); - videoView.setVisibility(VISIBLE); - webView.stopLoading(); - webView.loadUrl("about:blank"); + if (webView != null) { + webView.setVisibility(INVISIBLE); + webView.stopLoading(); + webView.loadUrl("about:blank"); + } + if (videoView != null) { + videoView.setVisibility(VISIBLE); + } } else { - webView.setVisibility(VISIBLE); - videoView.setVisibility(INVISIBLE); - videoView.loadVideo(null, null, null, null, false); - HashMap args = new HashMap<>(); - args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); - webView.loadUrl(currentBlock.url, args); + if (webView != null) { + webView.setVisibility(VISIBLE); + HashMap args = new HashMap<>(); + args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); + webView.loadUrl(currentBlock.url, args); + } + if (videoView != null) { + videoView.setVisibility(INVISIBLE); + videoView.loadVideo(null, null, null, null, false); + } } } } catch (Exception e) { @@ -7671,16 +8529,16 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int listWidth = width; int textWidth; if (currentBlock.level > 0) { - textX = listX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - listWidth -= listX + AndroidUtilities.dp(18); + textX = listX = dp(14 * currentBlock.level) + dp(18); + listWidth -= listX + dp(18); textWidth = listWidth; } else { listX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); if (!currentBlock.full_width) { - listWidth -= AndroidUtilities.dp(36); - listX += AndroidUtilities.dp(18); + listWidth -= dp(36); + listX += dp(18); } } float scale; @@ -7690,39 +8548,41 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg scale = width / (float) currentBlock.w; } if (exactWebViewHeight != 0) { - height = AndroidUtilities.dp(exactWebViewHeight); + height = dp(exactWebViewHeight); } else { - height = (int) (currentBlock.w == 0 ? AndroidUtilities.dp(currentBlock.h) * scale : currentBlock.h * scale); + height = (int) (currentBlock.w == 0 ? dp(currentBlock.h) * scale : currentBlock.h * scale); } if (height == 0) { - height = AndroidUtilities.dp(10); + height = dp(10); } - webView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); - if (videoView.getParent() == this) { - videoView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height + AndroidUtilities.dp(10), MeasureSpec.EXACTLY)); + if (webView != null) { + webView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + } + if (videoView != null && videoView.getParent() == this) { + videoView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height + dp(10), MeasureSpec.EXACTLY)); } - textY = AndroidUtilities.dp(8) + height; + textY = dp(8) + height; captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } else { creditOffset = 0; } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = creditOffset; } - height += AndroidUtilities.dp(5); + height += dp(5); if (currentBlock.level > 0 && !currentBlock.bottom) { - height += AndroidUtilities.dp(8); + height += dp(8); } else if (currentBlock.level == 0 && captionLayout != null) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (captionLayout != null) { captionLayout.x = textX; @@ -7737,8 +8597,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - webView.layout(listX, 0, listX + webView.getMeasuredWidth(), webView.getMeasuredHeight()); - if (videoView.getParent() == this) { + if (webView != null) { + webView.layout(listX, 0, listX + webView.getMeasuredWidth(), webView.getMeasuredHeight()); + } + if (videoView != null && videoView.getParent() == this) { videoView.layout(listX, 0, listX + videoView.getMeasuredWidth(), videoView.getMeasuredHeight()); } } @@ -7764,7 +8626,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -7804,7 +8666,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean intercept = super.onInterceptTouchEvent(ev); - if (tableLayout.getMeasuredWidth() > getMeasuredWidth() - AndroidUtilities.dp(36) && intercept) { + if (tableLayout.getMeasuredWidth() > getMeasuredWidth() - dp(36) && intercept) { windowView.requestDisallowInterceptTouchEvent(true); } return intercept; @@ -7812,7 +8674,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean onTouchEvent(MotionEvent ev) { - if (tableLayout.getMeasuredWidth() <= getMeasuredWidth() - AndroidUtilities.dp(36)) { + if (tableLayout.getMeasuredWidth() <= getMeasuredWidth() - dp(36)) { return false; } return super.onTouchEvent(ev); @@ -7843,7 +8705,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), tableLayout.getMeasuredHeight()); } }; - scrollView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); + scrollView.setPadding(dp(18), 0, dp(18), 0); scrollView.setClipToPadding(false); addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); @@ -7900,7 +8762,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg while ((index = lowerString.indexOf(searchText, startIndex)) >= 0) { startIndex = index + searchText.length(); if (index == 0 || AndroidUtilities.isPunctuationCharacter(lowerString.charAt(index - 1))) { - adapter[0].searchTextOffset.put(searchText + currentBlock + text.parentText + index, y + text.textLayout.getLineTop(text.textLayout.getLineForOffset(index))); + pages[0].adapter.searchTextOffset.put(searchText + currentBlock + text.parentText + index, y + text.textLayout.getLineTop(text.textLayout.getLineForOffset(index))); } } } @@ -7908,7 +8770,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg public void setBlock(TLRPC.TL_pageBlockTable block) { currentBlock = block; - AndroidUtilities.setScrollViewEdgeEffectColor(scrollView, Theme.getColor(Theme.key_windowBackgroundWhite)); + AndroidUtilities.setScrollViewEdgeEffectColor(scrollView, getThemedColor(Theme.key_windowBackgroundWhite)); tableLayout.removeAllChildrens(); tableLayout.setDrawLines(currentBlock.bordered); tableLayout.setStriped(currentBlock.striped); @@ -7969,31 +8831,31 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { int textWidth; if (currentBlock.level > 0) { - listX = AndroidUtilities.dp(14 * currentBlock.level); - textX = listX + AndroidUtilities.dp(18); + listX = dp(14 * currentBlock.level); + textX = listX + dp(18); textWidth = width - textX; } else { listX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } titleLayout = createLayoutForText(this, null, currentBlock.title, textWidth, 0, currentBlock, Layout.Alignment.ALIGN_CENTER, 0, parentAdapter); if (titleLayout != null) { textY = 0; - height += titleLayout.getHeight() + AndroidUtilities.dp(8); + height += titleLayout.getHeight() + dp(8); listY = height; titleLayout.x = textX; titleLayout.y = textY; } else { - listY = AndroidUtilities.dp(8); + listY = dp(8); } scrollView.measure(MeasureSpec.makeMeasureSpec(width - listX, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); - height += scrollView.getMeasuredHeight() + AndroidUtilities.dp(8); + height += scrollView.getMeasuredHeight() + dp(8); if (currentBlock.level > 0 && !currentBlock.bottom) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -8008,7 +8870,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg for (int i = 0, N = tableLayout.getChildCount(); i < N; i++) { TableLayout.Child c = tableLayout.getChildAt(i); if (c.textLayout != null) { - c.textLayout.x = c.getTextX() + listX + AndroidUtilities.dp(18) - scrollView.getScrollX(); + c.textLayout.x = c.getTextX() + listX + dp(18) - scrollView.getScrollX(); c.textLayout.y = c.getTextY() + listY; c.textLayout.row = c.getRow(); c.setSelectionIndex(count++); @@ -8021,7 +8883,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg scrollView.layout(listX, listY, listX + scrollView.getMeasuredWidth(), listY + scrollView.getMeasuredHeight()); if (firstLayout) { if (parentAdapter.isRtl) { - scrollView.setScrollX(tableLayout.getMeasuredWidth() - scrollView.getMeasuredWidth() + AndroidUtilities.dp(36)); + scrollView.setScrollX(tableLayout.getMeasuredWidth() - scrollView.getMeasuredWidth() + dp(36)); } else { scrollView.setScrollX(0); } @@ -8042,7 +8904,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -8175,9 +9037,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg posArray.add(position); } - int minHeight = AndroidUtilities.dp(120); - int minWidth = (int) (AndroidUtilities.dp(120) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); - int paddingsWidth = (int) (AndroidUtilities.dp(40) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); + int minHeight = dp(120); + int minWidth = (int) (dp(120) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); + int paddingsWidth = (int) (dp(40) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); float maxAspectRatio = maxSizeWidth / maxSizeHeight; averageAspectRatio = averageAspectRatio / count; @@ -8448,7 +9310,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg continue; } if (pos.minY == position.minY) { - h -= (int) Math.ceil(maxHeight * pos.ph) - AndroidUtilities.dp(4); + h -= (int) Math.ceil(maxHeight * pos.ph) - dp(4); break; } } @@ -8567,7 +9429,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg group.calculate(); } innerAdapter.notifyDataSetChanged(); - innerListView.setGlowColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + innerListView.setGlowColor(getThemedColor(Theme.key_windowBackgroundWhite)); requestLayout(); } @@ -8587,23 +9449,23 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int listWidth = width; int textWidth; if (currentBlock.level > 0) { - textX = listX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - listWidth -= listX + AndroidUtilities.dp(18); + textX = listX = dp(14 * currentBlock.level) + dp(18); + listWidth -= listX + dp(18); textWidth = listWidth; } else { listX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } innerListView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); height = innerListView.getMeasuredHeight(); - textY = height + AndroidUtilities.dp(8); + textY = height + dp(8); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } else { @@ -8611,14 +9473,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } - height += AndroidUtilities.dp(16); + height += dp(16); if (currentBlock.level > 0 && !currentBlock.bottom) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -8630,7 +9492,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - innerListView.layout(listX, AndroidUtilities.dp(8), listX + innerListView.getMeasuredWidth(), innerListView.getMeasuredHeight() + AndroidUtilities.dp(8)); + innerListView.layout(listX, dp(8), listX + innerListView.getMeasuredWidth(), innerListView.getMeasuredHeight() + dp(8)); } @Override @@ -8654,7 +9516,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -8681,7 +9543,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private TLRPC.TL_pageBlockSlideshow currentBlock; private DrawingText captionLayout; private DrawingText creditLayout; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private int creditOffset; @@ -8794,7 +9656,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } }); - AndroidUtilities.setViewPagerEdgeEffectColor(innerListView, Theme.getColor(Theme.key_windowBackgroundWhite)); + AndroidUtilities.setViewPagerEdgeEffectColor(innerListView, getThemedColor(Theme.key_windowBackgroundWhite)); addView(innerListView); dotsContainer = new View(context) { @@ -8805,14 +9667,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } int count = innerAdapter.getCount(); - int totalWidth = count * AndroidUtilities.dp(7) + (count - 1) * AndroidUtilities.dp(6) + AndroidUtilities.dp(4); + int totalWidth = count * dp(7) + (count - 1) * dp(6) + dp(4); int xOffset; if (totalWidth < getMeasuredWidth()) { xOffset = (getMeasuredWidth() - totalWidth) / 2; } else { - xOffset = AndroidUtilities.dp(4); - int size = AndroidUtilities.dp(13); - int halfCount = (getMeasuredWidth() - AndroidUtilities.dp(8)) / 2 / size; + xOffset = dp(4); + int size = dp(13); + int halfCount = (getMeasuredWidth() - dp(8)) / 2 / size; if (currentPage == count - halfCount - 1 && pageOffset < 0) { xOffset -= (int) (pageOffset * size) + (count - halfCount * 2 - 1) * size; } else if (currentPage >= count - halfCount - 1) { @@ -8824,9 +9686,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } for (int a = 0; a < currentBlock.items.size(); a++) { - int cx = xOffset + AndroidUtilities.dp(4) + AndroidUtilities.dp(13) * a; + int cx = xOffset + dp(4) + dp(13) * a; Drawable drawable = currentPage == a ? slideDotBigDrawable : slideDotDrawable; - drawable.setBounds(cx - AndroidUtilities.dp(5), 0, cx + AndroidUtilities.dp(5), AndroidUtilities.dp(10)); + drawable.setBounds(cx - dp(5), 0, cx + dp(5), dp(10)); drawable.draw(canvas); } } @@ -8856,17 +9718,17 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height; if (currentBlock != null) { - height = AndroidUtilities.dp(310); + height = dp(310); innerListView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); int count = currentBlock.items.size(); - dotsContainer.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(10), MeasureSpec.EXACTLY)); + dotsContainer.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(10), MeasureSpec.EXACTLY)); - int textWidth = width - AndroidUtilities.dp(36); - textY = height + AndroidUtilities.dp(16); + int textWidth = width - dp(36); + textY = height + dp(16); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } else { @@ -8874,12 +9736,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } - height += AndroidUtilities.dp(16); + height += dp(16); } else { height = 1; } @@ -8889,8 +9751,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - innerListView.layout(0, AndroidUtilities.dp(8), innerListView.getMeasuredWidth(), AndroidUtilities.dp(8) + innerListView.getMeasuredHeight()); - int y = innerListView.getBottom() - AndroidUtilities.dp(7 + 16); + innerListView.layout(0, dp(8), innerListView.getMeasuredWidth(), dp(8) + innerListView.getMeasuredHeight()); + int y = innerListView.getBottom() - dp(7 + 16); dotsContainer.layout(0, y, dotsContainer.getMeasuredWidth(), y + dotsContainer.getMeasuredHeight()); } @@ -8985,7 +9847,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { textLayout = null; - textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? AndroidUtilities.dp(10) : 0; + textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? dp(10) : 0; numOffsetY = 0; if (currentBlock.parent.lastMaxNumCalcWidth != width || currentBlock.parent.lastFontSize != SharedConfig.ivFontSize) { currentBlock.parent.lastMaxNumCalcWidth = width; @@ -8996,7 +9858,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (item.num == null) { continue; } - item.numLayout = createLayoutForText(this, item.num, null, width - AndroidUtilities.dp(36 + 18), textY, currentBlock, parentAdapter); + item.numLayout = createLayoutForText(this, item.num, null, width - dp(36 + 18), textY, currentBlock, parentAdapter); currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(item.numLayout.getLineWidth(0))); } currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(listTextNumPaint.measureText("00."))); @@ -9004,88 +9866,88 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg drawDot = !currentBlock.parent.pageBlockList.ordered; if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(18); + textX = dp(18); } else { - textX = AndroidUtilities.dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(12); + textX = dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(12); } - int maxWidth = width - AndroidUtilities.dp(18) - textX; + int maxWidth = width - dp(18) - textX; if (parentAdapter.isRtl) { - maxWidth -= AndroidUtilities.dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(12); + maxWidth -= dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(12); } if (currentBlock.textItem != null) { textLayout = createLayoutForText(this, null, currentBlock.textItem, maxWidth, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null && textLayout.getLineCount() > 0) { if (currentBlock.numLayout != null && currentBlock.numLayout.getLineCount() > 0) { int ascent = textLayout.getLineAscent(0); - numOffsetY = (currentBlock.numLayout.getLineAscent(0) + AndroidUtilities.dp(2.5f)) - ascent; + numOffsetY = (currentBlock.numLayout.getLineAscent(0) + dp(2.5f)) - ascent; } - height += textLayout.getHeight() + AndroidUtilities.dp(8); + height += textLayout.getHeight() + dp(8); } } else if (currentBlock.blockItem != null) { blockX = textX; blockY = textY; if (blockLayout != null) { if (blockLayout.itemView instanceof BlockParagraphCell) { - blockY -= AndroidUtilities.dp(8); + blockY -= dp(8); if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); - height -= AndroidUtilities.dp(8); + maxWidth += dp(18); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockHeaderCell || blockLayout.itemView instanceof BlockSubheaderCell || blockLayout.itemView instanceof BlockTitleCell || blockLayout.itemView instanceof BlockSubtitleCell) { if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); + maxWidth += dp(18); } else if (isListItemBlock(currentBlock.blockItem)) { blockX = 0; blockY = 0; textY = 0; if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height -= AndroidUtilities.dp(10); + height -= dp(10); } maxWidth = width; - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockTableCell) { - blockX -= AndroidUtilities.dp(18); - maxWidth += AndroidUtilities.dp(36); + blockX -= dp(18); + maxWidth += dp(36); } blockLayout.itemView.measure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); if (blockLayout.itemView instanceof BlockParagraphCell && currentBlock.numLayout != null && currentBlock.numLayout.getLineCount() > 0) { BlockParagraphCell paragraphCell = (BlockParagraphCell) blockLayout.itemView; if (paragraphCell.textLayout != null && paragraphCell.textLayout.getLineCount() > 0) { int ascent = paragraphCell.textLayout.getLineAscent(0); - numOffsetY = (currentBlock.numLayout.getLineAscent(0) + AndroidUtilities.dp(2.5f)) - ascent; + numOffsetY = (currentBlock.numLayout.getLineAscent(0) + dp(2.5f)) - ascent; } } if (currentBlock.blockItem instanceof TLRPC.TL_pageBlockDetails) { verticalAlign = true; blockY = 0; if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height -= AndroidUtilities.dp(10); + height -= dp(10); } - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockOrderedListItemCell) { verticalAlign = ((BlockOrderedListItemCell) blockLayout.itemView).verticalAlign; } else if (blockLayout.itemView instanceof BlockListItemCell) { verticalAlign = ((BlockListItemCell) blockLayout.itemView).verticalAlign; } if (verticalAlign && currentBlock.numLayout != null) { - textY = (blockLayout.itemView.getMeasuredHeight() - currentBlock.numLayout.getHeight()) / 2 - AndroidUtilities.dp(4); + textY = (blockLayout.itemView.getMeasuredHeight() - currentBlock.numLayout.getHeight()) / 2 - dp(4); drawDot = false; } height += blockLayout.itemView.getMeasuredHeight(); } - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.parent.items.get(currentBlock.parent.items.size() - 1) == currentBlock) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height += AndroidUtilities.dp(10); + height += dp(10); } if (textLayout != null) { textLayout.x = textX; @@ -9124,9 +9986,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock.numLayout != null) { canvas.save(); if (parentAdapter.isRtl) { - canvas.translate(width - AndroidUtilities.dp(15) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * AndroidUtilities.dp(12), textY + numOffsetY - (drawDot ? AndroidUtilities.dp(1) : 0)); + canvas.translate(width - dp(15) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * dp(12), textY + numOffsetY - (drawDot ? dp(1) : 0)); } else { - canvas.translate(AndroidUtilities.dp(15) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * AndroidUtilities.dp(12), textY + numOffsetY - (drawDot ? AndroidUtilities.dp(1) : 0)); + canvas.translate(dp(15) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * dp(12), textY + numOffsetY - (drawDot ? dp(1) : 0)); } currentBlock.numLayout.draw(canvas, this); canvas.restore(); @@ -9226,7 +10088,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { textLayout = null; - textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? AndroidUtilities.dp(10) : 0; + textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? dp(10) : 0; numOffsetY = 0; if (currentBlock.parent.lastMaxNumCalcWidth != width || currentBlock.parent.lastFontSize != SharedConfig.ivFontSize) { currentBlock.parent.lastMaxNumCalcWidth = width; @@ -9237,20 +10099,20 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (item.num == null) { continue; } - item.numLayout = createLayoutForText(this, item.num, null, width - AndroidUtilities.dp(36 + 18), textY, currentBlock, parentAdapter); + item.numLayout = createLayoutForText(this, item.num, null, width - dp(36 + 18), textY, currentBlock, parentAdapter); currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(item.numLayout.getLineWidth(0))); } currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(listTextNumPaint.measureText("00."))); } if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(18); + textX = dp(18); } else { - textX = AndroidUtilities.dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(20); + textX = dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(20); } verticalAlign = false; - int maxWidth = width - AndroidUtilities.dp(18) - textX; + int maxWidth = width - dp(18) - textX; if (parentAdapter.isRtl) { - maxWidth -= AndroidUtilities.dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(20); + maxWidth -= dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(20); } if (currentBlock.textItem != null) { textLayout = createLayoutForText(this, null, currentBlock.textItem, maxWidth, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); @@ -9259,36 +10121,36 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int ascent = textLayout.getLineAscent(0); numOffsetY = currentBlock.numLayout.getLineAscent(0) - ascent; } - height += textLayout.getHeight() + AndroidUtilities.dp(8); + height += textLayout.getHeight() + dp(8); } } else if (currentBlock.blockItem != null) { blockX = textX; blockY = textY; if (blockLayout != null) { if (blockLayout.itemView instanceof BlockParagraphCell) { - blockY -= AndroidUtilities.dp(8); + blockY -= dp(8); if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); - height -= AndroidUtilities.dp(8); + maxWidth += dp(18); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockHeaderCell || blockLayout.itemView instanceof BlockSubheaderCell || blockLayout.itemView instanceof BlockTitleCell || blockLayout.itemView instanceof BlockSubtitleCell) { if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); + maxWidth += dp(18); } else if (isListItemBlock(currentBlock.blockItem)) { blockX = 0; blockY = 0; textY = 0; maxWidth = width; - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockTableCell) { - blockX -= AndroidUtilities.dp(18); - maxWidth += AndroidUtilities.dp(36); + blockX -= dp(18); + maxWidth += dp(36); } blockLayout.itemView.measure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); if (blockLayout.itemView instanceof BlockParagraphCell && currentBlock.numLayout != null && currentBlock.numLayout.getLineCount() > 0) { @@ -9301,7 +10163,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock.blockItem instanceof TLRPC.TL_pageBlockDetails) { verticalAlign = true; blockY = 0; - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockOrderedListItemCell) { verticalAlign = ((BlockOrderedListItemCell) blockLayout.itemView).verticalAlign; } else if (blockLayout.itemView instanceof BlockListItemCell) { @@ -9312,13 +10174,13 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } height += blockLayout.itemView.getMeasuredHeight(); } - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.parent.items.get(currentBlock.parent.items.size() - 1) == currentBlock) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height += AndroidUtilities.dp(10); + height += dp(10); } if (textLayout != null) { textLayout.x = textX; @@ -9360,9 +10222,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock.numLayout != null) { canvas.save(); if (parentAdapter.isRtl) { - canvas.translate(width - AndroidUtilities.dp(18) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * AndroidUtilities.dp(20), textY + numOffsetY); + canvas.translate(width - dp(18) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * dp(20), textY + numOffsetY); } else { - canvas.translate(AndroidUtilities.dp(18) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * AndroidUtilities.dp(20), textY + numOffsetY); + canvas.translate(dp(18) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * dp(20), textY + numOffsetY); } currentBlock.numLayout.draw(canvas, this); canvas.restore(); @@ -9407,8 +10269,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private class BlockDetailsCell extends View implements Drawable.Callback, TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(44 + 6); - private int textY = AndroidUtilities.dp(11) + 1; + private int textX = dp(44 + 6); + private int textY = dp(11) + 1; private AnimatedArrowDrawable arrow; private TLRPC.TL_pageBlockDetails currentBlock; @@ -9453,12 +10315,12 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); - int h = AndroidUtilities.dp(39); + int h = dp(39); if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.title, width - AndroidUtilities.dp(36 + 16), 0, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.title, width - dp(36 + 16), 0, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - h = Math.max(h, AndroidUtilities.dp(21) + textLayout.getHeight()); - textY = (textLayout.getHeight() + AndroidUtilities.dp(21) - textLayout.getHeight()) / 2; + h = Math.max(h, dp(21) + textLayout.getHeight()); + textY = (textLayout.getHeight() + dp(21) - textLayout.getHeight()) / 2; textLayout.x = textX; textLayout.y = textY; } @@ -9472,7 +10334,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return; } canvas.save(); - canvas.translate(AndroidUtilities.dp(18), (getMeasuredHeight() - AndroidUtilities.dp(13) - 1) / 2); + canvas.translate(dp(18), (getMeasuredHeight() - dp(13) - 1) / 2); arrow.draw(canvas); canvas.restore(); @@ -9506,7 +10368,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 1 + AndroidUtilities.dp(4)); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 1 + dp(4)); } @Override @@ -9515,7 +10377,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - private static class BlockRelatedArticlesShadowCell extends View { + private class BlockRelatedArticlesShadowCell extends View { private CombinedDrawable shadowDrawable; @@ -9523,22 +10385,22 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg super(context); Drawable drawable = Theme.getThemedDrawable(context, R.drawable.greydivider_bottom, 0xff000000); - shadowDrawable = new CombinedDrawable(new ColorDrawable(Theme.getColor(Theme.key_windowBackgroundGray)), drawable); + shadowDrawable = new CombinedDrawable(new ColorDrawable(getThemedColor(Theme.key_iv_backgroundGray)), drawable); shadowDrawable.setFullsize(true); setBackgroundDrawable(shadowDrawable); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), AndroidUtilities.dp(12)); - Theme.setCombinedDrawableColor(shadowDrawable, Theme.getColor(Theme.key_windowBackgroundGray), false); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), dp(12)); + Theme.setCombinedDrawableColor(shadowDrawable, getThemedColor(Theme.key_iv_backgroundGray), false); } } private class BlockRelatedArticlesHeaderCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private TLRPC.TL_pageBlockRelatedArticles currentBlock; @@ -9564,13 +10426,13 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.title, width - AndroidUtilities.dp(36 + 16), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.title, width - dp(36 + 16), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); if (textLayout != null) { - textY = AndroidUtilities.dp(6) + (AndroidUtilities.dp(32) - textLayout.getHeight()) / 2; + textY = dp(6) + (dp(32) - textLayout.getHeight()) / 2; } } if (textLayout != null) { - setMeasuredDimension(width, AndroidUtilities.dp(38)); + setMeasuredDimension(width, dp(38)); textLayout.x = textX; textLayout.y = textY; } else { @@ -9611,8 +10473,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private TL_pageBlockRelatedArticlesChild currentBlock; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(10); + private int textX = dp(18); + private int textY = dp(10); private int textOffset; private WebpageAdapter parentAdapter; @@ -9622,7 +10484,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg parentAdapter = adapter; imageView = new ImageReceiver(this); - imageView.setRoundRadius(AndroidUtilities.dp(6)); + imageView.setRoundRadius(dp(6)); } public void setBlock(TL_pageBlockRelatedArticlesChild block) { @@ -9638,7 +10500,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg divider = currentBlock.num != currentBlock.parent.articles.size() - 1; TLRPC.TL_pageRelatedArticle item = currentBlock.parent.articles.get(currentBlock.num); - int additionalHeight = AndroidUtilities.dp(SharedConfig.ivFontSize - 16); + int additionalHeight = dp(SharedConfig.ivFontSize - 16); TLRPC.Photo photo = item.photo_id != 0 ? parentAdapter.getPhotoWithId(item.photo_id) : null; if (photo != null) { @@ -9653,15 +10515,15 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg drawImage = false; } - int layoutHeight = AndroidUtilities.dp(16 + 44); - int availableWidth = width - AndroidUtilities.dp(18 + 18); + int layoutHeight = dp(16 + 44); + int availableWidth = width - dp(18 + 18); if (drawImage) { - int imageWidth = AndroidUtilities.dp(44); - imageView.setImageCoords(width - imageWidth - AndroidUtilities.dp(8), AndroidUtilities.dp(8), imageWidth, imageWidth); - availableWidth -= imageView.getImageWidth() + AndroidUtilities.dp(6); + int imageWidth = dp(44); + imageView.setImageCoords(width - imageWidth - dp(8), dp(8), imageWidth, imageWidth); + availableWidth -= imageView.getImageWidth() + dp(6); } - int height = AndroidUtilities.dp(18); + int height = dp(18); boolean isTitleRtl = false; if (item.title != null) { @@ -9671,7 +10533,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (textLayout != null) { int count = textLayout.getLineCount(); lineCount -= count; - textOffset = textLayout.getHeight() + AndroidUtilities.dp(6) + additionalHeight; + textOffset = textLayout.getHeight() + dp(6) + additionalHeight; height += textLayout.getHeight(); for (int a = 0; a < count; a++) { if (textLayout.getLineLeft(a) != 0) { @@ -9700,7 +10562,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (textLayout2 != null) { height += textLayout2.getHeight(); if (textLayout != null) { - height += AndroidUtilities.dp(6) + additionalHeight; + height += dp(6) + additionalHeight; } textLayout2.x = textX; textLayout2.y = textY + textOffset; @@ -9720,7 +10582,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } int count = 0; canvas.save(); - canvas.translate(textX, AndroidUtilities.dp(10)); + canvas.translate(textX, dp(10)); if (textLayout != null) { drawTextSelection(canvas, this, count++); textLayout.draw(canvas, this); @@ -9732,7 +10594,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } canvas.restore(); if (divider) { - canvas.drawLine(parentAdapter.isRtl ? 0 : AndroidUtilities.dp(17), getMeasuredHeight() - 1, getMeasuredWidth() - (parentAdapter.isRtl ? AndroidUtilities.dp(17) : 0), getMeasuredHeight() - 1, dividerPaint); + canvas.drawLine(parentAdapter.isRtl ? 0 : dp(17), getMeasuredHeight() - 1, getMeasuredWidth() - (parentAdapter.isRtl ? dp(17) : 0), getMeasuredHeight() - 1, dividerPaint); } } @@ -9750,8 +10612,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private class BlockHeaderCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockHeader currentBlock; @@ -9779,9 +10641,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -9833,22 +10695,22 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), AndroidUtilities.dp(2 + 16)); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), dp(2 + 16)); } @Override protected void onDraw(Canvas canvas) { int width = getMeasuredWidth() / 3; - rect.set(width, AndroidUtilities.dp(8), width * 2, AndroidUtilities.dp(10)); - canvas.drawRoundRect(rect, AndroidUtilities.dp(1), AndroidUtilities.dp(1), dividerPaint); + rect.set(width, dp(8), width * 2, dp(10)); + canvas.drawRoundRect(rect, dp(1), dp(1), dividerPaint); } } private class BlockSubtitleCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockSubtitle currentBlock; @@ -9876,9 +10738,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -9926,8 +10788,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private DrawingText textLayout; private DrawingText textLayout2; private int textY2; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockPullquote currentBlock; @@ -9954,21 +10816,21 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8) + textLayout.getHeight(); + height += dp(8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } - textY2 = height + AndroidUtilities.dp(2); - textLayout2 = createLayoutForText(this, null, currentBlock.caption, width - AndroidUtilities.dp(36), textY2, currentBlock, parentAdapter); + textY2 = height + dp(2); + textLayout2 = createLayoutForText(this, null, currentBlock.caption, width - dp(36), textY2, currentBlock, parentAdapter); if (textLayout2 != null) { - height += AndroidUtilities.dp(8) + textLayout2.getHeight(); + height += dp(8) + textLayout2.getHeight(); textLayout2.x = textX; textLayout2.y = textY2; } if (height != 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -10016,7 +10878,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private DrawingText textLayout2; private int textY2; private int textX; - private int textY = AndroidUtilities.dp(8); + private int textY = dp(8); private TLRPC.TL_pageBlockBlockquote currentBlock; @@ -10043,34 +10905,34 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height = 0; if (currentBlock != null) { - int textWidth = width - AndroidUtilities.dp(36 + 14); + int textWidth = width - dp(36 + 14); if (currentBlock.level > 0) { - textWidth -= AndroidUtilities.dp(14 * currentBlock.level); + textWidth -= dp(14 * currentBlock.level); } textLayout = createLayoutForText(this, null, currentBlock.text, textWidth, textY, currentBlock, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8) + textLayout.getHeight(); + height += dp(8) + textLayout.getHeight(); } if (currentBlock.level > 0) { if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(14 + currentBlock.level * 14); + textX = dp(14 + currentBlock.level * 14); } else { - textX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18 + 14); + textX = dp(14 * currentBlock.level) + dp(18 + 14); } } else { if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(14); + textX = dp(14); } else { - textX = AndroidUtilities.dp(18 + 14); + textX = dp(18 + 14); } } - textY2 = height + AndroidUtilities.dp(8); + textY2 = height + dp(8); textLayout2 = createLayoutForText(this, null, currentBlock.caption, textWidth, textY2, currentBlock, parentAdapter); if (textLayout2 != null) { - height += AndroidUtilities.dp(8) + textLayout2.getHeight(); + height += dp(8) + textLayout2.getHeight(); } if (height != 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (textLayout != null) { textLayout.x = textX; @@ -10109,13 +10971,13 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (parentAdapter.isRtl) { - int x = getMeasuredWidth() - AndroidUtilities.dp(20); - canvas.drawRect(x, AndroidUtilities.dp(6), x + AndroidUtilities.dp(2), getMeasuredHeight() - AndroidUtilities.dp(6), quoteLinePaint); + int x = getMeasuredWidth() - dp(20); + canvas.drawRect(x, dp(6), x + dp(2), getMeasuredHeight() - dp(6), quoteLinePaint); } else { - canvas.drawRect(AndroidUtilities.dp(18 + currentBlock.level * 14), AndroidUtilities.dp(6), AndroidUtilities.dp(20 + currentBlock.level * 14), getMeasuredHeight() - AndroidUtilities.dp(6), quoteLinePaint); + canvas.drawRect(dp(18 + currentBlock.level * 14), dp(6), dp(20 + currentBlock.level * 14), getMeasuredHeight() - dp(6), quoteLinePaint); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -10223,7 +11085,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } float x = event.getX(); float y = event.getY(); - if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + AndroidUtilities.dp(39)) { + if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + dp(39)) { if (parentAdapter.channelBlock != null && event.getAction() == MotionEvent.ACTION_UP) { MessagesController.getInstance(currentAccount).openByUserName(ChatObject.getPublicUsername(parentAdapter.channelBlock.channel), parentFragment, 2); close(false, true); @@ -10231,7 +11093,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return true; } if (event.getAction() == MotionEvent.ACTION_DOWN && imageView.isInsideImage(x, y)) { - if (buttonState != -1 && x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) || buttonState == 0) { + if (buttonState != -1 && x >= buttonX && x <= buttonX + dp(48) && y >= buttonY && y <= buttonY + dp(48) || buttonState == 0) { buttonPressed = 1; invalidate(); } else { @@ -10267,19 +11129,19 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (currentBlock != null) { currentPhoto = parentAdapter.getPhotoWithId(currentBlock.photo_id); - int size = AndroidUtilities.dp(48); + int size = dp(48); int photoWidth = width; int photoHeight = height; int photoX; int textWidth; if (currentType == 0 && currentBlock.level > 0) { - textX = photoX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - photoWidth -= photoX + AndroidUtilities.dp(18); + textX = photoX = dp(14 * currentBlock.level) + dp(18); + photoWidth -= photoX + dp(18); textWidth = photoWidth; } else { photoX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } if (currentPhoto != null && currentPhotoObject != null) { currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(currentPhoto.sizes, 40, true); @@ -10293,7 +11155,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (parentBlock instanceof TLRPC.TL_pageBlockCover) { height = Math.min(height, photoWidth); } else { - int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(56)) * 0.9f); + int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - dp(56)) * 0.9f); if (height > maxHeight) { height = maxHeight; scale = height / (float) currentPhotoObject.h; @@ -10304,10 +11166,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg photoHeight = height; } else if (currentType == 2) { if ((groupPosition.flags & POSITION_FLAG_RIGHT) == 0) { - photoWidth -= AndroidUtilities.dp(2); + photoWidth -= dp(2); } if ((groupPosition.flags & POSITION_FLAG_BOTTOM) == 0) { - photoHeight -= AndroidUtilities.dp(2); + photoHeight -= dp(2); } if (groupPosition.leftSpanOffset != 0) { int offset = (int) Math.ceil(width * groupPosition.leftSpanOffset / 1000.0f); @@ -10315,7 +11177,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg photoX += offset; } } - imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8), photoWidth, photoHeight); + imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : dp(8), photoWidth, photoHeight); if (currentType == 0) { currentFilter = null; } else { @@ -10336,25 +11198,25 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg buttonY = (int) (imageView.getImageY() + (imageView.getImageHeight() - size) / 2.0f); radialProgress.setProgressRect(buttonX, buttonY, buttonX + size, buttonY + size); } - textY = (int) (imageView.getImageY() + imageView.getImageHeight() + AndroidUtilities.dp(8)); + textY = (int) (imageView.getImageY() + imageView.getImageHeight() + dp(8)); if (currentType == 0) { captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, 0, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } } if (!isFirst && currentType == 0 && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } boolean nextIsChannel = parentBlock instanceof TLRPC.TL_pageBlockCover && parentAdapter.blocks != null && parentAdapter.blocks.size() > 1 && parentAdapter.blocks.get(1) instanceof TLRPC.TL_pageBlockChannel; if (currentType != 2 && !nextIsChannel) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (captionLayout != null) { captionLayout.x = textX; @@ -10369,7 +11231,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg height = 1; } channelCell.measure(widthMeasureSpec, heightMeasureSpec); - channelCell.setTranslationY(imageView.getImageHeight() - AndroidUtilities.dp(39)); + channelCell.setTranslationY(imageView.getImageHeight() - dp(39)); setMeasuredDimension(width, height); } @@ -10389,9 +11251,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } if (!TextUtils.isEmpty(currentBlock.url)) { - int x = getMeasuredWidth() - AndroidUtilities.dp(11 + 24); - int y = (int) (imageView.getImageY() + AndroidUtilities.dp(11)); - linkDrawable.setBounds(x, y, x + AndroidUtilities.dp(24), y + AndroidUtilities.dp(24)); + int x = getMeasuredWidth() - dp(11 + 24); + int y = (int) (imageView.getImageY() + dp(11)); + linkDrawable.setBounds(x, y, x + dp(24), y + dp(24)); linkDrawable.draw(canvas); } int count = 0; @@ -10410,7 +11272,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -10602,13 +11464,13 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int photoX; int textWidth; if (currentType == 0 && currentBlock.level > 0) { - textX = photoX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - photoWidth -= photoX + AndroidUtilities.dp(18); + textX = photoX = dp(14 * currentBlock.level) + dp(18); + photoWidth -= photoX + dp(18); textWidth = photoWidth; } else { photoX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } if (currentType == 0) { @@ -10616,7 +11478,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg scale = photoWidth / (float) currentBlock.w; height = (int) (scale * currentBlock.h); - int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(56)) * 0.9f); + int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - dp(56)) * 0.9f); if (height > maxHeight) { height = maxHeight; scale = height / (float) currentBlock.h; @@ -10624,7 +11486,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg photoX += (width - photoX - photoWidth) / 2; } } - imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8), photoWidth, height); + imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : dp(8), photoWidth, height); String currentUrl = AndroidUtilities.formapMapUrl(currentAccount, currentBlock.geo.lat, currentBlock.geo._long, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), true, 15, -1); WebFile currentWebFile = WebFile.createWithGeoPoint(currentBlock.geo, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density))); @@ -10637,27 +11499,27 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } else if (currentUrl != null) { imageView.setImage(currentUrl, null, null, null, 0); } - textY = (int) (imageView.getImageY() + imageView.getImageHeight() + AndroidUtilities.dp(8)); + textY = (int) (imageView.getImageY() + imageView.getImageHeight() + dp(8)); if (currentType == 0) { captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } } if (!isFirst && currentType == 0 && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentType != 2) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -10672,7 +11534,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg return; } - Theme.chat_docBackPaint.setColor(Theme.getColor(Theme.key_chat_inLocationBackground)); + Theme.chat_docBackPaint.setColor(getThemedColor(Theme.key_chat_inLocationBackground)); canvas.drawRect(imageView.getImageX(), imageView.getImageY(), imageView.getImageX2(), imageView.getImageY2(), Theme.chat_docBackPaint); int left = (int) (imageView.getCenterX() - Theme.chat_locationDrawable[0].getIntrinsicWidth() / 2); int top = (int) (imageView.getCenterY() - Theme.chat_locationDrawable[0].getIntrinsicHeight() / 2); @@ -10708,7 +11570,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -10744,8 +11606,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private DrawingText textLayout; private int buttonWidth; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(11); + private int textX = dp(18); + private int textY = dp(11); private int textX2; private Paint backgroundPaint; private AnimatorSet currentAnimation; @@ -10789,7 +11651,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg currentBlock = block; if (currentType == 0) { - int color = Theme.getColor(Theme.key_switchTrack); + int color = getThemedColor(Theme.key_switchTrack); int r = Color.red(color); int g = Color.green(color); int b = Color.blue(color); @@ -10865,14 +11727,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); - setMeasuredDimension(width, AndroidUtilities.dp(39 + 9)); + setMeasuredDimension(width, dp(39 + 9)); - textView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY)); + textView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY)); buttonWidth = textView.getMeasuredWidth(); - progressView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY)); - imageView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY)); + progressView.measure(MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY)); + imageView.measure(MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY)); if (currentBlock != null) { - textLayout = createLayoutForText(this, currentBlock.channel.title, null, width - AndroidUtilities.dp(36 + 16) - buttonWidth, textY, currentBlock, StaticLayoutEx.ALIGN_LEFT(), 1, parentAdapter); + textLayout = createLayoutForText(this, currentBlock.channel.title, null, width - dp(36 + 16) - buttonWidth, textY, currentBlock, StaticLayoutEx.ALIGN_LEFT(), 1, parentAdapter); if (parentAdapter.isRtl) { textX2 = textX; } else { @@ -10887,8 +11749,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - imageView.layout(textX2 + buttonWidth / 2 - AndroidUtilities.dp(19), 0, textX2 + buttonWidth / 2 + AndroidUtilities.dp(20), AndroidUtilities.dp(39)); - progressView.layout(textX2 + buttonWidth / 2 - AndroidUtilities.dp(19), 0, textX2 + buttonWidth / 2 + AndroidUtilities.dp(20), AndroidUtilities.dp(39)); + imageView.layout(textX2 + buttonWidth / 2 - dp(19), 0, textX2 + buttonWidth / 2 + dp(20), dp(39)); + progressView.layout(textX2 + buttonWidth / 2 - dp(19), 0, textX2 + buttonWidth / 2 + dp(20), dp(39)); textView.layout(textX2, 0, textX2 + textView.getMeasuredWidth(), textView.getMeasuredHeight()); } @@ -10897,7 +11759,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock == null) { return; } - canvas.drawRect(0, 0, getMeasuredWidth(), AndroidUtilities.dp(39), backgroundPaint); + canvas.drawRect(0, 0, getMeasuredWidth(), dp(39), backgroundPaint); if (textLayout != null && textLayout.getLineCount() > 0) { canvas.save(); if (parentAdapter.isRtl) { @@ -10925,7 +11787,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private DrawingText textLayout; private int textX; - private int textY = AndroidUtilities.dp(8); + private int textY = dp(8); private TLRPC.TL_pageBlockAuthorDate currentBlock; @@ -10984,13 +11846,13 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } catch (Exception e) { FileLog.e(e); } - textLayout = createLayoutForText(this, text, null, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter); + textLayout = createLayoutForText(this, text, null, width - dp(36), textY, currentBlock, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); if (parentAdapter.isRtl) { - textX = (int) Math.floor(width - textLayout.getLineLeft(0) - textLayout.getLineWidth(0) - AndroidUtilities.dp(16)); + textX = (int) Math.floor(width - textLayout.getLineLeft(0) - textLayout.getLineWidth(0) - dp(16)); } else { - textX = AndroidUtilities.dp(18); + textX = dp(18); } textLayout.x = textX; textLayout.y = textY; @@ -11038,7 +11900,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private DrawingText textLayout; private TLRPC.TL_pageBlockTitle currentBlock; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private WebpageAdapter parentAdapter; @@ -11066,14 +11928,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { if (currentBlock.first) { - height += AndroidUtilities.dp(8); - textY = AndroidUtilities.dp(16); + height += dp(8); + textY = dp(16); } else { - textY = AndroidUtilities.dp(8); + textY = dp(8); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -11120,7 +11982,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private DrawingText textLayout; private TLRPC.TL_pageBlockKicker currentBlock; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private WebpageAdapter parentAdapter; @@ -11148,14 +12010,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { if (currentBlock.first) { - textY = AndroidUtilities.dp(16); - height += AndroidUtilities.dp(8); + textY = dp(16); + height += dp(8); } else { - textY = AndroidUtilities.dp(8); + textY = dp(8); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -11191,8 +12053,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private class BlockFooterCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockFooter currentBlock; @@ -11221,19 +12083,19 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock != null) { if (currentBlock.level == 0) { - textY = AndroidUtilities.dp(8); - textX = AndroidUtilities.dp(18); + textY = dp(8); + textX = dp(18); } else { textY = 0; - textX = AndroidUtilities.dp(18 + 14 * currentBlock.level); + textX = dp(18 + 14 * currentBlock.level); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { height = textLayout.getHeight(); if (currentBlock.level > 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } else { - height += AndroidUtilities.dp(8 + 8); + height += dp(8 + 8); } textLayout.x = textX; textLayout.y = textY; @@ -11258,7 +12120,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -11302,7 +12164,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } }; - scrollView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + scrollView.setPadding(0, dp(8), 0, dp(8)); addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); textContainer = new View(context) { @@ -11312,7 +12174,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height = 0; int width = 1; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, AndroidUtilities.dp(5000), 0, currentBlock, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, dp(5000), 0, currentBlock, parentAdapter); if (textLayout != null) { height += textLayout.getHeight(); for (int a = 0, count = textLayout.getLineCount(); a < count; a++) { @@ -11322,7 +12184,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } else { height = 1; } - setMeasuredDimension(width + AndroidUtilities.dp(32), height); + setMeasuredDimension(width + dp(32), height); } @Override @@ -11343,8 +12205,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } }; HorizontalScrollView.LayoutParams layoutParams = new HorizontalScrollView.LayoutParams(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT); - layoutParams.leftMargin = layoutParams.rightMargin = AndroidUtilities.dp(16); - layoutParams.topMargin = layoutParams.bottomMargin = AndroidUtilities.dp(12); + layoutParams.leftMargin = layoutParams.rightMargin = dp(16); + layoutParams.topMargin = layoutParams.bottomMargin = dp(12); scrollView.addView(textContainer, layoutParams); if (Build.VERSION.SDK_INT >= 23) { @@ -11376,7 +12238,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (currentBlock == null) { return; } - canvas.drawRect(0, AndroidUtilities.dp(8), getMeasuredWidth(), getMeasuredHeight() - AndroidUtilities.dp(8), preformattedBackgroundPaint); + canvas.drawRect(0, dp(8), getMeasuredWidth(), getMeasuredHeight() - dp(8), preformattedBackgroundPaint); } @Override @@ -11396,8 +12258,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg private class BlockSubheaderCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockSubheader currentBlock; @@ -11425,9 +12287,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -11470,7 +12332,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - private static class ReportCell extends FrameLayout { + private class ReportCell extends FrameLayout { private TextView textView; private TextView viewsTextView; @@ -11484,19 +12346,19 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg textView.setText(LocaleController.getString("PreviewFeedback2", R.string.PreviewFeedback2)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); textView.setGravity(Gravity.CENTER); - textView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); + textView.setPadding(dp(18), 0, dp(18), 0); addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 34, Gravity.LEFT | Gravity.TOP, 0, 10, 0, 0)); viewsTextView = new TextView(context); viewsTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); viewsTextView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); - viewsTextView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); + viewsTextView.setPadding(dp(18), 0, dp(18), 0); addView(viewsTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 34, Gravity.LEFT | Gravity.TOP, 0, 10, 0, 0)); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(44), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(44), MeasureSpec.EXACTLY)); } public void setViews(int count) { @@ -11510,7 +12372,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg textView.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); viewsTextView.setText(LocaleController.formatPluralStringComma("Views", count)); } - int color = Theme.getColor(Theme.key_switchTrack); + int color = getThemedColor(Theme.key_switchTrack); textView.setTextColor(getGrayTextColor()); viewsTextView.setTextColor(getGrayTextColor()); textView.setBackgroundColor(Color.argb(34, Color.red(color), Color.green(color), Color.blue(color))); @@ -11585,7 +12447,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean isHardwarePlayer(int index) { - return !(index >= pageBlocks.size() || index < 0) && !WebPageUtils.isVideo(page, get(index)) && adapter[0].getTypeForBlock(get(index)) == 5; + return !(index >= pageBlocks.size() || index < 0) && !WebPageUtils.isVideo(page, get(index)) && pages[0].adapter.getTypeForBlock(get(index)) == 5; } @Override @@ -11624,7 +12486,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg stringBuilder.setSpan(new URLSpan(url) { @Override public void onClick(View widget) { - openWebpageUrl(getURL(), null); + openWebpageUrl(getURL(), null, makeProgress(pressedLink, pressedLinkOwnerLayout)); } }, 0, url.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); caption = stringBuilder; @@ -11632,7 +12494,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } if (caption == null) { TLRPC.RichText captionRichText = getBlockCaption(pageBlock, 2); - caption = getText(page, null, captionRichText, captionRichText, pageBlock, -AndroidUtilities.dp(100)); + caption = getText(page, null, captionRichText, captionRichText, pageBlock, -dp(100)); if (caption instanceof Spannable) { Spannable spannable = (Spannable) caption; TextPaintUrlSpan[] spans = spannable.getSpans(0, caption.length(), TextPaintUrlSpan.class); @@ -11643,7 +12505,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg builder.setSpan(new URLSpan(spans[a].getUrl()) { @Override public void onClick(View widget) { - openWebpageUrl(getURL(), null); + openWebpageUrl(getURL(), null, null); } }, spannable.getSpanStart(spans[a]), spannable.getSpanEnd(spans[a]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } @@ -11683,9 +12545,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public void updateSlideshowCell(TLRPC.PageBlock currentPageBlock) { - int count = listView[0].getChildCount(); + int count = pages[0].listView.getChildCount(); for (int a = 0; a < count; a++) { - View child = listView[0].getChildAt(a); + View child = pages[0].listView.getChildAt(a); if (child instanceof ArticleViewer.BlockSlideshowCell) { ArticleViewer.BlockSlideshowCell cell = (ArticleViewer.BlockSlideshowCell) child; int idx = cell.currentBlock.items.indexOf(currentPageBlock); @@ -11717,14 +12579,14 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (index < 0 || index >= pageBlocks.size()) { return null; } - ImageReceiver imageReceiver = getImageReceiverFromListView(listView[0], pageBlocks.get(index), tempArr); + ImageReceiver imageReceiver = getImageReceiverFromListView(pages[0].listView, pageBlocks.get(index), tempArr); if (imageReceiver == null) { return null; } PhotoViewer.PlaceProviderObject object = new PhotoViewer.PlaceProviderObject(); object.viewX = tempArr[0]; object.viewY = tempArr[1]; - object.parentView = listView[0]; + object.parentView = pages[0].listView; object.imageReceiver = imageReceiver; object.thumb = imageReceiver.getBitmapSafe(); object.radius = imageReceiver.getRoundRadius(true); @@ -11814,7 +12676,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg VideoPlayer player = PhotoViewer.getInstance().getVideoPlayer(); TextureView textureView = PhotoViewer.getInstance().getVideoTextureView(); SurfaceView surfaceView = PhotoViewer.getInstance().getVideoSurfaceView(); - BlockVideoCell videoCell = getViewFromListView(listView[0], pageBlock); + BlockVideoCell videoCell = getViewFromListView(pages[0].listView, pageBlock); if (videoCell != null && player != null && textureView != null) { videoStates.put(videoCell.currentBlock.video_id, videoCell.setState(BlockVideoCellState.fromPlayer(player, videoCell, textureView))); videoCell.firstFrameRendered = false; @@ -11849,48 +12711,1104 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg } } - public class Sheet implements BaseFragment.AttachedSheet { + public int getThemedColor(int key) { + return Theme.getColor(key, getResourcesProvider()); + } - public WindowView windowView; + public Theme.ResourcesProvider getResourcesProvider() { + return null; // sheet != null ? sheet.resourcesProvider : null; + } - public Sheet(Context context) { + public boolean isFirstArticle() { + return pagesStack.size() > 0 && pagesStack.get(0) instanceof TLRPC.WebPage; + } - windowView = new WindowView(context); + private final AnimatedColor page0Background = new AnimatedColor(() -> AndroidUtilities.runOnUIThread(this::updatePages), 320, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedColor page1Background = new AnimatedColor(() -> AndroidUtilities.runOnUIThread(this::updatePages), 320, CubicBezierInterpolator.EASE_OUT_QUINT); + public void updatePages() { + if (actionBar == null || pages[0] == null || pages[1] == null) { + return; + } + + final float page0Alpha = pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + final float page1Alpha = 1f - page0Alpha; + + actionBar.setProgress(0, pages[0].getProgress()); + actionBar.setProgress(1, pages[1].getProgress()); + actionBar.setTransitionProgress(page1Alpha); + if (!actionBar.isAddressing() && !actionBar.isSearching() && (windowView.movingPage || windowView.openingPage)) { + if (isFirstArticle() || pagesStack.size() > 1) { + final float backButton = lerp(pages[0].hasBackButton() || pagesStack.size() > 1 ? 1f : 0, pages[1].hasBackButton() || pagesStack.size() > 2 ? 1f : 0, page1Alpha); + actionBar.backButtonDrawable.setRotation(1f - backButton, false); + actionBar.forwardButtonDrawable.setState(false); // pages[0].hasForwardButton()); + actionBar.setBackButtonCached(backButton > .5f); + } else { +// actionBar.backButtonDrawable.setRotation(1f - backButton, false); + actionBar.forwardButtonDrawable.setState(false); // pages[0].hasForwardButton()); + actionBar.setBackButtonCached(false); // backButton > .5f); + } + actionBar.setHasForward(pages[0].hasForwardButton()); + } + + actionBar.setBackgroundColor(0, page0Background.set(pages[0].getActionBarColor(), windowView.movingPage || windowView.openingPage)); + actionBar.setBackgroundColor(1, page1Background.set(pages[1].getActionBarColor(), windowView.movingPage || windowView.openingPage)); + + actionBar.setColors(ColorUtils.blendARGB(pages[0].getActionBarColor(), pages[1].getActionBarColor(), page1Alpha), false); + + actionBar.setMenuType((page0Alpha > .5f ? pages[0] : pages[1]).type); + + if (sheet != null) { + sheet.windowView.invalidate(); + } else if (windowView != null) { + windowView.invalidate(); + } + } + + public void updateTitle(boolean animated) { + actionBar.setTitle(0, pages[0].getTitle(), animated); + actionBar.setSubtitle(0, pages[0].getSubtitle(), false); + actionBar.setIsDangerous(0, pages[0].isWeb() && pages[0].getWebView() != null && pages[0].getWebView().isUrlDangerous(), false); + + actionBar.setTitle(1, pages[1].getTitle(), animated); + actionBar.setSubtitle(1, pages[1].getSubtitle(), false); + actionBar.setIsDangerous(1, pages[1].isWeb() && pages[1].getWebView() != null && pages[1].getWebView().isUrlDangerous(), false); + } + + public void setOpener(BotWebViewContainer.MyWebView webView) { + if (pages == null) return; + for (int i = 0; i < pages.length; ++i) { + if (pages[i] == null) continue; + pages[i].webViewContainer.setOpener(webView); + } + } + + public class PageLayout extends FrameLayout { + + public static final int TYPE_ARTICLE = 0; + public static final int TYPE_WEB = 1; + + public int type; + + public final RecyclerListView listView; + public final WebpageAdapter adapter; + public final LinearLayoutManager layoutManager; + + public final ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer swipeContainer; + public final BotWebViewContainer webViewContainer; + private boolean swipeBack; + + private int errorShownCode; + private String errorShownDescription; + private boolean errorShown; + private boolean dangerousShown; + public ErrorContainer errorContainer; + + public boolean backButton, forwardButton; + public int webActionBarColor = getThemedColor(Theme.key_iv_background); + public int webBackgroundColor = getThemedColor(Theme.key_iv_background); + + public boolean paused = false; + public void pause() { + if (paused) return; + if (getWebView() != null) { + getWebView().onPause(); + } + paused = true; + } + public void resume() { + if (!paused) return; + if (getWebView() != null) { + getWebView().onResume(); + } + paused = false; + } + + public PageLayout(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + + listView = new WebpageListView(context, resourcesProvider) { + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + overrideProgress = -1; + } + }; + listView.setClipToPadding(false); + if (BOTTOM_ACTION_BAR) { + listView.setPadding(0, (int) (AndroidUtilities.statusBarHeight * 1.25f), 0, dp(24)); + } else { + listView.setPadding(0, dp(56), 0, 0); + listView.setTopGlowOffset(dp(56)); + } + ((DefaultItemAnimator) listView.getItemAnimator()).setDelayAnimations(false); + listView.setAdapter(adapter = new WebpageAdapter(context, sheet != null && sheet.halfSize())); + listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); + listView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + textSelectionHelper.stopScrolling(); + } + } + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (recyclerView.getChildCount() == 0) { + return; + } + recyclerView.invalidate(); + textSelectionHelper.onParentScrolled(); + if (sheet != null) { + sheet.windowView.invalidate(); + } else if (windowView != null) { + windowView.invalidate(); + } + updatePages(); + checkScroll(dy); + } + }); + addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + swipeContainer = new ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer(getContext()) { + private boolean ignoreLayout; + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + ignoreLayout = true; + setOffsetY(MeasureSpec.getSize(heightMeasureSpec) * .4f); + ignoreLayout = false; + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec) - dp(sheet != null && !sheet.halfSize() ? 0 : 56) - AndroidUtilities.statusBarHeight, MeasureSpec.EXACTLY)); + } + @Override + public void requestLayout() { + if (!ignoreLayout) { + super.requestLayout(); + } + } + }; + swipeContainer.setShouldWaitWebViewScroll(true); + swipeContainer.setFullSize(true); + swipeContainer.setAllowFullSizeSwipe(true); +// swipeContainer.stickToEdges = false; + webViewContainer = new BotWebViewContainer(getContext(), resourcesProvider, getThemedColor(Theme.key_windowBackgroundWhite), false) { + @Override + public void onWebViewCreated() { + super.onWebViewCreated(); + swipeContainer.setWebView(webViewContainer.getWebView()); + } + + @Override + protected void onURLChanged(String url, boolean first, boolean last) { + backButton = !first; + forwardButton = !last; + updateTitle(true); + if (PageLayout.this == pages[0] && !actionBar.isAddressing() && !actionBar.isSearching() && !(windowView.movingPage || windowView.openingPage)) { + if (isFirstArticle() || pagesStack.size() > 1) { + actionBar.backButtonDrawable.setRotation(backButton || pagesStack.size() > 1 ? 0 : 1, true); + actionBar.setBackButtonCached(backButton || pagesStack.size() > 1); + actionBar.forwardButtonDrawable.setState(false); // hasForwardButton()); + } else { + actionBar.setBackButtonCached(false); + actionBar.forwardButtonDrawable.setState(false); + } + actionBar.setHasForward(forwardButton); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + } + } + + @Override + protected void onTitleChanged(String title) { + updateTitle(true); + } + + @Override + protected void onFaviconChanged(Bitmap favicon) { + super.onFaviconChanged(favicon); + } + + @Override + protected void onErrorShown(boolean shown, int errorCode, String description) { + if (shown) { + createErrorContainer(); + errorContainer.set(getWebView() != null ? getWebView().getUrl() : null, errorShownCode = errorCode, errorShownDescription = description); + errorContainer.setDark(AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_iv_background)) <= .721f, false); + errorContainer.setBackgroundColor(getThemedColor(Theme.key_iv_background)); + } + AndroidUtilities.updateViewVisibilityAnimated(errorContainer, errorShown = shown, 1f, false); + invalidate(); + } + }; + webViewContainer.setOnCloseRequestedListener(() -> { + if (LaunchActivity.instance == null) return; + final BottomSheetTabs tabs = LaunchActivity.instance.getBottomSheetTabs(); + if (tabs == null || !tabs.tryRemoveTabWith(ArticleViewer.this)) { + close(true, true); + } + }); + webViewContainer.setWebViewProgressListener(progress -> { + if (PageLayout.this == pages[0]) { + if (actionBar.lineProgressView.getCurrentProgress() > progress) { + actionBar.lineProgressView.setProgress(0, false); + } + actionBar.lineProgressView.setProgress(progress, true); + } + }); + webViewContainer.setDelegate(new BotWebViewContainer.Delegate() { + + @Override + public void onCloseRequested(@Nullable Runnable callback) { + if (pages[0] == PageLayout.this) { + goBack(); + } + } + + @Override + public void onCloseToTabs() { + if (sheet != null) { + sheet.dismiss(true); + } + } + + @Override + public void onInstantClose() { + if (sheet != null) { + sheet.dismissInstant(); + } else if (pages[0] == PageLayout.this) { + goBack(); + } + } + + @Override + public void onWebAppSetupClosingBehavior(boolean needConfirmation) { + + } + + @Override + public void onWebAppSwipingBehavior(boolean allowSwipes) { + + } + + @Override + public void onWebAppSetActionBarColor(int colorKey, int color, boolean isOverrideColor) { + + } + + @Override + public void onWebAppSetBackgroundColor(int color) { + + } + + @Override + public void onWebAppBackgroundChanged(boolean actionBarColor, int color) { + setWebBgColor(actionBarColor, color); + } + + @Override + public void onWebAppExpand() { + + } + + @Override + public void onWebAppSwitchInlineQuery(TLRPC.User botUser, String query, List chatTypes) { + + } + + @Override + public void onWebAppOpenInvoice(TLRPC.InputInvoice inputInvoice, String slug, TLObject response) { + + } + + @Override + public void onSetupMainButton(boolean isVisible, boolean isActive, String text, int color, int textColor, boolean isProgressVisible) { + + } + + @Override + public void onSetBackButtonVisible(boolean visible) { + + } + + @Override + public void onSetSettingsButtonVisible(boolean visible) { + + } + }); + webViewContainer.setWebViewScrollListener(new BotWebViewContainer.WebViewScrollListener() { + @Override + public void onWebViewScrolled(WebView webView, int dx, int dy) { + updatePages(); + } + }); + swipeContainer.addView(webViewContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + swipeContainer.setScrollEndListener(() -> webViewContainer.invalidateViewPortHeight(true)); + swipeContainer.setDelegate(() -> { + if (sheet != null) { + swipeBack = true; + sheet.dismiss(true); + } + }); + swipeContainer.setScrollListener(() -> { + webViewContainer.invalidateViewPortHeight(); + if (errorContainer != null) { + errorContainer.layout.setTranslationY(((-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()) - swipeContainer.getSwipeOffsetY()) / 2f); + } + updatePages(); + }); + swipeContainer.setTopActionBarOffsetY(dp(sheet != null && !sheet.halfSize() ? 0 : 56) + AndroidUtilities.statusBarHeight); +// swipeContainer.setIsKeyboardVisible(obj -> windowView.getKeyboardHeight() >= dp(20)); + addView(swipeContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + cleanup(); + setType(TYPE_ARTICLE); + } + + private void setWebBgColor(boolean actionBarColor, int color) { + if (actionBarColor) { + webActionBarColor = Theme.blendOver(getThemedColor(Theme.key_iv_background), color); + if (PageLayout.this == pages[0]) { + if (SharedConfig.adaptableColorInBrowser) { + actionBar.setColors(webActionBarColor, true); + } + if (sheet != null) { + sheet.checkNavColor(); + } + } + } else { + webBackgroundColor = Theme.blendOver(0xFFFFFFFF, color); + if (PageLayout.this == pages[0]) { + if (SharedConfig.adaptableColorInBrowser) { + actionBar.setMenuColors(webBackgroundColor); + } + if (sheet != null) { + sheet.checkNavColor(); + } + } + } + updatePages(); + } + + public ErrorContainer createErrorContainer() { + if (errorContainer == null) { + swipeContainer.addView(errorContainer = new ErrorContainer(getContext()), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + errorContainer.buttonView.setOnClickListener(v -> { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView != null) { + webView.reload(); + } + }); + AndroidUtilities.updateViewVisibilityAnimated(errorContainer, errorShown, 1f, false); + } + return errorContainer; + } + + public boolean isWeb() { + return type == TYPE_WEB; + } + + public boolean isArticle() { + return type == TYPE_ARTICLE; + } + + public void setType(int type) { + if (this.type != type) { + cleanup(); + } + this.type = type; + listView.setVisibility(isArticle() ? View.VISIBLE : View.GONE); + swipeContainer.setVisibility(isWeb() ? View.VISIBLE : View.GONE); + } + + public String getTitle() { + if (isArticle()) { + if (adapter.currentPage != null && adapter.currentPage.site_name != null) { + return adapter.currentPage.site_name; + } + } + if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView != null) { + return webView.getTitle(); + } + } + return ""; + } + + public int getBackgroundColor() { + if (isWeb() && dangerousShown) { + return 0xFFB3261E; + } + if (isWeb() && SharedConfig.adaptableColorInBrowser) { + if (errorShown) { + return getThemedColor(Theme.key_iv_background); + } + return webBackgroundColor; + } + return getThemedColor(Theme.key_iv_background); + } + + public int getActionBarColor() { + if (isWeb() && SharedConfig.adaptableColorInBrowser) { + return webActionBarColor; + } + return getThemedColor(Theme.key_iv_background); + } + + private String lastUrl, lastFormattedUrl; + public String getSubtitle() { + if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView != null) { + if (TextUtils.equals(lastUrl, webView.getUrl())) { + return lastFormattedUrl; + } + try { + Uri uri = Uri.parse(BotWebViewContainer.magic2tonsite(lastUrl = webView.getUrl())); + String url = (uri.getScheme() != null && (uri.getScheme().equalsIgnoreCase("http") || uri.getScheme().equalsIgnoreCase("https"))) ? uri.getSchemeSpecificPart() : uri.toString(); + if (!isTonsite()) { + try { + try { + Uri uri2 = Uri.parse(url); + url = Browser.replaceHostname(uri2, Browser.IDN_toUnicode(uri2.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + url = URLDecoder.decode(url.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + } + if (url.startsWith("//")) + url = url.substring(2); + if (url.startsWith("www.")) + url = url.substring(4); + if (url.endsWith("/")) + url = url.substring(0, url.length() - 1); + int index = 0; + if ((index = url.indexOf("#")) >= 0) { + url = url.substring(0, index); + } + return lastFormattedUrl = url; + } catch (Exception e) { + return webView.getUrl(); + } + } + } + return ""; + } + + private boolean lastVisible; + public void setLastVisible(boolean lastVisible) { + if (this.lastVisible != lastVisible) { + this.lastVisible = lastVisible; + webViewContainer.setKeyboardFocusable(lastVisible); + } + } + + public boolean hasBackButton() { + return backButton; + } + + public void back() { + if (isWeb() && getWebView() != null) { + getWebView().goBack(); + } + } + + public boolean hasForwardButton() { + return forwardButton; + } + + public void forward() {} + + public float getListTop() { + if (isArticle()) { + float listViewTop = listView.getHeight(); + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + int viewType = listView == null || listView.getLayoutManager() == null ? 0 : listView.getLayoutManager().getItemViewType(child); + if (viewType == Integer.MAX_VALUE - 1) { + listViewTop = Math.min(listViewTop, child.getBottom()); + } else { + listViewTop = Math.min(listViewTop, child.getTop()); + } + } + return listViewTop; + } else if (isWeb()) { + return swipeContainer.getTranslationY(); + } + return 0; + } + + public float overrideProgress = -1f; + public float getProgress() { + if (isArticle()) { + if (overrideProgress >= 0) return overrideProgress; + int first = layoutManager.findFirstVisibleItemPosition(); + View view = layoutManager.findViewByPosition(first); + if (view == null) + return 0; + + if (adapter.sumItemHeights == null) { + int last = layoutManager.findLastVisibleItemPosition(); + if (sheet != null && sheet.halfSize()) { + if (first < 1) first = 1; + if (last < 1) last = 1; + } + int count = layoutManager.getItemCount(); + if (last >= count - 2) { + view = layoutManager.findViewByPosition(count - 2); + } else { + view = layoutManager.findViewByPosition(first); + } + if (view == null) { + return 0; + } + + float itemProgress = getWidth() / (float) (count - 1); + + float viewHeight = view.getMeasuredHeight(); + float viewProgress; + if (last >= count - 2) { + viewProgress = (count - 2 - first) * itemProgress * (listView.getMeasuredHeight() - view.getTop()) / viewHeight; + } else { + viewProgress = itemProgress * (1.0f - (Math.min(0, view.getTop() - listView.getPaddingTop()) + viewHeight) / viewHeight); + } + float progress = first * itemProgress + viewProgress; + return progress / getWidth(); + } + + int offset = 0; + if (adapter.sumItemHeights != null) { + int beforeIndex = first - 1; + offset = (beforeIndex >= 0 && beforeIndex < adapter.sumItemHeights.length ? adapter.sumItemHeights[beforeIndex] : 0) + (first != 0 || sheet == null || !sheet.halfSize() ? -view.getTop() : 0); + } + return Utilities.clamp01((float) offset / Math.max(1, adapter.fullHeight - listView.getHeight())); + } else if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView == null) return 0; + return webView.getScrollProgress(); + } + + return 0; + } + + public void addProgress(float delta) { + float progress = getProgress(); + progress = Utilities.clamp01(progress + delta); + if (isArticle()) { + return; +// if (adapter.itemHeights == null) return; +// int row = 0; +// int offset = (int) (progress * Math.max(1, adapter.fullHeight - listView.getHeight())); +// while (offset >= 0 && row < adapter.getItemCount()) { +// offset -= adapter.itemHeights[row]; +// row++; +// } +// overrideProgress = progress; +// layoutManager.scrollToPositionWithOffset(row + 1, offset); +// listView.invalidate(); +// textSelectionHelper.onParentScrolled(); +// if (sheet != null) { +// sheet.windowView.invalidate(); +// } else if (windowView != null) { +// windowView.invalidate(); +// } +// updatePages(); + } else if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView == null) return; + webView.setScrollProgress(progress); + updatePages(); + } + } + + public boolean isAtTop() { + if (isArticle()) { + return !listView.canScrollVertically(-1); + } else if (isWeb()) { + + } + return false; + } + + public void scrollToTop(boolean smooth) { + if (isArticle()) { + if (smooth) { + SmoothScroller s = new SmoothScroller(getContext()); + if (sheet != null && sheet.halfSize()) { + s.setTargetPosition(1); + s.setOffset(-dp(56 - 24)); + } else { + s.setTargetPosition(0); + } + layoutManager.startSmoothScroll(s); + } else { + layoutManager.scrollToPositionWithOffset(sheet != null && sheet.halfSize() ? 1 : 0, sheet != null ? dp(56 - 24) : 0); + } + } else if (isWeb()) { + if (smooth) { + swipeContainer.stickTo(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()); + } else { + swipeContainer.setSwipeOffsetY(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()); + } + } + } + + public RecyclerListView getListView() { + return listView; + } + + public WebpageAdapter getAdapter() { + return adapter; + } + + public BotWebViewContainer getWebContainer() { + return webViewContainer; + } + + public BotWebViewContainer.MyWebView getWebView() { + return webViewContainer != null ? webViewContainer.getWebView() : null; + } + + public boolean isTonsite() { + if (!isWeb()) return false; + BotWebViewContainer.MyWebView webView = getWebView(); + if (webView == null) return false; + return BotWebViewContainer.isTonsite(BotWebViewContainer.magic2tonsite(webView.getUrl())); + } + + public void cleanup() { + backButton = false; + forwardButton = false; + setWeb(null); + webViewContainer.destroyWebView(); + webViewContainer.resetWebView(); + webActionBarColor = getThemedColor(Theme.key_iv_background); + webBackgroundColor = getThemedColor(Theme.key_iv_background); + if (errorContainer != null) { + errorContainer.setDark(AndroidUtilities.computePerceivedBrightness(webBackgroundColor) <= .721f, true); + errorContainer.setBackgroundColor(webBackgroundColor); + AndroidUtilities.updateViewVisibilityAnimated(errorContainer, errorShown = false, 1f, false); + } + adapter.cleanup(); + invalidate(); + } + + private CachedWeb web; + public void setWeb(CachedWeb web) { + if (this.web != web) { + if (this.web != null) { + this.web.detach(this); + } + this.web = web; + if (this.web != null) { + this.web.attach(this); + } + } + } + + public void updateWeb() { + if (this.web != null) { + this.web.enrich(this); + } + } + + @Override + public void setTranslationX(float translationX) { + super.setTranslationX(translationX); + updatePages(); + if (windowView.openingPage) { + containerView.invalidate(); + } + if (windowView.movingPage) { + containerView.invalidate(); + float progress = translationX / getMeasuredWidth(); + setCurrentHeaderHeight((int) (windowView.startMovingHeaderHeight + (dp(56) - windowView.startMovingHeaderHeight) * progress)); + } + if (sheet != null) { + sheet.updateTranslation(); + } + } + + private final GradientClip clip = new GradientClip(); + + @Override + protected void dispatchDraw(Canvas canvas) { + if (BOTTOM_ACTION_BAR) { + final float t1 = AndroidUtilities.statusBarHeight * 0.5f; + final float t2 = AndroidUtilities.statusBarHeight * 1.25f; + canvas.saveLayerAlpha(0, (int) t1 + 1, getWidth(), getHeight(), 0xFF, Canvas.ALL_SAVE_FLAG); + super.dispatchDraw(canvas); + AndroidUtilities.rectTmp.set(0, (int) t1, getWidth(), t2); + clip.draw(canvas, AndroidUtilities.rectTmp, GradientClip.TOP, 1f); + canvas.restore(); + } else { + super.dispatchDraw(canvas); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (errorShown && errorContainer != null) { + errorContainer.setDark(AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_iv_background)) <= .721f, false); + errorContainer.setBackgroundColor(getThemedColor(Theme.key_iv_background)); + } + } + } + + public class CachedWeb extends BottomSheetTabs.WebTabData { + + public CachedWeb(String url) { + lastUrl = url; + currentUrl = url; + } + + public void attach(PageLayout pageLayout) { + if (pageLayout == null) return; + + if (webView != null) { + webView.onResume(); + pageLayout.webViewContainer.replaceWebView(webView, proxy); + pageLayout.setWebBgColor(true, actionBarColor); + pageLayout.setWebBgColor(false, backgroundColor); + } else if (lastUrl != null) { + pageLayout.webViewContainer.loadUrl(UserConfig.selectedAccount, lastUrl); + } + } + + public void enrich(PageLayout pageLayout) { + BotWebViewContainer.MyWebView webView = pageLayout.webViewContainer.getWebView(); + if (webView != null) { + title = webView.getTitle(); + favicon = webView.getFavicon(); + lastUrl = webView.getUrl(); + + actionBarColor = pageLayout.webActionBarColor; + backgroundColor = pageLayout.webBackgroundColor; + } + } + + public void detach(PageLayout pageLayout) { + if (pageLayout == null) return; + + pageLayout.webViewContainer.preserveWebView(); + webView = pageLayout.webViewContainer.getWebView(); + proxy = pageLayout.webViewContainer.getProxy(); + if (webView != null) { + webView.onPause(); + title = webView.getTitle(); + favicon = webView.getFavicon(); + lastUrl = webView.getUrl(); + actionBarColor = pageLayout.webActionBarColor; + backgroundColor = pageLayout.webBackgroundColor; + } + } + + @Override + public String getTitle() { + if (webView != null && !TextUtils.isEmpty(webView.getTitle())) { + return webView.getTitle(); + } + return super.getTitle(); + } + } + + public class WebpageListView extends RecyclerListView { + + public WebpageListView(Context context) { + super(context); + } + + public WebpageListView(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context, resourcesProvider); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + int count = getChildCount(); + for (int a = 0; a < count; a++) { + View child = getChildAt(a); + if (child.getTag() instanceof Integer) { + Integer tag = (Integer) child.getTag(); + if (tag == 90) { + int bottom = child.getBottom(); + if (bottom < getMeasuredHeight()) { + int height = getMeasuredHeight(); + child.layout(0, height - child.getMeasuredHeight(), child.getMeasuredWidth(), height); + break; + } + } + } + } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent e) { + if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { + pressedLink = null; + pressedLinkOwnerLayout = null; + pressedLinkOwnerView = null; + } else if (pressedLinkOwnerLayout != null && pressedLink != null && e.getAction() == MotionEvent.ACTION_UP && getAdapter() instanceof WebpageAdapter) { + checkLayoutForLinks((WebpageAdapter) getAdapter(), e, pressedLinkOwnerView, pressedLinkOwnerLayout, 0, 0); + } + return super.onInterceptTouchEvent(e); + } + + @Override + public boolean onTouchEvent(MotionEvent e) { + if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { + pressedLink = null; + pressedLinkOwnerLayout = null; + pressedLinkOwnerView = null; + } + return super.onTouchEvent(e); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + checkVideoPlayer(); + super.dispatchDraw(canvas); + } + + @Override + public void onScrolled(int dx, int dy) { + super.onScrolled(dx, dy); + if (sheet != null && sheet.windowView != null) { + sheet.windowView.invalidate(); + } + } + } + + public class Sheet implements BaseFragment.AttachedSheet, BottomSheetTabsOverlay.Sheet { + public final boolean halfSize() { + return true; + } + + public final AnimationNotificationsLocker animationsLock = new AnimationNotificationsLocker(); + + public BaseFragment fragment; + public final Context context; + public final WindowView windowView; + public View containerView; + public Theme.ResourcesProvider resourcesProvider; + + public ArticleViewer getArticleViewer() { + return ArticleViewer.this; + } + + public Sheet(BaseFragment fragment) { + this.fragment = fragment; + this.resourcesProvider = fragment.getResourceProvider(); + this.context = fragment.getContext(); + this.windowView = new WindowView(context); + new KeyboardNotifier(windowView, true, keyboardHeight -> { + keyboardVisible = keyboardHeight - AndroidUtilities.navigationBarHeight > dp(20); + }); + } + + public void setContainerView(View containerView) { + this.containerView = containerView; + updateTranslation(); } public WindowView getWindowView() { return windowView; } + public boolean preserve; + + private BottomSheetTabDialog dialog; + + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + this.dialog = dialog; + return true; + } + + @Override + public BottomSheetTabs.WebTabData saveState() { + BottomSheetTabs.WebTabData tab = new BottomSheetTabs.WebTabData(); + tab.title = actionBar.getTitle(); + tab.articleViewer = ArticleViewer.this; + tab.actionBarColor = pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background); + tab.backgroundColor = pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background); + tab.overrideActionBarColor = true; + + tab.articleProgress = !attachedToActionBar ? 0 : pages[0].getProgress(); + + tab.view2 = pages[0]; + tab.favicon = pages[0] != null && pages[0].getWebView() != null ? pages[0].getWebView().getFavicon() : null; + if (tab.view2 != null) { + tab.viewWidth = tab.view2.getWidth(); + tab.viewHeight = tab.view2.getHeight(); + } + tab.viewScroll = getListTop(); + tab.themeIsDark = Theme.isCurrentThemeDark(); + + return tab; + } + + @Override + public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData tab) { + return false; + } + @Override public boolean isShown() { - return false; + return !dismissing; + } + + public void attachInternal(BaseFragment fragment) { + this.fragment = fragment; + this.resourcesProvider = fragment.getResourceProvider(); + if (fragment instanceof ChatActivity) { + if (((ChatActivity) fragment).getChatActivityEnterView() != null) { + ((ChatActivity) fragment).getChatActivityEnterView().closeKeyboard(); + ((ChatActivity) fragment).getChatActivityEnterView().hidePopup(true, false); + } + } + if (fragment.getParentActivity() instanceof LaunchActivity) { + LaunchActivity activity = (LaunchActivity) fragment.getParentActivity(); + activity.requestCustomNavigationBar(); + } + if (dialog != null) { + dialog.attach(); + } else { + AndroidUtilities.removeFromParent(windowView); + if (fragment.getLayoutContainer() != null) { + fragment.getLayoutContainer().addView(windowView); + } + } + if (pages[0] != null) { + pages[0].resume(); + } + if (pages[1] != null) { + pages[1].resume(); + } + } + + public void show() { + if (dismissing) return; + attachInternal(fragment); + animateOpen(true, true, null); } @Override public void dismiss() { + dismiss(true); + } + private boolean dismissing; + private boolean dismissingIntoTabs; + + @Override + public void dismiss(boolean tabs) { + if (dismissing) return; + dismissing = true; + dismissingIntoTabs = tabs; + if (tabs) { + LaunchActivity.instance.getBottomSheetTabsOverlay().dismissSheet(this); + } else { + animateDismiss(true, true, () -> { + release(); + destroy(); + }); + } + checkNavColor(); + checkFullyVisible(); } @Override public void release() { - + if (pages[0] != null && pages[0].swipeBack) { + pages[0].swipeContainer.setSwipeOffsetY(-pages[0].swipeContainer.offsetY + pages[0].swipeContainer.topActionBarOffsetY); + pages[0].swipeBack = false; + } + if (pages[0] != null) { + pages[0].pause(); + } + if (pages[1] != null) { + pages[1].pause(); + } + if (dialog != null) { + dialog.detach(); + } + if (fragment != null) { + fragment.removeSheet(this); + if (dialog == null) { + AndroidUtilities.removeFromParent(windowView); + } + } + if (onDismissListener != null) { + onDismissListener.run(); + onDismissListener = null; + } } + public void dismissInstant() { + if (dismissing) return; + dismissing = true; + release(); + destroy(); + } + + @Override + public boolean isFullSize() { + return true; + } + + private boolean wasFullyVisible; @Override public boolean isFullyVisible() { - return false; + return fullyAttachedToActionBar && dismissProgress <= 0 && openProgress >= 1 && backProgress <= 0 && !dismissingIntoTabs && !dismissing; } + public void checkFullyVisible() { + if (wasFullyVisible != isFullyVisible()) { + wasFullyVisible = isFullyVisible(); + if (fragment != null && fragment.getParentLayout() instanceof ActionBarLayout) { + ActionBarLayout layout = (ActionBarLayout) fragment.getParentLayout(); + if (layout.containerView != null) { + layout.containerView.invalidate(); + } + if (layout.sheetContainer != null) { + layout.sheetContainer.invalidate(); + } + } else if (windowView.getParent() instanceof View) { + ((View) windowView.getParent()).invalidate(); + } + } + } @Override public boolean attachedToParent() { - return false; + return windowView.isAttachedToWindow(); } @Override - public boolean onBackPressed() { - return false; + public boolean onAttachedBackPressed() { + if (keyboardVisible) { + AndroidUtilities.hideKeyboard(windowView); + return true; + } + if (actionBar.isSearching()) { + actionBar.showSearch(false, true); + return true; + } + if (actionBar.isAddressing()) { + actionBar.showAddress(false, true); + return true; + } + if (isFirstArticle() && pages[0].hasBackButton()) { + pages[0].back(); + return true; + } + if (pagesStack.size() > 1) { + goBack(); + return true; + } + dismiss(false); + return true; } @Override @@ -11905,22 +13823,573 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public int getNavigationBarColor(int color) { - return 0; + final float open = dismissingIntoTabs ? 0f : Math.min(openProgress, 1f - dismissProgress) * (1f - backProgress); + int bgColor = getBackgroundColor(); + if (actionBar != null) { + bgColor = ColorUtils.blendARGB(bgColor, actionBar.addressBackgroundColor, actionBar.addressingProgress); + } + return ColorUtils.blendARGB(color, bgColor, open); } @Override - public void setOnDismissListener(Runnable onDismiss) { - + public boolean isAttachedLightStatusBar() { + final float open = dismissingIntoTabs ? 0f : Math.min(openProgress, 1f - dismissProgress) * (1f - backProgress); + return attachedToActionBar && open > .25f ? AndroidUtilities.computePerceivedBrightness(getActionBarColor()) >= .721f : false; } - public class WindowView extends SizeNotifierFrameLayout { + private Runnable onDismissListener; + @Override + public void setOnDismissListener(Runnable onDismiss) { + onDismissListener = onDismiss; + } + + public void reset() { + dismissing = false; + dismissingIntoTabs = false; + if (openAnimator != null) { + openAnimator.cancel(); + } + if (dismissAnimator != null) { + dismissAnimator.cancel(); + } + dismissProgress = 0f; + openProgress = 0f; + checkFullyVisible(); + updateTranslation(); + windowView.invalidate(); + } + + private float openProgress; + private float dismissProgress; + private ValueAnimator openAnimator; + private ValueAnimator dismissAnimator; + + public void animateOpen(boolean open, boolean animated, Runnable callback) { + if (openAnimator != null) { + openAnimator.cancel(); + } + if (animated) { + openAnimator = ValueAnimator.ofFloat(openProgress, open ? 1f : 0f); + openAnimator.addUpdateListener(anm -> { + openProgress = (float) anm.getAnimatedValue(); + updateTranslation(); + checkNavColor(); + checkFullyVisible(); + }); + openAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + openProgress = open ? 1f : 0f; + updateTranslation(); + checkNavColor(); + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + if (open) animationsLock.unlock(); + } + }); + if (open) { + openAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + openAnimator.setDuration(320); + } else { + openAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT); + openAnimator.setDuration(180); + } + openAnimator.start(); + } else { + openProgress = open ? 1f : 0f; + updateTranslation(); + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + if (open) animationsLock.unlock(); + } + } + + public void animateDismiss(boolean dismiss, boolean animated, Runnable callback) { + if (dismissAnimator != null) { + dismissAnimator.cancel(); + } + if (animated) { + dismissAnimator = ValueAnimator.ofFloat(dismissProgress, dismiss ? 1f : 0f); + dismissAnimator.addUpdateListener(anm -> { + dismissProgress = (float) anm.getAnimatedValue(); + if (!dismissingIntoTabs) { + updateTranslation(); + } + checkNavColor(); + checkFullyVisible(); + }); + dismissAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + dismissProgress = dismiss ? 1f : 0f; + if (!dismissingIntoTabs) { + updateTranslation(); + } + checkNavColor(); + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + } + }); + dismissAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + dismissAnimator.setDuration(250); + dismissAnimator.start(); + } else { + dismissProgress = dismiss ? 1f : 0f; + if (!dismissingIntoTabs) { + updateTranslation(); + } + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + } + } + + private int getListTop() { + int top = 0; + final float listView0Alpha = pages[0] == null || pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + final float listView1Alpha = 1f - listView0Alpha; + if (pages[0] != null && pages[0].getVisibility() == View.VISIBLE) { + top += (int) (pages[0].getListTop() * listView0Alpha * pages[0].getAlpha()); + } + if (pages[1] != null && pages[1].getVisibility() == View.VISIBLE) { + top += (int) (pages[1].getListTop() * listView1Alpha * pages[1].getAlpha()); + } + return top; + } + + public void checkNavColor() { + AndroidUtilities.setLightStatusBar(dialog != null ? dialog.windowView : windowView, isAttachedLightStatusBar()); + if (dialog != null) { + dialog.updateNavigationBarColor(); + } else { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + AndroidUtilities.setLightNavigationBar(getWindowView(), AndroidUtilities.computePerceivedBrightness(getNavigationBarColor(getThemedColor(Theme.key_windowBackgroundGray))) >= .721f); + } + } + + public int getBackgroundColor() { + if (!SharedConfig.adaptableColorInBrowser) { + return Theme.getColor(Theme.key_iv_navigationBackground); + } + final float page0Alpha = pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + return ColorUtils.blendARGB(pages[0].getBackgroundColor(), pages[1].getBackgroundColor(), 1f - page0Alpha); + } + + public int getActionBarColor() { + if (!SharedConfig.adaptableColorInBrowser) { + return Theme.getColor(Theme.key_iv_background); + } + final float page0Alpha = pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + return ColorUtils.blendARGB(pages[0].getActionBarColor(), pages[1].getActionBarColor(), 1f - page0Alpha); + } + + private boolean imageAtTop() { + return false; + } + + private int getListPaddingTop() { + return dp(imageAtTop() ? 0 : 20); + } + + public int getEmptyPadding() { + return dp(16) + (containerView == null ? AndroidUtilities.displaySize.y : containerView.getHeight()) - (getListTop() - getListPaddingTop()); + } + + public void updateTranslation() { + if (containerView == null) return; + containerView.setTranslationY(getEmptyPadding() * Math.max(1f - openProgress, dismissingIntoTabs ? 0 : dismissProgress)); + windowView.invalidate(); + } + + public boolean attachedToActionBar; + public boolean fullyAttachedToActionBar; + public boolean nestedVerticalScroll; + + public class WindowView extends SizeNotifierFrameLayout implements BaseFragment.AttachedSheetWindow, BottomSheetTabsOverlay.SheetView { public WindowView(Context context) { super(context); } + private final Paint scrimPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint handlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint headerBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final AnimatedFloat attachedActionBar = new AnimatedFloat(this, 0, 420, CubicBezierInterpolator.EASE_OUT_QUINT); + private boolean drawingFromOverlay; + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + updateTranslation(); + } + + private final Path clipPath = new Path(); + private final RectF rect = new RectF(); + private final RectF rect2 = new RectF(); + + @Override + protected void dispatchDraw(Canvas canvas) { + if (drawingFromOverlay) { + return; + } + + final float open = Math.min(openProgress, 1f - dismissProgress); + + scrimPaint.setColor(Color.BLACK); + scrimPaint.setAlpha((int) (0x60 * open * (1f - backProgress))); + canvas.drawRect(0, 0, getWidth(), getHeight(), scrimPaint); + + final int top = getListTop() - getListPaddingTop(); + final boolean attachedToActionBar = top < (AndroidUtilities.statusBarHeight + ActionBar.getCurrentActionBarHeight()) && open > .95f; + if (Sheet.this.attachedToActionBar != attachedToActionBar) { + Sheet.this.attachedToActionBar = attachedToActionBar; + checkNavColor(); + } + final float attachedActionBar = this.attachedActionBar.set(attachedToActionBar); + if (Sheet.this.fullyAttachedToActionBar != (attachedActionBar >= .999f)) { + Sheet.this.fullyAttachedToActionBar = (attachedActionBar >= .999f); + checkFullyVisible(); + } + final int drawnTop = lerp(top, 0, Utilities.clamp(attachedActionBar, 1, 0)); + + final float y = getEmptyPadding() * Math.max(1f - openProgress, dismissProgress); + canvas.save(); + canvas.translate(getWidth() * backProgress, y); + rect.set(0, drawnTop, getWidth(), getHeight() + dp(16)); + final float r = dp(16) * (1f - attachedActionBar); + if (attachedActionBar < 1f) { + shadowPaint.setColor(0); + shadowPaint.setShadowLayer(dp(18), 0, -dp(3), Theme.multAlpha(Color.BLACK, .26f * open)); + canvas.drawRoundRect(rect, r, r, shadowPaint); + } + + if (r <= 0) { + canvas.clipRect(rect); + } else { + clipPath.rewind(); + clipPath.addRoundRect(rect, r, r, Path.Direction.CW); + canvas.clipPath(clipPath); + } + + backgroundPaint.setColor(pages[1].getBackgroundColor()); + canvas.drawRect(rect, backgroundPaint); + backgroundPaint.setColor(pages[0].getBackgroundColor()); + AndroidUtilities.rectTmp.set(rect); + AndroidUtilities.rectTmp.left = pages[0].getX(); + canvas.drawRect(AndroidUtilities.rectTmp, backgroundPaint); + + actionBar.drawShadow = attachedToActionBar && top + getListPaddingTop() <= AndroidUtilities.statusBarHeight + currentHeaderHeight; + if (attachedActionBar > 0) { + canvas.save(); + float t = lerp(top + getListPaddingTop() + 1, 0, attachedActionBar); + canvas.translate(0, t); + actionBar.drawBackground(canvas, (top + getListPaddingTop() + 1) - t, 1f, attachedActionBar, true); + canvas.restore(); + } + + canvas.translate(0, -y); + if (!AndroidUtilities.makingGlobalBlurBitmap && (!pages[0].isWeb() || canvas.isHardwareAccelerated())) { + super.dispatchDraw(canvas); + } + canvas.translate(0, y); + + if (attachedActionBar < 1f) { + final float handleAlpha = 1f - attachedActionBar; + + final boolean dark = AndroidUtilities.computePerceivedBrightness(getBackgroundColor()) < .721f; + handlePaint.setColor(ColorUtils.blendARGB(Theme.multAlpha(dark ? Color.WHITE : Color.BLACK, .15f), Color.BLACK, attachedActionBar)); + handlePaint.setAlpha((int) (handlePaint.getAlpha() * handleAlpha)); + final float cx = getWidth() / 2f, cy = drawnTop + getListPaddingTop() / 2f - attachedActionBar * dp(8); + final float w = lerp(dp(32), dp(48), attachedActionBar); + rect.set(cx - w / 2f, cy - dp(2), cx + w / 2f, cy + dp(2)); + canvas.drawRoundRect(rect, rect.height() / 2f, rect.height() / 2f, handlePaint); + } + + canvas.restore(); + } + + @Override + public void setDrawingFromOverlay(boolean value) { + if (drawingFromOverlay != value) { + drawingFromOverlay = value; + invalidate(); + } + } + + private RectF clipRect = new RectF(); + private Path clipPath2 = new Path(); + + @Override + public RectF getRect() { + clipRect.set(0, (attachedToActionBar ? 0 : getListTop() - getListPaddingTop()) + getEmptyPadding() * Math.max(1f - openProgress, dismissProgress), getWidth(), getHeight()); + return clipRect; + } + + @Override + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { + clipRect.set(getRect()); + AndroidUtilities.lerp(clipRect, finalRect, progress, clipRect); + + final float open = Math.min(openProgress, 1f - dismissProgress) * (1f - progress); + scrimPaint.setColor(Color.BLACK); + scrimPaint.setAlpha((int) (0x60 * open * (1f - backProgress))); + canvas.drawRect(0, 0, getWidth(), getHeight(), scrimPaint); + + final float r = lerp(dp(16), dp(10), progress); + + backgroundPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhite)); + clipPath2.rewind(); + clipPath2.addRoundRect(clipRect, r, r, Path.Direction.CW); + canvas.drawPath(clipPath2, backgroundPaint); + + if (getChildCount() == 1) { + if (attachedToActionBar) { + canvas.save(); + canvas.clipPath(clipPath2); + canvas.translate(0, clipRect.top); + actionBar.draw(canvas); + canvas.restore(); + } + + View child = getChildAt(0); + canvas.save(); + final float s = opening ? 1f : lerp(1f, .99f, progress); + if (Math.abs(s - 1f) > .01f) { + canvas.scale(s, s, clipRect.centerX(), clipRect.centerY()); + } + canvas.clipPath(clipPath2); + if (Math.abs(s - 1f) > .01f) { + canvas.scale(1f / s, 1f / s, clipRect.centerX(), clipRect.centerY()); + } + canvas.translate(0, -getListTop() + clipRect.top + (attachedToActionBar ? actionBar.getMeasuredHeight() : 0) * (1f - progress)); + child.draw(canvas); + canvas.restore(); + } + + return r; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN && ev.getY() < (attachedToActionBar ? 0 : getListTop())) { + dismiss(true); + return true; + } + return super.dispatchTouchEvent(ev); + } + + @Override + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { + return super.onNestedFling(target, velocityX, velocityY, consumed); + } + + private boolean stoppedAtFling; + + @Override + public boolean onNestedPreFling(View target, float velocityX, float velocityY) { + boolean r = super.onNestedPreFling(target, velocityX, velocityY); + if (halfSize()) { + if (pages[0].isAtTop() && velocityY < -1000) { + dismiss(true); + } else { + animateDismiss(false, true, null); + } + } + stoppedAtFling = true; + return r; + } + + @Override + public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { + super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); + } + + @Override + public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { + if (!nestedVerticalScroll) { + nestedVerticalScroll = dy != 0; + } + if (pages[0].isAtTop() && halfSize()) { + consumed[1] = Math.min((int) (getEmptyPadding() * dismissProgress), dy); + dismissProgress = Utilities.clamp(dismissProgress - (float) dy / getEmptyPadding(), 1, 0); + updateTranslation(); + checkFullyVisible(); + } + } + + @Override + public void onNestedScrollAccepted(View child, View target, int axes) { + super.onNestedScrollAccepted(child, target, axes); + } + + @Override + public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) { + stoppedAtFling = false; + return halfSize() && nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; + } + + @Override + public void onStopNestedScroll(View child) { + nestedVerticalScroll = false; + if (halfSize() && !stoppedAtFling) { + if (dismissProgress > .25f) { + dismiss(true); + } else { + animateDismiss(false, true, null); + } + } + super.onStopNestedScroll(child); + } } + private float backProgress; + + public void setBackProgress(float progress) { + backProgress = progress; + windowView.invalidate(); + checkNavColor(); + checkFullyVisible(); + } + + public float getBackProgress() { + return backProgress; + } + + public ValueAnimator animateBackProgressTo(float to) { + ValueAnimator anm = ValueAnimator.ofFloat(backProgress, to); + anm.addUpdateListener(a -> setBackProgress((float) a.getAnimatedValue())); + return anm; + } + + private boolean lastVisible; + @Override + public void setLastVisible(boolean lastVisible) { + this.lastVisible = lastVisible; + pages[0].setLastVisible(lastVisible); + pages[1].setLastVisible(false); + } + + public void updateLastVisible() { + pages[0].setLastVisible(lastVisible); + pages[1].setLastVisible(false); + } + } + + public static class ErrorContainer extends FrameLayout { + + public final LinearLayout layout; + private boolean imageViewSet; + private final BackupImageView imageView; + private final TextView titleView; + private final TextView descriptionView; + private final TextView codeView; + private final ButtonWithCounterView buttonView; + + public ErrorContainer(Context context) { + super(context); + setVisibility(GONE); + + layout = new LinearLayout(context); + layout.setPadding(dp(32), dp(24), dp(32), dp(24)); + layout.setOrientation(LinearLayout.VERTICAL); + layout.setGravity(Gravity.LEFT); + addView(layout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER)); + + imageView = new BackupImageView(context); + layout.addView(imageView, LayoutHelper.createLinear(100, 100)); + + titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 19); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(0xFFFFFFFF); + layout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT, 0, 4, 0, 2)); + + descriptionView = new TextView(context); + descriptionView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); + descriptionView.setTextColor(0xFFFFFFFF); + descriptionView.setSingleLine(false); + descriptionView.setMaxLines(3); + layout.addView(descriptionView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT, 0, 0, 0, 1)); + + codeView = new TextView(context); + codeView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); + codeView.setTextColor(0xFFFFFFFF); + codeView.setAlpha(.4f); + layout.addView(codeView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT)); + + buttonView = new ButtonWithCounterView(context, null); + buttonView.setMinWidth(dp(140)); + buttonView.setText(LocaleController.getString(R.string.Refresh), false); + layout.addView(buttonView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 40, Gravity.LEFT, 0, 12, 0, 0)); + } + + private ValueAnimator darkAnimator; + private boolean dark = true; + public void setDark(boolean dark, boolean animated) { + if (this.dark == dark) return; + this.dark = dark; + if (darkAnimator != null) { + darkAnimator.cancel(); + } + if (animated) { + darkAnimator = ValueAnimator.ofFloat(dark ? 0 : 1, dark ? 1 : 0); + darkAnimator.addUpdateListener(anm -> { + float t = (float) anm.getAnimatedValue(); + titleView.setTextColor(ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, t)); + descriptionView.setTextColor(ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, t)); + codeView.setTextColor(ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, t)); + }); + darkAnimator.start(); + } else { + titleView.setTextColor(!dark ? 0xFF000000 : 0xFFFFFFFF); + descriptionView.setTextColor(!dark ? 0xFF000000 : 0xFFFFFFFF); + codeView.setTextColor(!dark ? 0xFF000000 : 0xFFFFFFFF); + } + } + + public void set(String url, int code, String descrpiption) { + titleView.setText(getString(R.string.WebErrorTitle)); + url = BotWebViewContainer.magic2tonsite(url); + CharSequence cs = AndroidUtilities.replaceTags(url == null || Uri.parse(url) == null || Uri.parse(url).getAuthority() == null ? getString(R.string.WebErrorInfo) : formatString(R.string.WebErrorInfoDomain, Uri.parse(url).getAuthority())); + cs = Emoji.replaceEmoji(cs, descriptionView.getPaint().getFontMetricsInt(), false); + descriptionView.setText(cs); + codeView.setText(descrpiption); + } + + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + if (visibility == VISIBLE && !imageViewSet) { + imageViewSet = true; + MediaDataController.getInstance(UserConfig.selectedAccount).setPlaceholderImage(imageView, AndroidUtilities.STICKERS_PLACEHOLDER_PACK_NAME, "🧐", "100_100"); + } + } + } + + public void destroy() { + for (int i = 0; i < pagesStack.size(); ++i) { + Object obj = pagesStack.get(i); + if (obj instanceof CachedWeb) { + if (pages[0] != null && pages[0].web == obj) { + ((CachedWeb) obj).detach(pages[0]); + } + if (pages[1] != null && pages[1].web == obj) { + ((CachedWeb) obj).detach(pages[1]); + } + ((CachedWeb) obj).destroy(); + } + } + pagesStack.clear(); + destroyArticleViewer(); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java b/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java index bf7b795b3..3e36da1e9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java @@ -5,6 +5,7 @@ import static org.telegram.messenger.AndroidUtilities.dp; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.style.ReplacementSpan; import android.util.Log; @@ -36,6 +37,7 @@ public class AvatarSpan extends ReplacementSpan { public AvatarSpan(View parent, int currentAccount, float sz) { this.currentAccount = currentAccount; this.imageReceiver = new ImageReceiver(parent); + imageReceiver.setInvalidateAll(true); this.avatarDrawable = new AvatarDrawable(); setSize(sz); @@ -112,6 +114,10 @@ public class AvatarSpan extends ReplacementSpan { imageReceiver.setForUserOrChat(null, avatarDrawable); } + public void setImageDrawable(Drawable drawable) { + imageReceiver.setImageBitmap(drawable); + } + @Override public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) { return dp(sz); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java index 314853cf3..cc636f15e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java @@ -41,6 +41,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; @@ -109,7 +110,7 @@ public class BotHelpCell extends View { setText(bot, text, null, null); } - public void setText(boolean bot, String text, TLObject imageOrAnimation, TLRPC.BotInfo botInfo) { + public void setText(boolean bot, String text, TLObject imageOrAnimation, TL_bots.BotInfo botInfo) { boolean photoVisible = imageOrAnimation != null; boolean textVisible = !TextUtils.isEmpty(text); if ((text == null || text.length() == 0) && !photoVisible) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java index b4d2aaa84..443dc170d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java @@ -9,6 +9,9 @@ package org.telegram.ui.Cells; import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatPluralStringComma; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; import android.annotation.SuppressLint; import android.content.Context; @@ -68,6 +71,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLObject; @@ -97,6 +101,7 @@ import org.telegram.ui.Components.spoilers.SpoilerEffect; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PhotoViewer; import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.StoriesUtilities; import org.telegram.ui.Stories.UploadingDotsSpannable; import org.telegram.ui.Stories.recorder.HintView2; @@ -395,9 +400,9 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD CharSequence newText; if (scheduled) { if (date == 0x7ffffffe) { - newText = LocaleController.getString("MessageScheduledUntilOnline", R.string.MessageScheduledUntilOnline); + newText = getString("MessageScheduledUntilOnline", R.string.MessageScheduledUntilOnline); } else { - newText = LocaleController.formatString("MessageScheduledOn", R.string.MessageScheduledOn, LocaleController.formatDateChat(date)); + newText = formatString("MessageScheduledOn", R.string.MessageScheduledOn, LocaleController.formatDateChat(date)); } } else { newText = LocaleController.formatDateChat(date); @@ -573,7 +578,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } else { radialProgress.setIcon(MediaActionDrawable.ICON_CANCEL, !messageIdChanged, !messageIdChanged); } - } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { imageReceiver.setRoundRadius(0); if (USE_PREMIUM_GIFT_LOCAL_STICKER) { @@ -595,37 +600,62 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD set = MediaDataController.getInstance(currentAccount).getStickerSetByEmojiOrName(packName); } if (set != null) { - int months = messageObject.messageOwner.action.months; + int months = messageObject.messageOwner.action.months; String monthsEmoticon; - if (USE_PREMIUM_GIFT_MONTHS_AS_EMOJI_NUMBERS) { - StringBuilder monthsEmoticonBuilder = new StringBuilder(); - while (months > 0) { - monthsEmoticonBuilder.insert(0, (months % 10) + "\u20E3"); - months /= 10; + if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + final long stars = ((TLRPC.TL_messageActionGiftStars) messageObject.messageOwner.action).stars; + String emoji; + if (stars <= 1000) { + emoji = "2⃣"; + } else if (stars < 2500) { + emoji = "3⃣"; + } else { + emoji = "4⃣"; } - monthsEmoticon = monthsEmoticonBuilder.toString(); - } else { - monthsEmoticon = monthsToEmoticon.get(months); - } - for (TLRPC.TL_stickerPack pack : set.packs) { - if (Objects.equals(pack.emoticon, monthsEmoticon)) { - for (long id : pack.documents) { - for (TLRPC.Document doc : set.documents) { - if (doc.id == id) { - document = doc; + for (int i = 0; i < set.packs.size(); ++i) { + TLRPC.TL_stickerPack pack = set.packs.get(i); + if (TextUtils.equals(pack.emoticon, emoji) && !pack.documents.isEmpty()) { + long documentId = pack.documents.get(0); + for (int j = 0; j < set.documents.size(); ++j) { + TLRPC.Document d = set.documents.get(j); + if (d != null && d.id == documentId) { + document = d; break; } } - if (document != null) { - break; - } + break; } } - if (document != null) { - break; + } else { + if (USE_PREMIUM_GIFT_MONTHS_AS_EMOJI_NUMBERS) { + StringBuilder monthsEmoticonBuilder = new StringBuilder(); + while (months > 0) { + monthsEmoticonBuilder.insert(0, (months % 10) + "\u20E3"); + months /= 10; + } + monthsEmoticon = monthsEmoticonBuilder.toString(); + } else { + monthsEmoticon = monthsToEmoticon.get(months); + } + for (TLRPC.TL_stickerPack pack : set.packs) { + if (Objects.equals(pack.emoticon, monthsEmoticon)) { + for (long id : pack.documents) { + for (TLRPC.Document doc : set.documents) { + if (doc.id == id) { + document = doc; + break; + } + } + if (document != null) { + break; + } + } + } + if (document != null) { + break; + } } } - if (document == null && !set.documents.isEmpty()) { document = set.documents.get(0); } @@ -841,10 +871,14 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD bounce.setPressed(false); if (delegate != null) { if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { + playSoundEffect(SoundEffectConstants.CLICK); openPremiumGiftChannel(); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { playSoundEffect(SoundEffectConstants.CLICK); openPremiumGiftPreview(); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + playSoundEffect(SoundEffectConstants.CLICK); + openStarsGiftTransaction(); } else { ImageUpdater imageUpdater = MessagesController.getInstance(currentAccount).photoSuggestion.get(messageObject.messageOwner.local_id); if (imageUpdater == null) { @@ -877,6 +911,8 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD openPremiumGiftChannel(); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { openPremiumGiftPreview(); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + openStarsGiftTransaction(); } else if (delegate != null) { boolean consumed = false; if (messageObject.type == MessageObject.TYPE_SUGGEST_PHOTO) { @@ -959,9 +995,9 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } private boolean isSelfGiftCode() { - if (currentMessageObject != null && currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode) { + if (currentMessageObject != null && (currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode || currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftStars)) { if (currentMessageObject.messageOwner.from_id instanceof TLRPC.TL_peerUser) { - return MessagesController.getInstance(currentAccount).getUser(currentMessageObject.messageOwner.from_id.user_id).self; + return UserObject.isUserSelf(MessagesController.getInstance(currentAccount).getUser(currentMessageObject.messageOwner.from_id.user_id)); } } return false; @@ -988,6 +1024,12 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } } + private void openStarsGiftTransaction() { + if (currentMessageObject == null || currentMessageObject.messageOwner == null) return; + if (!(currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftStars)) return; + StarsIntroActivity.showTransactionSheet(getContext(), currentAccount, currentMessageObject.messageOwner.date, currentMessageObject.messageOwner.from_id, currentMessageObject.messageOwner.peer_id, (TLRPC.TL_messageActionGiftStars) currentMessageObject.messageOwner.action, avatarStoryParams.resourcesProvider); + } + private void openLink(CharacterStyle link) { if (delegate != null && link instanceof URLSpan) { String url = ((URLSpan) link).getURL(); @@ -1102,7 +1144,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } if (isButtonLayout(messageObject)) { giftRectSize = Math.min((int) (AndroidUtilities.isTablet() ? AndroidUtilities.getMinTabletSide() * 0.6f : AndroidUtilities.displaySize.x * 0.62f - dp(34)), AndroidUtilities.displaySize.y - ActionBar.getCurrentActionBarHeight() - AndroidUtilities.statusBarHeight - dp(64)); - if (!AndroidUtilities.isTablet() && messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { + if (!AndroidUtilities.isTablet() && (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_STARS)) { giftRectSize = (int) (giftRectSize * 1.2f); } stickerSize = giftRectSize - dp(106); @@ -1146,7 +1188,9 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD giftPremiumAdditionalHeight -= dp(30); } - if (giftPremiumSubtitleLayout.getLineCount() > 2) { + if (currentMessageObject.type == MessageObject.TYPE_GIFT_STARS) { + giftPremiumAdditionalHeight += giftPremiumSubtitleLayout.getHeight() - dp(20); + } else if (giftPremiumSubtitleLayout.getLineCount() > 2) { giftPremiumAdditionalHeight += (giftPremiumSubtitleLayout.getLineBottom(0) - giftPremiumSubtitleLayout.getLineTop(0)) * giftPremiumSubtitleLayout.getLineCount() - 2; } @@ -1225,14 +1269,14 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD if (text == null) { if (messageObject.messageOwner != null && messageObject.messageOwner.media != null && messageObject.messageOwner.media.ttl_seconds != 0) { if (messageObject.messageOwner.media.photo != null) { - text = LocaleController.getString(R.string.AttachPhotoExpired); + text = getString(R.string.AttachPhotoExpired); } else if (messageObject.messageOwner.media.document instanceof TLRPC.TL_documentEmpty || messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument && messageObject.messageOwner.media.document == null) { if (messageObject.messageOwner.media.voice) { - text = LocaleController.getString(R.string.AttachVoiceExpired); + text = getString(R.string.AttachVoiceExpired); } else if (messageObject.messageOwner.media.round) { - text = LocaleController.getString(R.string.AttachRoundExpired); + text = getString(R.string.AttachRoundExpired); } else { - text = LocaleController.getString(R.string.AttachVideoExpired); + text = getString(R.string.AttachVideoExpired); } } else { text = AnimatedEmojiSpan.cloneSpans(messageObject.messageText); @@ -1250,10 +1294,19 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD imageReceiver.setImageCoords((previousWidth - AndroidUtilities.roundMessageSize) / 2f, textHeight + dp(19), AndroidUtilities.roundMessageSize, AndroidUtilities.roundMessageSize); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { createGiftPremiumChannelLayouts(); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + final TLRPC.TL_messageActionGiftStars action = (TLRPC.TL_messageActionGiftStars) messageObject.messageOwner.action; + final TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(currentMessageObject.getDialogId()); + createGiftPremiumLayouts( + formatPluralStringComma("ActionGiftStarsTitle", (int) action.stars), + AndroidUtilities.replaceTags(currentMessageObject.isOutOwner() ? formatString(R.string.ActionGiftStarsSubtitle, UserObject.getForcedFirstName(user)) : getString(R.string.ActionGiftStarsSubtitleYou)), + getString(R.string.ActionGiftStarsView), + giftRectSize, + true + ); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { - String actionName = isGiftCode() && !isSelfGiftCode() ? LocaleController.getString("GiftPremiumUseGiftBtn", R.string.GiftPremiumUseGiftBtn) : - LocaleController.getString("ActionGiftPremiumView", R.string.ActionGiftPremiumView); - createGiftPremiumLayouts(LocaleController.getString(R.string.ActionGiftPremiumTitle), LocaleController.formatString(R.string.ActionGiftPremiumSubtitle, LocaleController.formatPluralString("Months", messageObject.messageOwner.action.months)), actionName, giftRectSize, true); + String actionName = getString(isGiftCode() && !isSelfGiftCode() ? R.string.GiftPremiumUseGiftBtn : R.string.ActionGiftPremiumView); + createGiftPremiumLayouts(getString(R.string.ActionGiftPremiumTitle), formatString(R.string.ActionGiftPremiumSubtitle, LocaleController.formatPluralString("Months", messageObject.messageOwner.action.months)), actionName, giftRectSize, true); } else if (messageObject.type == MessageObject.TYPE_SUGGEST_PHOTO) { TLRPC.TL_messageActionSuggestProfilePhoto actionSuggestProfilePhoto = (TLRPC.TL_messageActionSuggestProfilePhoto) messageObject.messageOwner.action; String description; @@ -1262,22 +1315,22 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD if (user.id == UserConfig.getInstance(currentAccount).clientUserId) { TLRPC.User user2 = MessagesController.getInstance(currentAccount).getUser(messageObject.getDialogId()); if (isVideo) { - description = LocaleController.formatString(R.string.ActionSuggestVideoFromYouDescription, user2.first_name); + description = formatString(R.string.ActionSuggestVideoFromYouDescription, user2.first_name); } else { - description = LocaleController.formatString(R.string.ActionSuggestPhotoFromYouDescription, user2.first_name); + description = formatString(R.string.ActionSuggestPhotoFromYouDescription, user2.first_name); } } else { if (isVideo) { - description = LocaleController.formatString(R.string.ActionSuggestVideoToYouDescription, user.first_name); + description = formatString(R.string.ActionSuggestVideoToYouDescription, user.first_name); } else { - description = LocaleController.formatString(R.string.ActionSuggestPhotoToYouDescription, user.first_name); + description = formatString(R.string.ActionSuggestPhotoToYouDescription, user.first_name); } } String action; if (actionSuggestProfilePhoto.video || (actionSuggestProfilePhoto.photo.video_sizes != null && !actionSuggestProfilePhoto.photo.video_sizes.isEmpty())) { - action = LocaleController.getString(R.string.ViewVideoAction); + action = getString(R.string.ViewVideoAction); } else { - action = LocaleController.getString(R.string.ViewPhotoAction); + action = getString(R.string.ViewPhotoAction); } createGiftPremiumLayouts(null, description, action, giftRectSize, true); textLayout = null; @@ -1292,13 +1345,13 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD description = messageObject.messageText; } else if (!messageObject.isOutOwner() && messageObject.isWallpaperForBoth() && messageObject.isCurrentWallpaper()) { description = messageObject.messageText; - action = LocaleController.getString(R.string.RemoveWallpaperAction); + action = getString(R.string.RemoveWallpaperAction); actionClickableAsImage = false; } else if (user != null && user.id == UserConfig.getInstance(currentAccount).clientUserId) { description = messageObject.messageText; } else { description = messageObject.messageText; - action = LocaleController.getString(R.string.ViewWallpaperAction); + action = getString(R.string.ViewWallpaperAction); } createGiftPremiumLayouts(null, description, action, giftRectSize, actionClickableAsImage); textLayout = null; @@ -1311,11 +1364,11 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD if (user.self) { TLRPC.User user2 = MessagesController.getInstance(currentAccount).getUser(messageObject.getDialogId()); - description = AndroidUtilities.replaceTags(LocaleController.formatString("StoryYouMentionedTitle", R.string.StoryYouMentionedTitle, user2.first_name)); + description = AndroidUtilities.replaceTags(formatString("StoryYouMentionedTitle", R.string.StoryYouMentionedTitle, user2.first_name)); } else { - description = AndroidUtilities.replaceTags(LocaleController.formatString("StoryMentionedTitle", R.string.StoryMentionedTitle, user.first_name)); + description = AndroidUtilities.replaceTags(formatString("StoryMentionedTitle", R.string.StoryMentionedTitle, user.first_name)); } - action = LocaleController.getString(R.string.StoryMentionedAction); + action = getString(R.string.StoryMentionedAction); createGiftPremiumLayouts(null, description, action, giftRectSize, true); textLayout = null; @@ -1336,27 +1389,27 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD String from = chat == null ? null : chat.title; boolean isPrize = gifCodeAction.via_giveaway; CharSequence title = gifCodeAction.unclaimed ? - LocaleController.getString("BoostingUnclaimedPrize", R.string.BoostingUnclaimedPrize) - : LocaleController.getString("BoostingCongratulations", R.string.BoostingCongratulations); + getString("BoostingUnclaimedPrize", R.string.BoostingUnclaimedPrize) + : getString("BoostingCongratulations", R.string.BoostingCongratulations); SpannableStringBuilder subtitle; CharSequence monthsStr = months == 12 ? LocaleController.formatPluralString("BoldYears", 1) : LocaleController.formatPluralString("BoldMonths", months); if (isPrize) { if (gifCodeAction.unclaimed) { - subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingYouHaveUnclaimedPrize", R.string.BoostingYouHaveUnclaimedPrize, from))); + subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(formatString("BoostingYouHaveUnclaimedPrize", R.string.BoostingYouHaveUnclaimedPrize, from))); subtitle.append("\n\n"); - subtitle.append(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingUnclaimedPrizeDuration", R.string.BoostingUnclaimedPrizeDuration, monthsStr))); + subtitle.append(AndroidUtilities.replaceTags(formatString("BoostingUnclaimedPrizeDuration", R.string.BoostingUnclaimedPrizeDuration, monthsStr))); } else { - subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingReceivedPrizeFrom", R.string.BoostingReceivedPrizeFrom, from))); + subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(formatString("BoostingReceivedPrizeFrom", R.string.BoostingReceivedPrizeFrom, from))); subtitle.append("\n\n"); - subtitle.append(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingReceivedPrizeDuration", R.string.BoostingReceivedPrizeDuration, monthsStr))); + subtitle.append(AndroidUtilities.replaceTags(formatString("BoostingReceivedPrizeDuration", R.string.BoostingReceivedPrizeDuration, monthsStr))); } } else { - subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(from == null ? LocaleController.getString("BoostingReceivedGiftNoName", R.string.BoostingReceivedGiftNoName) : LocaleController.formatString("BoostingReceivedGiftFrom", R.string.BoostingReceivedGiftFrom, from))); + subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(from == null ? getString("BoostingReceivedGiftNoName", R.string.BoostingReceivedGiftNoName) : formatString("BoostingReceivedGiftFrom", R.string.BoostingReceivedGiftFrom, from))); subtitle.append("\n\n"); - subtitle.append(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingReceivedGiftDuration", R.string.BoostingReceivedGiftDuration, monthsStr))); + subtitle.append(AndroidUtilities.replaceTags(formatString("BoostingReceivedGiftDuration", R.string.BoostingReceivedGiftDuration, monthsStr))); } - String btnText = LocaleController.getString("BoostingReceivedGiftOpenBtn", R.string.BoostingReceivedGiftOpenBtn); + String btnText = getString("BoostingReceivedGiftOpenBtn", R.string.BoostingReceivedGiftOpenBtn); SpannableStringBuilder titleBuilder = SpannableStringBuilder.valueOf(title); titleBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, titleBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -1374,15 +1427,22 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD private void createGiftPremiumLayouts(CharSequence title, CharSequence subtitle, CharSequence button, int width, boolean buttonClickableAsImage) { width -= dp(16); + if (currentMessageObject != null && currentMessageObject.type == MessageObject.TYPE_GIFT_STARS) { + width -= dp(16); + } if (title != null) { - giftTitlePaint.setTextSize(dp(16)); + if (currentMessageObject != null && currentMessageObject.type == MessageObject.TYPE_GIFT_STARS) { + giftTitlePaint.setTextSize(dp(14)); + } else { + giftTitlePaint.setTextSize(dp(16)); + } SpannableStringBuilder titleBuilder = SpannableStringBuilder.valueOf(title); titleBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, titleBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); giftPremiumTitleLayout = new StaticLayout(titleBuilder, giftTitlePaint, width, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); } else { giftPremiumTitleLayout = null; } - if (currentMessageObject != null && isNewStyleButtonLayout()) { + if (currentMessageObject != null && (isNewStyleButtonLayout() || currentMessageObject.type == MessageObject.TYPE_GIFT_STARS)) { giftSubtitlePaint.setTextSize(dp(13)); } else { giftSubtitlePaint.setTextSize(dp(15)); @@ -1451,6 +1511,9 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { imageSize = (int) (stickerSize * (AndroidUtilities.isTablet() ? 1.0f : 1.2f)); imageReceiver.setImageCoords((previousWidth - imageSize) / 2f, textY + textHeight + giftRectSize * 0.075f - dp(22), imageSize, imageSize); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + imageSize = (int) (stickerSize * 1.1f); + imageReceiver.setImageCoords((previousWidth - imageSize) / 2f, textY + textHeight + giftRectSize * 0.075f - dp(22), imageSize, imageSize); } else { imageSize = (int) (stickerSize * 1f); imageReceiver.setImageCoords((previousWidth - imageSize) / 2f, textY + textHeight + giftRectSize * 0.075f - dp(4), imageSize, imageSize); @@ -1560,6 +1623,9 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD if (messageObject.type == MessageObject.TYPE_SUGGEST_PHOTO) { y += dp(16); } + if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + y -= dp(3.66f); + } if (giftPremiumButtonLayout == null) { y -= dp(24); } @@ -1567,7 +1633,10 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD canvas.translate(x, y); if (giftPremiumTitleLayout != null) { + canvas.save(); + canvas.translate((giftRectSize - dp(16) - giftPremiumTitleLayout.getWidth()) / 2f, 0); giftPremiumTitleLayout.draw(canvas); + canvas.restore(); y += giftPremiumTitleLayout.getHeight(); y += dp(messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL ? 6 : 0); } else { @@ -1583,7 +1652,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD if (settingWallpaperLayout == null) { settingWallpaperPaint = new TextPaint(); settingWallpaperPaint.setTextSize(dp(13)); - SpannableStringBuilder cs = new SpannableStringBuilder(LocaleController.getString(R.string.ActionSettingWallpaper)); + SpannableStringBuilder cs = new SpannableStringBuilder(getString(R.string.ActionSettingWallpaper)); int index = cs.toString().indexOf("..."), len = 3; if (index < 0) { index = cs.toString().indexOf("…"); @@ -1616,7 +1685,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD float s = 0.8f + 0.2f * p; canvas.save(); canvas.scale(s, s, giftPremiumSubtitleWidth / 2f, giftPremiumSubtitleLayout.getHeight() / 2f); - canvas.translate((giftPremiumSubtitleWidth -giftPremiumSubtitleLayout.getWidth()) / 2f, 0); + canvas.translate((giftPremiumSubtitleWidth - giftPremiumSubtitleLayout.getWidth()) / 2f, 0); SpoilerEffect.layoutDrawMaybe(giftPremiumSubtitleLayout, canvas); canvas.restore(); @@ -1652,7 +1721,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } } else if (giftPremiumSubtitleLayout != null) { canvas.save(); - canvas.translate((giftPremiumSubtitleWidth - giftPremiumSubtitleLayout.getWidth()) / 2f, 0); + canvas.translate((giftRectSize - dp(16) - giftPremiumSubtitleLayout.getWidth()) / 2f, 0); SpoilerEffect.layoutDrawMaybe(giftPremiumSubtitleLayout, canvas); canvas.restore(); } @@ -1726,6 +1795,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD float s = 1f - progressToProgress; canvas.scale(s, s, giftButtonRect.centerX(), giftButtonRect.centerY()); canvas.translate(x, giftButtonRect.top + dp(8)); + canvas.translate((giftRectSize - dp(16) - giftPremiumButtonLayout.getWidth()) / 2f, 0); giftPremiumButtonLayout.draw(canvas); canvas.restore(); } @@ -2134,7 +2204,7 @@ public class ChatActionCell extends BaseCell implements DownloadController.FileD } private boolean isButtonLayout(MessageObject messageObject) { - return messageObject != null && (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL || isNewStyleButtonLayout()); + return messageObject != null && (messageObject.type == MessageObject.TYPE_GIFT_STARS || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL || isNewStyleButtonLayout()); } private boolean isGiftChannel(MessageObject messageObject) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java index 207974c1c..fb1fed518 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -142,6 +142,7 @@ import org.telegram.ui.Components.BackgroundGradientDrawable; import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CheckBoxBase; import org.telegram.ui.Components.ClipRoundedDrawable; +import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.EmptyStubSpan; import org.telegram.ui.Components.FloatSeekBarAccessibilityDelegate; @@ -298,8 +299,21 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else { currentPhoto = null; } - avatarDrawable.setInfo(currentAccount, currentChat); - avatarImage.setForUserOrChat(currentChat, avatarDrawable); + if (currentChat.signature_profiles) { + long did = DialogObject.getPeerDialogId(messageObject.messageOwner.from_id); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(messageObject.currentAccount).getUser(did); + avatarDrawable.setInfo(currentAccount, user); + avatarImage.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(messageObject.currentAccount).getChat(-did); + avatarDrawable.setInfo(currentAccount, chat); + avatarImage.setForUserOrChat(chat, avatarDrawable); + } + } else { + avatarDrawable.setInfo(currentAccount, currentChat); + avatarImage.setForUserOrChat(currentChat, avatarDrawable); + } } else if (messageObject.isSponsored()) { if (messageObject.sponsoredPhoto != null) { avatarImage.setImage(ImageLocation.getForPhoto(FileLoader.getClosestPhotoSizeWithSize(messageObject.sponsoredPhoto.sizes, AndroidUtilities.dp(50), false, null, true), messageObject.sponsoredPhoto), "50_50", avatarDrawable, null, null, 0); @@ -561,7 +575,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate default void didLongPressBotButton(ChatMessageCell cell, TLRPC.KeyboardButton button) { } - default void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress) { + default void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress, float x, float y) { } default void didPressVoteButtons(ChatMessageCell cell, ArrayList buttons, int showCount, int x, int y) { @@ -685,6 +699,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } + default void didPressRevealSensitiveContent(ChatMessageCell cell) { + + } + default void didPressEffect(ChatMessageCell cell) { } @@ -799,6 +817,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate public static final int INSTANT_BUTTON_TYPE_CONTACT_VIEW = 5; public static final int INSTANT_BUTTON_TYPE_CONTACT_SEND_MESSAGE = 30; public static final int INSTANT_BUTTON_TYPE_CONTACT_ADD = 31; + public static final int INSTANT_BUTTON_TYPE_PROFILE = 32; public static final int INSTANT_BUTTON_TYPE_STICKER_SET = 23; public static final int INSTANT_BUTTON_TYPE_EMOJI_SET = 24; @@ -1052,6 +1071,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate private int infoX; private int infoWidth; + private Text sensitiveText, sensitiveTextShort; + private String currentUrl; private WebFile currentWebFile; private WebFile lastWebFile; @@ -1349,6 +1370,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate private MessageTopicButton topicButton; private int drawSideButton; + private boolean sideButtonVisible; private int drawSideButton2; private boolean sideButtonPressed; private int pressedSideButton; @@ -2511,7 +2533,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate videoButtonPressed = 1; invalidate(); return true; - } else if (drawPhotoImage && drawImageButton && buttonState != -1 && (!checkOnlyButtonPressed && photoImage.isInsideImage(x, y) || x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) && radialProgress.getIcon() != MediaActionDrawable.ICON_NONE)) { + } else if (drawPhotoImage && currentMessageObject.sponsoredMedia != null && photoImage.isInsideImage(x, y) || drawPhotoImage && drawImageButton && buttonState != -1 && (!checkOnlyButtonPressed && photoImage.isInsideImage(x, y) || x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) && radialProgress.getIcon() != MediaActionDrawable.ICON_NONE)) { buttonPressed = 1; invalidate(); return true; @@ -2598,7 +2620,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else if (buttonPressed != 0) { buttonPressed = 0; playSoundEffect(SoundEffectConstants.CLICK); - if (drawVideoImageButton) { + if (drawVideoImageButton || currentMessageObject.sponsoredMedia != null) { didClickedImage(); } else { didPressButton(true, false); @@ -4065,6 +4087,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate forwardBotPressed = true; result = true; } else if ( + sideButtonVisible && drawSideButton != 0 && x >= sideStartX - dp(24) && x <= sideStartX + dp(40) && y >= sideStartY - dp(24) && y <= sideStartY + dp(38 + (drawSideButton == 3 && commentLayout != null ? 18 : 0) + (drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE ? 38 : 0)) @@ -4316,6 +4339,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate pressedSideButton = 0; } else if (event.getAction() == MotionEvent.ACTION_MOVE) { if (!( + sideButtonVisible && x >= sideStartX - dp(24) && x <= sideStartX + dp(40) && y >= sideStartY - dp(24) && y <= sideStartY + dp(38 + (drawSideButton == 3 && commentLayout != null ? 18 : 0) + (drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE ? 38 : 0)) )) { @@ -4346,10 +4370,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate (position.flags & MessageObject.POSITION_FLAG_BOTTOM) != 0 && (position.flags & MessageObject.POSITION_FLAG_LEFT) != 0) { if (cell == this) { - return reactionsLayoutInBubble.chekTouchEvent(event); + return reactionsLayoutInBubble.checkTouchEvent(event); } else { event.offsetLocation(this.getLeft() - cell.getLeft(), this.getTop() - cell.getTop()); - boolean result = cell.reactionsLayoutInBubble.chekTouchEvent(event); + boolean result = cell.reactionsLayoutInBubble.checkTouchEvent(event); event.offsetLocation(-(this.getLeft() - cell.getLeft()), -(this.getTop() - cell.getTop())); return result; } @@ -4358,7 +4382,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } return false; } - return reactionsLayoutInBubble.chekTouchEvent(event); + return reactionsLayoutInBubble.checkTouchEvent(event); } @@ -4796,6 +4820,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate private void didClickedImage() { if (currentMessageObject.hasMediaSpoilers() && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isMediaSpoilersRevealed) { + if (delegate != null && currentMessageObject.isSensitive()) { + delegate.didPressRevealSensitiveContent(this); + return; + } startRevealMedia(lastTouchX, lastTouchY); return; } @@ -4861,6 +4889,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (buttonState == -1) { delegate.didPressImage(this, lastTouchX, lastTouchY); } + } else if (currentMessageObject.sponsoredMedia != null) { + if (delegate != null) { + delegate.didPressImage(this, lastTouchX, lastTouchY); + } } else if (documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { if (buttonState == -1) { TLRPC.WebPage webPage = MessageObject.getMedia(currentMessageObject.messageOwner).webpage; @@ -6057,8 +6089,19 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate drawInstantView = true; drawInstantViewType = 1; } else if ("telegram_user".equals(webpageType)) { + boolean isProfile = false; + if (webpage != null && webpage.url != null) { + Uri data = Uri.parse(webpage.url); + if (data != null && data.getBooleanQueryParameter("profile", false)) { + isProfile = true; + } + } drawInstantView = true; - drawInstantViewType = 13; + if (isProfile) { + drawInstantViewType = INSTANT_BUTTON_TYPE_PROFILE; + } else { + drawInstantViewType = 13; + } } else if ("telegram_megagroup".equals(webpageType)) { drawInstantView = true; drawInstantViewType = 2; @@ -6345,15 +6388,26 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate webDocument = null; overrideDescrption = messageObject.messageText; description = overrideDescrption != null ? overrideDescrption.toString() : null; - photo = null; author = null; document = null; photo = messageObject.sponsoredPhoto; + isSmallImage = photo != null || peerPhoto != null; + smallImage = true; duration = 0; type = null; - isSmallImage = photo != null || peerPhoto != null; + if (messageObject.sponsoredMedia != null) { + if (messageObject.sponsoredMedia instanceof TLRPC.TL_messageMediaDocument) { + TLRPC.TL_messageMediaDocument media = (TLRPC.TL_messageMediaDocument) messageObject.sponsoredMedia; + document = media.document; + duration = (int) MessageObject.getDocumentDuration(media.document); + } else if (messageObject.sponsoredMedia instanceof TLRPC.TL_messageMediaPhoto) { + TLRPC.TL_messageMediaPhoto media = (TLRPC.TL_messageMediaPhoto) messageObject.sponsoredMedia; + photo = media.photo; + } + smallImage = false; + isSmallImage = false; + } linkPreviewAbove = false; - smallImage = true; } else if (drawInstantViewType == 19) { site_name = null; title = null; @@ -6416,7 +6470,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate "telegram_user".equals(type) || "telegram_channel".equals(type) || "telegram_megagroup".equals(type) || "telegram_voicechat".equals(type) || "telegram_videochat".equals(type) || "telegram_livestream".equals(type) || "telegram_channel_boost".equals(type) || "telegram_group_boost".equals(type); - smallImage = !slideshow && (!drawInstantView || drawInstantViewType == 1 || drawInstantViewType == 2 || drawInstantViewType == 9 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 18 || drawInstantViewType == 20 || drawInstantViewType == 22) && document == null && isSmallImageType || (drawInstantViewType == 23 || drawInstantViewType == 24) && stickers != null && !stickers.isEmpty(); + smallImage = !slideshow && (!drawInstantView || drawInstantViewType == 1 || drawInstantViewType == 2 || drawInstantViewType == 9 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 18 || drawInstantViewType == 20 || drawInstantViewType == 22 || drawInstantViewType == INSTANT_BUTTON_TYPE_PROFILE) && document == null && isSmallImageType || (drawInstantViewType == 23 || drawInstantViewType == 24) && stickers != null && !stickers.isEmpty(); TLRPC.MessageMedia media = MessageObject.getMedia(messageObject.messageOwner); if (media != null && !(drawInstantViewType == 23 || drawInstantViewType == 24 || drawInstantViewType == 25)) { if (media.force_large_media) { @@ -6757,7 +6811,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, 90); photoParentObject = photo; } - if (currentPhotoObject != null && (currentPhotoObject.w == 0 || currentPhotoObject.h == 0)) { + if (currentPhotoObject != null && (currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || currentPhotoObject.w == 0 || currentPhotoObject.h == 0)) { for (int a = 0; a < document.attributes.size(); a++) { TLRPC.DocumentAttribute attribute = document.attributes.get(a); if (attribute instanceof TLRPC.TL_documentAttributeImageSize || attribute instanceof TLRPC.TL_documentAttributeVideo) { @@ -7149,7 +7203,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else if (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO) { photoImage.setNeedsQualityThumb(true); photoImage.setShouldGenerateQualityThumb(true); - if (!isSmallImage && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && ( + if (!isSmallImage && !currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && ( (currentMessageObject.mediaExists || currentMessageObject.attachPathExists) || messageObject.canStreamVideo() && DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject) )) { @@ -7175,6 +7229,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else if (MessageObject.isGifDocument(document, messageObject.hasValidGroupId())) { autoDownload = DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject); } + if (currentMessageObject.isHiddenSensitive()) { + autoDownload = false; + } String filter = currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || "s".equals(currentPhotoObject.type) ? currentPhotoFilterThumb : currentPhotoFilter; if ((messageObject.mediaExists || autoDownload) && !currentMessageObject.isRepostPreview) { autoPlayingMedia = true; @@ -7916,7 +7973,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (captionWidth > widthForCaption) { groupMedia.setOverrideWidth(captionWidth + getExtraTextX() * 2 + dp(20) - dp(8 + 9) + dp(14)); } - if (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom) { + if (!captionAbove && (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom)) { captionHeight += AndroidUtilities.dp(14); addedCaptionHeight += AndroidUtilities.dp(14); } @@ -8887,7 +8944,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } captionHeight = captionLayout.textHeight(); addedCaptionHeight = captionHeight + AndroidUtilities.dp(9); - if (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom) { + if (!captionAbove && (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom)) { captionHeight += AndroidUtilities.dp(14); addedCaptionHeight += AndroidUtilities.dp(14); } @@ -9029,7 +9086,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentPhotoObjectThumb.size = -1; } - if (SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && (messageObject.type == MessageObject.TYPE_VIDEO /*|| messageObject.type == MessageObject.TYPE_STORY && messageObject.getDocument() != null*/) && !messageObject.needDrawBluredPreview() && + if (!currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && (messageObject.type == MessageObject.TYPE_VIDEO /*|| messageObject.type == MessageObject.TYPE_STORY && messageObject.getDocument() != null*/) && !messageObject.needDrawBluredPreview() && ((currentMessageObject.mediaExists || currentMessageObject.attachPathExists) || messageObject.canStreamVideo() && DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject)) ) { if (currentPosition != null) { @@ -9127,6 +9184,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (MessageObject.isGifDocument(document, messageObject.hasValidGroupId()) || messageObject.type == MessageObject.TYPE_ROUND_VIDEO) { autoDownload = DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject); } + if (messageObject.isHiddenSensitive()) { + autoDownload = false; + } TLRPC.VideoSize videoSize = MessageObject.getDocumentVideoThumb(document); if (((MessageObject.isGifDocument(document, messageObject.hasValidGroupId()) && messageObject.videoEditedInfo == null) || (!messageObject.isSending() && !messageObject.isEditing())) && (localFile != 0 || FileLoader.getInstance(currentAccount).isLoadingFile(fileName) || autoDownload)) { if (localFile != 1 && !messageObject.needDrawBluredPreview() && (localFile != 0 || messageObject.canStreamVideo() && autoDownload)) { @@ -9276,7 +9336,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate invalidate(); } - if ((currentPosition == null || currentMessageObject.isMusic() || currentMessageObject.type == MessageObject.TYPE_PAID_MEDIA || currentMessageObject.isDocument()) && !messageObject.isAnyKindOfSticker() && addedCaptionHeight == 0 && !messageObject.isExpiredStory() && !messageObject.isUnsupported()) { + if ((currentPosition == null || currentMessageObject.isMusic() || currentMessageObject.type == MessageObject.TYPE_PAID_MEDIA || currentMessageObject.isDocument()) && !messageObject.isSponsored() && !messageObject.isAnyKindOfSticker() && addedCaptionHeight == 0 && !messageObject.isExpiredStory() && !messageObject.isUnsupported()) { int addCaptionLayoutWidth = 0; int width = backgroundWidth; if ((currentMessageObject.type == MessageObject.TYPE_VOICE || isRoundVideo) && messageObject.isVoiceTranscriptionOpen() && messageObject.getFactCheck() == null) { @@ -10097,10 +10157,13 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (super.invalidateCallback != null) { super.invalidateCallback.run(); } - if (invalidateCallback != null) { - invalidateCallback.run(); + if (overrideInvalidate != null) { + overrideInvalidate.run(); return; } + if (invalidateListener != null) { + invalidateListener.run(); + } super.invalidate(); if ((invalidatesParent || currentMessagesGroup != null && invalidateParentForce()) && getParent() != null) { View parent = (View) getParent(); @@ -10120,10 +10183,13 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (currentMessageObject == null) { return; } - if (invalidateCallback != null) { - invalidateCallback.run(); + if (overrideInvalidate != null) { + overrideInvalidate.run(); return; } + if (invalidateListener != null) { + invalidateListener.run(); + } super.invalidate(); if ((invalidatesParent || currentMessagesGroup != null && invalidateParentForce()) && getParent() != null) { View parent = (View) getParent(); @@ -10138,9 +10204,14 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } } - private Runnable invalidateCallback; - public void setInvalidateCallback(Runnable callback) { - invalidateCallback = callback; + private Runnable overrideInvalidate; + public void setOverrideInvalidate(Runnable callback) { + overrideInvalidate = callback; + } + + private Runnable invalidateListener; + public void setInvalidateListener(Runnable listener) { + invalidateListener = listener; } @@ -10149,10 +10220,13 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (currentMessageObject == null) { return; } - if (invalidateCallback != null) { - invalidateCallback.run(); + if (overrideInvalidate != null) { + overrideInvalidate.run(); return; } + if (invalidateListener != null) { + invalidateListener.run(); + } super.invalidate(l, t, r, b); if (invalidatesParent) { if (getParent() != null) { @@ -10382,7 +10456,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } private int createDocumentLayout(int maxWidth, MessageObject messageObject) { - if (messageObject.type == MessageObject.TYPE_TEXT) { + if (messageObject.sponsoredMedia != null) { + documentAttach = messageObject.sponsoredMedia.document; + } else if (messageObject.type == MessageObject.TYPE_TEXT) { documentAttach = MessageObject.getMedia(messageObject.messageOwner).webpage.document; } else { documentAttach = messageObject.getDocument(); @@ -10507,6 +10583,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 320); currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 40); + if (currentMessageObject.isHiddenSensitive() || (DownloadController.getInstance(currentAccount).getAutodownloadMask() & DownloadController.AUTODOWNLOAD_TYPE_PHOTO) == 0) { + currentPhotoObject = null; + } if (currentPhotoObject == null || currentPhotoObject == currentPhotoObjectThumb) { currentPhotoObject = null; photoImage.setNeedsQualityThumb(true); @@ -11050,6 +11129,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate str = getString(R.string.OpenChannel); } else if (drawInstantViewType == 13) { str = getString(R.string.SendMessage).toUpperCase(); + } else if (drawInstantViewType == INSTANT_BUTTON_TYPE_PROFILE) { + str = getString(R.string.OpenProfile).toUpperCase(); } else if (drawInstantViewType == 10) { str = getString(R.string.OpenBot); } else if (drawInstantViewType == 2) { @@ -12029,7 +12110,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } } if (documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { - if (drawPhotoImage && !currentMessageObject.isRepostPreview && photoImage.getVisible() && !hasGamePreview && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.preview && !isSmallImage) { + if (drawPhotoImage && !currentMessageObject.isRepostPreview && !currentMessageObject.isSponsored() && photoImage.getVisible() && !hasGamePreview && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.preview && !isSmallImage && !currentMessageObject.isSponsored()) { int oldAlpha = ((BitmapDrawable) Theme.chat_msgMediaMenuDrawable).getPaint().getAlpha(); Theme.chat_msgMediaMenuDrawable.setAlpha((int) (oldAlpha * controlsAlpha)); setDrawableBounds(Theme.chat_msgMediaMenuDrawable, otherX = (int) (photoImage.getImageX() + photoImage.getImageWidth() - AndroidUtilities.dp(14)), otherY = (int) (photoImage.getImageY() + AndroidUtilities.dp(8.1f))); @@ -12058,6 +12139,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate radialProgress.setBackgroundDrawable(isDrawSelectionBackground() ? currentBackgroundSelectedDrawable : currentBackgroundDrawable); radialProgress.iconScale = 1f; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + radialProgress.iconScale *= mediaSpoilerRevealProgress; + } radialProgress.draw(canvas); canvas.save(); @@ -12161,6 +12245,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (!enterTransitionInProgress && documentAttachType == DOCUMENT_ATTACH_TYPE_AUDIO) { radialProgress.setBackgroundDrawable(isDrawSelectionBackground() ? currentBackgroundSelectedDrawable : currentBackgroundDrawable); radialProgress.iconScale = 1f; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + radialProgress.iconScale *= mediaSpoilerRevealProgress; + } drawVoiceOnce(canvas, seekBarWaveform == null ? 1f : 1f - seekBarWaveform.explosionRate, () -> radialProgress.draw(canvas)); } @@ -12334,7 +12421,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate updateReactionLayoutPosition(); if (shouldDrawCaptionLayout() && !currentMessageObject.preview) { drawCaptionLayout(canvas, false, 1f); - drawReactionsLayout(canvas, 1f); + drawReactionsLayout(canvas, 1f, null); } if (currentMessagesGroup == null) { @@ -12681,7 +12768,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (hasNewLineForTime && !(drawForwardedName && hasLinkPreview && documentAttachType == DOCUMENT_ATTACH_TYPE_AUDIO)) { reactionsLayoutInBubble.y -= AndroidUtilities.dp(16); } - if (currentMessageObject.type != MessageObject.TYPE_FILE && (captionLayout != null && ((currentMessageObject.type != MessageObject.TYPE_VOICE && !(currentMessageObject.isOut() && drawForwardedName && !drawPhotoImage)) || (currentPosition != null && currentMessagesGroup != null)))) { + if (currentMessageObject.type != MessageObject.TYPE_FILE && (captionLayout != null && ((currentMessageObject.type != MessageObject.TYPE_VOICE && !(currentMessageObject.isOut() && drawForwardedName && !drawPhotoImage)) || (currentPosition != null && currentMessagesGroup != null) || currentMessageObject.type == MessageObject.TYPE_PAID_MEDIA))) { reactionsLayoutInBubble.y -= AndroidUtilities.dp(14); } reactionsLayoutInBubble.y += reactionsLayoutInBubble.positionOffsetY; @@ -12875,8 +12962,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate Theme.chat_replyNamePaint.setColor(linkLine.check(currentMessageObject, currentUser, currentChat, resourcesProvider, ReplyMessageLine.TYPE_LINK)); linkLine.setEmojiAlpha(drawInstantViewType == 23 || drawInstantViewType == 24 ? 0.5f : 1f); - final boolean drawPhotoImageBefore = drawInstantView && (drawInstantViewType != 9 && drawInstantViewType != 2 && drawInstantViewType != 13 && drawInstantViewType != 11 && drawInstantViewType != 25 && drawInstantViewType != 1 && drawInstantViewType != 18 && drawInstantViewType != 22) || drawInstantViewType == 6 && imageBackgroundColor != 0; - final boolean drawPhotoImageAfter = !drawInstantView || drawInstantViewType == 9 || drawInstantViewType == 2 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 1 || drawInstantViewType == 18 || drawInstantViewType == 22 || isSmallImage; + final boolean drawPhotoImageBeforeBefore = currentMessageObject.isSponsored() && !isSmallImage; + final boolean drawPhotoImageBefore = !drawPhotoImageBeforeBefore && drawInstantView && (drawInstantViewType != 9 && drawInstantViewType != 2 && drawInstantViewType != 13 && drawInstantViewType != 11 && drawInstantViewType != 25 && drawInstantViewType != 1 && drawInstantViewType != 18 && drawInstantViewType != 22) || drawInstantViewType == 6 && imageBackgroundColor != 0; + final boolean drawPhotoImageAfter = !drawPhotoImageBeforeBefore && (!drawInstantView || drawInstantViewType == 9 || drawInstantViewType == 2 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 1 || drawInstantViewType == 18 || drawInstantViewType == 22 || drawInstantViewType == INSTANT_BUTTON_TYPE_PROFILE || isSmallImage); boolean restore = false; boolean drawInstantButtonInside = false; @@ -12915,6 +13003,67 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate linkLine.drawLoadingBackground(canvas, AndroidUtilities.rectTmp, rad, rad, rad, alpha); } + if (drawPhotoImage && drawPhotoImageBeforeBefore) { + if (linkPreviewY != startY) { + linkPreviewY += AndroidUtilities.dp(2); + } + + final int photoWidth = width - AndroidUtilities.dp(17); + if (isSmallImage) { + photoImage.setImageX(linkX + width - photoImage.getImageWidth() - AndroidUtilities.dp(6)); + photoImage.setImageY(smallImageStartY); + } else { + photoImage.setImageX(linkX + (hasInvoicePreview ? -AndroidUtilities.dp(6.3f) : AndroidUtilities.dp(10))); + photoImage.setImageY(linkPreviewY); + } + if (transitionParams != null && transitionParams.animateSmallImage) { + if (!isSmallImage && documentAttachType != DOCUMENT_ATTACH_TYPE_DOCUMENT) { + photoImage.setImageWidth((int) AndroidUtilities.lerp(transitionParams.photoImageFromWidth, photoWidth, transitionParams.animateChangeProgress)); + } + photoImage.setImageX(AndroidUtilities.lerp(transitionParams.photoImageFromCenterX, photoImage.getCenterX(), transitionParams.animateChangeProgress) - photoImage.getImageWidth() / 2f); + photoImage.setImageY(AndroidUtilities.lerp(transitionParams.photoImageFromCenterY, photoImage.getCenterY(), transitionParams.animateChangeProgress) - photoImage.getImageHeight() / 2f); + } else if (!isSmallImage && documentAttachType != DOCUMENT_ATTACH_TYPE_ROUND && documentAttachType != DOCUMENT_ATTACH_TYPE_DOCUMENT) { + photoImage.setImageWidth(photoWidth); + } + if (!isSmallImage && drawImageButton) { + int size = AndroidUtilities.dp(48); + buttonX = this.buttonX = (int) (photoImage.getImageX() + (photoImage.getImageWidth() - size) / 2.0f); + buttonY = this.buttonY = (int) (photoImage.getImageY() + (photoImage.getImageHeight() - size) / 2.0f); + radialProgress.setProgressRect((int) buttonX, (int) buttonY, (int) buttonX + size, (int) buttonY + size); + } + if (isRoundVideo && MediaController.getInstance().isPlayingMessage(currentMessageObject) && MediaController.getInstance().isVideoDrawingReady() && canvas.isHardwareAccelerated()) { + imageDrawn = true; + drawTime = true; + } else { + if (delegate == null || delegate.getPinchToZoomHelper() == null || !delegate.getPinchToZoomHelper().isInOverlayModeFor(this)) { + if (alpha != 1f) { + photoImage.setAlpha(alpha); + if (allowDrawPhotoImage()) { + imageDrawn = photoImage.draw(canvas); + } else { + imageDrawn = true; + } + if (currentMessageObject.hasMediaSpoilers()) { + blurredPhotoImage.setAlpha(alpha); + drawBlurredPhoto(canvas); + blurredPhotoImage.setAlpha(1f); + } + photoImage.setAlpha(1f); + } else { + if (allowDrawPhotoImage()) { + imageDrawn = photoImage.draw(canvas); + } else { + imageDrawn = true; + } + if (currentMessageObject.hasMediaSpoilers()) { + drawBlurredPhoto(canvas); + } + } + } + } + linkPreviewY += photoImage.getImageHeight() + dp(6); + } + if (siteNameLayout != null) { if (titleLabelLayout != null) { linkPreviewY += AndroidUtilities.dp(1); @@ -13682,7 +13831,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } private boolean shouldDrawMenuDrawable() { - return (currentMessagesGroup == null || (currentPosition.flags & MessageObject.POSITION_FLAG_TOP) != 0) && !hasLinkPreview && (currentMessageObject == null || !currentMessageObject.isRepostPreview); + return (currentMessagesGroup == null || (currentPosition.flags & MessageObject.POSITION_FLAG_TOP) != 0) && !hasLinkPreview && (currentMessageObject == null || !currentMessageObject.isRepostPreview && !currentMessageObject.isSponsored()); } private void drawContact(Canvas canvas) { @@ -14092,6 +14241,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate translationLoadingDrawable.setAppearByGradient(true); if (translationLoadingPath == null) { translationLoadingPath = new LinkPath(true); + translationLoadingPath.setUseCornerPathImplementation(true); } translationLoadingDrawable.usePath(translationLoadingPath); translationLoadingDrawable.setRadiiDp(5); @@ -14109,6 +14259,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate block.textLayout.getSelectionPath(0, block.textLayout.getText().length(), translationLoadingPath); } } + translationLoadingPath.closeRects(); translationLoadingDrawable.updateBounds(); } @@ -14677,6 +14828,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else { autoDownload = DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject); } + if (currentMessageObject.isHiddenSensitive()) { + autoDownload = false; + } canStreamVideo = ( (currentMessageObject.isSent() || currentMessageObject.isForwarded()) && (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO || @@ -15095,6 +15249,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } private void didPressButton(boolean animated, boolean video) { + if (delegate != null && currentMessageObject.isSensitive() && currentMessageObject.hasMediaSpoilers() && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isMediaSpoilersRevealed) { + delegate.didPressRevealSensitiveContent(this); + return; + } if (currentMessageObject != null && !currentMessageObject.isAnyKindOfSticker()) { currentMessageObject.putInDownloadsStore = true; } @@ -15326,7 +15484,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate photoImage.setAllowStartAnimation(true); photoImage.startAnimation(); autoPlayingMedia = true; - } else if (!isSmallImage && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO && (currentPosition == null || (currentPosition.flags & MessageObject.POSITION_FLAG_LEFT) != 0 && (currentPosition.flags & MessageObject.POSITION_FLAG_RIGHT) != 0)) { + } else if (!isSmallImage && !currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO && (currentPosition == null || (currentPosition.flags & MessageObject.POSITION_FLAG_LEFT) != 0 && (currentPosition.flags & MessageObject.POSITION_FLAG_RIGHT) != 0)) { animatingNoSound = 2; photoImage.setImage(ImageLocation.getForDocument(documentAttach), ImageLoader.AUTOPLAY_FILTER, ImageLocation.getForObject(currentPhotoObject, photoParentObject), currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || currentPhotoObject != null && "s".equals(currentPhotoObject.type) ? currentPhotoFilterThumb : currentPhotoFilter, ImageLocation.getForObject(currentPhotoObjectThumb, photoParentObject), currentPhotoFilterThumb, currentPhotoObjectThumbStripped, documentAttach.size, null, currentMessageObject, 0); if (!PhotoViewer.isPlayingMessage(currentMessageObject)) { @@ -15338,7 +15496,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate autoPlayingMedia = true; } else if (documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { photoImage.setImage(ImageLocation.getForDocument(documentAttach), ImageLoader.AUTOPLAY_FILTER, ImageLocation.getForObject(currentPhotoObject, photoParentObject), currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || currentPhotoObject != null && "s".equals(currentPhotoObject.type) ? currentPhotoFilterThumb : currentPhotoFilter, ImageLocation.getForObject(currentPhotoObjectThumb, photoParentObject), currentPhotoFilterThumb, currentPhotoObjectThumbStripped, documentAttach.size, null, currentMessageObject, 0); - if (SharedConfig.isAutoplayGifs() && !currentMessageObject.isRepostPreview) { + if (!currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayGifs() && !currentMessageObject.isRepostPreview) { photoImage.setAllowStartAnimation(true); photoImage.startAnimation(); } else { @@ -15657,6 +15815,12 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else { signString = null; } + if (messageObject.getDialogId() < 0) { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-messageObject.getDialogId()); + if (chat != null && chat.signature_profiles) { + signString = null; + } + } String timeString; TLRPC.User author = null; if (currentMessageObject.isFromUser()) { @@ -15891,7 +16055,16 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentUser = new TLRPC.TL_user(); currentUser.first_name = fwd_from.from_name; } else { + long did = currentMessageObject.getDialogId(); long fromId = currentMessageObject.getFromChatId(); + TLRPC.Chat fromChat = null; + if (DialogObject.isChatDialog(fromId)) { + fromChat = messagesController.getChat(-fromId); + } + TLRPC.Chat chat = null; + if (DialogObject.isChatDialog(did)) { + chat = messagesController.getChat(-did); + } if (DialogObject.isEncryptedDialog(currentMessageObject.getDialogId())) { if (currentMessageObject.isOutOwner()) { currentUser = UserConfig.getInstance(currentAccount).getCurrentUser(); @@ -15901,10 +16074,12 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentUser = messagesController.getUser(echat.user_id); } } - } else if (DialogObject.isUserDialog(fromId) && !currentMessageObject.messageOwner.post) { + } else if (DialogObject.isUserDialog(fromId) && (!currentMessageObject.messageOwner.post || fromChat != null && fromChat.signature_profiles)) { currentUser = messagesController.getUser(fromId); + } else if (currentMessageObject.messageOwner.post && chat != null && !chat.signature_profiles) { + currentChat = chat; } else if (DialogObject.isChatDialog(fromId)) { - currentChat = messagesController.getChat(-fromId); + currentChat = fromChat; } else if (currentMessageObject.messageOwner.post) { currentChat = messagesController.getChat(currentMessageObject.messageOwner.peer_id.channel_id); } @@ -16482,6 +16657,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (mess.length() > 150) { mess = mess.subSequence(0, 150); } + if (!(mess instanceof SpannableStringBuilder)) { + mess = new SpannableStringBuilder(mess); + } mess = AndroidUtilities.replaceNewLines(mess); stringFinalText = Emoji.replaceEmoji(mess, textPaint.getFontMetricsInt(), AndroidUtilities.dp(14), true); if (messageObject.replyMessageObject.messageOwner != null) { @@ -16711,6 +16889,16 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (currentUser != null) { return UserObject.getUserName(currentUser); } else if (currentChat != null) { + if (currentMessageObject != null && currentChat.signature_profiles) { + long did = DialogObject.getPeerDialogId(currentMessageObject.messageOwner.from_id); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + if (user != null) return UserObject.getUserName(user); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + if (chat != null) return chat.title; + } + } return currentChat.title; } else if (currentMessageObject != null && currentMessageObject.isSponsored()) { return currentMessageObject.sponsoredTitle; @@ -16860,7 +17048,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate drawable.setBotButtonsBottom(currentMessageObject != null && currentMessageObject.hasInlineBotButtons()); } - float transitionYOffsetForDrawables; + public float transitionYOffsetForDrawables; public void setDrawableBoundsInner(Drawable drawable, int x, int y, int w, int h) { if (drawable != null) { @@ -18118,6 +18306,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate sideStartX -= offsetX; sideStartY -= offsetY; } + sideButtonVisible = true; if (drawSideButton == 3) { if (!(enterTransitionInProgress && !currentMessageObject.isVoice())) { drawCommentButton(canvas, 1f); @@ -18127,6 +18316,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate return; } rect.set(sideStartX, sideStartY, sideStartX + AndroidUtilities.dp(32), sideStartY + AndroidUtilities.dp(drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE ? 64 : 32)); + if (rect.right >= getMeasuredWidth()) { + sideButtonVisible = false; + return; + } applyServiceShaderMatrix(); if (drawSideButton == SIDE_BUTTON_SPONSORED_CLOSE && drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE && sideButtonPressed) { if (sideButtonPath1 == null) { @@ -19360,7 +19553,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } private boolean shouldDrawCaptionLayout() { - return currentMessageObject != null && !currentMessageObject.preview && (currentPosition == null || (currentMessagesGroup != null && currentMessagesGroup.isDocuments && (currentPosition.flags & MessageObject.POSITION_FLAG_BOTTOM) == 0)) && !transitionParams.animateBackgroundBoundsInner && !(enterTransitionInProgress && currentMessageObject.isVoice()); + return currentMessageObject != null && !currentMessageObject.preview && !currentMessageObject.isSponsored() && (currentPosition == null || (currentMessagesGroup != null && currentMessagesGroup.isDocuments && (currentPosition.flags & MessageObject.POSITION_FLAG_BOTTOM) == 0)) && !transitionParams.animateBackgroundBoundsInner && !(enterTransitionInProgress && currentMessageObject.isVoice()); } public void drawCaptionLayout(Canvas canvas, boolean selectionOnly, float alpha) { @@ -19383,7 +19576,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } } - public void drawReactionsLayout(Canvas canvas, float alpha) { + public void drawReactionsLayout(Canvas canvas, float alpha, Integer only) { if (isRoundVideo) { reactionsLayoutInBubble.drawServiceShaderBackground = 1f - getVideoTranscriptionProgress(); } @@ -19396,11 +19589,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate canvas.saveLayerAlpha(AndroidUtilities.rectTmp, (int) (0xFF * getAlpha()), Canvas.ALL_SAVE_FLAG); } if (reactionsLayoutInBubble.drawServiceShaderBackground > 0 || !transitionParams.animateBackgroundBoundsInner || currentPosition != null || isRoundVideo) { - reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, null); + reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, only); } else { canvas.save(); canvas.clipRect(0, 0, getMeasuredWidth(), getBackgroundDrawableBottom() + transitionParams.deltaBottom); - reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, null); + reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, only); canvas.restore(); } if (getAlpha() != 1f) { @@ -19922,8 +20115,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate path.rewind(); int start = spanned.getSpanStart(progressLoadingLink); int end = spanned.getSpanEnd(progressLoadingLink); + path.setUseCornerPathImplementation(true); path.setCurrentLayout(layout, start, yOffset); layout.getSelectionPath(start, end, path); + path.closeRects(); progressLoadingLinkCurrentDrawable.updateBounds(); return true; } @@ -21010,7 +21205,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else if (currentMessageObject.type == MessageObject.TYPE_VIDEO || currentMessageObject.type == MessageObject.TYPE_PHOTO || currentMessageObject.type == MessageObject.TYPE_EXTENDED_MEDIA_PREVIEW || documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO || documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { if (photoImage.getVisible() && !currentMessageObject.isRepostPreview) { - if (!currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isRepostPreview && !currentMessageObject.preview && !isSmallImage) { + if (!currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isSponsored() && !currentMessageObject.isRepostPreview && !currentMessageObject.preview && !isSmallImage) { if (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO) { int oldAlpha = ((BitmapDrawable) Theme.chat_msgMediaMenuDrawable).getPaint().getAlpha(); if (drawMediaCheckBox) { @@ -21063,6 +21258,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } loadingProgressAlpha *= (1f - isSmallImage()); + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + loadingProgressAlpha *= mediaSpoilerRevealProgress; + } if (loadingProgressAlpha > 0) { boolean bigRadius = false; @@ -21760,7 +21958,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if ( (!isRoundVideo || !hasLinkPreview) && (!currentMessageObject.needDrawBluredPreview() || !MediaController.getInstance().isPlayingMessage(currentMessageObject)) && - !(currentMessageObject.hasMediaSpoilers() && (!currentMessageObject.isMediaSpoilersRevealed || !currentMessageObject.revealingMediaSpoilers) && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && currentMessagesGroup == null && (radialProgress.getIcon() == MediaActionDrawable.ICON_PLAY || radialProgress.getIcon() == MediaActionDrawable.ICON_NONE)) + !(currentMessageObject.hasMediaSpoilers() && (!currentMessageObject.isMediaSpoilersRevealed || !currentMessageObject.revealingMediaSpoilers) && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && currentMessagesGroup == null && (radialProgress.getIcon() == MediaActionDrawable.ICON_PLAY || radialProgress.getIcon() == MediaActionDrawable.ICON_NONE)) && + !currentMessageObject.isHiddenSensitive() ) { if (currentMessageObject.needDrawBluredPreview()) { radialProgress.overrideCircleAlpha = 0f; @@ -21803,6 +22002,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } if ((drawVideoImageButton || animatingDrawVideoImageButton != 0) && !currentMessageObject.isRepostPreview && !currentMessageObject.sendPreview && photoImage.getVisible() && !isSmallImage) { float alpha = controlsAlpha; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + alpha *= mediaSpoilerRevealProgress; + } videoRadialProgress.setOverrideAlpha(alpha); videoRadialProgress.draw(canvas); } @@ -21940,6 +22142,52 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate Theme.chat_timePaint.setAlpha(255); } } + + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + if (sensitiveText == null) { + SpannableStringBuilder sensitiveTextString = new SpannableStringBuilder("x " + getString(R.string.MessageSensitiveContent)); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.filled_sensitive); + sensitiveTextString.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sensitiveText = new Text(sensitiveTextString, 14, AndroidUtilities.getTypeface(AndroidUtilities.TYPEFACE_ROBOTO_MEDIUM)); + } + Text text = sensitiveText; + if (photoImage.getImageWidth() < dp(13 + 13) + sensitiveText.getCurrentWidth()) { + if (sensitiveTextShort == null) { + SpannableStringBuilder sensitiveTextString = new SpannableStringBuilder("x " + getString(R.string.MessageSensitiveContentShort)); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.filled_sensitive); + sensitiveTextString.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sensitiveTextShort = new Text(sensitiveTextString, 14, AndroidUtilities.getTypeface(AndroidUtilities.TYPEFACE_ROBOTO_MEDIUM)); + } + text = sensitiveTextShort; + } + + final float cx = photoImage.getImageX() + photoImage.getImageWidth() / 2f; + final float cy = photoImage.getImageY() + photoImage.getImageHeight() / 2f; + final float w = text.getCurrentWidth() + dp(13 + 13); + final float h = dp(32), r = h / 2f; + float s = AndroidUtilities.lerp(.8f, 1f, 1f - mediaSpoilerRevealProgress); + AndroidUtilities.rectTmp.set(cx - w / 2f * s, cy - h / 2f * s, cx + w / 2f * s, cy + h / 2f * s); + + rectPath.reset(); + rectPath.addRoundRect(AndroidUtilities.rectTmp, r, r, Path.Direction.CW); + canvas.save(); + canvas.clipPath(rectPath); + float wasAlpha = blurredPhotoImage.getAlpha(); + blurredPhotoImage.setAlpha((1f - mediaSpoilerRevealProgress) * wasAlpha); + blurredPhotoImage.draw(canvas); + blurredPhotoImage.setAlpha(wasAlpha); + canvas.restore(); + + int oldAlpha = getThemedPaint(Theme.key_paint_chatTimeBackground).getAlpha(); + getThemedPaint(Theme.key_paint_chatTimeBackground).setAlpha((int) (oldAlpha * controlsAlpha * (1f - mediaSpoilerRevealProgress) * .35f)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, getThemedPaint(Theme.key_paint_chatTimeBackground)); + getThemedPaint(Theme.key_paint_chatTimeBackground).setAlpha(oldAlpha); + + canvas.save(); + canvas.scale(s, s, cx, cy); + text.draw(canvas, cx - w / 2f + dp(13), cy, 0xFFFFFFFF, 1f - mediaSpoilerRevealProgress); + canvas.restore(); + } } private Paint clipPaint; @@ -21962,6 +22210,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate drawPhotoBlurRect(canvas, radialProgress.getProgressRect()); } radialProgress.iconScale = 1f; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + radialProgress.iconScale *= mediaSpoilerRevealProgress; + } radialProgress.draw(canvas); if (withPeriod) { @@ -24257,7 +24508,12 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } public boolean needDrawAvatar() { - return isChat && !isSavedPreviewChat && (!isThreadPost || isForum) && currentMessageObject != null && !currentMessageObject.isOutOwner() && currentMessageObject.needDrawAvatar() || currentMessageObject != null && currentMessageObject.forceAvatar; + return ( + isChat && !isSavedPreviewChat && (!isThreadPost || isForum) && ( + currentMessageObject != null && !currentMessageObject.isOutOwner() && currentMessageObject.needDrawAvatar() + ) || + currentMessageObject != null && currentMessageObject.forceAvatar + ); } protected boolean drawPhotoImage(Canvas canvas) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java index a15aec004..a40e33cc3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java @@ -460,10 +460,10 @@ public class CheckBoxCell extends FrameLayout { linksTextView.setSingleLine(false); linksTextView.setEllipsize(null); if (currentType != TYPE_CHECK_BOX_URL) { - layoutParams.height = LayoutParams.WRAP_CONTENT; - layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP; - layoutParams.topMargin = dp(14); - layoutParams.bottomMargin = dp(10); +// layoutParams.height = LayoutParams.WRAP_CONTENT; +// layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP; +// layoutParams.topMargin = dp(14); +// layoutParams.bottomMargin = dp(10); } } else { linksTextView.setLines(1); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java index 219c3d651..b7f9d710b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java @@ -17,14 +17,15 @@ public class CreationTextCell extends FrameLayout { private SimpleTextView textView; private ImageView imageView; boolean divider; - public int startPadding = 70; + public int startPadding; public CreationTextCell(Context context) { - this(context, null); + this(context, 70, null); } - public CreationTextCell(Context context, Theme.ResourcesProvider resourcesProvider) { + public CreationTextCell(Context context, int padding, Theme.ResourcesProvider resourcesProvider) { super(context); + this.startPadding = padding; textView = new SimpleTextView(context); textView.setTextSize(16); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index 7a4274607..0468e4052 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -1292,7 +1292,7 @@ public class DialogCell extends BaseCell implements StoriesListPlaceProvider.Ava updateMessageThumbs(); messageNameString = AndroidUtilities.removeDiacritics(getMessageNameString()); messageString = formatTopicsNames(); - String restrictionReason = message != null ? MessagesController.getRestrictionReason(message.messageOwner.restriction_reason) : null; + String restrictionReason = message != null ? MessagesController.getInstance(message.currentAccount).getRestrictionReason(message.messageOwner.restriction_reason) : null; buttonString = message != null ? getMessageStringFormatted(messageFormatType, restrictionReason, messageNameString, true) : ""; if (applyName && buttonString.length() >= 0 && messageNameString != null) { SpannableStringBuilder spannableStringBuilder = SpannableStringBuilder.valueOf(buttonString); @@ -1398,7 +1398,7 @@ public class DialogCell extends BaseCell implements StoriesListPlaceProvider.Ava } } } else { - String restrictionReason = MessagesController.getRestrictionReason(message.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(message.currentAccount).getRestrictionReason(message.messageOwner.restriction_reason); TLRPC.User fromUser = null; TLRPC.Chat fromChat = null; long fromId = message.getFromChatId(); @@ -4194,9 +4194,40 @@ public class DialogCell extends BaseCell implements StoriesListPlaceProvider.Ava private PremiumGradient.PremiumGradientTools premiumGradient; private Drawable lockDrawable; + private int starBgColor; + private Drawable starFg, starBg; + public boolean drawAvatarOverlays(Canvas canvas) { - boolean needInvalidate = false; - float lockT = premiumBlockedT.set(premiumBlocked); + boolean needInvalidate = false, stars = false; + if (chat != null && (chat.flags2 & 2048) != 0) { + stars = true; + float bottom = avatarImage.getImageY2(); + float right = avatarImage.getImageX2(); + float checkProgress = checkBox != null && checkBox.isChecked() ? 1.0f - checkBox.getProgress() : 1.0f; + + if (starBg == null) { + starBg = getContext().getResources().getDrawable(R.drawable.star_small_outline).mutate(); + } + final int bg = Theme.getColor(Theme.key_windowBackgroundWhite); + if (starBgColor != bg) { + starBg.setColorFilter(new PorterDuffColorFilter(starBgColor = bg, PorterDuff.Mode.SRC_IN)); + } + if (starFg == null) { + starFg = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); + } + + final int sz = dp(19.33f); + AndroidUtilities.rectTmp2.set((int) right + dp(1.66f) - sz, (int) bottom - sz, (int) right + dp(1.66f), (int) bottom); + AndroidUtilities.rectTmp2.inset(-dp(1), -dp(1)); + starBg.setBounds(AndroidUtilities.rectTmp2); + starBg.setAlpha((int) (0xFF * checkProgress)); + starBg.draw(canvas); + AndroidUtilities.rectTmp2.set((int) right + dp(1.66f) - sz, (int) bottom - sz, (int) right + dp(1.66f), (int) bottom); + starFg.setBounds(AndroidUtilities.rectTmp2); + starFg.setAlpha((int) (0xFF * checkProgress)); + starFg.draw(canvas); + } + float lockT = premiumBlockedT.set(premiumBlocked && !stars); if (lockT > 0) { float top = avatarImage.getCenterY() + dp(18); float left = avatarImage.getCenterX() + dp(18); @@ -4224,7 +4255,7 @@ public class DialogCell extends BaseCell implements StoriesListPlaceProvider.Ava canvas.restore(); return false; } - if (isDialogCell && currentDialogFolderId == 0) { + if (isDialogCell && currentDialogFolderId == 0 && !stars) { showTtl = ttlPeriod > 0 && !isOnline() && !hasCall; if (rightFragmentOpenedProgress != 1f && (showTtl || ttlProgress > 0)) { if (timerDrawable == null || (timerDrawable.getTime() != ttlPeriod && ttlPeriod > 0)) { @@ -4866,7 +4897,7 @@ public class DialogCell extends BaseCell implements StoriesListPlaceProvider.Ava if (message == null) { return; } - String restrictionReason = MessagesController.getRestrictionReason(message.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(message.currentAccount).getRestrictionReason(message.messageOwner.restriction_reason); if (message != null && message.messageOwner != null && message.messageOwner.media instanceof TLRPC.TL_messageMediaPaidMedia) { thumbsCount = 0; hasVideoThumb = false; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java index d6acbcc23..e2ef26d32 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java @@ -18,6 +18,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -200,6 +201,19 @@ public class EditTextCell extends FrameLayout { updateLimitText(); } + public ImageView setLeftDrawable(Drawable drawable) { + ImageView imageView = new ImageView(getContext()); + imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); + imageView.setImageDrawable(drawable); + addView(imageView, LayoutHelper.createFrame(24, 24, Gravity.LEFT | Gravity.CENTER_VERTICAL, 18, 0, 0, 0)); + + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) editText.getLayoutParams(); + lp.leftMargin = dp(24); + editText.setLayoutParams(lp); + + return imageView; + } + public void setText(CharSequence text) { ignoreEditText = true; editText.setText(text); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java index 1e0ee2fbe..16dd9e3ba 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java @@ -29,7 +29,7 @@ import org.telegram.ui.Components.RecyclerListView; import java.util.List; -public class GraySectionCell extends FrameLayout { +public class GraySectionCell extends FrameLayout implements Theme.Colorable { private AnimatedEmojiSpan.TextViewEmojis textView; private AnimatedTextView rightTextView; @@ -69,6 +69,12 @@ public class GraySectionCell extends FrameLayout { ViewCompat.setAccessibilityHeading(this, true); } + public void updateColors() { + setBackgroundColor(getThemedColor(Theme.key_graySection)); + textView.setTextColor(getThemedColor(Theme.key_graySectionText)); + rightTextView.setTextColor(getThemedColor(Theme.key_graySectionText)); + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure( diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java index aebf3e876..ff94abcbd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java @@ -990,6 +990,10 @@ public class GroupMedia { position.photoWidth = 100; position.photoHeight = 100; } + if (position.photoWidth <= 0 || position.photoHeight <= 0) { + position.photoWidth = 50; + position.photoHeight = 50; + } position.aspectRatio = position.photoWidth / (float) position.photoHeight; if (position.aspectRatio > 1.2f) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java index 5e05adb71..5ab1bffc8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java @@ -112,7 +112,11 @@ public class HeaderCell extends FrameLayout { } public void setHeight(int value) { - textView.setMinHeight(AndroidUtilities.dp(height = value) - ((LayoutParams) textView.getLayoutParams()).topMargin); + int newMinHeight = AndroidUtilities.dp(height = value) - ((LayoutParams) textView.getLayoutParams()).topMargin; + if (textView.getMinHeight() != newMinHeight) { + textView.setMinHeight(newMinHeight); + requestLayout(); + } } public void setTopMargin(int topMargin) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java index a378cf5bd..05d673a64 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java @@ -58,7 +58,7 @@ import org.telegram.ui.Stories.StoriesUtilities; import java.util.Locale; -public class ProfileSearchCell extends BaseCell implements NotificationCenter.NotificationCenterDelegate { +public class ProfileSearchCell extends BaseCell implements NotificationCenter.NotificationCenterDelegate, Theme.Colorable { private CharSequence currentName; public ImageReceiver avatarImage; @@ -491,9 +491,11 @@ public class ProfileSearchCell extends BaseCell implements NotificationCenter.No } else if (user != null) { if (MessagesController.isSupportUser(user)) { statusString = LocaleController.getString("SupportStatus", R.string.SupportStatus); + } else if (user.bot && user.bot_active_users != 0) { + statusString = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ' '); } else if (user.bot) { statusString = LocaleController.getString("Bot", R.string.Bot); - } else if (user.id == 333000 || user.id == 777000) { + } else if (UserObject.isService(user.id)) { statusString = LocaleController.getString("ServiceNotifications", R.string.ServiceNotifications); } else { if (isOnline == null) { @@ -913,4 +915,11 @@ public class ProfileSearchCell extends BaseCell implements NotificationCenter.No } return super.onTouchEvent(event); } + + @Override + public void updateColors() { + if (nameLayout != null && getMeasuredWidth() > 0) { + buildLayout(); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java index d347e2192..903de526e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java @@ -286,7 +286,7 @@ public class SessionCell extends FrameLayout { } } - public static Drawable createDrawable(int sz, String platform) { + public static CombinedDrawable createDrawable(int sz, String platform) { TLRPC.TL_authorization auth = new TLRPC.TL_authorization(); auth.device_model = platform; auth.platform = platform; @@ -294,7 +294,7 @@ public class SessionCell extends FrameLayout { return createDrawable(sz, auth); } - public static Drawable createDrawable(int sz, TLRPC.TL_authorization session) { + public static CombinedDrawable createDrawable(int sz, TLRPC.TL_authorization session) { String platform = session.platform.toLowerCase(); if (platform.isEmpty()) { platform = session.system_version.toLowerCase(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java index 2062e002b..337525dec 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java @@ -182,7 +182,7 @@ public class SharedPhotoVideoCell extends FrameLayout { public void setMessageObject(MessageObject messageObject) { currentMessageObject = messageObject; imageView.getImageReceiver().setVisible(!PhotoViewer.isShowingImage(messageObject), false); - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { videoInfoContainer.setVisibility(INVISIBLE); imageView.setImageResource(R.drawable.photo_placeholder_in); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java index 5174d718f..c467a2769 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java @@ -55,6 +55,7 @@ import org.telegram.ui.Components.CheckBoxBase; import org.telegram.ui.Components.CombinedDrawable; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.Shaker; import org.telegram.ui.Components.Text; import org.telegram.ui.Components.spoilers.SpoilerEffect; import org.telegram.ui.Components.spoilers.SpoilerEffect2; @@ -67,8 +68,10 @@ import java.util.HashMap; public class SharedPhotoVideoCell2 extends FrameLayout { + public int imageReceiverColor = 0; public ImageReceiver imageReceiver = new ImageReceiver(); public ImageReceiver blurImageReceiver = new ImageReceiver(); + private Shaker shaker; public int storyId; int currentAccount; public boolean isSearchingHashtag; @@ -106,6 +109,7 @@ public class SharedPhotoVideoCell2 extends FrameLayout { private boolean gradientDrawableLoading; public boolean isStory; + public boolean isStoryUploading; public boolean isStoryPinned; static long lastUpdateDownloadSettingsTime; @@ -123,8 +127,21 @@ public class SharedPhotoVideoCell2 extends FrameLayout { public final static int STYLE_CACHE = 1; private int style = STYLE_SHARED_MEDIA; + private final Paint scrimPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final AnimatedFloat animatedProgress = new AnimatedFloat(this, 0, 200, CubicBezierInterpolator.EASE_OUT_QUINT); + CanvasButton canvasButton; + private boolean check2, reorder; + public void setCheck2() { + this.check2 = true; + } + public void setReorder(boolean value) { + this.reorder = value; + invalidate(); + } + public SharedPhotoVideoCell2(Context context, SharedResources sharedResources, int currentAccount) { super(context); this.sharedResources = sharedResources; @@ -141,6 +158,12 @@ public class SharedPhotoVideoCell2 extends FrameLayout { } blurImageReceiver.setImageBitmap(Utilities.stackBlurBitmapMax(imageReceiver.getBitmap())); } + if (set && !thumb && check2 && imageReceiver.getBitmap() != null) { + imageReceiverColor = AndroidUtilities.getDominantColor(imageReceiver.getBitmap()); + if (checkBoxBase != null) { + checkBoxBase.setBackgroundColor(Theme.blendOver(imageReceiverColor, Theme.multAlpha(Color.WHITE, .25f))); + } + } }); viewsText.setCallback(this); @@ -177,17 +200,43 @@ public class SharedPhotoVideoCell2 extends FrameLayout { } + private TLRPC.MessageMedia getStoryMedia(MessageObject messageObject) { + if (messageObject == null || messageObject.storyItem == null) return null; + return messageObject.storyItem.media; + } + + private boolean mediaEqual(TLRPC.MessageMedia a, TLRPC.MessageMedia b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (a.document != null) { + return b.document != null && b.document.id == a.document.id; + } + if (a.photo != null) { + return b.photo != null && b.photo.id == a.photo.id; + } + return false; + } + public void setMessageObject(MessageObject messageObject, int parentColumnsCount) { int oldParentColumnsCount = currentParentColumnsCount; currentParentColumnsCount = parentColumnsCount; if (currentMessageObject == null && messageObject == null) { return; } - if (currentMessageObject != null && messageObject != null && currentMessageObject.getId() == messageObject.getId() && oldParentColumnsCount == parentColumnsCount && (privacyType == 100) == isStoryPinned) { + if (currentMessageObject != null && + messageObject != null && + currentMessageObject.getId() == messageObject.getId() && + ((currentMessageObject != null ? currentMessageObject.uploadingStory : null) == (messageObject != null ? messageObject.uploadingStory : null)) && + ((currentMessageObject != null ? currentMessageObject.parentStoriesList : null) == (messageObject != null ? messageObject.parentStoriesList : null)) && + mediaEqual(getStoryMedia(currentMessageObject), getStoryMedia(messageObject)) && + oldParentColumnsCount == parentColumnsCount && + (privacyType == 100) == isStoryPinned + ) { return; } currentMessageObject = messageObject; isStory = currentMessageObject != null && currentMessageObject.isStory(); + isStoryUploading = currentMessageObject != null && currentMessageObject.uploadingStory != null; updateSpoilers2(); if (messageObject == null) { imageReceiver.onDetachedFromWindow(); @@ -210,7 +259,7 @@ public class SharedPhotoVideoCell2 extends FrameLayout { blurImageReceiver.onAttachedToWindow(); } } - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); String imageFilter; int stride; int width = (int) (AndroidUtilities.displaySize.x / parentColumnsCount / AndroidUtilities.density); @@ -238,6 +287,7 @@ public class SharedPhotoVideoCell2 extends FrameLayout { viewsText.setText("", false); } viewsAlpha.set(drawViews ? 1f : 0f, true); + Object parentObject = messageObject.parentStoriesList != null ? messageObject.storyItem : messageObject; if (!TextUtils.isEmpty(restrictionReason)) { showImageStub = true; } else if (messageObject.storyItem != null && messageObject.storyItem.media instanceof TLRPC.TL_messageMediaUnsupported) { @@ -245,6 +295,8 @@ public class SharedPhotoVideoCell2 extends FrameLayout { Drawable icon = getContext().getResources().getDrawable(R.drawable.msg_emoji_recent).mutate(); icon.setColorFilter(new PorterDuffColorFilter(0x40FFFFFF, PorterDuff.Mode.SRC_IN)); imageReceiver.setImageBitmap(new CombinedDrawable(new ColorDrawable(0xFF333333), icon)); + } else if (messageObject.uploadingStory != null && messageObject.uploadingStory.firstFramePath != null) { + imageReceiver.setImage(ImageLocation.getForPath(messageObject.uploadingStory.firstFramePath), imageFilter, null, null, parentObject, 0); } else if (messageObject.isVideo()) { showVideoLayout = true; if (parentColumnsCount != 9) { @@ -252,9 +304,9 @@ public class SharedPhotoVideoCell2 extends FrameLayout { } if (messageObject.mediaThumb != null) { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, parentObject, 0); } else { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, parentObject, 0); } } else { TLRPC.Document document = messageObject.getDocument(); @@ -265,9 +317,9 @@ public class SharedPhotoVideoCell2 extends FrameLayout { } if (thumb != null) { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, messageObject.strippedThumb, null, messageObject, 0); + imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, messageObject.strippedThumb, null, parentObject, 0); } else { - imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, ImageLocation.getForDocument(thumb, document), imageFilter + "_b", null, 0, null, messageObject, 0); + imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, ImageLocation.getForDocument(thumb, document), imageFilter + "_b", null, 0, null, parentObject, 0); } } else { showImageStub = true; @@ -277,9 +329,9 @@ public class SharedPhotoVideoCell2 extends FrameLayout { if (messageObject.mediaExists || canAutoDownload(messageObject) || isStory) { if (messageObject.mediaThumb != null) { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, parentObject, 0); } else { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, parentObject, 0); } } else { TLRPC.PhotoSize currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 50); @@ -288,17 +340,17 @@ public class SharedPhotoVideoCell2 extends FrameLayout { currentPhotoObjectThumb = null; } if (messageObject.strippedThumb != null) { - imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, null, null, messageObject.strippedThumb, currentPhotoObject != null ? currentPhotoObject.size : 0, null, messageObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); + imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, null, null, messageObject.strippedThumb, currentPhotoObject != null ? currentPhotoObject.size : 0, null, parentObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); } else { - imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), imageFilter + "_b", currentPhotoObject != null ? currentPhotoObject.size : 0, null, messageObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); + imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), imageFilter + "_b", currentPhotoObject != null ? currentPhotoObject.size : 0, null, parentObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); } } } else { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(null, null, null, null, messageObject.strippedThumb, 0, null, messageObject, 0); + imageReceiver.setImage(null, null, null, null, messageObject.strippedThumb, 0, null, parentObject, 0); } else { TLRPC.PhotoSize currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 50); - imageReceiver.setImage(null, null, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), "b", null, 0, null, messageObject, 0); + imageReceiver.setImage(null, null, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), "b", null, 0, null, parentObject, 0); } } } else { @@ -430,7 +482,7 @@ public class SharedPhotoVideoCell2 extends FrameLayout { canvas.save(); } - if (((checkBoxBase != null && checkBoxBase.isChecked()) || PhotoViewer.isShowingImage(currentMessageObject))) { + if (((checkBoxBase != null && checkBoxBase.isChecked()) || PhotoViewer.isShowingImage(currentMessageObject)) && !check2) { canvas.drawRect(leftpadding, padding, leftpadding + imageWidth - rightpadding, imageHeight, sharedResources.backgroundPaint); } @@ -454,7 +506,7 @@ public class SharedPhotoVideoCell2 extends FrameLayout { } imageReceiver.setImageCoords((imageWidth - w) / 2, 0, w, getHeight()); } else if (checkBoxProgress > 0) { - float offset = dp(10) * checkBoxProgress; + float offset = dp(check2 ? 7 : 10) * checkBoxProgress; imageReceiver.setImageCoords(leftpadding + offset, padding + offset, imageWidth - offset * 2, imageHeight - offset * 2); blurImageReceiver.setImageCoords(leftpadding + offset, padding + offset, imageWidth - offset * 2, imageHeight - offset * 2); } else { @@ -465,6 +517,16 @@ public class SharedPhotoVideoCell2 extends FrameLayout { imageReceiver.setImageCoords(leftpadding + padPlus, padding + padPlus, imageWidth, imageHeight); blurImageReceiver.setImageCoords(leftpadding + padPlus, padding + padPlus, imageWidth, imageHeight); } + if (check2) { + imageReceiver.setRoundRadius(AndroidUtilities.lerp(0, dp(8), checkBoxProgress)); + canvas.save(); + if (reorder) { + canvas.translate(imageReceiver.getCenterX(), imageReceiver.getCenterY()); + if (shaker == null) shaker = new Shaker(this); + shaker.concat(canvas, checkBoxProgress); + canvas.translate(-imageReceiver.getCenterX(), -imageReceiver.getCenterY()); + } + } if (!PhotoViewer.isShowingImage(currentMessageObject)) { imageReceiver.draw(canvas); if (currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && !currentMessageObject.isMediaSpoilersRevealedInSharedMedia) { @@ -498,6 +560,23 @@ public class SharedPhotoVideoCell2 extends FrameLayout { canvas.drawRect(imageReceiver.getDrawRegion(), sharedResources.highlightPaint); } } + if (isStoryUploading) { + scrimPaint.setColor(0x30000000); + canvas.drawRect(imageReceiver.getDrawRegion(), scrimPaint); + progressPaint.setStyle(Paint.Style.STROKE); + progressPaint.setColor(Color.WHITE); + progressPaint.setStrokeWidth(dp(3)); + progressPaint.setStrokeJoin(Paint.Join.ROUND); + progressPaint.setStrokeCap(Paint.Cap.ROUND); + final float r = dp(18); + AndroidUtilities.rectTmp.set( + imageReceiver.getCenterX() - r, imageReceiver.getCenterY() - r, + imageReceiver.getCenterX() + r, imageReceiver.getCenterY() + r + ); + final float a = (System.currentTimeMillis() % 1500L) / 1500f * 360f; + canvas.drawArc(AndroidUtilities.rectTmp, a, animatedProgress.set(AndroidUtilities.lerp(0.15f, 0.95f, currentMessageObject != null ? currentMessageObject.getProgress() : 0f)) * 360, false, progressPaint); + invalidate(); + } bounds.set(imageReceiver.getImageX(), imageReceiver.getImageY(), imageReceiver.getImageX2(), imageReceiver.getImageY2()); drawDuration(canvas, bounds, 1f); @@ -507,13 +586,25 @@ public class SharedPhotoVideoCell2 extends FrameLayout { } else { drawAuthor(canvas, bounds, 1f); } + if (check2) { + canvas.restore(); + } if (checkBoxBase != null && (style == STYLE_CACHE || checkBoxBase.getProgress() != 0)) { canvas.save(); + if (check2 && reorder) { + canvas.translate(imageReceiver.getCenterX(), imageReceiver.getCenterY()); + if (shaker == null) shaker = new Shaker(this); + shaker.concat(canvas, .5f * checkBoxProgress); + canvas.translate(-imageReceiver.getCenterX(), -imageReceiver.getCenterY()); + } float x, y; if (style == STYLE_CACHE) { x = imageWidth + dp(2) - dp(25) - dp(4); y = dp(4); + } else if (check2) { + x = imageWidth + dp(2) - dp(22 + 5 * checkBoxProgress); + y = dp(-2) + dp(5) * checkBoxProgress; } else { x = imageWidth + dp(2) - dp(25); y = 0; @@ -827,6 +918,9 @@ public class SharedPhotoVideoCell2 extends FrameLayout { if (checkBoxBase == null) { checkBoxBase = new CheckBoxBase(this, 21, null); checkBoxBase.setColor(-1, Theme.key_sharedMedia_photoPlaceholder, Theme.key_checkboxCheck); + if (check2 && imageReceiverColor != 0) { + checkBoxBase.setBackgroundColor(Theme.blendOver(imageReceiverColor, Theme.multAlpha(Color.WHITE, .25f))); + } checkBoxBase.setDrawUnchecked(false); checkBoxBase.setBackgroundType(1); checkBoxBase.setBounds(0, 0, dp(24), dp(24)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java index 155c76cdb..c9b0988fc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java @@ -378,7 +378,7 @@ public class TextCell extends FrameLayout { } } - public void setTextAndIcon(String text, Drawable drawable, boolean divider) { + public void setTextAndIcon(CharSequence text, Drawable drawable, boolean divider) { offsetFromImage = 71; imageLeft = 18; textView.setText(text); @@ -441,7 +441,8 @@ public class TextCell extends FrameLayout { offsetFromImage = getOffsetFromImage(false); textView.setText(text); textView.setRightDrawable(null); - valueTextView.setText(TextUtils.ellipsize(valueText = value, valueTextView.getPaint(), AndroidUtilities.displaySize.x / 2.5f, TextUtils.TruncateAt.END), animated); + valueText = value; + valueTextView.setText(valueText == null ? null : TextUtils.ellipsize(valueText, valueTextView.getPaint(), AndroidUtilities.displaySize.x / 2.5f, TextUtils.TruncateAt.END), animated); valueTextView.setVisibility(VISIBLE); valueSpoilersTextView.setVisibility(GONE); imageView.setVisibility(GONE); @@ -633,7 +634,7 @@ public class TextCell extends FrameLayout { } } - public void setTextAndValueDrawable(String text, Drawable drawable, boolean divider) { + public void setTextAndValueDrawable(CharSequence text, Drawable drawable, boolean divider) { imageLeft = 21; offsetFromImage = getOffsetFromImage(false); textView.setText(text); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java index f45fbd174..fd92d4ce3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java @@ -121,7 +121,9 @@ public class TextInfoPrivacyCell extends FrameLayout { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (fixedSize != 0) { + if (fixedSize == -1) { + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY)); + } else if (fixedSize != 0) { super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(fixedSize), MeasureSpec.EXACTLY)); } else { super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java index 3ddaa4d84..d256728f9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java @@ -2740,28 +2740,31 @@ public abstract class TextSelectionHelper textLen) { - endOffset = textLen; - } - if (position == startViewPosition && position == endViewPosition) { - if (startViewChildPosition == endViewChildPosition && startViewChildPosition == i) { - drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, endOffset, true, true, 0); - } else if (i == startViewChildPosition) { + int endOffset = endViewOffset; + int textLen = layoutBlock.getLayout().getText().length(); + + if (endOffset > textLen) { + endOffset = textLen; + } + if (position == startViewPosition && position == endViewPosition) { + if (startViewChildPosition == endViewChildPosition && startViewChildPosition == i) { + drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, endOffset, true, true, 0); + } else if (i == startViewChildPosition) { + drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, textLen, true, false, 0); + } else if (i == endViewChildPosition) { + drawSelection(canvas, layoutBlock.getLayout(), 0, endOffset, false, true, 0); + } else if (i > startViewChildPosition && i < endViewChildPosition) { + drawSelection(canvas, layoutBlock.getLayout(), 0, textLen, false, false, 0); + } + } else if (position == startViewPosition && startViewChildPosition == i) { drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, textLen, true, false, 0); - } else if (i == endViewChildPosition) { + } else if (position == endViewPosition && endViewChildPosition == i) { drawSelection(canvas, layoutBlock.getLayout(), 0, endOffset, false, true, 0); - } else if (i > startViewChildPosition && i < endViewChildPosition) { + } else if (position > startViewPosition && position < endViewPosition || (position == startViewPosition && i > startViewChildPosition) || (position == endViewPosition && i < endViewChildPosition)) { drawSelection(canvas, layoutBlock.getLayout(), 0, textLen, false, false, 0); } - } else if (position == startViewPosition && startViewChildPosition == i) { - drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, textLen, true, false, 0); - } else if (position == endViewPosition && endViewChildPosition == i) { - drawSelection(canvas, layoutBlock.getLayout(), 0, endOffset, false, true, 0); - } else if (position > startViewPosition && position < endViewPosition || (position == startViewPosition && i > startViewChildPosition) || (position == endViewPosition && i < endViewChildPosition)) { - drawSelection(canvas, layoutBlock.getLayout(), 0, textLen, false, false, 0); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java index a48abd0e2..f7e379cce 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java @@ -8,6 +8,8 @@ package org.telegram.ui.Cells; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.content.Context; import android.graphics.Canvas; import android.graphics.PorterDuff; @@ -134,9 +136,9 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica addButton.setTypeface(AndroidUtilities.bold()); addButton.setBackgroundDrawable(Theme.AdaptiveRipple.filledRectByKey(Theme.key_featuredStickers_addButton, 4)); addButton.setText(LocaleController.getString("Add", R.string.Add)); - addButton.setPadding(AndroidUtilities.dp(17), 0, AndroidUtilities.dp(17), 0); + addButton.setPadding(dp(17), 0, dp(17), 0); addView(addButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 28, Gravity.TOP | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), LocaleController.isRTL ? 14 : 0, 15, LocaleController.isRTL ? 0 : 14, 0)); - additionalPadding = (int) Math.ceil((addButton.getPaint().measureText(addButton.getText().toString()) + AndroidUtilities.dp(34 + 14)) / AndroidUtilities.density); + additionalPadding = (int) Math.ceil((addButton.getPaint().measureText(addButton.getText().toString()) + dp(34 + 14)) / AndroidUtilities.density); } else { additionalPadding = 0; } @@ -165,7 +167,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica return super.onTouchEvent(event); } }; - avatarImageView.setRoundRadius(AndroidUtilities.dp(24)); + avatarImageView.setRoundRadius(dp(24)); addView(avatarImageView, LayoutHelper.createFrame(46, 46, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 0 : 7 + padding, 6, LocaleController.isRTL ? 7 + padding : 0, 0)); setClipChildren(false); @@ -176,7 +178,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica nameTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); addView(nameTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 28 + (checkbox == 2 ? 18 : 0) + additionalPadding : (64 + padding), 10, LocaleController.isRTL ? (64 + padding) : 28 + (checkbox == 2 ? 18 : 0) + additionalPadding, 0)); - emojiStatus = new AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable(nameTextView, AndroidUtilities.dp(20)); + emojiStatus = new AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable(nameTextView, dp(20)); statusTextView = new SimpleTextView(context); statusTextView.setTextSize(15); @@ -219,22 +221,22 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica public void setAvatarPadding(int padding) { LayoutParams layoutParams = (LayoutParams) avatarImageView.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 7 + padding); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 7 + padding : 0); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 0 : 7 + padding); + layoutParams.rightMargin = dp(LocaleController.isRTL ? 7 + padding : 0); avatarImageView.setLayoutParams(layoutParams); layoutParams = (LayoutParams) nameTextView.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 28 + (checkBoxBig != null ? 18 : 0) : (64 + padding)); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? (64 + padding) : 28 + (checkBoxBig != null ? 18 : 0)); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 28 + (checkBoxBig != null ? 18 : 0) : (64 + padding)); + layoutParams.rightMargin = dp(LocaleController.isRTL ? (64 + padding) : 28 + (checkBoxBig != null ? 18 : 0)); layoutParams = (FrameLayout.LayoutParams) statusTextView.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 28 : (64 + padding)); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? (64 + padding) : 28); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 28 : (64 + padding)); + layoutParams.rightMargin = dp(LocaleController.isRTL ? (64 + padding) : 28); if (checkBox != null) { layoutParams = (FrameLayout.LayoutParams) checkBox.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 37 + padding); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 37 + padding : 0); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 0 : 37 + padding); + layoutParams.rightMargin = dp(LocaleController.isRTL ? 37 + padding : 0); } } @@ -254,12 +256,18 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica if (role != null) { CharSequence text = adminTextView.getText(); int size = (int) Math.ceil(adminTextView.getPaint().measureText(text, 0, text.length())); - nameTextView.setPadding(LocaleController.isRTL ? size + AndroidUtilities.dp(6) : 0, 0, !LocaleController.isRTL ? size + AndroidUtilities.dp(6) : 0, 0); + setRightPadding(size, true, false); } else { - nameTextView.setPadding(0, 0, 0, 0); + setRightPadding(0, true, false); } } + public void setRightPadding(int pad, boolean top, boolean bottom) { + if (pad > 0) pad += dp(6); + if (top) nameTextView.setPadding(LocaleController.isRTL ? pad : 0, 0, !LocaleController.isRTL ? pad : 0, 0); + if (bottom) statusTextView.setPadding(LocaleController.isRTL ? pad : 0, 0, !LocaleController.isRTL ? pad : 0, 0); + } + public CharSequence getName() { return nameTextView.getText(); } @@ -287,7 +295,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica currentStatus = status; try { if (name != null && nameTextView != null) { - name = Emoji.replaceEmoji(name, nameTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(18), false); + name = Emoji.replaceEmoji(name, nameTextView.getPaint().getFontMetricsInt(), dp(18), false); } } catch (Exception ignore) {} currentName = name; @@ -412,7 +420,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(58) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY)); + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(58) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY)); } public void setStatusColors(int color, int onlineColor) { @@ -480,7 +488,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica } if (currentObject instanceof String) { - ((LayoutParams) nameTextView.getLayoutParams()).topMargin = AndroidUtilities.dp(19); + ((LayoutParams) nameTextView.getLayoutParams()).topMargin = dp(19); String str = (String) currentObject; switch (str) { case "contacts": @@ -517,14 +525,14 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica avatarImageView.setImage(null, "50_50", avatarDrawable); currentStatus = ""; } else { - ((LayoutParams) nameTextView.getLayoutParams()).topMargin = AndroidUtilities.dp(10); + ((LayoutParams) nameTextView.getLayoutParams()).topMargin = dp(10); if (currentUser != null) { if (selfAsSavedMessages && UserObject.isUserSelf(currentUser)) { nameTextView.setText(LocaleController.getString("SavedMessages", R.string.SavedMessages), true); statusTextView.setText(null); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_SAVED); avatarImageView.setImage(null, "50_50", avatarDrawable, currentUser); - ((LayoutParams) nameTextView.getLayoutParams()).topMargin = AndroidUtilities.dp(19); + ((LayoutParams) nameTextView.getLayoutParams()).topMargin = dp(19); return; } avatarDrawable.setInfo(currentAccount, currentUser); @@ -556,7 +564,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica CharSequence name = lastName; if (name != null) { try { - name = Emoji.replaceEmoji(lastName, nameTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(18), false); + name = Emoji.replaceEmoji(lastName, nameTextView.getPaint().getFontMetricsInt(), dp(18), false); } catch (Exception ignore) {} } nameTextView.setText(name); @@ -573,11 +581,11 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica } else { if (premiumDrawable == null) { premiumDrawable = getContext().getResources().getDrawable(R.drawable.msg_premium_liststar).mutate(); - premiumDrawable = new AnimatedEmojiDrawable.WrapSizeDrawable(premiumDrawable, AndroidUtilities.dp(14), AndroidUtilities.dp(14)) { + premiumDrawable = new AnimatedEmojiDrawable.WrapSizeDrawable(premiumDrawable, dp(14), dp(14)) { @Override public void draw(@NonNull Canvas canvas) { canvas.save(); - canvas.translate(0, AndroidUtilities.dp(1)); + canvas.translate(0, dp(1)); super.draw(canvas); canvas.restore(); } @@ -586,7 +594,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica } nameTextView.setRightDrawable(premiumDrawable); } - nameTextView.setRightDrawableTopPadding(-AndroidUtilities.dp(0.5f)); + nameTextView.setRightDrawableTopPadding(-dp(0.5f)); } else { nameTextView.setRightDrawable(null); nameTextView.setRightDrawableTopPadding(0); @@ -627,7 +635,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica avatarImageView.setImageDrawable(avatarDrawable); } - avatarImageView.setRoundRadius(currentChat != null && currentChat.forum ? AndroidUtilities.dp(14) : AndroidUtilities.dp(24)); + avatarImageView.setRoundRadius(currentChat != null && currentChat.forum ? dp(14) : dp(24)); nameTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); if (adminTextView != null) { @@ -647,7 +655,7 @@ public class UserCell extends FrameLayout implements NotificationCenter.Notifica @Override protected void onDraw(Canvas canvas) { if (needDivider) { - canvas.drawLine(LocaleController.isRTL ? 0 : AndroidUtilities.dp(68), getMeasuredHeight() - 1, getMeasuredWidth() - (LocaleController.isRTL ? AndroidUtilities.dp(68) : 0), getMeasuredHeight() - 1, Theme.dividerPaint); + canvas.drawLine(LocaleController.isRTL ? 0 : dp(68), getMeasuredHeight() - 1, getMeasuredWidth() - (LocaleController.isRTL ? dp(68) : 0), getMeasuredHeight() - 1, Theme.dividerPaint); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java index 71933d9ae..5f9a472da 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java @@ -66,6 +66,7 @@ import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.ActionBar.AlertDialog; @@ -316,7 +317,7 @@ public class ChangeUsernameActivity extends BaseFragment { toggle.active = reqActive; req = toggle; } else { - TLRPC.TL_bots_toggleUsername toggle = new TLRPC.TL_bots_toggleUsername(); + TL_bots.toggleUsername toggle = new TL_bots.toggleUsername(); toggle.bot = MessagesController.getInstance(currentAccount).getInputUser(botId); toggle.username = reqUsername; toggle.active = reqActive; @@ -615,7 +616,7 @@ public class ChangeUsernameActivity extends BaseFragment { reorder.order = usernames; req = reorder; } else { - TLRPC.TL_bots_reorderUsernames reorder = new TLRPC.TL_bots_reorderUsernames(); + TL_bots.reorderUsernames reorder = new TL_bots.reorderUsernames(); reorder.bot = MessagesController.getInstance(currentAccount).getInputUser(botId); reorder.order = usernames; req = reorder; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java index 51fe11eba..8a324a92c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java @@ -544,7 +544,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio MediaDataController.getInstance(currentAccount).loadReplyMessagesForMessages(missingReplies, -currentChat.id, ChatActivity.MODE_DEFAULT, 0, () -> { saveScrollPosition(false); chatAdapter.notifyDataSetChanged(); - }, getClassGuid()); + }, getClassGuid(), null); } filterDeletedMessages(); @@ -1600,6 +1600,17 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio final ArrayList options = new ArrayList<>(); final ArrayList icons = new ArrayList<>(); + if (currentChat != null && message.currentEvent != null && message.currentEvent.action instanceof TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) { + TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite action = (TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) message.currentEvent.action; + if (action.invite != null) { + TLRPC.ChatFull chatFull = getMessagesController().getChatFull(currentChat.id); + InviteLinkBottomSheet sheet = new InviteLinkBottomSheet(getContext(), action.invite, chatFull, null, this, currentChat.id, false, ChatObject.isChannelAndNotMegaGroup(currentChat)); + sheet.setCanEdit(false); + sheet.show(); + return true; + } + } + if (message.currentEvent != null && (message.currentEvent.action instanceof TLRPC.TL_channelAdminLogEventActionDeleteMessage && message.currentEvent.user_id == getMessagesController().telegramAntispamUserId || message.currentEvent.action instanceof TLRPC.TL_channelAdminLogEventActionToggleAntiSpam)) { if (v instanceof ChatActionCell) { SpannableString arrow = new SpannableString(">"); @@ -3007,12 +3018,12 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio if (peerId > 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peerId); if (user != null) { - MessagesController.openChatOrProfileWith(user, null, ChannelAdminLogActivity.this, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, ChannelAdminLogActivity.this, 0, false); } } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-peerId); if (chat != null) { - MessagesController.openChatOrProfileWith(null, chat, ChannelAdminLogActivity.this, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(null, chat, ChannelAdminLogActivity.this, 0, false); } } } else if (url instanceof URLSpanNoUnderline) { @@ -3051,8 +3062,10 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio String lowerUrl = urlFinal.toLowerCase(); String lowerUrl2 = messageObject.messageOwner.media.webpage.url.toLowerCase(); if ((Browser.isTelegraphUrl(lowerUrl, false) || lowerUrl.contains("t.me/iv")) && (lowerUrl.contains(lowerUrl2) || lowerUrl2.contains(lowerUrl))) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChannelAdminLogActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChannelAdminLogActivity.this.createArticleViewer(false).open(messageObject); return; } } @@ -3185,8 +3198,10 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio presentFragment(chatActivity); } else if (type == 0) { if (messageObject.messageOwner.media != null && messageObject.messageOwner.media.webpage != null && messageObject.messageOwner.media.webpage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChannelAdminLogActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChannelAdminLogActivity.this.createArticleViewer(false).open(messageObject); } } else if (type == 5) { openVCard(getMessagesController().getUser(messageObject.messageOwner.media.user_id), messageObject.messageOwner.media.vcard, messageObject.messageOwner.media.first_name, messageObject.messageOwner.media.last_name); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java index edee6cdc2..5bceee41b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java @@ -193,8 +193,10 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement balanceInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(MessagesController.getInstance(currentAccount).channelRevenueWithdrawalEnabled ? R.string.MonetizationBalanceInfo : R.string.MonetizationBalanceInfoNotAvailable), -1, REPLACING_TAG_TYPE_LINK_NBSP, () -> { Browser.openUrl(getContext(), getString(R.string.MonetizationBalanceInfoLink)); }), true); - proceedsInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.MonetizationProceedsInfo), -1, REPLACING_TAG_TYPE_LINK_NBSP, () -> { - Browser.openUrl(getContext(), getString(R.string.MonetizationProceedsInfoLink)); + final int proceedsInfoText = starsRevenueAvailable && tonRevenueAvailable ? R.string.MonetizationProceedsStarsTONInfo : starsRevenueAvailable ? R.string.MonetizationProceedsStarsInfo : R.string.MonetizationProceedsTONInfo; + final int proceedsInfoLink = starsRevenueAvailable && tonRevenueAvailable ? R.string.MonetizationProceedsStarsTONInfoLink : starsRevenueAvailable ? R.string.MonetizationProceedsStarsInfoLink : R.string.MonetizationProceedsTONInfoLink; + proceedsInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(proceedsInfoText), -1, REPLACING_TAG_TYPE_LINK_NBSP, () -> { + Browser.openUrl(getContext(), getString(proceedsInfoLink)); }, resourcesProvider), true); starsBalanceInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.MonetizationStarsInfo), () -> { Browser.openUrl(getContext(), getString(R.string.MonetizationStarsInfoLink)); @@ -408,7 +410,7 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement }); starsAdsButton = new ButtonWithCounterView(context, resourcesProvider); - starsAdsButton.setEnabled(true); + starsAdsButton.setEnabled(false); starsAdsButton.setText(getString(R.string.MonetizationStarsAds), false); starsAdsButton.setOnClickListener(v -> { if (!v.isEnabled() || starsAdsButton.isLoading()) return; @@ -681,6 +683,9 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement starsBalanceButton.setEnabled(starsBalanceEditTextValue > 0); } + if (starsAdsButton != null) { + starsAdsButton.setEnabled(amount > 0); + } starsBalanceBlockedUntil = blockedUntil; AndroidUtilities.cancelRunOnUIThread(setStarsBalanceButtonText); @@ -696,32 +701,43 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement private void loadStarsStats() { if (!starsRevenueAvailable) return; - TLRPC.TL_payments_getStarsRevenueStats req2 = new TLRPC.TL_payments_getStarsRevenueStats(); - req2.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); - req2.dark = Theme.isCurrentThemeDark(); - ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err) -> AndroidUtilities.runOnUIThread(() -> { - if (res2 instanceof TLRPC.TL_payments_starsRevenueStats) { - TLRPC.TL_payments_starsRevenueStats stats = (TLRPC.TL_payments_starsRevenueStats) res2; - stars_rate = stats.usd_rate; - starsRevenueChart = StatisticActivity.createViewData(stats.revenue_graph, getString(R.string.MonetizationGraphStarsRevenue), 2); - if (starsRevenueChart != null && starsRevenueChart.chartData != null && starsRevenueChart.chartData.lines != null && !starsRevenueChart.chartData.lines.isEmpty() && starsRevenueChart.chartData.lines.get(0) != null) { - starsRevenueChart.chartData.lines.get(0).colorKey = Theme.key_statisticChartLine_golden; - starsRevenueChart.chartData.yRate = (float) (1.0 / stars_rate / 100.0); + TLRPC.TL_payments_starsRevenueStats cachedStats = BotStarsController.getInstance(currentAccount).getRevenueStats(dialogId); + if (cachedStats != null) { + AndroidUtilities.runOnUIThread(() -> { + applyStarsStats(cachedStats); + }); + } else { + TLRPC.TL_payments_getStarsRevenueStats req2 = new TLRPC.TL_payments_getStarsRevenueStats(); + req2.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); + req2.dark = Theme.isCurrentThemeDark(); + ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res2 instanceof TLRPC.TL_payments_starsRevenueStats) { + TLRPC.TL_payments_starsRevenueStats stats = (TLRPC.TL_payments_starsRevenueStats) res2; + applyStarsStats(stats); } - setupBalances(stats.status); + })); + } + } - if (!tonRevenueAvailable) { - progress.animate().alpha(0).setDuration(380).setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT).withEndAction(() -> { - progress.setVisibility(View.GONE); - }).start(); - } + private void applyStarsStats(TLRPC.TL_payments_starsRevenueStats stats) { + stars_rate = stats.usd_rate; + starsRevenueChart = StatisticActivity.createViewData(stats.revenue_graph, getString(R.string.MonetizationGraphStarsRevenue), 2); + if (starsRevenueChart != null && starsRevenueChart.chartData != null && starsRevenueChart.chartData.lines != null && !starsRevenueChart.chartData.lines.isEmpty() && starsRevenueChart.chartData.lines.get(0) != null) { + starsRevenueChart.chartData.lines.get(0).colorKey = Theme.key_statisticChartLine_golden; + starsRevenueChart.chartData.yRate = (float) (1.0 / stars_rate / 100.0); + } + setupBalances(stats.status); - if (listView != null) { - listView.adapter.update(true); - } - } - })); + if (!tonRevenueAvailable && progress != null) { + progress.animate().alpha(0).setDuration(380).setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT).withEndAction(() -> { + progress.setVisibility(View.GONE); + }).start(); + } + + if (listView != null) { + listView.adapter.update(true); + } } private void initLevel() { @@ -826,7 +842,9 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement lifetimeValue.amount2 = (long) (lifetimeValue.crypto_amount2 * stars_rate * 100.0); lifetimeValue.currency = "USD"; proceedsAvailable = true; - starsBalanceButton.setVisibility(balances.available_balance > 0 || BuildVars.DEBUG_PRIVATE_VERSION ? View.VISIBLE : View.GONE); + if (starsBalanceButton != null) { + starsBalanceButton.setVisibility(balances.available_balance > 0 || BuildVars.DEBUG_PRIVATE_VERSION ? View.VISIBLE : View.GONE); + } if (listView != null && listView.adapter != null) { listView.adapter.update(true); @@ -859,7 +877,7 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement } private void checkLearnSheet() { - if (isAttachedToWindow() && proceedsAvailable && MessagesController.getGlobalMainSettings().getBoolean("monetizationadshint", true)) { + if (isAttachedToWindow() && tonRevenueAvailable && proceedsAvailable && MessagesController.getGlobalMainSettings().getBoolean("monetizationadshint", true)) { showLearnSheet(); MessagesController.getGlobalMainSettings().edit().putBoolean("monetizationadshint", false).apply(); } @@ -1727,11 +1745,14 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement } } - private void updateLists(boolean animated) { + private void updateLists(boolean animated, boolean checkMore) { for (int i = 0; i < viewPager.getViewPages().length; ++i) { View page = viewPager.getViewPages()[i]; if (page instanceof Page) { ((Page) page).listView.adapter.update(animated); + if (checkMore) { + ((Page) page).checkMore(); + } } } } @@ -1765,7 +1786,7 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement tonTransactionsTotalCount = r.count; tonTransactions.addAll(r.transactions); - updateLists(true); + updateLists(true, true); loadingTransactions[type] = false; } else if (err != null) { BulletinFactory.showError(err); @@ -1791,7 +1812,7 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement MessagesController.getInstance(currentAccount).putChats(r.chats, false); starsTransactions.addAll(r.history); starsLastOffset = r.next_offset; - updateLists(true); + updateLists(true, true); loadingTransactions[type] = false; } else if (err != null) { BulletinFactory.showError(err); @@ -1829,18 +1850,27 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - scheduleLoadTransactions(); + if (!Page.this.listView.canScrollVertically(1) || isLoadingVisible()) { + loadMore.run(); + } } }); } - private void scheduleLoadTransactions() { - if (!Page.this.listView.canScrollVertically(1)) { - AndroidUtilities.cancelRunOnUIThread(loadMore); - AndroidUtilities.runOnUIThread(loadMore, 250); + public void checkMore() { + if (!Page.this.listView.canScrollVertically(1) || isLoadingVisible()) { + loadMore.run(); } } + public boolean isLoadingVisible() { + for (int i = 0; i < listView.getChildCount(); ++i) { + if (listView.getChildAt(i) instanceof FlickerLoadingView) + return true; + } + return false; + } + @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); @@ -1970,6 +2000,12 @@ public class ChannelMonetizationLayout extends SizeNotifierFrameLayout implement if (innerListView != null && consumed[1] > 0) { innerListView.scrollBy(0, consumed[1]); } + } else if (dy > 0) { + RecyclerListView innerListView = transactionsLayout.getCurrentListView(); + if (listView.getHeight() - bottom >= 0 && innerListView != null && !innerListView.canScrollVertically(1)) { + consumed[1] = dy; + listView.stopScroll(); + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index e85be56d4..292d743f6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -75,6 +75,7 @@ import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; import android.text.style.URLSpan; +import android.util.Log; import android.util.Pair; import android.util.Property; import android.util.SparseArray; @@ -168,6 +169,7 @@ import org.telegram.messenger.SecretChatHelper; import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.SvgHelper; +import org.telegram.messenger.Timer; import org.telegram.messenger.TranslateController; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; @@ -180,6 +182,7 @@ import org.telegram.messenger.voip.VoIPService; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarLayout; @@ -240,8 +243,10 @@ import org.telegram.ui.Components.spoilers.SpoilerEffect; import org.telegram.ui.Components.voip.CellFlickerDrawable; import org.telegram.ui.Components.voip.VoIPHelper; import org.telegram.ui.Delegates.ChatActivityMemberRequestsDelegate; +import org.telegram.ui.Stars.StarReactionsOverlay; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stars.StarsReactionsSheet; import org.telegram.ui.Stories.StoriesListPlaceProvider; import org.telegram.ui.Stories.StoriesUtilities; import org.telegram.ui.Stories.recorder.HintView2; @@ -251,6 +256,7 @@ import org.telegram.ui.Stories.recorder.StoryRecorder; import org.telegram.ui.bots.BotCommandsMenuView; import org.telegram.ui.bots.BotWebViewAttachedSheet; import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -544,7 +550,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private int pinBullerinTag; protected boolean openKeyboardOnAttachMenuClose; private FlagSecureReason flagSecure; - private boolean isFullyVisible; + public boolean isFullyVisible; private MessageObject hintMessageObject; private int hintMessageType; @@ -838,7 +844,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not public ProfileChannelCell.ChannelMessageFetcher profileChannelMessageFetcher; public ProfileBirthdayEffect.BirthdayEffectFetcher birthdayAssetsFetcher; - private LongSparseArray botInfo = new LongSparseArray<>(); + private LongSparseArray botInfo = new LongSparseArray<>(); private String botUser; private long inlineReturn; private String voiceChatHash; @@ -1106,7 +1112,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private PinchToZoomHelper pinchToZoomHelper; public EmojiAnimationsOverlay emojiAnimationsOverlay; - public float drawingChatLisViewYoffset; + public float drawingChatListViewYoffset; public int blurredViewTopOffset; public int blurredViewBottomOffset; public ChatMessageSharedResources sharedResources; @@ -1124,6 +1130,17 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return new ChatActivity(bundle); } + public static ChatActivity of(long dialogId, int messageId) { + Bundle bundle = new Bundle(); + if (dialogId >= 0) { + bundle.putLong("user_id", dialogId); + } else { + bundle.putLong("chat_id", -dialogId); + } + bundle.putInt("message_id", messageId); + return new ChatActivity(bundle); + } + public void deleteHistory(int dateSelectedStart, int dateSelectedEnd, boolean forAll) { chatAdapter.frozenMessages.clear(); for (int i = 0; i < messages.size(); i++) { @@ -1685,7 +1702,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (!available) { return; } - selectReaction(primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reactionString), true, false, false, false); + selectReaction(cell, primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reactionString), true, false, false, false); } else { TLRPC.TL_availableReaction reaction = getMediaDataController().getReactionsMap().get(reactionString); if (reaction == null || cell.getMessageObject().isSponsored()) { @@ -1698,7 +1715,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (!available) { return; } - selectReaction(primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reaction), true, false, false, false); + selectReaction(cell, primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reaction), true, false, false, false); } } }; @@ -2523,6 +2540,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not getNotificationCenter().addObserver(this, NotificationCenter.didUpdateMessagesViews); getNotificationCenter().addObserver(this, NotificationCenter.didUpdatePollResults); getNotificationCenter().addObserver(this, NotificationCenter.availableEffectsUpdate); + getNotificationCenter().addObserver(this, NotificationCenter.starReactionAnonymousUpdate); if (currentEncryptedChat != null) { getNotificationCenter().addObserver(this, NotificationCenter.didVerifyMessagesStickers); } @@ -2580,6 +2598,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not getNotificationCenter().addObserver(this, NotificationCenter.audioRecordTooShort); getNotificationCenter().addObserver(this, NotificationCenter.didUpdateReactions); getNotificationCenter().addObserver(this, NotificationCenter.savedReactionTagsUpdate); + getNotificationCenter().addObserver(this, NotificationCenter.updateAllMessages); getNotificationCenter().addObserver(this, NotificationCenter.didUpdateExtendedMedia); getNotificationCenter().addObserver(this, NotificationCenter.videoLoadingStateChanged); getNotificationCenter().addObserver(this, NotificationCenter.scheduledMessagesUpdated); @@ -2804,6 +2823,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } firstMessagesLoaded = true; +// Runnable load = () -> { waitingForLoad.add(lastLoadIndex); if (chatMode == MODE_SEARCH) { HashtagSearchController.getInstance(currentAccount).searchHashtag(searchingHashtag, classGuid, searchType, lastLoadIndex++); @@ -2828,6 +2848,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not waitingForLoad.add(lastLoadIndex); getMessagesController().loadMessages(dialog_id, mergeDialogId, false, 1, 0, 0, true, 0, classGuid, 2, 0, MODE_SCHEDULED, chatMode == MODE_SAVED ? 0 : threadMessageId, replyMaxReadId, lastLoadIndex++, isTopic); } +// }; +// getMessagesController().checkSensitive(this, dialog_id, load, this::finishFragment); } private void fillInviterId(boolean load) { @@ -2994,6 +3016,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not getNotificationCenter().removeObserver(this, NotificationCenter.didUpdatePollResults); getNotificationCenter().removeObserver(this, NotificationCenter.didUpdateReactions); getNotificationCenter().removeObserver(this, NotificationCenter.savedReactionTagsUpdate); + getNotificationCenter().removeObserver(this, NotificationCenter.updateAllMessages); getNotificationCenter().removeObserver(this, NotificationCenter.didUpdateExtendedMedia); getNotificationCenter().removeObserver(this, NotificationCenter.chatOnlineCountDidLoad); getNotificationCenter().removeObserver(this, NotificationCenter.videoLoadingStateChanged); @@ -3017,6 +3040,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not getNotificationCenter().removeObserver(this, NotificationCenter.quickRepliesDeleted); getNotificationCenter().removeObserver(this, NotificationCenter.quickRepliesUpdated); getNotificationCenter().removeObserver(this, NotificationCenter.availableEffectsUpdate); + getNotificationCenter().removeObserver(this, NotificationCenter.starReactionAnonymousUpdate); getNotificationCenter().removeObserver(this, NotificationCenter.factCheckLoaded); if (chatMode == MODE_EDIT_BUSINESS_LINK) { getNotificationCenter().removeObserver(this, NotificationCenter.businessLinksUpdated); @@ -3084,6 +3108,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not birthdayAssetsFetcher.detach(true); birthdayAssetsFetcher = null; } + if (starReactionsOverlay != null) { + starReactionsOverlay.setMessageCell(null); + AndroidUtilities.removeFromParent(starReactionsOverlay); + starReactionsOverlay = null; + } } private static class ChatActivityTextSelectionHelper extends TextSelectionHelper.ChatListTextSelectionHelper { @@ -3195,11 +3224,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not @Override public View createView(Context context) { + Timer t = Timer.create("ChatActivity.createView"); if (textSelectionHelper == null) { if (textSelectionHelpersCache != null && !textSelectionHelpersCache.isEmpty()) { textSelectionHelper = textSelectionHelpersCache.remove(0); } else { + Timer.Task t1 = Timer.start(t, "new ChatActivityTextSelectionHelper"); textSelectionHelper = new ChatActivityTextSelectionHelper(); + Timer.done(t1); } textSelectionHelper.setChatActivity(this); } @@ -3223,9 +3255,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } if (chatMessagesCache.size() < 10) { int n = 15 - chatMessagesCache.size(); + Timer.Task t2 = Timer.start(t, "create ChatMessageCell n=" + n); for (int a = 0; a < n; a++) { chatMessagesCache.add(new ChatMessageCell(context, currentAccount,true, sharedResources, themeDelegate)); } + Timer.done(t2); } for (int a = 1; a >= 0; a--) { selectedMessagesIds[a].clear(); @@ -3940,19 +3974,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (currentUser != null && currentUser.bot) { headerItem.lazilyAddSubItem(bot_settings, R.drawable.msg_settings_old, LocaleController.getString("BotSettings", R.string.BotSettings)); addedSettings = true; + headerItem.lazilyAddSubItem(bot_help, R.drawable.msg_help, LocaleController.getString("BotHelp", R.string.BotHelp)); headerItem.lazilyAddSubItem(delete_chat, R.drawable.msg_block2, LocaleController.getString(R.string.DeleteAndBlock)).setColors(getThemedColor(Theme.key_text_RedRegular), getThemedColor(Theme.key_text_RedRegular)); + updateBotButtons(); } else { headerItem.lazilyAddSubItem(delete_chat, R.drawable.msg_delete, LocaleController.getString("DeleteChatUser", R.string.DeleteChatUser)); } } } - if (currentUser != null && currentEncryptedChat == null && currentUser.bot) { - if (!addedSettings) { - headerItem.lazilyAddSubItem(bot_settings, R.drawable.msg_settings_old, LocaleController.getString("BotSettings", R.string.BotSettings)); - } - headerItem.lazilyAddSubItem(bot_help, R.drawable.msg_help, LocaleController.getString("BotHelp", R.string.BotHelp)); - updateBotButtons(); - } } else if (chatMode == MODE_EDIT_BUSINESS_LINK) { headerItem = menu.addItem(chat_menu_options, R.drawable.ic_ab_other, themeDelegate); headerItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); @@ -4912,7 +4941,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (pullingDownAnimateProgress != 0) { transitionOffset = (chatListView.getMeasuredHeight() - pullingDownOffset) * pullingDownAnimateProgress; } - canvas.translate(0, drawingChatLisViewYoffset = -pullingDownOffset - transitionOffset); + canvas.translate(0, drawingChatListViewYoffset = -pullingDownOffset - transitionOffset); drawChatBackgroundElements(canvas); super.dispatchDraw(canvas); drawChatForegroundElements(canvas); @@ -5025,7 +5054,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (!selectionOnly && cell.getTransitionParams().wasDraw) { canvas.translate(canvasOffsetX, canvasOffsetY); cell.setInvalidatesParent(true); - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); cell.setInvalidatesParent(false); } canvas.restore(); @@ -6214,6 +6243,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (chatActivityEnterView != null) { chatActivityEnterView.hideHints(); } + if (starReactionsOverlay != null) { + starReactionsOverlay.invalidate(); + } } }); @@ -8400,6 +8432,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not updateSearchListEmptyView(); } + if (t != null) { + t.finish(); + } + return fragmentView; } @@ -8762,6 +8798,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not msg.stableId = lastStableId++; } msg.isOutOwnerCached = null; + Log.i("lolkek", "msg " + msg.getId() + " isOutOwnerCached is reset (2)"); if (msg.messageOwner != null) { msg.messageOwner.out = true; } @@ -8830,6 +8867,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (filteredMessagesDict.containsKey(msg.getId())) { continue; } + Log.i("lolkek", "msg " + msg.getId() + " isOutOwnerCached is reset (3)"); msg.isOutOwnerCached = null; if (msg.messageOwner != null) { msg.messageOwner.out = true; @@ -9419,7 +9457,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (messageObject == null) continue; } if (messageObject.hasReaction(visibleReaction) == remove) { - selectReaction(messageObject, null, null, 0, 0, visibleReaction, false, false, false, true); + selectReaction(findMessageCell(messageObject.getId(), false), messageObject, null, null, 0, 0, visibleReaction, false, false, false, true); if (!remove) { messagesCount++; } @@ -11538,7 +11576,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not SendMessagesHelper.prepareSendingBotContextResult(this, getAccountInstance(), result, params, dialog_id, replyingMessageObject, getThreadMessage(), null, replyingQuote, notify, scheduleDate, quickReplyShortcut, getQuickReplyId()); chatActivityEnterView.setFieldText(""); hideFieldPanel(false); - getMediaDataController().increaseInlineRaiting(uid); + getMediaDataController().increaseInlineRating(uid); } private void checkBotCommands() { @@ -11559,7 +11597,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } - private MessageObject.GroupedMessages getValidGroupedMessage(MessageObject message) { + public MessageObject.GroupedMessages getValidGroupedMessage(MessageObject message) { MessageObject.GroupedMessages groupedMessages = null; if (message.getGroupId() != 0) { groupedMessages = groupedMessagesMap.get(message.getGroupId()); @@ -11624,7 +11662,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private boolean approved; public void processInlineBotWebView(TLRPC.TL_inlineBotWebView object) { final Runnable open = () -> { - final BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, currentUser != null ? currentUser.id : currentChat.id, mentionContainer.getAdapter().getFoundContextBot().id, object.text, object.url, BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, null, null, BotWebViewSheet.FLAG_FROM_INLINE_SWITCH, false); + final WebViewRequestProps props = WebViewRequestProps.of(currentAccount, currentUser != null ? currentUser.id : currentChat.id, mentionContainer.getAdapter().getFoundContextBot().id, object.text, object.url, BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, null, null, BotWebViewSheet.FLAG_FROM_INLINE_SWITCH, false); if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { return; } @@ -11651,7 +11689,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not WebAppDisclaimerAlert.show(getContext(), ignored -> { approved = true; open.run(); - }, null); + }, null, null); } } @@ -12734,6 +12772,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else { MediaController.getInstance().setTextureView(videoTextureView, null, null, false); } + if (starReactionsOverlay != null) { + starReactionsOverlay.setMessageCell(null); + AndroidUtilities.removeFromParent(starReactionsOverlay); + starReactionsOverlay = null; + } super.onRemoveFromParent(); } @@ -13345,7 +13388,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } AndroidUtilities.runOnUIThread(() -> { done.run(false, null); }); - }, classGuid, false); + }, classGuid, false, null); } catch (Exception ignore) {} }); } else { @@ -13754,7 +13797,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not messagePreviewParams = null; } fieldPanelShown = 2; - String restrictionReason = MessagesController.getRestrictionReason(messageObjectToReply.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObjectToReply.messageOwner.restriction_reason); chatActivityEnterView.setForceShowSendButton(false, false); CharSequence name = null; if (messageObjectToReply.isForwarded() && messageObjectToReply.getDialogId() != dialog_id) { @@ -14102,7 +14145,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not TLRPC.PhotoSize photoSize = null; TLRPC.PhotoSize thumbPhotoSize = null; TLObject photoSizeObject = null; - if (thumbMediaMessageObject != null && TextUtils.isEmpty(MessagesController.getRestrictionReason(thumbMediaMessageObject.messageOwner.restriction_reason))) { + if (thumbMediaMessageObject != null && TextUtils.isEmpty(MessagesController.getInstance(currentAccount).getRestrictionReason(thumbMediaMessageObject.messageOwner.restriction_reason))) { photoSize = FileLoader.getClosestPhotoSizeWithSize(thumbMediaMessageObject.photoThumbs2, 320); thumbPhotoSize = FileLoader.getClosestPhotoSizeWithSize(thumbMediaMessageObject.photoThumbs2, AndroidUtilities.dp(40)); photoSizeObject = thumbMediaMessageObject.photoThumbsObject2; @@ -14645,7 +14688,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not keyboardOffset = chatActivityEnterView.getEmojiPadding(); } - final boolean visibleToBeRead = currentChat == null || !ChatObject.isChannelAndNotMegaGroup(currentChat) || view.getMeasuredHeight() > 0 && top + view.getMeasuredHeight() * (messageCell == null || messageCell.getCurrentPosition() == null ? .80f : 1f) < clipBottomFinal; + final boolean visibleToBeRead = !BaseFragment.hasSheets(this) && (currentChat == null || !ChatObject.isChannelAndNotMegaGroup(currentChat) || view.getMeasuredHeight() > 0 && top + view.getMeasuredHeight() * (messageCell == null || messageCell.getCurrentPosition() == null ? .80f : 1f) < clipBottomFinal); final float visibleTop = getServiceTop(view); final int visibleBackgroundHeight = getServiceHeight(view); @@ -16183,7 +16226,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (type == 3) { final boolean selectionOnly = cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0; if (!selectionOnly) { - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); } } else if (type == 4) { final boolean selectionOnly = cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0; @@ -17376,6 +17419,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not viewAsTopics.setVisibility(currentChat != null && currentChat.forum ? View.VISIBLE : View.GONE); } if (avatarContainer != null) { + avatarContainer.setStars(currentChat != null && (currentChat.flags2 & 2048) != 0, animated); if (currentEncryptedChat != null) { avatarContainer.setTime(currentEncryptedChat.ttl, animated); } else if (userInfo != null) { @@ -17994,7 +18038,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (message != null && message.isAnyGift()) { return; } - if (type < 2 || type == 20 || type == MessageObject.TYPE_SUGGEST_PHOTO || message != null && message.type == MessageObject.TYPE_JOINED_CHANNEL || (message != null && message.isWallpaperAction())) { + if (type < 2 || type == 20 || type == MessageObject.TYPE_SUGGEST_PHOTO || message != null && message.type == MessageObject.TYPE_JOINED_CHANNEL || message != null && message.type == MessageObject.TYPE_GIFT_STARS || (message != null && message.isWallpaperAction())) { return; } addToSelectedMessages(message, outside); @@ -18131,7 +18175,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not boolean hasSettings = false; if (botInfo.size() != 0) { for (int b = 0; b < botInfo.size(); b++) { - TLRPC.BotInfo info = botInfo.valueAt(b); + TL_bots.BotInfo info = botInfo.valueAt(b); for (int a = 0; a < info.commands.size(); a++) { TLRPC.TL_botCommand command = info.commands.get(a); if (command.command.toLowerCase().equals("help")) { @@ -19154,7 +19198,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not Collections.reverse(messArr); } if (currentEncryptedChat == null && chatMode != MODE_QUICK_REPLIES) { - getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid, null); } int approximateHeightSum = 0; if (!chatWasReset && (load_type == 2 || load_type == 1) && messArr.isEmpty() && !isCache) { @@ -20401,6 +20445,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not obj.messageOwner = newMsgObj; if (fwdHeader != null && newMsgObj.fwd_from != null && !TextUtils.isEmpty(newMsgObj.fwd_from.from_name)) { obj.messageOwner.fwd_from = fwdHeader; + Log.i("lolkek", "msg " + obj.getId() + " isOutOwnerCached is reset (1)"); obj.isOutOwnerCached = null; } obj.generateThumbs(true); @@ -20426,7 +20471,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not ArrayList messArr = new ArrayList<>(); messArr.add(obj); if (currentEncryptedChat == null && chatMode != MODE_QUICK_REPLIES) { - getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid, null); } if (chatAdapter != null) { ChatMessageCell cell = null; @@ -20603,7 +20648,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not URLSpanBotCommand.enabled = !chatInfo.bot_info.isEmpty() && currentChat != null && currentChat.megagroup; botsCount = chatInfo.bot_info.size(); for (int a = 0; a < chatInfo.bot_info.size(); a++) { - TLRPC.BotInfo bot = chatInfo.bot_info.get(a); + TL_bots.BotInfo bot = chatInfo.bot_info.get(a); if (!isThreadChat() && !bot.commands.isEmpty() && (!ChatObject.isChannel(currentChat) || currentChat != null && currentChat.megagroup)) { hasBotsCommands = true; } @@ -21098,6 +21143,20 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not }); chatAdapter.notifyDataSetChanged(true); }); + } else if (id == NotificationCenter.updateAllMessages) { + long dialogId = (long) args[0]; + if (dialog_id != dialogId) return; + doOnIdle(() -> { + AndroidUtilities.forEachViews(chatListView, view -> { + if (view instanceof ChatMessageCell) { + MessageObject message = ((ChatMessageCell) view).getMessageObject(); + if (message != null) { + message.forceUpdate = true; + } + } + }); + chatAdapter.notifyDataSetChanged(false); + }); } else if (id == NotificationCenter.didVerifyMessagesStickers) { ArrayList messages = (ArrayList) args[0]; for (int a = 0, N = messages.size(); a < N; a++) { @@ -21326,7 +21385,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } boolean updated = false; if (arrayList != null) { - getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid, null); } for (int a = 0, N = ids.size(); a < N; a++) { Integer mid = ids.get(a); @@ -21422,7 +21481,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } loadingPinnedMessages.remove(message.getId()); } - getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid, null); updateMessagesVisiblePart(false); } else { pinnedMessageIds.clear(); @@ -21515,7 +21574,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (id == NotificationCenter.botInfoDidLoad) { int guid = (Integer) args[1]; if (classGuid == guid || guid == 0) { - TLRPC.BotInfo info = (TLRPC.BotInfo) args[0]; + TL_bots.BotInfo info = (TL_bots.BotInfo) args[0]; if (currentEncryptedChat == null) { if (!info.commands.isEmpty() && !ChatObject.isChannel(currentChat) && !isThreadChat()) { hasBotsCommands = true; @@ -21819,7 +21878,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not totalPinnedMessagesCount = (Integer) args[3]; pinnedEndReached = (Boolean) args[4]; - getMediaDataController().loadReplyMessagesForMessages(new ArrayList<>(pinnedMessageObjects.values()), dialog_id, 0, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(new ArrayList<>(pinnedMessageObjects.values()), dialog_id, 0, 0, null, classGuid, null); if (!inMenuMode && !loadingPinnedMessagesList && totalPinnedMessagesCount == 0 && !pinnedEndReached) { getMediaDataController().loadPinnedMessages(dialog_id, 0, fallbackId); @@ -22305,6 +22364,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not updateVisibleRows(msg -> msg != null && msg.getFactCheck() != null); } else if (id == NotificationCenter.availableEffectsUpdate) { updateVisibleRows(msg -> msg != null && msg.getEffect() != null); + } else if (id == NotificationCenter.starReactionAnonymousUpdate) { + final long did = (long) args[0]; + final int mid = (int) args[1]; + final boolean anonymous = (boolean) args[2]; + if (dialog_id != did) return; + MessageObject messageObject = messagesDict[0].get(mid); + if (messageObject != null) { + messageObject.setMyPaidReactionAnonymous(anonymous); + } } } @@ -22587,7 +22655,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not processNewMessages(res.messages); } - private void removeFromSponsored(MessageObject message) { + public void removeFromSponsored(MessageObject message) { MessagesController.SponsoredMessagesInfo sponsoredMessagesInfo = getMessagesController().getSponsoredMessages(dialog_id); if (sponsoredMessagesInfo != null) { sponsoredMessagesInfo.messages.remove(message); @@ -24772,7 +24840,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not openAttachBotLayout(user.id, attachMenuBotStartCommand, false); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, null); + }, null, null); } else { AttachBotIntroTopView introTopView = new AttachBotIntroTopView(getParentActivity()); introTopView.setColor(Theme.getColor(Theme.key_chat_attachIcon)); @@ -27011,7 +27079,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not fixLayout(); applyDraftMaybe(false); applyChatLinkMessageMaybe(); - if (bottomOverlayChat != null && bottomOverlayChat.getVisibility() != View.VISIBLE && !actionBar.isSearchFieldVisible() && chatMode != MODE_SEARCH) { + if (bottomOverlayChat != null && bottomOverlayChat.getVisibility() != View.VISIBLE && !actionBar.isSearchFieldVisible() && chatMode != MODE_SEARCH && !BaseFragment.hasSheets(this)) { chatActivityEnterView.setFieldFocused(true); } if (chatActivityEnterView != null) { @@ -27044,6 +27112,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } flagSecure.attach(); + + if (starReactionsOverlay != null) { + starReactionsOverlay.bringToFront(); + } } public float getPullingDownOffset() { @@ -27419,9 +27491,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (getArguments().getBoolean("hasUrl", false)) { chatActivityEnterView.setSelection(draftMessage.message.indexOf('\n') + 1); AndroidUtilities.runOnUIThread(() -> { - if (chatActivityEnterView != null) { - chatActivityEnterView.setFieldFocused(true); - chatActivityEnterView.openKeyboard(); + if (!BaseFragment.hasSheets(ChatActivity.this)) { + if (chatActivityEnterView != null) { + chatActivityEnterView.setFieldFocused(true); + chatActivityEnterView.openKeyboard(); + } } }, 700); } @@ -27744,7 +27818,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (messageObject == null) { return null; } - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { return restrictionReason; } @@ -27797,7 +27871,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (message == null) { return false; } - if (!single && (message.messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || message.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode)) { + if (!single && (message.messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || message.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode || message.messageOwner.action instanceof TLRPC.TL_messageActionGiftStars)) { return false; } if (factCheckHint != null) { @@ -27829,6 +27903,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } }), ConnectionsManager.RequestFlagFailOnServerErrors); return true; + } else if (!longpress && message.messageOwner.action instanceof TLRPC.TL_messageActionPaymentRefunded) { + TLRPC.TL_messageActionPaymentRefunded action = (TLRPC.TL_messageActionPaymentRefunded) message.messageOwner.action; + StarsIntroActivity.showTransactionSheet(getContext(), currentAccount, message.messageOwner.date, action, resourceProvider); + return true; } else if (message.messageOwner.action instanceof TLRPC.TL_messageActionGroupCall || message.messageOwner.action instanceof TLRPC.TL_messageActionInviteToGroupCall || message.messageOwner.action instanceof TLRPC.TL_messageActionGroupCallScheduled) { if (getParentActivity() == null) { return false; @@ -28350,7 +28428,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (!selectedObject.isSponsored() && chatMode != MODE_QUICK_REPLIES && chatMode != MODE_SCHEDULED && (!selectedObject.needDrawBluredPreview() || selectedObject.hasExtendedMediaPreview()) && !selectedObject.isLiveLocation() && selectedObject.type != MessageObject.TYPE_PHONE_CALL && !noforwards && selectedObject.type != MessageObject.TYPE_GIFT_PREMIUM && selectedObject.type != MessageObject.TYPE_GIFT_PREMIUM_CHANNEL && selectedObject.type != MessageObject.TYPE_SUGGEST_PHOTO && !selectedObject.isWallpaperAction() - && !message.isExpiredStory() && message.type != MessageObject.TYPE_STORY_MENTION) { + && !message.isExpiredStory() && message.type != MessageObject.TYPE_STORY_MENTION && message.type != MessageObject.TYPE_GIFT_STARS) { items.add(LocaleController.getString("Forward", R.string.Forward)); options.add(OPTION_FORWARD); icons.add(R.drawable.msg_forward); @@ -28523,10 +28601,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (chatInfo == null) { isReactionsAvailable = true; } else { - isReactionsAvailable = !isSecretChat() && chatMode != MODE_QUICK_REPLIES && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && !(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone)) && !availableReacts.isEmpty(); + isReactionsAvailable = !isSecretChat() && chatMode != MODE_QUICK_REPLIES && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available)) && !availableReacts.isEmpty(); } } else { - isReactionsAvailable = !message.isSecretMedia() && chatMode != MODE_QUICK_REPLIES && !isSecretChat() && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && !(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || (chatInfo == null && !ChatObject.isChannel(currentChat)) || currentUser != null) && !availableReacts.isEmpty(); + isReactionsAvailable = !message.isSecretMedia() && chatMode != MODE_QUICK_REPLIES && !isSecretChat() && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available) || (chatInfo == null && !ChatObject.isChannel(currentChat)) || currentUser != null) && !availableReacts.isEmpty(); } boolean showMessageSeen = !isReactionsViewAvailable && !isInScheduleMode() && currentChat != null && message.isOutOwner() && message.isSent() && !message.isEditing() && !message.isSending() && !message.isSendError() && !message.isContentUnread() && !message.isUnread() && (ConnectionsManager.getInstance(currentAccount).getCurrentTime() - message.messageOwner.date < getMessagesController().chatReadMarkExpirePeriod) && (ChatObject.isMegagroup(currentChat) || !ChatObject.isChannel(currentChat)) && chatInfo != null && chatInfo.participants_count <= getMessagesController().chatReadMarkSizeThreshold && !(message.messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByRequest) && (v instanceof ChatMessageCell); boolean showPrivateMessageSeen = !isReactionsViewAvailable && currentChat == null && currentEncryptedChat == null && (currentUser != null && !UserObject.isUserSelf(currentUser) && !UserObject.isReplyUser(currentUser) && !UserObject.isAnonymous(currentUser) && !currentUser.bot && !UserObject.isService(currentUser.id)) && (userInfo == null || !userInfo.read_dates_private) && !isInScheduleMode() && message.isOutOwner() && message.isSent() && !message.isEditing() && !message.isSending() && !message.isSendError() && !message.isContentUnread() && !message.isUnread() && (ConnectionsManager.getInstance(currentAccount).getCurrentTime() - message.messageOwner.date < getMessagesController().pmReadDateExpirePeriod) && !(message.messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByRequest) && (v instanceof ChatMessageCell); @@ -29036,7 +29114,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); textView.setMaxWidth(AndroidUtilities.dp(300)); Uri uri = Uri.parse(selectedObject.sponsoredUrl); - textView.setText(Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED))); + textView.setText(Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null)); textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, selectedObject.sponsoredAdditionalInfo == null ? 6 : 0)); textView.setOnClickListener(e -> { if (selectedObject == null) { @@ -29161,7 +29239,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } BottomSheet.Builder builder = new BottomSheet.Builder(contentView.getContext()); - builder.setCustomView(new SponsoredMessageInfoView(getParentActivity(), themeDelegate)); + builder.setCustomView(new SponsoredMessageInfoView(getParentActivity(), null, themeDelegate)); builder.show(); }); popupLayout.addView(new ActionBarPopupWindow.GapView(contentView.getContext(), themeDelegate), LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); @@ -29366,7 +29444,19 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not reactionsLayout.setDelegate(new ReactionsContainerLayout.ReactionsContainerDelegate() { @Override public void onReactionClicked(View v, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean longpress, boolean addToRecent) { - selectReaction(primaryMessage, finalReactionsLayout, v,0, 0, visibleReaction,false, longpress, addToRecent, false); + float x = 0, y = 0; + ChatMessageCell cell = findMessageCell(primaryMessage.getId(), true); + if (cell != null) { + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton(visibleReaction); + if (btn != null) { + x = cell.reactionsLayoutInBubble.x + btn.x + btn.width / 2f; + y = cell.reactionsLayoutInBubble.y + btn.y + btn.height / 2f; + } + } + if (visibleReaction != null && visibleReaction.isStar) { + longpress = true; + } + selectReaction(cell, primaryMessage, finalReactionsLayout, v, x, y, visibleReaction,false, longpress, addToRecent, false); } @Override @@ -29933,11 +30023,49 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } - public void selectReaction(MessageObject primaryMessage, ReactionsContainerLayout reactionsLayout, View fromView, float x, float y, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean fromDoubleTap, boolean bigEmoji, boolean addToRecent, boolean withoutAnimation) { + public void selectReaction(ChatMessageCell cell, MessageObject primaryMessage, ReactionsContainerLayout reactionsLayout, View fromView, float x, float y, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean fromDoubleTap, boolean bigEmoji, boolean addToRecent, boolean withoutAnimation) { if (isInScheduleMode() || primaryMessage == null) { return; } + if (visibleReaction != null && visibleReaction.isStar) { + closeMenu(); + if (cell == null) { + cell = findMessageCell(primaryMessage.getId(), true); + } + if (bigEmoji) { + if (cell != null) { + cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } + ArrayList reactors = null; + if (primaryMessage != null && primaryMessage.messageOwner != null && primaryMessage.messageOwner.reactions != null) { + reactors = primaryMessage.messageOwner.reactions.top_reactors; + } + StarsController.getInstance(currentAccount).commitPaidReaction(); + StarsReactionsSheet sheet = new StarsReactionsSheet(getContext(), currentAccount, dialog_id, ChatActivity.this, primaryMessage, reactors, themeDelegate); + sheet.setMessageCell(ChatActivity.this, primaryMessage.getId(), cell); + sheet.show(); + return; + } + if (fragmentView != null) { + try { + fragmentView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + } + StarsController.PendingPaidReactions pending = StarsController.getInstance(currentAccount).sendPaidReaction(primaryMessage, ChatActivity.this, +1, true, true, null); + if (pending != null && cell != null) { + StarReactionsOverlay overlay = getStarReactionsOverlay(); + overlay.setMessageCell(cell); + pending.setOverlay(overlay); + overlay.show(); + int[] loc = new int[2], loc2 = new int[2]; + cell.getLocationInWindow(loc); + overlay.getLocationInWindow(loc2); + overlay.tap(loc[0] - loc2[0] + x, loc[1] - loc2[1] + y, false, true); + } + return; + } + if (getDialogId() == getUserConfig().getClientUserId() && !getUserConfig().isPremium() && primaryMessage.messageOwner != null && (primaryMessage.messageOwner.reactions == null || (primaryMessage.messageOwner.reactions.reactions_as_tags || primaryMessage.messageOwner.reactions.results.isEmpty()))) { new PremiumFeatureBottomSheet(ChatActivity.this, PremiumPreviewFragment.PREMIUM_FEATURE_SAVED_TAGS, true).show(); return; @@ -29958,7 +30086,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not int finalMessageIdForCell = messageIdForCell; if (added) { - ChatMessageCell cell = findMessageCell(finalMessageIdForCell, true); + cell = findMessageCell(finalMessageIdForCell, true); showMultipleReactionsPromo(cell, visibleReaction, currentChosenReactions); if (!fromDoubleTap) { ReactionsEffectOverlay.show(ChatActivity.this, reactionsLayout, cell, fromView, x, y, visibleReaction, currentAccount, reactionsLayout != null ? (bigEmoji ? ReactionsEffectOverlay.LONG_ANIMATION : ReactionsEffectOverlay.ONLY_MOVE_ANIMATION) : ReactionsEffectOverlay.SHORT_ANIMATION); @@ -30216,7 +30344,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } } - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { str.append(restrictionReason); } else if (messageObject.caption != null) { @@ -32082,6 +32210,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not ObjectAnimator.ofFloat(cameraContainer, View.SCALE_Y, 0.5f), ObjectAnimator.ofFloat(cameraContainer, View.ALPHA, 0.0f), ObjectAnimator.ofFloat(instantCameraView.getSwitchButtonView(), View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(instantCameraView.getFlashButtonView(), View.ALPHA, 0.0f), ObjectAnimator.ofInt(instantCameraView.getPaint(), AnimationProperties.PAINT_ALPHA, 0), ObjectAnimator.ofFloat(instantCameraView.getMuteImageView(), View.ALPHA, 0.0f) ); @@ -32533,7 +32662,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } - private void removeMessageWithThanos(MessageObject messageObject) { + public void removeMessageWithThanos(MessageObject messageObject) { int index = messages.indexOf(messageObject); if (index == -1) { return; @@ -32615,7 +32744,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not try { try { Uri uri = Uri.parse(formattedUrl); - formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); } @@ -32890,7 +33019,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } - private void logSponsoredClicked(MessageObject messageObject) { + public void logSponsoredClicked(MessageObject messageObject) { if (messageObject == null || !messageObject.isSponsored()) { return; } @@ -32919,7 +33048,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else if (url instanceof URLSpanUserMention) { TLRPC.User user = getMessagesController().getUser(Utilities.parseLong(((URLSpanUserMention) url).getURL())); if (user != null) { - MessagesController.openChatOrProfileWith(user, null, ChatActivity.this, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, ChatActivity.this, 0, false); } if (longPress && cell != null) { cell.resetPressedLink(-1); @@ -33019,8 +33148,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not String lowerUrl = urlFinal.toLowerCase(); String lowerUrl2 = messageObject.messageOwner.media.webpage.url.toLowerCase(); if ((lowerUrl.contains("telegram.org/blog") || Browser.isTelegraphUrl(lowerUrl, false) || lowerUrl.contains("t.me/iv")) && (lowerUrl.contains(lowerUrl2) || lowerUrl2.contains(lowerUrl))) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChatActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChatActivity.this.createArticleViewer(false).open(messageObject); return; } } @@ -33598,7 +33729,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (UserObject.isReplyUser(currentUser)) { helpView.setText(false, LocaleController.getString("RepliesChatInfo", R.string.RepliesChatInfo)); } else { - TLRPC.BotInfo mBotInfo = botInfo.size() != 0 ? botInfo.get(currentUser.id) : null; + TL_bots.BotInfo mBotInfo = botInfo.size() != 0 ? botInfo.get(currentUser.id) : null; helpView.setText(true, mBotInfo != null ? mBotInfo.description : null, mBotInfo != null ? mBotInfo.description_document != null ? mBotInfo.description_document : mBotInfo.description_photo : null, mBotInfo); } updateBotHelpCellClick(helpView); @@ -33860,6 +33991,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not ObjectAnimator.ofFloat(cameraContainer, View.SCALE_Y, scale), ObjectAnimator.ofFloat(cameraContainer, View.TRANSLATION_Y, position[1] - rect.y), ObjectAnimator.ofFloat(instantCameraView.getSwitchButtonView(), View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(instantCameraView.getFlashButtonView(), View.ALPHA, 0.0f), ObjectAnimator.ofInt(instantCameraView.getPaint(), AnimationProperties.PAINT_ALPHA, 0), ObjectAnimator.ofFloat(instantCameraView.getMuteImageView(), View.ALPHA, 0.0f) ); @@ -35188,6 +35320,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not processRowSelect(cell, true, touchX, touchY); return; } + if (!asForward && chat != null && chat.signature_profiles) { + MessageObject msg = cell.getMessageObject(); + if (msg != null) { + long did = DialogObject.getPeerDialogId(msg.messageOwner.from_id); + openUserProfile(did); + return; + } + } openChat(cell, chat, postId, asForward); } @@ -35465,6 +35605,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (getMessagesController().checkCanOpenChat(args, ChatActivity.this, cell.getMessageObject(), progress)) { ChatActivity chatActivity = new ChatActivity(args); if (progress != null && postId != 0) { + AndroidUtilities.runOnUIThread(() -> { progress.onCancel(getMessagesController().ensureMessagesLoaded(-chat.id, postId, new MessagesController.MessagesLoadedCallback() { @Override public void onMessagesLoaded(boolean fromCache) { @@ -35477,6 +35618,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not presentFragment(chatActivity); } })); + }, 5000); progress.init(); } else { presentFragment(chatActivity); @@ -35574,7 +35716,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } @Override - public void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress) { + public void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress, float x, float y) { if (getParentActivity() == null) { return; } @@ -35586,6 +35728,20 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not new PremiumFeatureBottomSheet(ChatActivity.this, PremiumPreviewFragment.PREMIUM_FEATURE_SAVED_TAGS, true).show(); return; } + if (longpress && reaction.reaction instanceof TLRPC.TL_reactionPaid) { + cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + MessageObject messageObject = cell.getPrimaryMessageObject(); + if (messageObject == null) return; + ArrayList reactors = null; + if (messageObject.messageOwner != null && messageObject.messageOwner.reactions != null) { + reactors = messageObject.messageOwner.reactions.top_reactors; + } + StarsController.getInstance(currentAccount).commitPaidReaction(); + StarsReactionsSheet sheet = new StarsReactionsSheet(getContext(), currentAccount, dialog_id, ChatActivity.this, messageObject, reactors, themeDelegate); + sheet.setMessageCell(ChatActivity.this, messageObject.getId(), findMessageCell(messageObject.getId(), true)); + sheet.show(); + return; + } if (longpress || cell.areTags() && (isInsideContainer || searchingReaction != null && searchingReaction.isSame(reaction.reaction))) { if (/*!ChatObject.isChannelAndNotMegaGroup(currentChat) || dialog_id >= 0*/ true) { cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); @@ -35673,7 +35829,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not removeTag.setTextAndIcon(LocaleController.getString(R.string.SavedTagRemoveTag), R.drawable.menu_tag_delete); removeTag.setMinimumWidth(160); removeTag.setOnClickListener(view -> { - pressedReaction(cell, reaction); + pressedReaction(cell, reaction, 0, 0); }); removeTag.setColors(Theme.getColor(Theme.key_color_red), Theme.getColor(Theme.key_color_red)); popupLayout.addView(removeTag); @@ -35834,14 +35990,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not actionBarSearchTags.setChosen(ReactionsLayoutInBubble.VisibleReaction.fromTL(reaction.reaction), true); } } else if (reaction != null) { - pressedReaction(cell, reaction); + pressedReaction(cell, reaction, x, y); } } - private void pressedReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction) { + private void pressedReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, float x, float y) { ReactionsLayoutInBubble.VisibleReaction visibleReaction = ReactionsLayoutInBubble.VisibleReaction.fromTL(reaction.reaction); MessageObject messageObject = cell.getPrimaryMessageObject(); - selectReaction(cell.getPrimaryMessageObject(), null, null, 0, 0, visibleReaction,false, false, false, false); + selectReaction(cell, cell.getPrimaryMessageObject(), null, null, x, y, visibleReaction,false, false, false, false); if (messageObject != null & messageObject.messageOwner != null) { if (chatAdapter.isFiltered) { MessageObject realMessage = messagesDict[0].get(messageObject.getId()); @@ -36126,7 +36282,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (!safe && !Browser.isInternalUri(uri, null)) { AlertsCreator.showOpenUrlAlert(ChatActivity.this, url, true, true, true, !safe, progressDialogCurrent, themeDelegate); } else { - Browser.openUrl(getContext(), uri, true, true, false, progressDialogCurrent, null); + Browser.openUrl(getContext(), uri, true, true, false, progressDialogCurrent, null, false); } } @@ -36627,8 +36783,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not PollVotesAlert.showForPoll(ChatActivity.this, messageObject); } else if (type == 0) { if (messageObject.messageOwner.media != null && messageObject.messageOwner.media.webpage != null && messageObject.messageOwner.media.webpage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChatActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChatActivity.this.createArticleViewer(false).open(messageObject); } } else if (type == ChatMessageCell.INSTANT_BUTTON_TYPE_CONTACT_VIEW) { long uid = messageObject.messageOwner.media.user_id; @@ -36737,7 +36895,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } } - Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null); + Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null, false); } else { if (messageObject.isSponsored()) { logSponsoredClicked(messageObject); @@ -36762,7 +36920,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } }; - Browser.openUrl(getContext(), Uri.parse(messageObject.sponsoredUrl), true, false, false, progressDialogCurrent, null); + Browser.openUrl(getContext(), Uri.parse(messageObject.sponsoredUrl), true, false, false, progressDialogCurrent, null, false); } } else { TLRPC.WebPage webPage = messageObject.getStoryMentionWebpage(); @@ -36806,7 +36964,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } }; - Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null); + Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null, false); } } } @@ -36945,16 +37103,86 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not RevenueSharingAdsInfoBottomSheet.showAlert(contentView.getContext(), ChatActivity.this, resourceProvider); } + @Override + public void didPressRevealSensitiveContent(ChatMessageCell cell) { + if (!getMessagesController().showSensitiveContent()) { + final AlertDialog progressDialog = new AlertDialog(getContext(), AlertDialog.ALERT_TYPE_SPINNER); + progressDialog.showDelayed(200); + getMessagesController().getContentSettings(settings -> { + progressDialog.dismissUnless(200); + boolean[] always = new boolean[1]; + FrameLayout frameLayout = new FrameLayout(getContext()); + if (settings != null && settings.sensitive_can_change) { + CheckBoxCell checkbox = new CheckBoxCell(getContext(), 1, getResourceProvider()); + checkbox.setBackground(Theme.getSelectorDrawable(false)); + checkbox.setText(getString(R.string.MessageShowSensitiveContentAlways), "", always[0], false); + checkbox.setPadding(LocaleController.isRTL ? dp(16) : dp(8), 0, LocaleController.isRTL ? dp(8) : dp(16), 0); + frameLayout.addView(checkbox, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.LEFT, 0, 0, 0, 0)); + checkbox.setOnClickListener(v -> { + CheckBoxCell cell1 = (CheckBoxCell) v; + always[0] = !always[0]; + cell1.setChecked(always[0], true); + }); + } + showDialog( + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.MessageShowSensitiveContentMediaTitle)) + .setMessage(getString(R.string.MessageShowSensitiveContentMediaText)) + .setView(frameLayout).setCustomViewOffset(9) + .setNegativeButton(getString(R.string.Cancel), null) + .setPositiveButton(getString(R.string.MessageShowSensitiveContentButton), (di, w) -> { + if (always[0]) { + if (settings != null && settings.sensitive_can_change) { + getMessagesController().setContentSettings(true); + BulletinFactory.of(ChatActivity.this) + .createSimpleBulletinDetail(R.raw.chats_infotip, AndroidUtilities.replaceArrows(AndroidUtilities.premiumText(getString(R.string.SensitiveContentSettingsToast), () -> { + presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC).highlightSensitiveRow()); + }), true)) + .show(true); + } + for (int i = 0; i < chatListView.getChildCount(); ++i) { + View child = chatListView.getChildAt(i); + if (!(child instanceof ChatMessageCell)) continue; + ChatMessageCell messageCell = (ChatMessageCell) child; + if (messageCell.getMessageObject() != null && messageCell.getMessageObject().isSensitive()) { + messageCell.startRevealMedia(); + } + } + } else { + if (cell.getMessageObject() != null) { + cell.getMessageObject().isSensitiveCached = false; + } + cell.startRevealMedia(); + } + }) + .create() + ); + }); + return; + } + if (cell.getMessageObject() != null) { + cell.getMessageObject().isSensitiveCached = false; + } + cell.startRevealMedia(); + } }; private void openUserProfile(long uid) { if (uid < 0) { + if (uid == getDialogId()) { + avatarContainer.openProfile(true); + return; + } Bundle args = new Bundle(); args.putLong("chat_id", -uid); if (getMessagesController().checkCanOpenChat(args, ChatActivity.this)) { presentFragment(new ChatActivity(args)); } } else if (uid != getUserConfig().getClientUserId()) { + if (uid == getDialogId()) { + avatarContainer.openProfile(true); + return; + } Bundle args = new Bundle(); args.putLong("user_id", uid); if (currentEncryptedChat != null && uid == currentUser.id) { @@ -36963,6 +37191,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not ProfileActivity fragment = new ProfileActivity(args); fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == uid ? 1 : 0); presentFragment(fragment); + } else { + Bundle args = new Bundle(); + args.putLong("user_id", uid); + args.putBoolean("my_profile", true); + presentFragment(new ProfileActivity(args, null)); } } @@ -37606,8 +37839,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, null, null, null, null, Theme.key_chat_recordVoiceCancel)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActivityEnterView.class}, new String[]{"recordedAudioTimeTextView"}, null, null, null, Theme.key_chat_messagePanelVoiceDuration)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, null, null, null, null, Theme.key_chat_recordVoiceCancel)); - themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, new Class[]{ChatActivityEnterView.class}, new String[]{"doneButtonProgress"}, null, null, null, Theme.key_contextProgressInner1)); - themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, new Class[]{ChatActivityEnterView.class}, new String[]{"doneButtonProgress"}, null, null, null, Theme.key_contextProgressOuter1)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, ThemeDescription.FLAG_IMAGECOLOR, new Class[]{ChatActivityEnterView.class}, new String[]{"cancelBotButton"}, null, null, null, Theme.key_chat_messagePanelCancelInlineBot)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, ThemeDescription.FLAG_USEBACKGROUNDDRAWABLE | ThemeDescription.FLAG_DRAWABLESELECTEDSTATE, new Class[]{ChatActivityEnterView.class}, new String[]{"cancelBotButton"}, null, null, null, Theme.key_listSelector)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, new Class[]{ChatActivityEnterView.class}, new String[]{"redDotPaint"}, null, null, null, Theme.key_chat_recordedVoiceDot)); @@ -38977,6 +39208,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } return ColorUtils.calculateLuminance(color) > 0.7f; } + if (actionBar == null) { + return !Theme.isCurrentThemeDark(); + } return AndroidUtilities.computePerceivedBrightness(actionBar.getBackgroundColor()) > 0.721f; } @@ -39088,6 +39322,27 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return chatListThanosEffect; } + private StarReactionsOverlay starReactionsOverlay; + public StarReactionsOverlay getStarReactionsOverlay() { + if (starReactionsOverlay == null) { + starReactionsOverlay = new StarReactionsOverlay(ChatActivity.this); + } + FrameLayout starReactionsOverlayParent = getLayoutContainer(); +// if (LaunchActivity.instance != null) { +// starReactionsOverlayParent = LaunchActivity.instance.frameLayout; +// } + if (starReactionsOverlayParent == null) { + return null; + } + if (starReactionsOverlay.getParent() != starReactionsOverlayParent) { + AndroidUtilities.removeFromParent(starReactionsOverlay); + starReactionsOverlayParent.addView(starReactionsOverlay, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } else if (starReactionsOverlayParent.indexOfChild(starReactionsOverlay) < starReactionsOverlayParent.indexOfChild(fragmentView)) { + starReactionsOverlay.bringToFront(); + } + return starReactionsOverlay; + } + private void checkGroupMessagesOrder() { if (!reversed) return; int groupStart = -1; @@ -39176,21 +39431,33 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not final ScrimOptions dialog = new ScrimOptions(getContext(), themeDelegate); options.setOnDismiss(dialog::dismissFast); - options.add(R.drawable.msg_openin, getString(R.string.Open), () -> { + final boolean customTabs = SharedConfig.inappBrowser && !str.startsWith("video?") && !Browser.isInternalUri(Uri.parse(str), null); + + options.add(R.drawable.msg_openin, getString(customTabs ? R.string.OpenInTelegramBrowser : R.string.Open), () -> { if (str.startsWith("video?")) { didPressMessageUrl(span, false, messageObject, cell); + } else if (customTabs) { + Browser.openInTelegramBrowser(getParentActivity(), str, null); } else { logSponsoredClicked(messageObject); openClickableLink(span, str, false, cell, messageObject, false); } }); + if (customTabs) { + options.add(R.drawable.msg_language, getString(R.string.OpenInSystemBrowser), () -> { + Browser.openInExternalBrowser(getParentActivity(), str, false); + }); + } + TLRPC.MessageMedia media = MessageObject.getMedia(messageObject); if (media instanceof TLRPC.TL_messageMediaWebPage && media.webpage != null && media.webpage.cached_page != null && TextUtils.equals(media.webpage.url, str)) { options.add(R.drawable.menu_instant_view, getString(R.string.OpenInstantView), () -> { if (messageObject.messageOwner.media != null && messageObject.messageOwner.media.webpage != null && messageObject.messageOwner.media.webpage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChatActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChatActivity.this.createArticleViewer(false).open(messageObject); } }); } @@ -39258,7 +39525,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not try { try { Uri uri = Uri.parse(formattedUrl); - formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); } @@ -39363,7 +39630,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not dialog.setScrim(cell, link, null); showDialog(dialog); }; - if (BuildVars.DEBUG_PRIVATE_VERSION) { + if (true || BuildVars.DEBUG_PRIVATE_VERSION) { TLRPC.TL_account_checkUsername req2 = new TLRPC.TL_account_checkUsername(); req2.username = username; int reqId2 = getConnectionsManager().sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { @@ -39674,4 +39941,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not messagesSearchAdapter.searchStories(searchingHashtag, instant); } + public float getClipTop() { + return chatListView.getY() + ((fragmentTransition == null || (fromPullingDownTransition && !toPullingDownTransition)) && !isInsideContainer ? chatListViewPaddingTop - chatListViewPaddingVisibleOffset - AndroidUtilities.dp(4) : 0); + } + + public float getClipBottom() { + return fragmentView.getBottom() - chatListView.getBottom() + ((fragmentTransition == null || (fromPullingDownTransition && !toPullingDownTransition)) && !isInsideContainer ? blurredViewBottomOffset : 0); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java index 650dd6000..4e8304393 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java @@ -63,6 +63,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; @@ -100,12 +101,10 @@ import org.telegram.ui.Components.SizeNotifierFrameLayout; import org.telegram.ui.Components.UndoView; import org.telegram.ui.Stars.BotStarsActivity; import org.telegram.ui.Stars.BotStarsController; -import org.telegram.ui.Stars.StarsController; import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import java.util.Locale; import java.util.concurrent.CountDownLatch; public class ChatEditActivity extends BaseFragment implements ImageUpdater.ImageUpdaterDelegate, NotificationCenter.NotificationCenterDelegate { @@ -138,7 +137,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image private TextCell reactionsCell; private TextInfoPrivacyCell settingsSectionCell; - private TextCell signCell; +// private TextCell signCell; private TextCell forumsCell; private FrameLayout stickersContainer; @@ -177,7 +176,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image private TLRPC.User currentUser; private TLRPC.UserFull userInfo; - private boolean signMessages; +// private boolean signMessages; private boolean forum, canForum; private boolean isChannel; @@ -341,7 +340,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image if (currentChat != null) { avatarDrawable.setInfo(5, currentChat.title, null); isChannel = ChatObject.isChannel(currentChat) && !currentChat.megagroup; - signMessages = currentChat.signatures; +// signMessages = currentChat.signatures; forum = currentChat.forum; canForum = userId == 0 && (forum || Math.max(info == null ? 0 : info.participants_count, currentChat.participants_count) >= getMessagesController().forumUpgradeParticipantsMin) && (info == null || info.linked_chat_id == 0); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.chatInfoDidLoad); @@ -349,7 +348,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image } else { avatarDrawable.setInfo(5, currentUser.first_name, null); isChannel = false; - signMessages = false; +// signMessages = false; forum = false; canForum = false; NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.userInfoDidLoad); @@ -983,14 +982,14 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image } if (isChannel) { - signCell = new TextCell(context, 23, false, true, null); - signCell.setBackgroundDrawable(Theme.getSelectorDrawable(true)); - signCell.setTextAndCheckAndIcon(getString("ChannelSignMessages", R.string.ChannelSignMessages), signMessages, R.drawable.msg_signed, false); - typeEditContainer.addView(signCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); - signCell.setOnClickListener(v -> { - signMessages = !signMessages; - ((TextCell) v).setChecked(signMessages); - }); +// signCell = new TextCell(context, 23, false, true, null); +// signCell.setBackgroundDrawable(Theme.getSelectorDrawable(true)); +// signCell.setTextAndCheckAndIcon(getString("ChannelSignMessages", R.string.ChannelSignMessages), signMessages, R.drawable.msg_signed, false); +// typeEditContainer.addView(signCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); +// signCell.setOnClickListener(v -> { +// signMessages = !signMessages; +// ((TextCell) v).setChecked(signMessages); +// }); } else if (currentChat.creator) { forumsCell = new TextCell(context, 23, false, true, null); forumsCell.setBackgroundDrawable(Theme.getSelectorDrawable(true)); @@ -1020,24 +1019,26 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image } ActionBarMenu menu = actionBar.createMenu(); - if (currentUser != null || ChatObject.canChangeChatInfo(currentChat) || signCell != null || historyCell != null) { + if (currentUser != null || ChatObject.canChangeChatInfo(currentChat) || /*signCell != null ||*/ historyCell != null) { doneButton = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, dp(56)); doneButton.setContentDescription(getString("Done", R.string.Done)); } - if (locationCell != null || signCell != null || historyCell != null || typeCell != null || linkedCell != null || forumsCell != null) { + if (locationCell != null || /*signCell != null ||*/ historyCell != null || typeCell != null || linkedCell != null || forumsCell != null) { settingsSectionCell = new TextInfoPrivacyCell(context); Drawable shadowDrawable = Theme.getThemedDrawable(context, R.drawable.greydivider, Theme.getColor(Theme.key_windowBackgroundGrayShadow, getResourceProvider())); Drawable background = new ColorDrawable(getThemedColor(Theme.key_windowBackgroundGray)); CombinedDrawable combinedDrawable = new CombinedDrawable(background, shadowDrawable, 0, 0); combinedDrawable.setFullsize(true); settingsSectionCell.setBackground(combinedDrawable); - linearLayout1.addView(settingsSectionCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); if (forumsCell != null) { settingsSectionCell.setText(getString("ForumToggleDescription", R.string.ForumToggleDescription)); - } else { + } else if (/*signCell != null*/ false) { settingsSectionCell.setText(getString("ChannelSignMessagesInfo", R.string.ChannelSignMessagesInfo)); + } else { + settingsSectionCell.setFixedSize(12); } + linearLayout1.addView(settingsSectionCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); } infoContainer = new LinearLayout(context); @@ -1541,9 +1542,10 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image String about = info != null && info.about != null ? info.about : ""; if (info != null && ChatObject.isChannel(currentChat) && info.hidden_prehistory != historyHidden || - nameTextView != null && !currentChat.title.equals(nameTextView.getText().toString()) || - descriptionTextView != null && !about.equals(descriptionTextView.getText().toString()) || - signMessages != currentChat.signatures || forum != currentChat.forum) { + nameTextView != null && !currentChat.title.equals(nameTextView.getText().toString()) || + descriptionTextView != null && !about.equals(descriptionTextView.getText().toString()) || + forum != currentChat.forum + ) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); builder.setTitle(getString("UserRestrictionsApplyChanges", R.string.UserRestrictionsApplyChanges)); if (isChannel) { @@ -1588,7 +1590,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image } donePressed = true; if (currentUser != null) { - TLRPC.TL_bots_setBotInfo req = new TLRPC.TL_bots_setBotInfo(); + TL_bots.setBotInfo req = new TL_bots.setBotInfo(); req.bot = getMessagesController().getInputUser(currentUser); req.flags |= 4; req.lang_code = ""; @@ -1667,10 +1669,10 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image if (descriptionTextView != null && !about.equals(descriptionTextView.getText().toString())) { getMessagesController().updateChatAbout(chatId, descriptionTextView.getText().toString(), info); } - if (signMessages != currentChat.signatures) { - currentChat.signatures = true; - getMessagesController().toggleChannelSignatures(chatId, signMessages); - } +// if (signMessages != currentChat.signatures) { +// currentChat.signatures = true; +// getMessagesController().toggleChannelSignatures(chatId, signMessages, false); +// } if (forum != currentChat.forum) { getMessagesController().toggleChannelForum(chatId, forum); List fragments = getParentLayout().getFragmentStack(); @@ -1800,7 +1802,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image boolean isPrivate = !ChatObject.isPublic(currentChat); if (settingsSectionCell != null) { - settingsSectionCell.setVisibility(signCell == null && typeCell == null && (linkedCell == null || linkedCell.getVisibility() != View.VISIBLE) && (historyCell == null || historyCell.getVisibility() != View.VISIBLE) && (locationCell == null || locationCell.getVisibility() != View.VISIBLE) ? View.GONE : View.VISIBLE); + settingsSectionCell.setVisibility(/*signCell == null && */typeCell == null && (linkedCell == null || linkedCell.getVisibility() != View.VISIBLE) && (historyCell == null || historyCell.getVisibility() != View.VISIBLE) && (locationCell == null || locationCell.getVisibility() != View.VISIBLE) ? View.GONE : View.VISIBLE); } if (logCell != null) { @@ -1967,7 +1969,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image public void updateColorCell() { if (colorCell != null) { - colorCell.set(currentChat, (historyCell != null && historyCell.getVisibility() == View.VISIBLE) || (signCell != null && signCell.getVisibility() == View.VISIBLE) || (forumsCell != null && forumsCell.getVisibility() == View.VISIBLE) || ChatObject.isMegagroup(currentChat) && ChatObject.hasAdminRights(currentChat)); + colorCell.set(currentChat, (historyCell != null && historyCell.getVisibility() == View.VISIBLE) || /*(signCell != null && signCell.getVisibility() == View.VISIBLE) || */(forumsCell != null && forumsCell.getVisibility() == View.VISIBLE) || ChatObject.isMegagroup(currentChat) && ChatObject.hasAdminRights(currentChat)); } } @@ -2045,10 +2047,14 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image } private void updateReactionsCell(boolean animated) { + final TLRPC.ChatFull chat = getMessagesController().getChatFull(chatId); boolean isChannelAndNotMegaGroup = ChatObject.isChannelAndNotMegaGroup(currentChat); String finalString; if (availableReactions == null || availableReactions instanceof TLRPC.TL_chatReactionsNone) { - finalString = getString("ReactionsOff", R.string.ReactionsOff); + finalString = getString(R.string.ReactionsOff); + if (chat != null && chat.paid_reactions_available) { + finalString = "1"; + } } else if (availableReactions instanceof TLRPC.TL_chatReactionsSome) { TLRPC.TL_chatReactionsSome someReactions = (TLRPC.TL_chatReactionsSome) availableReactions; int count = 0; @@ -2065,16 +2071,19 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image } } if (isChannelAndNotMegaGroup) { - finalString = count == 0 ? getString("ReactionsOff", R.string.ReactionsOff) : String.valueOf(count); + if (chat != null && chat.paid_reactions_available) { + count++; + } + finalString = count == 0 ? getString(R.string.ReactionsOff) : String.valueOf(count); } else { int reacts = Math.min(getMediaDataController().getEnabledReactionsList().size(), count); - finalString = reacts == 0 ? getString("ReactionsOff", R.string.ReactionsOff) : - LocaleController.formatString("ReactionsCount", R.string.ReactionsCount, reacts, getMediaDataController().getEnabledReactionsList().size()); + finalString = reacts == 0 ? getString(R.string.ReactionsOff) : + LocaleController.formatString(R.string.ReactionsCount, reacts, getMediaDataController().getEnabledReactionsList().size()); } } else { - finalString = getString("ReactionsAll", R.string.ReactionsAll); + finalString = getString(R.string.ReactionsAll); } - reactionsCell.setTextAndValueAndIcon(getString("Reactions", R.string.Reactions), finalString, animated, R.drawable.msg_reactions2, true); + reactionsCell.setTextAndValueAndIcon(getString(R.string.Reactions), finalString, animated, R.drawable.msg_reactions2, true); } @Override @@ -2147,10 +2156,10 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image themeDescriptions.add(new ThemeDescription(settingsSectionCell, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{ShadowSectionCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow)); themeDescriptions.add(new ThemeDescription(deleteInfoCell, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{ShadowSectionCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow)); - themeDescriptions.add(new ThemeDescription(signCell, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); - themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText)); - themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrack)); - themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrackChecked)); +// themeDescriptions.add(new ThemeDescription(signCell, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); +// themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText)); +// themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrack)); +// themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrackChecked)); themeDescriptions.add(new ThemeDescription(deleteCell, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); themeDescriptions.add(new ThemeDescription(deleteCell, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{TextSettingsCell.class}, new String[]{"textView"}, null, null, null, Theme.key_text_RedRegular)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java index 478761aa7..fd139146d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java @@ -1364,7 +1364,9 @@ public class ChatEditTypeActivity extends BaseFragment implements NotificationCe permanentLinkView.setLink(invite != null ? invite.link : null); permanentLinkView.loadUsers(invite, chatId); checkTextView.setVisibility(!isPrivate && checkTextView.length() != 0 ? View.VISIBLE : View.GONE); - manageLinksInfoCell.setText(LocaleController.getString("ManageLinksInfoHelp", R.string.ManageLinksInfoHelp)); + final TLRPC.ChatFull chatFull = getMessagesController().getChatFull(chatId); + final TLRPC.Chat chat = getMessagesController().getChat(chatId); + manageLinksInfoCell.setText(LocaleController.getString(chatFull != null && chatFull.paid_media_allowed && ChatObject.isChannelAndNotMegaGroup(chat) ? R.string.ManageLinksInfoHelpPaid : R.string.ManageLinksInfoHelp)); if (isPrivate) { typeInfoCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(typeInfoCell.getContext(), R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); manageLinksInfoCell.setBackground(Theme.getThemedDrawableByKey(typeInfoCell.getContext(), R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java index be98cd305..4a58e65fd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java @@ -670,7 +670,7 @@ public class ChatPullingDownDrawable implements NotificationCenter.NotificationC TLRPC.Dialog dialog = dialogs.get(i); TLRPC.Chat chat = messagesController.getChat(-dialog.id); if (chat != null && dialog.id != currentDialogId && dialog.unread_count > 0 && DialogObject.isChannel(dialog) && !chat.megagroup && !messagesController.isPromoDialog(dialog.id, false)) { - String reason = MessagesController.getRestrictionReason(chat.restriction_reason); + String reason = messagesController.getRestrictionReason(chat.restriction_reason); if (reason == null) { return dialog; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java index 86d009ae7..db031e911 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java @@ -555,6 +555,9 @@ public class ChatRightsEditActivity extends BaseFragment { return; } if (position == sendMediaRow) { + if (view instanceof TextCheckCell2 && !((TextCheckCell2) view).isEnabled()) { + return; + } sendMediaExpanded = !sendMediaExpanded; updateRows(false); if (sendMediaExpanded) { @@ -564,6 +567,9 @@ public class ChatRightsEditActivity extends BaseFragment { } return; } else if (position == channelMessagesRow) { + if (view instanceof TextCheckCell2 && !((TextCheckCell2) view).isEnabled()) { + return; + } channelMessagesExpanded = !channelMessagesExpanded; updateRows(false); listViewAdapter.notifyItemChanged(channelMessagesRow); @@ -574,6 +580,9 @@ public class ChatRightsEditActivity extends BaseFragment { } return; } else if (position == channelStoriesRow) { + if (view instanceof TextCheckCell2 && !((TextCheckCell2) view).isEnabled()) { + return; + } channelStoriesExpanded = !channelStoriesExpanded; updateRows(false); listViewAdapter.notifyItemChanged(channelStoriesRow); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java index 2b3cd044a..aab3856ec 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java @@ -8,6 +8,8 @@ package org.telegram.ui; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -66,6 +68,7 @@ import org.telegram.ui.Cells.ManageChatTextCell; import org.telegram.ui.Cells.ManageChatUserCell; import org.telegram.ui.Cells.ShadowSectionCell; import org.telegram.ui.Cells.TextCell; +import org.telegram.ui.Cells.TextCheckCell; import org.telegram.ui.Cells.TextCheckCell2; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; @@ -91,6 +94,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private static final int VIEW_TYPE_INNER_CHECK = 13; private static final int VIEW_TYPE_EXPANDABLE_SWITCH = 14; private static final int VIEW_TYPE_NOT_RESTRICT_BOOSTERS_SLIDER = 15; + private static final int VIEW_TYPE_CHECK = 16; private ListAdapter listViewAdapter; private StickerEmptyView emptyView; @@ -186,6 +190,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private int loadingUserCellRow; private int loadingHeaderRow; + private int signMessagesRow; + private int signMessagesProfilesRow; + private int signMessagesInfoRow; + private int delayResults; private boolean sendMediaExpanded; @@ -201,6 +209,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private boolean isEnabledNotRestrictBoosters; private int notRestrictBoosters; + private boolean initialSignatures; + private boolean initialProfiles; + private boolean signatures, profiles; + private final static int search_button = 0; private final static int done_button = 1; @@ -276,6 +288,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente initialBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); isChannel = ChatObject.isChannel(currentChat) && !currentChat.megagroup; isForum = ChatObject.isForum(currentChat); + if (currentChat != null) { + initialSignatures = signatures = currentChat.signatures; + initialProfiles = profiles = currentChat.signature_profiles; + } } private void updateRows() { @@ -300,6 +316,9 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente gigaHeaderRow = -1; participantsEndRow = -1; participantsInfoRow = -1; + signMessagesRow = -1; + signMessagesProfilesRow = -1; + signMessagesInfoRow = -1; blockedEmptyRow = -1; permissionsSectionRow = -1; sendMessagesRow = -1; @@ -471,6 +490,15 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } else if (!firstLoaded) { loadingUserCellRow = rowCount++; } + if (ChatObject.isChannelAndNotMegaGroup(currentChat) && ChatObject.hasAdminRights(currentChat)) { + signMessagesRow = rowCount++; + if (signatures) { + signMessagesProfilesRow = rowCount++; + signMessagesInfoRow = rowCount++; + } else { + signMessagesInfoRow = rowCount++; + } + } } else if (type == TYPE_USERS) { if (ChatObject.isChannel(currentChat)) { if (!ChatObject.isChannelAndNotMegaGroup(currentChat) && !needOpenSearch) { @@ -541,25 +569,25 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); if (type == TYPE_KICKED) { - actionBar.setTitle(LocaleController.getString("ChannelPermissions", R.string.ChannelPermissions)); + actionBar.setTitle(getString("ChannelPermissions", R.string.ChannelPermissions)); } else if (type == TYPE_BANNED) { - actionBar.setTitle(LocaleController.getString("ChannelBlacklist", R.string.ChannelBlacklist)); + actionBar.setTitle(getString("ChannelBlacklist", R.string.ChannelBlacklist)); } else if (type == TYPE_ADMIN) { - actionBar.setTitle(LocaleController.getString("ChannelAdministrators", R.string.ChannelAdministrators)); + actionBar.setTitle(getString("ChannelAdministrators", R.string.ChannelAdministrators)); } else if (type == TYPE_USERS) { if (selectType == SELECT_TYPE_MEMBERS) { if (isChannel) { - actionBar.setTitle(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers)); + actionBar.setTitle(getString("ChannelSubscribers", R.string.ChannelSubscribers)); } else { - actionBar.setTitle(LocaleController.getString("ChannelMembers", R.string.ChannelMembers)); + actionBar.setTitle(getString("ChannelMembers", R.string.ChannelMembers)); } } else { if (selectType == SELECT_TYPE_ADMIN) { - actionBar.setTitle(LocaleController.getString("ChannelAddAdmin", R.string.ChannelAddAdmin)); + actionBar.setTitle(getString("ChannelAddAdmin", R.string.ChannelAddAdmin)); } else if (selectType == SELECT_TYPE_BLOCK) { - actionBar.setTitle(LocaleController.getString("ChannelBlockUser", R.string.ChannelBlockUser)); + actionBar.setTitle(getString("ChannelBlockUser", R.string.ChannelBlockUser)); } else if (selectType == SELECT_TYPE_EXCEPTION) { - actionBar.setTitle(LocaleController.getString("ChannelAddException", R.string.ChannelAddException)); + actionBar.setTitle(getString("ChannelAddException", R.string.ChannelAddException)); } } } @@ -624,17 +652,20 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente searchItem.setVisibility(View.GONE); } if (type == TYPE_KICKED) { - searchItem.setSearchFieldHint(LocaleController.getString("ChannelSearchException", R.string.ChannelSearchException)); + searchItem.setSearchFieldHint(getString("ChannelSearchException", R.string.ChannelSearchException)); } else { - searchItem.setSearchFieldHint(LocaleController.getString("Search", R.string.Search)); + searchItem.setSearchFieldHint(getString("Search", R.string.Search)); } if (!(ChatObject.isChannel(currentChat) || currentChat.creator)) { searchItem.setVisibility(View.GONE); } if (type == TYPE_KICKED) { - doneItem = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, AndroidUtilities.dp(56), LocaleController.getString("Done", R.string.Done)); + doneItem = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, AndroidUtilities.dp(56), getString("Done", R.string.Done)); } + } else if (type == TYPE_ADMIN && ChatObject.isChannelAndNotMegaGroup(currentChat) && ChatObject.hasAdminRights(currentChat)) { + ActionBarMenu menu = actionBar.createMenu(); + doneItem = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, AndroidUtilities.dp(56), getString("Done", R.string.Done)); } fragmentView = new FrameLayout(context) { @@ -661,8 +692,8 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente progressBar.setVisibility(View.GONE); emptyView = new StickerEmptyView(context, progressLayout, StickerEmptyView.STICKER_TYPE_SEARCH); - emptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); - emptyView.subtitle.setText(LocaleController.getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); + emptyView.title.setText(getString("NoResult", R.string.NoResult)); + emptyView.subtitle.setText(getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); emptyView.setVisibility(View.GONE); emptyView.setAnimateLayoutChange(true); emptyView.showProgress(true, false); @@ -730,13 +761,13 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente listView.invalidate(); } }; - itemAnimator.setDurations(320); - itemAnimator.setMoveDelay(0); - itemAnimator.setAddDelay(0); + itemAnimator.setDurations(420); +// itemAnimator.setMoveDelay(0); +// itemAnimator.setAddDelay(0); itemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); itemAnimator.setDelayAnimations(false); - listView.setItemAnimator(itemAnimator); itemAnimator.setSupportsChangeAnimations(false); + listView.setItemAnimator(itemAnimator); listView.setAnimateEmptyView(true, RecyclerListView.EMPTY_VIEW_ANIMATION_TYPE_ALPHA); listView.setAdapter(listViewAdapter = new ListAdapter(context)); listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT); @@ -744,7 +775,27 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente listView.setOnItemClickListener((view, position, x, y) -> { boolean listAdapter = listView.getAdapter() == listViewAdapter; - if (listAdapter) { + if (position == signMessagesRow) { + signatures = !signatures; + ((TextCheckCell) view).setChecked(signatures); + + AndroidUtilities.updateVisibleRows(listView); + DiffCallback diffCallback = saveState(); + updateRows(); + updateListAnimated(diffCallback); + + listViewAdapter.notifyItemChanged(signMessagesInfoRow); + } else if (position == signMessagesProfilesRow) { + profiles = !profiles; + ((TextCheckCell) view).setChecked(profiles); + + AndroidUtilities.updateVisibleRows(listView); + DiffCallback diffCallback = saveState(); + updateRows(); + updateListAnimated(diffCallback); + + listViewAdapter.notifyItemChanged(signMessagesInfoRow); + } else if (listAdapter) { if (isExpandableSendMediaRow(position)) { CheckBoxCell checkBoxCell = (CheckBoxCell) view; if (position == sendMediaPhotosRow) { @@ -962,7 +1013,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } textCell.setChecked(info.antispam = wasAntispam); textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_DELETE_MESSAGES) && (info == null || !info.antispam || getParticipantsCount() >= getMessagesController().telegramAntispamGroupSizeMin) ? 0 : R.drawable.permission_locked); - BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, LocaleController.getString("UnknownError", R.string.UnknownError)).show(); + BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, getString("UnknownError", R.string.UnknownError)).show(); }); } antiSpamToggleLoading = false; @@ -992,7 +1043,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } textCell.setChecked(info.participants_hidden = wasParticipantsHidden); textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_BLOCK_USERS) && (info == null || !info.participants_hidden || getParticipantsCount() >= getMessagesController().hiddenMembersGroupSizeMin) ? 0 : R.drawable.permission_locked); - BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, LocaleController.getString("UnknownError", R.string.UnknownError)).show(); + BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, getString("UnknownError", R.string.UnknownError)).show(); }); } hideMembersToggleLoading = false; @@ -1050,9 +1101,9 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } if (checkCell.hasIcon()) { if (ChatObject.isPublic(currentChat) && (position == pinMessagesRow || position == changeInfoRow)) { - BulletinFactory.of(this).createErrorBulletin(LocaleController.getString("EditCantEditPermissionsPublic", R.string.EditCantEditPermissionsPublic)).show(); + BulletinFactory.of(this).createErrorBulletin(getString("EditCantEditPermissionsPublic", R.string.EditCantEditPermissionsPublic)).show(); } else { - BulletinFactory.of(this).createErrorBulletin(LocaleController.getString("EditCantEditPermissions", R.string.EditCantEditPermissions)).show(); + BulletinFactory.of(this).createErrorBulletin(getString("EditCantEditPermissions", R.string.EditCantEditPermissions)).show(); } return; } @@ -1182,10 +1233,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente final boolean canEdit = canEditAdmin; final String rankFinal = rank; AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder.setTitle(getString("AppName", R.string.AppName)); builder.setMessage(LocaleController.formatString("AdminWillBeRemoved", R.string.AdminWillBeRemoved, UserObject.getUserName(user))); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> openRightsEdit(user.id, participant, ar, br, rankFinal, canEdit, selectType == SELECT_TYPE_ADMIN ? 0 : 1, false)); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setPositiveButton(getString("OK", R.string.OK), (dialog, which) -> openRightsEdit(user.id, participant, ar, br, rankFinal, canEdit, selectType == SELECT_TYPE_ADMIN ? 0 : 1, false)); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } else { openRightsEdit(peerId, participant, adminRights, bannedRights, rank, canEditAdmin, selectType == SELECT_TYPE_ADMIN ? 0 : 1, selectType == SELECT_TYPE_ADMIN || selectType == SELECT_TYPE_EXCEPTION); @@ -1760,22 +1811,22 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente ItemOptions.makeOptions(this, view) .setScrimViewBackground(new ColorDrawable(Theme.getColor(Theme.key_windowBackgroundWhite))) - .addIf(allowSetAdmin, R.drawable.msg_admins, editingAdmin ? LocaleController.getString("EditAdminRights", R.string.EditAdminRights) : LocaleController.getString("SetAsAdmin", R.string.SetAsAdmin), () -> openRightsFor.run(0)) - .addIf(canChangePermission, R.drawable.msg_permissions, LocaleController.getString("ChangePermissions", R.string.ChangePermissions), () -> { + .addIf(allowSetAdmin, R.drawable.msg_admins, editingAdmin ? getString("EditAdminRights", R.string.EditAdminRights) : getString("SetAsAdmin", R.string.SetAsAdmin), () -> openRightsFor.run(0)) + .addIf(canChangePermission, R.drawable.msg_permissions, getString("ChangePermissions", R.string.ChangePermissions), () -> { if (participant instanceof TLRPC.TL_channelParticipantAdmin || participant instanceof TLRPC.TL_chatParticipantAdmin) { showDialog( new AlertDialog.Builder(getParentActivity()) - .setTitle(LocaleController.getString("AppName", R.string.AppName)) + .setTitle(getString("AppName", R.string.AppName)) .setMessage(LocaleController.formatString("AdminWillBeRemoved", R.string.AdminWillBeRemoved, UserObject.getUserName(user))) - .setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> openRightsFor.run(1)) - .setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null) + .setPositiveButton(getString("OK", R.string.OK), (dialog, which) -> openRightsFor.run(1)) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) .create() ); } else { openRightsFor.run(1); } }) - .addIf(ChatObject.canBlockUsers(currentChat) && canEditAdmin, R.drawable.msg_remove, isChannel ? LocaleController.getString("ChannelRemoveUser", R.string.ChannelRemoveUser) : LocaleController.getString("KickFromGroup", R.string.KickFromGroup), true, () -> { + .addIf(ChatObject.canBlockUsers(currentChat) && canEditAdmin, R.drawable.msg_remove, isChannel ? getString("ChannelRemoveUser", R.string.ChannelRemoveUser) : getString("KickFromGroup", R.string.KickFromGroup), true, () -> { getMessagesController().deleteParticipantFromChat(chatId, user); removeParticipants(peerId); if (currentChat != null && user != null && BulletinFactory.canShowBulletin(this)) { @@ -1789,7 +1840,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente ItemOptions options = ItemOptions.makeOptions(this, view); if (type == TYPE_KICKED && ChatObject.canBlockUsers(currentChat)) { - options.add(R.drawable.msg_permissions, LocaleController.getString("ChannelEditPermissions", R.string.ChannelEditPermissions), () -> { + options.add(R.drawable.msg_permissions, getString("ChannelEditPermissions", R.string.ChannelEditPermissions), () -> { ChatRightsEditActivity fragment = new ChatRightsEditActivity(peerId, chatId, null, defaultBannedRights, bannedRights, rank, ChatRightsEditActivity.TYPE_BANNED, true, false, null); fragment.setDelegate(new ChatRightsEditActivity.ChatRightsEditActivityDelegate() { @Override @@ -1810,19 +1861,19 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente }); presentFragment(fragment); }); - options.add(R.drawable.msg_delete, LocaleController.getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); + options.add(R.drawable.msg_delete, getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); } else if (type == TYPE_BANNED && ChatObject.canBlockUsers(currentChat)) { if (ChatObject.canAddUsers(currentChat) && peerId > 0) { - options.add(R.drawable.msg_contact_add, isChannel ? LocaleController.getString("ChannelAddToChannel", R.string.ChannelAddToChannel) : LocaleController.getString("ChannelAddToGroup", R.string.ChannelAddToGroup), () -> { + options.add(R.drawable.msg_contact_add, isChannel ? getString("ChannelAddToChannel", R.string.ChannelAddToChannel) : getString("ChannelAddToGroup", R.string.ChannelAddToGroup), () -> { deletePeer(peerId); TLRPC.User user = getMessagesController().getUser(peerId); getMessagesController().addUserToChat(chatId, user, 0, null, ChatUsersActivity.this, null); }); } - options.add(R.drawable.msg_delete, LocaleController.getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); + options.add(R.drawable.msg_delete, getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); } else if (type == TYPE_ADMIN && ChatObject.canAddAdmins(currentChat) && canEdit) { if (currentChat.creator || !(participant instanceof TLRPC.TL_channelParticipantCreator)) { - options.add(R.drawable.msg_admins, LocaleController.getString("EditAdminRights", R.string.EditAdminRights), () -> { + options.add(R.drawable.msg_admins, getString("EditAdminRights", R.string.EditAdminRights), () -> { ChatRightsEditActivity fragment = new ChatRightsEditActivity(peerId, chatId, adminRights, null, null, rank, ChatRightsEditActivity.TYPE_ADMIN, true, false, null); fragment.setDelegate(new ChatRightsEditActivity.ChatRightsEditActivityDelegate() { @Override @@ -1844,7 +1895,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente presentFragment(fragment); }); } - options.add(R.drawable.msg_remove, LocaleController.getString("ChannelRemoveUserAdmin", R.string.ChannelRemoveUserAdmin), true, () -> { + options.add(R.drawable.msg_remove, getString("ChannelRemoveUserAdmin", R.string.ChannelRemoveUserAdmin), true, () -> { getMessagesController().setUserAdminRole(chatId, getMessagesController().getUser(peerId), new TLRPC.TL_chatAdminRights(), "", !isChannel, ChatUsersActivity.this, false, false, null, null); removeParticipants(peerId); }); @@ -1957,16 +2008,16 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private boolean checkDiscard() { String newBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); - if (!newBannedRights.equals(initialBannedRights) || initialSlowmode != selectedSlowmode || hasNotRestrictBoostersChanges()) { + if (!newBannedRights.equals(initialBannedRights) || initialSlowmode != selectedSlowmode || hasNotRestrictBoostersChanges() || signatures != initialSignatures || (signatures && profiles) != initialProfiles) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("UserRestrictionsApplyChanges", R.string.UserRestrictionsApplyChanges)); + builder.setTitle(getString("UserRestrictionsApplyChanges", R.string.UserRestrictionsApplyChanges)); if (isChannel) { - builder.setMessage(LocaleController.getString("ChannelSettingsChangedAlert", R.string.ChannelSettingsChangedAlert)); + builder.setMessage(getString("ChannelSettingsChangedAlert", R.string.ChannelSettingsChangedAlert)); } else { - builder.setMessage(LocaleController.getString("GroupSettingsChangedAlert", R.string.GroupSettingsChangedAlert)); + builder.setMessage(getString("GroupSettingsChangedAlert", R.string.GroupSettingsChangedAlert)); } - builder.setPositiveButton(LocaleController.getString("ApplyTheme", R.string.ApplyTheme), (dialogInterface, i) -> processDone()); - builder.setNegativeButton(LocaleController.getString("PassportDiscard", R.string.PassportDiscard), (dialog, which) -> finishFragment()); + builder.setPositiveButton(getString("ApplyTheme", R.string.ApplyTheme), (dialogInterface, i) -> processDone()); + builder.setNegativeButton(getString("PassportDiscard", R.string.PassportDiscard), (dialog, which) -> finishFragment()); showDialog(builder.create()); return false; } @@ -1983,92 +2034,92 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } StringBuilder builder = new StringBuilder(); if (rights.view_messages && defaultBannedRights.view_messages != rights.view_messages) { - builder.append(LocaleController.getString("UserRestrictionsNoRead", R.string.UserRestrictionsNoRead)); + builder.append(getString("UserRestrictionsNoRead", R.string.UserRestrictionsNoRead)); } if (rights.send_messages && defaultBannedRights.send_plain != rights.send_plain) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendText", R.string.UserRestrictionsNoSendText)); + builder.append(getString("UserRestrictionsNoSendText", R.string.UserRestrictionsNoSendText)); } if (rights.send_media && defaultBannedRights.send_media != rights.send_media) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendMedia", R.string.UserRestrictionsNoSendMedia)); + builder.append(getString("UserRestrictionsNoSendMedia", R.string.UserRestrictionsNoSendMedia)); } else { if (rights.send_photos && defaultBannedRights.send_photos != rights.send_photos) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendPhotos", R.string.UserRestrictionsNoSendPhotos)); + builder.append(getString("UserRestrictionsNoSendPhotos", R.string.UserRestrictionsNoSendPhotos)); } if (rights.send_videos && defaultBannedRights.send_videos != rights.send_videos) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendVideos", R.string.UserRestrictionsNoSendVideos)); + builder.append(getString("UserRestrictionsNoSendVideos", R.string.UserRestrictionsNoSendVideos)); } if (rights.send_audios && defaultBannedRights.send_audios != rights.send_audios) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendMusic", R.string.UserRestrictionsNoSendMusic)); + builder.append(getString("UserRestrictionsNoSendMusic", R.string.UserRestrictionsNoSendMusic)); } if (rights.send_docs && defaultBannedRights.send_docs != rights.send_docs) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendDocs", R.string.UserRestrictionsNoSendDocs)); + builder.append(getString("UserRestrictionsNoSendDocs", R.string.UserRestrictionsNoSendDocs)); } if (rights.send_voices && defaultBannedRights.send_voices != rights.send_voices) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendVoice", R.string.UserRestrictionsNoSendVoice)); + builder.append(getString("UserRestrictionsNoSendVoice", R.string.UserRestrictionsNoSendVoice)); } if (rights.send_roundvideos && defaultBannedRights.send_roundvideos != rights.send_roundvideos) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendRound", R.string.UserRestrictionsNoSendRound)); + builder.append(getString("UserRestrictionsNoSendRound", R.string.UserRestrictionsNoSendRound)); } } if (rights.send_stickers && defaultBannedRights.send_stickers != rights.send_stickers) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendStickers", R.string.UserRestrictionsNoSendStickers)); + builder.append(getString("UserRestrictionsNoSendStickers", R.string.UserRestrictionsNoSendStickers)); } if (rights.send_polls && defaultBannedRights.send_polls != rights.send_polls) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendPolls", R.string.UserRestrictionsNoSendPolls)); + builder.append(getString("UserRestrictionsNoSendPolls", R.string.UserRestrictionsNoSendPolls)); } if (rights.embed_links && !rights.send_plain && defaultBannedRights.embed_links != rights.embed_links) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoEmbedLinks", R.string.UserRestrictionsNoEmbedLinks)); + builder.append(getString("UserRestrictionsNoEmbedLinks", R.string.UserRestrictionsNoEmbedLinks)); } if (rights.invite_users && defaultBannedRights.invite_users != rights.invite_users) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoInviteUsers", R.string.UserRestrictionsNoInviteUsers)); + builder.append(getString("UserRestrictionsNoInviteUsers", R.string.UserRestrictionsNoInviteUsers)); } if (rights.pin_messages && defaultBannedRights.pin_messages != rights.pin_messages) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoPinMessages", R.string.UserRestrictionsNoPinMessages)); + builder.append(getString("UserRestrictionsNoPinMessages", R.string.UserRestrictionsNoPinMessages)); } if (rights.change_info && defaultBannedRights.change_info != rights.change_info) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoChangeInfo", R.string.UserRestrictionsNoChangeInfo)); + builder.append(getString("UserRestrictionsNoChangeInfo", R.string.UserRestrictionsNoChangeInfo)); } if (builder.length() != 0) { builder.replace(0, 1, builder.substring(0, 1).toUpperCase()); @@ -2078,43 +2129,47 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } private void processDone() { - if (type != TYPE_KICKED) { - return; - } - if (currentChat.creator && !ChatObject.isChannel(currentChat) && selectedSlowmode != initialSlowmode && info != null) { - MessagesController.getInstance(currentAccount).convertToMegaGroup(getParentActivity(), chatId, this, param -> { - if (param != 0) { - chatId = param; - currentChat = MessagesController.getInstance(currentAccount).getChat(param); - processDone(); - } - }); - return; - } - String newBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); - if (!newBannedRights.equals(initialBannedRights)) { - getMessagesController().setDefaultBannedRole(chatId, defaultBannedRights, ChatObject.isChannel(currentChat), this); - TLRPC.Chat chat = getMessagesController().getChat(chatId); - if (chat != null) { - chat.default_banned_rights = defaultBannedRights; + if (type == TYPE_KICKED) { + if (currentChat.creator && !ChatObject.isChannel(currentChat) && selectedSlowmode != initialSlowmode && info != null) { + MessagesController.getInstance(currentAccount).convertToMegaGroup(getParentActivity(), chatId, this, param -> { + if (param != 0) { + chatId = param; + currentChat = MessagesController.getInstance(currentAccount).getChat(param); + processDone(); + } + }); + return; + } + String newBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); + if (!newBannedRights.equals(initialBannedRights)) { + getMessagesController().setDefaultBannedRole(chatId, defaultBannedRights, ChatObject.isChannel(currentChat), this); + TLRPC.Chat chat = getMessagesController().getChat(chatId); + if (chat != null) { + chat.default_banned_rights = defaultBannedRights; + } + } + if (selectedSlowmode != initialSlowmode && info != null) { + info.slowmode_seconds = getSecondsForIndex(selectedSlowmode); + info.flags |= 131072; + getMessagesController().setChannelSlowMode(chatId, info.slowmode_seconds); + } + + if (hasNotRestrictBoostersChanges()) { + boolean isEnabledNotRestrictBoosters = this.isEnabledNotRestrictBoosters && isNotRestrictBoostersVisible(); + if (isEnabledNotRestrictBoosters && notRestrictBoosters == 0) { + getMessagesController().setBoostsToUnblockRestrictions(chatId, 1); + } else if (!isEnabledNotRestrictBoosters && notRestrictBoosters != 0) { + getMessagesController().setBoostsToUnblockRestrictions(chatId, 0); + } else { + getMessagesController().setBoostsToUnblockRestrictions(chatId, notRestrictBoosters); + } + } + } else if (type == TYPE_ADMIN) { + if (signatures != initialSignatures || (signatures && profiles) != initialProfiles) { + getMessagesController().toggleChannelSignatures(chatId, signatures, signatures && profiles); } - } - if (selectedSlowmode != initialSlowmode && info != null) { - info.slowmode_seconds = getSecondsForIndex(selectedSlowmode); - info.flags |= 131072; - getMessagesController().setChannelSlowMode(chatId, info.slowmode_seconds); } - if (hasNotRestrictBoostersChanges()) { - boolean isEnabledNotRestrictBoosters = this.isEnabledNotRestrictBoosters && isNotRestrictBoostersVisible(); - if (isEnabledNotRestrictBoosters && notRestrictBoosters == 0) { - getMessagesController().setBoostsToUnblockRestrictions(chatId, 1); - } else if (!isEnabledNotRestrictBoosters && notRestrictBoosters != 0) { - getMessagesController().setBoostsToUnblockRestrictions(chatId, 0); - } else { - getMessagesController().setBoostsToUnblockRestrictions(chatId, notRestrictBoosters); - } - } finishFragment(); } @@ -2954,20 +3009,20 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente GraySectionCell sectionCell = (GraySectionCell) holder.itemView; if (position == groupStartRow) { if (type == TYPE_BANNED) { - sectionCell.setText(LocaleController.getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); + sectionCell.setText(getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); } else if (type == TYPE_KICKED) { - sectionCell.setText(LocaleController.getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); + sectionCell.setText(getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); } else { if (isChannel) { - sectionCell.setText(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers)); + sectionCell.setText(getString("ChannelSubscribers", R.string.ChannelSubscribers)); } else { - sectionCell.setText(LocaleController.getString("ChannelMembers", R.string.ChannelMembers)); + sectionCell.setText(getString("ChannelMembers", R.string.ChannelMembers)); } } } else if (position == globalStartRow) { - sectionCell.setText(LocaleController.getString("GlobalSearch", R.string.GlobalSearch)); + sectionCell.setText(getString("GlobalSearch", R.string.GlobalSearch)); } else if (position == contactsStartRow) { - sectionCell.setText(LocaleController.getString("Contacts", R.string.Contacts)); + sectionCell.setText(getString("Contacts", R.string.Contacts)); } break; } @@ -3001,6 +3056,9 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente @Override public boolean isEnabled(RecyclerView.ViewHolder holder) { int viewType = holder.getItemViewType(); + if (viewType == VIEW_TYPE_CHECK) { + return true; + } if (viewType == 7 || viewType == VIEW_TYPE_EXPANDABLE_SWITCH) { return ChatObject.canBlockUsers(currentChat); } else if (viewType == 0) { @@ -3066,9 +3124,9 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente view = new TextInfoPrivacyCell(mContext); TextInfoPrivacyCell privacyCell = (TextInfoPrivacyCell) view; if (isChannel) { - privacyCell.setText(LocaleController.getString(R.string.NoBlockedChannel2)); + privacyCell.setText(getString(R.string.NoBlockedChannel2)); } else { - privacyCell.setText(LocaleController.getString(R.string.NoBlockedGroup2)); + privacyCell.setText(getString(R.string.NoBlockedGroup2)); } privacyCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); break; @@ -3117,7 +3175,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente chooseView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); chooseView.setOptions( selectedSlowmode, - LocaleController.getString("SlowmodeOff", R.string.SlowmodeOff), + getString("SlowmodeOff", R.string.SlowmodeOff), LocaleController.formatString("SlowmodeSeconds", R.string.SlowmodeSeconds, 10), LocaleController.formatString("SlowmodeSeconds", R.string.SlowmodeSeconds, 30), LocaleController.formatString("SlowmodeMinutes", R.string.SlowmodeMinutes, 1), @@ -3164,6 +3222,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente view = checkBoxCell; view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; + case VIEW_TYPE_CHECK: + view = new TextCheckCell(mContext, getResourceProvider()); + view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + break; } return new RecyclerListView.Holder(view); } @@ -3240,12 +3302,12 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } else if (type == TYPE_ADMIN) { String role = null; if (creator) { - role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); + role = getString("ChannelCreator", R.string.ChannelCreator); } else if (admin) { TLRPC.User user1 = getMessagesController().getUser(promotedBy); if (user1 != null) { if (user1.id == peerId) { - role = LocaleController.getString("ChannelAdministrator", R.string.ChannelAdministrator); + role = getString("ChannelAdministrator", R.string.ChannelAdministrator); } else { role = LocaleController.formatString("EditAdminPromotedBy", R.string.EditAdminPromotedBy, UserObject.getUserName(user1)); } @@ -3266,22 +3328,22 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente case 1: TextInfoPrivacyCell privacyCell = (TextInfoPrivacyCell) holder.itemView; if (position == antiSpamInfoRow) { - privacyCell.setText(LocaleController.getString("ChannelAntiSpamInfo", R.string.ChannelAntiSpamInfo)); + privacyCell.setText(getString("ChannelAntiSpamInfo", R.string.ChannelAntiSpamInfo)); privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); } else if (position == participantsInfoRow) { if (type == TYPE_BANNED || type == TYPE_KICKED) { if (isChannel) { - privacyCell.setText(LocaleController.getString("NoBlockedChannel2", R.string.NoBlockedChannel2)); + privacyCell.setText(getString("NoBlockedChannel2", R.string.NoBlockedChannel2)); } else { - privacyCell.setText(LocaleController.getString("NoBlockedGroup2", R.string.NoBlockedGroup2)); + privacyCell.setText(getString("NoBlockedGroup2", R.string.NoBlockedGroup2)); } privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); } else if (type == TYPE_ADMIN) { if (addNewRow != -1) { if (isChannel) { - privacyCell.setText(LocaleController.getString("ChannelAdminsInfo", R.string.ChannelAdminsInfo)); + privacyCell.setText(getString("ChannelAdminsInfo", R.string.ChannelAdminsInfo)); } else { - privacyCell.setText(LocaleController.getString("MegaAdminsInfo", R.string.MegaAdminsInfo)); + privacyCell.setText(getString("MegaAdminsInfo", R.string.MegaAdminsInfo)); } } else { privacyCell.setText(""); @@ -3291,7 +3353,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente if (!isChannel || selectType != SELECT_TYPE_MEMBERS) { privacyCell.setText(""); } else { - privacyCell.setText(LocaleController.getString("ChannelMembersInfo", R.string.ChannelMembersInfo)); + privacyCell.setText(getString("ChannelMembersInfo", R.string.ChannelMembersInfo)); } privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); } @@ -3299,22 +3361,25 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); int seconds = getSecondsForIndex(selectedSlowmode); if (info == null || seconds == 0) { - privacyCell.setText(LocaleController.getString("SlowmodeInfoOff", R.string.SlowmodeInfoOff)); + privacyCell.setText(getString("SlowmodeInfoOff", R.string.SlowmodeInfoOff)); } else { privacyCell.setText(LocaleController.formatString("SlowmodeInfoSelected", R.string.SlowmodeInfoSelected, formatSeconds(seconds))); } } else if (position == hideMembersInfoRow) { privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - privacyCell.setText(LocaleController.getString("ChannelHideMembersInfo", R.string.ChannelHideMembersInfo)); + privacyCell.setText(getString("ChannelHideMembersInfo", R.string.ChannelHideMembersInfo)); } else if (position == gigaInfoRow) { - privacyCell.setText(LocaleController.getString("BroadcastGroupConvertInfo", R.string.BroadcastGroupConvertInfo)); + privacyCell.setText(getString("BroadcastGroupConvertInfo", R.string.BroadcastGroupConvertInfo)); } else if (position == dontRestrictBoostersInfoRow) { privacyCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); if (isEnabledNotRestrictBoosters) { - privacyCell.setText(LocaleController.getString(R.string.GroupNotRestrictBoostersInfo2)); + privacyCell.setText(getString(R.string.GroupNotRestrictBoostersInfo2)); } else { - privacyCell.setText(LocaleController.getString(R.string.GroupNotRestrictBoostersInfo)); + privacyCell.setText(getString(R.string.GroupNotRestrictBoostersInfo)); } + } else if (position == signMessagesInfoRow) { + privacyCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); + privacyCell.setText(getString(signatures ? R.string.ChannelSignProfilesInfo : R.string.ChannelSignInfo)); } break; case 2: @@ -3323,31 +3388,31 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente if (position == addNewRow) { if (type == TYPE_KICKED) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); - actionCell.setText(LocaleController.getString("ChannelAddException", R.string.ChannelAddException), null, R.drawable.msg_contact_add, participantsStartRow != -1); + actionCell.setText(getString("ChannelAddException", R.string.ChannelAddException), null, R.drawable.msg_contact_add, participantsStartRow != -1); } else if (type == TYPE_BANNED) { - actionCell.setText(LocaleController.getString("ChannelBlockUser", R.string.ChannelBlockUser), null, R.drawable.msg_user_remove, false); + actionCell.setText(getString("ChannelBlockUser", R.string.ChannelBlockUser), null, R.drawable.msg_user_remove, false); } else if (type == TYPE_ADMIN) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); boolean showDivider = !(loadingUsers && !firstLoaded); - actionCell.setText(LocaleController.getString("ChannelAddAdmin", R.string.ChannelAddAdmin), null, R.drawable.msg_admin_add, showDivider); + actionCell.setText(getString("ChannelAddAdmin", R.string.ChannelAddAdmin), null, R.drawable.msg_admin_add, showDivider); } else if (type == TYPE_USERS) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); boolean showDivider = addNew2Row != -1 || (!(loadingUsers && !firstLoaded) && membersHeaderRow == -1 && !participants.isEmpty()); if (isChannel) { - actionCell.setText(LocaleController.getString("AddSubscriber", R.string.AddSubscriber), null, R.drawable.msg_contact_add, showDivider); + actionCell.setText(getString("AddSubscriber", R.string.AddSubscriber), null, R.drawable.msg_contact_add, showDivider); } else { - actionCell.setText(LocaleController.getString("AddMember", R.string.AddMember), null, R.drawable.msg_contact_add, showDivider); + actionCell.setText(getString("AddMember", R.string.AddMember), null, R.drawable.msg_contact_add, showDivider); } } } else if (position == recentActionsRow) { - actionCell.setText(LocaleController.getString("EventLog", R.string.EventLog), null, R.drawable.msg_log, antiSpamRow > recentActionsRow); + actionCell.setText(getString("EventLog", R.string.EventLog), null, R.drawable.msg_log, antiSpamRow > recentActionsRow); } else if (position == addNew2Row) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); boolean showDivider = !(loadingUsers && !firstLoaded) && membersHeaderRow == -1 && !participants.isEmpty(); - actionCell.setText(LocaleController.getString("ChannelInviteViaLink", R.string.ChannelInviteViaLink), null, R.drawable.msg_link2, showDivider); + actionCell.setText(getString("ChannelInviteViaLink", R.string.ChannelInviteViaLink), null, R.drawable.msg_link2, showDivider); } else if (position == gigaConvertRow) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); - actionCell.setText(LocaleController.getString("BroadcastGroupConvert", R.string.BroadcastGroupConvert), null, R.drawable.msg_channel, false); + actionCell.setText(getString("BroadcastGroupConvert", R.string.BroadcastGroupConvert), null, R.drawable.msg_channel, false); } break; case 3: @@ -3365,22 +3430,22 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente if (count != 0) { headerCell.setText(LocaleController.formatPluralString("RemovedUser", count)); } else { - headerCell.setText(LocaleController.getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); + headerCell.setText(getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); } } else { - headerCell.setText(LocaleController.getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); + headerCell.setText(getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); } } else if (position == permissionsSectionRow) { - headerCell.setText(LocaleController.getString("ChannelPermissionsHeader", R.string.ChannelPermissionsHeader)); + headerCell.setText(getString("ChannelPermissionsHeader", R.string.ChannelPermissionsHeader)); } else if (position == slowmodeRow) { - headerCell.setText(LocaleController.getString("Slowmode", R.string.Slowmode)); + headerCell.setText(getString("Slowmode", R.string.Slowmode)); } else if (position == gigaHeaderRow) { - headerCell.setText(LocaleController.getString("BroadcastGroup", R.string.BroadcastGroup)); + headerCell.setText(getString("BroadcastGroup", R.string.BroadcastGroup)); } break; case 6: TextSettingsCell settingsCell = (TextSettingsCell) holder.itemView; - settingsCell.setTextAndValue(LocaleController.getString("ChannelBlacklist", R.string.ChannelBlacklist), String.format("%d", info != null ? info.kicked_count : 0), false); + settingsCell.setTextAndValue(getString("ChannelBlacklist", R.string.ChannelBlacklist), String.format("%d", info != null ? info.kicked_count : 0), false); break; case VIEW_TYPE_EXPANDABLE_SWITCH: case 7: @@ -3390,20 +3455,20 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente boolean animated = checkCell.getTag() != null && (Integer) checkCell.getTag() == position; checkCell.setTag(position); if (position == changeInfoRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsChangeInfo", R.string.UserRestrictionsChangeInfo), !defaultBannedRights.change_info && !ChatObject.isPublic(currentChat), manageTopicsRow != -1, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsChangeInfo", R.string.UserRestrictionsChangeInfo), !defaultBannedRights.change_info && !ChatObject.isPublic(currentChat), manageTopicsRow != -1, animated); } else if (position == addUsersRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsInviteUsers", R.string.UserRestrictionsInviteUsers), !defaultBannedRights.invite_users, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsInviteUsers", R.string.UserRestrictionsInviteUsers), !defaultBannedRights.invite_users, true, animated); } else if (position == pinMessagesRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsPinMessages", R.string.UserRestrictionsPinMessages), !defaultBannedRights.pin_messages && !ChatObject.isPublic(currentChat), true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsPinMessages", R.string.UserRestrictionsPinMessages), !defaultBannedRights.pin_messages && !ChatObject.isPublic(currentChat), true, animated); } else if (position == sendMessagesRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendText", R.string.UserRestrictionsSendText), !defaultBannedRights.send_plain, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsSendText", R.string.UserRestrictionsSendText), !defaultBannedRights.send_plain, true, animated); } else if(position == dontRestrictBoostersRow) { - checkCell.setTextAndCheck(LocaleController.getString(R.string.GroupNotRestrictBoosters), isEnabledNotRestrictBoosters, false, animated); + checkCell.setTextAndCheck(getString(R.string.GroupNotRestrictBoosters), isEnabledNotRestrictBoosters, false, animated); checkCell.getCheckBox().setDrawIconType(0); checkCell.getCheckBox().setColors(Theme.key_switchTrack, Theme.key_switchTrackChecked, Theme.key_windowBackgroundWhite, Theme.key_windowBackgroundWhite); } else if (position == sendMediaRow) { int sentMediaCount = getSendMediaSelectedCount(); - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendMedia", R.string.UserRestrictionsSendMedia), sentMediaCount > 0, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsSendMedia", R.string.UserRestrictionsSendMedia), sentMediaCount > 0, true, animated); checkCell.setCollapseArrow(String.format(Locale.US, "%d/9", sentMediaCount), !sendMediaExpanded, new Runnable() { @Override public void run() { @@ -3413,13 +3478,13 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } }); } else if (position == sendStickersRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendStickers", R.string.UserRestrictionsSendStickers), !defaultBannedRights.send_stickers, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsSendStickers", R.string.UserRestrictionsSendStickers), !defaultBannedRights.send_stickers, true, animated); } else if (position == embedLinksRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsEmbedLinks", R.string.UserRestrictionsEmbedLinks), !defaultBannedRights.embed_links, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsEmbedLinks", R.string.UserRestrictionsEmbedLinks), !defaultBannedRights.embed_links, true, animated); } else if (position == sendPollsRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendPollsShort", R.string.UserRestrictionsSendPollsShort), !defaultBannedRights.send_polls, true); + checkCell.setTextAndCheck(getString("UserRestrictionsSendPollsShort", R.string.UserRestrictionsSendPollsShort), !defaultBannedRights.send_polls, true); } else if (position == manageTopicsRow) { - checkCell.setTextAndCheck(LocaleController.getString("CreateTopicsPermission", R.string.CreateTopicsPermission), !defaultBannedRights.manage_topics, false, animated); + checkCell.setTextAndCheck(getString("CreateTopicsPermission", R.string.CreateTopicsPermission), !defaultBannedRights.manage_topics, false, animated); } if (ChatObject.canBlockUsers(currentChat)) { if (position == addUsersRow && !ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_INVITE) || @@ -3439,17 +3504,17 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente GraySectionCell sectionCell = (GraySectionCell) holder.itemView; if (position == membersHeaderRow) { if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) { - sectionCell.setText(LocaleController.getString("ChannelOtherSubscribers", R.string.ChannelOtherSubscribers)); + sectionCell.setText(getString("ChannelOtherSubscribers", R.string.ChannelOtherSubscribers)); } else { - sectionCell.setText(LocaleController.getString("ChannelOtherMembers", R.string.ChannelOtherMembers)); + sectionCell.setText(getString("ChannelOtherMembers", R.string.ChannelOtherMembers)); } } else if (position == botHeaderRow) { - sectionCell.setText(LocaleController.getString("ChannelBots", R.string.ChannelBots)); + sectionCell.setText(getString("ChannelBots", R.string.ChannelBots)); } else if (position == contactsHeaderRow) { if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) { - sectionCell.setText(LocaleController.getString("ChannelContacts", R.string.ChannelContacts)); + sectionCell.setText(getString("ChannelContacts", R.string.ChannelContacts)); } else { - sectionCell.setText(LocaleController.getString("GroupContacts", R.string.GroupContacts)); + sectionCell.setText(getString("GroupContacts", R.string.GroupContacts)); } } else if (position == loadingHeaderRow) { sectionCell.setText(""); @@ -3467,10 +3532,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente TextCell textCell = (TextCell) holder.itemView; if (position == antiSpamRow) { textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_DELETE_MESSAGES) && (info == null || info.antispam || getParticipantsCount() >= getMessagesController().telegramAntispamGroupSizeMin) ? 0 : R.drawable.permission_locked); - textCell.setTextAndCheckAndIcon(LocaleController.getString("ChannelAntiSpam", R.string.ChannelAntiSpam), info != null && info.antispam, R.drawable.msg_policy, false); + textCell.setTextAndCheckAndIcon(getString("ChannelAntiSpam", R.string.ChannelAntiSpam), info != null && info.antispam, R.drawable.msg_policy, false); } else if (position == hideMembersRow) { textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_BLOCK_USERS) && (info == null || info.participants_hidden || getParticipantsCount() >= getMessagesController().hiddenMembersGroupSizeMin) ? 0 : R.drawable.permission_locked); - textCell.setTextAndCheck(LocaleController.getString("ChannelHideMembers", R.string.ChannelHideMembers), info != null && info.participants_hidden, false); + textCell.setTextAndCheck(getString("ChannelHideMembers", R.string.ChannelHideMembers), info != null && info.participants_hidden, false); } break; case VIEW_TYPE_INNER_CHECK: @@ -3478,27 +3543,36 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente animated = checkBoxCell.getTag() != null && (Integer) checkBoxCell.getTag() == position; checkBoxCell.setTag(position); if (position == sendMediaPhotosRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionPhotos", R.string.SendMediaPermissionPhotos), "", !defaultBannedRights.send_photos, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionPhotos", R.string.SendMediaPermissionPhotos), "", !defaultBannedRights.send_photos, true, animated); } else if (position == sendMediaVideosRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionVideos", R.string.SendMediaPermissionVideos), "", !defaultBannedRights.send_videos, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionVideos", R.string.SendMediaPermissionVideos), "", !defaultBannedRights.send_videos, true, animated); } else if (position == sendMediaStickerGifsRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionStickersGifs", R.string.SendMediaPermissionStickersGifs), "", !defaultBannedRights.send_stickers, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionStickersGifs", R.string.SendMediaPermissionStickersGifs), "", !defaultBannedRights.send_stickers, true, animated); } else if (position == sendMediaMusicRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionMusic", R.string.SendMediaPermissionMusic), "", !defaultBannedRights.send_audios, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionMusic", R.string.SendMediaPermissionMusic), "", !defaultBannedRights.send_audios, true, animated); } else if (position == sendMediaFilesRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionFiles", R.string.SendMediaPermissionFiles), "", !defaultBannedRights.send_docs, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionFiles", R.string.SendMediaPermissionFiles), "", !defaultBannedRights.send_docs, true, animated); } else if (position == sendMediaVoiceMessagesRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionVoice", R.string.SendMediaPermissionVoice), "", !defaultBannedRights.send_voices, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionVoice", R.string.SendMediaPermissionVoice), "", !defaultBannedRights.send_voices, true, animated); } else if (position == sendMediaVideoMessagesRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionRound", R.string.SendMediaPermissionRound), "", !defaultBannedRights.send_roundvideos, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionRound", R.string.SendMediaPermissionRound), "", !defaultBannedRights.send_roundvideos, true, animated); } else if (position == sendMediaEmbededLinksRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaEmbededLinks", R.string.SendMediaEmbededLinks), "", !defaultBannedRights.embed_links && !defaultBannedRights.send_plain, false, animated); - }else if (position == sendPollsRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPolls", R.string.SendMediaPolls), "", !defaultBannedRights.send_polls, false, animated); - } + checkBoxCell.setText(getString("SendMediaEmbededLinks", R.string.SendMediaEmbededLinks), "", !defaultBannedRights.embed_links && !defaultBannedRights.send_plain, false, animated); + } else if (position == sendPollsRow) { + checkBoxCell.setText(getString("SendMediaPolls", R.string.SendMediaPolls), "", !defaultBannedRights.send_polls, false, animated); + } else // checkBoxCell.setText(getCheckBoxTitle(item.headerName, percents[item.index < 0 ? 8 : item.index], item.index < 0), AndroidUtilities.formatFileSize(item.size), selected, item.index < 0 ? !collapsed : !item.last); checkBoxCell.setPad(1); break; + case VIEW_TYPE_CHECK: + TextCheckCell checkCell2 = (TextCheckCell) holder.itemView; + if (position == signMessagesRow) { + checkCell2.setTextAndCheck(getString(R.string.ChannelSignMessages), signatures, signatures); + } else if (position == signMessagesProfilesRow) { + checkCell2.setTextAndCheck(getString(R.string.ChannelSignMessagesWithProfile), profiles, false); + } + break; + } } @@ -3521,7 +3595,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente return 3; } else if (position == restricted1SectionRow || position == permissionsSectionRow || position == slowmodeRow || position == gigaHeaderRow) { return 5; - } else if (position == participantsInfoRow || position == slowmodeInfoRow || position == dontRestrictBoostersInfoRow || position == gigaInfoRow || position == antiSpamInfoRow || position == hideMembersInfoRow) { + } else if (position == participantsInfoRow || position == slowmodeInfoRow || position == dontRestrictBoostersInfoRow || position == gigaInfoRow || position == antiSpamInfoRow || position == hideMembersInfoRow || position == signMessagesInfoRow) { return 1; } else if (position == blockedEmptyRow) { return 4; @@ -3546,6 +3620,8 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente return VIEW_TYPE_EXPANDABLE_SWITCH; } else if (position == dontRestrictBoostersSliderRow) { return VIEW_TYPE_NOT_RESTRICT_BOOSTERS_SLIDER; + } else if (position == signMessagesRow || position == signMessagesProfilesRow) { + return VIEW_TYPE_CHECK; } return 0; } @@ -3725,6 +3801,9 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente put(++pointer, loadingProgressRow, sparseIntArray); put(++pointer, loadingUserCellRow, sparseIntArray); put(++pointer, loadingHeaderRow, sparseIntArray); + put(++pointer, signMessagesRow, sparseIntArray); + put(++pointer, signMessagesProfilesRow, sparseIntArray); + put(++pointer, signMessagesInfoRow, sparseIntArray); } private void put(int id, int position, SparseIntArray sparseIntArray) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java index e4cf205c0..ea22d3e2c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java @@ -1200,13 +1200,13 @@ public class AlertsCreator { } long inlineReturn = (fragment instanceof ChatActivity) ? ((ChatActivity) fragment).getInlineReturn() : 0; if (Browser.isInternalUrl(url, null) || !ask) { - Browser.openUrl(fragment.getParentActivity(), Uri.parse(url), inlineReturn == 0, tryTelegraph, forceNotInternalForApps && checkInternalBotApp(url), progress, null); + Browser.openUrl(fragment.getParentActivity(), Uri.parse(url), inlineReturn == 0, tryTelegraph, forceNotInternalForApps && checkInternalBotApp(url), progress, null, false); } else { String urlFinal; if (punycode) { try { Uri uri = Uri.parse(url); - urlFinal = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + urlFinal = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); urlFinal = url; @@ -1444,7 +1444,7 @@ public class AlertsCreator { Context context = fragment.getContext(); AlertDialog.Builder builder = new AlertDialog.Builder(context); - TextView messageTextView = new TextView(context) { + LinkSpanDrawable.LinksTextView messageTextView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), false); @@ -1453,9 +1453,9 @@ public class AlertsCreator { }; NotificationCenter.listenEmojiLoading(messageTextView); messageTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + messageTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn)); messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); messageTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); - messageTextView.setText(LocaleController.getString(R.string.BotWebViewStartPermission)); FrameLayout frameLayout = new FrameLayout(context); builder.setCustomViewOffset(6); @@ -1499,11 +1499,19 @@ public class AlertsCreator { } }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - fragment.showDialog(builder.create(), false, dialog -> { + AlertDialog dialog = builder.create(); + fragment.showDialog(dialog, false, d -> { if (onDismiss != null) { onDismiss.run(); } }); + + messageTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.BotWebViewStartPermission), () -> { + if (dialog != null) { + dialog.dismiss(); + } + Browser.openUrl(context, getString(R.string.BotWebViewStartPermissionLink)); + })); } public static void createBotLaunchAlert(BaseFragment fragment, AtomicBoolean allowWrite, TLRPC.User user, Runnable loadBotSheet) { @@ -1514,7 +1522,7 @@ public class AlertsCreator { CheckBoxCell[] cell = new CheckBoxCell[1]; AlertDialog.Builder builder = new AlertDialog.Builder(context); - TextView messageTextView = new TextView(context) { + LinkSpanDrawable.LinksTextView messageTextView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), false); @@ -1523,9 +1531,9 @@ public class AlertsCreator { }; NotificationCenter.listenEmojiLoading(messageTextView); messageTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + messageTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn)); messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); messageTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); - messageTextView.setText(LocaleController.getString(R.string.BotWebViewStartPermission)); FrameLayout frameLayout = new FrameLayout(context) { @Override @@ -1616,7 +1624,15 @@ public class AlertsCreator { builder.setPositiveButton(LocaleController.getString(R.string.Start), (dialogInterface, i) -> loadBotSheet.run()); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - fragment.showDialog(builder.create()); + AlertDialog dialog = builder.create(); + fragment.showDialog(dialog); + + messageTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.BotWebViewStartPermission), () -> { + if (dialog != null) { + dialog.dismiss(); + } + Browser.openUrl(context, getString(R.string.BotWebViewStartPermissionLink)); + })); } public static void createClearOrDeleteDialogAlert(BaseFragment fragment, boolean clear, TLRPC.Chat chat, TLRPC.User user, boolean secret, boolean canDeleteHistory, MessagesStorage.BooleanCallback onProcessRunnable) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java index 31b8607ba..4ecc1db01 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java @@ -47,7 +47,7 @@ public class AnimatedEmojiSpan extends ReplacementSpan { public TLRPC.Document document; public String emoji; private float scale; - private float extraScale = 1f; + public float extraScale = 1f; public boolean standard; public boolean full = false; public boolean top = false; @@ -79,7 +79,6 @@ public class AnimatedEmojiSpan extends ReplacementSpan { public void setAdded() { isAdded = true; extraScale = 0f; - lockPositionChanging = true; } public void setAnimateChanges() { @@ -94,8 +93,13 @@ public class AnimatedEmojiSpan extends ReplacementSpan { public float getExtraScale() { if (isAdded) { + lockPositionChanging = true; isAdded = false; extraScale = 0f; + if (scaleAnimator != null) { + scaleAnimator.removeAllListeners(); + scaleAnimator.cancel(); + } scaleAnimator = ValueAnimator.ofFloat(extraScale, 1f); scaleAnimator.addUpdateListener(animator -> { extraScale = (float) animator.getAnimatedValue(); @@ -106,6 +110,7 @@ public class AnimatedEmojiSpan extends ReplacementSpan { @Override public void onAnimationEnd(Animator animation) { scaleAnimator = null; + lockPositionChanging = false; } }); scaleAnimator.setDuration(130); @@ -521,7 +526,7 @@ public class AnimatedEmojiSpan extends ReplacementSpan { if (clone && textLayout.getText() instanceof Spannable) { int start = spanned.getSpanStart(span), end = spanned.getSpanEnd(span); ((Spannable) spanned).removeSpan(span); - ((Spannable) spanned).setSpan(span = cloneSpan(span), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ((Spannable) spanned).setSpan(span = cloneSpan(span, null), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } AnimatedEmojiHolder holder = null; if (prev == null) { @@ -972,12 +977,15 @@ public class AnimatedEmojiSpan extends ReplacementSpan { } } - public static AnimatedEmojiSpan cloneSpan(AnimatedEmojiSpan span) { + public static AnimatedEmojiSpan cloneSpan(AnimatedEmojiSpan span, Paint.FontMetricsInt fontMetricsInt) { AnimatedEmojiSpan animatedEmojiSpan; if (span.document != null) { - animatedEmojiSpan = new AnimatedEmojiSpan(span.document, span.fontMetrics); + animatedEmojiSpan = new AnimatedEmojiSpan(span.document, fontMetricsInt != null ? fontMetricsInt : span.fontMetrics); } else { - animatedEmojiSpan = new AnimatedEmojiSpan(span.documentId, span.scale, span.fontMetrics); + animatedEmojiSpan = new AnimatedEmojiSpan(span.documentId, span.scale, fontMetricsInt != null ? fontMetricsInt : span.fontMetrics); + } + if (fontMetricsInt != null) { + animatedEmojiSpan.size = span.size; } animatedEmojiSpan.fromEmojiKeyboard = span.fromEmojiKeyboard; animatedEmojiSpan.isAdded = span.isAdded; @@ -986,10 +994,14 @@ public class AnimatedEmojiSpan extends ReplacementSpan { } public static CharSequence cloneSpans(CharSequence text) { - return cloneSpans(text, -1); + return cloneSpans(text, -1, null); } public static CharSequence cloneSpans(CharSequence text, int newCacheType) { + return cloneSpans(text, newCacheType, null); + } + + public static CharSequence cloneSpans(CharSequence text, int newCacheType, Paint.FontMetricsInt fontMetricsInt) { if (!(text instanceof Spanned)) { return text; } @@ -1014,7 +1026,7 @@ public class AnimatedEmojiSpan extends ReplacementSpan { AnimatedEmojiSpan oldSpan = (AnimatedEmojiSpan) spans[i]; newText.removeSpan(oldSpan); - AnimatedEmojiSpan newSpan = cloneSpan(oldSpan); + AnimatedEmojiSpan newSpan = cloneSpan(oldSpan, fontMetricsInt); if (newCacheType != -1) { newSpan.cacheType = newCacheType; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java index 7a7784c8b..a81116148 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java @@ -663,6 +663,29 @@ public class AnimatedFileDrawable extends BitmapDrawable implements Animatable, } } +// public void seekToSync(long ms) { +// if (nativePtr != 0) { +// if (renderingBitmap == null) { +// if (!unusedBitmaps.isEmpty()) { +// renderingBitmap = unusedBitmaps.remove(0); +// } else { +// renderingBitmap = Bitmap.createBitmap((int) (metaData[0] * scaleFactor), (int) (metaData[1] * scaleFactor), Bitmap.Config.ARGB_8888); +// } +// } +// if (decodeQueue == null) { +// decodeQueue = new DispatchQueue("decodeQueue" + this); +// } +// decodeQueue.postRunnable(() -> { +// prepareToSeek(nativePtr); +// seekToMs(nativePtr, ms, false); +// getVideoFrame(nativePtr, renderingBitmap, metaData, renderingBitmap.getRowBytes(), false, startTime, endTime, true); +// AndroidUtilities.runOnUIThread(() -> { +// invalidateInternal(); +// }); +// }); +// } +// } + public void recycle() { if (!secondParentViews.isEmpty()) { recycleWithSecond = true; @@ -1184,14 +1207,14 @@ public class AnimatedFileDrawable extends BitmapDrawable implements Animatable, bitmap = Bitmap.createBitmap(renderingWidth, renderingHeight, Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); - if (generatingCacheBitmap == null) { - generatingCacheBitmap = Bitmap.createBitmap(metaData[0], metaData[1], Bitmap.Config.ARGB_8888); - } long nativePtr = createDecoder(path.getAbsolutePath(), metaData, currentAccount, streamFileSize, stream, false); if (nativePtr == 0) { return bitmap; } + if (generatingCacheBitmap == null) { + generatingCacheBitmap = Bitmap.createBitmap(Math.max(1, metaData[0]), Math.max(1, metaData[1]), Bitmap.Config.ARGB_8888); + } getVideoFrame(nativePtr, generatingCacheBitmap, metaData, generatingCacheBitmap.getRowBytes(), false, startTime, endTime, true); destroyDecoder(nativePtr); bitmap.eraseColor(Color.TRANSPARENT); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java index 0fed232e6..90e980082 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java @@ -18,6 +18,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; +import android.graphics.RectF; import android.graphics.Shader; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -1055,12 +1056,21 @@ public class AnimatedTextView extends View { this.bounds.set(bounds); } + public void setBounds(@NonNull RectF bounds) { + setBounds((int) bounds.left, (int) bounds.top, (int) bounds.right, (int) bounds.bottom); + } + @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); this.bounds.set(left, top, right, bottom); } + public void setBounds(float left, float top, float right, float bottom) { + super.setBounds((int) left, (int) top, (int) right, (int) bottom); + this.bounds.set((int) left, (int) top, (int) right, (int) bottom); + } + @NonNull @Override public Rect getDirtyBounds() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java index 77d76cb50..c3bb22850 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java @@ -414,35 +414,7 @@ public class AvatarDrawable extends Drawable { color2 = profileColor.getAvatarColor2(); } } else if (customColor != null) { - if (customColor >= 14) { - MessagesController messagesController = MessagesController.getInstance(UserConfig.selectedAccount); - if (messagesController != null && messagesController.peerColors != null && messagesController.peerColors.getColor(customColor) != null) { - final int peerColor = messagesController.peerColors.getColor(customColor).getColor1(); - if (advancedGradient) { - int[] gradient = advancedGradients[getPeerColorIndex(peerColor)]; - this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); - } else { - color = getThemedColor(Theme.keys_avatar_background[getPeerColorIndex(peerColor)]); - color2 = getThemedColor(Theme.keys_avatar_background2[getPeerColorIndex(peerColor)]); - } - } else { - if (advancedGradient) { - int[] gradient = advancedGradients[getColorIndex(customColor)]; - this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); - } else { - color = getThemedColor(Theme.keys_avatar_background[getColorIndex(customColor)]); - color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(customColor)]); - } - } - } else { - if (advancedGradient) { - int[] gradient = advancedGradients[getColorIndex(customColor)]; - this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); - } else { - color = getThemedColor(Theme.keys_avatar_background[getColorIndex(customColor)]); - color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(customColor)]); - } - } + setPeerColor(customColor); } else { if (advancedGradient) { int[] gradient = advancedGradients[getColorIndex(id)]; @@ -466,6 +438,52 @@ public class AvatarDrawable extends Drawable { getAvatarSymbols(firstName, lastName, custom, stringBuilder); } + public void setPeerColor(int id) { + if (advancedGradient != null) { + hasGradient = false; + hasAdvancedGradient = true; + } else { + hasGradient = true; + hasAdvancedGradient = false; + } + if (id >= 14) { + MessagesController messagesController = MessagesController.getInstance(UserConfig.selectedAccount); + if (messagesController != null && messagesController.peerColors != null && messagesController.peerColors.getColor(id) != null) { + final int peerColor = messagesController.peerColors.getColor(id).getColor1(); + if (advancedGradient != null) { + int[] gradient = advancedGradients[getPeerColorIndex(peerColor)]; + this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); + } else { + color = getThemedColor(Theme.keys_avatar_background[getPeerColorIndex(peerColor)]); + color2 = getThemedColor(Theme.keys_avatar_background2[getPeerColorIndex(peerColor)]); + } + } else { + if (advancedGradient != null) { + int[] gradient = advancedGradients[getColorIndex(id)]; + this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); + } else { + color = getThemedColor(Theme.keys_avatar_background[getColorIndex(id)]); + color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(id)]); + } + } + } else { + if (advancedGradient != null) { + int[] gradient = advancedGradients[getColorIndex(id)]; + this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); + } else { + color = getThemedColor(Theme.keys_avatar_background[getColorIndex(id)]); + color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(id)]); + } + } + } + + public void setText(String text) { + invalidateTextLayout = true; + avatarType = AVATAR_TYPE_NORMAL; + drawDeleted = false; + getAvatarSymbols(text, null, null, stringBuilder); + } + public static void getAvatarSymbols(String firstName, String lastName, String custom, StringBuilder result) { result.setLength(0); if (custom != null) { @@ -520,6 +538,7 @@ public class AvatarDrawable extends Drawable { gradient = new LinearGradient(0, 0, 0, gradientBottom = bounds.height(), gradientColor1 = color, gradientColor2 = color2, Shader.TileMode.CLAMP); } backgroundPaint.setShader(gradient); + backgroundPaint.setAlpha(alpha); } else { backgroundPaint.setShader(null); backgroundPaint.setColor(ColorUtils.setAlphaComponent(getColor(), alpha)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java index 802220a5d..cf7abda28 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java @@ -27,6 +27,7 @@ import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.LaunchActivity; public abstract class BottomSheetWithRecyclerListView extends BottomSheet { @@ -52,6 +53,7 @@ public abstract class BottomSheetWithRecyclerListView extends BottomSheet { private float shadowAlpha = 1f; private boolean showHandle = false; + protected boolean handleOffset; private RectF handleRect = new RectF(); private ActionBarType actionBarType = ActionBarType.FADING; @@ -417,6 +419,9 @@ public abstract class BottomSheetWithRecyclerListView extends BottomSheet { } } top = top - headerHeight - headerPaddingTop - headerPaddingBottom; + if (showHandle && handleOffset) { + top -= dp(actionBarType == ActionBarType.SLIDING ? 8 : 16); + } float handleAlpha = 1.0f; float progressToFullView = 0.0f; @@ -488,6 +493,16 @@ public abstract class BottomSheetWithRecyclerListView extends BottomSheet { } + @Override + public boolean isAttachedLightStatusBar() { + if (actionBar != null && actionBar.getTag() != null) { + return isLightStatusBar(); + } else if (baseFragment != null) { + return baseFragment.isLightStatusBar(); + } + return isLightStatusBar(); + } + private boolean isLightStatusBar() { return ColorUtils.calculateLuminance(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)) > 0.7f; } @@ -518,7 +533,9 @@ public abstract class BottomSheetWithRecyclerListView extends BottomSheet { } private void updateStatusBar() { - if (actionBar != null && actionBar.getTag() != null) { + if (attachedFragment != null) { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + } else if (actionBar != null && actionBar.getTag() != null) { AndroidUtilities.setLightStatusBar(getWindow(), isLightStatusBar()); } else if (baseFragment != null) { AndroidUtilities.setLightStatusBar(getWindow(), baseFragment.isLightStatusBar()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java index 54fe2d473..f83e15346 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java @@ -1,5 +1,6 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.animation.Animator; @@ -337,7 +338,9 @@ public class Bulletin { if (this.canHide != canHide && layout != null) { this.canHide = canHide; if (canHide) { - layout.postDelayed(hideRunnable, duration); + if (duration >= 0) { + layout.postDelayed(hideRunnable, duration); + } } else { layout.removeCallbacks(hideRunnable); } @@ -684,10 +687,10 @@ public class Bulletin { public Layout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider) { super(context); this.resourcesProvider = resourcesProvider; - setMinimumHeight(AndroidUtilities.dp(48)); + setMinimumHeight(dp(48)); setBackground(getThemedColor(Theme.key_undo_background)); updateSize(); - setPadding(AndroidUtilities.dp(8), AndroidUtilities.dp(8), AndroidUtilities.dp(8), AndroidUtilities.dp(8)); + setPadding(dp(8), dp(8), dp(8), dp(8)); setWillNotDraw(false); ScaleStateListAnimator.apply(this, .02f, 1.5f); } @@ -702,7 +705,7 @@ public class Bulletin { } public void setBackground(int color, int rounding) { - background = Theme.createRoundRectDrawable(AndroidUtilities.dp(rounding), color); + background = Theme.createRoundRectDrawable(dp(rounding), color); } public final static FloatPropertyCompat IN_OUT_OFFSET_Y = new FloatPropertyCompat("offsetY") { @@ -1072,19 +1075,19 @@ public class Bulletin { if (clipPaint == null) { clipPaint = new Paint(Paint.ANTI_ALIAS_FLAG); clipPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); - clipGradient = new LinearGradient(0, 0, 0, AndroidUtilities.dp(8), this.top ? new int[]{0xff000000, 0} : new int[]{0, 0xff000000}, new float[]{0, 1}, Shader.TileMode.CLAMP); + clipGradient = new LinearGradient(0, 0, 0, dp(8), this.top ? new int[]{0xff000000, 0} : new int[]{0, 0xff000000}, new float[]{0, 1}, Shader.TileMode.CLAMP); clipMatrix = new Matrix(); clipGradient.setLocalMatrix(clipMatrix); clipPaint.setShader(clipGradient); } canvas.save(); clipMatrix.reset(); - clipMatrix.postTranslate(0, this.top ? top : bottom - AndroidUtilities.dp(8)); + clipMatrix.postTranslate(0, this.top ? top : bottom - dp(8)); clipGradient.setLocalMatrix(clipMatrix); if (this.top) { - canvas.drawRect(0, top, getWidth(), top + AndroidUtilities.dp(8), clipPaint); + canvas.drawRect(0, top, getWidth(), top + dp(8), clipPaint); } else { - canvas.drawRect(0, bottom - AndroidUtilities.dp(8), getWidth(), bottom, clipPaint); + canvas.drawRect(0, bottom - dp(8), getWidth(), bottom, clipPaint); } canvas.restore(); canvas.restore(); @@ -1138,7 +1141,7 @@ public class Bulletin { @Override protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { if (button != null && child != button) { - widthUsed += button.getMeasuredWidth() - AndroidUtilities.dp(12); + widthUsed += button.getMeasuredWidth() - dp(12); } super.measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); if (child != button) { @@ -1209,7 +1212,7 @@ public class Bulletin { addView(imageView, LayoutHelper.createFrameRelatively(30, 30, Gravity.START | Gravity.CENTER_VERTICAL, 12, 8, 12, 8)); textView.setGravity(Gravity.START); - textView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textView.setPadding(0, dp(8), 0, dp(8)); textView.setTextColor(getThemedColor(Theme.key_undo_infoColor)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textView.setTypeface(Typeface.SANS_SERIF); @@ -1263,7 +1266,7 @@ public class Bulletin { public void hideImage() { imageView.setVisibility(GONE); - ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(AndroidUtilities.dp(12)); + ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(dp(12)); } } @@ -1293,7 +1296,7 @@ public class Bulletin { addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 52, 8, 8, 8)); titleTextView = new LinkSpanDrawable.LinksTextView(context); - titleTextView.setPadding(AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4), 0); + titleTextView.setPadding(dp(4), 0, dp(4), 0); titleTextView.setSingleLine(); titleTextView.setTextColor(undoInfoColor); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); @@ -1301,7 +1304,7 @@ public class Bulletin { linearLayout.addView(titleTextView); subtitleTextView = new LinkSpanDrawable.LinksTextView(context); - subtitleTextView.setPadding(AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4), 0); + subtitleTextView.setPadding(dp(4), 0, dp(4), 0); subtitleTextView.setTextColor(undoInfoColor); subtitleTextView.setLinkTextColor(undoLinkColor); subtitleTextView.setTypeface(Typeface.SANS_SERIF); @@ -1332,7 +1335,79 @@ public class Bulletin { public void hideImage() { imageView.setVisibility(GONE); - ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(AndroidUtilities.dp(10)); + ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(dp(10)); + } + } + + public static class TwoLineAnimatedLottieLayout extends ButtonLayout { + + public final RLottieImageView imageView; + public final LinkSpanDrawable.LinksTextView titleTextView; + public final AnimatedTextView subtitleTextView; + private final LinearLayout linearLayout; + + private final int textColor; + + public TwoLineAnimatedLottieLayout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider) { + super(context, resourcesProvider); + this.textColor = getThemedColor(Theme.key_undo_infoColor); + setBackground(getThemedColor(Theme.key_undo_background)); + + imageView = new RLottieImageView(context); + imageView.setScaleType(ImageView.ScaleType.CENTER); + addView(imageView, LayoutHelper.createFrameRelatively(56, 48, Gravity.START | Gravity.CENTER_VERTICAL)); + + final int undoInfoColor = getThemedColor(Theme.key_undo_infoColor); + final int undoLinkColor = getThemedColor(Theme.key_undo_cancelColor); + + linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 52, 8, 8, 8)); + + titleTextView = new LinkSpanDrawable.LinksTextView(context); + titleTextView.setPadding(dp(4), 0, dp(4), 0); + titleTextView.setSingleLine(); + titleTextView.setTextColor(undoInfoColor); + titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + titleTextView.setTypeface(AndroidUtilities.bold()); + linearLayout.addView(titleTextView); + + subtitleTextView = new AnimatedTextView(context, false, true, true); + subtitleTextView.setPadding(dp(4), 0, dp(4), 0); + subtitleTextView.setTextColor(undoInfoColor); + subtitleTextView.setTypeface(Typeface.SANS_SERIF); + subtitleTextView.setTextSize(dp(13)); + linearLayout.addView(subtitleTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, dp(6))); + } + + public void setSubtitle(CharSequence text, boolean animated) { + subtitleTextView.setText(text, animated); + } + + @Override + protected void onShow() { + super.onShow(); + imageView.playAnimation(); + } + + public void setAnimation(int resId, String... layers) { + setAnimation(resId, 32, 32, layers); + } + + public void setAnimation(int resId, int w, int h, String... layers) { + imageView.setAnimation(resId, w, h); + for (String layer : layers) { + imageView.setLayerColor(layer + ".**", textColor); + } + } + + public CharSequence getAccessibilityText() { + return titleTextView.getText() + ".\n" + subtitleTextView.getText(); + } + + public void hideImage() { + imageView.setVisibility(GONE); + ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(dp(10)); } } @@ -1385,7 +1460,7 @@ public class Bulletin { return super.dispatchTouchEvent(ev); } }; - reactionsContainerLayout.setPadding(AndroidUtilities.dp(4), AndroidUtilities.dp(24), AndroidUtilities.dp(4), AndroidUtilities.dp(0)); + reactionsContainerLayout.setPadding(dp(4), dp(24), dp(4), dp(0)); reactionsContainerLayout.setDelegate(new ReactionsContainerLayout.ReactionsContainerDelegate() { @Override public void onReactionClicked(View view, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean longpress, boolean addToRecent) { @@ -1442,7 +1517,7 @@ public class Bulletin { reactionsContainerLayout.setClipChildren(false); reactionsContainerLayout.setClipToPadding(false); reactionsContainerLayout.setVisibility(View.VISIBLE); - reactionsContainerLayout.setBubbleOffset(-AndroidUtilities.dp(80)); + reactionsContainerLayout.setBubbleOffset(-dp(80)); reactionsContainerLayout.setHint(LocaleController.getString(R.string.SavedTagReactionsHint)); addView(reactionsContainerLayout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 92.5f, Gravity.CENTER_HORIZONTAL, 0, 36, 0, 0)); reactionsContainerLayout.setMessage(null, null, true); @@ -1471,7 +1546,7 @@ public class Bulletin { @Override protected int getMeasuredBackgroundHeight() { - return textView.getMeasuredHeight() + AndroidUtilities.dp(30); + return textView.getMeasuredHeight() + dp(30); } @Override @@ -1503,7 +1578,7 @@ public class Bulletin { @Override public void setText(CharSequence text, BufferType type) { - text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), AndroidUtilities.dp(13), false); + text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), dp(13), false); super.setText(text, type); } }; @@ -1512,7 +1587,7 @@ public class Bulletin { textView.setTypeface(Typeface.SANS_SERIF); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textView.setEllipsize(TextUtils.TruncateAt.END); - textView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textView.setPadding(0, dp(8), 0, dp(8)); addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 56, 0, 8, 0)); textView.setLinkTextColor(getThemedColor(Theme.key_undo_cancelColor)); @@ -1582,7 +1657,7 @@ public class Bulletin { textLoadingView.setTypeface(Typeface.SANS_SERIF); textLoadingView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textLoadingView.setEllipsize(TextUtils.TruncateAt.END); - textLoadingView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textLoadingView.setPadding(0, dp(8), 0, dp(8)); textView.setVisibility(View.GONE); addView(textLoadingView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 56, 0, 8, 0)); @@ -1622,14 +1697,14 @@ public class Bulletin { avatarsImageView = new AvatarsImageView(context, false); avatarsImageView.setStyle(AvatarsDrawable.STYLE_MESSAGE_SEEN); - avatarsImageView.setAvatarsTextSize(AndroidUtilities.dp(18)); + avatarsImageView.setAvatarsTextSize(dp(18)); addView(avatarsImageView, LayoutHelper.createFrameRelatively(24 + 12 + 12 + 8, 48, Gravity.START | Gravity.CENTER_VERTICAL, 12, 0, 0, 0)); if (!subtitle) { textView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { - text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), AndroidUtilities.dp(13), false); + text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), dp(13), false); super.setText(text, type); } }; @@ -1637,33 +1712,35 @@ public class Bulletin { textView.setTypeface(Typeface.SANS_SERIF); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textView.setEllipsize(TextUtils.TruncateAt.END); - textView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textView.setPadding(0, dp(8), 0, dp(8)); textView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 12 + 56 + 2, 0, 12, 0)); } else { linearLayout = new LinearLayout(getContext()); linearLayout.setOrientation(LinearLayout.VERTICAL); - addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 18 + 56 + 2, 0, 12, 0)); + addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 18 + 56 + 2, 6, 12, 6)); textView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { - text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), AndroidUtilities.dp(13), false); + text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), dp(13), false); super.setText(text, type); } }; NotificationCenter.listenEmojiLoading(textView); textView.setTypeface(Typeface.SANS_SERIF); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setTypeface(AndroidUtilities.bold()); textView.setEllipsize(TextUtils.TruncateAt.END); textView.setMaxLines(1); linearLayout.addView(textView); subtitleView = new LinkSpanDrawable.LinksTextView(context); subtitleView.setTypeface(Typeface.SANS_SERIF); - subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); subtitleView.setEllipsize(TextUtils.TruncateAt.END); - subtitleView.setMaxLines(1); + subtitleView.setSingleLine(false); + subtitleView.setMaxLines(3); subtitleView.setLinkTextColor(getThemedColor(Theme.key_undo_cancelColor)); linearLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 0, 0)); } @@ -1746,7 +1823,7 @@ public class Bulletin { private Runnable delayedAction; private Bulletin bulletin; - private TextView undoTextView; + public TextView undoTextView; private boolean isUndone; public UndoButton(@NonNull Context context, boolean text) { @@ -1862,10 +1939,10 @@ public class Bulletin { } } - private static class TimerView extends View { + public static class TimerView extends View { private final Paint progressPaint; - private long timeLeft; + public long timeLeft; private int prevSeconds; private String timeLeftString; private int textWidth; @@ -1884,22 +1961,27 @@ public class Bulletin { super(context); textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - textPaint.setTextSize(AndroidUtilities.dp(12)); - textPaint.setTypeface(AndroidUtilities.bold()); - textPaint.setColor(Theme.getColor(Theme.key_undo_infoColor, resourcesProvider)); + textPaint.setTextSize(dp(12)); + textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/num.otf")); progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); progressPaint.setStyle(Paint.Style.STROKE); - progressPaint.setStrokeWidth(AndroidUtilities.dp(2)); + progressPaint.setStrokeWidth(dp(2)); progressPaint.setStrokeCap(Paint.Cap.ROUND); - progressPaint.setColor(Theme.getColor(Theme.key_undo_infoColor, resourcesProvider)); + + setColor(Theme.getColor(Theme.key_undo_infoColor, resourcesProvider)); + } + + public void setColor(int color) { + textPaint.setColor(color); + progressPaint.setColor(color); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int newSeconds = timeLeft > 0 ? (int) Math.ceil(timeLeft / 1000.0f) : 0; - rect.set(AndroidUtilities.dp(1), AndroidUtilities.dp(1), getMeasuredWidth() - AndroidUtilities.dp(1), getMeasuredHeight() - AndroidUtilities.dp(1)); + rect.set(dp(1), dp(1), getMeasuredWidth() - dp(1), getMeasuredHeight() - dp(1)); if (prevSeconds != newSeconds) { prevSeconds = newSeconds; timeLeftString = String.valueOf(Math.max(0, newSeconds)); @@ -1926,7 +2008,7 @@ public class Bulletin { if (timeLayoutOut != null && timeReplaceProgress < 1f) { textPaint.setAlpha((int) (alpha * (1f - timeReplaceProgress))); canvas.save(); - canvas.translate(rect.centerX() - textWidthOut / 2f, rect.centerY() - timeLayoutOut.getHeight() / 2f + AndroidUtilities.dp(10) * timeReplaceProgress); + canvas.translate(rect.centerX() - textWidthOut / 2f, rect.centerY() - timeLayoutOut.getHeight() / 2f + dp(10) * timeReplaceProgress - dp(.5f)); timeLayoutOut.draw(canvas); textPaint.setAlpha(alpha); canvas.restore(); @@ -1937,7 +2019,7 @@ public class Bulletin { textPaint.setAlpha((int) (alpha * timeReplaceProgress)); } canvas.save(); - canvas.translate(rect.centerX() - textWidth / 2f, rect.centerY() - timeLayout.getHeight() / 2f - AndroidUtilities.dp(10) * (1f - timeReplaceProgress)); + canvas.translate(rect.centerX() - textWidth / 2f, rect.centerY() - timeLayout.getHeight() / 2f - dp(10) * (1f - timeReplaceProgress) - dp(.5f)); timeLayout.draw(canvas); if (timeReplaceProgress != 1f) { textPaint.setAlpha(alpha); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java index 3a0ef6813..1181f5d6d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java @@ -406,6 +406,10 @@ public final class BulletinFactory { return createUsersBulletin(users, text, null, null); } + public Bulletin createUsersBulletin(List users, CharSequence text, CharSequence subtitle) { + return createUsersBulletin(users, text, subtitle, null); + } + public Bulletin createUsersBulletin(List users, CharSequence text, CharSequence subtitle, UndoObject undoObject) { final Bulletin.UsersLayout layout = new Bulletin.UsersLayout(getContext(), subtitle != null, resourcesProvider); int count = 0; @@ -436,8 +440,8 @@ public final class BulletinFactory { layout.textView.setMaxLines(1); layout.textView.setText(text); layout.subtitleView.setText(subtitle); - layout.subtitleView.setSingleLine(true); - layout.subtitleView.setMaxLines(1); + layout.subtitleView.setSingleLine(false); + layout.subtitleView.setMaxLines(3); if (layout.linearLayout.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) { int margin = AndroidUtilities.dp(12 + 56 + 2 - (3 - count) * 12); if (count == 1) { @@ -879,7 +883,7 @@ public final class BulletinFactory { return create(layout, Bulletin.DURATION_SHORT); } - private Bulletin create(Bulletin.Layout layout, int duration) { + public Bulletin create(Bulletin.Layout layout, int duration) { if (fragment != null) { return Bulletin.make(fragment, layout, duration); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java index ca7ed2c90..b519ac505 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java @@ -145,6 +145,7 @@ import org.telegram.messenger.camera.CameraController; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; @@ -179,9 +180,9 @@ import org.telegram.ui.bots.BotCommandsMenuContainer; import org.telegram.ui.bots.BotCommandsMenuView; import org.telegram.ui.bots.BotKeyboardView; import org.telegram.ui.bots.BotWebViewAttachedSheet; -import org.telegram.ui.bots.BotWebViewMenuContainer; import org.telegram.ui.bots.BotWebViewSheet; import org.telegram.ui.bots.ChatActivityBotWebViewButton; +import org.telegram.ui.bots.WebViewRequestProps; import java.io.File; import java.io.FileOutputStream; @@ -389,7 +390,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific private String botMenuWebViewTitle; private String botMenuWebViewUrl; - public BotWebViewMenuContainer botWebViewMenuContainer; +// public BotWebViewMenuContainer botWebViewMenuContainer; private ChatActivityBotWebViewButton botWebViewButton; @Nullable @@ -759,7 +760,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific private Runnable openKeyboardRunnable = new Runnable() { @Override public void run() { - if (hasBotWebView() && botCommandsMenuIsShowing()) { + if (hasBotWebView() && botCommandsMenuIsShowing() || BaseFragment.hasSheets(parentFragment)) { return; } @@ -2570,12 +2571,12 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific showRestrictedHint(); return; } - if (hasBotWebView() && botCommandsMenuIsShowing()) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(v::callOnClick); - } - return; - } +// if (hasBotWebView() && botCommandsMenuIsShowing()) { +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(v::callOnClick); +// } +// return; +// } if (!isPopupShowing() || currentPopupContentType != 0) { showPopup(1, 0); @@ -3283,10 +3284,10 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific AndroidUtilities.updateViewVisibilityAnimated(botButton, false, 0.1f, false); attachLayout.addView(botButton, 0, LayoutHelper.createLinear(48, 48)); botButton.setOnClickListener(v -> { - if (hasBotWebView() && botCommandsMenuIsShowing()) { - botWebViewMenuContainer.dismiss(v::callOnClick); - return; - } +// if (hasBotWebView() && botCommandsMenuIsShowing()) { +// botWebViewMenuContainer.dismiss(v::callOnClick); +// return; +// } if (searchingType != 0) { setSearchingTypeInternal(0, false); emojiView.closeSearch(false); @@ -3906,9 +3907,10 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } openWebViewMenu(); - } else if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(); } +// else if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(); +// } return; } @@ -3968,13 +3970,23 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific createBotWebViewMenuContainer(); Runnable onRequestWebView = () -> { AndroidUtilities.hideKeyboard(this); - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, dialog_id, dialog_id, botMenuWebViewTitle, botMenuWebViewUrl, BotWebViewSheet.TYPE_BOT_MENU_BUTTON, 0, false, null, false, null, null, 0, false); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, dialog_id, dialog_id, botMenuWebViewTitle, botMenuWebViewUrl, BotWebViewAttachedSheet.TYPE_BOT_MENU_BUTTON, 0, false, null, false, null, null, 0, false); if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { if (botCommandsMenuButton != null) { botCommandsMenuButton.setOpened(false); } return; } + if (AndroidUtilities.isWebAppLink(botMenuWebViewUrl)) { + Browser.Progress progress = new Browser.Progress(); + progress.onEnd(() -> { + if (botCommandsMenuButton != null) { + botCommandsMenuButton.setOpened(false); + } + }); + Browser.openAsInternalIntent(getContext(), botMenuWebViewUrl, false, progress); + return; + } if (AndroidUtilities.isTablet()) { BotWebViewSheet webViewSheet = new BotWebViewSheet(getContext(), resourcesProvider); webViewSheet.setDefaultFullsize(false); @@ -3987,7 +3999,18 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific botCommandsMenuButton.setOpened(false); } } else { - botWebViewMenuContainer.show(currentAccount, dialog_id, botMenuWebViewUrl); + if (parentFragment != null && parentFragment.getParentActivity() != null) { + BotWebViewAttachedSheet sheet = parentFragment.createBotViewer(); + sheet.setDefaultFullsize(false); + sheet.setNeedsContext(false); + sheet.setParentActivity(parentFragment.getParentActivity()); + sheet.requestWebView(null, props); + sheet.show(); + + if (botCommandsMenuButton != null) { + botCommandsMenuButton.setOpened(false); + } + } } }; @@ -4616,25 +4639,25 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } private void createBotWebViewMenuContainer() { - if (botWebViewMenuContainer != null) { - return; - } - botWebViewMenuContainer = new BotWebViewMenuContainer(getContext(), this) { - @Override - public void onDismiss() { - super.onDismiss(); - if (botCommandsMenuButton != null) { - botCommandsMenuButton.setOpened(false); - } - } - }; - sizeNotifierLayout.addView(botWebViewMenuContainer, 15, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.BOTTOM)); - botWebViewMenuContainer.setVisibility(GONE); - botWebViewMenuContainer.setOnDismissGlobalListener(()->{ - if (botButtonsMessageObject != null && (messageEditText == null || TextUtils.isEmpty(messageEditText.getTextToUse())) && !botWebViewMenuContainer.hasSavedText()) { - showPopup(1, POPUP_CONTENT_BOT_KEYBOARD); - } - }); +// if (botWebViewMenuContainer != null) { +// return; +// } +// botWebViewMenuContainer = new BotWebViewMenuContainer(getContext(), this) { +// @Override +// public void onDismiss() { +// super.onDismiss(); +// if (botCommandsMenuButton != null) { +// botCommandsMenuButton.setOpened(false); +// } +// } +// }; +// sizeNotifierLayout.addView(botWebViewMenuContainer, 15, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.BOTTOM)); +// botWebViewMenuContainer.setVisibility(GONE); +// botWebViewMenuContainer.setOnDismissGlobalListener(()->{ +// if (botButtonsMessageObject != null && (messageEditText == null || TextUtils.isEmpty(messageEditText.getTextToUse())) && !botWebViewMenuContainer.hasSavedText()) { +// showPopup(1, POPUP_CONTENT_BOT_KEYBOARD); +// } +// }); } private ArrayList messageEditTextWatchers; @@ -5643,15 +5666,15 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } public void onAdjustPanTransitionUpdate(float y, float progress, boolean keyboardVisible) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.setTranslationY(y); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.setTranslationY(y); +// } } public void onAdjustPanTransitionEnd() { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.onPanTransitionEnd(); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.onPanTransitionEnd(); +// } if (onKeyboardClosed != null) { onKeyboardClosed.run(); onKeyboardClosed = null; @@ -5659,9 +5682,9 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } public void onAdjustPanTransitionStart(boolean keyboardVisible, int contentHeight) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.onPanTransitionStart(keyboardVisible, contentHeight); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.onPanTransitionStart(keyboardVisible, contentHeight); +// } if (keyboardVisible && showTopViewRunnable != null) { AndroidUtilities.cancelRunOnUIThread(showTopViewRunnable); showTopViewRunnable.run(); @@ -5672,9 +5695,9 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific setTextFieldRunnable.run(); } - if (keyboardVisible && messageEditText != null && messageEditText.hasFocus() && hasBotWebView() && botCommandsMenuIsShowing() && botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(); - } +// if (keyboardVisible && messageEditText != null && messageEditText.hasFocus() && hasBotWebView() && botCommandsMenuIsShowing() && botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(); +// } } private void onWindowSizeChanged() { @@ -5867,7 +5890,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } int visibility = getVisibility(); - if (showKeyboardOnResume && parentFragment != null && parentFragment.isLastFragment()) { + if (showKeyboardOnResume && !BaseFragment.hasSheets(parentFragment)) { showKeyboardOnResume = false; if (delegate != null) { delegate.onKeyboardRequested(); @@ -6077,7 +6100,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific TLRPC.Chat chat = accountInstance.getMessagesController().getChat(-dialog_id); TLRPC.ChatFull chatFull = accountInstance.getMessagesController().getChatFull(-dialog_id); isChannel = ChatObject.isChannelAndNotMegaGroup(chat); - anonymously = ChatObject.getSendAsPeerId(chat, chatFull) == -dialog_id; + anonymously = isChannel ? chat != null && !chat.signatures && !chat.signature_profiles : ChatObject.getSendAsPeerId(chat, chatFull) == -dialog_id; } if (anonymously) { messageEditText.setHintText(getString("SendAnonymously", R.string.SendAnonymously)); @@ -9268,8 +9291,11 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific if (messageEditText == null || am.isTouchExplorationEnabled()) { return; } + if (focus && BaseFragment.hasSheets(parentFragment)) { + focus = false; + } if (focus) { - if (searchingType == 0 && !messageEditText.isFocused() && (botWebViewMenuContainer == null || botWebViewMenuContainer.getVisibility() == View.GONE)) { + if (searchingType == 0 && !messageEditText.isFocused()/* && (botWebViewMenuContainer == null || botWebViewMenuContainer.getVisibility() == View.GONE)*/) { AndroidUtilities.runOnUIThread(focusRunnable = () -> { focusRunnable = null; boolean allowFocus; @@ -9509,13 +9535,15 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific return; } createMessageEditText(); + TLRPC.Chat chat = parentFragment.getMessagesController().getChat(-dialog_id); TLRPC.ChatFull full = parentFragment.getMessagesController().getChatFull(-dialog_id); TLRPC.Peer defPeer = full != null ? full.default_send_as : null; if (defPeer == null && delegate.getSendAsPeers() != null && !delegate.getSendAsPeers().peers.isEmpty()) { defPeer = delegate.getSendAsPeers().peers.get(0).peer; } boolean isVisible = defPeer != null && (delegate.getSendAsPeers() == null || delegate.getSendAsPeers().peers.size() > 1) && - !isEditingMessage() && !isRecordingAudioVideo() && (recordedAudioPanel == null || recordedAudioPanel.getVisibility() != View.VISIBLE); + !isEditingMessage() && !isRecordingAudioVideo() && (recordedAudioPanel == null || recordedAudioPanel.getVisibility() != View.VISIBLE) && + (!ChatObject.isChannelAndNotMegaGroup(chat) || ChatObject.canSendAsPeers(chat)); if (isVisible) { createSenderSelectView(); } @@ -9649,7 +9677,8 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } public boolean onBotWebViewBackPressed() { - return botWebViewMenuContainer != null && botWebViewMenuContainer.onBackPressed(); + return false; +// return botWebViewMenuContainer != null && botWebViewMenuContainer.onBackPressed(); } public boolean hasBotWebView() { @@ -9878,7 +9907,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific return; } - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, messageObject.messageOwner.dialog_id, botId, button.text, button.url, button instanceof TLRPC.TL_keyboardButtonSimpleWebView ? BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON : BotWebViewSheet.TYPE_WEB_VIEW_BUTTON, replyMessageObject != null ? replyMessageObject.messageOwner.id : 0, false, null, false, null, null, 0, false); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, messageObject.messageOwner.dialog_id, botId, button.text, button.url, button instanceof TLRPC.TL_keyboardButtonSimpleWebView ? BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON : BotWebViewSheet.TYPE_WEB_VIEW_BUTTON, replyMessageObject != null ? replyMessageObject.messageOwner.id : 0, false, null, false, null, null, 0, false); if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { if (botCommandsMenuButton != null) { botCommandsMenuButton.setOpened(false); @@ -10987,7 +11016,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } public void openKeyboardInternal() { - if (hasBotWebView() && botCommandsMenuIsShowing()) { + if (hasBotWebView() && botCommandsMenuIsShowing() || BaseFragment.hasSheets(parentFragment)) { return; } showPopup(AndroidUtilities.usingHardwareInput || AndroidUtilities.isInMultiwindow || parentFragment != null && parentFragment.isInBubbleMode() || isPaused ? 0 : 2, 0); @@ -11027,7 +11056,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } public void openKeyboard() { - if (hasBotWebView() && botCommandsMenuIsShowing()) { + if (hasBotWebView() && botCommandsMenuIsShowing() || BaseFragment.hasSheets(parentFragment)) { return; } if (delegate != null) { @@ -11175,7 +11204,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific checkBotMenu(); if (keyboardVisible && isPopupShowing() && stickersExpansionAnim == null) { showPopup(0, currentPopupContentType); - } else if (!keyboardVisible && !isPopupShowing() && botButtonsMessageObject != null && replyingMessageObject != botButtonsMessageObject && (!hasBotWebView() || !botCommandsMenuIsShowing()) && (messageEditText == null || TextUtils.isEmpty(messageEditText.getText())) && botReplyMarkup != null && !botReplyMarkup.rows.isEmpty()) { + } else if (!keyboardVisible && !isPopupShowing() && botButtonsMessageObject != null && replyingMessageObject != botButtonsMessageObject && (!hasBotWebView() && !botCommandsMenuIsShowing() && !BaseFragment.hasSheets(parentFragment)) && (messageEditText == null || TextUtils.isEmpty(messageEditText.getText())) && botReplyMarkup != null && !botReplyMarkup.rows.isEmpty()) { if (sizeNotifierLayout.adjustPanLayoutHelper.animationInProgress()) { sizeNotifierLayout.adjustPanLayoutHelper.stopTransition(); } else { @@ -11463,11 +11492,11 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific updateRecordInterface(RECORD_STATE_CANCEL_BY_TIME, true); } else if (id == NotificationCenter.updateBotMenuButton) { long botId = (long) args[0]; - TLRPC.BotMenuButton botMenuButton = (TLRPC.BotMenuButton) args[1]; + TL_bots.BotMenuButton botMenuButton = (TL_bots.BotMenuButton) args[1]; if (botId == dialog_id) { - if (botMenuButton instanceof TLRPC.TL_botMenuButton) { - TLRPC.TL_botMenuButton webViewButton = (TLRPC.TL_botMenuButton) botMenuButton; + if (botMenuButton instanceof TL_bots.TL_botMenuButton) { + TL_bots.TL_botMenuButton webViewButton = (TL_bots.TL_botMenuButton) botMenuButton; botMenuWebViewTitle = webViewButton.text; botMenuWebViewUrl = webViewButton.url; botMenuButtonType = BotMenuButtonType.WEB_VIEW; @@ -11726,7 +11755,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific if (isInVideoMode() && recordedAudioPanel != null && recordedAudioPanel.getVisibility() == View.VISIBLE) { return false; } - if (hasBotWebView() && botCommandsMenuButton.isOpened()) { + if (hasBotWebView() && botCommandsMenuButton.isOpened() || BaseFragment.hasSheets(parentFragment)) { return false; } return true; @@ -12331,11 +12360,11 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific botWebViewButton.getLayoutParams().height = getMeasuredHeight() - dp(2); measureChild(botWebViewButton, widthMeasureSpec, heightMeasureSpec); } - if (botWebViewMenuContainer != null) { - MarginLayoutParams params = (MarginLayoutParams) botWebViewMenuContainer.getLayoutParams(); - params.bottomMargin = messageEditText == null ? 0 : messageEditText.getMeasuredHeight(); - measureChild(botWebViewMenuContainer, widthMeasureSpec, heightMeasureSpec); - } +// if (botWebViewMenuContainer != null) { +// MarginLayoutParams params = (MarginLayoutParams) botWebViewMenuContainer.getLayoutParams(); +// params.bottomMargin = messageEditText == null ? 0 : messageEditText.getMeasuredHeight(); +// measureChild(botWebViewMenuContainer, widthMeasureSpec, heightMeasureSpec); +// } } @Override @@ -12357,20 +12386,20 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } } - private LongSparseArray lastBotInfo; + private LongSparseArray lastBotInfo; - public void setBotInfo(LongSparseArray botInfo) { + public void setBotInfo(LongSparseArray botInfo) { setBotInfo(botInfo, true); } - public void setBotInfo(LongSparseArray botInfo, boolean animate) { + public void setBotInfo(LongSparseArray botInfo, boolean animate) { lastBotInfo = botInfo; if (botInfo.size() == 1 && botInfo.valueAt(0).user_id == dialog_id) { - TLRPC.BotInfo info = botInfo.valueAt(0); - TLRPC.BotMenuButton menuButton = info.menu_button; - if (menuButton instanceof TLRPC.TL_botMenuButton) { - TLRPC.TL_botMenuButton webViewButton = (TLRPC.TL_botMenuButton) menuButton; + TL_bots.BotInfo info = botInfo.valueAt(0); + TL_bots.BotMenuButton menuButton = info.menu_button; + if (menuButton instanceof TL_bots.TL_botMenuButton) { + TL_bots.TL_botMenuButton webViewButton = (TL_bots.TL_botMenuButton) menuButton; botMenuWebViewTitle = webViewButton.text; botMenuWebViewUrl = webViewButton.url; botMenuButtonType = BotMenuButtonType.WEB_VIEW; @@ -12400,9 +12429,9 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific } if (hasBotWebView()) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(); +// } } else { if (botCommandsMenuContainer != null) { botCommandsMenuContainer.dismiss(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java index 9df5e46c6..256d41ee4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java @@ -127,7 +127,7 @@ import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.recorder.StoryEntry; import org.telegram.ui.WebAppDisclaimerAlert; -import org.telegram.ui.bots.BotWebViewContainer; +import org.telegram.ui.web.BotWebViewContainer; import org.telegram.ui.bots.BotWebViewMenuContainer; import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout; @@ -205,6 +205,11 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N webViewLayout.setNeedCloseConfirmation(needConfirmation); } + @Override + public void onWebAppSwipingBehavior(boolean allowSwipes) { + webViewLayout.setAllowSwipes(allowSwipes); + } + @Override public void onCloseRequested(Runnable callback) { if (currentAttachLayout != webViewLayout) { @@ -818,6 +823,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N protected boolean typeButtonsAvailable; private boolean stories; + public boolean storyMediaPicker; boolean sendButtonEnabled = true; private float sendButtonEnabledProgress = 1f; @@ -1918,7 +1924,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N if (currentSheetAnimationType == 1) { if (translationY < 0) { currentAttachLayout.setTranslationY(translationY); - if (avatarPicker != 0) { + if (avatarPicker != 0 || storyMediaPicker) { headerView.setTranslationY(baseSelectedTextViewTranslationY + translationY - currentPanTranslationY); } translationY = 0; @@ -2412,7 +2418,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N showBotLayout(button.attachMenuBot.bot_id, true); MediaDataController.getInstance(currentAccount).updateAttachMenuBotsInCache(); }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, null); + }, null, null); } else { showBotLayout(button.attachMenuBot.bot_id, true); } @@ -4326,7 +4332,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N } float offset = actionBar.getAlpha() != 0 ? 0.0f : AndroidUtilities.dp(26 * (1.0f - headerView.getAlpha())); - if (menuShowed && avatarPicker == 0) { + if (menuShowed && avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setTranslationY(scrollOffset - AndroidUtilities.dp(37 + finalMove * moveProgress) + offset + currentPanTranslationY); } else { selectedMenuItem.setTranslationY(ActionBar.getCurrentActionBarHeight() - AndroidUtilities.dp(4) - AndroidUtilities.dp(37 + finalMove) + currentPanTranslationY); @@ -4364,7 +4370,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N } boolean needsSearchItem = searchItem != null && (avatarSearch || false && currentAttachLayout == photoLayout && !menuShowed && baseFragment instanceof ChatActivity && ((ChatActivity) baseFragment).allowSendGifs() && ((ChatActivity) baseFragment).allowSendPhotos()); - boolean needMoreItem = !isPhotoPicker && (avatarPicker != 0 || !menuShowed) && currentAttachLayout == photoLayout && (photosEnabled || videosEnabled); + boolean needMoreItem = !isPhotoPicker && !storyMediaPicker && (avatarPicker != 0 || !menuShowed) && currentAttachLayout == photoLayout && (photosEnabled || videosEnabled); if (currentAttachLayout == restrictedLayout) { needsSearchItem = false; needMoreItem = false; @@ -4509,15 +4515,15 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N } currentAttachLayout.onSelectedItemsCountChanged(count); - if (currentAttachLayout == photoLayout && ((baseFragment instanceof ChatActivity) || avatarPicker != 0) && (count == 0 && menuShowed || (count != 0 || avatarPicker != 0) && !menuShowed)) { - menuShowed = count != 0 || avatarPicker != 0; + if (currentAttachLayout == photoLayout && ((baseFragment instanceof ChatActivity) || avatarPicker != 0 || storyMediaPicker) && (count == 0 && menuShowed || (count != 0 || avatarPicker != 0 || storyMediaPicker) && !menuShowed)) { + menuShowed = count != 0 || avatarPicker != 0 || storyMediaPicker; if (menuAnimator != null) { menuAnimator.cancel(); menuAnimator = null; } boolean needsSearchItem = avatarPicker != 0 && searchItem != null && actionBar.getTag() != null && baseFragment instanceof ChatActivity && ((ChatActivity) baseFragment).allowSendGifs(); if (menuShowed) { - if (avatarPicker == 0) { + if (avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setVisibility(View.VISIBLE); } headerView.setVisibility(View.VISIBLE); @@ -4527,7 +4533,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N } } if (animated == 0) { - if (actionBar.getTag() == null && avatarPicker == 0) { + if (actionBar.getTag() == null && avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setAlpha(menuShowed ? 1.0f : 0.0f); } headerView.setAlpha(menuShowed ? 1.0f : 0.0f); @@ -4540,7 +4546,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N } else { menuAnimator = new AnimatorSet(); ArrayList animators = new ArrayList<>(); - if (actionBar.getTag() == null && avatarPicker == 0) { + if (actionBar.getTag() == null && avatarPicker == 0 && !storyMediaPicker) { animators.add(ObjectAnimator.ofFloat(selectedMenuItem, View.ALPHA, menuShowed ? 1.0f : 0.0f)); } animators.add(ObjectAnimator.ofFloat(headerView, View.ALPHA, menuShowed ? 1.0f : 0.0f)); @@ -4553,7 +4559,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N public void onAnimationEnd(Animator animation) { menuAnimator = null; if (!menuShowed) { - if (actionBar.getTag() == null && avatarPicker == 0) { + if (actionBar.getTag() == null && avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setVisibility(View.INVISIBLE); } headerView.setVisibility(View.INVISIBLE); @@ -4651,7 +4657,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N typeButtonsAvailable = !editingMessageObject.hasValidGroupId(); } else { layoutToSet = photoLayout; - typeButtonsAvailable = avatarPicker == 0; + typeButtonsAvailable = avatarPicker == 0 && !storyMediaPicker; selectedId = 1; } buttonsRecyclerView.setVisibility(typeButtonsAvailable ? View.VISIBLE : View.GONE); @@ -4759,9 +4765,9 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N shadow.setVisibility(View.GONE); } if (avatarPicker == 2) { - selectedTextView.setText(getString("ChoosePhotoOrVideo", R.string.ChoosePhotoOrVideo)); + selectedTextView.setText(getString(R.string.ChoosePhotoOrVideo)); } else { - selectedTextView.setText(getString("ChoosePhoto", R.string.ChoosePhoto)); + selectedTextView.setText(getString(R.string.ChoosePhoto)); } } else { typeButtonsAvailable = true; @@ -4771,8 +4777,14 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N } } + public void setStoryMediaPicker() { + storyMediaPicker = true; + typeButtonsAvailable = false; + selectedTextView.setText(getString(R.string.ChoosePhotoOrVideo)); + } + public void enableStickerMode(Utilities.Callback2 customStickerHandler) { - selectedTextView.setText(getString("ChoosePhoto", R.string.ChoosePhoto)); + selectedTextView.setText(getString(R.string.ChoosePhotoForSticker)); typeButtonsAvailable = false; buttonsRecyclerView.setVisibility(View.GONE); shadow.setVisibility(View.GONE); @@ -4808,7 +4820,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N isSoundPicker = true; buttonsRecyclerView.setVisibility(View.GONE); shadow.setVisibility(View.GONE); - selectedTextView.setText(getString("ChoosePhotoOrVideo", R.string.ChoosePhotoOrVideo)); + selectedTextView.setText(getString(R.string.ChoosePhotoOrVideo)); } public boolean storyLocationPickerFileIsVideo; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java index e94898df0..5dc64c693 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java @@ -590,7 +590,7 @@ public class ChatAttachAlertContactsLayout extends ChatAttachAlert.AttachAlertLa ArrayList items = new ArrayList<>(); ArrayList phones = new ArrayList<>(); ArrayList other = new ArrayList<>(); - ArrayList vcard = null; + ArrayList vcard = null; if (contact.key != null) { Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, contact.key); result = AndroidUtilities.loadVCardFromStream(uri, parentAlert.currentAccount, true, items, name); @@ -680,7 +680,7 @@ public class ChatAttachAlertContactsLayout extends ChatAttachAlert.AttachAlertLa } } currentUser.restriction_reason.clear(); - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = builder.toString(); reason.reason = ""; reason.platform = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java index 8500fcba0..e8e7ba2b1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java @@ -801,6 +801,9 @@ public class ChatAttachAlertDocumentLayout extends ChatAttachAlert.AttachAlertLa } if (item.file.length() == 0) { return false; + } + if (parentAlert.storyMediaPicker) { + } selectedFiles.put(path, item); selectedFilesOrder.add(path); @@ -837,7 +840,7 @@ public class ChatAttachAlertDocumentLayout extends ChatAttachAlert.AttachAlertLa mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); } if (file.length() == 0 || mimeType == null || !RingtoneDataStore.ringtoneSupportedMimeType.contains(mimeType)) { - BulletinFactory.of(parentAlert.getContainer(), null).createErrorBulletinSubtitle(LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.formatString("ErrorInvalidRingtone", R.string.ErrorRingtoneInvalidFormat), null).show(); + BulletinFactory.of(parentAlert.getContainer(), null).createErrorBulletinSubtitle(LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.getString(R.string.ErrorRingtoneInvalidFormat), null).show(); return false; } if (file.length() > MessagesController.getInstance(UserConfig.selectedAccount).ringtoneSizeMax) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java index 68948b778..21dff34ea 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java @@ -954,6 +954,9 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou } }); gridView.setOnItemLongClickListener((view, position) -> { + if (parentAlert.storyMediaPicker) { + return false; + } if (position == 0 && selectedAlbumEntry == galleryAlbumEntry) { if (parentAlert.delegate != null) { parentAlert.delegate.didPressedButton(0, false, true, 0, 0, false, false); @@ -2131,7 +2134,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou } protected void updatePhotosCounter(boolean added) { - if (counterTextView == null || parentAlert.avatarPicker != 0) { + if (counterTextView == null || parentAlert.avatarPicker != 0 || parentAlert.storyMediaPicker) { return; } boolean hasVideo = false; @@ -2367,7 +2370,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou } private boolean shouldLoadAllMedia() { - return !parentAlert.isPhotoPicker && (parentAlert.baseFragment instanceof ChatActivity || parentAlert.avatarPicker == 2); + return !parentAlert.isPhotoPicker && (parentAlert.baseFragment instanceof ChatActivity || parentAlert.storyMediaPicker || parentAlert.avatarPicker == 2); } public void showCamera() { @@ -4261,7 +4264,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou } else { cell.setIsVertical(cameraPhotoLayoutManager.getOrientation() == LinearLayoutManager.VERTICAL); } - if (parentAlert.avatarPicker != 0) { + if (parentAlert.avatarPicker != 0 || parentAlert.storyMediaPicker) { cell.getCheckBox().setVisibility(GONE); } else { cell.getCheckBox().setVisibility(VISIBLE); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java index c3e244de7..aba9f5093 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java @@ -55,7 +55,6 @@ import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.BusinessLinksController; import org.telegram.ui.ChatActivity; -import org.telegram.ui.LaunchActivity; import org.telegram.ui.ProfileActivity; import org.telegram.ui.Stories.StoriesUtilities; import org.telegram.ui.TopicsFragment; @@ -73,6 +72,7 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent private AnimatedTextView animatedSubtitleTextView; private AtomicReference subtitleTextLargerCopyView = new AtomicReference<>(); private ImageView timeItem; + private ImageView starBgItem, starFgItem; private TimerDrawable timerDrawable; private ChatActivity parentFragment; private StatusDrawable[] statusDrawables = new StatusDrawable[6]; @@ -307,6 +307,21 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent } else { timeItem.setContentDescription(LocaleController.getString("AccAutoDeleteTimer", R.string.AccAutoDeleteTimer)); } + + starBgItem = new ImageView(context); + starBgItem.setImageResource(R.drawable.star_small_outline); + starBgItem.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_actionBarDefault), PorterDuff.Mode.SRC_IN)); + starBgItem.setAlpha(0.0f); + starBgItem.setScaleY(0.0f); + starBgItem.setScaleX(0.0f); + addView(starBgItem); + + starFgItem = new ImageView(context); + starFgItem.setImageResource(R.drawable.star_small_inner); + starFgItem.setAlpha(0.0f); + starFgItem.setScaleY(0.0f); + starFgItem.setScaleX(0.0f); + addView(starFgItem); } if (parentFragment != null && (parentFragment.getChatMode() == 0 || parentFragment.getChatMode() == ChatActivity.MODE_SAVED)) { @@ -572,6 +587,12 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent if (timeItem != null) { timeItem.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(34), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(34), MeasureSpec.EXACTLY)); } + if (starBgItem != null) { + starBgItem.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY)); + } + if (starFgItem != null) { + starFgItem.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY)); + } setMeasuredDimension(width, MeasureSpec.getSize(heightMeasureSpec)); if (lastWidth != -1 && lastWidth != width && lastWidth > width) { fadeOutToLessWidth(lastWidth); @@ -662,6 +683,12 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent if (timeItem != null) { timeItem.layout(leftPadding + AndroidUtilities.dp(16), viewTop + AndroidUtilities.dp(15), leftPadding + AndroidUtilities.dp(16 + 34), viewTop + AndroidUtilities.dp(15 + 34)); } + if (starBgItem != null) { + starBgItem.layout(leftPadding + AndroidUtilities.dp(28), viewTop + AndroidUtilities.dp(24), leftPadding + AndroidUtilities.dp(28) + starBgItem.getMeasuredWidth(), viewTop + AndroidUtilities.dp(24) + starBgItem.getMeasuredHeight()); + } + if (starFgItem != null) { + starFgItem.layout(leftPadding + AndroidUtilities.dp(28), viewTop + AndroidUtilities.dp(24), leftPadding + AndroidUtilities.dp(28) + starFgItem.getMeasuredWidth(), viewTop + AndroidUtilities.dp(24) + starFgItem.getMeasuredHeight()); + } if (subtitleTextView != null) { subtitleTextView.layout(l, viewTop + AndroidUtilities.dp(24), l + subtitleTextView.getMeasuredWidth(), viewTop + subtitleTextView.getTextHeight() + AndroidUtilities.dp(24)); } else if (animatedSubtitleTextView != null) { @@ -723,7 +750,7 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent if (timerDrawable == null) { return; } - boolean show = true; + boolean show = !stars; if (value == 0 && !secretChatTimer) { show = false; return; @@ -736,6 +763,23 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent } } + public boolean stars; + public void setStars(boolean stars, boolean animated) { + if (starBgItem == null || starFgItem == null) return; + this.stars = stars; + if (!animated) { + starBgItem.setAlpha(stars ? 1f : 0f); + starBgItem.setScaleX(stars ? 1.1f : 0f); + starBgItem.setScaleY(stars ? 1.1f : 0f); + starFgItem.setAlpha(stars ? 1f : 0f); + starFgItem.setScaleX(stars ? 1f : 0f); + starFgItem.setScaleY(stars ? 1f : 0f); + } else { + starBgItem.animate().alpha(stars ? 1f : 0f).scaleX(stars ? 1.1f : 0f).scaleY(stars ? 1.1f : 0f).start(); + starFgItem.animate().alpha(stars ? 1f : 0f).scaleX(stars ? 1f : 0f).scaleY(stars ? 1f : 0f).start(); + } + } + private boolean rightDrawableIsScamOrVerified = false; private String rightDrawableContentDescription = null; private String rightDrawable2ContentDescription = null; @@ -979,6 +1023,8 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent newStatus = LocaleController.getString("ServiceNotifications", R.string.ServiceNotifications); } else if (MessagesController.isSupportUser(user)) { newStatus = LocaleController.getString("SupportStatus", R.string.SupportStatus); + } else if (user.bot && user.bot_active_users != 0) { + newStatus = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ','); } else if (user.bot) { newStatus = LocaleController.getString("Bot", R.string.Bot); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java index 635a0c567..a81d0b673 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java @@ -64,6 +64,8 @@ public class CheckBoxBase { private int backgroundColorKey = Theme.key_chat_serviceBackground; private int background2ColorKey = Theme.key_chat_serviceBackground; + private int backgroundColor; + private boolean useDefaultCheck; private boolean drawUnchecked = true; @@ -223,6 +225,11 @@ public class CheckBoxBase { invalidate(); } + public void setBackgroundColor(int backgroundColor) { + this.backgroundColor = backgroundColor; + invalidate(); + } + public void setBackgroundDrawable(Theme.MessageDrawable drawable) { messageDrawable = drawable; } @@ -309,6 +316,8 @@ public class CheckBoxBase { } else { backgroundPaint.setColor(AndroidUtilities.getOffsetColor(0xffffffff, getThemedColor(checkColorKey), progress, backgroundAlpha)); } + } else if (backgroundColor != 0) { + backgroundPaint.setColor(0); } else { backgroundPaint.setColor(AndroidUtilities.getOffsetColor(0x00ffffff, getThemedColor(background2ColorKey >= 0 ? background2ColorKey : checkColorKey), progress, backgroundAlpha)); } @@ -385,7 +394,9 @@ public class CheckBoxBase { paint.setColor(getThemedColor(background2ColorKey)); } else if (backgroundType == 11 || backgroundType == 6 || backgroundType == 7 || backgroundType == 10 || !drawUnchecked && backgroundColorKey >= 0 || backgroundType == 14) { paint.setColor(getThemedColor(backgroundColorKey)); - } else { + } else if (backgroundColor != 0) { + paint.setColor(backgroundColor); + } else { paint.setColor(getThemedColor(enabled ? Theme.key_checkbox : Theme.key_checkboxDisabled)); } if (forbidden) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java index f54d5ed23..351f0b81f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java @@ -32,6 +32,8 @@ public class CombinedDrawable extends Drawable implements Drawable.Callback { private boolean fullSize; private boolean both; + public float translateX, translateY; + public CombinedDrawable(Drawable backgroundDrawable, Drawable iconDrawable, int leftOffset, int topOffset) { background = backgroundDrawable; icon = iconDrawable; @@ -141,6 +143,8 @@ public class CombinedDrawable extends Drawable implements Drawable.Callback { @Override public void draw(Canvas canvas) { + canvas.save(); + canvas.translate(translateX, translateY); if (center) { Rect bounds = getBounds(); setBounds( @@ -177,6 +181,7 @@ public class CombinedDrawable extends Drawable implements Drawable.Callback { } icon.draw(canvas); } + canvas.restore(); } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java new file mode 100644 index 000000000..9a93c53d6 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java @@ -0,0 +1,400 @@ +package org.telegram.ui.Components; + +import static org.telegram.messenger.LocaleController.getString; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.DialogObject; +import org.telegram.messenger.MediaDataController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.MessagesStorage; +import org.telegram.messenger.R; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; +import org.telegram.ui.ActionBar.Theme; + +import java.util.ArrayList; +import java.util.HashSet; + +public class DialogsBotsAdapter extends UniversalAdapter { + + private final Context context; + private final int currentAccount; + private final int folderId; + private final boolean showOnlyPopular; + private final Theme.ResourcesProvider resourcesProvider; + + private String popularBotsNextOffset; + private boolean popularBotsLoaded, popularBotsLoading; + public final ArrayList popularBots = new ArrayList<>(); + + public final ArrayList searchMine = new ArrayList<>(); + public final ArrayList searchGlobal = new ArrayList<>(); + public final ArrayList searchMessages = new ArrayList<>(); + + public boolean expandedMyBots; + public boolean expandedSearchBots; + + public DialogsBotsAdapter(RecyclerListView listView, Context context, int currentAccount, int folderId, boolean showOnlyPopular, Theme.ResourcesProvider resourcesProvider) { + super(listView, context, currentAccount, 0, null, resourcesProvider); + super.fillItems = this::fillItems; + this.context = context; + this.currentAccount = currentAccount; + this.folderId = folderId; + this.resourcesProvider = resourcesProvider; + this.showOnlyPopular = showOnlyPopular; + update(false); + MediaDataController.getInstance(currentAccount).loadHints(true); + loadPopularBots(); + } + + private int topPeersStart, topPeersEnd; + public void fillItems(ArrayList items, UniversalAdapter adapter) { + HashSet uids = new HashSet<>(); + + if (!TextUtils.isEmpty(query)) { + ArrayList foundChannels = new ArrayList<>(); + foundChannels.addAll(searchMine); + foundChannels.addAll(searchGlobal); + if (!foundChannels.isEmpty()) { + if (foundChannels.size() > 5 && (!searchMessages.isEmpty() && !showOnlyPopular)) { + items.add(UItem.asGraySection(getString(R.string.SearchApps), getString(expandedSearchBots ? R.string.ShowLess : R.string.ShowMore), this::toggleExpandedSearchBots)); + } else { + items.add(UItem.asGraySection(getString(R.string.SearchApps))); + } + int count = foundChannels.size(); + if (!expandedSearchBots && (!searchMessages.isEmpty() && !showOnlyPopular)) + count = Math.min(5, count); + for (int i = 0; i < count; ++i) { + items.add(UItem.asProfileCell(foundChannels.get(i))); + } + } + if (!searchMessages.isEmpty() && !showOnlyPopular) { + items.add(UItem.asGraySection(getString(R.string.SearchMessages))); + for (MessageObject message : searchMessages) { + items.add(UItem.asSearchMessage(message)); + } + if (hasMore) { + items.add(UItem.asFlicker(FlickerLoadingView.DIALOG_TYPE)); + } + } + } else { + ArrayList top_peers = MediaDataController.getInstance(currentAccount).webapps; + ArrayList top_peers_bots = new ArrayList<>(); + if (top_peers != null) { + for (int i = 0; i < top_peers.size(); ++i) { + TLRPC.TL_topPeer peer = top_peers.get(i); + long dialogId = DialogObject.getPeerDialogId(peer.peer); + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialogId); + if (user == null || !user.bot) continue; + top_peers_bots.add(user); + } + } + topPeersStart = items.size(); + if (!top_peers_bots.isEmpty() && !showOnlyPopular) { + if (top_peers_bots.size() > 5) { + items.add(UItem.asGraySection(getString(R.string.SearchAppsMine), getString(expandedMyBots ? R.string.ShowLess : R.string.ShowMore), this::toggleExpandedMyBots)); + } else { + items.add(UItem.asGraySection(getString(R.string.SearchAppsMine))); + } + for (int i = 0; i < top_peers_bots.size(); ++i) { + if (i >= 5 && !expandedMyBots) break; + final TLRPC.User user = top_peers_bots.get(i); + if (uids.contains(user.id)) continue; + uids.add(user.id); + items.add(UItem.asProfileCell(user).accent()); + } + } + topPeersEnd = items.size(); + if (!popularBots.isEmpty()) { + if (!showOnlyPopular) items.add(UItem.asGraySection(getString(R.string.SearchAppsPopular))); + for (int i = 0; i < popularBots.size(); ++i) { + final TLRPC.User user = popularBots.get(i); + if (uids.contains(user.id)) continue; + uids.add(user.id); + items.add(UItem.asProfileCell(user).accent()); + } + if (popularBotsNextOffset != null || popularBotsLoading) { + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + } + } else if (popularBotsNextOffset != null || popularBotsLoading) { + if (!showOnlyPopular) items.add(UItem.asFlicker(FlickerLoadingView.GRAY_SECTION)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + } + } + } + + private void toggleExpandedMyBots(View view) { + expandedMyBots = !expandedMyBots; + update(true); + } + + private void toggleExpandedSearchBots(View view) { + expandedSearchBots = !expandedSearchBots; + update(true); + } + + + protected void hideKeyboard() { + + } + + public Object getTopPeerObject(int position) { + if (position < topPeersStart || position >= topPeersEnd) { + return false; + } + return getObject(position); + } + + public Object getObject(int position) { + UItem item = getItem(position); + return item != null ? item.object : null; + } + + public boolean loadingMessages; + public boolean loadingBots; + + private boolean hasMore; + private int allCount; + private int nextRate; + private int searchBotsId; + public String query; + private void searchMessages(boolean next) { + loadingMessages = true; + final int searchId = ++searchBotsId; + TLRPC.TL_messages_searchGlobal req = new TLRPC.TL_messages_searchGlobal(); + req.broadcasts_only = false; + if (folderId != 0) { + req.flags |= 1; + req.folder_id = folderId; + } + req.q = this.query; + req.limit = 25; + req.filter = new TLRPC.TL_inputMessagesFilterEmpty(); + if (next && !searchMessages.isEmpty()) { + MessageObject lastMessage = searchMessages.get(searchMessages.size() - 1); + req.offset_rate = nextRate; + req.offset_id = lastMessage.getId(); + if (lastMessage.messageOwner.peer_id == null) { + req.offset_peer = new TLRPC.TL_inputPeerEmpty(); + } else { + req.offset_peer = MessagesController.getInstance(currentAccount).getInputPeer(lastMessage.messageOwner.peer_id); + } + } else { + req.offset_rate = 0; + req.offset_id = 0; + req.offset_peer = new TLRPC.TL_inputPeerEmpty(); + } + AndroidUtilities.runOnUIThread(() -> { + if (searchId != searchBotsId || !TextUtils.equals(req.q, this.query)) return; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (searchId != searchBotsId || !TextUtils.equals(req.q, this.query)) return; + loadingMessages = false; + if (!next) { + searchMessages.clear(); + } + if (res instanceof TLRPC.messages_Messages) { + TLRPC.messages_Messages response = (TLRPC.messages_Messages) res; + MessagesStorage.getInstance(currentAccount).putUsersAndChats(response.users, response.chats, true, true); + MessagesController.getInstance(currentAccount).putUsers(response.users, false); + MessagesController.getInstance(currentAccount).putChats(response.chats, false); + + for (TLRPC.Message message : response.messages) { + MessageObject messageObject = new MessageObject(currentAccount, message, false, true); + messageObject.setQuery(query); + searchMessages.add(messageObject); + } + + hasMore = response instanceof TLRPC.TL_messages_messagesSlice; + allCount = Math.max(searchMessages.size(), response.count); + nextRate = response.next_rate; + } + update(true); + })); + }, next ? 800 : 0); + + if (!next) { + loadingBots = true; + TLRPC.TL_contacts_search req2 = new TLRPC.TL_contacts_search(); + req2.limit = 30; + req2.q = this.query; + ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (!TextUtils.equals(req2.q, this.query) || TextUtils.isEmpty(this.query)) return; + + loadingBots = false; + TLRPC.TL_contacts_found response = null; + if (res instanceof TLRPC.TL_contacts_found) { + response = (TLRPC.TL_contacts_found) res; + MessagesStorage.getInstance(currentAccount).putUsersAndChats(response.users, response.chats, true, true); + MessagesController.getInstance(currentAccount).putUsers(response.users, false); + MessagesController.getInstance(currentAccount).putChats(response.chats, false); + } + + HashSet userIds = new HashSet<>(); + + searchMine.clear(); + if (response != null) { + for (TLRPC.Peer peer : response.my_results) { + if (!(peer instanceof TLRPC.TL_peerUser)) continue; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peer.user_id); + if (user == null || !user.bot) continue; + if (userIds.contains(user.id)) + continue; + userIds.add(user.id); + searchMine.add(user); + } + } + +// searchRecommendedChannels.clear(); +// String q = this.query.toLowerCase(), qT = AndroidUtilities.translitSafe(q); +// MessagesController.ChannelRecommendations recommendations = MessagesController.getInstance(currentAccount).getCachedChannelRecommendations(0); +// if (recommendations != null && !recommendations.chats.isEmpty()) { +// for (TLRPC.Chat chat : recommendations.chats) { +// if (chat == null) +// continue; +// if (!ChatObject.isChannelAndNotMegaGroup(chat)) +// continue; +// TLRPC.Chat localChat = MessagesController.getInstance(currentAccount).getChat(chat.id); +// if (!(ChatObject.isNotInChat(chat) && (localChat == null || ChatObject.isNotInChat(localChat)))) +// continue; +// String t = chat.title.toLowerCase(), tT = AndroidUtilities.translitSafe(t); +// if ( +// t.startsWith(q) || t.contains(" " + q) || +// tT.startsWith(qT) || tT.contains(" " + qT) +// ) { +// if (chatIds.contains(chat.id)) +// continue; +// chatIds.add(chat.id); +// searchRecommendedChannels.add(chat); +// } +// } +// } + + searchGlobal.clear(); + if (response != null) { + for (TLRPC.Peer peer : response.results) { + if (!(peer instanceof TLRPC.TL_peerUser)) continue; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peer.user_id); + if (user == null || !user.bot) continue; + if (userIds.contains(user.id)) + continue; + userIds.add(user.id); + searchGlobal.add(user); + } + } + + if (listView != null) { + listView.scrollToPosition(0); + } + update(true); + })); + } + } + + private Runnable searchMessagesRunnable = () -> searchMessages(false); + public void search(String query) { + if (TextUtils.equals(query, this.query)) return; + this.query = query; + AndroidUtilities.cancelRunOnUIThread(searchMessagesRunnable); + if (TextUtils.isEmpty(this.query)) { + searchMessages.clear(); + update(true); + searchBotsId++; + loadingMessages = false; + loadingBots = false; + hasMore = false; + nextRate = 0; + if (listView != null) { + listView.scrollToPosition(0); + } + return; + } + + searchMessages.clear(); + + AndroidUtilities.runOnUIThread(searchMessagesRunnable, 1000); + loadingMessages = true; + loadingBots = true; + + update(true); + + if (listView != null) { + listView.scrollToPosition(0); + } + } + + public void searchMore() { + if (!hasMore || loadingMessages || TextUtils.isEmpty(this.query)) { + return; + } + searchMessages(true); + } + + public void checkBottom() { + if (!TextUtils.isEmpty(this.query)) { + if (hasMore && !loadingMessages && seesLoading()) { + searchMore(); + } + } else { + if (!popularBotsLoading && !TextUtils.isEmpty(popularBotsNextOffset) && seesLoading()) { + loadPopularBots(); + } + } + } + + public boolean seesLoading() { + if (listView == null) return false; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + if (child instanceof FlickerLoadingView) { + return true; + } + } + return false; + } + + public boolean atTop() { + if (listView == null) return false; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + if (listView.getChildAdapterPosition(child) == 0) + return true; + } + return false; + } + + public void loadPopularBots() { + if (popularBotsLoading || popularBotsLoaded && popularBotsNextOffset == null) return; + + popularBotsLoading = true; + TL_bots.getPopularAppBots req = new TL_bots.getPopularAppBots(); + req.offset = popularBotsNextOffset == null ? "" : popularBotsNextOffset; + req.limit = 20; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + popularBotsLoading = false; + popularBotsLoaded = true; + if (res instanceof TL_bots.popularAppBots) { + TL_bots.popularAppBots r = (TL_bots.popularAppBots) res; + MessagesController.getInstance(currentAccount).putUsers(r.users, false); + popularBots.addAll(r.users); + popularBotsNextOffset = r.next_offset; + } else { + popularBotsNextOffset = null; + } + update(true); + })); + } + + + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java index ec6475ac9..d9b6011e4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java @@ -1352,23 +1352,25 @@ public class FilterTabsView extends FrameLayout { if (!tabs.isEmpty()) { int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(7) - AndroidUtilities.dp(7); Tab firstTab = findDefaultTab(); - firstTab.setTitle(LocaleController.getString("FilterAllChats", R.string.FilterAllChats)); - int tabWith = firstTab.getWidth(false); - firstTab.setTitle(allTabsWidth > width ? LocaleController.getString("FilterAllChatsShort", R.string.FilterAllChatsShort) : LocaleController.getString("FilterAllChats", R.string.FilterAllChats)); - int trueTabsWidth = allTabsWidth - tabWith; - trueTabsWidth += firstTab.getWidth(false); - int prevWidth = additionalTabWidth; - additionalTabWidth = trueTabsWidth < width ? (width - trueTabsWidth) / tabs.size() : 0; - if (prevWidth != additionalTabWidth) { - ignoreLayout = true; - RecyclerView.ItemAnimator animator = listView.getItemAnimator(); - listView.setItemAnimator(null); - adapter.notifyDataSetChanged(); - listView.setItemAnimator(animator); - ignoreLayout = false; + if (firstTab != null) { + firstTab.setTitle(LocaleController.getString(R.string.FilterAllChats)); + int tabWidth = firstTab.getWidth(false); + firstTab.setTitle(allTabsWidth > width ? LocaleController.getString("FilterAllChatsShort", R.string.FilterAllChatsShort) : LocaleController.getString("FilterAllChats", R.string.FilterAllChats)); + int trueTabsWidth = allTabsWidth - tabWidth; + trueTabsWidth += firstTab.getWidth(false); + int prevWidth = additionalTabWidth; + additionalTabWidth = trueTabsWidth < width ? (width - trueTabsWidth) / tabs.size() : 0; + if (prevWidth != additionalTabWidth) { + ignoreLayout = true; + RecyclerView.ItemAnimator animator = listView.getItemAnimator(); + listView.setItemAnimator(null); + adapter.notifyDataSetChanged(); + listView.setItemAnimator(animator); + ignoreLayout = false; + } + updateTabsWidths(); + invalidated = false; } - updateTabsWidths(); - invalidated = false; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java index 94630d13b..87539e6f5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java @@ -21,7 +21,7 @@ import org.telegram.ui.ActionBar.Theme; import java.util.Random; -public class FlickerLoadingView extends View { +public class FlickerLoadingView extends View implements Theme.Colorable { public final static int DIALOG_TYPE = 1; public final static int PHOTOS_TYPE = 2; @@ -53,6 +53,8 @@ public class FlickerLoadingView extends View { public static final int PROFILE_SEARCH_CELL = 29; public static final int GRAY_SECTION = 30; public static final int STAR_TIER = 31; + public static final int BROWSER_BOOKMARK = 32; + public static final int STAR_SUBSCRIPTION = 33; private int gradientWidth; private LinearGradient gradient; @@ -459,6 +461,26 @@ public class FlickerLoadingView extends View { checkRtl(rectF); canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += getCellHeight(getMeasuredWidth()); + k++; + if (isSingleCell && k >= itemsCount) { + break; + } + } + } else if (getViewType() == STAR_SUBSCRIPTION) { + int k = 0; + while (h <= getMeasuredHeight()) { + int r = dp(23); + canvas.drawCircle(checkRtl(paddingLeft + dp(13) + r), h + (dp(58) >> 1), r, paint); + + rectF.set(paddingLeft + dp(13+46+13), h + dp(17), paddingLeft + dp(260), h + dp(25)); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + + rectF.set(paddingLeft + dp(13+46+13), h + dp(39), paddingLeft + dp(140), h + dp(47)); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += getCellHeight(getMeasuredWidth()); k++; if (isSingleCell && k >= itemsCount) { @@ -799,6 +821,29 @@ public class FlickerLoadingView extends View { checkRtl(rectF); canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += cellHeight; + k++; + if (isSingleCell && k >= itemsCount) { + break; + } + } + } else if (getViewType() == BROWSER_BOOKMARK) { + int k = 0; + while (h <= getMeasuredHeight()) { + int cellHeight = getCellHeight(getMeasuredWidth()); + + rectF.set(paddingLeft + dp(10), h + (cellHeight - dp(32)) / 2f, paddingLeft + dp(10 + 32), h + (cellHeight + dp(32)) / 2f); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(6), dp(6), paint); + + rectF.set(paddingLeft + dp(64), h + (cellHeight - dp(14) - dp(10)) / 2f, Math.min(paddingLeft + dp(64 + 54), getMeasuredWidth() - dp(19)), h + (cellHeight - dp(14) + dp(10)) / 2f); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + + rectF.set(paddingLeft + dp(64), h + (cellHeight + dp(14) - dp(8)) / 2f, Math.min(paddingLeft + dp(64 + 80), getMeasuredWidth() - dp(19)), h + (cellHeight + dp(14) + dp(8)) / 2f); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += cellHeight; k++; if (isSingleCell && k >= itemsCount) { @@ -849,6 +894,7 @@ public class FlickerLoadingView extends View { } } + @Override public void updateColors() { if (globalGradientView != null) { globalGradientView.updateColors(); @@ -930,10 +976,14 @@ public class FlickerLoadingView extends View { return dp(58); case PROFILE_SEARCH_CELL: return dp(60) + 1; + case STAR_SUBSCRIPTION: + return dp(58); case GRAY_SECTION: return dp(32); case STAR_TIER: return dp(48) + 1; + case BROWSER_BOOKMARK: + return dp(56) + 1; } return 0; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java index 5b64c6527..a9e953943 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java @@ -8,6 +8,8 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -23,6 +25,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorSpace; import android.graphics.ImageFormat; import android.graphics.Outline; import android.graphics.Paint; @@ -101,6 +104,7 @@ import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.voip.CellFlickerDrawable; import org.telegram.ui.Stories.recorder.DualCameraView; +import org.telegram.ui.Stories.recorder.FlashViews; import org.telegram.ui.Stories.recorder.StoryEntry; import java.io.File; @@ -134,8 +138,11 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter private Delegate delegate; private Paint paint; private RectF rect; - private ImageView switchCameraButton; - AnimatedVectorDrawable switchCameraDrawable = null; + private final FlashViews.ImageViewInvertable switchCameraButton; + private final FlashViews.ImageViewInvertable flashButton; + private final FlashViews flashViews; + private RLottieDrawable flashOnDrawable, flashOffDrawable; + private RLottieDrawable switchCameraDrawable; private ImageView muteImageView; private float progress; private CameraInfo selectedCamera; @@ -276,11 +283,15 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter }; paint.setStyle(Paint.Style.STROKE); paint.setStrokeCap(Paint.Cap.ROUND); - paint.setStrokeWidth(AndroidUtilities.dp(3)); + paint.setStrokeWidth(dp(3)); paint.setColor(0xffffffff); rect = new RectF(); + flashViews = new FlashViews(getContext(), null, this, null); + flashViews.setWarmth(.5f); + addView(flashViews.backgroundView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + if (Build.VERSION.SDK_INT >= 21) { cameraContainer = new InstantViewCameraContainer(context) { @Override @@ -339,10 +350,11 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter } addView(cameraContainer, new LayoutParams(AndroidUtilities.roundPlayingMessageSize, AndroidUtilities.roundPlayingMessageSize, Gravity.CENTER)); + addView(flashViews.foregroundView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); - switchCameraButton = new ImageView(context); + switchCameraButton = new FlashViews.ImageViewInvertable(context); switchCameraButton.setScaleType(ImageView.ScaleType.CENTER); - switchCameraButton.setContentDescription(LocaleController.getString("AccDescrSwitchCamera", R.string.AccDescrSwitchCamera)); + switchCameraButton.setContentDescription(LocaleController.getString(R.string.AccDescrSwitchCamera)); addView(switchCameraButton, LayoutHelper.createFrame(62, 62, Gravity.LEFT | Gravity.BOTTOM, 8, 0, 0, 0)); switchCameraButton.setOnClickListener(v -> { if (!cameraReady || !isCameraSessionInitiated() || cameraThread == null) { @@ -352,6 +364,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter switchCamera(); } if (switchCameraDrawable != null) { + switchCameraDrawable.setCurrentFrame(0); switchCameraDrawable.start(); } flipAnimationInProgress = true; @@ -397,6 +410,18 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter valueAnimator.start(); }); + flashButton = new FlashViews.ImageViewInvertable(context); + flashButton.setScaleType(ImageView.ScaleType.CENTER); + addView(flashButton, LayoutHelper.createFrame(62, 62, Gravity.LEFT | Gravity.BOTTOM, 62 - 4, 0, 0, 0)); + flashButton.setOnClickListener(v -> { + flashing = !flashing; + updateFlash(); + }); + updateFlash(); + + flashViews.add(switchCameraButton); + flashViews.add(flashButton); + muteImageView = new ImageView(context); muteImageView.setScaleType(ImageView.ScaleType.CENTER); muteImageView.setImageResource(R.drawable.video_mute); @@ -417,7 +442,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter AndroidUtilities.rectTmp.set(0, 0, textureViewSize, textureViewSize); float rad = AndroidUtilities.rectTmp.width() / 2f; canvas.drawRoundRect(AndroidUtilities.rectTmp, rad, rad, blackoutPaint); - AndroidUtilities.rectTmp.inset(AndroidUtilities.dp(1), AndroidUtilities.dp(1)); + AndroidUtilities.rectTmp.inset(dp(1), dp(1)); flickerDrawable.draw(canvas, AndroidUtilities.rectTmp, rad, null); invalidate(); } @@ -430,6 +455,66 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter blurBehindDrawable = new BlurBehindDrawable(parentView, this, 0, resourcesProvider); } + private Boolean wasFlashing; + private boolean flashing; + private boolean frontFlashing; + private void updateFlash() { + final boolean shouldFrontFlash = flashing && recording && isFrontface; + if (frontFlashing != shouldFrontFlash) { + if (frontFlashing = shouldFrontFlash) { + flashViews.flashIn(null); + } else { + flashViews.flashOut(); + } + } + + if (useCamera2) { + if (camera2Sessions[1] != null) { + camera2Sessions[1].setFlash(flashing && !isFrontface && recording); + } + } else { + if (cameraSession != null) { +// final String mode = ( +// (flashing && !isFrontface && recording) ? +// (cameraSession.availableFlashModes != null && cameraSession.availableFlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH) ? Camera.Parameters.FLASH_MODE_TORCH : Camera.Parameters.FLASH_MODE_ON) : +// Camera.Parameters.FLASH_MODE_OFF +// ); +// cameraSession.setCurrentFlashMode(mode); + cameraSession.setTorchEnabled(flashing && !isFrontface && recording); + } + } + + if (flashButton != null && (wasFlashing == null || wasFlashing != flashing)) { + flashButton.setContentDescription(LocaleController.getString(flashing ? R.string.AccDescrCameraFlashOff : R.string.AccDescrCameraFlashOn)); + if (!flashing) { + if (flashOnDrawable == null) { + flashOnDrawable = new RLottieDrawable(R.raw.roundcamera_flash_on, "roundcamera_flash_on", dp(28), dp(28)); + flashOnDrawable.setCallback(flashButton); + } + flashButton.setImageDrawable(flashOnDrawable); + if (wasFlashing == null) { + flashOnDrawable.setCurrentFrame(flashOnDrawable.getFramesCount() - 1); + } else { + flashOnDrawable.setCurrentFrame(0); + flashOnDrawable.start(); + } + } else { + if (flashOffDrawable == null) { + flashOffDrawable = new RLottieDrawable(R.raw.roundcamera_flash_off, "roundcamera_flash_off", dp(28), dp(28)); + flashOffDrawable.setCallback(flashButton); + } + flashButton.setImageDrawable(flashOffDrawable); + if (wasFlashing == null) { + flashOffDrawable.setCurrentFrame(flashOffDrawable.getFramesCount() - 1); + } else { + flashOffDrawable.setCurrentFrame(0); + flashOffDrawable.start(); + } + } + wasFlashing = flashing; + } + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (updateTextureViewSize) { @@ -443,7 +528,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter textureViewSize = newSize; textureOverlayView.getLayoutParams().width = textureOverlayView.getLayoutParams().height = textureViewSize; cameraContainer.getLayoutParams().width = cameraContainer.getLayoutParams().height = textureViewSize; - ((LayoutParams) muteImageView.getLayoutParams()).topMargin = textureViewSize / 2 - AndroidUtilities.dp(24); + ((LayoutParams) muteImageView.getLayoutParams()).topMargin = textureViewSize / 2 - dp(24); textureOverlayView.setRoundRadius(textureViewSize / 2); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cameraContainer.invalidateOutline(); @@ -494,6 +579,9 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter protected void onDetachedFromWindow() { super.onDetachedFromWindow(); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileUploaded); + if (flashViews != null) { + flashViews.flashOut(); + } } @Override @@ -543,7 +631,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter float x = cameraContainer.getX(); float y = cameraContainer.getY(); - rect.set(x - AndroidUtilities.dp(8), y - AndroidUtilities.dp(8), x + cameraContainer.getMeasuredWidth() + AndroidUtilities.dp(8), y + cameraContainer.getMeasuredHeight() + AndroidUtilities.dp(8)); + rect.set(x - dp(8), y - dp(8), x + cameraContainer.getMeasuredWidth() + dp(8), y + cameraContainer.getMeasuredHeight() + dp(8)); if (recording) { recordedTime = System.currentTimeMillis() - recordStartTime + recordPlusTime; progress = Math.min(1f, recordedTime / 60000.0f); @@ -568,6 +656,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter blurBehindDrawable.clear(); } switchCameraButton.setAlpha(0.0f); + flashButton.setAlpha(0.0f); cameraContainer.setAlpha(0.0f); textureOverlayView.setAlpha(0.0f); muteImageView.setAlpha(0.0f); @@ -598,6 +687,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter if (recording) { cancelled = recordedTime < 800; recording = false; + updateFlash(); if (cameraThread != null) { NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.recordStopped, recordingGuid, cancelled ? 4 : 2); saveLastCameraBitmap(); @@ -633,13 +723,12 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter return; } - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { - switchCameraDrawable = (AnimatedVectorDrawable) ContextCompat.getDrawable(getContext(), R.drawable.avd_flip); - switchCameraButton.setImageDrawable(switchCameraDrawable); - } else { - switchCameraButton.setImageResource(R.drawable.vd_flip); + if (switchCameraDrawable == null) { + switchCameraDrawable = new RLottieDrawable(R.raw.roundcamera_flip, "roundcamera_flip", dp(28), dp(28)); + switchCameraDrawable.setCurrentFrame(0); + switchCameraDrawable.setCallback(switchCameraButton); } + switchCameraButton.setImageDrawable(switchCameraDrawable); textureOverlayView.setAlpha(1.0f); textureOverlayView.invalidate(); @@ -659,7 +748,10 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter cameraReady = false; selectedCamera = null; if (!fromPaused) { - isFrontface = true; + if (!useCamera2) { + isFrontface = true; + } + updateFlash(); recordedTime = 0; progress = 0; } @@ -712,6 +804,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter } } } + updateFlash(); camera2SessionCurrent = camera2Sessions[isFrontface ? 0 : 1]; if (camera2SessionCurrent != null && camera2Sessions[isFrontface ? 1 : 0] == null) { bothCameras = false; @@ -815,7 +908,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter animatorSet = new AnimatorSet(); float toX = 0; if (!open) { - toX = recordedTime > 300 ? AndroidUtilities.dp(24) - getMeasuredWidth() / 2f : 0; + toX = recordedTime > 300 ? dp(24) - getMeasuredWidth() / 2f : 0; } ValueAnimator translationYAnimator = ValueAnimator.ofFloat(open ? 1f : 0f, open ? 0 : 1f); translationYAnimator.addUpdateListener(animation -> { @@ -824,6 +917,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter }); animatorSet.playTogether( ObjectAnimator.ofFloat(switchCameraButton, View.ALPHA, open ? 1.0f : 0.0f), + ObjectAnimator.ofFloat(flashButton, View.ALPHA, open ? 1.0f : 0.0f), ObjectAnimator.ofFloat(muteImageView, View.ALPHA, 0.0f), ObjectAnimator.ofInt(paint, AnimationProperties.PAINT_ALPHA, open ? 255 : 0), ObjectAnimator.ofFloat(cameraContainer, View.ALPHA, open ? 1.0f : 0.0f), @@ -933,6 +1027,8 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter } else { cancelled = recordedTime < 800; recording = false; + flashing = false; + updateFlash(); int reason; if (cancelled) { reason = 4; @@ -990,6 +1086,8 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter } cancelled = true; recording = false; + flashing = false; + updateFlash(); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.recordStopped, recordingGuid, byGesture ? 0 : 6); if (cameraThread != null) { saveLastCameraBitmap(); @@ -1016,6 +1114,10 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter return switchCameraButton; } + public View getFlashButtonView() { + return flashButton; + } + public View getMuteImageView() { return muteImageView; } @@ -1052,6 +1154,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter } } isFrontface = !isFrontface; + updateFlash(); if (useCamera2) { if (bothCameras) { camera2SessionCurrent = camera2Sessions[isFrontface ? 0 : 1]; @@ -1257,9 +1360,12 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter if (index == 1) return; surfaceTexture.setDefaultBufferSize(previewSize[0].getWidth(), previewSize[0].getHeight()); cameraSession = new CameraSession(selectedCamera, previewSize[0], pictureSize, ImageFormat.JPEG, true); + updateFlash(); cameraThread.setCurrentSession(cameraSession); CameraController.getInstance().openRound(cameraSession, surfaceTexture, () -> { if (cameraSession != null) { + updateFlash(); + boolean updateScale = false; try { Camera.Size size = cameraSession.getCurrentPreviewSize(); @@ -1747,6 +1853,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter scaleY = temp; } recording = true; + updateFlash(); } if (videoEncoder != null && (surfaceIndex == 0 && updateTexImage1 || surfaceIndex == 1 && updateTexImage2)) { @@ -2618,7 +2725,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter final TextureView textureView = InstantCameraView.this.textureView; if (textureView != null) { try { - final Bitmap bitmap = textureView.getBitmap(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + final Bitmap bitmap = textureView.getBitmap(dp(56), dp(56)); AndroidUtilities.runOnUIThread(() -> { if ((bitmap == null || bitmap.getPixel(0, 0) == 0) && keyframeThumbs.size() > 1) { keyframeThumbs.add(keyframeThumbs.get(keyframeThumbs.size() - 1)); @@ -2763,6 +2870,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether( ObjectAnimator.ofFloat(switchCameraButton, View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(flashButton, View.ALPHA, 0.0f), ObjectAnimator.ofInt(paint, AnimationProperties.PAINT_ALPHA, 0), ObjectAnimator.ofFloat(muteImageView, View.ALPHA, 1.0f)); animatorSet.setDuration(180); @@ -3159,6 +3267,7 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter recordPlusTime = fromPause ? recordedTime : 0; recordStartTime = System.currentTimeMillis(); recording = true; + updateFlash(); invalidate(); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.recordStarted, recordingGuid, false); }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java index aaf299382..92447ca88 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java @@ -1,52 +1,79 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; import android.text.TextUtils; +import android.text.style.ClickableSpan; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BillingController; +import org.telegram.messenger.DialogObject; import org.telegram.messenger.Emoji; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesStorage; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; +import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.AvatarSpan; +import org.telegram.ui.Cells.GraySectionCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.ShadowSectionCell; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.UserCell; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.LaunchActivity; import org.telegram.ui.LinkEditActivity; import org.telegram.ui.ManageLinksActivity; import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; +import org.telegram.ui.Stories.recorder.HintView2; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -57,6 +84,8 @@ public class InviteLinkBottomSheet extends BottomSheet { HashMap users; TLRPC.ChatFull info; + int revenueHeaderRow; + int revenueRow; int creatorHeaderRow; int creatorRow; int dividerRow; @@ -65,6 +94,9 @@ public class InviteLinkBottomSheet extends BottomSheet { int joinedHeaderRow; int joinedStartRow; int joinedEndRow; + int expiredHeaderRow; + int expiredStartRow; + int expiredEndRow; int linkActionRow; int linkInfoRow; int loadingRow; @@ -94,6 +126,7 @@ public class InviteLinkBottomSheet extends BottomSheet { private boolean titleVisible; ArrayList joinedUsers = new ArrayList<>(); + ArrayList expiredUsers = new ArrayList<>(); ArrayList requestedUsers = new ArrayList<>(); private long chatId; @@ -169,8 +202,8 @@ public class InviteLinkBottomSheet extends BottomSheet { @Override protected void onDraw(Canvas canvas) { - int top = scrollOffsetY - backgroundPaddingTop - AndroidUtilities.dp(8); - int height = getMeasuredHeight() + AndroidUtilities.dp(36) + backgroundPaddingTop; + int top = scrollOffsetY - backgroundPaddingTop - dp(8); + int height = getMeasuredHeight() + dp(36) + backgroundPaddingTop; int statusBarHeight = 0; float radProgress = 1.0f; if (Build.VERSION.SDK_INT >= 21) { @@ -195,8 +228,8 @@ public class InviteLinkBottomSheet extends BottomSheet { if (radProgress != 1.0f) { Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_dialogBackground)); - rect.set(backgroundPaddingLeft, backgroundPaddingTop + top, getMeasuredWidth() - backgroundPaddingLeft, backgroundPaddingTop + top + AndroidUtilities.dp(24)); - canvas.drawRoundRect(rect, AndroidUtilities.dp(12) * radProgress, AndroidUtilities.dp(12) * radProgress, Theme.dialogs_onlineCirclePaint); + rect.set(backgroundPaddingLeft, backgroundPaddingTop + top, getMeasuredWidth() - backgroundPaddingLeft, backgroundPaddingTop + top + dp(24)); + canvas.drawRoundRect(rect, dp(12) * radProgress, dp(12) * radProgress, Theme.dialogs_onlineCirclePaint); } if (statusBarHeight > 0) { @@ -220,7 +253,7 @@ public class InviteLinkBottomSheet extends BottomSheet { containerView.setWillNotDraw(false); FrameLayout.LayoutParams frameLayoutParams = new FrameLayout.LayoutParams(LayoutHelper.MATCH_PARENT, AndroidUtilities.getShadowHeight(), Gravity.TOP | Gravity.LEFT); - frameLayoutParams.topMargin = AndroidUtilities.dp(48); + frameLayoutParams.topMargin = dp(48); shadow = new View(context); shadow.setAlpha(0.0f); shadow.setVisibility(View.INVISIBLE); @@ -251,7 +284,7 @@ public class InviteLinkBottomSheet extends BottomSheet { int contentSize = getMeasuredHeight(); int padding = (int) (lastH / 5f * 2f); - if (padding < lastH - contentSize + AndroidUtilities.dp(60)) { + if (padding < lastH - contentSize + dp(60)) { padding = lastH - contentSize; } ignoreLayout = true; @@ -288,25 +321,67 @@ public class InviteLinkBottomSheet extends BottomSheet { return; } boolean isJoinedUserRow = position >= joinedStartRow && position < joinedEndRow; + boolean isExpiredUserRow = position >= expiredStartRow && position < expiredEndRow; boolean isRequestedUserRow = position >= requestedStartRow && position < requestedEndRow; if ((position == creatorRow || isJoinedUserRow || isRequestedUserRow) && users != null) { long userId = invite.admin_id; + TLRPC.TL_chatInviteImporter importer = null; if (isJoinedUserRow) { - userId = joinedUsers.get(position - joinedStartRow).user_id; + importer = joinedUsers.get(position - joinedStartRow); + userId = importer.user_id; + } else if (isExpiredUserRow) { + importer = expiredUsers.get(position - expiredStartRow); + userId = importer.user_id; } else if (isRequestedUserRow) { - userId = requestedUsers.get(position - requestedStartRow).user_id; + importer = requestedUsers.get(position - requestedStartRow); + userId = importer.user_id; } TLRPC.User user = users.get(userId); if (user != null) { MessagesController.getInstance(UserConfig.selectedAccount).putUser(user, false); - AndroidUtilities.runOnUIThread(() -> { - Bundle bundle = new Bundle(); - bundle.putLong("user_id", user.id); - ProfileActivity profileActivity = new ProfileActivity(bundle); - fragment.presentFragment(profileActivity); - isNeedReopen = true; - }, 100); - dismiss(); + if (isJoinedUserRow && invite.subscription_pricing != null) { + TLRPC.ChannelParticipant part = null; + if (info != null && info.participants != null) { + for (int i = 0; i < info.participants.participants.size(); i++) { + if (info.participants.participants.get(i).user_id == userId && info.participants.participants.get(i) instanceof TLRPC.TL_chatChannelParticipant) { + part = ((TLRPC.TL_chatChannelParticipant) info.participants.participants.get(i)).channelParticipant; + break; + } + } + } + if (part == null) { + AlertDialog progressDialog = new AlertDialog(context, AlertDialog.ALERT_TYPE_SPINNER); + progressDialog.showDelayed(120); + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(chatId); + final TLRPC.TL_chatInviteImporter finalImporter = importer; + MessagesController.getInstance(currentAccount).getChannelParticipant(chat, user, participant -> AndroidUtilities.runOnUIThread(() -> { + progressDialog.dismissUnless(400); +// if (participant != null) { + showSubscriptionSheet(context, currentAccount, -chatId, invite.subscription_pricing, finalImporter, participant, resourcesProvider); +// } else { +// AndroidUtilities.runOnUIThread(() -> { +// Bundle bundle = new Bundle(); +// bundle.putLong("user_id", user.id); +// ProfileActivity profileActivity = new ProfileActivity(bundle); +// fragment.presentFragment(profileActivity); +// isNeedReopen = true; +// }, 100); +// dismiss(); +// } + })); + } else { + showSubscriptionSheet(context, currentAccount, -chatId, invite.subscription_pricing, importer, part, resourcesProvider); + } + } else { + AndroidUtilities.runOnUIThread(() -> { + Bundle bundle = new Bundle(); + bundle.putLong("user_id", user.id); + ProfileActivity profileActivity = new ProfileActivity(bundle); + fragment.presentFragment(profileActivity); + isNeedReopen = true; + }, 100); + dismiss(); + } } } }); @@ -316,7 +391,7 @@ public class InviteLinkBottomSheet extends BottomSheet { titleTextView.setSingleLine(true); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); titleTextView.setEllipsize(TextUtils.TruncateAt.END); - titleTextView.setPadding(AndroidUtilities.dp(23), 0, AndroidUtilities.dp(23), 0); + titleTextView.setPadding(dp(23), 0, dp(23), 0); titleTextView.setGravity(Gravity.CENTER_VERTICAL); titleTextView.setTypeface(AndroidUtilities.bold()); if (!permanent) { @@ -462,34 +537,52 @@ public class InviteLinkBottomSheet extends BottomSheet { requestedStartRow = -1; requestedEndRow = -1; loadingRow = -1; + revenueHeaderRow = -1; + revenueRow = -1; + expiredHeaderRow = -1; + expiredStartRow = -1; + expiredEndRow = -1; if (!permanent) { linkActionRow = rowCount++; linkInfoRow = rowCount++; } + if (invite.subscription_pricing != null) { + revenueHeaderRow = rowCount++; + revenueRow = rowCount++; + } creatorHeaderRow = rowCount++; creatorRow = rowCount++; - emptyView = rowCount++; +// emptyView = rowCount++; - boolean needUsers = invite.usage > 0 || invite.usage_limit > 0 || invite.requested > 0; - boolean needLoadUsers = invite.usage > joinedUsers.size() || invite.request_needed && invite.requested > requestedUsers.size(); + boolean needUsers = invite.usage > 0 || invite.usage_limit > 0 || invite.requested > 0 || invite.subscription_expired > 0; + boolean needLoadUsers = invite.usage > joinedUsers.size() || invite.subscription_expired > expiredUsers.size() || invite.request_needed && invite.requested > requestedUsers.size(); boolean usersLoaded = false; if (!joinedUsers.isEmpty()) { - dividerRow = rowCount++; +// dividerRow = rowCount++; joinedHeaderRow = rowCount++; joinedStartRow = rowCount; rowCount += joinedUsers.size(); joinedEndRow = rowCount; - emptyView2 = rowCount++; +// emptyView2 = rowCount++; + usersLoaded = true; + } + if (!expiredUsers.isEmpty()) { +// dividerRow = rowCount++; + expiredHeaderRow = rowCount++; + expiredStartRow = rowCount; + rowCount += expiredUsers.size(); + expiredEndRow = rowCount; +// emptyView2 = rowCount++; usersLoaded = true; } if (!requestedUsers.isEmpty()) { - divider2Row = rowCount++; +// divider2Row = rowCount++; requestedHeaderRow = rowCount++; requestedStartRow = rowCount; rowCount += requestedUsers.size(); requestedEndRow = rowCount; - emptyView3 = rowCount++; +// emptyView3 = rowCount++; usersLoaded = true; } if (needUsers || needLoadUsers) { @@ -500,7 +593,7 @@ public class InviteLinkBottomSheet extends BottomSheet { } } if (emptyHintRow == -1) { - divider3Row = rowCount++; +// divider3Row = rowCount++; } adapter.notifyDataSetChanged(); @@ -510,7 +603,7 @@ public class InviteLinkBottomSheet extends BottomSheet { @Override public int getItemViewType(int position) { - if (position == creatorHeaderRow || position == requestedHeaderRow || position == joinedHeaderRow) { + if (position == creatorHeaderRow || position == requestedHeaderRow || position == joinedHeaderRow || position == revenueHeaderRow) { return 0; } else if (position == creatorRow || position >= requestedStartRow && position < requestedEndRow || position >= joinedStartRow && position < joinedEndRow) { return 1; @@ -528,6 +621,8 @@ public class InviteLinkBottomSheet extends BottomSheet { return 7; } else if (position == emptyHintRow) { return 8; + } else if (position == revenueRow) { + return 9; } return 0; } @@ -540,20 +635,24 @@ public class InviteLinkBottomSheet extends BottomSheet { switch (viewType) { default: case 0: - HeaderCell headerCell = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlueHeader, 21, 15, true); - headerCell.getTextView2().setTextColor(Theme.getColor(Theme.key_text_RedRegular)); - headerCell.getTextView2().setTextSize(15); - headerCell.getTextView2().setTypeface(AndroidUtilities.bold()); + GraySectionCell headerCell = new GraySectionCell(context, resourcesProvider); view = headerCell; break; case 1: - view = new UserCell(context, 12, 0, true); + view = new RevenueUserCell(context); break; case 2: view = new ShadowSectionCell(context, 12, Theme.getColor(Theme.key_windowBackgroundGray)); break; case 3: - LinkActionView linkActionView = new LinkActionView(context, fragment, InviteLinkBottomSheet.this, chatId, false, isChannel); + LinkActionView linkActionView = new LinkActionView(context, fragment, InviteLinkBottomSheet.this, chatId, false, isChannel) { + @Override + public void showBulletin(int resId, CharSequence str) { + Bulletin b = BulletinFactory.of(container, resourcesProvider).createSimpleBulletin(resId, str); + b.hideAfterBottomSheet = false; + b.show(true); + } + }; view = linkActionView; linkActionView.setDelegate(new LinkActionView.Delegate() { @Override @@ -660,14 +759,14 @@ public class InviteLinkBottomSheet extends BottomSheet { flickerLoadingView.setIsSingleCell(true); flickerLoadingView.setViewType(FlickerLoadingView.USERS2_TYPE); flickerLoadingView.showDate(false); - flickerLoadingView.setPaddingLeft(AndroidUtilities.dp(10)); + flickerLoadingView.setPaddingLeft(dp(10)); view = flickerLoadingView; break; case 6: view = new View(context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(5), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(5), MeasureSpec.EXACTLY)); } }; break; @@ -682,6 +781,9 @@ public class InviteLinkBottomSheet extends BottomSheet { case 8: view = new EmptyHintRow(context); break; + case 9: + view = new RevenueCell(context); + break; } view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new RecyclerListView.Holder(view); @@ -691,81 +793,103 @@ public class InviteLinkBottomSheet extends BottomSheet { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { switch (holder.getItemViewType()) { case 0: - HeaderCell headerCell = (HeaderCell) holder.itemView; + GraySectionCell headerCell = (GraySectionCell) holder.itemView; if (position == creatorHeaderRow) { - headerCell.setText(LocaleController.getString("LinkCreatedeBy", R.string.LinkCreatedeBy)); - headerCell.setText2(null); + headerCell.setText(LocaleController.getString(R.string.LinkCreatedeBy)); + headerCell.setRightText(null); + } else if (position == revenueHeaderRow) { + headerCell.setText(LocaleController.getString(R.string.LinkRevenue)); + headerCell.setRightText(null); } else if (position == joinedHeaderRow) { if (invite.usage > 0) { headerCell.setText(LocaleController.formatPluralString("PeopleJoined", invite.usage)); } else { - headerCell.setText(LocaleController.getString("NoOneJoined", R.string.NoOneJoined)); + headerCell.setText(LocaleController.getString(invite.subscription_pricing != null ? R.string.NoOneSubscribed : R.string.NoOneJoined)); } if (!invite.expired && !invite.revoked && invite.usage_limit > 0 && invite.usage > 0) { - headerCell.setText2(LocaleController.formatPluralString("PeopleJoinedRemaining", invite.usage_limit - invite.usage)); + headerCell.setRightText(LocaleController.formatPluralString("PeopleJoinedRemaining", invite.usage_limit - invite.usage)); } else { - headerCell.setText2(null); + headerCell.setRightText(null); } + } else if (position == expiredHeaderRow) { + headerCell.setText(LocaleController.formatPluralString("PeopleSubscriptionExpired", invite.subscription_expired)); + headerCell.setRightText(null); } else if (position == requestedHeaderRow) { headerCell.setText(LocaleController.formatPluralString("JoinRequests", invite.requested)); + headerCell.setRightText(null); } break; case 1: - UserCell userCell = (UserCell) holder.itemView; + RevenueUserCell userCell = (RevenueUserCell) holder.itemView; TLRPC.User user; String role = null; String status = null; + TLRPC.ChatParticipant part = null; + TLRPC.TL_chatInviteImporter invitedUser = null; + long userId; if (position == creatorRow) { - user = users.get(invite.admin_id); + userId = invite.admin_id; + } else { + int startRow = joinedStartRow; + List usersList = joinedUsers; + if (expiredStartRow != -1 && position >= expiredStartRow) { + startRow = expiredStartRow; + usersList = expiredUsers; + } + if (requestedStartRow != -1 && position >= requestedStartRow) { + startRow = requestedStartRow; + usersList = requestedUsers; + } + invitedUser = usersList.get(position - startRow); + userId = invitedUser.user_id; + } + user = users.get(userId); + if (info != null && info.participants != null) { + for (int i = 0; i < info.participants.participants.size(); i++) { + if (info.participants.participants.get(i).user_id == userId) { + part = info.participants.participants.get(i); + break; + } + } + } + if (position == creatorRow) { + user = users.get(userId); if (user == null) { user = MessagesController.getInstance(currentAccount).getUser(invite.admin_id); } if (user != null) { status = LocaleController.formatDateAudio(invite.date, false); } - if (info != null && user != null && info.participants != null) { - for (int i = 0; i < info.participants.participants.size(); i++) { - if (info.participants.participants.get(i).user_id == user.id) { - TLRPC.ChatParticipant part = info.participants.participants.get(i); - - if (part instanceof TLRPC.TL_chatChannelParticipant) { - TLRPC.ChannelParticipant channelParticipant = ((TLRPC.TL_chatChannelParticipant) part).channelParticipant; - if (!TextUtils.isEmpty(channelParticipant.rank)) { - role = channelParticipant.rank; - } else { - if (channelParticipant instanceof TLRPC.TL_channelParticipantCreator) { - role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); - } else if (channelParticipant instanceof TLRPC.TL_channelParticipantAdmin) { - role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); - } else { - role = null; - } - } - } else { - if (part instanceof TLRPC.TL_chatParticipantCreator) { - role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); - } else if (part instanceof TLRPC.TL_chatParticipantAdmin) { - role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); - } else { - role = null; - } - } - break; + } + if (position == creatorRow && part != null) { + if (part instanceof TLRPC.TL_chatChannelParticipant) { + TLRPC.ChannelParticipant channelParticipant = ((TLRPC.TL_chatChannelParticipant) part).channelParticipant; + if (!TextUtils.isEmpty(channelParticipant.rank)) { + role = channelParticipant.rank; + } else { + if (channelParticipant instanceof TLRPC.TL_channelParticipantCreator) { + role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); + } else if (channelParticipant instanceof TLRPC.TL_channelParticipantAdmin) { + role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); + } else { + role = null; } } + } else { + if (part instanceof TLRPC.TL_chatParticipantCreator) { + role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); + } else if (part instanceof TLRPC.TL_chatParticipantAdmin) { + role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); + } else { + role = null; + } } - } else { - int startRow = joinedStartRow; - List usersList = joinedUsers; - if (requestedStartRow != -1 && position >= requestedStartRow) { - startRow = requestedStartRow; - usersList = requestedUsers; - } - TLRPC.TL_chatInviteImporter invitedUser = usersList.get(position - startRow); - user = users.get(invitedUser.user_id); } userCell.setAdminRole(role); userCell.setData(user, null, status, 0, false); + if (position != creatorRow && invite.subscription_pricing != null && invitedUser != null) { + userCell.setRevenue(invite.subscription_pricing, invitedUser.date); + } break; case 3: LinkActionView actionView = (LinkActionView) holder.itemView; @@ -791,7 +915,6 @@ public class InviteLinkBottomSheet extends BottomSheet { privacyCell.setText(LocaleController.getString("LinkIsExpired", R.string.LinkIsExpired)); privacyCell.setTextColor(Theme.getColor(Theme.key_text_RedRegular)); } - } else if (invite.expire_date > 0) { long currentTime = System.currentTimeMillis() + timeDif * 1000L; long expireTime = invite.expire_date * 1000L; @@ -814,7 +937,7 @@ public class InviteLinkBottomSheet extends BottomSheet { privacyCell.setText(LocaleController.formatString("LinkExpiresInTime", R.string.LinkExpiresInTime, time)); } } else { - privacyCell.setFixedSize(12); + privacyCell.setFixedSize(-1); privacyCell.setText(null); } break; @@ -827,6 +950,9 @@ public class InviteLinkBottomSheet extends BottomSheet { emptyHintRow.textView.setVisibility(View.GONE); } break; + case 9: + ((RevenueCell) holder.itemView).set(invite.subscription_pricing, invite.usage); + break; } } @@ -922,22 +1048,30 @@ public class InviteLinkBottomSheet extends BottomSheet { } boolean hasMoreJoinedUsers = invite.usage > joinedUsers.size(); + boolean hasMoreExpiredUsers = invite.subscription_expired > expiredUsers.size(); boolean hasMoreRequestedUsers = invite.request_needed && invite.requested > requestedUsers.size(); boolean loadRequestedUsers; + boolean loadExpiredUsers; if (hasMoreJoinedUsers) { loadRequestedUsers = false; + loadExpiredUsers = false; + } else if (hasMoreExpiredUsers) { + loadRequestedUsers = false; + loadExpiredUsers = true; } else if (hasMoreRequestedUsers) { loadRequestedUsers = true; + loadExpiredUsers = false; } else { return; } - final List importersList = loadRequestedUsers ? requestedUsers : joinedUsers; + final List importersList = loadRequestedUsers ? requestedUsers : loadExpiredUsers ? expiredUsers : joinedUsers; TLRPC.TL_messages_getChatInviteImporters req = new TLRPC.TL_messages_getChatInviteImporters(); req.flags |= 2; req.link = invite.link; req.peer = MessagesController.getInstance(UserConfig.selectedAccount).getInputPeer(-chatId); req.requested = loadRequestedUsers; + req.subscription_expired = loadExpiredUsers; if (importersList.isEmpty()) { req.offset_user = new TLRPC.TL_inputUserEmpty(); } else { @@ -958,7 +1092,9 @@ public class InviteLinkBottomSheet extends BottomSheet { } hasMore = loadRequestedUsers ? importersList.size() < inviteImporters.count - : importersList.size() < inviteImporters.count || hasMoreRequestedUsers; + : loadExpiredUsers + ? importersList.size() < inviteImporters.count || hasMoreRequestedUsers + : importersList.size() < inviteImporters.count || hasMoreRequestedUsers || hasMoreExpiredUsers; updateRows(); } usersLoading = false; @@ -1029,7 +1165,7 @@ public class InviteLinkBottomSheet extends BottomSheet { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(84), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(84), MeasureSpec.EXACTLY)); } } @@ -1043,4 +1179,262 @@ public class InviteLinkBottomSheet extends BottomSheet { void onLinkDeleted(TLRPC.TL_chatInviteExported invite); void onLinkEdited(TLRPC.TL_chatInviteExported invite); } + + private class RevenueUserCell extends UserCell { + + public final LinearLayout layout; + public final TextView priceView; + public final TextView periodView; + + public RevenueUserCell(Context context) { + super(context, 6, 0, true); + + layout = new LinearLayout(context); + layout.setOrientation(LinearLayout.VERTICAL); + + priceView = new TextView(context); + priceView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + priceView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + priceView.setTypeface(AndroidUtilities.bold()); + layout.addView(priceView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT)); + + periodView = new TextView(context); + periodView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2)); + periodView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + layout.addView(periodView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 1, 0, 0)); + + addView(layout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), 18, 0, 18, 0)); + } + + public void setRevenue(TLRPC.TL_starsSubscriptionPricing pricing, int joined_date) { + if (pricing == null) { + priceView.setText(null); + periodView.setText(null); + setRightPadding(0, true, true); + } else { + final CharSequence amountText = StarsIntroActivity.replaceStarsWithPlain("⭐️" + pricing.amount, .7f); + final CharSequence periodText = pricing.period == StarsController.PERIOD_MONTHLY ? LocaleController.getString(R.string.StarsParticipantSubscriptionPerMonth) : (pricing.period == StarsController.PERIOD_5MINUTES ? "per 5 minutes" : "per each minute"); + priceView.setText(amountText); + periodView.setText(periodText); + setRightPadding( + (int) Math.max(HintView2.measureCorrectly(amountText, priceView.getPaint()), HintView2.measureCorrectly(periodText, periodView.getPaint())), + true, true + ); + statusTextView.setText(LocaleController.formatJoined(joined_date)); + } + } + + } + + private class RevenueCell extends FrameLayout { + + public final ImageView imageView; + public final TextView titleView; + public final TextView subtitleView; + + public RevenueCell(Context context) { + super(context); + + imageView = new ImageView(context); + imageView.setBackground(Theme.createCircleDrawable(46, Theme.getColor(Theme.key_avatar_backgroundGreen), Theme.getColor(Theme.key_avatar_background2Green))); + imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + imageView.setImageResource(R.drawable.large_income); + imageView.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN)); + addView(imageView, LayoutHelper.createFrame(46, 46, Gravity.LEFT | Gravity.CENTER_VERTICAL, 13, 0, 0, 0)); + + titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 72, 9, 0, 0)); + + subtitleView = new TextView(context); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); + addView(subtitleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 72, 32, 0, 0)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(58), MeasureSpec.EXACTLY) + ); + } + + public void set(TLRPC.TL_starsSubscriptionPricing pricing, int count) { + if (pricing == null) return; + if (pricing.period == StarsController.PERIOD_MONTHLY) { + titleView.setText(StarsIntroActivity.replaceStarsWithPlain(LocaleController.formatString(R.string.LinkRevenuePrice, pricing.amount) + (count > 0 ? " x " + count : ""), .8f)); + subtitleView.setText(count == 0 ? getString(R.string.NoOneSubscribed) : LocaleController.formatString(R.string.LinkRevenuePriceInfo, BillingController.getInstance().formatCurrency((long) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000 * count), "USD"))); + } else { + final String period = pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + titleView.setText(StarsIntroActivity.replaceStarsWithPlain(String.format(Locale.US, "⭐%1$d/%2$s", pricing.amount, period) + (count > 0 ? " x " + count : ""), .8f)); + subtitleView.setText(count == 0 ? getString(R.string.NoOneSubscribed) : String.format(Locale.US, "you get approximately %1$s %2$s", BillingController.getInstance().formatCurrency((long) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000 * count), "USD"), "for " + period)); + } + } + + } + + public static BottomSheet showSubscriptionSheet( + Context context, + int currentAccount, + long dialogId, + TLRPC.TL_starsSubscriptionPricing pricing, + TLRPC.TL_chatInviteImporter importer, + TLRPC.ChannelParticipant participant, + Theme.ResourcesProvider resourcesProvider + ) { + final BottomSheet.Builder b = new BottomSheet.Builder(context, false, resourcesProvider); + final BottomSheet[] sheet = new BottomSheet[1]; + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(dp(16), dp(20), dp(16), dp(4)); + linearLayout.setClipChildren(false); + linearLayout.setClipToPadding(false); + + FrameLayout topView = new FrameLayout(context); + linearLayout.addView(topView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL, 0, 0, 0, 10)); + + BackupImageView imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(50)); + AvatarDrawable avatarDrawable = new AvatarDrawable(); + if (dialogId >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialogId); + avatarDrawable.setInfo(user); + imageView.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + avatarDrawable.setInfo(chat); + imageView.setForUserOrChat(chat, avatarDrawable); + } + topView.addView(imageView, LayoutHelper.createFrame(100, 100, Gravity.CENTER)); + + Drawable starBg = context.getResources().getDrawable(R.drawable.star_small_outline); + starBg.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogBackground, resourcesProvider), PorterDuff.Mode.SRC_IN)); + Drawable starFg = context.getResources().getDrawable(R.drawable.star_small_inner); + + ImageView starBgView = new ImageView(context); + starBgView.setImageDrawable(starBg); + topView.addView(starBgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starBgView.setTranslationX(dp(34)); + starBgView.setTranslationY(dp(35)); + starBgView.setScaleX(1.1f); + starBgView.setScaleY(1.1f); + + ImageView starFgView = new ImageView(context); + starFgView.setImageDrawable(starFg); + topView.addView(starFgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starFgView.setTranslationX(dp(34)); + starFgView.setTranslationY(dp(35)); + + TextView textView = new TextView(context); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + textView.setTypeface(AndroidUtilities.bold()); + textView.setGravity(Gravity.CENTER); + textView.setText(getString(R.string.StarsSubscriptionTitle)); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + if (pricing.period == StarsController.PERIOD_MONTHLY) { + textView.setText(StarsIntroActivity.replaceStarsWithPlain(formatString(R.string.StarsSubscriptionPrice, pricing.amount), .8f)); + } else { + final String period = pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + textView.setText(StarsIntroActivity.replaceStarsWithPlain(String.format(Locale.US, "⭐%1$d/%2$s", pricing.amount, period), .8f)); + } + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + if (pricing.period == StarsController.PERIOD_MONTHLY) { + textView.setText(formatString(R.string.StarsParticipantSubscriptionApproxMonth, BillingController.getInstance().formatCurrency((int) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000), "USD"))); + } else { + final String period = pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + textView.setText(String.format(Locale.US, "appx. %1$s per %2$s", BillingController.getInstance().formatCurrency((int) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000), "USD"), period)); + } + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + TableView tableView = new TableView(context, resourcesProvider); + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setPadding(dp(12.66f), dp(9.33f), dp(12.66f), dp(9.33f)); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); + CharSequence username; + boolean deleted = false; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(importer.user_id); + deleted = user == null; + username = UserObject.getUserName(user); + avatarSpan.setUser(user); + SpannableStringBuilder ssb = new SpannableStringBuilder("x " + username); + ssb.setSpan(avatarSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + sheet[0].dismiss(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.presentFragment(ProfileActivity.of(importer.user_id)); + } + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setUnderlineText(false); + } + }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(ssb); + if (!deleted) { + tableView.addRowUnpadded(getString(R.string.StarsParticipantSubscription), textView); + } + + tableView.addRow( + getString(R.string.StarsParticipantSubscriptionStart), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date(importer.date * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date(importer.date * 1000L))) + ); + final int now = ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + if (participant != null) { + tableView.addRow( + getString(participant.subscription_until_date > now ? R.string.StarsParticipantSubscriptionRenews : R.string.StarsParticipantSubscriptionExpired), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date(participant.subscription_until_date * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date(participant.subscription_until_date * 1000L))) + ); + } + linearLayout.addView(tableView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 17, 0, 0)); + + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsTransactionTOS), () -> { + Browser.openUrl(context, getString(R.string.StarsTOSLink)); + })); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 14, 15, 14, 15)); + + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.OK), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + sheet[0].dismiss(); + }); + + b.setCustomView(linearLayout); + sheet[0] = b.create(); + sheet[0].useBackgroundTopPadding = false; + + sheet[0].fixNavigationBar(); + sheet[0].show(); + return sheet[0]; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java index c29f27b10..298faf726 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java @@ -14,6 +14,7 @@ import android.graphics.PorterDuff; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.KeyEvent; @@ -38,6 +39,7 @@ import org.telegram.messenger.LocaleController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; @@ -235,8 +237,8 @@ public class ItemOptions { subItem.setText(text); } - subItem.setColors(Theme.getColor(textColorKey, resourcesProvider), Theme.getColor(iconColorKey, resourcesProvider)); - subItem.setSelectorColor(Theme.multAlpha(Theme.getColor(textColorKey, resourcesProvider), .12f)); + subItem.setColors(textColor != null ? textColor : Theme.getColor(textColorKey, resourcesProvider), iconColor != null ? iconColor : Theme.getColor(iconColorKey, resourcesProvider)); + subItem.setSelectorColor(selectorColor != null ? selectorColor : Theme.multAlpha(Theme.getColor(textColorKey, resourcesProvider), .12f)); subItem.setOnClickListener(view1 -> { if (onClickListener != null) { @@ -323,6 +325,9 @@ public class ItemOptions { public ItemOptions addGap() { ActionBarPopupWindow.GapView gap = new ActionBarPopupWindow.GapView(context, resourcesProvider); gap.setTag(R.id.fit_width_tag, 1); + if (gapBackgroundColor != null) { + gap.setColor(gapBackgroundColor); + } addView(gap, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); return this; } @@ -378,6 +383,8 @@ public class ItemOptions { final TextView titleText = new TextView(context); titleText.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); titleText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + titleText.setEllipsize(TextUtils.TruncateAt.END); + titleText.setSingleLine(true); if (obj instanceof TLRPC.User) { titleText.setText(UserObject.getUserName((TLRPC.User) obj)); } else if (obj instanceof TLRPC.Chat) { @@ -648,7 +655,7 @@ public class ItemOptions { } int Y; if (scrimView != null) { - if (forceTop || y + layout.getMeasuredHeight() + dp(16) > AndroidUtilities.displaySize.y) { + if (forceTop || y + layout.getMeasuredHeight() + dp(16) > AndroidUtilities.displaySize.y - AndroidUtilities.navigationBarHeight) { // put above scrimView y -= scrimView.getMeasuredHeight(); y -= layout.getMeasuredHeight(); @@ -684,6 +691,67 @@ public class ItemOptions { return this; } + private Integer gapBackgroundColor; + public ItemOptions setGapBackgroundColor(int color) { + gapBackgroundColor = color; + for (int j = 0; j < layout.getChildCount(); ++j) { + View child = j == layout.getChildCount() - 1 ? lastLayout : layout.getChildAt(j); + if (child instanceof ActionBarPopupWindow.ActionBarPopupWindowLayout) { + ActionBarPopupWindow.ActionBarPopupWindowLayout l = (ActionBarPopupWindow.ActionBarPopupWindowLayout) child; + for (int i = 0; i < l.getItemsCount(); ++i) { + View child2 = l.getItemAt(i); + if (child2 instanceof ActionBarPopupWindow.GapView) { + ((ActionBarPopupWindow.GapView) child2).setColor(color); + } + } + } else if (child instanceof ActionBarPopupWindow.GapView) { + ((ActionBarPopupWindow.GapView) child).setColor(color); + } + } + return this; + } + + private Integer textColor, iconColor; + public ItemOptions setColors(int textColor, int iconColor) { + this.textColor = textColor; + this.iconColor = iconColor; + for (int j = 0; j < layout.getChildCount(); ++j) { + View child = j == layout.getChildCount() - 1 ? lastLayout : layout.getChildAt(j); + if (child instanceof ActionBarPopupWindow.ActionBarPopupWindowLayout) { + ActionBarPopupWindow.ActionBarPopupWindowLayout l = (ActionBarPopupWindow.ActionBarPopupWindowLayout) child; + for (int i = 0; i < l.getItemsCount(); ++i) { + View child2 = l.getItemAt(i); + if (child2 instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child2).setColors(textColor, iconColor); + } + } + } else if (child instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child).setColors(textColor, iconColor); + } + } + return this; + } + + private Integer selectorColor; + public ItemOptions setSelectorColor(int selectorColor) { + this.selectorColor = selectorColor; + for (int j = 0; j < layout.getChildCount(); ++j) { + View child = j == layout.getChildCount() - 1 ? lastLayout : layout.getChildAt(j); + if (child instanceof ActionBarPopupWindow.ActionBarPopupWindowLayout) { + ActionBarPopupWindow.ActionBarPopupWindowLayout l = (ActionBarPopupWindow.ActionBarPopupWindowLayout) child; + for (int i = 0; i < l.getItemsCount(); ++i) { + View child2 = l.getItemAt(i); + if (child2 instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child2).setSelectorColor(selectorColor); + } + } + } else if (child instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child).setSelectorColor(selectorColor); + } + } + return this; + } + public float getOffsetX() { return offsetX; } @@ -810,7 +878,21 @@ public class ItemOptions { canvas.translate(point[0], point[1]); if (scrimViewBackground != null) { - scrimViewBackground.setBounds( -viewAdditionalOffsets.left, -viewAdditionalOffsets.top, scrimView.getWidth() + viewAdditionalOffsets.right, scrimView.getHeight() + viewAdditionalOffsets.bottom); + if (scrimViewBackground.getIntrinsicWidth() > 0 && scrimViewBackground.getIntrinsicHeight() > 0) { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right - scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom - scrimViewBackground.getIntrinsicHeight()) / 2, + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right + scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom + scrimViewBackground.getIntrinsicHeight()) / 2 + ); + } else { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left, + -viewAdditionalOffsets.top, + scrimView.getWidth() + viewAdditionalOffsets.right, + scrimView.getHeight() + viewAdditionalOffsets.bottom + ); + } scrimViewBackground.draw(canvas); } canvas.drawBitmap(cachedBitmap, -viewAdditionalOffsets.left, -viewAdditionalOffsets.top, cachedBitmapPaint); @@ -823,7 +905,21 @@ public class ItemOptions { canvas.translate(point[0], point[1]); if (scrimViewBackground != null) { - scrimViewBackground.setBounds( -viewAdditionalOffsets.left, -viewAdditionalOffsets.top, scrimView.getWidth() + viewAdditionalOffsets.right, scrimView.getHeight() + viewAdditionalOffsets.bottom); + if (scrimViewBackground.getIntrinsicWidth() > 0 && scrimViewBackground.getIntrinsicHeight() > 0) { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right - scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom - scrimViewBackground.getIntrinsicHeight()) / 2, + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right + scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom + scrimViewBackground.getIntrinsicHeight()) / 2 + ); + } else { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left, + -viewAdditionalOffsets.top, + scrimView.getWidth() + viewAdditionalOffsets.right, + scrimView.getHeight() + viewAdditionalOffsets.bottom + ); + } scrimViewBackground.draw(canvas); } scrimView.draw(canvas); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java index ba839a9d3..dab9fcaf4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java @@ -12,6 +12,7 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; +import android.util.Log; import android.view.View; import android.view.animation.DecelerateInterpolator; @@ -128,6 +129,7 @@ public class LineProgressView extends View { } cellFlickerDrawable.setParentWidth(getMeasuredWidth()); cellFlickerDrawable.draw(canvas, rect, getHeight() / 2f, null); + invalidate(); } updateAnimation(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java index b96b15574..30d78de2e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java @@ -1,5 +1,8 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; @@ -25,11 +28,13 @@ import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.collection.LongSparseArray; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.DialogObject; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessagesController; @@ -44,6 +49,7 @@ import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.DialogCell; +import org.telegram.ui.ManageLinksActivity; import java.util.ArrayList; @@ -177,10 +183,23 @@ public class LinkActionView extends LinearLayout { if (link == null) { return; } - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, link); - fragment.startActivityForResult(Intent.createChooser(intent, LocaleController.getString("InviteToGroupByLink", R.string.InviteToGroupByLink)), 500); + fragment.showDialog(new ShareAlert(getContext(), null, link, false, link, false, fragment.getResourceProvider()) { + @Override + protected void onSend(LongSparseArray dids, int count, TLRPC.TL_forumTopic topic) { + final String str; + if (dids != null && dids.size() == 1) { + long did = dids.valueAt(0).id; + if (did == 0 || did == UserConfig.getInstance(currentAccount).getClientUserId()) { + str = getString(R.string.InvLinkToSavedMessages); + } else { + str = formatString(R.string.InvLinkToUser, MessagesController.getInstance(currentAccount).getPeerName(did, true)); + } + } else { + str = formatString(R.string.InvLinkToChats, LocaleController.formatPluralString("Chats", count)); + } + showBulletin(R.raw.forward, AndroidUtilities.replaceTags(str)); + } + }); } catch (Exception e) { FileLog.e(e); } @@ -333,6 +352,12 @@ public class LinkActionView extends LinearLayout { updateColors(); } + public void showBulletin(int resId, CharSequence str) { + Bulletin b = BulletinFactory.of(fragment).createSimpleBulletin(resId, str); + b.hideAfterBottomSheet = false; + b.show(true); + } + private void getPointOnScreen(FrameLayout frameLayout, FrameLayout finalContainer, float[] point) { float x = 0; float y = 0; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java index f9629debf..3c8eb258a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java @@ -151,7 +151,7 @@ public class LinkPath extends CornerPath { } centerX = (right + left) / 2; centerY = (y2 + y) / 2; - if (useRoundRect && LiteMode.isEnabled(LiteMode.FLAGS_CHAT)) { + if (useRoundRect) { // final CharSequence text = currentLayout.getText(); // int startOffset = currentLayout.getOffsetForHorizontal(currentLine, left), endOffset = currentLayout.getOffsetForHorizontal(currentLine, right) + 1; boolean startsWithWhitespace = false; // startOffset >= 0 && startOffset < text.length() && text.charAt(startOffset) == ' '; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java index cec1bfac6..dee2fe6cb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java @@ -344,7 +344,7 @@ public class MediaActivity extends BaseFragment implements SharedMediaLayout.Sha boolean hasAvatar = type == TYPE_MEDIA; if (type == TYPE_STORIES_SEARCH) { - actionBar.setTitle("#" + hashtag); + actionBar.setTitle(hashtag); } else { titlesContainer = new FrameLayout(context); avatarContainer.addView(titlesContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java index f57422278..4fead7e1e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java @@ -382,7 +382,7 @@ public class MessagePreviewView extends FrameLayout { cell.drawMessageText(canvas); if ((cell.getCurrentMessagesGroup() == null || cell.getCurrentPosition() != null && ((cell.getCurrentPosition().flags & cell.captionFlag()) != 0 && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) != 0 || cell.getCurrentMessagesGroup() != null && cell.getCurrentMessagesGroup().isDocuments)) || cell.getTransitionParams().animateBackgroundBoundsInner) { cell.drawCaptionLayout(canvas, false, cell.getAlpha()); - cell.drawReactionsLayout(canvas, cell.getAlpha()); + cell.drawReactionsLayout(canvas, cell.getAlpha(), null); } if (cell.getCurrentMessagesGroup() != null || cell.getTransitionParams().animateBackgroundBoundsInner) { cell.drawNamesLayout(canvas, cell.getAlpha()); @@ -1471,11 +1471,11 @@ public class MessagePreviewView extends FrameLayout { chatPreviewContainer.setTranslationY(0); menu.setTranslationY(0); } else { - actionBar.setTranslationY(chatTopOffset); + actionBar.setTranslationY(Math.max(0, chatTopOffset)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { chatPreviewContainer.invalidateOutline(); } - chatPreviewContainer.setTranslationY(yOffset); + chatPreviewContainer.setTranslationY(Math.max(0, yOffset)); menu.setTranslationY(yOffset + chatPreviewContainer.getMeasuredHeight() - dp(2)); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java index dad03d4d3..aaf119272 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java @@ -138,6 +138,8 @@ public class EntityView extends FrameLayout { updatePosition(); } + public void setIsVideo(boolean isVideo) {} + protected float getMaxScale() { return 100f; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java index acbf2bbc3..7797322ff 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java @@ -105,17 +105,17 @@ public class LinkPreview extends View { public int type, color; private WebPagePreview webpage; - private float w, h; + public float w, h; private float previewHeight; private float photoHeight; - private void setupLayout() { + public void setupLayout() { if (!relayout || webpage == null) { return; } - final String text = TextUtils.isEmpty(webpage.name) ? fromUrl(webpage.url) : webpage.name; if (withPreview()) { + final String text = TextUtils.isEmpty(webpage.name) ? fromUrl(webpage.url) : webpage.name; final TLRPC.WebPage preview = this.webpage.webpage; float maxWidth = this.maxWidth - padx - padx; @@ -213,7 +213,7 @@ public class LinkPreview extends View { h += 11 * density; } else { - + final String text = TextUtils.isEmpty(webpage.name) ? fromUrlWithoutSchema(webpage.url).toUpperCase() : webpage.name; float maxWidth = this.maxWidth - padx - padx - (padding.left + iconSize + iconPadding + padding.right) * density; textScale = 1f; layout = new StaticLayout(TextUtils.ellipsize(text, layoutPaint, (int) Math.ceil(maxWidth), TextUtils.TruncateAt.END), layoutPaint, (int) Math.ceil(maxWidth), Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); @@ -303,6 +303,13 @@ public class LinkPreview extends View { return url; } + public static String fromUrlWithoutSchema(String url) { + if (url.startsWith("https://")) { + return url.substring(8); + } + return url; + } + private final RectF bounds = new RectF(); private final RectF rect = new RectF(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java index ed9e0176e..525a35c3f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java @@ -10,7 +10,6 @@ import android.view.Gravity; import android.view.ViewGroup; import org.telegram.messenger.AndroidUtilities; -import org.telegram.tgnet.TLRPC; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.Point; @@ -21,6 +20,7 @@ public class LinkView extends EntityView { public final LinkPreview marker; private int currentColor; private int currentType; + private boolean hasColor; public LinkPreview.WebPagePreview link; public TL_stories.MediaArea mediaArea; @@ -45,13 +45,13 @@ public class LinkView extends EntityView { return marker.pady; } - public LinkView(Context context, Point position, int currentAccount, LinkPreview.WebPagePreview link, TL_stories.MediaArea mediaArea, float density, int maxWidth, int type, int color) { + public LinkView(Context context, Point position, int currentAccount, LinkPreview.WebPagePreview link, TL_stories.MediaArea mediaArea, float density, int maxWidth, int type) { super(context, position); marker = new LinkPreview(context, density); marker.setMaxWidth(maxWidth); setLink(currentAccount, link, mediaArea); - marker.setType(currentType = type, currentColor = color); + marker.setType(currentType = type, currentColor); addView(marker, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP)); setClipChildren(false); @@ -87,12 +87,14 @@ public class LinkView extends EntityView { marker.setType(currentType = type, currentColor); } - public void setType(int type, int color) { - marker.setType(currentType = type, currentColor = color); - } public void setColor(int color) { - setType(currentType, color); + hasColor = true; + currentColor = color; + } + + public boolean hasColor() { + return hasColor; } public int getColor() { @@ -103,6 +105,14 @@ public class LinkView extends EntityView { return currentType; } + public int getNextType() { + int nextType = currentType + 1; + if (nextType == 4) { + return hasColor ? 0 : 1; + } + return nextType; + } + @Override protected float getMaxScale() { return 1.5f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java index e6bc6c97f..7b82f8ff5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java @@ -4,16 +4,12 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; -import android.graphics.LinearGradient; -import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; -import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.text.Layout; import android.text.StaticLayout; @@ -24,25 +20,27 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.Emoji; -import org.telegram.messenger.FileLoader; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.MediaDataController; +import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.tgnet.TLRPC; -import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.AnimatedFloat; import org.telegram.ui.Components.CubicBezierInterpolator; -import org.telegram.ui.Components.Paint.PaintTypeface; import org.telegram.ui.Stories.recorder.HintView2; -import java.util.concurrent.CountDownLatch; +import java.util.ArrayList; public class LocationMarker extends View { + public static final int VARIANT_LOCATION = 0; + public static final int VARIANT_WEATHER = 1; + + public final int variant; + private int maxWidth; private String text = ""; private boolean relayout; @@ -55,12 +53,14 @@ public class LocationMarker extends View { private final float iconSize = 21.33f; private final TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - private final Paint outlinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint outlinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Drawable icon; private boolean hasFlag; private final ImageReceiver flagImageReceiver = new ImageReceiver(this); + private final ImageReceiver flagAnimatedImageReceiver = new ImageReceiver(this); private TLRPC.Document flagDocument; + private TLRPC.Document flagAnimatedDocument; private boolean forceEmoji; public final float density; @@ -71,19 +71,27 @@ public class LocationMarker extends View { public final int type; public final int padx, pady; - public LocationMarker(Context context, float density, int type) { + public LocationMarker(Context context, int variant, float density, int type) { super(context); + + this.variant = variant; this.density = density; flagImageReceiver.setCrossfadeWithOldImage(true); + flagImageReceiver.setInvalidateAll(true); + flagAnimatedImageReceiver.setCrossfadeWithOldImage(true); + flagAnimatedImageReceiver.setInvalidateAll(true); padx = (int) (3 * density); pady = (int) (1 * density); + setPadding(padx, pady, padx, pady); this.type = type; icon = context.getResources().getDrawable(R.drawable.map_pin3).mutate(); textPaint.setTextSize(24 * density); textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/rcondensedbold.ttf")); + + NotificationCenter.listenEmojiLoading(this); } public void setMaxWidth(int maxWidth) { @@ -99,83 +107,110 @@ public class LocationMarker extends View { private Drawable getEmojiThumb(String emoji) { Drawable drawable = Emoji.getEmojiBigDrawable(emoji); + if (drawable instanceof Emoji.SimpleEmojiDrawable) { + ((Emoji.SimpleEmojiDrawable) drawable).fullSize = false; + } if (drawable == null) { return null; } + final Drawable emojiDrawable = drawable; return new Drawable() { @Override public void draw(@NonNull Canvas canvas) { canvas.save(); - if (drawable.getBounds() != null) { - canvas.scale(1f / SCALE, 1f / SCALE, drawable.getBounds().centerX(), drawable.getBounds().centerY()); + if (emojiDrawable.getBounds() != null) { + canvas.scale(1f / SCALE, 1f / SCALE, emojiDrawable.getBounds().centerX(), emojiDrawable.getBounds().centerY()); } - drawable.draw(canvas); + emojiDrawable.draw(canvas); canvas.restore(); } @Override public void setAlpha(int alpha) { - drawable.setAlpha(alpha); + emojiDrawable.setAlpha(alpha); } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { - drawable.setColorFilter(colorFilter); + emojiDrawable.setColorFilter(colorFilter); } @Override public void setBounds(@NonNull Rect bounds) { - drawable.setBounds(bounds); + emojiDrawable.setBounds(bounds); } @Override public void setBounds(int left, int top, int right, int bottom) { - drawable.setBounds(left, top, right, bottom); + emojiDrawable.setBounds(left, top, right, bottom); } @Override public int getOpacity() { - return drawable.getOpacity(); + return emojiDrawable.getOpacity(); } }; } - public void setCountryCodeEmoji(int currentAccount, String emoji) { + public void setCodeEmoji(int currentAccount, String emoji) { if (TextUtils.isEmpty(emoji)) { hasFlag = false; + flagDocument = null; + flagAnimatedDocument = null; flagImageReceiver.clearImage(); + flagAnimatedImageReceiver.clearImage(); } else { hasFlag = true; flagDocument = null; -// TLRPC.TL_inputStickerSetShortName inputStickerSetShortName = new TLRPC.TL_inputStickerSetShortName(); -// inputStickerSetShortName.short_name = "RestrictedEmoji"; -// TLRPC.TL_messages_stickerSet instantSet = MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName, 0, false, set -> { -// flagDocument = findDocument(set, emoji); -// if (flagDocument == null) { - TLRPC.TL_inputStickerSetShortName inputStickerSetShortName2 = new TLRPC.TL_inputStickerSetShortName(); - inputStickerSetShortName2.short_name = "StaticEmoji"; - MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName2, 0, false, set2 -> { - flagDocument = findDocument(set2, emoji); - flagImageReceiver.setImage( - ImageLocation.getForDocument(flagDocument), "80_80", - getEmojiThumb(emoji), - null, null, 0 - ); - }); -// return; -// } -// flagImageReceiver.setImage( -// ImageLocation.getForDocument(flagDocument), "80_80", -// getEmojiThumb(emoji), -// null, null, 0 -// ); -// }); -// flagDocument = findDocument(instantSet, emoji); + flagAnimatedDocument = null; + + TLRPC.TL_inputStickerSetShortName inputStickerSetShortName2 = new TLRPC.TL_inputStickerSetShortName(); + inputStickerSetShortName2.short_name = "StaticEmoji"; + MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName2, 0, false, set2 -> { + flagDocument = findDocument(set2, emoji); + flagImageReceiver.setImage( + ImageLocation.getForDocument(flagDocument), "80_80", + getEmojiThumb(emoji), + null, null, 0 + ); + flagAnimatedImageReceiver.setImage( + ImageLocation.getForDocument(flagAnimatedDocument), "80_80", + ImageLocation.getForDocument(flagDocument), "80_80", + null, null, + getEmojiThumb(emoji), + 0, null, null, 0 + ); + }); + + TLRPC.TL_inputStickerSetShortName inputStickerSetShortName = new TLRPC.TL_inputStickerSetShortName(); + inputStickerSetShortName.short_name = "RestrictedEmoji"; + TLRPC.TL_messages_stickerSet instantSet = MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName, 0, false, set -> { + flagAnimatedDocument = findDocument(set, emoji); + if (flagAnimatedDocument == null) { + return; + } + flagAnimatedImageReceiver.setImage( + ImageLocation.getForDocument(flagAnimatedDocument), "80_80", + ImageLocation.getForDocument(flagDocument), "80_80", + null, null, + getEmojiThumb(emoji), + 0, null, null, 0 + ); + }); + flagImageReceiver.setImage( ImageLocation.getForDocument(flagDocument), "80_80", getEmojiThumb(emoji), null, null, 0 ); + + flagAnimatedImageReceiver.setImage( + ImageLocation.getForDocument(flagAnimatedDocument), "80_80", + ImageLocation.getForDocument(flagDocument), "80_80", + null, null, + getEmojiThumb(emoji), + 0, null, null, 0 + ); } this.relayout = true; requestLayout(); @@ -187,7 +222,8 @@ public class LocationMarker extends View { } for (int i = 0; i < set.packs.size(); ++i) { TLRPC.TL_stickerPack pack = set.packs.get(i); - if (pack.emoticon.contains(emoji) && !pack.documents.isEmpty()) { + + if (containsEmoji(pack.emoticon, emoji) && !pack.documents.isEmpty()) { long documentId = pack.documents.get(0); for (int j = 0; j < set.documents.size(); ++j) { if (set.documents.get(j).id == documentId) { @@ -199,20 +235,47 @@ public class LocationMarker extends View { return null; } - public TLRPC.Document getCountryCodeEmojiDocument() { - return flagDocument; + private boolean containsEmoji(String emojiString, String emoji) { + if (emojiString == null || emoji == null) return false; + ArrayList emojis = Emoji.parseEmojis(emojiString); + for (int i = 0; i < emojis.size(); ++i) { + if (TextUtils.equals(emojis.get(i).code, emoji)) { + return true; + } + } + return false; + } + + public TLRPC.Document getCodeEmojiDocument() { + return isVideo && flagAnimatedDocument != null ? flagAnimatedDocument : flagDocument; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - flagImageReceiver.onAttachedToWindow(); + attachInternal(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); + detachInternal(); + } + + private boolean attachedToWindow; + public void attachInternal() { + attachedToWindow = true; + if (isVideo) { + flagAnimatedImageReceiver.onAttachedToWindow(); + } else { + flagImageReceiver.onAttachedToWindow(); + } + } + + public void detachInternal() { + attachedToWindow = false; flagImageReceiver.onDetachedFromWindow(); + flagAnimatedImageReceiver.onDetachedFromWindow(); } public void setText(String text) { @@ -226,31 +289,49 @@ public class LocationMarker extends View { } public void setType(int type, int color) { - if (this.type == 1) return; if (type == 0) { + outlinePaint.setColor(0xFF000000); + textPaint.setColor(0xFFFFFFFF); + icon.setColorFilter(new PorterDuffColorFilter(0xFFFFFFFF, PorterDuff.Mode.SRC_IN)); + } else if (type == 1) { + outlinePaint.setColor(0x4C000000); + textPaint.setColor(0xFFFFFFFF); + icon.setColorFilter(null); + } else if (type == 2) { + outlinePaint.setColor(0xFFFFFFFF); + textPaint.setColor(0xFF000000); + icon.setColorFilter(null); + } else { outlinePaint.setColor(color); final int textColor = AndroidUtilities.computePerceivedBrightness(color) >= .721f ? Color.BLACK : Color.WHITE; textPaint.setColor(textColor); icon.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); - } else if (type == 1) { - outlinePaint.setColor(0xFF000000); - textPaint.setColor(0xFFFFFFFF); - icon.setColorFilter(new PorterDuffColorFilter(0xFFFFFFFF, PorterDuff.Mode.SRC_IN)); - } else if (type == 2) { - outlinePaint.setColor(0x4C000000); - textPaint.setColor(0xFFFFFFFF); - icon.setColorFilter(null); - } else { - outlinePaint.setColor(0xFFFFFFFF); - textPaint.setColor(0xFF000000); - icon.setColorFilter(null); } invalidate(); } + private boolean isVideo; + public void setIsVideo(boolean isVideo) { + if (this.isVideo != isVideo && attachedToWindow) { + if (isVideo) { + flagImageReceiver.onDetachedFromWindow(); + flagAnimatedImageReceiver.onAttachedToWindow(); + } else { + flagImageReceiver.onAttachedToWindow(); + flagAnimatedImageReceiver.onDetachedFromWindow(); + } + } + this.isVideo = isVideo; + invalidate(); + } + + public int getTypesCount() { + return 4; + } + private float w, h; - private void setupLayout() { + public void setupLayout() { if (!relayout) { return; } @@ -285,7 +366,15 @@ public class LocationMarker extends View { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setupLayout(); - setMeasuredDimension(padx + (int) Math.round(w) + padx, pady + (int) Math.round(h) + pady); + setMeasuredDimension(getWidthInternal(), getHeightInternal()); + } + + public int getWidthInternal() { + return padx + (int) Math.round(w) + padx; + } + + public int getHeightInternal() { + return pady + (int) Math.round(h) + pady; } private final RectF bounds = new RectF(); @@ -297,6 +386,12 @@ public class LocationMarker extends View { @Override protected void dispatchDraw(Canvas canvas) { + drawInternal(canvas); + } + + private AnimatedFloat animatedVideo = new AnimatedFloat(this, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + + public void drawInternal(Canvas canvas) { setupLayout(); if (layout == null) { return; @@ -306,22 +401,38 @@ public class LocationMarker extends View { canvas.drawRoundRect(bounds, .2f * h, .2f * h, outlinePaint); if (hasFlag) { - flagImageReceiver.setImageCoords( - padx + (padding.left + flagIconPadding) * density, pady + (h - iconSize * density) / 2, - iconSize * density, iconSize * density - ); - canvas.save(); - canvas.scale(SCALE, SCALE, flagImageReceiver.getCenterX(), flagImageReceiver.getCenterY()); - flagImageReceiver.draw(canvas); - canvas.restore(); + float video = animatedVideo.set(isVideo); + + if (video > 0) { + flagAnimatedImageReceiver.setImageCoords( + padx + (padding.left + flagIconPadding) * density, pady + (h - iconSize * density) / 2, + iconSize * density, iconSize * density + ); + canvas.save(); + canvas.scale(SCALE, SCALE, flagAnimatedImageReceiver.getCenterX(), flagAnimatedImageReceiver.getCenterY()); + flagAnimatedImageReceiver.setAlpha(video); + flagAnimatedImageReceiver.draw(canvas); + canvas.restore(); + } + if (video < 1) { + flagImageReceiver.setImageCoords( + padx + (padding.left + flagIconPadding) * density, pady + (h - iconSize * density) / 2, + iconSize * density, iconSize * density + ); + canvas.save(); + canvas.scale(SCALE, SCALE, flagImageReceiver.getCenterX(), flagImageReceiver.getCenterY()); + flagImageReceiver.setAlpha(1f - video); + flagImageReceiver.draw(canvas); + canvas.restore(); + } } else if (forceEmoji) { } else { icon.setBounds( - padx + (int) (padding.left * density), - pady + (int) ((h - iconSize * density) / 2), - padx + (int) ((padding.left + iconSize) * density), - pady + (int) ((h + iconSize * density) / 2) + padx + (int) (padding.left * density), + pady + (int) ((h - iconSize * density) / 2), + padx + (int) ((padding.left + iconSize) * density), + pady + (int) ((h + iconSize * density) / 2) ); icon.draw(canvas); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java index b5cffa37d..22ca4454a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java @@ -19,6 +19,8 @@ import org.telegram.ui.Components.Rect; public class LocationView extends EntityView { public final LocationMarker marker; + + private boolean hasColor; private int currentColor; private int currentType; @@ -68,13 +70,13 @@ public class LocationView extends EntityView { return deg(Lat) + (Lat > 0 ? "N" : "S") + " " + deg(Long) + (Long > 0 ? "E" : "W"); } - public LocationView(Context context, Point position, int currentAccount, TLRPC.MessageMedia location, TL_stories.MediaArea mediaArea, float density, int maxWidth, int type, int color) { + public LocationView(Context context, Point position, int currentAccount, TLRPC.MessageMedia location, TL_stories.MediaArea mediaArea, float density, int maxWidth) { super(context, position); - marker = new LocationMarker(context, density, 0); + marker = new LocationMarker(context, LocationMarker.VARIANT_LOCATION, density, 0); marker.setMaxWidth(maxWidth); setLocation(currentAccount, location, mediaArea); - marker.setType(currentType = type, currentColor = color); + marker.setType(0, currentColor); addView(marker, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP)); setClipChildren(false); @@ -97,7 +99,7 @@ public class LocationView extends EntityView { } else { title = ""; } - marker.setCountryCodeEmoji(currentAccount, countryCodeEmoji); + marker.setCodeEmoji(currentAccount, countryCodeEmoji); marker.setText(title); updateSelectionView(); @@ -119,16 +121,21 @@ public class LocationView extends EntityView { updatePosition(); } + public void setColor(int color) { + hasColor = true; + currentColor = color; + } + + public boolean hasColor() { + return hasColor; + } + public void setType(int type) { marker.setType(currentType = type, currentColor); } - public void setType(int type, int color) { - marker.setType(currentType = type, currentColor = color); - } - - public void setColor(int color) { - setType(currentType, color); + public int getTypesCount() { + return marker.getTypesCount() - (hasColor ? 0 : 1); } public int getColor() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java index 637dceab2..a5d22456f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java @@ -328,7 +328,7 @@ public class MessageEntityView extends EntityView { if (cell.getTransitionParams().wasDraw) { canvas.translate(canvasOffsetX, canvasOffsetY); cell.setInvalidatesParent(true); - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); cell.setInvalidatesParent(false); canvas.restore(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java new file mode 100644 index 000000000..c9abdd9be --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java @@ -0,0 +1,237 @@ +package org.telegram.ui.Components.Paint.Views; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.view.Gravity; +import android.view.ViewGroup; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.UserConfig; +import org.telegram.tgnet.tl.TL_stories; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Point; +import org.telegram.ui.Components.Rect; +import org.telegram.ui.Stories.recorder.Weather; + +public class WeatherView extends EntityView { + + public final LocationMarker marker; + + private boolean hasColor; + private int currentColor; + private int currentType; + + public Weather.State weather; + + @Override + protected float getStickyPaddingLeft() { + return marker.padx; + } + + @Override + protected float getStickyPaddingTop() { + return marker.pady; + } + + @Override + protected float getStickyPaddingRight() { + return marker.padx; + } + + @Override + protected float getStickyPaddingBottom() { + return marker.pady; + } + + public WeatherView(Context context, Point position, int currentAccount, Weather.State weather, float density, int maxWidth) { + super(context, position); + + marker = new LocationMarker(context, LocationMarker.VARIANT_WEATHER, density, 0); + marker.setMaxWidth(maxWidth); + marker.setType(0, currentColor); + setWeather(currentAccount, weather); + addView(marker, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP)); + + setClipChildren(false); + setClipToPadding(false); + + updatePosition(); + } + + public void setWeather(int currentAccount, Weather.State weather) { + this.weather = weather; + + String countryCodeEmoji = weather.getEmoji(); + String title = weather.getTemperature(); + marker.setCodeEmoji(currentAccount, countryCodeEmoji); + marker.setText(title); + + updateSelectionView(); + } + + public void setMaxWidth(int maxWidth) { + marker.setMaxWidth(maxWidth); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + updatePosition(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + updatePosition(); + } + + public void setColor(int color) { + hasColor = true; + currentColor = color; + } + + public boolean hasColor() { + return hasColor; + } + + public void setType(int type) { + marker.setType(currentType = type, currentColor); + } + + public int getTypesCount() { + return marker.getTypesCount() - (hasColor ? 0 : 1); + } + + public int getColor() { + return currentColor; + } + + @Override + public void setIsVideo(boolean isVideo) { + marker.setIsVideo(true); + } + + public int getType() { + return currentType; + } + + @Override + protected float getMaxScale() { + return 1.5f; + } + + @Override + public Rect getSelectionBounds() { + ViewGroup parentView = (ViewGroup) getParent(); + if (parentView == null) { + return new Rect(); + } + float scale = parentView.getScaleX(); + float width = getMeasuredWidth() * getScale() + AndroidUtilities.dp(64) / scale; + float height = getMeasuredHeight() * getScale() + AndroidUtilities.dp(64) / scale; + float left = (getPositionX() - width / 2.0f) * scale; + float right = left + width * scale; + return new Rect(left, (getPositionY() - height / 2f) * scale, right - left, height * scale); + } + + protected TextViewSelectionView createSelectionView() { + return new TextViewSelectionView(getContext()); + } + + public class TextViewSelectionView extends SelectionView { + + private final Paint clearPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + public TextViewSelectionView(Context context) { + super(context); + clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); + } + + @Override + protected int pointInsideHandle(float x, float y) { + float thickness = AndroidUtilities.dp(1.0f); + float radius = AndroidUtilities.dp(19.5f); + + float inset = radius + thickness; + float width = getMeasuredWidth() - inset * 2; + float height = getMeasuredHeight() - inset * 2; + + float middle = inset + height / 2.0f; + + if (x > inset - radius && y > middle - radius && x < inset + radius && y < middle + radius) { + return SELECTION_LEFT_HANDLE; + } else if (x > inset + width - radius && y > middle - radius && x < inset + width + radius && y < middle + radius) { + return SELECTION_RIGHT_HANDLE; + } + + if (x > inset && x < width && y > inset && y < height) { + return 0; + } + + return 0; + } + + private Path path = new Path(); + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + int count = canvas.getSaveCount(); + + float alpha = getShowAlpha(); + if (alpha <= 0) { + return; + } else if (alpha < 1) { + canvas.saveLayerAlpha(0, 0, getWidth(), getHeight(), (int) (0xFF * alpha), Canvas.ALL_SAVE_FLAG); + } + + float thickness = AndroidUtilities.dp(2.0f); + float radius = AndroidUtilities.dpf2(5.66f); + + float inset = radius + thickness + AndroidUtilities.dp(15); + + float width = getMeasuredWidth() - inset * 2; + float height = getMeasuredHeight() - inset * 2; + + AndroidUtilities.rectTmp.set(inset, inset, inset + width, inset + height); + + float R = AndroidUtilities.dp(12); + float rx = Math.min(R, width / 2f), ry = Math.min(R, height / 2f); + + path.rewind(); + AndroidUtilities.rectTmp.set(inset, inset, inset + rx * 2, inset + ry * 2); + path.arcTo(AndroidUtilities.rectTmp, 180, 90); + AndroidUtilities.rectTmp.set(inset + width - rx * 2, inset, inset + width, inset + ry * 2); + path.arcTo(AndroidUtilities.rectTmp, 270, 90); + canvas.drawPath(path, paint); + + path.rewind(); + AndroidUtilities.rectTmp.set(inset, inset + height - ry * 2, inset + rx * 2, inset + height); + path.arcTo(AndroidUtilities.rectTmp, 180, -90); + AndroidUtilities.rectTmp.set(inset + width - rx * 2, inset + height - ry * 2, inset + width, inset + height); + path.arcTo(AndroidUtilities.rectTmp, 90, -90); + canvas.drawPath(path, paint); + + canvas.drawCircle(inset, inset + height / 2.0f, radius, dotStrokePaint); + canvas.drawCircle(inset, inset + height / 2.0f, radius - AndroidUtilities.dp(1) + 1, dotPaint); + + canvas.drawCircle(inset + width, inset + height / 2.0f, radius, dotStrokePaint); + canvas.drawCircle(inset + width, inset + height / 2.0f, radius - AndroidUtilities.dp(1) + 1, dotPaint); + + canvas.saveLayerAlpha(0, 0, getWidth(), getHeight(), 0xFF, Canvas.ALL_SAVE_FLAG); + + canvas.drawLine(inset, inset + ry, inset, inset + height - ry, paint); + canvas.drawLine(inset + width, inset + ry, inset + width, inset + height - ry, paint); + canvas.drawCircle(inset + width, inset + height / 2.0f, radius + AndroidUtilities.dp(1) - 1, clearPaint); + canvas.drawCircle(inset, inset + height / 2.0f, radius + AndroidUtilities.dp(1) - 1, clearPaint); + + canvas.restoreToCount(count); + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java index f7ae50a42..c63cc9941 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java @@ -257,7 +257,7 @@ public class PhonebookShareAlert extends BottomSheet { String name = ContactsController.formatName(firstName, lastName); ArrayList result = null; ArrayList items = new ArrayList<>(); - ArrayList vcard = null; + ArrayList vcard = null; if (uri != null) { result = AndroidUtilities.loadVCardFromStream(uri, currentAccount, false, items, name); } else if (file != null) { @@ -920,7 +920,7 @@ public class PhonebookShareAlert extends BottomSheet { } } currentUser.restriction_reason.clear(); - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = builder.toString(); reason.reason = ""; reason.platform = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java index e9292fd3c..60ba90c58 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java @@ -21,6 +21,7 @@ public class GLIconRenderer implements GLSurfaceView.Renderer { public float angleX = 0; public float angleX2 = 0; public float angleY = 0; + public float white = 0; private static final float Z_NEAR = 1f; private static final float Z_FAR = 200f; @@ -127,7 +128,7 @@ public class GLIconRenderer implements GLSurfaceView.Renderer { model.night = night; model.gradientColor1 = color1; model.gradientColor2 = color2; - model.draw(mMVPMatrix, mRotationMatrix, mWidth, mHeight, gradientStartX, gradientScaleX, gradientStartY, gradientScaleY, dt); + model.draw(mMVPMatrix, mRotationMatrix, mWidth, mHeight, gradientStartX, gradientScaleX, gradientStartY, gradientScaleY, white, dt); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java index fd77e60c8..422ca0c40 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java @@ -244,6 +244,7 @@ public class GLIconTextureView extends TextureView implements TextureView.Surfac @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + ready = false; stopThread(); return false; } @@ -251,11 +252,11 @@ public class GLIconTextureView extends TextureView implements TextureView.Surfac public void stopThread() { if (thread != null) { isRunning = false; - try { - thread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } +// try { +// thread.join(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } thread = null; } @@ -269,6 +270,13 @@ public class GLIconTextureView extends TextureView implements TextureView.Surfac mRenderer.setBackground(gradientTextureBitmap); } + private volatile boolean ready; + private volatile Runnable readyListener; + public void whenReady(Runnable whenReady) { + if (ready) whenReady.run(); + else readyListener = whenReady; + } + private class RenderThread extends Thread { @Override @@ -299,6 +307,11 @@ public class GLIconTextureView extends TextureView implements TextureView.Surfac float dt = (now - lastFrameTime) / 1000f; lastFrameTime = now; drawSingleFrame(dt); + if (!ready) { + ready = true; + AndroidUtilities.runOnUIThread(readyListener); + readyListener = null; + } } try { @@ -564,7 +577,7 @@ public class GLIconTextureView extends TextureView implements TextureView.Surfac } - private void startIdleAnimation() { + protected void startIdleAnimation() { if (!attached) { return; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java index f4842070c..46a0e1e19 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java @@ -11,13 +11,11 @@ import android.graphics.Paint; import android.graphics.Shader; import android.opengl.GLES20; import android.opengl.GLUtils; -import android.util.Log; import org.telegram.messenger.R; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.Utilities; import org.telegram.ui.ActionBar.Theme; -import org.telegram.ui.Components.RLottieDrawable; import java.io.BufferedReader; import java.io.IOException; @@ -46,6 +44,7 @@ public class Icon3D { private int xOffsetHandle; private int alphaHandle; private int mTextureDataHandle; + private int whiteHandle; float xOffset; int[] trianglesCount; @@ -174,6 +173,7 @@ public class Icon3D { alphaHandle = GLES20.glGetUniformLocation(mProgramObject, "f_alpha"); mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgramObject, "uMVPMatrix"); mWorldMatrixHandle = GLES20.glGetUniformLocation(mProgramObject, "world"); + whiteHandle = GLES20.glGetUniformLocation(mProgramObject, "white"); specHandleTop = GLES20.glGetUniformLocation(mProgramObject, "spec1"); specHandleBottom = GLES20.glGetUniformLocation(mProgramObject, "spec2"); @@ -314,7 +314,7 @@ public class Icon3D { private float time = 0f; - public void draw(float[] mvpMatrix, float[] worldMatrix, int width, int height, float gradientStartX, float gradientScaleX, float gradientStartY, float gradientScaleY, float dt) { + public void draw(float[] mvpMatrix, float[] worldMatrix, int width, int height, float gradientStartX, float gradientScaleX, float gradientStartY, float gradientScaleY, float white, float dt) { if (backgroundBitmap != null) { GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mBackgroundTextureHandle); GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, backgroundBitmap, 0); @@ -323,6 +323,7 @@ public class Icon3D { GLES20.glUniform1i(mTextureUniformHandle, 0); GLES20.glUniform1f(xOffsetHandle, xOffset); GLES20.glUniform1f(alphaHandle, enterAlpha); + GLES20.glUniform1f(whiteHandle, white); GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); GLES20.glUniformMatrix4fv(mWorldMatrixHandle, 1, false, worldMatrix, 0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java index 736963c67..847d94e17 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java @@ -1489,7 +1489,7 @@ public class LimitReachedBottomSheet extends BottomSheetWithRecyclerListView imp ArrayList premiumInviteBlockedUsers ) { fromChat = chat; - canSendLink = ChatObject.canUserDoAdminAction(chat, ChatObject.ACTION_INVITE) || true; + canSendLink = ChatObject.canUserDoAdminAction(chat, ChatObject.ACTION_INVITE); restrictedUsers = new ArrayList<>(userRestrictedPrivacy); this.premiumMessagingBlockedUsers = premiumMessagingBlockedUsers; this.premiumInviteBlockedUsers = premiumInviteBlockedUsers; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java index 863b092c0..bcf422c9e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java @@ -755,6 +755,9 @@ public class PremiumFeatureBottomSheet extends BottomSheet implements Notificati } else if (startType == PremiumPreviewFragment.PREMIUM_FEATURE_TRANSLATIONS) { title.setText(LocaleController.getString(R.string.PremiumPreviewTranslations)); description.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PremiumPreviewTranslationsDescription))); + } else if (startType == PremiumPreviewFragment.PREMIUM_FEATURE_MESSAGE_EFFECTS) { + title.setText(LocaleController.getString(R.string.PremiumPreviewEffects)); + description.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PremiumPreviewEffectsDescription))); } else if (startType == PremiumPreviewFragment.PREMIUM_FEATURE_WALLPAPER) { title.setText(LocaleController.getString(R.string.PremiumPreviewWallpaper)); description.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PremiumPreviewWallpaperDescription))); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java index b810578bd..f03d62325 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java @@ -196,7 +196,8 @@ public class PremiumPreviewBottomSheet extends BottomSheetWithRecyclerListView i return this; } - private void showDialog(Dialog dialog) { + @Override + public boolean showDialog(Dialog dialog) { if (iconTextureView != null) { iconTextureView.setDialogVisible(true); } @@ -208,6 +209,7 @@ public class PremiumPreviewBottomSheet extends BottomSheetWithRecyclerListView i starParticlesView.setPaused(false); }); dialog.show(); + return true; } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java index 6f8345f57..f189668dd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java @@ -1,53 +1,41 @@ package org.telegram.ui.Components.Premium; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.content.Context; import android.graphics.Canvas; import org.telegram.messenger.AndroidUtilities; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.TextCell; +import org.telegram.ui.Stars.StarsReactionsSheet; public class ProfilePremiumCell extends TextCell { - StarParticlesView.Drawable drawable = new StarParticlesView.Drawable(6); + private final StarsReactionsSheet.Particles particles = new StarsReactionsSheet.Particles(StarsReactionsSheet.Particles.TYPE_RADIAL, 30); + private final int colorKey; public ProfilePremiumCell(Context context, int type, Theme.ResourcesProvider resourcesProvider) { super(context, resourcesProvider); - drawable.size1 = 6; - drawable.size2 = 6; - drawable.size3 = 6; - drawable.useGradient = true; - drawable.speedScale = 3f; - drawable.minLifeTime = 600; - drawable.randLifeTime = 500; - drawable.startFromCenter = true; - drawable.useRotate = true; - drawable.type = StarParticlesView.Drawable.TYPE_SETTINGS; - if (type == 1) { - drawable.useGradient = false; - drawable.colorKey = Theme.key_starsGradient1; - } - - drawable.init(); + colorKey = type == 1 ? Theme.key_starsGradient1 : Theme.key_premiumGradient2; } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); float cx = imageView.getX() + imageView.getWidth() / 2f; - float cy = imageView.getPaddingTop() + imageView.getY() + imageView.getHeight() / 2f - AndroidUtilities.dp(3); - drawable.rect.set( - cx - AndroidUtilities.dp(4), cy - AndroidUtilities.dp(4), - cx + AndroidUtilities.dp(4), cy + AndroidUtilities.dp(4) + float cy = imageView.getPaddingTop() + imageView.getY() + imageView.getHeight() / 2f - dp(3); + AndroidUtilities.rectTmp.set( + cx - dp(16), cy - dp(16), + cx + dp(16), cy + dp(16) ); - if (changed) { - drawable.resetPositions(); - } + particles.setBounds(AndroidUtilities.rectTmp); } @Override protected void dispatchDraw(Canvas canvas) { - drawable.onDraw(canvas); + particles.process(); + particles.draw(canvas, Theme.getColor(colorKey)); invalidate(); super.dispatchDraw(canvas); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java index 545a33d26..cb3a7f7d4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java @@ -252,7 +252,7 @@ public class ReassignBoostBottomSheet extends BottomSheetWithRecyclerListView { view = new HeaderCell(context, 22); break; case HOLDER_TYPE_USER: - view = new SelectorUserCell(context, resourcesProvider, true); + view = new SelectorUserCell(context, true, resourcesProvider, true); break; default: view = new View(context); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java index 0ac039d88..2f9f67ac3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java @@ -683,6 +683,6 @@ public class SelectorBottomSheet extends BottomSheetWithRecyclerListView { @Override protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { - return selectorAdapter = new SelectorAdapter(getContext(), resourcesProvider); + return selectorAdapter = new SelectorAdapter(getContext(), true, resourcesProvider); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java index 1693defd0..316d32515 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java @@ -1,5 +1,6 @@ package org.telegram.ui.Components.Premium.boosts; +import static org.telegram.messenger.AndroidUtilities.checkAndroidTheme; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.LocaleController.getString; import static org.telegram.ui.Components.Premium.boosts.adapters.SelectorAdapter.VIEW_TYPE_TOP_SECTION; @@ -66,6 +67,7 @@ import org.telegram.ui.DialogsActivity; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PrivacyControlActivity; import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import java.util.ArrayList; @@ -76,6 +78,12 @@ import java.util.List; import java.util.Map; public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView implements NotificationCenter.NotificationCenterDelegate { + + public int type; + + public static final int TYPE_PREMIUM = 0; + public static final int TYPE_STARS = 1; + private static UserSelectorBottomSheet instance; public static void open() { @@ -83,6 +91,10 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp } public static void open(long userId, BirthdayController.BirthdayState birthdayState) { + open(TYPE_PREMIUM, userId, birthdayState); + } + + public static void open(int type, long userId, BirthdayController.BirthdayState birthdayState) { BaseFragment fragment = LaunchActivity.getLastFragment(); if (fragment == null) { return; @@ -90,8 +102,17 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp if (instance != null) { return; } - UserSelectorBottomSheet sheet = new UserSelectorBottomSheet(fragment, userId, birthdayState, true); + final int finalType = type; + UserSelectorBottomSheet sheet = new UserSelectorBottomSheet(fragment, userId, birthdayState, type, true) { + @Override + protected int getType() { + return finalType; + } + }; if (fragment != null) { + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(fragment)) { + sheet.makeAttached(fragment); + } fragment.showDialog(sheet); } else { sheet.show(); @@ -176,15 +197,15 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp } private void checkEditTextHint() { - if (selectedIds.size() > 0) { + if (!selectedIds.isEmpty() || type == TYPE_STARS) { if (!isHintSearchText) { isHintSearchText = true; - AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString("Search", R.string.Search), true), 10); + AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString(R.string.Search), true), 10); } } else { if (isHintSearchText) { isHintSearchText = false; - AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString("GiftPremiumUsersSearchHint", R.string.GiftPremiumUsersSearchHint), true), 10); + AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString(R.string.GiftPremiumUsersSearchHint), true), 10); } } } @@ -203,11 +224,12 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp }; } - public UserSelectorBottomSheet(BaseFragment fragment, long userId, BirthdayController.BirthdayState state, boolean needFocus) { + public UserSelectorBottomSheet(BaseFragment fragment, long userId, BirthdayController.BirthdayState state, int type, boolean needFocus) { super(fragment, needFocus, false, false, fragment.getResourceProvider()); + this.type = type; this.birthdays = state; - if (birthdays != null && !birthdays.today.isEmpty()) { + if (birthdays != null && !birthdays.today.isEmpty() && type == TYPE_PREMIUM) { for (TLRPC.User user : birthdays.today) { selectedIds.add(user.id); allSelectedObjects.put(user.id, user); @@ -255,7 +277,7 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp }; searchField.setBackgroundColor(getThemedColor(Theme.key_dialogBackground)); searchField.setOnSearchTextChange(this::onSearch); - searchField.setHintText(getString(!selectedIds.isEmpty() ? R.string.Search : R.string.GiftPremiumUsersSearchHint), false); + searchField.setHintText(getString(!selectedIds.isEmpty() || type == TYPE_STARS ? R.string.Search : R.string.GiftPremiumUsersSearchHint), false); sectionCell = new View(getContext()) { @Override @@ -287,13 +309,15 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp }; actionButton.setOnClickListener(v -> next()); buttonContainer.addView(actionButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL)); - containerView.addView(buttonContainer, LayoutHelper.createFrameMarginPx(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, backgroundPaddingLeft, 0, backgroundPaddingLeft, 0)); + if (type != TYPE_STARS) { + containerView.addView(buttonContainer, LayoutHelper.createFrameMarginPx(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, backgroundPaddingLeft, 0, backgroundPaddingLeft, 0)); + } bulletinContainer = new FrameLayout(getContext()); containerView.addView(bulletinContainer, LayoutHelper.createFrameMarginPx(LayoutHelper.MATCH_PARENT, 300, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, backgroundPaddingLeft, 0, backgroundPaddingLeft, dp(68))); selectorAdapter.setData(items, recyclerListView); - recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, dp(BOTTOM_HEIGHT_DP)); + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, dp(type != TYPE_STARS ? BOTTOM_HEIGHT_DP : 0)); recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { @@ -309,6 +333,17 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp } if (view instanceof SelectorUserCell) { TLRPC.User user = ((SelectorUserCell) view).getUser(); + if (type == TYPE_STARS) { + if (searchField != null) { + AndroidUtilities.hideKeyboard(searchField.getEditText()); + } + StarsIntroActivity.GiftStarsSheet sheet = new StarsIntroActivity.GiftStarsSheet(getContext(), resourcesProvider, user, this::dismiss); + if (!AndroidUtilities.isTablet()) { + sheet.makeAttached(attachedFragment); + } + sheet.show(); + return; + } long id = user.id; if (selectedIds.contains(id)) { selectedIds.remove(id); @@ -359,10 +394,12 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp initHints(false); updateList(false, true); fixNavigationBar(); - BoostRepository.loadGiftOptions(null, arg -> { - paymentOptions.clear(); - paymentOptions.addAll(arg); - }); + if (type == TYPE_PREMIUM) { + BoostRepository.loadGiftOptions(null, arg -> { + paymentOptions.clear(); + paymentOptions.addAll(arg); + }); + } } private void initContacts(boolean needUpdate) { @@ -406,9 +443,13 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp } } AndroidUtilities.hideKeyboard(searchField.getEditText()); - List options = BoostRepository.filterGiftOptions(paymentOptions, selectedUsers.size()); - options = BoostRepository.filterGiftOptionsByBilling(options); - PremiumPreviewGiftToUsersBottomSheet.show(selectedUsers, options); + if (type == TYPE_STARS) { + + } else { + List options = BoostRepository.filterGiftOptions(paymentOptions, selectedUsers.size()); + options = BoostRepository.filterGiftOptionsByBilling(options); + PremiumPreviewGiftToUsersBottomSheet.show(selectedUsers, options); + } } public void scrollToTop(boolean animate) { @@ -539,6 +580,7 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp int count = 0; boolean allSelected = true; for (TLRPC.User user : users) { + if (user == null || user.bot || UserObject.isService(user.id)) continue; if (user.id == userId) { continue; } @@ -593,6 +635,7 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp int h = 0; if (isSearching()) { for (TLRPC.User foundedUser : foundedUsers) { + if (foundedUser == null || foundedUser.bot || UserObject.isService(foundedUser.id)) continue; h += dp(56); items.add(Item.asUser(foundedUser, selectedIds.contains(foundedUser.id)).withOptions(openOptions(foundedUser))); } @@ -649,8 +692,9 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp if (birthdays != null && birthdays.contains(contact.user_id)) { continue; } - h += dp(56); TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(contact.user_id); + if (user == null || user.bot || UserObject.isService(user.id)) continue; + h += dp(56); if (selectedIds.contains(user.id)) selected.add(user.id); userItems.add(Item.asUser(user, selectedIds.contains(user.id)).withOptions(openOptions(user))); } @@ -700,22 +744,24 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp .add(R.drawable.profile_discuss, LocaleController.getString(R.string.SendMessage), () -> { BaseFragment fragment = getBaseFragment(); if (user == null || fragment == null) return; - BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); - bottomSheetParams.transitionFromLeft = true; - bottomSheetParams.allowNestedScroll = false; +// BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); +// bottomSheetParams.transitionFromLeft = true; +// bottomSheetParams.allowNestedScroll = false; Bundle args = new Bundle(); args.putLong("user_id", user.id); - fragment.showAsSheet(new ChatActivity(args), bottomSheetParams); +// fragment.showAsSheet(new ChatActivity(args), bottomSheetParams); + fragment.presentFragment(new ChatActivity(args)); }) .add(R.drawable.msg_openprofile, LocaleController.getString(R.string.OpenProfile), () -> { BaseFragment fragment = getBaseFragment(); if (user == null || fragment == null) return; - BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); - bottomSheetParams.transitionFromLeft = true; - bottomSheetParams.allowNestedScroll = false; +// BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); +// bottomSheetParams.transitionFromLeft = true; +// bottomSheetParams.allowNestedScroll = false; Bundle args = new Bundle(); args.putLong("user_id", user.id); - fragment.showAsSheet(new ProfileActivity(args), bottomSheetParams); +// fragment.showAsSheet(new ProfileActivity(args), bottomSheetParams); + fragment.presentFragment(new ProfileActivity(args)); }) .show(); }; @@ -729,16 +775,23 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp @Override protected CharSequence getTitle() { - return getString("GiftTelegramPremiumTitle", R.string.GiftTelegramPremiumTitle); + if (getType() == TYPE_STARS) { + return getString(R.string.GiftStarsTitle); + } + return getString(R.string.GiftTelegramPremiumTitle); } @Override protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { - selectorAdapter = new SelectorAdapter(getContext(), resourcesProvider); + selectorAdapter = new SelectorAdapter(getContext(), getType() != TYPE_STARS, resourcesProvider); selectorAdapter.setGreenSelector(true); return selectorAdapter; } + protected int getType() { + return TYPE_PREMIUM; + } + @Override public void dismiss() { AndroidUtilities.hideKeyboard(searchField.getEditText()); @@ -801,6 +854,7 @@ public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView imp } }), ConnectionsManager.RequestFlagDoNotWaitFloodWait); + MessagesController.getInstance(currentAccount).invalidateContentSettings(); MessagesController.getInstance(currentAccount).removeSuggestion(0, "BIRTHDAY_SETUP"); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.newSuggestionsAvailable); updateItems(true, true); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java index 733087fd7..acf4e02d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java @@ -53,8 +53,11 @@ public class SelectorAdapter extends AdapterWithDiffUtils { private boolean isGreenSelector; private GraySectionCell topSectionCell; - public SelectorAdapter(Context context, Theme.ResourcesProvider resourcesProvider) { + public boolean needChecks; + + public SelectorAdapter(Context context, boolean needChecks, Theme.ResourcesProvider resourcesProvider) { this.context = context; + this.needChecks = needChecks; this.resourcesProvider = resourcesProvider; BoostRepository.loadParticipantsCount(result -> { chatsParticipantsCount.clear(); @@ -94,7 +97,7 @@ public class SelectorAdapter extends AdapterWithDiffUtils { if (viewType == VIEW_TYPE_PAD) { view = new View(context); } else if (viewType == VIEW_TYPE_USER) { - view = new SelectorUserCell(context, resourcesProvider, isGreenSelector); + view = new SelectorUserCell(context, needChecks, resourcesProvider, isGreenSelector); } else if (viewType == VIEW_TYPE_NO_USERS) { StickerEmptyView searchEmptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH, resourcesProvider); searchEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java index c6dc58f11..33ac8d5d0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java @@ -10,6 +10,8 @@ import android.view.Gravity; import android.view.View; import android.widget.ImageView; +import androidx.annotation.Nullable; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; @@ -32,6 +34,7 @@ import java.util.Date; public class SelectorUserCell extends BaseCell { private final boolean[] isOnline = new boolean[1]; + @Nullable private final CheckBox2 checkBox; private final ImageView optionsView; private TLRPC.User user; @@ -39,22 +42,28 @@ public class SelectorUserCell extends BaseCell { private TL_stories.TL_myBoost boost; StatusBadgeComponent statusBadgeComponent; - public SelectorUserCell(Context context, Theme.ResourcesProvider resourcesProvider, boolean isGreen) { + public SelectorUserCell(Context context, boolean needCheck, Theme.ResourcesProvider resourcesProvider, boolean isGreen) { super(context, resourcesProvider); statusBadgeComponent = new StatusBadgeComponent(this); titleTextView.setTypeface(AndroidUtilities.bold()); + radioButton.setVisibility(View.GONE); - checkBox = new CheckBox2(context, 21, resourcesProvider); - if (isGreen) { - checkBox.setColor(Theme.key_checkbox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + if (needCheck) { + checkBox = new CheckBox2(context, 21, resourcesProvider); + if (isGreen) { + checkBox.setColor(Theme.key_checkbox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + } else { + checkBox.setColor(Theme.key_dialogRoundCheckBox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + } + checkBox.setDrawUnchecked(true); + checkBox.setDrawBackgroundAsArc(10); + addView(checkBox); + checkBox.setChecked(false, false); + checkBox.setLayoutParams(LayoutHelper.createFrame(24, 24, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), 13, 0, 14, 0)); + updateLayouts(); } else { - checkBox.setColor(Theme.key_dialogRoundCheckBox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + checkBox = null; } - checkBox.setDrawUnchecked(true); - checkBox.setDrawBackgroundAsArc(10); - addView(checkBox); - checkBox.setChecked(false, false); - checkBox.setLayoutParams(LayoutHelper.createFrame(24, 24, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), 13, 0, 14, 0)); optionsView = new ImageView(context); optionsView.setScaleType(ImageView.ScaleType.CENTER); @@ -97,12 +106,14 @@ public class SelectorUserCell extends BaseCell { } public void setChecked(boolean checked, boolean animated) { + if (checkBox == null) return; if (checkBox.getVisibility() == View.VISIBLE) { checkBox.setChecked(checked, animated); } } public void setCheckboxAlpha(float alpha, boolean animated) { + if (checkBox == null) return; if (animated) { if (Math.abs(checkBox.getAlpha() - alpha) > .1) { checkBox.animate().cancel(); @@ -125,7 +136,9 @@ public class SelectorUserCell extends BaseCell { isOnline[0] = false; setSubtitle(LocaleController.formatUserStatus(UserConfig.selectedAccount, user, isOnline)); subtitleTextView.setTextColor(Theme.getColor(isOnline[0] ? Theme.key_dialogTextBlue2 : Theme.key_dialogTextGray3, resourcesProvider)); - checkBox.setAlpha(1f); + if (checkBox != null) { + checkBox.setAlpha(1f); + } titleTextView.setRightDrawable(statusBadgeComponent.updateDrawable(user, Theme.getColor(Theme.key_chats_verifiedBackground), false)); } @@ -225,6 +238,6 @@ public class SelectorUserCell extends BaseCell { @Override protected boolean needCheck() { - return true; + return checkBox != null; } } \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java index 16e9c0f9a..f398e6e29 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java @@ -446,10 +446,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio isDownReleased = false; } else if (action == MotionEvent.ACTION_UP) { if (!isDownReleased) { - int itemsCount = dialogPhotos == null ? 0 : dialogPhotos.getCount(); - if (currentUploadingImageLocation != null) { - itemsCount++; - } + int itemsCount = getRealCount(); int currentItem = getCurrentItem(); if (itemsCount > 1) { if (ev.getX() > getWidth() / 3f) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java index 94f437981..ae598fe55 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java @@ -15,10 +15,8 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.RenderNode; import android.graphics.drawable.Animatable; import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -26,19 +24,8 @@ import android.text.TextUtils; import android.view.HapticFeedbackConstants; import android.view.View; -import androidx.annotation.NonNull; - -import com.airbnb.lottie.LottieAnimationView; -import com.airbnb.lottie.LottieComposition; -import com.airbnb.lottie.LottieCompositionFactory; -import com.airbnb.lottie.LottieDrawable; -import com.airbnb.lottie.LottieListener; -import com.airbnb.lottie.LottieTask; -import com.airbnb.lottie.model.layer.CompositionLayer; -import com.google.android.exoplayer2.util.Log; import com.google.gson.Gson; -import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.DispatchQueue; @@ -49,7 +36,6 @@ import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.messenger.utils.BitmapsCache; -import org.telegram.ui.ActionBar.Theme; import java.io.ByteArrayInputStream; import java.io.File; @@ -57,11 +43,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.InputStream; -import java.io.InputStreamReader; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; -import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; @@ -145,8 +129,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma protected static final Handler uiHandler = new Handler(Looper.getMainLooper()); protected volatile boolean isRunning; protected volatile boolean isRecycled; - protected volatile LottieDrawable canvasDrawable; - protected volatile RenderNode[] canvasNodes; protected volatile AtomicInteger readyNodeIndex; protected volatile long nativePtr; protected volatile long secondNativePtr; @@ -270,7 +252,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma recycleNativePtr(true); } } - if ((nativePtr == 0 || fallbackCache) && secondNativePtr == 0 && bitmapsCache == null && canvasDrawable == null) { + if ((nativePtr == 0 || fallbackCache) && secondNativePtr == 0 && bitmapsCache == null) { recycleResources(); return; } @@ -361,18 +343,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma FileLog.e(e); } } - if (airbnb) { - if (canvasNodes == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - canvasNodes = new RenderNode[2]; - canvasNodes[0] = new RenderNode("rlottie1"); - canvasNodes[0].setClipToBounds(false); - canvasNodes[1] = new RenderNode("rlottie2"); - canvasNodes[1].setClipToBounds(false); - } - if (readyNodeIndex == null) { - readyNodeIndex = new AtomicInteger(0); - } - } if (backgroundBitmap != null) { try { if (!pendingColorUpdates.isEmpty()) { @@ -403,13 +373,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma int result = 0; int framesPerUpdates = shouldLimitFps ? 2 : 1; final long start = System.currentTimeMillis(); - if (airbnb) { - final long now = System.currentTimeMillis(); - if (lastDrawnTime > 0) { - framesPerUpdates = (int) Utilities.clamp((now - lastDrawnTime) / 16.0f, 10, 1); - } - lastDrawnTime = now; - } if (precache && bitmapsCache != null) { try { result = bitmapsCache.getFrame(currentFrame / framesPerUpdates, backgroundBitmap); @@ -421,20 +384,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma FileLog.e(e); } } else { - if (canvasDrawable != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - final int i = readyNodeIndex.get(); - canvasNodes[1 - i].setPosition(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - Canvas c = canvasNodes[1 - i].beginRecording(); - canvasDrawable.setBounds(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - canvasDrawable.setFrame(currentFrame - (int) canvasDrawable.getMinFrame()); - canvasDrawable.draw(c); - canvasNodes[1 - i].endRecording(); - readyNodeIndex.set(1 - i); - } - } else { - result = getFrame(ptrToUse, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); - } + result = getFrame(ptrToUse, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); } if (bitmapsCache != null && bitmapsCache.needGenCache()) { if (!genCacheSend) { @@ -442,23 +392,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma uiHandler.post(uiRunnableGenerateCache); } if (allowDrawFramesWhileCacheGenerating) { - if (canvasDrawable != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - final int i = readyNodeIndex.get(); - canvasNodes[1 - i].setPosition(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - Canvas c = canvasNodes[1 - i].beginRecording(); - canvasDrawable.setBounds(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - canvasDrawable.setFrame(currentFrame - (int) canvasDrawable.getMinFrame()); - canvasDrawable.draw(c); - canvasNodes[1 - i].endRecording(); - readyNodeIndex.set(1 - i); - } - } else { - if (nativePtr == 0) { - nativePtr = create(args.file.toString(), args.json, width, height, new int[3], false, args.colorReplacement, false, args.fitzModifier); - } - result = getFrame(nativePtr, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); + if (nativePtr == 0) { + nativePtr = create(args.file.toString(), args.json, width, height, new int[3], false, args.colorReplacement, false, args.fitzModifier); } + result = getFrame(nativePtr, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); } else { result = -1; } @@ -558,10 +495,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma }; public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheOptions, boolean limitFps) { - this(file, w, h, cacheOptions, limitFps, null, 0, false); + this(file, w, h, cacheOptions, limitFps, null, 0); } - public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheOptions, boolean limitFps, int[] colorReplacement, int fitzModifier, boolean airbnb) { + public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheOptions, boolean limitFps, int[] colorReplacement, int fitzModifier) { width = w; height = h; shouldLimitFps = limitFps; @@ -569,7 +506,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma this.fallbackCache = cacheOptions != null && cacheOptions.fallback; this.createdForFirstFrame = cacheOptions != null && cacheOptions.firstFrame; getPaint().setFlags(Paint.FILTER_BITMAP_FLAG); - this.airbnb = airbnb; this.file = file; if (precache && lottieCacheGenerateQueue == null) { @@ -589,8 +525,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma shouldLimitFps = false; } bitmapsCache = new BitmapsCache(file, this, cacheOptions, w, h, !limitFps); - } else if (airbnb) { - canvasDrawable = setupCanvasLottie(file, null); } else { nativePtr = create(file.getAbsolutePath(), null, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier); if (nativePtr == 0) { @@ -605,13 +539,12 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma timeBetweenFrames = Math.max(shouldLimitFps ? 33 : 16, (int) (1000.0f / metaData[1])); } - public RLottieDrawable(File file, String json, int w, int h, BitmapsCache.CacheOptions options, boolean limitFps, int[] colorReplacement, int fitzModifier, boolean airbnb) { + public RLottieDrawable(File file, String json, int w, int h, BitmapsCache.CacheOptions options, boolean limitFps, int[] colorReplacement, int fitzModifier) { width = w; height = h; shouldLimitFps = limitFps; this.precache = options != null; this.createdForFirstFrame = options != null && options.firstFrame; - this.airbnb = airbnb; getPaint().setFlags(Paint.FILTER_BITMAP_FLAG); if (precache && lottieCacheGenerateQueue == null) { createCacheGenQueue(); @@ -630,8 +563,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma shouldLimitFps = false; } bitmapsCache = new BitmapsCache(file, this, options, w, h, !limitFps); - } else if (airbnb) { - canvasDrawable = setupCanvasLottie(file, json); } else { nativePtr = create(file.getAbsolutePath(), json, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier); if (nativePtr == 0) { @@ -647,37 +578,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma timeBetweenFrames = Math.max(shouldLimitFps ? 33 : 16, (int) (1000.0f / metaData[1])); } - private LottieComposition c; - private LottieDrawable setupCanvasLottie(File file, String json) { - CountDownLatch latch = new CountDownLatch(1); - LottieDrawable canvasDrawable = new LottieDrawable(); - canvasDrawable.setCallback(new View(ApplicationLoader.applicationContext)); - LottieListener whenSet = c -> { - canvasDrawable.setComposition(c); - metaData[0] = (int) (canvasDrawable.getMaxFrame() - canvasDrawable.getMinFrame()); - metaData[1] = 30; // todo - metaData[2] = 0; - latch.countDown(); - }; - if (json != null) { - LottieCompositionFactory.fromJsonInputStream(new ByteArrayInputStream(json.getBytes()), null) - .addListener(whenSet); - } else if (file != null) { - try { - LottieCompositionFactory.fromJsonInputStream(new FileInputStream(file), null) - .addListener(whenSet); - } catch (FileNotFoundException e) { - FileLog.e(e); - } - } - try { - latch.await(); - } catch (Exception e) { - FileLog.e(e); - } - return canvasDrawable; - } - private void parseLottieMetadata(File file, String json, int[] metaData) { if (gson == null) { gson = new Gson(); @@ -1358,11 +1258,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma canvas.save(); canvas.translate(rect.left, rect.top); canvas.scale(scaleX, scaleY); - if (canvasNodes != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - canvas.drawRenderNode(canvasNodes[readyNodeIndex.get()]); - } else { - canvas.drawBitmap(renderingBitmap, 0, 0, paint); - } + canvas.drawBitmap(renderingBitmap, 0, 0, paint); canvas.restore(); } } @@ -1466,20 +1362,13 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma return currentFrame == getFramesCount() - 1; } - boolean airbnb; - long generateCacheNativePtr; - protected volatile LottieDrawable cacheCanvasDrawable; @Override public void prepareForGenerateCache() { - if (airbnb) { - cacheCanvasDrawable = setupCanvasLottie(args.file, args.json); - } else { - generateCacheNativePtr = create(args.file.toString(), args.json, width, height, createdForFirstFrame ? metaData : new int[3], false, args.colorReplacement, false, args.fitzModifier); - if (generateCacheNativePtr == 0 && file != null) { - file.delete(); - } + generateCacheNativePtr = create(args.file.toString(), args.json, width, height, createdForFirstFrame ? metaData : new int[3], false, args.colorReplacement, false, args.fitzModifier); + if (generateCacheNativePtr == 0 && file != null) { + file.delete(); } } @@ -1489,17 +1378,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma @Override public int getNextFrame(Bitmap bitmap) { - if (cacheCanvasDrawable != null) { - int framesPerUpdates = shouldLimitFps ? 2 : 1; - cacheCanvasDrawable.setFrame(generateCacheFramePointer); - cacheCanvasDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); - cacheCanvasDrawable.draw(new Canvas(bitmap)); - generateCacheFramePointer += framesPerUpdates; - if (generateCacheFramePointer > metaData[0]) { - return 0; - } - return 1; - } if (generateCacheNativePtr == 0) { return -1; } @@ -1546,17 +1424,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma destroy(generateCacheNativePtr); generateCacheNativePtr = 0; } - cacheCanvasDrawable = null; } @Override public Bitmap getFirstFrame(Bitmap bitmap) { - if (canvasDrawable != null) { - canvasDrawable.setFrame((int) canvasDrawable.getMinFrame()); - canvasDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); - canvasDrawable.draw(new Canvas(bitmap)); - return bitmap; - } long nativePtr = create(args.file.toString(), args.json, width, height, new int[3], false, args.colorReplacement, false, args.fitzModifier); if (nativePtr == 0) { return bitmap; @@ -1571,9 +1442,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma } public boolean canLoadFrames() { - if (airbnb) { - return canvasDrawable != null; - } else if (precache) { + if (precache) { return bitmapsCache != null || fallbackCache; } else { return nativePtr != 0; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java index 7e8fbdee2..0ea984f0f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java @@ -1,5 +1,6 @@ package org.telegram.ui.Components.Reactions; +import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.replaceTags; import static org.telegram.messenger.LocaleController.formatPluralString; import static org.telegram.messenger.LocaleController.getString; @@ -11,6 +12,10 @@ import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; import android.os.Build; import android.text.Editable; import android.text.Layout; @@ -25,6 +30,9 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.ScrollView; +import androidx.annotation.NonNull; + +import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; @@ -60,6 +68,8 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not SELECT_TYPE_SOME = 1, SELECT_TYPE_ALL = 0; + private boolean paid; + private SelectAnimatedEmojiDialog selectAnimatedEmojiDialog; private FrameLayout bottomDialogLayout; private BackSpaceButtonView backSpaceButtonView; @@ -68,6 +78,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not private LinearLayout contentLayout; private CustomReactionEditText editText; private SlideIntChooseView slideView; + private TextCheckCell paidCheckCell; private UpdateReactionsButton actionButton; private ScrollView scrollView; @@ -75,6 +86,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not private final List selectedEmojisIds = new ArrayList<>(); private final HashMap initialSelectedEmojis = new LinkedHashMap<>(); private final List allAvailableReactions = new ArrayList<>(); + private boolean initialPaid; private final int maxReactionsCount = getMessagesController().boostsChannelLevelMax; private boolean emojiKeyboardVisible = false; @@ -156,7 +168,10 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not enableReactionsCell.setTypeface(AndroidUtilities.bold()); enableReactionsCell.setColors(Theme.key_windowBackgroundCheckText, Theme.key_switchTrackBlue, Theme.key_switchTrackBlueChecked, Theme.key_switchTrackBlueThumb, Theme.key_switchTrackBlueThumbChecked); enableReactionsCell.setOnClickListener(v -> { - setCheckedEnableReactionCell(enableReactionsCell.isChecked() ? SELECT_TYPE_NONE : SELECT_TYPE_SOME, true); + if (enableReactionsCell.isChecked() && paidCheckCell != null && paidCheckCell.isChecked()) { + toggleStarsEnabled(); + } + setCheckedEnableReactionCell(enableReactionsCell.isChecked() ? SELECT_TYPE_NONE : SELECT_TYPE_SOME, enableReactionsCell.isChecked() ? false : paid, true); }); contentLayout.addView(enableReactionsCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); @@ -183,7 +198,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not @Override protected void onLineCountChanged(int oldLineCount, int newLineCount) { if (newLineCount > oldLineCount) { - scrollView.smoothScrollBy(0, AndroidUtilities.dp(30)); + scrollView.smoothScrollBy(0, dp(30)); } } @@ -234,10 +249,31 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not switchLayout.addView(slideView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); TextInfoPrivacyCell infoCell3 = new TextInfoPrivacyCell(context); infoCell3.setTopPadding(12); - infoCell3.setBottomPadding(70); + infoCell3.setBottomPadding(16); infoCell3.setText(LocaleController.getString(R.string.MaximumReactionsInfo)); switchLayout.addView(infoCell3, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + if (info.paid_media_allowed) { + paidCheckCell = new TextCheckCell(context); + paidCheckCell.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + paidCheckCell.setTextAndCheck(LocaleController.getString(R.string.ChannelEnablePaidReactions), false, false); + switchLayout.addView(paidCheckCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + paidCheckCell.setOnClickListener(v -> { + toggleStarsEnabled(); + }); + + infoCell = new TextInfoPrivacyCell(context); + infoCell.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4)); + infoCell.setTopPadding(12); + infoCell.setBottomPadding(70); + infoCell.setText(AndroidUtilities.withLearnMore(LocaleController.getString(R.string.ChannelEnablePaidReactionsInfo), () -> { + Browser.openUrl(getContext(), LocaleController.getString(R.string.ChannelEnablePaidReactionsInfoLink)); + })); + switchLayout.addView(infoCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } else { + infoCell3.setBottomPadding(70); + } + actionButton = new UpdateReactionsButton(context, getResourceProvider()); actionButton.setDefaultState(); actionButton.setOnClickListener(v -> { @@ -250,8 +286,13 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not return; } + Boolean allowPaid = null; + if (paidCheckCell != null && info.paid_media_allowed) { + allowPaid = paidCheckCell.isChecked(); + } + actionButton.setLoading(true); - getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), currentReactionsCount = reactionsCount, error -> { + getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), currentReactionsCount = reactionsCount, allowPaid, error -> { if (isFinishing()) { return; } @@ -305,8 +346,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not } } editText.append(editable); - setCheckedEnableReactionCell(SELECT_TYPE_ALL, false); - initialSelectedEmojis.putAll(selectedEmojisMap); + setCheckedEnableReactionCell(SELECT_TYPE_ALL, paid, false); } else if (info.available_reactions instanceof TLRPC.TL_chatReactionsSome) { TLRPC.TL_chatReactionsSome reactionsSome = (TLRPC.TL_chatReactionsSome) info.available_reactions; SpannableStringBuilder editable = new SpannableStringBuilder(); @@ -328,8 +368,9 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not } } editText.append(editable); - setCheckedEnableReactionCell(SELECT_TYPE_SOME, false); - initialSelectedEmojis.putAll(selectedEmojisMap); + setCheckedEnableReactionCell(SELECT_TYPE_SOME, paid, false); + } else if (info.available_reactions instanceof TLRPC.TL_chatReactionsNone && (info != null && info.paid_media_allowed && info.paid_reactions_available)) { + setCheckedEnableReactionCell(SELECT_TYPE_NONE, paid, false); } else if (info.available_reactions instanceof TLRPC.TL_chatReactionsNone) { SpannableStringBuilder editable = new SpannableStringBuilder(); for (TLRPC.TL_availableReaction availableReaction : allAvailableReactions) { @@ -340,11 +381,18 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not } } editText.append(editable); - setCheckedEnableReactionCell(SELECT_TYPE_NONE, false); + setCheckedEnableReactionCell(SELECT_TYPE_NONE, paid, false); } - enableReactionsCell.setTextAndCheck(LocaleController.getString("EnableReactions", R.string.EnableReactions), selectedType != SELECT_TYPE_NONE, false); + + enableReactionsCell.setTextAndCheck(LocaleController.getString("EnableReactions", R.string.EnableReactions), selectedType != SELECT_TYPE_NONE || paid, false); editText.addReactionsSpan(); + if (info.paid_media_allowed && info.paid_reactions_available) { + toggleStarsEnabled(); + } + initialSelectedEmojis.putAll(selectedEmojisMap); + initialPaid = paid; + fragmentView = rootLayout; return rootLayout; } @@ -394,7 +442,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not selectAnimatedEmojiDialog.setMultiSelected(documentId, true); checkMaxCustomReactions(false); } else { - if (selectedEmojisMap.size() >= maxReactionsCount) { + if (selectedEmojisMap.size() - (selectedEmojisMap.containsKey(-1L) ? 1 : 0) >= maxReactionsCount) { BulletinFactory.of(ChatCustomReactionsEditActivity.this).createErrorBulletin(formatPluralString("ReactionMaxCountError", maxReactionsCount)).show(); return; } @@ -438,6 +486,10 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not selectedEmojisMap.remove(span.documentId); selectedEmojisIds.remove(span.documentId); selectAnimatedEmojiDialog.unselect(span.documentId); + if (span.documentId == -1 && paidCheckCell != null) { + paidCheckCell.setChecked(false); + editText.setMaxLength(maxReactionsCount); + } if (isFast) { editText.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); AndroidUtilities.cancelRunOnUIThread(checkAfterFastDeleteRunnable); @@ -519,12 +571,13 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not } } - private void setCheckedEnableReactionCell(int selectType, boolean animated) { - if (selectedType == selectType) { + private void setCheckedEnableReactionCell(int selectType, boolean paid, boolean animated) { + if (selectedType == selectType && this.paid == paid) { return; } + this.paid = paid; - boolean checked = selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL; + boolean checked = selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL || paid; enableReactionsCell.setChecked(checked); int clr = Theme.getColor(checked ? Theme.key_windowBackgroundChecked : Theme.key_windowBackgroundUnchecked); if (animated) { @@ -539,7 +592,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not this.selectedType = selectType; - if (selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL) { + if (selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL || paid) { switchLayout.setVisibility(View.VISIBLE); actionButton.setVisibility(View.VISIBLE); if (animated) { @@ -600,7 +653,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not super.onFragmentDestroy(); AndroidUtilities.cancelRunOnUIThread(checkAfterFastDeleteRunnable); if (selectedType == SELECT_TYPE_NONE && reactionsCount != currentReactionsCount) { - getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), reactionsCount, null, null); + getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), reactionsCount, null, null, null); } } @@ -641,8 +694,8 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not if (boostsStatus != null && boostsStatus.level < selectedCustomReactions) { hasChanges = false; } - if (selectedType == SELECT_TYPE_NONE) { - hasChanges = false; + if (initialPaid != paid) { + hasChanges = true; } if (hasChanges) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), getResourceProvider()); @@ -652,7 +705,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not builder.setPositiveButton(getString("ApplyTheme", R.string.ApplyTheme), (dialogInterface, i) -> { actionButton.performClick(); }); - builder.setNegativeButton(getString("Discard", R.string.Discard), (dialogInterface, i) -> finishFragment()); + builder.setNegativeButton(getString(R.string.Discard), (dialogInterface, i) -> finishFragment()); builder.show(); } return hasChanges; @@ -683,6 +736,8 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not List reactions = new ArrayList<>(); List customReactions = new ArrayList<>(); for (Long documentId : selectedEmojisIds) { + if (documentId == -1) continue; + boolean isReactionEmoji = false; for (TLRPC.TL_availableReaction availableReaction : allAvailableReactions) { if (documentId == availableReaction.activate_animation.id) { @@ -770,4 +825,74 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not public void didReceivedNotification(int id, int account, Object... args) { } + + public void toggleStarsEnabled() { + if (paidCheckCell.isChecked()) { + paidCheckCell.setChecked(false); + selectedEmojisIds.remove(-1L); + AnimatedEmojiSpan removedSpan = selectedEmojisMap.remove(-1L); + if (removedSpan != null) { + removedSpan.setRemoved(() -> { + SpannableStringBuilder spanned = new SpannableStringBuilder(editText.getText()); + AnimatedEmojiSpan[] spans = spanned.getSpans(0, spanned.length(), AnimatedEmojiSpan.class); + for (AnimatedEmojiSpan span : spans) { + if (span == removedSpan) { + int selectionEnd = editText.getEditTextSelectionEnd(); + int spanEnd = spanned.getSpanEnd(span); + int spanStart = spanned.getSpanStart(span); + editText.getText().delete(spanStart, spanEnd); + int spanDiff = spanEnd - spanStart; + editText.setSelection(spanEnd <= selectionEnd ? selectionEnd - spanDiff : selectionEnd); + break; + } + } + }); + } + animateChangesInNextRows(removedSpan); + selectAnimatedEmojiDialog.setMultiSelected(-1L, true); + checkMaxCustomReactions(false); + editText.setMaxLength(maxReactionsCount); + setCheckedEnableReactionCell(selectedType, paid, true); + } else { + paidCheckCell.setChecked(true); + try { + editText.setMaxLength(maxReactionsCount + 1); + SpannableString spannable = new SpannableString("b"); + AnimatedEmojiSpan span = new AnimatedEmojiSpan(-1, null) { + private final Bitmap bitmap = Bitmap.createBitmap(dp(24), dp(24), Bitmap.Config.ARGB_8888); + { + final Drawable drawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); + drawable.setBounds(0, 0, dp(24), dp(24)); + drawable.draw(new Canvas(bitmap)); + } + @Override + public void draw(@NonNull Canvas canvas, CharSequence charSequence, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) { + super.draw(canvas, charSequence, start, end, x, top, y, bottom, paint); + canvas.save(); + canvas.translate(x, (top + bottom) / 2f - dp(12)); + canvas.scale(extraScale, extraScale, x + dp(12), dp(12)); + canvas.drawBitmap(bitmap, 0, 0, null); + canvas.restore(); + } + @Override + public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) { + return super.getSize(paint, text, start, end, fm) + dp(5); + } + }; + span.cacheType = AnimatedEmojiDrawable.getCacheTypeForEnterView(); + span.setAdded(); + selectedEmojisIds.add(0, -1L); + selectedEmojisMap.put(-1L, span); + spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + editText.getText().insert(0, spannable); + selectAnimatedEmojiDialog.setMultiSelected(-1L, true); + checkMaxCustomReactions(true); + animateChangesInNextRows(span); + } catch (Exception e) { + FileLog.e(e); + } + setCheckedEnableReactionCell(selectedType, true, true); + } + editText.updateAnimatedEmoji(true); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java index b378b15ab..110bff669 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java @@ -112,7 +112,7 @@ public class ChatSelectionReactionMenuOverlay extends FrameLayout { reactionsContainerLayout.setDelegate(new ReactionsContainerLayout.ReactionsContainerDelegate() { @Override public void onReactionClicked(View view, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean longpress, boolean addToRecent) { - parentFragment.selectReaction(currentPrimaryObject, reactionsContainerLayout, view, 0, 0, visibleReaction, false, longpress, addToRecent, false); + parentFragment.selectReaction(null, currentPrimaryObject, reactionsContainerLayout, view, 0, 0, visibleReaction, false, longpress, addToRecent, false); AndroidUtilities.runOnUIThread(() -> { if (reactionsContainerLayout != null) { reactionsContainerLayout.dismissParent(true); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java index a9bd07b04..d63a1d51b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java @@ -30,6 +30,16 @@ public class CustomReactionEditText extends EditTextCaption { private final GestureDetectorCompat gestureDetector; private Runnable onFocused; + private int maxLength; + + public void setMaxLength(int maxLength) { + if (this.maxLength != maxLength) { + InputFilter[] inputFilters = new InputFilter[1]; + inputFilters[0] = new InputFilter.LengthFilter(this.maxLength = maxLength); + setFilters(inputFilters); + } + } + public CustomReactionEditText(Context context, Theme.ResourcesProvider resourcesProvider, int maxLength) { super(context, resourcesProvider); this.resourcesProvider = resourcesProvider; @@ -47,7 +57,7 @@ public class CustomReactionEditText extends EditTextCaption { setSingleLine(false); setMaxLines(50); InputFilter[] inputFilters = new InputFilter[1]; - inputFilters[0] = new InputFilter.LengthFilter(maxLength); + inputFilters[0] = new InputFilter.LengthFilter(this.maxLength = maxLength); setFilters(inputFilters); setTextSize(TypedValue.COMPLEX_UNIT_DIP, 22); setGravity(Gravity.BOTTOM); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java index 59c923449..ea15f3b45 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java @@ -322,7 +322,7 @@ public class ReactionsEffectOverlay { toY += reactionButton.drawingImageRect.top; } if (chatActivity != null) { - toY += chatActivity.drawingChatLisViewYoffset; + toY += chatActivity.drawingChatListViewYoffset; } if (drawingCell.drawPinnedBottom && !drawingCell.shouldDrawTimeOnMedia()) { toY += AndroidUtilities.dp(2); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java index dd3ca0ad2..6afe35560 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java @@ -17,7 +17,6 @@ import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; import android.text.TextUtils; -import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; @@ -37,13 +36,13 @@ import org.telegram.messenger.LocaleController; import org.telegram.messenger.MediaDataController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; -import org.telegram.ui.ActionBar.AdjustPanLayoutHelper; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.Components.AnimatedEmojiDrawable; @@ -51,9 +50,11 @@ import org.telegram.ui.Components.AnimatedEmojiSpan; import org.telegram.ui.Components.AnimatedFileDrawable; import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.AvatarsDrawable; +import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CounterView; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.Stars.StarsReactionsSheet; import java.util.ArrayList; import java.util.Collections; @@ -172,13 +173,13 @@ public class ReactionsLayoutInBubble { for (int i = 0; i < messageObject.messageOwner.reactions.results.size(); i++) { TLRPC.ReactionCount reactionCount = messageObject.messageOwner.reactions.results.get(i); ReactionButton old = null; -// for (int j = 0; j < oldButtons.size(); ++j) { -// ReactionButton btn = oldButtons.get(j); -// if (btn.reaction.equals(reactionCount.reaction)) { -// old = btn; -// break; -// } -// } + for (int j = 0; j < oldButtons.size(); ++j) { + ReactionButton btn = oldButtons.get(j); + if (btn.reaction.equals(reactionCount.reaction)) { + old = btn; + break; + } + } ReactionButton button = new ReactionLayoutButton(old, reactionCount, isSmall, isTag); reactionButtons.add(button); if (!isSmall && !isTag && messageObject.messageOwner.reactions.recent_reactions != null) { @@ -403,9 +404,9 @@ public class ReactionsLayoutInBubble { } for (int i = 0; i < reactionButtons.size(); i++) { ReactionButton reactionButton = reactionButtons.get(i); - if (Objects.equals(reactionButton.reaction.hashCode(), scrimViewReaction)) { - continue; - } +// if (Objects.equals(reactionButton.reaction.hashCode(), scrimViewReaction)) { +// continue; +// } if (drawOnlyReaction != null && reactionButton.reaction.hashCode() != drawOnlyReaction) { continue; } @@ -555,7 +556,18 @@ public class ReactionsLayoutInBubble { } public ReactionButton getReactionButton(VisibleReaction visibleReaction) { - String hash = visibleReaction.emojicon != null ? visibleReaction.emojicon : Long.toString(visibleReaction.documentId); + String hash; + if (visibleReaction.isStar) { + hash = "stars"; + } else if (visibleReaction.emojicon != null) { + hash = visibleReaction.emojicon; + } else { + hash = Long.toString(visibleReaction.documentId); + } + return getReactionButton(hash); + } + + public ReactionButton getReactionButton(String hash) { if (isSmall) { ReactionButton button = lastDrawingReactionButtons.get(hash + "_"); if (button != null) { @@ -630,13 +642,14 @@ public class ReactionsLayoutInBubble { public int realCount; public int choosenOrder; public boolean drawImage = true; + public boolean paid; public boolean lastImageDrawn; public boolean wasDrawn; public String key; public boolean choosen; public String countText; - TLRPC.Reaction reaction; + public TLRPC.Reaction reaction; VisibleReaction visibleReaction; android.graphics.Rect drawingImageRect = new Rect(); @@ -671,6 +684,9 @@ public class ReactionsLayoutInBubble { private final View parentView; private final Theme.ResourcesProvider resourcesProvider; + public final ButtonBounce bounce; + private StarsReactionsSheet.Particles particles; + protected int getCacheType() { if (isTag) { return AnimatedEmojiDrawable.CACHE_TYPE_SAVED_REACTION; @@ -681,6 +697,7 @@ public class ReactionsLayoutInBubble { public ReactionButton(ReactionButton reuseFrom, int currentAccount, View parentView, TLRPC.ReactionCount reactionCount, boolean isSmall, boolean isTag, Theme.ResourcesProvider resourcesProvider) { this.currentAccount = currentAccount; this.parentView = parentView; + this.bounce = new ButtonBounce(parentView); this.resourcesProvider = resourcesProvider; this.isTag = isTag; if (reuseFrom != null) { @@ -708,7 +725,9 @@ public class ReactionsLayoutInBubble { this.realCount = reactionCount.count; this.choosenOrder = reactionCount.chosen_order; this.isSmall = isSmall; - if (this.reaction instanceof TLRPC.TL_reactionEmoji) { + if (this.reaction instanceof TLRPC.TL_reactionPaid) { + this.key = "stars"; + } else if (this.reaction instanceof TLRPC.TL_reactionEmoji) { this.key = ((TLRPC.TL_reactionEmoji) this.reaction).emoticon; } else if (this.reaction instanceof TLRPC.TL_reactionCustomEmoji) { this.key = Long.toString(((TLRPC.TL_reactionCustomEmoji) this.reaction).document_id); @@ -721,7 +740,17 @@ public class ReactionsLayoutInBubble { counterDrawable.shortFormat = true; if (reaction != null) { - if (visibleReaction.emojicon != null) { + if (visibleReaction.isStar) { + paid = true; + RLottieDrawable drawable = new RLottieDrawable(R.raw.star_reaction_click, "star_reaction_click", dp(40), dp(40)); + imageReceiver.setImageBitmap(drawable); +// if (reuseFrom != null) { +// imageReceiver.setImageBitmap(reuseFrom.imageReceiver.getImageDrawable()); +// } else { +// imageReceiver.setImageBitmap(ApplicationLoader.applicationContext.getResources().getDrawable(R.drawable.star_small_inner)); +// } + particles = reuseFrom != null && reuseFrom.particles != null ? reuseFrom.particles : new StarsReactionsSheet.Particles(StarsReactionsSheet.Particles.TYPE_RADIAL, 30); + } else if (visibleReaction.emojicon != null) { TLRPC.TL_availableReaction r = MediaDataController.getInstance(currentAccount).getReactionsMap().get(visibleReaction.emojicon); if (r != null) { //imageReceiver.setImage(ImageLocation.getForDocument(r.static_icon), "40_40", svgThumb, "webp", r, 1); @@ -798,16 +827,30 @@ public class ReactionsLayoutInBubble { } if (choosen) { - backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); - textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonTextSelected : Theme.key_chat_inReactionButtonTextSelected, resourcesProvider); - serviceTextColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); - serviceBackgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outBubble : Theme.key_chat_inBubble); + if (paid) { + backgroundColor = 0xFFE8AB02; + textColor = 0xFFFFFFFF; + serviceTextColor = 0xFFFFFFFF; + serviceBackgroundColor = 0xFFE8AB02; + } else { + backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); + textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonTextSelected : Theme.key_chat_inReactionButtonTextSelected, resourcesProvider); + serviceTextColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); + serviceBackgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outBubble : Theme.key_chat_inBubble); + } } else { - textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonText : Theme.key_chat_inReactionButtonText, resourcesProvider); - backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); - backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, (int) (Color.alpha(backgroundColor) * 0.156f)); - serviceTextColor = Theme.getColor(Theme.key_chat_serviceText, resourcesProvider); - serviceBackgroundColor = Color.TRANSPARENT; + if (paid) { + textColor = 0xFFE8AB02; + backgroundColor = 0x40E8AB02; + serviceTextColor = 0xFFFFFFFF; + serviceBackgroundColor = Color.TRANSPARENT; + } else { + textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonText : Theme.key_chat_inReactionButtonText, resourcesProvider); + backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); + backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, (int) (Color.alpha(backgroundColor) * 0.156f)); + serviceTextColor = Theme.getColor(Theme.key_chat_serviceText, resourcesProvider); + serviceBackgroundColor = Color.TRANSPARENT; + } } updateColors(progress); textPaint.setColor(lastDrawnTextColor); @@ -825,11 +868,16 @@ public class ReactionsLayoutInBubble { imageReceiver.setAlpha(alpha); } + final float bounceScale = bounce.getScale(0.1f); int w = width; if (progress != 1f && animationType == ANIMATION_TYPE_MOVE) { w = (int) (width * progress + animateFromWidth * (1f - progress)); } AndroidUtilities.rectTmp.set(x, y, x + w, y + height); + if (bounceScale != 1f) { + canvas.save(); + canvas.scale(bounceScale, bounceScale, x + w / 2f, y + height / 2f); + } float rad = height / 2f; if (getDrawServiceShaderBackground() > 0) { Paint paint1 = Theme.getThemePaint(Theme.key_paint_chatActionBackground, resourcesProvider); @@ -856,7 +904,25 @@ public class ReactionsLayoutInBubble { canvas.saveLayerAlpha(AndroidUtilities.rectTmp, 0xFF, Canvas.ALL_SAVE_FLAG); AndroidUtilities.rectTmp.right -= dp(4); } + if (particles != null) { + particles.bounds.set(AndroidUtilities.rectTmp); + particles.bounds.inset(-dp(4), -dp(4)); + particles.setBounds(particles.bounds); + particles.process(); + if (parentView != null) { + parentView.invalidate(); + } + particles.draw(canvas, ColorUtils.blendARGB(ColorUtils.setAlphaComponent(backgroundColor, 0xFF), ColorUtils.blendARGB(serviceTextColor, ColorUtils.setAlphaComponent(backgroundColor, 0xFF), .4f), getDrawServiceShaderBackground())); + } drawRoundRect(canvas, AndroidUtilities.rectTmp, rad, paint); + if (particles != null) { + canvas.save(); + tagPath.rewind(); + tagPath.addRoundRect(AndroidUtilities.rectTmp, rad, rad, Path.Direction.CW); + canvas.clipPath(tagPath); + particles.draw(canvas, textColor); + canvas.restore(); + } if (isTag && drawTagDot()) { Paint paint; if (cutTagCircle) { @@ -874,7 +940,10 @@ public class ReactionsLayoutInBubble { if (imageReceiver != null) { int size, X; - if (animatedEmojiDrawable != null) { + if (paid) { + size = dp(22); + X = dp(4); + } else if (animatedEmojiDrawable != null) { size = dp(24); X = dp(6); imageReceiver.setRoundRadius(dp(6)); @@ -903,7 +972,7 @@ public class ReactionsLayoutInBubble { } if (counterDrawable != null && drawCounter()) { canvas.save(); - canvas.translate(x + dp(hasName && !drawTagDot() ? 10 : (hasName ? 9 : 8)) + dp(20) + dp(2) + tx, y); + canvas.translate(x + dp(hasName && !drawTagDot() ? 10 : (hasName ? 9 : 8)) + dp(20) + dp(2) + tx + (paid ? -dp(1) : 0), y); counterDrawable.draw(canvas); canvas.restore(); } @@ -918,6 +987,10 @@ public class ReactionsLayoutInBubble { canvas.restore(); } } + + if (bounceScale != 1f) { + canvas.restore(); + } } protected void updateColors(float progress) { @@ -958,7 +1031,7 @@ public class ReactionsLayoutInBubble { if (animatedEmojiDrawable != null && animatedEmojiDrawableColor != lastDrawnTextColor) { animatedEmojiDrawable.setColorFilter(new PorterDuffColorFilter(animatedEmojiDrawableColor = lastDrawnTextColor, PorterDuff.Mode.SRC_IN)); } - if (drawImage && (realCount > 1 || !isPlaying() || !isSelected)) { + if (drawImage && (paid || realCount > 1 || !isPlaying() || !isSelected)) { ImageReceiver imageReceiver2 = getImageReceiver(); boolean drawStaticImage = true; if (imageReceiver2 != null) { @@ -1053,6 +1126,11 @@ public class ReactionsLayoutInBubble { } public void startAnimation() { +// if (paid && imageReceiver.getLottieAnimation() == null) { +// RLottieDrawable drawable = new RLottieDrawable(R.raw.star_reaction_click, "star_reaction_click", dp(40), dp(40)); +// imageReceiver.setImageBitmap(drawable); +// return; +// } ImageReceiver imageReceiver; if (animatedEmojiDrawable != null && animatedEmojiDrawable.getImageReceiver() != null) { imageReceiver = animatedEmojiDrawable.getImageReceiver(); @@ -1080,7 +1158,9 @@ public class ReactionsLayoutInBubble { if (previewImageReceiver != null || previewAnimatedEmojiDrawable != null) return; View parent = parentView != null && parentView.getParent() instanceof View ? (View) parentView.getParent() : parentView; if (reaction != null) { - if (visibleReaction.emojicon != null) { + if (visibleReaction.isStar) { + + } else if (visibleReaction.emojicon != null) { TLRPC.TL_availableReaction r = MediaDataController.getInstance(currentAccount).getReactionsMap().get(visibleReaction.emojicon); if (r != null && r.activate_animation != null) { //imageReceiver.setImage(ImageLocation.getForDocument(r.static_icon), "40_40", svgThumb, "webp", r, 1); @@ -1137,7 +1217,7 @@ public class ReactionsLayoutInBubble { boolean pressed; Runnable longPressRunnable; - public boolean chekTouchEvent(MotionEvent event) { + public boolean checkTouchEvent(MotionEvent event) { if (isEmpty || isSmall || messageObject == null || messageObject.messageOwner == null || messageObject.messageOwner.reactions == null) { return false; } @@ -1146,7 +1226,7 @@ public class ReactionsLayoutInBubble { if (event.getAction() == MotionEvent.ACTION_DOWN) { for (int i = 0, n = reactionButtons.size(); i < n; i++) { if (x > reactionButtons.get(i).x && x < reactionButtons.get(i).x + reactionButtons.get(i).width && - y > reactionButtons.get(i).y && y < reactionButtons.get(i).y + reactionButtons.get(i).height) { + y > reactionButtons.get(i).y && y < reactionButtons.get(i).y + reactionButtons.get(i).height) { lastX = event.getX(); lastY = event.getY(); lastSelectedButton = reactionButtons.get(i); @@ -1154,11 +1234,16 @@ public class ReactionsLayoutInBubble { AndroidUtilities.cancelRunOnUIThread(longPressRunnable); longPressRunnable = null; } + lastSelectedButton.bounce.setPressed(true); final ReactionButton selectedButtonFinal = lastSelectedButton; AndroidUtilities.runOnUIThread(longPressRunnable = () -> { - parentView.getDelegate().didPressReaction(parentView, selectedButtonFinal.reactionCount, true); + parentView.getDelegate().didPressReaction(parentView, selectedButtonFinal.reactionCount, true, 0, 0); + selectedButtonFinal.bounce.setPressed(false); + lastSelectedButton = null; + pressed = false; longPressRunnable = null; + // here }, ViewConfiguration.getLongPressTimeout()); pressed = true; break; @@ -1167,6 +1252,9 @@ public class ReactionsLayoutInBubble { } else if (event.getAction() == MotionEvent.ACTION_MOVE) { if (pressed && Math.abs(event.getX() - lastX) > touchSlop || Math.abs(event.getY() - lastY) > touchSlop) { pressed = false; + if (lastSelectedButton != null) { + lastSelectedButton.bounce.setPressed(false); + } lastSelectedButton = null; if (longPressRunnable != null) { AndroidUtilities.cancelRunOnUIThread(longPressRunnable); @@ -1180,10 +1268,13 @@ public class ReactionsLayoutInBubble { } if (pressed && lastSelectedButton != null && event.getAction() == MotionEvent.ACTION_UP) { if (parentView.getDelegate() != null) { - parentView.getDelegate().didPressReaction(parentView, lastSelectedButton.reactionCount, false); + parentView.getDelegate().didPressReaction(parentView, lastSelectedButton.reactionCount, false, event.getX(), event.getY()); } } pressed = false; + if (lastSelectedButton != null) { + lastSelectedButton.bounce.setPressed(false); + } lastSelectedButton = null; } return pressed; @@ -1220,7 +1311,9 @@ public class ReactionsLayoutInBubble { @Override public int compare(ReactionButton o1, ReactionButton o2) { if (dialogId >= 0) { - if (o1.isSelected != o2.isSelected) { + if (o1.paid != o2.paid) { + return o1.paid ? -1 : 1; + } else if (o1.isSelected != o2.isSelected) { return o1.isSelected ? -1 : 1; } else if (o1.isSelected) { if (o1.choosenOrder != o2.choosenOrder) { @@ -1229,7 +1322,9 @@ public class ReactionsLayoutInBubble { } return o1.reactionCount.lastDrawnPosition - o2.reactionCount.lastDrawnPosition; } else { - if (o1.realCount != o2.realCount) { + if (o1.paid != o2.paid) { + return o1.paid ? -1 : 1; + } else if (o1.realCount != o2.realCount) { return o2.realCount - o1.realCount; } } @@ -1286,6 +1381,7 @@ public class ReactionsLayoutInBubble { public static class VisibleReaction { + public boolean isStar; public boolean isEffect; public long effectId; public boolean premium; @@ -1296,9 +1392,17 @@ public class ReactionsLayoutInBubble { public long hash; + public static VisibleReaction asStar() { + VisibleReaction visibleReaction = new VisibleReaction(); + visibleReaction.isStar = true; + return visibleReaction; + } + public static VisibleReaction fromTL(TLRPC.Reaction reaction) { VisibleReaction visibleReaction = new VisibleReaction(); - if (reaction instanceof TLRPC.TL_reactionEmoji) { + if (reaction instanceof TLRPC.TL_reactionPaid) { + visibleReaction.isStar = true; + } else if (reaction instanceof TLRPC.TL_reactionEmoji) { visibleReaction.emojicon = ((TLRPC.TL_reactionEmoji) reaction).emoticon; visibleReaction.hash = visibleReaction.emojicon.hashCode(); } else if (reaction instanceof TLRPC.TL_reactionCustomEmoji) { @@ -1322,6 +1426,9 @@ public class ReactionsLayoutInBubble { } public TLRPC.Reaction toTLReaction() { + if (isStar) { + return new TLRPC.TL_reactionPaid(); + } if (emojicon != null) { TLRPC.TL_reactionEmoji r = new TLRPC.TL_reactionEmoji(); r.emoticon = emojicon; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java index d191913a2..1f390737a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java @@ -82,6 +82,7 @@ import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.Components.Reactions.ReactionsUtils; import org.telegram.ui.PremiumPreviewFragment; import org.telegram.ui.SelectAnimatedEmojiDialog; +import org.telegram.ui.Stars.StarsReactionsSheet; import org.telegram.ui.Stories.recorder.HintView2; import java.util.ArrayList; @@ -626,7 +627,7 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio if (pressedReaction != null && type != TYPE_MESSAGE_EFFECTS) { if (pressedProgress != 1f) { - pressedProgress += 16f / 1500f; + pressedProgress += 16f / (pressedReaction.isStar ? ViewConfiguration.getLongPressTimeout() : 1500f); if (pressedProgress >= 1f) { pressedProgress = 1f; } @@ -635,8 +636,13 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio } - pressedViewScale = 1 + 2 * pressedProgress; - otherViewsScale = 1 - 0.15f * pressedProgress; + if (pressedReaction != null && pressedReaction.isStar) { + pressedViewScale = 1f; + otherViewsScale = 1f; + } else { + pressedViewScale = 1 + 2 * pressedProgress; + otherViewsScale = 1 - 0.15f * pressedProgress; + } int s = canvas.save(); float pivotX = LocaleController.isRTL || mirrorX ? getWidth() * 0.125f : getWidth() * 0.875f; @@ -1013,7 +1019,15 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio public void setMessage(MessageObject message, TLRPC.ChatFull chatFull, boolean animated) { this.messageObject = message; - hitLimit = type == TYPE_DEFAULT && messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.reactions != null && messageObject.messageOwner.reactions.results.size() >= MessagesController.getInstance(currentAccount).getChatMaxUniqReactions(messageObject.getDialogId()); + int chosenCount = 0; + if (messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.reactions != null) { + for (TLRPC.ReactionCount reactionCount : messageObject.messageOwner.reactions.results) { + if (!(reactionCount.reaction instanceof TLRPC.TL_reactionPaid)) { + chosenCount++; + } + } + } + hitLimit = type == TYPE_DEFAULT && messageObject != null && chosenCount >= MessagesController.getInstance(currentAccount).getChatMaxUniqReactions(messageObject.getDialogId()); TLRPC.ChatFull reactionsChat = chatFull; List visibleReactions = new ArrayList<>(); if (message != null && message.isForwardedChannelPost()) { @@ -1033,10 +1047,16 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio fillRecentReactionsList(visibleReactions); } else if (hitLimit) { allReactionsAvailable = false; + if (reactionsChat != null && reactionsChat.paid_reactions_available) { + visibleReactions.add(ReactionsLayoutInBubble.VisibleReaction.asStar()); + } for (TLRPC.ReactionCount result : messageObject.messageOwner.reactions.results) { visibleReactions.add(ReactionsLayoutInBubble.VisibleReaction.fromTL(result.reaction)); } } else if (reactionsChat != null) { + if (reactionsChat != null && reactionsChat.paid_reactions_available) { + visibleReactions.add(ReactionsLayoutInBubble.VisibleReaction.asStar()); + } if (reactionsChat.available_reactions instanceof TLRPC.TL_chatReactionsAll) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(reactionsChat.id); if (chat != null && !ChatObject.isChannelAndNotMegaGroup(chat)) { @@ -1058,10 +1078,6 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio } } } - } else { - if (BuildVars.DEBUG_PRIVATE_VERSION) { - throw new RuntimeException("Unknown chat reactions type: " + reactionsChat.available_reactions); - } } } else { allReactionsAvailable = true; @@ -1710,6 +1726,7 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio public boolean drawSelected = true; public int position; public boolean waitingAnimation; + public StarsReactionsSheet.Particles particles; Runnable playRunnable = new Runnable() { @Override @@ -1925,11 +1942,11 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio resetAnimation(); currentReaction = react; - hasEnterAnimation = currentReaction.emojicon != null && (showCustomEmojiReaction() || allReactionsIsDefault) && LiteMode.isEnabled(LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS); + hasEnterAnimation = currentReaction.isStar || (currentReaction.emojicon != null && (showCustomEmojiReaction() || allReactionsIsDefault)) && LiteMode.isEnabled(LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS); if (type == TYPE_STICKER_SET_EMOJI || currentReaction.isEffect) { hasEnterAnimation = false; } - if (currentReaction.emojicon != null) { + if (currentReaction.isStar || currentReaction.emojicon != null) { updateImage(react); pressedBackupImageView.setAnimatedEmojiDrawable(null); @@ -1978,7 +1995,13 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio } private void updateImage(ReactionsLayoutInBubble.VisibleReaction react) { - if (type == TYPE_STICKER_SET_EMOJI && react != null && react.emojicon != null) { + if (react != null && react.isStar) { + enterImageView.getImageReceiver().setImageBitmap(new RLottieDrawable(R.raw.star_reaction, "star_reaction", dp(30), dp(30))); + loopImageView.getImageReceiver().setImageBitmap(getContext().getResources().getDrawable(R.drawable.star_reaction)); + if (particles == null) { + particles = new StarsReactionsSheet.Particles(StarsReactionsSheet.Particles.TYPE_RADIAL, 45); + } + } else if (type == TYPE_STICKER_SET_EMOJI && react != null && react.emojicon != null) { enterImageView.getImageReceiver().setImageBitmap(Emoji.getEmojiDrawable(react.emojicon)); loopImageView.getImageReceiver().setImageBitmap(Emoji.getEmojiDrawable(react.emojicon)); } else if (currentReaction.isEffect) { @@ -2174,6 +2197,17 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio loopImageView.animatedEmojiDrawable.getImageReceiver().setRoundRadius(selected ? dp(6) : 0); } } + if (currentReaction != null && currentReaction.isStar && particles != null) { + final int sz = (int) (getHeight() * .7f); + AndroidUtilities.rectTmp.set(getWidth() / 2f - sz / 2f, getHeight() / 2f - sz / 2f, getWidth() / 2f + sz / 2f, getHeight() / 2f + sz / 2f); + RLottieDrawable lottieDrawable = enterImageView.getImageReceiver().getLottieAnimation(); + final int startframe = 30, dur = 30; + particles.setVisible(lottieDrawable != null && lottieDrawable.getCurrentFrame() > startframe ? Utilities.clamp01((float) (lottieDrawable.getCurrentFrame() - startframe) / dur) : 0f); + particles.setBounds(AndroidUtilities.rectTmp); + particles.process(); + particles.draw(canvas, 0xFFF5B90E); + invalidate(); + } super.dispatchDraw(canvas); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java index 3f212a850..f430a4671 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java @@ -44,6 +44,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.widget.FrameLayout; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.util.Consumer; @@ -132,6 +133,7 @@ public class RecyclerListView extends RecyclerView { private boolean drawSelectorBehind; private int selectorType = 2; + @Nullable protected Drawable selectorDrawable; protected int selectorPosition; protected View selectorView; @@ -1454,7 +1456,9 @@ public class RecyclerListView extends RecyclerView { } if (selectorPosition != NO_POSITION) { selectorRect.offset(-dx, -dy); - selectorDrawable.setBounds(selectorRect); + if (selectorDrawable != null) { + selectorDrawable.setBounds(selectorRect); + } invalidate(); } else { selectorRect.setEmpty(); @@ -1644,6 +1648,8 @@ public class RecyclerListView extends RecyclerView { } if (selectorType == 8) { selectorDrawable = Theme.createRadSelectorDrawable(color, selectorRadius, 0); + } else if (selectorType == 9) { + selectorDrawable = null; } else if (topBottomSelectorRadius > 0) { selectorDrawable = Theme.createRadSelectorDrawable(color, topBottomSelectorRadius, topBottomSelectorRadius); } else if (selectorRadius > 0 && selectorType != Theme.RIPPLE_MASK_CIRCLE_20DP) { @@ -1653,7 +1659,9 @@ public class RecyclerListView extends RecyclerView { } else { selectorDrawable = Theme.createSelectorDrawable(color, selectorType, selectorRadius); } - selectorDrawable.setCallback(this); + if (selectorDrawable != null) { + selectorDrawable.setCallback(this); + } } public Drawable getSelectorDrawable() { @@ -1972,7 +1980,11 @@ public class RecyclerListView extends RecyclerView { public void invalidateViews() { int count = getChildCount(); for (int a = 0; a < count; a++) { - getChildAt(a).invalidate(); + View child = getChildAt(a); + if (child instanceof Theme.Colorable) { + ((Theme.Colorable) child).updateColors(); + } + child.invalidate(); } } @@ -2015,8 +2027,10 @@ public class RecyclerListView extends RecyclerView { pendingHighlightPosition = null; if (selectorView != null && highlightPosition != NO_POSITION) { positionSelector(highlightPosition, selectorView); - selectorDrawable.setState(new int[]{}); - invalidateDrawable(selectorDrawable); + if (selectorDrawable != null) { + selectorDrawable.setState(new int[]{}); + invalidateDrawable(selectorDrawable); + } selectorView = null; highlightPosition = NO_POSITION; } else { @@ -2542,7 +2556,7 @@ public class RecyclerListView extends RecyclerView { itemsEnterAnimator.dispatchDraw(); } - if (drawSelection && drawSelectorBehind && !selectorRect.isEmpty()) { + if (drawSelection && drawSelectorBehind && !selectorRect.isEmpty() && selectorDrawable != null) { if ((translateSelector == -2 || translateSelector == selectorPosition) && selectorView != null) { int bottomPadding; if (getAdapter() instanceof SelectionAdapter) { @@ -2566,7 +2580,7 @@ public class RecyclerListView extends RecyclerView { canvas.restore(); } super.dispatchDraw(canvas); - if (drawSelection && !drawSelectorBehind && !selectorRect.isEmpty()) { + if (drawSelection && !drawSelectorBehind && !selectorRect.isEmpty() && selectorDrawable != null) { if ((translateSelector == -2 || translateSelector == selectorPosition) && selectorView != null) { int bottomPadding; if (getAdapter() instanceof SelectionAdapter) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java index 33d9ac963..f1ead9e8e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java @@ -49,6 +49,7 @@ public class ReplyMessageLine { private Path color3Path = new Path(); private int switchedCount = 0; private float emojiAlpha = 1f; + private boolean sponsored; private AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable emoji; @@ -152,6 +153,7 @@ public class ReplyMessageLine { final boolean dark = resourcesProvider != null ? resourcesProvider.isDark() : Theme.isCurrentThemeDark(); reversedOut = false; emojiDocumentId = 0; + sponsored = messageObject != null && messageObject.isSponsored(); if (messageObject == null) { hasColor2 = hasColor3 = false; color1 = color2 = color3 = Theme.getColor(Theme.key_chat_inReplyLine, resourcesProvider); @@ -224,9 +226,26 @@ public class ReplyMessageLine { emojiDocumentId = UserObject.getEmojiId(currentUser); } } else if (messageObject.isFromChannel() && currentChat != null) { - colorId = ChatObject.getColorId(currentChat); - if (type == TYPE_LINK) { - emojiDocumentId = ChatObject.getEmojiId(currentChat); + if (currentChat.signature_profiles) { + long did = messageObject.getFromChatId(); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(messageObject.currentAccount).getUser(did); + colorId = UserObject.getColorId(user); + if (type == TYPE_LINK) { + emojiDocumentId = UserObject.getEmojiId(user); + } + } else { + TLRPC.Chat chat = MessagesController.getInstance(messageObject.currentAccount).getChat(-did); + colorId = ChatObject.getColorId(chat); + if (type == TYPE_LINK) { + emojiDocumentId = ChatObject.getEmojiId(chat); + } + } + } else { + colorId = ChatObject.getColorId(currentChat); + if (type == TYPE_LINK) { + emojiDocumentId = ChatObject.getEmojiId(currentChat); + } } } else { colorId = 0; @@ -398,7 +417,7 @@ public class ReplyMessageLine { canvas.save(); clipPath.rewind(); - final int rad = (int) Math.floor(SharedConfig.bubbleRadius / 3f); + final int rad = (int) Math.floor(SharedConfig.bubbleRadius / (sponsored ? 2f : 3f)); rectF.set(rect.left, rect.top, rect.left + Math.max(dp(3), dp(2 * rad)), rect.bottom); clipPath.addRoundRect(rectF, dp(rad), dp(rad), Path.Direction.CW); canvas.clipPath(clipPath); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java index fcc4bd426..f16c09bdb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java @@ -27,10 +27,13 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.text.Layout; +import android.text.Spannable; +import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.StaticLayout; import android.text.TextPaint; import android.text.style.CharacterStyle; +import android.text.style.ForegroundColorSpan; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; @@ -373,6 +376,7 @@ public class ScrimOptions extends Dialog { float x = 0, y = 0; float rtloffset = 0; StaticLayout layout = null; + int layoutOriginalWidth = 0; MessageObject messageObject = cell.getMessageObject(); ArrayList textblocks = null; @@ -384,7 +388,7 @@ public class ScrimOptions extends Dialog { } if (textblocks == null) { x = cell.getTextX(); - y = cell.getTextY(); + y = cell.getTextY() + cell.transitionYOffsetForDrawables; textblocks = messageObject.textLayoutBlocks; rtloffset = messageObject.textXOffset; } @@ -415,6 +419,8 @@ public class ScrimOptions extends Dialog { x += (textblock.isRtl() ? (int) Math.ceil(rtloffset) : 0); y += textblock.padTop + textblock.textYOffset(textblocks, cell.transitionParams); + + layoutOriginalWidth = textblock.originalWidth; } if (layout == null) return; @@ -432,7 +438,7 @@ public class ScrimOptions extends Dialog { realPathBounds = new RectF(); path.computeBounds(realPathBounds, true); - layout = MessageObject.makeStaticLayout(replaceText, layout.getPaint(), layout.getWidth(), 1f, 0f, true); + layout = MessageObject.makeStaticLayout(replaceText, layout.getPaint(), layout.getWidth(), 1f, 0f, false); start = 0; end = replaceText.length(); float l = layout.getWidth(), r = 0; @@ -483,18 +489,29 @@ public class ScrimOptions extends Dialog { paint.setTextSize(layout.getPaint().getTextSize()); paint.setTextAlign(layout.getPaint().getTextAlign()); paint.setTypeface(layout.getPaint().getTypeface()); - final StaticLayout finalLayout; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - StaticLayout.Builder builder = - StaticLayout.Builder.obtain(layout.getText(), 0, layout.getText().length(), paint, layout.getWidth()) - .setLineSpacing(0f, 1f) - .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY) - .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE) - .setAlignment(Layout.Alignment.ALIGN_NORMAL); - finalLayout = builder.build(); - } else { - finalLayout = new StaticLayout(layout.getText(), paint, layout.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); + paint.setLinearText(layout.getPaint().isLinearText()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + paint.setLetterSpacing(layout.getPaint().getLetterSpacing()); + paint.setFontFeatureSettings(layout.getPaint().getFontFeatureSettings()); + paint.setElegantTextHeight(layout.getPaint().isElegantTextHeight()); } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + paint.setFontVariationSettings(layout.getPaint().getFontVariationSettings()); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + paint.setEndHyphenEdit(layout.getPaint().getEndHyphenEdit()); + } + CharSequence text = new SpannableStringBuilder(AnimatedEmojiSpan.cloneSpans(layout.getText(), -1, paint.getFontMetricsInt())); + if (text instanceof Spannable) { + Spannable spannable = (Spannable) text; + if (start > 0) { + spannable.setSpan(new ForegroundColorSpan(0), 0, start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + if (end < spannable.length()) { + spannable.setSpan(new ForegroundColorSpan(0), end, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + final StaticLayout finalLayout = MessageObject.makeStaticLayout(text, paint, layoutOriginalWidth, 1f, messageObject.totalAnimatedEmojiCount >= 4 ? -1 : 0, false); final int finalBlockNum = blockNum; final int[] pos = new int[2]; cell.getLocationOnScreen(pos); @@ -511,6 +528,7 @@ public class ScrimOptions extends Dialog { AndroidUtilities.rectTmp.set(getBounds()); AndroidUtilities.rectTmp.left -= path.getRadius() / 2f; + canvas.save(); canvas.saveLayerAlpha(AndroidUtilities.rectTmp, alpha, Canvas.ALL_SAVE_FLAG); canvas.translate(pos2[0], pos2[1]); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java index 95486c08a..71f631ffd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java @@ -8,16 +8,19 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.os.SystemClock; import android.text.Layout; +import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.TypedValue; @@ -162,7 +165,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { } }; tabsContainer.setOrientation(LinearLayout.HORIZONTAL); - tabsContainer.setPadding(AndroidUtilities.dp(7), 0, AndroidUtilities.dp(7), 0); + tabsContainer.setPadding(dp(7), 0, dp(7), 0); tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); addView(tabsContainer); } @@ -243,9 +246,9 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { public SparseArray removeTabs() { SparseArray views = new SparseArray<>(); - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - views.get(positionToId.get(i), child); + for (int i = 0; i < tabsContainer.getChildCount(); i++) { + View child = tabsContainer.getChildAt(i); + views.put(positionToId.get(i), child); } positionToId.clear(); idToPosition.clear(); @@ -292,13 +295,13 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { info.setSelected(selectedTabId == id); } }; - tab.setWillNotDraw(false); tab.setGravity(Gravity.CENTER); + tab.setTextAlignment(TEXT_ALIGNMENT_CENTER); tab.setBackground(Theme.createSelectorDrawable(Theme.multAlpha(processColor(Theme.getColor(activeTextColorKey, resourcesProvider)), .15f), 3)); tab.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); tab.setSingleLine(true); tab.setTypeface(AndroidUtilities.bold()); - tab.setPadding(AndroidUtilities.dp(16), 0, AndroidUtilities.dp(16), 0); + tab.setPadding(dp(16), 0, dp(16), 0); tab.setOnClickListener(v -> { int position1 = tabsContainer.indexOfChild(v); scrollTo(id, position1, v); @@ -361,7 +364,11 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { tab.setTag(currentPosition == a ? activeTextColorKey : unactiveTextColorKey); tab.setTextColor(processColor(Theme.getColor(currentPosition == a ? activeTextColorKey : unactiveTextColorKey, resourcesProvider))); if (a == 0) { + int prevWidth = tab.getLayoutParams().width; tab.getLayoutParams().width = count == 1 ? LayoutHelper.WRAP_CONTENT : 0; + if (prevWidth != tab.getLayoutParams().width) { + tab.requestLayout(); + } } } } @@ -427,11 +434,13 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(22); + int width = MeasureSpec.getSize(widthMeasureSpec) - dp(22); int count = tabsContainer.getChildCount(); for (int a = 0; a < count; a++) { View child = tabsContainer.getChildAt(a); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) child.getLayoutParams(); + float prevWeight = layoutParams.weight; + int prevWidth = layoutParams.width; if (allTextWidth > width) { layoutParams.weight = 0; layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT; @@ -447,12 +456,20 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { layoutParams.width = LayoutHelper.WRAP_CONTENT; } } + if (Math.abs(prevWeight - layoutParams.weight) > 0.001f || prevWidth != layoutParams.width) { + child.setLayoutParams(layoutParams); + child.requestLayout(); + } } + float weightSum = tabsContainer.getWeightSum(); if (count == 1 || allTextWidth > width) { tabsContainer.setWeightSum(0.0f); } else { tabsContainer.setWeightSum(1.0f); } + if (Math.abs(weightSum - tabsContainer.getWeightSum()) > 0.1f) { + tabsContainer.requestLayout(); + } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @@ -469,13 +486,13 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { int currentScrollX = getScrollX(); int left = child.getLeft(); int width = child.getMeasuredWidth(); - if (left - AndroidUtilities.dp(50) < currentScrollX) { + if (left - dp(50) < currentScrollX) { if (smooth) { - smoothScrollTo(left - AndroidUtilities.dp(50), 0); + smoothScrollTo(left - dp(50), 0); } else { - scrollTo(left - AndroidUtilities.dp(50), 0); + scrollTo(left - dp(50), 0); } - } else if (left + width + AndroidUtilities.dp(21) > currentScrollX + getWidth()) { + } else if (left + width + dp(21) > currentScrollX + getWidth()) { if (smooth) { smoothScrollTo(left + width, 0); } else { @@ -574,7 +591,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView { private int getChildWidth(TextView child) { Layout layout = child.getLayout(); if (layout != null) { - return (int) Math.ceil(layout.getLineWidth(0)) + AndroidUtilities.dp(2); + return (int) Math.ceil(layout.getLineWidth(0)) + dp(2); } else { return child.getMeasuredWidth(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java index 5aae125e7..18adf73f8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java @@ -83,6 +83,13 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie public RecyclerListView channelsSearchListView; public DialogsChannelsAdapter channelsSearchAdapter; + private DefaultItemAnimator botsItemAnimator; + public FrameLayout botsSearchContainer; + public StickerEmptyView botsEmptyView; + private LinearLayoutManager botsSearchLayoutManager; + public RecyclerListView botsSearchListView; + public DialogsBotsAdapter botsSearchAdapter; + private NumberTextView selectedMessagesCountTextView; private boolean isActionModeShowed; private HashMap selectedFiles = new HashMap<>(); @@ -335,6 +342,77 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie } }); + + botsSearchContainer = new FrameLayout(context); + + botsItemAnimator = new DefaultItemAnimator() { + @Override + protected void onMoveAnimationUpdate(RecyclerView.ViewHolder holder) { + super.onMoveAnimationUpdate(holder); + invalidate(); + } + }; + botsItemAnimator.setSupportsChangeAnimations(false); + botsItemAnimator.setDelayAnimations(false); + botsItemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + botsItemAnimator.setDurations(350); + + botsSearchListView = new BlurredRecyclerView(context); + botsSearchListView.setItemAnimator(botsItemAnimator); + botsSearchListView.setPivotY(0); + botsSearchListView.setVerticalScrollBarEnabled(true); + botsSearchListView.setInstantClick(true); + botsSearchListView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT); + botsSearchListView.setLayoutManager(botsSearchLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); + botsSearchListView.setAnimateEmptyView(true, RecyclerListView.EMPTY_VIEW_ANIMATION_TYPE_ALPHA); + + loadingView = new FlickerLoadingView(context); + loadingView.setViewType(1); + botsEmptyView = new StickerEmptyView(context, loadingView, StickerEmptyView.STICKER_TYPE_SEARCH) { + @Override + public void setVisibility(int visibility) { + if (noMediaFiltersSearchView.getTag() != null) { + super.setVisibility(View.GONE); + return; + } + super.setVisibility(visibility); + } + }; + botsEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); + botsEmptyView.subtitle.setVisibility(View.GONE); + botsEmptyView.setVisibility(View.GONE); + botsEmptyView.addView(loadingView, 0); + botsEmptyView.showProgress(true, false); + botsSearchContainer.addView(botsEmptyView); + botsSearchContainer.addView(botsSearchListView); + botsSearchListView.setEmptyView(botsEmptyView); + botsSearchListView.setAdapter(botsSearchAdapter = new DialogsBotsAdapter(botsSearchListView, context, currentAccount, folderId, false, null) { + @Override + public void update(boolean animated) { + super.update(animated); + botsEmptyView.showProgress(loadingMessages || loadingBots || searchMessages == null || !searchMessages.isEmpty(), animated); + botsEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); + botsEmptyView.subtitle.setVisibility(View.GONE); + } + + @Override + protected void hideKeyboard() { + AndroidUtilities.hideKeyboard(fragment.getParentActivity().getCurrentFocus()); + } + }); + botsSearchListView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { + AndroidUtilities.hideKeyboard(fragment.getParentActivity().getCurrentFocus()); + } + } + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + botsSearchAdapter.checkBottom(); + } + }); + itemsEnterAnimator = new RecyclerItemsEnterAnimator(searchListView, true); setAdapter(viewPagerAdapter = new ViewPagerAdapter()); @@ -399,6 +477,10 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie MessagesController.getInstance(currentAccount).getChannelRecommendations(0); channelsSearchAdapter.search(query); channelsEmptyView.setKeyboardHeight(keyboardSize, false); + } else if (view == botsSearchContainer) { +// MessagesController.getInstance(currentAccount).getChannelRecommendations(0); + botsSearchAdapter.search(query); + botsEmptyView.setKeyboardHeight(keyboardSize, false); } else if (view == searchContainer) { if (dialogId == 0 && minDate == 0 && maxDate == 0 || forumDialogId != 0) { lastSearchScrolledToTop = false; @@ -869,6 +951,9 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie if (channelsSearchLayoutManager != null) { channelsSearchLayoutManager.scrollToPositionWithOffset(0, 0); } + if (botsSearchLayoutManager != null) { + botsSearchLayoutManager.scrollToPositionWithOffset(0, 0); + } viewsByType.clear(); } @@ -967,11 +1052,15 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.channelRecommendationsLoaded); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.dialogDeleted); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.dialogsNeedReload); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.reloadWebappsHints); attached = true; if (channelsSearchAdapter != null) { channelsSearchAdapter.update(false); } + if (botsSearchAdapter != null) { + botsSearchAdapter.update(false); + } } @Override @@ -981,6 +1070,7 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.channelRecommendationsLoaded); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.dialogDeleted); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.dialogsNeedReload); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.reloadWebappsHints); } @Override @@ -992,6 +1082,8 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie } else if (id == NotificationCenter.dialogDeleted || id == NotificationCenter.dialogsNeedReload) { channelsSearchAdapter.updateMyChannels(); channelsSearchAdapter.update(true); + } else if (id == NotificationCenter.reloadWebappsHints) { + botsSearchAdapter.update(true); } } @@ -1007,7 +1099,7 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie } public void showDownloads() { - setPosition(3); + setPosition(4); } public int getPositionForType(int initialSearchType) { @@ -1027,6 +1119,7 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie private final static int CHANNELS_TYPE = 1; private final static int DOWNLOADS_TYPE = 2; private final static int FILTER_TYPE = 3; + private final static int BOTS_TYPE = 4; public ViewPagerAdapter() { updateItems(); @@ -1036,6 +1129,7 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie items.clear(); items.add(new Item(DIALOGS_TYPE)); items.add(new Item(CHANNELS_TYPE)); + items.add(new Item(BOTS_TYPE)); if (!showOnlyDialogsAdapter) { Item item = new Item(FILTER_TYPE); item.filterIndex = 0; @@ -1064,6 +1158,8 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie return LocaleController.getString(R.string.SearchAllChatsShort); } else if (items.get(position).type == CHANNELS_TYPE) { return LocaleController.getString(R.string.ChannelsTab); + } else if (items.get(position).type == BOTS_TYPE) { + return LocaleController.getString(R.string.AppsTab); } else if (items.get(position).type == DOWNLOADS_TYPE) { return LocaleController.getString(R.string.DownloadsTabs); } else { @@ -1082,6 +1178,8 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie return searchContainer; } else if (viewType == 3) { return channelsSearchContainer; + } else if (viewType == 4) { + return botsSearchContainer; } else if (viewType == 2) { downloadsContainer = new SearchDownloadsContainer(parent, currentAccount); downloadsContainer.recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() { @@ -1116,6 +1214,9 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie if (items.get(position).type == CHANNELS_TYPE) { return 3; } + if (items.get(position).type == BOTS_TYPE) { + return 4; + } if (items.get(position).type == DOWNLOADS_TYPE) { return 2; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java index 304c23279..e73d4e1c8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java @@ -16,12 +16,12 @@ import org.telegram.ui.ActionBar.Theme; @SuppressLint("ViewConstructor") public class SelectSendAsPremiumHintBulletinLayout extends Bulletin.MultiLineLayout { - public SelectSendAsPremiumHintBulletinLayout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider, Runnable callback) { + public SelectSendAsPremiumHintBulletinLayout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider, boolean channels, Runnable callback) { super(context, resourcesProvider); imageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.msg_premium_prolfilestar)); imageView.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_undo_infoColor), PorterDuff.Mode.SRC_IN)); - textView.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.SelectSendAsPeerPremiumHint))); + textView.setText(AndroidUtilities.replaceTags(LocaleController.getString(channels ? R.string.SelectSendAsPeerPremiumHint : R.string.SelectSendAsPeerPremiumHint))); Bulletin.UndoButton button = new Bulletin.UndoButton(context, true, resourcesProvider); button.setText(LocaleController.getString(R.string.SelectSendAsPeerPremiumOpen)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java index 6f7b11bea..646ef1bd3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java @@ -66,6 +66,7 @@ public class SenderSelectPopup extends ActionBarPopupWindow { private TLRPC.ChatFull chatFull; private TLRPC.TL_channels_sendAsPeers sendAsPeers; + private final int currentAccount; private FrameLayout scrimPopupContainerLayout; private View headerShadow; @@ -92,6 +93,7 @@ public class SenderSelectPopup extends ActionBarPopupWindow { this.chatFull = chatFull; this.sendAsPeers = sendAsPeers; + this.currentAccount = parentFragment == null ? UserConfig.selectedAccount : parentFragment.getCurrentAccount(); scrimPopupContainerLayout = new BackButtonFrameLayout(context); scrimPopupContainerLayout.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); @@ -275,7 +277,9 @@ public class SenderSelectPopup extends ActionBarPopupWindow { windowManager.addView(bulletinContainer, params); } - Bulletin bulletin = Bulletin.make(bulletinContainer, new SelectSendAsPremiumHintBulletinLayout(context, parentFragment.themeDelegate, ()->{ + final TLRPC.Chat chat = chatFull == null ? null : MessagesController.getInstance(currentAccount).getChat(chatFull.id); + final boolean toChannel = ChatObject.isChannelAndNotMegaGroup(chat); + Bulletin bulletin = Bulletin.make(bulletinContainer, new SelectSendAsPremiumHintBulletinLayout(context, parentFragment.themeDelegate, toChannel, () -> { if (parentFragment != null) { parentFragment.presentFragment(new PremiumPreviewFragment("select_sender")); dismiss(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java new file mode 100644 index 000000000..8881fd796 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java @@ -0,0 +1,48 @@ +package org.telegram.ui.Components; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; + +import android.graphics.Canvas; +import android.view.View; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.Utilities; + +public class Shaker { + + private final Runnable invalidate; + private final long start = System.currentTimeMillis(); + + private final float r, sx, sy; + + public Shaker() { + this((Runnable) null); + } + public Shaker(View view) { + this(view::invalidate); + } + public Shaker(Runnable invalidate) { + this.invalidate = invalidate; + r = lerp(5f, 9f, Utilities.clamp01(Utilities.fastRandom.nextFloat())); + sx = lerp(2.5f, 5f, Utilities.clamp01(Utilities.fastRandom.nextFloat())); + sy = lerp(2.5f, 5.2f, Utilities.clamp01(Utilities.fastRandom.nextFloat())); + } + + public void concat(Canvas canvas, float alpha) { + final float t = (System.currentTimeMillis() - start) / 1000f; + + canvas.rotate( + (float) Math.sin(t * r * Math.PI) * 1 * alpha + ); + canvas.translate( + (float) Math.cos(t * sx * Math.PI) * dp(.5f) * alpha, + (float) Math.sin(t * sy * Math.PI) * dp(.5f) * alpha + ); + + if (alpha > 0 && invalidate != null) { + invalidate.run(); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java index edad4f68c..a722208cc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java @@ -107,7 +107,6 @@ import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ActionBar.ThemeDescription; import org.telegram.ui.Adapters.SearchAdapterHelper; -import org.telegram.ui.ArticleViewer; import org.telegram.ui.CalendarActivity; import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.ContextLinkCell; @@ -130,6 +129,7 @@ import org.telegram.ui.Components.Forum.ForumUtilities; import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.DialogsActivity; +import org.telegram.ui.LaunchActivity; import org.telegram.ui.PhotoViewer; import org.telegram.ui.PremiumPreviewFragment; import org.telegram.ui.ProfileActivity; @@ -137,6 +137,7 @@ import org.telegram.ui.Stories.StoriesController; import org.telegram.ui.Stories.StoriesListPlaceProvider; import org.telegram.ui.Stories.UserListPoller; import org.telegram.ui.Stories.ViewsForPeerStoriesRequester; +import org.telegram.ui.Stories.bots.BotPreviewsEditContainer; import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import org.telegram.ui.Stories.recorder.StoryRecorder; import org.telegram.ui.TopicsFragment; @@ -163,6 +164,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public static final int TAB_RECOMMENDED_CHANNELS = 10; public static final int TAB_SAVED_DIALOGS = 11; public static final int TAB_SAVED_MESSAGES = 12; + public static final int TAB_BOT_PREVIEWS = 13; public static final int FILTER_PHOTOS_AND_VIDEOS = 0; public static final int FILTER_PHOTOS_ONLY = 1; @@ -212,6 +214,9 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public boolean checkPinchToZoom(MotionEvent ev) { final int selectedType = mediaPages[0].selectedType; + if (selectedType == TAB_BOT_PREVIEWS && botPreviewsContainer != null) { + return botPreviewsContainer.checkPinchToZoom(ev); + } if (selectedType != TAB_PHOTOVIDEO && selectedType != TAB_STORIES && selectedType != TAB_ARCHIVED_STORIES || getParent() == null) { return false; } @@ -362,7 +367,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } public boolean isSwipeBackEnabled() { - if (canEditStories() && getClosestTab() == TAB_STORIES && isActionModeShown()) { + if (canEditStories() && (getClosestTab() == TAB_STORIES || getClosestTab() == TAB_BOT_PREVIEWS) && isActionModeShown()) { return false; } return !photoVideoChangeColumnsAnimation && !tabsAnimationInProgress; @@ -424,7 +429,12 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (profileActivity == null) return; if (profileActivity.getMessagesController().getStoriesController().hasStories(dialogCell.getDialogId())) { profileActivity.getOrCreateStoryViewer().doOnAnimationReady(onDone); - profileActivity.getOrCreateStoryViewer().open(profileActivity.getContext(), dialogCell.getDialogId(), StoriesListPlaceProvider.of((RecyclerListView) dialogCell.getParent()).addBottomClip(profileActivity instanceof ProfileActivity && ((ProfileActivity) profileActivity).myProfile ? dp(68) : 0)); + profileActivity.getOrCreateStoryViewer().open( + profileActivity.getContext(), + dialogCell.getDialogId(), + StoriesListPlaceProvider.of((RecyclerListView) dialogCell.getParent()) + .addBottomClip(profileActivity instanceof ProfileActivity && ((ProfileActivity) profileActivity).myProfile ? dp(68) : 0) + ); } } @@ -503,9 +513,9 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return 0; } float alpha = 0; - if (mediaPages[1] != null && (mediaPages[1].selectedType == TAB_PHOTOVIDEO || mediaPages[1].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[1].selectedType == TAB_ARCHIVED_STORIES || mediaPages[1].selectedType == TAB_SAVED_DIALOGS)) + if (mediaPages[1] != null && (mediaPages[1].selectedType == TAB_PHOTOVIDEO || mediaPages[1].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[1].selectedType == TAB_ARCHIVED_STORIES || mediaPages[1].selectedType == TAB_SAVED_DIALOGS || mediaPages[1].selectedType == TAB_BOT_PREVIEWS)) alpha += progress; - if (mediaPages[0] != null && (mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS)) + if (mediaPages[0] != null && (mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS || mediaPages[0].selectedType == TAB_BOT_PREVIEWS)) alpha += 1f - progress; return alpha; } @@ -603,6 +613,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter private SavedDialogsAdapter savedDialogsAdapter; private SavedMessagesSearchAdapter savedMessagesSearchAdapter; private ChatActivityContainer savedMessagesContainer; + private BotPreviewsEditContainer botPreviewsContainer; private ChatUsersAdapter chatUsersAdapter; private ItemTouchHelper storiesReorder; private StoriesAdapter storiesAdapter; @@ -679,8 +690,6 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter private float photoVideoChangeColumnsProgress; private boolean photoVideoChangeColumnsAnimation; private int changeColumnsTab; - private int animationSupportingSortedCellsOffset; - private ArrayList animationSupportingSortedCells = new ArrayList<>(); private int animateToColumnsCount; private static final Interpolator interpolator = t -> { @@ -698,6 +707,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter private int[] mediaMergeCount = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; private int[] lastMediaCount = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; private int[] lastLoadMediaCount = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + public boolean hasPreviews; public boolean hasSavedMessages; private boolean checkedHasSavedMessages; private SharedMediaData[] sharedMediaData; @@ -721,7 +731,6 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (parentFragment != null && dialogId == parentFragment.getUserConfig().getClientUserId() && topicId == 0 && parentFragment.getMessagesController().getSavedMessagesController().hasDialogs()) { return true; } - // TODO: stories? return false; } @@ -856,7 +865,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter type = MediaDataController.MEDIA_VIDEOS_ONLY; } } - parentFragment.getMediaDataController().loadMedia(did, lastLoadMediaCount[a] == -1 ? 30 : 20, 0, 0, type, topicId,2, parentFragment.getClassGuid(), 0, null, null); + parentFragment.getMediaDataController().loadMedia(did, lastLoadMediaCount[a] == -1 ? 30 : 20, 0, 0, type, topicId,1, parentFragment.getClassGuid(), 0, null, null); lastLoadMediaCount[a] = mediaCount[a]; } } @@ -1444,6 +1453,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter globalGradientView = new FlickerLoadingView(context); globalGradientView.setIsSingleCell(true); + TLRPC.User user = parent.getMessagesController().getUser(did); sharedMediaPreloader = preloader; this.delegate = delegate; int[] mediaCount = preloader.getLastMediaCount(); @@ -1453,6 +1463,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter this.initialTab = initialTab; } else if (initialTab == TAB_SAVED_DIALOGS) { this.initialTab = initialTab; + } else if (user != null && user.bot && user.bot_has_main_app && user.bot_can_edit) { + this.initialTab = TAB_BOT_PREVIEWS; + } else if (userInfo != null && userInfo.bot_info != null && userInfo.bot_info.has_preview_medias) { + this.initialTab = TAB_STORIES; } else if (userInfo != null && userInfo.stories_pinned_available || chatInfo != null && chatInfo.stories_pinned_available || isStoriesView()) { this.initialTab = getInitialTab(); } else if (initialTab != -1 && topicId == 0) { @@ -1698,6 +1712,34 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter photoVideoOptionsItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { + int tab = getClosestTab(); + boolean isStories = tab == TAB_STORIES || tab == TAB_ARCHIVED_STORIES; + + final int currentAccount = profileActivity.getCurrentAccount(); + final TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + if (tab == TAB_BOT_PREVIEWS && user != null && user.bot && user.bot_has_main_app && user.bot_can_edit && botPreviewsContainer != null) { + ItemOptions.makeOptions(profileActivity, photoVideoOptionsItem) + .addIf(botPreviewsContainer.getItemsCount() < profileActivity.getMessagesController().botPreviewMediasMax, R.drawable.msg_addbot, getString(R.string.ProfileBotAddPreview), () -> { + StoryRecorder.getInstance(profileActivity.getParentActivity(), profileActivity.getCurrentAccount()).openBot(dialog_id, botPreviewsContainer.getCurrentLang(), null); + }) + .addIf(botPreviewsContainer.getItemsCount() > 1 && !botPreviewsContainer.isSelectedAll(), R.drawable.tabs_reorder, getString(R.string.ProfileBotReorder), () -> { + botPreviewsContainer.selectAll(); + }) + .addIf(botPreviewsContainer.getItemsCount() > 0, R.drawable.msg_select, getString(botPreviewsContainer.isSelectedAll() ? R.string.ProfileBotUnSelect : R.string.ProfileBotSelect), () -> { + if (botPreviewsContainer.isSelectedAll()) { + botPreviewsContainer.unselectAll(); + } else { + botPreviewsContainer.selectAll(); + } + }) + .addIf(!TextUtils.isEmpty(botPreviewsContainer.getCurrentLang()), R.drawable.msg_delete, LocaleController.formatString(R.string.ProfileBotRemoveLang, TranslateAlert2.languageName(botPreviewsContainer.getCurrentLang())), true, () -> { + botPreviewsContainer.deleteLang(botPreviewsContainer.getCurrentLang()); + }) + .translate(0, -dp(52)) + .setDimAlpha(0) + .show(); + return; + } if (getSelectedTab() == TAB_SAVED_DIALOGS) { ItemOptions.makeOptions(profileActivity, photoVideoOptionsItem) .add(R.drawable.msg_discussion, getString(R.string.SavedViewAsMessages), () -> { @@ -1747,8 +1789,6 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } }; - int tab = getClosestTab(); - boolean isStories = tab == TAB_STORIES || tab == TAB_ARCHIVED_STORIES; mediaZoomInItem = new ActionBarMenuSubItem(context, true, false, resourcesProvider); mediaZoomOutItem = new ActionBarMenuSubItem(context, false, false, resourcesProvider); @@ -1774,8 +1814,8 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter mediaZoomOutItem.setAlpha(0.5f); } - boolean hasDifferentTypes = isStories || (sharedMediaData[0].hasPhotos && sharedMediaData[0].hasVideos) || !sharedMediaData[0].endReached[0] || !sharedMediaData[0].endReached[1] || !sharedMediaData[0].startReached; - if (!DialogObject.isEncryptedDialog(dialog_id)) { + final boolean hasDifferentTypes = isStories || (sharedMediaData[0].hasPhotos && sharedMediaData[0].hasVideos) || !sharedMediaData[0].endReached[0] || !sharedMediaData[0].endReached[1] || !sharedMediaData[0].startReached; + if (!DialogObject.isEncryptedDialog(dialog_id) && !(user != null && user.bot)) { ActionBarMenuSubItem calendarItem = new ActionBarMenuSubItem(context, false, false, resourcesProvider); calendarItem.setTextAndIcon(getString("Calendar", R.string.Calendar), R.drawable.msg_calendar2); popupLayout.addView(calendarItem); @@ -2118,6 +2158,124 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter }; animationSupportingArchivedStoriesAdapter = new StoriesAdapter(context, true); linksAdapter = new SharedLinksAdapter(context); + if (isBot()) { + botPreviewsContainer = new BotPreviewsEditContainer(context, profileActivity, dialog_id) { + @Override + public void onSelectedTabChanged() { + SharedMediaLayout.this.onSelectedTabChanged(); + } + @Override + protected boolean isSelected(MessageObject messageObject) { + return selectedFiles[messageObject.getDialogId() == dialog_id ? 0 : 1].indexOfKey(messageObject.getId()) >= 0; + } + @Override + protected boolean select(MessageObject messageObject) { + if (messageObject == null) return false; + final int loadIndex = messageObject.getDialogId() == dialog_id ? 0 : 1; + if (selectedFiles[loadIndex].indexOfKey(messageObject.getId()) < 0) { + if (selectedFiles[0].size() + selectedFiles[1].size() >= 100) { + return false; + } + selectedFiles[loadIndex].put(messageObject.getId(), messageObject); + if (!messageObject.canDeleteMessage(false, null)) { + cantDeleteMessagesCount++; + } + if (!isActionModeShowed) { + AndroidUtilities.hideKeyboard(profileActivity.getParentActivity().getCurrentFocus()); + deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); + if (gotoItem != null) { + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + if (pinItem != null) { + pinItem.setVisibility(View.GONE); + } + if (unpinItem != null) { + unpinItem.setVisibility(View.GONE); + } + if (forwardItem != null) { + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), false); + AnimatorSet animatorSet = new AnimatorSet(); + ArrayList animators = new ArrayList<>(); + for (int i = 0; i < actionModeViews.size(); i++) { + View view2 = actionModeViews.get(i); + AndroidUtilities.clearDrawableAnimation(view2); + animators.add(ObjectAnimator.ofFloat(view2, View.SCALE_Y, 0.1f, 1.0f)); + } + animatorSet.playTogether(animators); + animatorSet.setDuration(250); + animatorSet.start(); + scrolling = false; + showActionMode(true); + } else { + selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), true); + } + updateSelection(true); + return true; + } + return false; + } + @Override + protected boolean unselect(MessageObject messageObject) { + if (messageObject == null) return false; + final int loadIndex = messageObject.getDialogId() == dialog_id ? 0 : 1; + if (selectedFiles[loadIndex].indexOfKey(messageObject.getId()) >= 0) { + selectedFiles[loadIndex].remove(messageObject.getId()); + if (!messageObject.canDeleteMessage(false, null)) { + cantDeleteMessagesCount--; + } + if (selectedFiles[0].size() == 0 && selectedFiles[1].size() == 0) { + AndroidUtilities.hideKeyboard(profileActivity.getParentActivity().getCurrentFocus()); + selectedFiles[0].clear(); + selectedFiles[1].clear(); + deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); + if (gotoItem != null) { + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + if (pinItem != null) { + pinItem.setVisibility(View.GONE); + } + if (unpinItem != null) { + unpinItem.setVisibility(View.GONE); + } + if (forwardItem != null) { + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + AnimatorSet animatorSet = new AnimatorSet(); + ArrayList animators = new ArrayList<>(); + for (int i = 0; i < actionModeViews.size(); i++) { + View view2 = actionModeViews.get(i); + AndroidUtilities.clearDrawableAnimation(view2); + animators.add(ObjectAnimator.ofFloat(view2, View.SCALE_Y, 1.0f, 0.1f)); + } + animatorSet.playTogether(animators); + animatorSet.setDuration(250); + animatorSet.start(); + scrolling = false; + AndroidUtilities.runOnUIThread(() -> { + if (isActionModeShowed) { + showActionMode(false); + } + }, 20); + } else { + selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), true); + } + updateSelection(true); + return true; + } + return false; + } + @Override + protected boolean isActionModeShowed() { + return isActionModeShowed; + } + @Override + public int getStartedTrackingX() { + return startedTrackingX; + } + }; + } setWillNotDraw(false); @@ -2280,12 +2438,92 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter profileActivity.getMessagesController().getMainSettings().edit().putBoolean("story_keep", true).apply(); openStoryRecorder(); }); - mediaPages[a].listView = new InternalListView(context) { + mediaPages[a].listView = new SharedMediaListView(context) { - final HashSet excludeDrawViews = new HashSet<>(); - final ArrayList drawingViews = new ArrayList<>(); - final ArrayList drawingViews2 = new ArrayList<>(); - final ArrayList drawingViews3 = new ArrayList<>(); + @Override + public RecyclerListView.FastScrollAdapter getMovingAdapter() { + if (changeColumnsTab == TAB_STORIES) { + return storiesAdapter; + } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { + return archivedStoriesAdapter; + } else { + return photoVideoAdapter; + } + } + + @Override + public RecyclerListView.FastScrollAdapter getSupportingAdapter() { + if (changeColumnsTab == TAB_STORIES) { + return animationSupportingStoriesAdapter; + } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { + return animationSupportingArchivedStoriesAdapter; + } else { + return animationSupportingPhotoVideoAdapter; + } + } + + @Override + public int getColumnsCount() { + if (changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES) { + return mediaColumnsCount[1]; + } else { + return mediaColumnsCount[0]; + } + } + + @Override + public int getAnimateToColumnsCount() { + return animateToColumnsCount; + } + + @Override + public boolean isChangeColumnsAnimation() { + return photoVideoChangeColumnsAnimation; + } + + @Override + public float getChangeColumnsProgress() { + return photoVideoChangeColumnsProgress; + } + + @Override + public boolean isThisListView() { + return this == mediaPage.listView; + } + + @Override + public SparseArray getMessageAlphaEnter() { + return messageAlphaEnter; + } + + @Override + public boolean isStories() { + return changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES; + } + + @Override + public InternalListView getSupportingListView() { + return mediaPage.animationSupportingListView; + } + + @Override + public void checkHighlightCell(SharedPhotoVideoCell2 cell) { + if (cell.getMessageId() == mediaPage.highlightMessageId && cell.imageReceiver.hasBitmapImage()) { + if (!mediaPage.highlightAnimation) { + mediaPage.highlightProgress = 0; + mediaPage.highlightAnimation = true; + } + float p = 1f; + if (mediaPage.highlightProgress < 0.3f) { + p = mediaPage.highlightProgress / 0.3f; + } else if (mediaPage.highlightProgress > 0.7f) { + p = (1f - mediaPage.highlightProgress) / 0.3f; + } + cell.setHighlightProgress(p); + } else { + cell.setHighlightProgress(0); + } + } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { @@ -2296,12 +2534,6 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } } - private TextPaint archivedHintPaint; - private StaticLayout archivedHintLayout; - private float archivedHintLayoutWidth, archivedHintLayoutLeft; - - UserListPoller poller; - float lastY, startY; @Override public boolean dispatchTouchEvent(MotionEvent event) { @@ -2321,6 +2553,17 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return super.dispatchTouchEvent(event); } + @Override + protected void emptyViewUpdated(boolean shown, boolean animated) { + if (getAdapter() == storiesAdapter) { + if (animated) { + mediaPage.buttonView.animate().alpha(shown ? 0f : 1f).start(); + } else { + mediaPage.buttonView.setAlpha(shown ? 0f : 1f); + } + } + } + @Override protected void dispatchDraw(Canvas canvas) { if ((getAdapter() == archivedStoriesAdapter || getAdapter() == storiesAdapter) && getChildCount() > 0) { @@ -2366,291 +2609,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter mediaPage.buttonView.setTranslationY(-dp(72)); } } - SharedPhotoVideoAdapter movingAdapter, supportingMovingAdapter; - int ci = 0; - if (changeColumnsTab == TAB_STORIES) { - movingAdapter = storiesAdapter; - supportingMovingAdapter = animationSupportingStoriesAdapter; - ci = 1; - } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { - movingAdapter = archivedStoriesAdapter; - supportingMovingAdapter = animationSupportingArchivedStoriesAdapter; - ci = 1; - } else { - movingAdapter = photoVideoAdapter; - supportingMovingAdapter = animationSupportingPhotoVideoAdapter; - } - if (this == mediaPage.listView && getAdapter() == movingAdapter) { - int firstVisibleItemPosition = 0; - int firstVisibleItemPosition2 = 0; - int lastVisibleItemPosition = 0; - int lastVisibleItemPosition2 = 0; - - int rowsOffset = 0; - int columnsOffset = 0; - float minY = getMeasuredHeight(); - if (photoVideoChangeColumnsAnimation) { - int max = -1; - int min = -1; - for (int i = 0; i < mediaPage.listView.getChildCount(); i++) { - int p = mediaPage.listView.getChildAdapterPosition(mediaPage.listView.getChildAt(i)); - if (p >= 0 && (p > max || max == -1)) { - max = p; - } - if (p >= 0 && (p < min || min == -1)) { - min = p; - } - } - firstVisibleItemPosition = min; - lastVisibleItemPosition = max; - - max = -1; - min = -1; - for (int i = 0; i < mediaPage.animationSupportingListView.getChildCount(); i++) { - int p = mediaPage.animationSupportingListView.getChildAdapterPosition(mediaPage.animationSupportingListView.getChildAt(i)); - if (p >= 0 && (p > max || max == -1)) { - max = p; - } - if (p >= 0 && (p < min || min == -1)) { - min = p; - } - } - - firstVisibleItemPosition2 = min; - lastVisibleItemPosition2 = max; - - if (firstVisibleItemPosition >= 0 && firstVisibleItemPosition2 >= 0 && pinchCenterPosition >= 0) { - int rowsCount1 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) mediaColumnsCount[ci]); - int rowsCount2 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) animateToColumnsCount); - rowsOffset = ((pinchCenterPosition) / animateToColumnsCount - firstVisibleItemPosition2 / animateToColumnsCount) - ((pinchCenterPosition - movingAdapter.getTopOffset()) / mediaColumnsCount[ci] - firstVisibleItemPosition / mediaColumnsCount[ci]); - if ((firstVisibleItemPosition / mediaColumnsCount[ci] - rowsOffset < 0 && animateToColumnsCount < mediaColumnsCount[ci]) || (firstVisibleItemPosition2 / animateToColumnsCount + rowsOffset < 0 && animateToColumnsCount > mediaColumnsCount[ci])) { - rowsOffset = 0; - } - if ((lastVisibleItemPosition2 / mediaColumnsCount[ci] + rowsOffset >= rowsCount1 && animateToColumnsCount > mediaColumnsCount[ci]) || (lastVisibleItemPosition / animateToColumnsCount - rowsOffset >= rowsCount2 && animateToColumnsCount < mediaColumnsCount[ci])) { - rowsOffset = 0; - } - - float k = (pinchCenterPosition % mediaColumnsCount[ci]) / (float) (mediaColumnsCount[ci] - 1); - columnsOffset = (int) ((animateToColumnsCount - mediaColumnsCount[ci]) * k); - } - animationSupportingSortedCells.clear(); - excludeDrawViews.clear(); - drawingViews.clear(); - drawingViews2.clear(); - drawingViews3.clear(); - animationSupportingSortedCellsOffset = 0; - for (int i = 0; i < mediaPage.animationSupportingListView.getChildCount(); i++) { - View child = mediaPage.animationSupportingListView.getChildAt(i); - if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { - continue; - } - if (child instanceof SharedPhotoVideoCell2) { - animationSupportingSortedCells.add((SharedPhotoVideoCell2) child); - } else if (child instanceof TextView) { - animationSupportingSortedCellsOffset++; - } - } - drawingViews.addAll(animationSupportingSortedCells); - FastScroll fastScroll = getFastScroll(); - if (fastScroll != null && fastScroll.getTag() != null) { - float p1 = movingAdapter.getScrollProgress(mediaPage.listView); - float p2 = supportingMovingAdapter.getScrollProgress(mediaPage.animationSupportingListView); - float a1 = movingAdapter.fastScrollIsVisible(mediaPage.listView) ? 1f : 0f; - float a2 = supportingMovingAdapter.fastScrollIsVisible(mediaPage.animationSupportingListView) ? 1f : 0f; - fastScroll.setProgress(p1 * (1f - photoVideoChangeColumnsProgress) + p2 * photoVideoChangeColumnsProgress); - fastScroll.setVisibilityAlpha(a1 * (1f - photoVideoChangeColumnsProgress) + a2 * photoVideoChangeColumnsProgress); - } - } - - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { - if (child instanceof SharedPhotoVideoCell2) { - SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); - cell.setCrossfadeView(null, 0, 0); - cell.setTranslationX(0); - cell.setTranslationY(0); - cell.setImageScale(1f, !photoVideoChangeColumnsAnimation); - } - continue; - } - if (child instanceof SharedPhotoVideoCell2) { - SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); - - if (cell.getMessageId() == mediaPage.highlightMessageId && cell.imageReceiver.hasBitmapImage()) { - if (!mediaPage.highlightAnimation) { - mediaPage.highlightProgress = 0; - mediaPage.highlightAnimation = true; - } - float p = 1f; - if (mediaPage.highlightProgress < 0.3f) { - p = mediaPage.highlightProgress / 0.3f; - } else if (mediaPage.highlightProgress > 0.7f) { - p = (1f - mediaPage.highlightProgress) / 0.3f; - } - cell.setHighlightProgress(p); - } else { - cell.setHighlightProgress(0); - } - - MessageObject messageObject = cell.getMessageObject(); - float alpha = 1f; - if (messageObject != null && messageAlphaEnter.get(messageObject.getId(), null) != null) { - alpha = messageAlphaEnter.get(messageObject.getId(), 1f); - } - cell.setImageAlpha(alpha, !photoVideoChangeColumnsAnimation); - - boolean inAnimation = false; - if (photoVideoChangeColumnsAnimation) { - float fromScale = 1f; - - int currentColumn = (((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) % mediaColumnsCount[ci] + columnsOffset; - int currentRow = ((((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / mediaColumnsCount[ci] + rowsOffset; - int toIndex = currentRow * animateToColumnsCount + currentColumn + animationSupportingSortedCellsOffset; - if (currentColumn >= 0 && currentColumn < animateToColumnsCount && toIndex >= 0 && toIndex < animationSupportingSortedCells.size()) { - inAnimation = true; - float toScale = (animationSupportingSortedCells.get(toIndex).getMeasuredWidth() - AndroidUtilities.dpf2(2)) / (float) (cell.getMeasuredWidth() - AndroidUtilities.dpf2(2)); - float scale = fromScale * (1f - photoVideoChangeColumnsProgress) + toScale * photoVideoChangeColumnsProgress; - float fromX = cell.getLeft(); - float fromY = cell.getTop(); - float toX = animationSupportingSortedCells.get(toIndex).getLeft(); - float toY = animationSupportingSortedCells.get(toIndex).getTop(); - - cell.setPivotX(0); - cell.setPivotY(0); - cell.setImageScale(scale, !photoVideoChangeColumnsAnimation); - cell.setTranslationX((toX - fromX) * photoVideoChangeColumnsProgress); - cell.setTranslationY((toY - fromY) * photoVideoChangeColumnsProgress); - cell.setCrossfadeView(animationSupportingSortedCells.get(toIndex), photoVideoChangeColumnsProgress, animateToColumnsCount); - excludeDrawViews.add(animationSupportingSortedCells.get(toIndex)); - drawingViews3.add(cell); - canvas.save(); - canvas.translate(cell.getX(), cell.getY()); - cell.draw(canvas); - canvas.restore(); - - if (cell.getY() < minY) { - minY = cell.getY(); - } - } - } - - if (!inAnimation) { - if (photoVideoChangeColumnsAnimation) { - drawingViews2.add(cell); - } - cell.setCrossfadeView(null, 0, 0); - cell.setTranslationX(0); - cell.setTranslationY(0); - cell.setImageScale(1f, !photoVideoChangeColumnsAnimation); - } - } - } - - if (photoVideoChangeColumnsAnimation && !drawingViews.isEmpty()) { - float toScale = animateToColumnsCount / (float) mediaColumnsCount[ci]; - float scale = toScale * (1f - photoVideoChangeColumnsProgress) + photoVideoChangeColumnsProgress; - - float sizeToScale = ((getMeasuredWidth() / (float) mediaColumnsCount[ci]) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) animateToColumnsCount) - AndroidUtilities.dpf2(2)); - float scaleSize = sizeToScale * (1f - photoVideoChangeColumnsProgress) + photoVideoChangeColumnsProgress; - - float fromSize = getMeasuredWidth() / (float) mediaColumnsCount[ci]; - float toSize = (getMeasuredWidth() / (float) animateToColumnsCount); - float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) animateToColumnsCount)) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); - if (changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES) { - size1 *= 1.25f; - } - - for (int i = 0; i < drawingViews.size(); i++) { - SharedPhotoVideoCell2 view = drawingViews.get(i); - if (excludeDrawViews.contains(view)) { - continue; - } - view.setCrossfadeView(null, 0, 0); - int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % animateToColumnsCount; - int toColumn = fromColumn - columnsOffset; - int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition2) / animateToColumnsCount; - currentRow -= rowsOffset; - - canvas.save(); - canvas.translate(toColumn * fromSize * (1f - photoVideoChangeColumnsProgress) + toSize * fromColumn * photoVideoChangeColumnsProgress, minY + size1 * currentRow); - view.setImageScale(scaleSize, !photoVideoChangeColumnsAnimation); - if (toColumn < mediaColumnsCount[ci]) { - canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) (photoVideoChangeColumnsProgress * 255), Canvas.ALL_SAVE_FLAG); - view.draw(canvas); - canvas.restore(); - } else { - view.draw(canvas); - } - canvas.restore(); - } - } - - super.dispatchDraw(canvas); - - if (photoVideoChangeColumnsAnimation) { - float toScale = mediaColumnsCount[ci] / (float) animateToColumnsCount; - float scale = toScale * photoVideoChangeColumnsProgress + (1f - photoVideoChangeColumnsProgress); - - float sizeToScale = ((getMeasuredWidth() / (float) animateToColumnsCount) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) mediaColumnsCount[ci]) - AndroidUtilities.dpf2(2)); - float scaleSize = sizeToScale * photoVideoChangeColumnsProgress + (1f - photoVideoChangeColumnsProgress); - - float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) mediaColumnsCount[ci])) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); - if (changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES) { - size1 *= 1.25f; - } - float fromSize = getMeasuredWidth() / (float) mediaColumnsCount[ci]; - float toSize = getMeasuredWidth() / (float) animateToColumnsCount; - - for (int i = 0; i < drawingViews2.size(); i++) { - SharedPhotoVideoCell2 view = drawingViews2.get(i); - int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % mediaColumnsCount[ci]; - int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / mediaColumnsCount[ci]; - - currentRow += rowsOffset; - int toColumn = fromColumn + columnsOffset; - - canvas.save(); - view.setImageScale(scaleSize, !photoVideoChangeColumnsAnimation); - canvas.translate(fromColumn * fromSize * (1f - photoVideoChangeColumnsProgress) + toSize * toColumn * photoVideoChangeColumnsProgress, minY + size1 * currentRow); - if (toColumn < animateToColumnsCount) { - canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) ((1f - photoVideoChangeColumnsProgress) * 255), Canvas.ALL_SAVE_FLAG); - view.draw(canvas); - canvas.restore(); - } else { - view.draw(canvas); - } - canvas.restore(); - } - - if (!drawingViews3.isEmpty()) { - canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), (int) (255 * photoVideoChangeColumnsProgress), Canvas.ALL_SAVE_FLAG); - for (int i = 0; i < drawingViews3.size(); i++) { - drawingViews3.get(i).drawCrossafadeImage(canvas); - } - canvas.restore(); - } - } - } else { - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - int messageId = getMessageId(child); - float alpha = 1; - if (messageId != 0 && messageAlphaEnter.get(messageId, null) != null) { - alpha = messageAlphaEnter.get(messageId, 1f); - } - if (child instanceof SharedDocumentCell) { - SharedDocumentCell cell = (SharedDocumentCell) child; - cell.setEnterAnimationAlpha(alpha); - } else if (child instanceof SharedAudioCell) { - SharedAudioCell cell = (SharedAudioCell) child; - cell.setEnterAnimationAlpha(alpha); - } - } - super.dispatchDraw(canvas); - } - - + super.dispatchDraw(canvas); if (mediaPage.highlightAnimation) { mediaPage.highlightProgress += 16f / 1500f; if (mediaPage.highlightProgress >= 1) { @@ -2664,30 +2623,11 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter poller = UserListPoller.getInstance(profileActivity.getCurrentAccount()); } poller.checkList(this); - - if (!photoVideoChangeColumnsAnimation) { + if (!isChangeColumnsAnimation()) { changeColumnsTab = -1; } } - @Override - public boolean drawChild(Canvas canvas, View child, long drawingTime) { - SharedPhotoVideoAdapter movingAdapter; - if (changeColumnsTab == TAB_STORIES) { - movingAdapter = storiesAdapter; - } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { - movingAdapter = archivedStoriesAdapter; - } else { - movingAdapter = photoVideoAdapter; - } - if (mediaPage.listView == this && getAdapter() == movingAdapter) { - if (photoVideoChangeColumnsAnimation && child instanceof SharedPhotoVideoCell2) { - return true; - } - } - return super.drawChild(canvas, child, drawingTime); - } - @Override public Integer getSelectorColor(int position) { if (getAdapter() == channelRecommendationsAdapter && channelRecommendationsAdapter.more > 0 && position == channelRecommendationsAdapter.getItemCount() - 1) { @@ -2703,17 +2643,6 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter AndroidUtilities.hideKeyboard(profileActivity.getParentActivity().getCurrentFocus()); } } - - @Override - protected void emptyViewUpdated(boolean shown, boolean animated) { - if (getAdapter() == storiesAdapter) { - if (animated) { - mediaPage.buttonView.animate().alpha(shown ? 0f : 1f).start(); - } else { - mediaPage.buttonView.setAlpha(shown ? 0f : 1f); - } - } - } }; mediaPages[a].listView.setFastScrollEnabled(RecyclerListView.FastScroll.DATE_TYPE); mediaPages[a].listView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING); @@ -3206,6 +3135,15 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return false; } + protected boolean isBot() { + if (dialog_id > 0) { + final int currentAccount = profileActivity.getCurrentAccount(); + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + return user != null && user.bot; + } + return false; + } + protected boolean isSelf() { return false; } @@ -3235,7 +3173,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter fwdRestrictedHint = hintView; } - private int getMessageId(View child) { + private static int getMessageId(View child) { if (child instanceof SharedPhotoVideoCell2) { return ((SharedPhotoVideoCell2) child).getMessageId(); } @@ -3994,7 +3932,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (lastVisiblePosition + 1 >= profileActivity.getMessagesController().getSavedMessagesController().getLoadedCount()) { profileActivity.getMessagesController().getSavedMessagesController().loadDialogs(false); } - } else if (mediaPage.selectedType != TAB_RECOMMENDED_CHANNELS && mediaPage.selectedType != TAB_SAVED_MESSAGES) { + } else if (mediaPage.selectedType != TAB_RECOMMENDED_CHANNELS && mediaPage.selectedType != TAB_SAVED_MESSAGES && mediaPage.selectedType != TAB_BOT_PREVIEWS) { final int threshold; if (mediaPage.selectedType == 0) { threshold = 3; @@ -4109,7 +4047,8 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter type != TAB_GIF && type != TAB_COMMON_GROUPS && type != TAB_SAVED_DIALOGS && - type != TAB_RECOMMENDED_CHANNELS + type != TAB_RECOMMENDED_CHANNELS && + type != TAB_BOT_PREVIEWS ); } @@ -4121,6 +4060,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS; } + public boolean isOptionsItemVisible() { + return mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS || mediaPages[0].selectedType == TAB_BOT_PREVIEWS; + } + public int getSelectedTab() { return scrollSlidingTextTabStrip.getCurrentTabId(); } @@ -4335,34 +4278,63 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public void onActionBarItemClick(View v, int id) { if (id == delete) { - if (getSelectedTab() == TAB_STORIES || getSelectedTab() == TAB_ARCHIVED_STORIES) { + if (getSelectedTab() == TAB_STORIES || getSelectedTab() == TAB_ARCHIVED_STORIES || getSelectedTab() == TAB_BOT_PREVIEWS) { if (selectedFiles[0] != null) { - ArrayList storyItems = new ArrayList<>(); - for (int i = 0; i < selectedFiles[0].size(); ++i) { - MessageObject messageObject = selectedFiles[0].valueAt(i); - if (messageObject.storyItem != null) { - storyItems.add(messageObject.storyItem); - } - } - - if (!storyItems.isEmpty()) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); - builder.setTitle(storyItems.size() > 1 ? LocaleController.getString(R.string.DeleteStoriesTitle) : LocaleController.getString(R.string.DeleteStoryTitle)); - builder.setMessage(LocaleController.formatPluralString("DeleteStoriesSubtitle", storyItems.size())); - builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - profileActivity.getMessagesController().getStoriesController().deleteStories(dialog_id, storyItems); - BulletinFactory.of(profileActivity).createSimpleBulletin(R.raw.ic_delete, LocaleController.formatPluralString("StoriesDeleted", storyItems.size())).show(); - closeActionMode(false); + if (isBot() && botPreviewsContainer != null && botPreviewsContainer.getCurrentList() != null) { + final StoriesController.BotPreviewsList list = botPreviewsContainer.getCurrentList(); + ArrayList medias = new ArrayList<>(); + for (int i = 0; i < selectedFiles[0].size(); ++i) { + MessageObject messageObject = selectedFiles[0].valueAt(i); + if (messageObject.storyItem != null) { + medias.add(messageObject.storyItem.media); } - }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (DialogInterface.OnClickListener) (dialog, which) -> { - dialog.dismiss(); - }); - AlertDialog dialog = builder.create(); - dialog.show(); - dialog.redPositive(); + } + if (!medias.isEmpty()) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); + builder.setTitle(medias.size() > 1 ? LocaleController.getString(R.string.DeleteBotPreviewsTitle) : LocaleController.getString(R.string.DeleteBotPreviewTitle)); + builder.setMessage(LocaleController.formatPluralString("DeleteBotPreviewsSubtitle", medias.size())); + builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + list.delete(medias); + BulletinFactory.of(profileActivity).createSimpleBulletin(R.raw.ic_delete, LocaleController.formatPluralString("BotPreviewsDeleted", medias.size())).show(); + closeActionMode(false); + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (DialogInterface.OnClickListener) (dialog, which) -> { + dialog.dismiss(); + }); + AlertDialog dialog = builder.create(); + dialog.show(); + dialog.redPositive(); + } + } else { + ArrayList storyItems = new ArrayList<>(); + for (int i = 0; i < selectedFiles[0].size(); ++i) { + MessageObject messageObject = selectedFiles[0].valueAt(i); + if (messageObject.storyItem != null) { + storyItems.add(messageObject.storyItem); + } + } + if (!storyItems.isEmpty()) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); + builder.setTitle(storyItems.size() > 1 ? LocaleController.getString(R.string.DeleteStoriesTitle) : LocaleController.getString(R.string.DeleteStoryTitle)); + builder.setMessage(LocaleController.formatPluralString("DeleteStoriesSubtitle", storyItems.size())); + builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + profileActivity.getMessagesController().getStoriesController().deleteStories(dialog_id, storyItems); + BulletinFactory.of(profileActivity).createSimpleBulletin(R.raw.ic_delete, LocaleController.formatPluralString("StoriesDeleted", storyItems.size())).show(); + closeActionMode(false); + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (DialogInterface.OnClickListener) (dialog, which) -> { + dialog.dismiss(); + }); + AlertDialog dialog = builder.create(); + dialog.show(); + dialog.redPositive(); + } } } return; @@ -4680,6 +4652,12 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (canEditStories() && isActionModeShowed && getClosestTab() == TAB_STORIES) { return false; } + if (mediaPages[0] != null && mediaPages[0].selectedType == TAB_BOT_PREVIEWS && botPreviewsContainer != null && !botPreviewsContainer.canScroll(forward)) { + return false; + } + if (isActionModeShowed && mediaPages[0] != null && mediaPages[0].selectedType == TAB_BOT_PREVIEWS) { + return false; + } updateOptionsSearch(); getParent().requestDisallowInterceptTouchEvent(true); @@ -4786,6 +4764,9 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } public RecyclerListView getCurrentListView() { + if (mediaPages[0].selectedType == TAB_BOT_PREVIEWS) { + return botPreviewsContainer.getCurrentListView(); + } if (mediaPages[0].selectedType == TAB_SAVED_MESSAGES && savedMessagesContainer != null) { return savedMessagesContainer.chatActivity.getChatListView(); } @@ -5014,6 +4995,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } cantDeleteMessagesCount = 0; onActionModeSelectedUpdate(selectedFiles[0]); + if (botPreviewsContainer != null) { + botPreviewsContainer.unselectAll(); + botPreviewsContainer.updateSelection(true); + } showActionMode(false); updateRowsSelection(uncheckAnimated); if (savedDialogsAdapter != null) { @@ -5026,12 +5011,14 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } public void setVisibleHeight(int height) { - height = Math.max(height, dp(120)); for (int a = 0; a < mediaPages.length; a++) { - float t = -(getMeasuredHeight() - height) / 2f; + float t = -(getMeasuredHeight() - Math.max(height, dp(mediaPages[a].selectedType == TAB_STORIES ? 280 : 120))) / 2f; mediaPages[a].emptyView.setTranslationY(t); mediaPages[a].progressView.setTranslationY(-t); } + if (botPreviewsContainer != null) { + botPreviewsContainer.setVisibleHeight(height); + } } protected void onActionModeSelectedUpdate(SparseArray messageObjects) { @@ -5086,7 +5073,14 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } private void updateStoriesPinButton() { - if (getClosestTab() == TAB_ARCHIVED_STORIES) { + if (isBot()) { + if (pinItem != null) { + pinItem.setVisibility(View.GONE); + } + if (unpinItem != null) { + unpinItem.setVisibility(View.GONE); + } + } else if (getClosestTab() == TAB_ARCHIVED_STORIES) { if (pinItem != null) { pinItem.setVisibility(View.GONE); } @@ -5464,10 +5458,14 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } else if (id == NotificationCenter.storiesUpdated) { for (int i = 0; i < mediaPages.length; ++i) { if (mediaPages[i] != null && mediaPages[i].listView != null && (mediaPages[i].selectedType == TAB_STORIES || mediaPages[i].selectedType == TAB_ARCHIVED_STORIES)) { - for (int j = 0; j < mediaPages[i].listView.getChildCount(); ++j) { - View child = mediaPages[i].listView.getChildAt(j); - if (child instanceof SharedPhotoVideoCell2) { - ((SharedPhotoVideoCell2) child).updateViews(); + if (isBot() && mediaPages[i].listView.getAdapter() != null) { + mediaPages[i].listView.getAdapter().notifyDataSetChanged(); + } else { + for (int j = 0; j < mediaPages[i].listView.getChildCount(); ++j) { + View child = mediaPages[i].listView.getChildAt(j); + if (child instanceof SharedPhotoVideoCell2) { + ((SharedPhotoVideoCell2) child).updateViews(); + } } } } @@ -5794,8 +5792,15 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter boolean hasRecommendations = false; boolean hasSavedDialogs = false; boolean hasSavedMessages = savedMessagesContainer != null && sharedMediaPreloader != null && sharedMediaPreloader.hasSavedMessages; + final TLRPC.User user = dialog_id <= 0 || profileActivity == null ? null : profileActivity.getMessagesController().getUser(dialog_id); + boolean hasEditBotPreviews = user != null && user.bot && user.bot_has_main_app && user.bot_can_edit; + boolean hasBotPreviews = user != null && user.bot && !user.bot_can_edit && (userInfo != null && userInfo.bot_info != null && userInfo.bot_info.has_preview_medias) && !hasEditBotPreviews; + boolean hasStories = (DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories(); int changed = 0; - if (((DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories()) != scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { + if ((hasStories || hasBotPreviews) != scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { + changed++; + } + if (hasEditBotPreviews != scrollSlidingTextTabStrip.hasTab(TAB_BOT_PREVIEWS)) { changed++; } if (isSearchingStories() != scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { @@ -5848,7 +5853,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (animated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { final TransitionSet transitionSet = new TransitionSet(); transitionSet.setOrdering(TransitionSet.ORDERING_TOGETHER); - transitionSet.addTransition(new ChangeBounds()); +// transitionSet.addTransition(new ChangeBounds()); transitionSet.addTransition(new Visibility() { @Override public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) { @@ -5889,7 +5894,16 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } scrollSlidingTextTabStrip.animationDuration = 420; } - if ((DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories()) { + if (hasEditBotPreviews) { + if (!scrollSlidingTextTabStrip.hasTab(TAB_BOT_PREVIEWS)) { + scrollSlidingTextTabStrip.addTextTab(TAB_BOT_PREVIEWS, getString(R.string.ProfileBotPreviewTab), idToView); + } + } + if (hasBotPreviews) { + if (!scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { + scrollSlidingTextTabStrip.addTextTab(TAB_STORIES, getString(R.string.ProfileBotPreviewTab), idToView); + } + } else if ((DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories()) { if (isArchivedOnlyStoriesView()) { if (!scrollSlidingTextTabStrip.hasTab(TAB_ARCHIVED_STORIES)) { scrollSlidingTextTabStrip.addTextTab(TAB_ARCHIVED_STORIES, getString(R.string.ProfileArchivedStories), idToView); @@ -6217,11 +6231,18 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter mediaPages[a].listView.setAdapter(null); } if (savedMessagesContainer.getParent() != mediaPages[a]) { - if (savedMessagesContainer.getParent() instanceof ViewGroup) { - ((ViewGroup) savedMessagesContainer.getParent()).removeView(savedMessagesContainer); - } + AndroidUtilities.removeFromParent(savedMessagesContainer); mediaPages[a].addView(savedMessagesContainer); } + } else if (mediaPages[a].selectedType == TAB_BOT_PREVIEWS) { + if (currentAdapter != null) { + recycleAdapter(currentAdapter); + mediaPages[a].listView.setAdapter(null); + } + if (botPreviewsContainer != null && botPreviewsContainer.getParent() != mediaPages[a]) { + AndroidUtilities.removeFromParent(botPreviewsContainer); + mediaPages[a].addView(botPreviewsContainer); + } } if (mediaPages[a].selectedType == TAB_SAVED_DIALOGS) { mediaPages[a].listView.setItemAnimator(mediaPages[a].itemAnimator); @@ -6235,7 +6256,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter savedMessagesContainer.chatActivity.onRemoveFromParent(); mediaPages[a].removeView(savedMessagesContainer); } - if (mediaPages[a].selectedType == TAB_PHOTOVIDEO || mediaPages[a].selectedType == TAB_SAVED_DIALOGS || mediaPages[a].selectedType == TAB_STORIES || mediaPages[a].selectedType == TAB_ARCHIVED_STORIES || mediaPages[a].selectedType == TAB_VOICE || mediaPages[a].selectedType == TAB_GIF || mediaPages[a].selectedType == TAB_COMMON_GROUPS || mediaPages[a].selectedType == TAB_GROUPUSERS && !delegate.canSearchMembers() || mediaPages[a].selectedType == TAB_RECOMMENDED_CHANNELS) { + if (botPreviewsContainer != null && mediaPages[a].selectedType != TAB_BOT_PREVIEWS && botPreviewsContainer.getParent() == mediaPages[a]) { + mediaPages[a].removeView(botPreviewsContainer); + } + if (mediaPages[a].selectedType == TAB_PHOTOVIDEO || mediaPages[a].selectedType == TAB_SAVED_DIALOGS || mediaPages[a].selectedType == TAB_STORIES || mediaPages[a].selectedType == TAB_ARCHIVED_STORIES || mediaPages[a].selectedType == TAB_VOICE || mediaPages[a].selectedType == TAB_GIF || mediaPages[a].selectedType == TAB_COMMON_GROUPS || mediaPages[a].selectedType == TAB_GROUPUSERS && !delegate.canSearchMembers() || mediaPages[a].selectedType == TAB_RECOMMENDED_CHANNELS || mediaPages[a].selectedType == TAB_BOT_PREVIEWS) { if (animated) { searchItemState = 2; } else { @@ -6291,6 +6315,8 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } else if (mediaPages[a].selectedType == TAB_SAVED_MESSAGES) { + } else if (mediaPages[a].selectedType == TAB_BOT_PREVIEWS) { + } else { if (!sharedMediaData[mediaPages[a].selectedType].loading && !sharedMediaData[mediaPages[a].selectedType].endReached[0] && sharedMediaData[mediaPages[a].selectedType].messages.isEmpty()) { sharedMediaData[mediaPages[a].selectedType].loading = true; @@ -6307,11 +6333,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } } if (mediaPages[a].selectedType == TAB_STORIES) { + mediaPages[a].emptyView.stickerView.setVisibility(!isSelf() && !isBot() ? View.VISIBLE : View.GONE); if (isSelf()) { - mediaPages[a].emptyView.stickerView.setVisibility(View.GONE); mediaPages[a].emptyView.button.setVisibility(View.GONE); } else { - mediaPages[a].emptyView.stickerView.setVisibility(View.VISIBLE); mediaPages[a].emptyView.setStickerType(StickerEmptyView.STICKER_TYPE_ALBUM); mediaPages[a].emptyView.button.setVisibility(!isSearchingStories() ? View.VISIBLE : View.GONE); mediaPages[a].emptyView.button.setText(addPostText(), false); @@ -6377,10 +6402,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); if (gotoItem != null) { - gotoItem.setVisibility(getClosestTab() != TAB_STORIES ? View.VISIBLE : View.GONE); + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); } if (forwardItem != null) { - forwardItem.setVisibility(getClosestTab() != TAB_STORIES ? View.VISIBLE : View.GONE); + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); } selectedMessagesCountTextView.setNumber(1, false); AnimatorSet animatorSet = new AnimatorSet(); @@ -6445,10 +6470,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), true); deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); if (gotoItem != null) { - gotoItem.setVisibility(getClosestTab() != TAB_STORIES && selectedFiles[0].size() == 1 ? View.VISIBLE : View.GONE); + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS && selectedFiles[0].size() == 1 ? View.VISIBLE : View.GONE); } if (forwardItem != null) { - forwardItem.setVisibility(getClosestTab() != TAB_STORIES ? View.VISIBLE : View.GONE); + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); } updateStoriesPinButton(); } @@ -6521,8 +6546,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter String link = null; if (webPage != null && !(webPage instanceof TLRPC.TL_webPageEmpty)) { if (webPage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(profileActivity.getParentActivity(), profileActivity); - ArticleViewer.getInstance().open(message); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(message) != null) { + return; + } + profileActivity.createArticleViewer(false).open(message); return; } else if (webPage.embed_url != null && webPage.embed_url.length() != 0) { openWebView(webPage, message); @@ -7181,28 +7208,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (sharedResources == null) { sharedResources = new SharedPhotoVideoCell2.SharedResources(parent.getContext(), resourcesProvider); } - SharedPhotoVideoCell2 cell = new SharedPhotoVideoCell2(mContext, sharedResources, profileActivity.getCurrentAccount()) { -// private Runnable startDragRunnable = () -> { -// if (mediaPages[0] == null || mediaPages[0].listView == null) { -// return; -// } -// if (isActionModeShowed && viewType == VIEW_TYPE_STORY && SharedPhotoVideoAdapter.this == storiesAdapter && isStoriesView()) { -// storiesReorder.startDrag(mediaPages[0].listView.getChildViewHolder(this)); -// } -// }; -// @Override -// public boolean onTouchEvent(MotionEvent event) { -// if (isActionModeShowed && viewType == VIEW_TYPE_STORY && SharedPhotoVideoAdapter.this == storiesAdapter && isStoriesView()) { -// if (event.getAction() == MotionEvent.ACTION_DOWN) { -// AndroidUtilities.cancelRunOnUIThread(this.startDragRunnable); -// AndroidUtilities.runOnUIThread(this.startDragRunnable, (long) (ViewConfiguration.getLongPressTimeout() * .75f)); -// } else if (event.getAction() == MotionEvent.ACTION_CANCEL || event.getAction() == MotionEvent.ACTION_UP) { -// AndroidUtilities.cancelRunOnUIThread(this.startDragRunnable); -// } -// } -// return super.onTouchEvent(event); -// } - }; + SharedPhotoVideoCell2 cell = new SharedPhotoVideoCell2(mContext, sharedResources, profileActivity.getCurrentAccount()); + if (viewType == VIEW_TYPE_STORY) { + cell.setCheck2(); + } cell.setGradientView(globalGradientView); if (this == storiesAdapter || this == archivedStoriesAdapter) { cell.isStory = true; @@ -8671,11 +8680,42 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return 0; } + public String getBotPreviewsSubtitle(boolean edit) { + if (!isBot()) { + return getString(R.string.BotPreviewEmpty); + } + if (edit && botPreviewsContainer != null) { + return botPreviewsContainer.getBotPreviewsSubtitle(); + } + int images = 0, videos = 0; + if (storiesAdapter != null && storiesAdapter.storiesList != null) { + for (int i = 0; i < storiesAdapter.storiesList.messageObjects.size(); ++i) { + MessageObject msg = storiesAdapter.storiesList.messageObjects.get(i); + if (msg.storyItem != null && msg.storyItem.media != null) { + if (MessageObject.isVideoDocument(msg.storyItem.media.document)) { + videos++; + } else if (msg.storyItem.media.photo != null) { + images++; + } + } + } + } + if (images == 0 && videos == 0) return getString(R.string.BotPreviewEmpty); + StringBuilder sb = new StringBuilder(); + if (images > 0) sb.append(formatPluralString("Images", images)); + if (videos > 0) { + if (sb.length() > 0) sb.append(", "); + sb.append(formatPluralString("Videos", videos)); + } + return sb.toString(); + } + private StoriesController.StoriesList searchStoriesList; public class StoriesAdapter extends SharedPhotoVideoAdapter { private final boolean isArchive; + private final ArrayList uploadingStories = new ArrayList<>(); @Nullable public final StoriesController.StoriesList storiesList; private StoriesAdapter supportingAdapter; @@ -8686,20 +8726,26 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public StoriesAdapter(Context context, boolean isArchive) { super(context); this.isArchive = isArchive; + final int currentAccount = profileActivity.getCurrentAccount(); if (!TextUtils.isEmpty(getStoriesHashtag())) { if (searchStoriesList == null) { - searchStoriesList = new StoriesController.SearchStoriesList(profileActivity.getCurrentAccount(), getStoriesHashtag()); + searchStoriesList = new StoriesController.SearchStoriesList(currentAccount, getStoriesHashtag()); } storiesList = searchStoriesList; } else if (getStoriesArea() != null) { if (searchStoriesList == null) { - searchStoriesList = new StoriesController.SearchStoriesList(profileActivity.getCurrentAccount(), getStoriesArea()); + searchStoriesList = new StoriesController.SearchStoriesList(currentAccount, getStoriesArea()); } storiesList = searchStoriesList; } else if (isArchive && !isStoriesView() || !isArchive && isArchivedOnlyStoriesView()) { storiesList = null; } else { - storiesList = profileActivity.getMessagesController().getStoriesController().getStoriesList(dialog_id, isArchive ? StoriesController.StoriesList.TYPE_ARCHIVE : StoriesController.StoriesList.TYPE_PINNED); + boolean isBot = false; + if (dialog_id > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + isBot = user != null && user.bot; + } + storiesList = profileActivity.getMessagesController().getStoriesController().getStoriesList(dialog_id, isBot ? StoriesController.StoriesList.TYPE_BOTS : isArchive ? StoriesController.StoriesList.TYPE_ARCHIVE : StoriesController.StoriesList.TYPE_PINNED); } if (storiesList != null) { id = storiesList.link(); @@ -8777,8 +8823,36 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } } + public boolean isSelectedAll() { + if (storiesList == null) return false; + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + final MessageObject msg = storiesList.messageObjects.get(i); + boolean found = false; + final SparseArray arr = selectedFiles[msg.getDialogId() == dialog_id ? 0 : 1]; + for (int j = 0; j < arr.size(); ++j) { + int key = arr.keyAt(j); + MessageObject m = arr.get(key); + if (msg == m) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + return true; + } + @Override public void notifyDataSetChanged() { + if (storiesList != null && isBot()) { + uploadingStories.clear(); + ArrayList list = MessagesController.getInstance(storiesList.currentAccount).getStoriesController().getUploadingStories(dialog_id); + if (list != null) { + uploadingStories.addAll(list); + } + } super.notifyDataSetChanged(); if (supportingAdapter != null) { supportingAdapter.notifyDataSetChanged(); @@ -8806,7 +8880,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (storiesList == null) { return 0; } - return storiesList.isOnlyCache() && hasInternet() ? 0 : storiesList.getCount(); + return uploadingStories.size() + (storiesList.isOnlyCache() && hasInternet() ? 0 : storiesList.getCount()); } @Override @@ -8846,7 +8920,28 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (!(holder.itemView instanceof SharedPhotoVideoCell2)) return; SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) holder.itemView; cell.isStory = true; - position -= getTopOffset(); + if (position >= 0 && position < uploadingStories.size()) { + StoriesController.UploadingStory uploadingStory = uploadingStories.get(position); + cell.isStoryPinned = false; + if (uploadingStory.sharedMessageObject == null) { + final TL_stories.TL_storyItem storyItem = new TL_stories.TL_storyItem(); + storyItem.id = storyItem.messageId = Long.hashCode(uploadingStory.random_id); + storyItem.attachPath = uploadingStory.firstFramePath; + uploadingStory.sharedMessageObject = new MessageObject(storiesList.currentAccount, storyItem) { + @Override + public float getProgress() { + return uploadingStory.progress; + } + }; + uploadingStory.sharedMessageObject.uploadingStory = uploadingStory; + } + cell.setMessageObject(uploadingStory.sharedMessageObject, columnsCount()); + cell.isStory = true; + cell.setReorder(false); + cell.setChecked(false, false); + return; + } + position -= uploadingStories.size(); if (position < 0 || position >= storiesList.messageObjects.size()) { cell.isStoryPinned = false; cell.setMessageObject(null, columnsCount()); @@ -8855,10 +8950,11 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } MessageObject messageObject = storiesList.messageObjects.get(position); cell.isStoryPinned = messageObject != null && storiesList.isPinned(messageObject.getId()); + cell.setReorder(isBot() || cell.isStoryPinned); cell.isSearchingHashtag = isSearchingStories(); cell.setMessageObject(messageObject, columnsCount()); if (isActionModeShowed && messageObject != null) { - cell.setChecked(selectedFiles[messageObject.getDialogId() == dialog_id ? 0 : 1].indexOfKey(messageObject.getId()) >= 0, false); + cell.setChecked(selectedFiles[messageObject.getDialogId() == dialog_id ? 0 : 1].indexOfKey(messageObject.getId()) >= 0, true); } else { cell.setChecked(false, false); } @@ -8904,6 +9000,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public boolean canReorder(int position) { if (isArchive) return false; if (storiesList == null) return false; + if (storiesList instanceof StoriesController.BotPreviewsList) { + TLRPC.User user = MessagesController.getInstance(profileActivity.getCurrentAccount()).getUser(dialog_id); + return user != null && user.bot && user.bot_has_main_app && user.bot_can_edit; + } if (position < 0 || position >= storiesList.messageObjects.size()) return false; MessageObject messageObject = storiesList.messageObjects.get(position); return storiesList.isPinned(messageObject.getId()); @@ -8918,7 +9018,15 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (fromPosition < 0 || fromPosition >= storiesList.messageObjects.size()) return false; if (toPosition < 0 || toPosition >= storiesList.messageObjects.size()) return false; - ArrayList pinnedIds = new ArrayList<>(storiesList.pinnedIds); + ArrayList pinnedIds; + if (storiesList instanceof StoriesController.BotPreviewsList) { + pinnedIds = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + pinnedIds.add(storiesList.messageObjects.get(i).getId()); + } + } else { + pinnedIds = new ArrayList<>(storiesList.pinnedIds); + } if (!applyingReorder) { lastPinnedIds.clear(); @@ -8944,10 +9052,20 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter if (storiesList == null) return; if (!applyingReorder) return; - boolean changed = lastPinnedIds.size() != storiesList.pinnedIds.size(); + ArrayList ids; + if (storiesList instanceof StoriesController.BotPreviewsList) { + ids = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + ids.add(storiesList.messageObjects.get(i).getId()); + } + } else { + ids = storiesList.pinnedIds; + } + + boolean changed = lastPinnedIds.size() != ids.size(); if (!changed) { for (int i = 0; i < lastPinnedIds.size(); ++i) { - if (lastPinnedIds.get(i) != storiesList.pinnedIds.get(i)) { + if (lastPinnedIds.get(i) != ids.get(i)) { changed = true; break; } @@ -8955,7 +9073,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } if (changed) { - storiesList.updatePinnedOrder(storiesList.pinnedIds, true); + storiesList.updatePinnedOrder(ids, true); } applyingReorder = false; @@ -9663,9 +9781,14 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter private SpannableStringBuilder addPostButton; private CharSequence addPostText() { if (addPostButton == null) { - addPostButton = new SpannableStringBuilder("c"); - addPostButton.setSpan(new ColoredImageSpan(R.drawable.filled_premium_camera), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - addPostButton.append(" ").append(getString(R.string.StoriesAddPost)); + addPostButton = new SpannableStringBuilder(); + if (isBot()) { + addPostButton.append(getString(R.string.ProfileBotPreviewEmptyButton)); + } else { + addPostButton.append("c"); + addPostButton.setSpan(new ColoredImageSpan(R.drawable.filled_premium_camera), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + addPostButton.append(" ").append(getString(R.string.StoriesAddPost)); + } } return addPostButton; } @@ -9704,6 +9827,11 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter } public boolean canEditStories() { + if (isBot()) { + final int currentAccount = profileActivity.getCurrentAccount(); + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + return user != null && user.bot && user.bot_can_edit; + } return isStoriesView() || profileActivity != null && profileActivity.getMessagesController().getStoriesController().canEditStories(dialog_id); } @@ -9722,4 +9850,344 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public boolean isSearchingStories() { return !TextUtils.isEmpty(getStoriesHashtag()) || getStoriesArea() != null; } + + public static class SharedMediaListView extends InternalListView { + + public SharedMediaListView(Context context) { + super(context); + } + + final HashSet excludeDrawViews = new HashSet<>(); + final ArrayList drawingViews = new ArrayList<>(); + final ArrayList drawingViews2 = new ArrayList<>(); + final ArrayList drawingViews3 = new ArrayList<>(); + + protected TextPaint archivedHintPaint; + protected StaticLayout archivedHintLayout; + protected float archivedHintLayoutWidth, archivedHintLayoutLeft; + + UserListPoller poller; + + public RecyclerListView.FastScrollAdapter getMovingAdapter() { + return null; + } + + public RecyclerListView.FastScrollAdapter getSupportingAdapter() { + return null; + } + + public int getColumnsCount() { + return 3; + } + + public int getAnimateToColumnsCount() { + return 3; + } + + public boolean isChangeColumnsAnimation() { + return false; + } + + public float getChangeColumnsProgress() { + return 0; + } + + public boolean isThisListView() { + return true; + } + + public SparseArray getMessageAlphaEnter() { + return null; + } + + public InternalListView getSupportingListView() { + return null; + } + + public int getPinchCenterPosition() { + return 0; + } + + public boolean isStories() { + return false; + } + + public void checkHighlightCell(SharedPhotoVideoCell2 cell) { + + } + + private int animationSupportingSortedCellsOffset; + private final ArrayList animationSupportingSortedCells = new ArrayList<>(); + + @Override + protected void dispatchDraw(Canvas canvas) { + final RecyclerListView.FastScrollAdapter movingAdapter = getMovingAdapter(); + final RecyclerListView.FastScrollAdapter supportingMovingAdapter = getSupportingAdapter(); + if (isThisListView() && getAdapter() == movingAdapter) { + int firstVisibleItemPosition = 0; + int firstVisibleItemPosition2 = 0; + int lastVisibleItemPosition = 0; + int lastVisibleItemPosition2 = 0; + + int rowsOffset = 0; + int columnsOffset = 0; + float minY = getMeasuredHeight(); + if (isChangeColumnsAnimation()) { + int max = -1; + int min = -1; + for (int i = 0; i < getChildCount(); i++) { + int p = getChildAdapterPosition(getChildAt(i)); + if (p >= 0 && (p > max || max == -1)) { + max = p; + } + if (p >= 0 && (p < min || min == -1)) { + min = p; + } + } + firstVisibleItemPosition = min; + lastVisibleItemPosition = max; + + max = -1; + min = -1; + for (int i = 0; i < getSupportingListView().getChildCount(); i++) { + int p = getSupportingListView().getChildAdapterPosition(getSupportingListView().getChildAt(i)); + if (p >= 0 && (p > max || max == -1)) { + max = p; + } + if (p >= 0 && (p < min || min == -1)) { + min = p; + } + } + + firstVisibleItemPosition2 = min; + lastVisibleItemPosition2 = max; + + if (firstVisibleItemPosition >= 0 && firstVisibleItemPosition2 >= 0 && getPinchCenterPosition() >= 0) { + int rowsCount1 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) getColumnsCount()); + int rowsCount2 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) getAnimateToColumnsCount()); + rowsOffset = ((getPinchCenterPosition()) / getAnimateToColumnsCount() - firstVisibleItemPosition2 / getAnimateToColumnsCount()) - ((getPinchCenterPosition()) / getColumnsCount() - firstVisibleItemPosition / getColumnsCount()); + if ((firstVisibleItemPosition / getColumnsCount() - rowsOffset < 0 && getAnimateToColumnsCount() < getColumnsCount()) || (firstVisibleItemPosition2 / getAnimateToColumnsCount() + rowsOffset < 0 && getAnimateToColumnsCount() > getColumnsCount())) { + rowsOffset = 0; + } + if ((lastVisibleItemPosition2 / getColumnsCount() + rowsOffset >= rowsCount1 && getAnimateToColumnsCount() > getColumnsCount()) || (lastVisibleItemPosition / getAnimateToColumnsCount() - rowsOffset >= rowsCount2 && getAnimateToColumnsCount() < getColumnsCount())) { + rowsOffset = 0; + } + + float k = (getPinchCenterPosition() % getColumnsCount()) / (float) (getColumnsCount() - 1); + columnsOffset = (int) ((getAnimateToColumnsCount() - getColumnsCount()) * k); + } + animationSupportingSortedCells.clear(); + excludeDrawViews.clear(); + drawingViews.clear(); + drawingViews2.clear(); + drawingViews3.clear(); + animationSupportingSortedCellsOffset = 0; + for (int i = 0; i < getSupportingListView().getChildCount(); i++) { + View child = getSupportingListView().getChildAt(i); + if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { + continue; + } + if (child instanceof SharedPhotoVideoCell2) { + animationSupportingSortedCells.add((SharedPhotoVideoCell2) child); + } else if (child instanceof TextView) { + animationSupportingSortedCellsOffset++; + } + } + drawingViews.addAll(animationSupportingSortedCells); + RecyclerListView.FastScroll fastScroll = getFastScroll(); + if (fastScroll != null && fastScroll.getTag() != null) { + float p1 = movingAdapter.getScrollProgress(this); + float p2 = supportingMovingAdapter.getScrollProgress(getSupportingListView()); + float a1 = movingAdapter.fastScrollIsVisible(this) ? 1f : 0f; + float a2 = supportingMovingAdapter.fastScrollIsVisible(getSupportingListView()) ? 1f : 0f; + fastScroll.setProgress(p1 * (1f - getChangeColumnsProgress()) + p2 * getChangeColumnsProgress()); + fastScroll.setVisibilityAlpha(a1 * (1f - getChangeColumnsProgress()) + a2 * getChangeColumnsProgress()); + } + } + + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { + if (child instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); + cell.setCrossfadeView(null, 0, 0); + cell.setTranslationX(0); + cell.setTranslationY(0); + cell.setImageScale(1f, !isChangeColumnsAnimation()); + } + continue; + } + if (child instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); + checkHighlightCell(cell); + + MessageObject messageObject = cell.getMessageObject(); + float alpha = 1f; + if (messageObject != null && getMessageAlphaEnter() != null && getMessageAlphaEnter().get(messageObject.getId(), null) != null) { + alpha = getMessageAlphaEnter().get(messageObject.getId(), 1f); + } + cell.setImageAlpha(alpha, !isChangeColumnsAnimation()); + + boolean inAnimation = false; + if (isChangeColumnsAnimation()) { + float fromScale = 1f; + + int currentColumn = (((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) % getColumnsCount() + columnsOffset; + int currentRow = ((((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / getColumnsCount() + rowsOffset; + int toIndex = currentRow * getAnimateToColumnsCount() + currentColumn + animationSupportingSortedCellsOffset; + if (currentColumn >= 0 && currentColumn < getAnimateToColumnsCount() && toIndex >= 0 && toIndex < animationSupportingSortedCells.size()) { + inAnimation = true; + float toScale = (animationSupportingSortedCells.get(toIndex).getMeasuredWidth() - AndroidUtilities.dpf2(2)) / (float) (cell.getMeasuredWidth() - AndroidUtilities.dpf2(2)); + float scale = AndroidUtilities.lerp(fromScale, toScale, getChangeColumnsProgress()); + float fromX = cell.getLeft(); + float fromY = cell.getTop(); + float toX = animationSupportingSortedCells.get(toIndex).getLeft(); + float toY = animationSupportingSortedCells.get(toIndex).getTop(); + + cell.setPivotX(0); + cell.setPivotY(0); + cell.setImageScale(scale, !isChangeColumnsAnimation()); + cell.setTranslationX((toX - fromX) * getChangeColumnsProgress()); + cell.setTranslationY((toY - fromY) * getChangeColumnsProgress()); + cell.setCrossfadeView(animationSupportingSortedCells.get(toIndex), getChangeColumnsProgress(), getAnimateToColumnsCount()); + excludeDrawViews.add(animationSupportingSortedCells.get(toIndex)); + drawingViews3.add(cell); + canvas.save(); + canvas.translate(cell.getX(), cell.getY()); + cell.draw(canvas); + canvas.restore(); + + if (cell.getY() < minY) { + minY = cell.getY(); + } + } + } + + if (!inAnimation) { + if (isChangeColumnsAnimation()) { + drawingViews2.add(cell); + } + cell.setCrossfadeView(null, 0, 0); + cell.setTranslationX(0); + cell.setTranslationY(0); + cell.setImageScale(1f, !isChangeColumnsAnimation()); + } + } + } + + if (isChangeColumnsAnimation() && !drawingViews.isEmpty()) { + float toScale = getAnimateToColumnsCount() / (float) getColumnsCount(); + float scale = toScale * (1f - getChangeColumnsProgress()) + getChangeColumnsProgress(); + + float sizeToScale = ((getMeasuredWidth() / (float) getColumnsCount()) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) getAnimateToColumnsCount()) - AndroidUtilities.dpf2(2)); + float scaleSize = sizeToScale * (1f - getChangeColumnsProgress()) + getChangeColumnsProgress(); + + float fromSize = getMeasuredWidth() / (float) getColumnsCount(); + float toSize = (getMeasuredWidth() / (float) getAnimateToColumnsCount()); + float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) getAnimateToColumnsCount())) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); + if (isStories()) { + size1 *= 1.25f; + } + + for (int i = 0; i < drawingViews.size(); i++) { + SharedPhotoVideoCell2 view = drawingViews.get(i); + if (excludeDrawViews.contains(view)) { + continue; + } + view.setCrossfadeView(null, 0, 0); + int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % getAnimateToColumnsCount(); + int toColumn = fromColumn - columnsOffset; + int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition2) / getAnimateToColumnsCount(); + currentRow -= rowsOffset; + + canvas.save(); + canvas.translate(toColumn * fromSize * (1f - getChangeColumnsProgress()) + toSize * fromColumn * getChangeColumnsProgress(), minY + size1 * currentRow); + view.setImageScale(scaleSize, !isChangeColumnsAnimation()); + if (toColumn < getColumnsCount()) { + canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) (getChangeColumnsProgress() * 255), Canvas.ALL_SAVE_FLAG); + view.draw(canvas); + canvas.restore(); + } else { + view.draw(canvas); + } + canvas.restore(); + } + } + + super.dispatchDraw(canvas); + + if (isChangeColumnsAnimation()) { + float toScale = getColumnsCount() / (float) getAnimateToColumnsCount(); + float scale = toScale * getChangeColumnsProgress() + (1f - getChangeColumnsProgress()); + + float sizeToScale = ((getMeasuredWidth() / (float) getAnimateToColumnsCount()) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) getColumnsCount()) - AndroidUtilities.dpf2(2)); + float scaleSize = sizeToScale * getChangeColumnsProgress() + (1f - getChangeColumnsProgress()); + + float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) getColumnsCount())) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); + if (isStories()) { + size1 *= 1.25f; + } + float fromSize = getMeasuredWidth() / (float) getColumnsCount(); + float toSize = getMeasuredWidth() / (float) getAnimateToColumnsCount(); + + for (int i = 0; i < drawingViews2.size(); i++) { + SharedPhotoVideoCell2 view = drawingViews2.get(i); + int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % getColumnsCount(); + int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / getColumnsCount(); + + currentRow += rowsOffset; + int toColumn = fromColumn + columnsOffset; + + canvas.save(); + view.setImageScale(scaleSize, !isChangeColumnsAnimation()); + canvas.translate(fromColumn * fromSize * (1f - getChangeColumnsProgress()) + toSize * toColumn * getChangeColumnsProgress(), minY + size1 * currentRow); + if (toColumn < getAnimateToColumnsCount()) { + canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) ((1f - getChangeColumnsProgress()) * 255), Canvas.ALL_SAVE_FLAG); + view.draw(canvas); + canvas.restore(); + } else { + view.draw(canvas); + } + canvas.restore(); + } + + if (!drawingViews3.isEmpty()) { + canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), (int) (255 * getChangeColumnsProgress()), Canvas.ALL_SAVE_FLAG); + for (int i = 0; i < drawingViews3.size(); i++) { + drawingViews3.get(i).drawCrossafadeImage(canvas); + } + canvas.restore(); + } + } + } else { + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + int messageId = getMessageId(child); + float alpha = 1; + if (messageId != 0 && getMessageAlphaEnter() != null && getMessageAlphaEnter().get(messageId, null) != null) { + alpha = getMessageAlphaEnter().get(messageId, 1f); + } + if (child instanceof SharedDocumentCell) { + SharedDocumentCell cell = (SharedDocumentCell) child; + cell.setEnterAnimationAlpha(alpha); + } else if (child instanceof SharedAudioCell) { + SharedAudioCell cell = (SharedAudioCell) child; + cell.setEnterAnimationAlpha(alpha); + } + } + super.dispatchDraw(canvas); + } + } + + @Override + public boolean drawChild(Canvas canvas, View child, long drawingTime) { + final RecyclerListView.FastScrollAdapter movingAdapter = getMovingAdapter(); + if (isThisListView() && getAdapter() == movingAdapter) { + if (isChangeColumnsAnimation() && child instanceof SharedPhotoVideoCell2) { + return true; + } + } + return super.drawChild(canvas, child, drawingTime); + } + }; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java index 50d034f68..84dc5f3c2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java @@ -14,6 +14,9 @@ public class SmoothScroller extends LinearSmoothScroller { private Interpolator interpolator = CubicBezierInterpolator.DEFAULT; + private int offset; + private float durationScale = 1f; + public SmoothScroller(Context context) { super(context); } @@ -27,6 +30,14 @@ public class SmoothScroller extends LinearSmoothScroller { } + public void setOffset(int offset) { + this.offset = offset; + } + + public void setDurationScale(float scale) { + this.durationScale = scale; + } + @Override protected void updateActionForInterimTarget(Action action) { // find an interim target position @@ -63,10 +74,15 @@ public class SmoothScroller extends LinearSmoothScroller { AndroidUtilities.runOnUIThread(this::onEnd, Math.max(0, time)); } + @Override + public int calculateDyToMakeVisible(View view, int snapPreference) { + return super.calculateDyToMakeVisible(view, snapPreference) - offset; + } + protected int calculateTimeForDeceleration(int dx) { - return Math.min(super.calculateTimeForDeceleration(dx), 500); + return Math.round(Math.min(super.calculateTimeForDeceleration(dx), 500) * durationScale); } protected int calculateTimeForScrolling(int dx) { - return Math.min(super.calculateTimeForScrolling(dx), 150); + return Math.round(Math.min(super.calculateTimeForScrolling(dx), 150) * durationScale); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java new file mode 100644 index 000000000..e31ded946 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java @@ -0,0 +1,58 @@ +package org.telegram.ui.Components; + +import static org.telegram.messenger.LocaleController.getString; + +import android.app.Dialog; +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.tgnet.TLRPC; + +public class StarAppsSheet extends BottomSheetWithRecyclerListView { + + private DialogsBotsAdapter adapter; + + public StarAppsSheet(Context context) { + super(context, null, true, false, false, null); + + fixNavigationBar(); + handleOffset = true; + setShowHandle(true); + + setSlidingActionBar(); + + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + adapter.checkBottom(); + } + }); + recyclerListView.setOnItemClickListener((view, position) -> { + position--; + Object obj = adapter.getObject(position); + if (obj instanceof TLRPC.User) { + MessagesController.getInstance(currentAccount).openApp(attachedFragment, (TLRPC.User) obj, 0, null); + } + }); + } + + @Override + protected CharSequence getTitle() { + return getString(R.string.SearchAppsExamples); + } + + @Override + protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { + adapter = new DialogsBotsAdapter(listView, getContext(), currentAccount, 0, true, resourcesProvider); + adapter.setApplyBackground(false); + return adapter; + } + + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java index bda23cf88..bba9d3a30 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java @@ -14,15 +14,11 @@ import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.util.Log; import android.view.Choreographer; -import android.view.Surface; import android.view.TextureView; import android.view.View; -import android.widget.FrameLayout; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; import com.google.zxing.common.detector.MathUtils; @@ -36,7 +32,6 @@ import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.Utilities; -import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.BaseCell; import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.ChatMessageCell; @@ -1090,7 +1085,7 @@ public class ThanosEffect extends TextureView { } else if (type == 2) { cell.drawCaptionLayout(canvas, cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0, alpha); } else if (!(cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0)) { - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); } cell.setInvalidatesParent(false); canvas.restore(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java index e1a7b9a61..ddb8cf969 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java @@ -872,7 +872,7 @@ public class ThemeEditorView { bottomSaveLayout.addView(saveButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.RIGHT)); saveButton.setOnClickListener(v -> { Theme.saveCurrentTheme(themeInfo, true, false, false); - setOnDismissListener(null); + setOnDismissListener((OnDismissListener) null); dismiss(); close(); }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java index ede947c2c..62a70f310 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java @@ -1035,6 +1035,12 @@ public class TranslateAlert2 extends BottomSheet implements NotificationCenter.N } } + public static String languageNameCapital(String locale) { + String lng = languageName(locale); + if (lng == null) return null; + return lng.substring(0, 1).toUpperCase() + lng.substring(1); + } + public static String systemLanguageName(String langCode) { return systemLanguageName(langCode, false); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java index 3d8400feb..17602d39e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java @@ -2,6 +2,7 @@ package org.telegram.ui.Components; import android.content.Context; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.LongSparseArray; import android.util.SparseIntArray; @@ -56,6 +57,7 @@ public class UItem extends AdapterWithDiffUtils.Item { public View.OnClickListener clickCallback; public Object object; + public Object object2; public boolean withUsername = true; @@ -152,6 +154,14 @@ public class UItem extends AdapterWithDiffUtils.Item { return i; } + public static UItem asButton(int id, Drawable icon, CharSequence text) { + UItem i = new UItem(UniversalAdapter.VIEW_TYPE_TEXT, false); + i.id = id; + i.object = icon; + i.text = text; + return i; + } + public static UItem asButton(int id, CharSequence text, CharSequence value) { UItem i = new UItem(UniversalAdapter.VIEW_TYPE_TEXT, false); i.id = id; @@ -566,7 +576,8 @@ public class UItem extends AdapterWithDiffUtils.Item { view == item.view && intValue == item.intValue && longValue == item.longValue && - Objects.equals(object, item.object) + Objects.equals(object, item.object) && + Objects.equals(object2, item.object2) ); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java index 4ac3facdf..305a93afb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java @@ -27,7 +27,6 @@ import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.tgnet.tl.TL_stats; -import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.BusinessLinksActivity; import org.telegram.ui.Business.QuickRepliesActivity; @@ -118,6 +117,7 @@ public class UniversalAdapter extends AdapterWithDiffUtils { private final int currentAccount; private final int classGuid; private final boolean dialog; + private boolean applyBackground = true; protected Utilities.Callback2, UniversalAdapter> fillItems; private final Theme.ResourcesProvider resourcesProvider; @@ -157,6 +157,9 @@ public class UniversalAdapter extends AdapterWithDiffUtils { update(false); } + public void setApplyBackground(boolean applyBackground) { + this.applyBackground = applyBackground; + } private static class Section { public int start, end; @@ -292,6 +295,55 @@ public class UniversalAdapter extends AdapterWithDiffUtils { } } + public boolean shouldApplyBackground(int viewType) { + if (!applyBackground) return false; + if (viewType >= UItem.factoryViewTypeStartsWith) { + return true; + } + switch (viewType) { + case VIEW_TYPE_HEADER: + case VIEW_TYPE_ANIMATED_HEADER: + case VIEW_TYPE_BLACK_HEADER: + case VIEW_TYPE_TEXT: + case VIEW_TYPE_CHECK: + case VIEW_TYPE_CHECKRIPPLE: + case VIEW_TYPE_RADIO: + case VIEW_TYPE_TEXT_CHECK: + case VIEW_TYPE_ICON_TEXT_CHECK: + case VIEW_TYPE_FULLSCREEN_CUSTOM: + case VIEW_TYPE_FILTER_CHAT: + case VIEW_TYPE_FILTER_CHAT_CHECK: + case VIEW_TYPE_USER_ADD: + case VIEW_TYPE_RADIO_USER: + case VIEW_TYPE_SLIDE: + case VIEW_TYPE_INTSLIDE: + case VIEW_TYPE_QUICK_REPLY: + case VIEW_TYPE_LARGE_QUICK_REPLY: + case VIEW_TYPE_CHART_LINEAR: + case VIEW_TYPE_CHART_DOUBLE_LINEAR: + case VIEW_TYPE_CHART_STACK_BAR: + case VIEW_TYPE_CHART_BAR: + case VIEW_TYPE_CHART_STACK_LINEAR: + case VIEW_TYPE_CHART_LINEAR_BAR: + case VIEW_TYPE_TRANSACTION: + case VIEW_TYPE_PROCEED_OVERVIEW: + case VIEW_TYPE_SPACE: + case VIEW_TYPE_BUSINESS_LINK: + case VIEW_TYPE_RIGHT_ICON_TEXT: + case VIEW_TYPE_PROFILE_CELL: + case VIEW_TYPE_SEARCH_MESSAGE: + case VIEW_TYPE_FLICKER: + case VIEW_TYPE_ROUND_CHECKBOX: + case VIEW_TYPE_ROUND_GROUP_CHECKBOX: + case VIEW_TYPE_USER_GROUP_CHECKBOX: + case VIEW_TYPE_USER_CHECKBOX: + case VIEW_TYPE_SWITCH: + case VIEW_TYPE_EXPANDABLE_SWITCH: + return true; + } + return false; + } + @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -301,9 +353,6 @@ public class UniversalAdapter extends AdapterWithDiffUtils { UItem.UItemFactory factory = UItem.findFactory(viewType); if (factory != null) { view = factory.createView(context, currentAccount, classGuid, resourcesProvider); - if (!factory.isShadow()) { - view.setBackgroundColor(getThemedColor(key_background)); - } } else { view = new View(context); } @@ -314,15 +363,12 @@ public class UniversalAdapter extends AdapterWithDiffUtils { } else { view = new HeaderCell(context, resourcesProvider); } - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_ANIMATED_HEADER: view = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlueHeader, 21, 15, 0, false, true, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_BLACK_HEADER: view = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlackText, 17, 15, false, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_LARGE_HEADER: HeaderCell headerCell = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlackText, 23, 20, 0, false, resourcesProvider); @@ -334,7 +380,6 @@ public class UniversalAdapter extends AdapterWithDiffUtils { break; case VIEW_TYPE_TEXT: view = new TextCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_CHECK: case VIEW_TYPE_CHECKRIPPLE: @@ -345,17 +390,14 @@ public class UniversalAdapter extends AdapterWithDiffUtils { cell.setTypeface(AndroidUtilities.bold()); cell.setHeight(56); } - cell.setBackgroundColor(getThemedColor(key_background)); view = cell; break; case VIEW_TYPE_RADIO: view = new DialogRadioCell(context); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_TEXT_CHECK: case VIEW_TYPE_ICON_TEXT_CHECK: view = new NotificationsCheckCell(context, 21, 60, viewType == VIEW_TYPE_ICON_TEXT_CHECK, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_CUSTOM: view = new FrameLayout(context) { @@ -382,41 +424,33 @@ public class UniversalAdapter extends AdapterWithDiffUtils { break; case VIEW_TYPE_FULLSCREEN_CUSTOM: view = new FullscreenCustomFrameLayout(context); - view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.MATCH_PARENT)); break; case VIEW_TYPE_FILTER_CHAT: case VIEW_TYPE_FILTER_CHAT_CHECK: UserCell userCell = new UserCell(context, 6, viewType == VIEW_TYPE_FILTER_CHAT_CHECK ? 3 : 0, false); userCell.setSelfAsSavedMessages(true); - userCell.setBackgroundColor(getThemedColor(key_background)); view = userCell; break; case VIEW_TYPE_USER_ADD: UserCell userCell2 = new UserCell(context, 6, 0, false, true); - userCell2.setBackgroundColor(getThemedColor(key_background)); view = userCell2; break; case VIEW_TYPE_RADIO_USER: StoryPrivacyBottomSheet.UserCell userCell3 = new StoryPrivacyBottomSheet.UserCell(context, resourcesProvider); userCell3.setIsSendAs(false, false); - userCell3.setBackgroundColor(getThemedColor(key_background)); view = userCell3; break; case VIEW_TYPE_SLIDE: view = new SlideChooseView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_INTSLIDE: view = new SlideIntChooseView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_QUICK_REPLY: view = new QuickRepliesActivity.QuickReplyView(context, onReordered != null, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_LARGE_QUICK_REPLY: view = new QuickRepliesActivity.LargeQuickReplyView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_CHART_LINEAR: case VIEW_TYPE_CHART_DOUBLE_LINEAR: @@ -428,44 +462,35 @@ public class UniversalAdapter extends AdapterWithDiffUtils { chartSharedUI = new BaseChartView.SharedUiComponents(); } view = new StatisticActivity.UniversalChartCell(context, currentAccount, viewType - VIEW_TYPE_CHART_LINEAR, chartSharedUI, classGuid); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_TRANSACTION: view = new ChannelMonetizationLayout.TransactionCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_PROCEED_OVERVIEW: view = new ChannelMonetizationLayout.ProceedOverviewCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_SPACE: view = new View(context); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_BUSINESS_LINK: view = new BusinessLinksActivity.BusinessLinkView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_RIGHT_ICON_TEXT: view = new TextRightIconCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_GRAY_SECTION: view = new GraySectionCell(context, resourcesProvider); break; case VIEW_TYPE_PROFILE_CELL: view = new ProfileSearchCell(context); - view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); break; case VIEW_TYPE_SEARCH_MESSAGE: view = new DialogCell(null, context, false, true); - view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); break; case VIEW_TYPE_FLICKER: FlickerLoadingView flickerLoadingView = new FlickerLoadingView(context, resourcesProvider); flickerLoadingView.setIsSingleCell(true); view = flickerLoadingView; - view.setBackgroundColor(getThemedColor(key_background)); break; default: case VIEW_TYPE_SHADOW: @@ -488,7 +513,6 @@ public class UniversalAdapter extends AdapterWithDiffUtils { } CheckBoxCell checkBoxCell = new CheckBoxCell(context, checkBoxType, 21, true, resourcesProvider); checkBoxCell.getCheckBoxRound().setColor(Theme.key_switch2TrackChecked, Theme.key_radioBackground, Theme.key_checkboxCheck); - checkBoxCell.setBackgroundColor(getThemedColor(key_background)); view = checkBoxCell; break; case VIEW_TYPE_SHADOW_COLLAPSE_BUTTON: @@ -497,9 +521,11 @@ public class UniversalAdapter extends AdapterWithDiffUtils { case VIEW_TYPE_SWITCH: case VIEW_TYPE_EXPANDABLE_SWITCH: view = new TextCheckCell2(context); - view.setBackgroundColor(getThemedColor(key_background)); break; } + if (shouldApplyBackground(viewType)) { + view.setBackgroundColor(getThemedColor(key_background)); + } return new RecyclerListView.Holder(view); } @@ -532,6 +558,7 @@ public class UniversalAdapter extends AdapterWithDiffUtils { if (item == null) return; final int viewType = holder.getItemViewType(); final boolean divider = hasDivider(position); + updateColors(holder); if (viewType >= UItem.factoryViewTypeStartsWith) { UItem.UItemFactory factory = UItem.findFactory(viewType); if (factory != null) { @@ -564,13 +591,17 @@ public class UniversalAdapter extends AdapterWithDiffUtils { } else if (item.object instanceof String) { cell.setTextAndSticker(item.text, (String) item.object, divider); } else if (TextUtils.isEmpty(item.textValue)) { - if (item.iconResId == 0) { + if (item.object instanceof Drawable) { + cell.setTextAndIcon(item.text, (Drawable) item.object, divider); + } else if (item.iconResId == 0) { cell.setText(item.text, divider); } else { cell.setTextAndIcon(item.text, item.iconResId, divider); } } else { - if (item.iconResId == 0) { + if (item.object instanceof Drawable) { + cell.setTextAndValueAndIcon(item.text, item.textValue, (Drawable) item.object, divider); + } else if (item.iconResId == 0) { cell.setTextAndValue(item.text, item.textValue, divider); } else { cell.setTextAndValueAndIcon(item.text, item.textValue, item.iconResId, divider); @@ -812,7 +843,12 @@ public class UniversalAdapter extends AdapterWithDiffUtils { ProfileSearchCell profileCell = (ProfileSearchCell) holder.itemView; Object object = item.object; CharSequence s = ""; - if (item.withUsername) { + if (item.accent && object instanceof TLRPC.User && ((TLRPC.User) object).bot_active_users != 0) { // show bot dau + TLRPC.User user = (TLRPC.User) object; + if (user.bot_active_users != 0) { + s = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ' '); + } + } else if (item.withUsername) { String username = null; if (object instanceof TLRPC.User) { username = UserObject.getPublicUsername((TLRPC.User) object); @@ -927,6 +963,17 @@ public class UniversalAdapter extends AdapterWithDiffUtils { @Override public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) { updateReorder(holder, allowReorder); + updateColors(holder); + } + + private void updateColors(RecyclerView.ViewHolder holder) { + if (holder.itemView instanceof Theme.Colorable) { + ((Theme.Colorable) holder.itemView).updateColors(); + if (shouldApplyBackground(holder.getItemViewType())) { + final int key_background = dialog ? Theme.key_dialogBackground : Theme.key_windowBackgroundWhite; + holder.itemView.setBackgroundColor(getThemedColor(key_background)); + } + } } public void updateReorder(RecyclerView.ViewHolder holder, boolean allowReorder) { @@ -1008,19 +1055,32 @@ public class UniversalAdapter extends AdapterWithDiffUtils { } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int maxHeight = View.MeasureSpec.getSize(heightMeasureSpec); - widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(widthMeasureSpec), View.MeasureSpec.EXACTLY); - measureChildren(widthMeasureSpec, heightMeasureSpec); - int height = 0; - for (int i = 0; i < getChildCount(); ++i) { - View child = getChildAt(i); - height = Math.max(height, child.getMeasuredHeight()); + if (getParent() instanceof View && ((View) getParent()).getMeasuredHeight() > 0) { + View parent = (View) getParent(); + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(parent.getMeasuredHeight() - minusHeight, MeasureSpec.EXACTLY) + ); + } else if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.UNSPECIFIED) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec) - minusHeight, MeasureSpec.EXACTLY) + ); + } else { + int maxHeight = View.MeasureSpec.getSize(heightMeasureSpec); + widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(widthMeasureSpec), View.MeasureSpec.EXACTLY); + measureChildren(widthMeasureSpec, heightMeasureSpec); + int height = 0; + for (int i = 0; i < getChildCount(); ++i) { + View child = getChildAt(i); + height = Math.max(height, child.getMeasuredHeight()); + } + if (maxHeight > 0) { + maxHeight -= minusHeight; + height = Math.min(height, maxHeight); + } + super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)); } - if (maxHeight > 0) { - maxHeight -= minusHeight; - height = Math.min(height, maxHeight); - } - super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)); } public void setMinusHeight(int minusHeight) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java index 20ada0d63..6ccc26092 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java @@ -16,13 +16,9 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.Utilities; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; -import org.telegram.ui.Cells.DialogCell; -import org.telegram.ui.FiltersSetupActivity; import java.util.ArrayList; -import kotlinx.coroutines.android.AndroidDispatcherFactory; - public class UniversalRecyclerView extends RecyclerListView { public final LinearLayoutManager layoutManager; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java index cf3f0e409..6546d2a27 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java @@ -1,5 +1,7 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -20,8 +22,10 @@ import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; import android.transition.TransitionManager; +import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; +import android.view.Gravity; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; @@ -398,6 +402,7 @@ public class ViewPagerFixed extends FrameLayout { for (int i = 0; i < adapter.getItemCount(); i++) { tabsView.addTab(adapter.getItemId(i), adapter.getItemTitle(i)); } + addMoreTabs(); if (animated) { TransitionManager.beginDelayedTransition(tabsView.listView, TransitionExt.createSimpleTransition()); } @@ -405,6 +410,10 @@ public class ViewPagerFixed extends FrameLayout { } } + protected void addMoreTabs() { + + } + private boolean prepareForMoving(MotionEvent ev, boolean forward) { if ((!forward && currentPosition == 0 && !onBackProgress(backProgress = 0)) || (forward && currentPosition == adapter.getItemCount() - 1) || manualScrolling != null) { return false; @@ -735,6 +744,7 @@ public class ViewPagerFixed extends FrameLayout { } cancel = true; } + onTabAnimationUpdate(true); if (cancel) { //showScrollbars(true); if (tabsAnimation != null) { @@ -779,6 +789,7 @@ public class ViewPagerFixed extends FrameLayout { if (tabsView != null) { tabsView.selectTab(currentPosition, nextPosition, currentProgress); } + onTabAnimationUpdate(true); } } @@ -791,6 +802,7 @@ public class ViewPagerFixed extends FrameLayout { viewPages[1] = null; } viewPages[0].setTranslationX(0); + onTabAnimationUpdate(true); } } @@ -883,6 +895,7 @@ public class ViewPagerFixed extends FrameLayout { if (viewPages[0] != null) { tabsAnimation.playTogether(ObjectAnimator.ofFloat(viewPages[0], View.TRANSLATION_X, 0)); } + onTabAnimationUpdate(true); tabsView.indicatorProgress2 = 0; tabsView.listView.invalidateViews(); @@ -983,28 +996,28 @@ public class ViewPagerFixed extends FrameLayout { private float indicatorProgress2 = 1f; public interface TabsViewDelegate { - void onPageSelected(int page, boolean forward); - void onPageScrolled(float progress); - void onSamePageSelected(); - void invalidateBlur(); - boolean canPerformActions(); + default void onPageSelected(int page, boolean forward) {}; + default void onPageScrolled(float progress) {}; + default void onSamePageSelected() {}; + default void invalidateBlur() {}; + default boolean canPerformActions() { return true; }; } private static class Tab { public int id; - public String title; + public CharSequence title; public int titleWidth; public int counter; public float alpha = 1f; - public Tab(int i, String t) { + public Tab(int i, CharSequence t) { id = i; title = t; } public int getWidth(boolean store, TextPaint textPaint) { - int width = titleWidth = (int) Math.ceil(textPaint.measureText(title)); - return Math.max(AndroidUtilities.dp(40), width); + int width = titleWidth = (int) Math.ceil(textPaint.measureText(title == null ? "" : title.toString())); + return Math.max(0, width); } public boolean setTitle(String newTitle) { @@ -1023,7 +1036,7 @@ public class ViewPagerFixed extends FrameLayout { private int tabWidth; private int currentPosition; private RectF rect = new RectF(); - private String currentText; + private CharSequence currentText; private StaticLayout textLayout; private int textOffsetX; @@ -1045,7 +1058,7 @@ public class ViewPagerFixed extends FrameLayout { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int w = currentTab.getWidth(false, textPaint) + AndroidUtilities.dp(tabMarginDp * 2) + additionalTabWidth; + int w = currentTab.getWidth(false, textPaint) + dp(tabMarginDp * 2) + additionalTabWidth; setMeasuredDimension(w, MeasureSpec.getSize(heightMeasureSpec)); } @@ -1055,7 +1068,7 @@ public class ViewPagerFixed extends FrameLayout { if (currentTab.id != Integer.MAX_VALUE && editingAnimationProgress != 0) { canvas.save(); float p = editingAnimationProgress * (currentPosition % 2 == 0 ? 1.0f : -1.0f); - canvas.translate(AndroidUtilities.dp(0.66f) * p, 0); + canvas.translate(dp(0.66f) * p, 0); canvas.rotate(p, getMeasuredWidth() / 2, getMeasuredHeight() / 2); } int key; @@ -1085,7 +1098,9 @@ public class ViewPagerFixed extends FrameLayout { unreadOtherKey = Theme.key_chats_tabUnreadActiveBackground; } - if ((animatingIndicator || manualScrollingToId != -1) && (currentTab.id == id1 || currentTab.id == id2)) { + if (selectorType == 9) { + textPaint.setColor(Theme.getColor(unactiveTextColorKey, resourcesProvider)); + } else if ((animatingIndicator || manualScrollingToId != -1) && (currentTab.id == id1 || currentTab.id == id2)) { textPaint.setColor(ColorUtils.blendARGB(Theme.getColor(otherKey, resourcesProvider), Theme.getColor(key, resourcesProvider), animatingIndicatorProgress)); } else { textPaint.setColor(Theme.getColor(key, resourcesProvider)); @@ -1098,7 +1113,7 @@ public class ViewPagerFixed extends FrameLayout { if (currentTab.counter > 0) { counterText = String.format("%d", currentTab.counter); counterWidth = (int) Math.ceil(textCounterPaint.measureText(counterText)); - countWidth = Math.max(AndroidUtilities.dp(10), counterWidth) + AndroidUtilities.dp(10); + countWidth = Math.max(dp(10), counterWidth) + dp(10); } else { counterText = null; counterWidth = 0; @@ -1106,15 +1121,15 @@ public class ViewPagerFixed extends FrameLayout { } if (currentTab.id != Integer.MAX_VALUE && (isEditing || editingStartAnimationProgress != 0)) { - countWidth = (int) (countWidth + (AndroidUtilities.dp(20) - countWidth) * editingStartAnimationProgress); + countWidth = (int) (countWidth + (dp(20) - countWidth) * editingStartAnimationProgress); } - tabWidth = currentTab.titleWidth + (countWidth != 0 ? countWidth + AndroidUtilities.dp(6 * (counterText != null ? 1.0f : editingStartAnimationProgress)) : 0); + tabWidth = currentTab.titleWidth + (countWidth != 0 ? countWidth + dp(6 * (counterText != null ? 1.0f : editingStartAnimationProgress)) : 0); int textX = (getMeasuredWidth() - tabWidth) / 2; if (!TextUtils.equals(currentTab.title, currentText)) { currentText = currentTab.title; - CharSequence text = Emoji.replaceEmoji(currentText, textPaint.getFontMetricsInt(), AndroidUtilities.dp(15), false); - textLayout = new StaticLayout(text, textPaint, AndroidUtilities.dp(400), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0, false); + CharSequence text = Emoji.replaceEmoji(currentText, textPaint.getFontMetricsInt(), dp(15), false); + textLayout = new StaticLayout(text, textPaint, dp(400), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0, false); textHeight = textLayout.getHeight(); textOffsetX = (int) -textLayout.getLineLeft(0); } @@ -1139,8 +1154,8 @@ public class ViewPagerFixed extends FrameLayout { counterPaint.setColor(textPaint.getColor()); } - int x = textX + currentTab.titleWidth + AndroidUtilities.dp(6); - int countTop = (getMeasuredHeight() - AndroidUtilities.dp(20)) / 2; + int x = textX + currentTab.titleWidth + dp(6); + int countTop = (getMeasuredHeight() - dp(20)) / 2; if (currentTab.id != Integer.MAX_VALUE && (isEditing || editingStartAnimationProgress != 0) && counterText == null) { counterPaint.setAlpha((int) (editingStartAnimationProgress * 255)); @@ -1148,19 +1163,19 @@ public class ViewPagerFixed extends FrameLayout { counterPaint.setAlpha(255); } - rect.set(x, countTop, x + countWidth, countTop + AndroidUtilities.dp(20)); + rect.set(x, countTop, x + countWidth, countTop + dp(20)); canvas.drawRoundRect(rect, 11.5f * AndroidUtilities.density, 11.5f * AndroidUtilities.density, counterPaint); if (counterText != null) { if (currentTab.id != Integer.MAX_VALUE) { textCounterPaint.setAlpha((int) (255 * (1.0f - editingStartAnimationProgress))); } - canvas.drawText(counterText, rect.left + (rect.width() - counterWidth) / 2, countTop + AndroidUtilities.dp(14.5f), textCounterPaint); + canvas.drawText(counterText, rect.left + (rect.width() - counterWidth) / 2, countTop + dp(14.5f), textCounterPaint); } if (currentTab.id != Integer.MAX_VALUE && (isEditing || editingStartAnimationProgress != 0)) { deletePaint.setColor(textCounterPaint.getColor()); deletePaint.setAlpha((int) (255 * editingStartAnimationProgress)); - int side = AndroidUtilities.dp(3); + int side = dp(3); canvas.drawLine(rect.centerX() - side, rect.centerY() - side, rect.centerX() + side, rect.centerY() + side, deletePaint); canvas.drawLine(rect.centerX() - side, rect.centerY() + side, rect.centerX() + side, rect.centerY() - side, deletePaint); } @@ -1206,6 +1221,7 @@ public class ViewPagerFixed extends FrameLayout { private TabsViewDelegate delegate; + private int selectorType; private int currentPosition; private int selectedTabId = -1; private int allTabsWidth; @@ -1286,13 +1302,14 @@ public class ViewPagerFixed extends FrameLayout { super(context); this.resourcesProvider = resourcesProvider; - textCounterPaint.setTextSize(AndroidUtilities.dp(13)); + this.selectorType = tabsSelectorType; + textCounterPaint.setTextSize(dp(13)); textCounterPaint.setTypeface(AndroidUtilities.bold()); - textPaint.setTextSize(AndroidUtilities.dp(15)); + textPaint.setTextSize(dp(tabsSelectorType == 9 ? 14 : 15)); textPaint.setTypeface(AndroidUtilities.bold()); deletePaint.setStyle(Paint.Style.STROKE); deletePaint.setStrokeCap(Paint.Cap.ROUND); - deletePaint.setStrokeWidth(AndroidUtilities.dp(1.5f)); + deletePaint.setStrokeWidth(dp(1.5f)); selectorDrawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, null); float rad = AndroidUtilities.dpf2(3); @@ -1326,7 +1343,7 @@ public class ViewPagerFixed extends FrameLayout { protected boolean canHighlightChildAt(View child, float x, float y) { if (isEditing) { TabView tabView = (TabView) child; - int side = AndroidUtilities.dp(6); + int side = dp(6); if (tabView.rect.left - side < x && tabView.rect.right + side > x) { return false; } @@ -1355,10 +1372,10 @@ public class ViewPagerFixed extends FrameLayout { @Override protected void onTargetFound(View targetView, RecyclerView.State state, Action action) { int dx = calculateDxToMakeVisible(targetView, getHorizontalSnapPreference()); - if (dx > 0 || dx == 0 && targetView.getLeft() - AndroidUtilities.dp(21) < 0) { - dx += AndroidUtilities.dp(60); - } else if (dx < 0 || dx == 0 && targetView.getRight() + AndroidUtilities.dp(21) > getMeasuredWidth()) { - dx -= AndroidUtilities.dp(60); + if (dx > 0 || dx == 0 && targetView.getLeft() - dp(21) < 0) { + dx += dp(60); + } else if (dx < 0 || dx == 0 && targetView.getRight() + dp(21) > getMeasuredWidth()) { + dx -= dp(60); } final int dy = calculateDyToMakeVisible(targetView, getVerticalSnapPreference()); @@ -1381,14 +1398,14 @@ public class ViewPagerFixed extends FrameLayout { } } }); - listView.setPadding(AndroidUtilities.dp(7), 0, AndroidUtilities.dp(7), 0); + listView.setPadding(dp(7), 0, dp(7), 0); listView.setClipToPadding(false); listView.setDrawSelectorBehind(true); adapter = new ListAdapter(context); adapter.setHasStableIds(hasStableIds); listView.setAdapter(adapter); listView.setOnItemClickListener((view, position, x, y) -> { - if (!delegate.canPerformActions()) { + if (delegate != null && !delegate.canPerformActions()) { return; } TabView tabView = (TabView) view; @@ -1396,6 +1413,9 @@ public class ViewPagerFixed extends FrameLayout { delegate.onSamePageSelected(); return; } + if (preTabClick != null && preTabClick.run(tabView.currentTab.id, position)) { + return; + } scrollToTab(tabView.currentTab.id, position); }); listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @@ -1404,13 +1424,22 @@ public class ViewPagerFixed extends FrameLayout { invalidate(); } }); - addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + if (tabsSelectorType == 9) { + addView(listView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER_HORIZONTAL)); + } else { + addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } } public void setDelegate(TabsViewDelegate filterTabsViewDelegate) { delegate = filterTabsViewDelegate; } + private Utilities.Callback2Return preTabClick; + public void setPreTabClick(Utilities.Callback2Return listener) { + preTabClick = listener; + } + public boolean isAnimatingIndicator() { return animatingIndicator; } @@ -1497,7 +1526,7 @@ public class ViewPagerFixed extends FrameLayout { return positionToId.get(currentPosition + (forward ? 1 : -1), -1); } - public void addTab(int id, String text) { + public void addTab(int id, CharSequence text) { int position = tabs.size(); if (position == 0 && selectedTabId == -1) { selectedTabId = id; @@ -1508,7 +1537,7 @@ public class ViewPagerFixed extends FrameLayout { currentPosition = position; } Tab tab = new Tab(id, text); - allTabsWidth += tab.getWidth(true, textPaint) + AndroidUtilities.dp(tabMarginDp * 2); + allTabsWidth += tab.getWidth(true, textPaint) + dp(tabMarginDp * 2); tabs.add(tab); } @@ -1536,12 +1565,12 @@ public class ViewPagerFixed extends FrameLayout { private void updateTabsWidths() { positionToX.clear(); positionToWidth.clear(); - int xOffset = AndroidUtilities.dp(7); + int xOffset = dp(7); for (int a = 0, N = tabs.size(); a < N; a++) { int tabWidth = tabs.get(a).getWidth(false, textPaint); positionToWidth.put(a, tabWidth); positionToX.put(a, xOffset + additionalTabWidth / 2); - xOffset += tabWidth + AndroidUtilities.dp(tabMarginDp * 2) + additionalTabWidth; + xOffset += tabWidth + dp(tabMarginDp * 2) + additionalTabWidth; } } @@ -1552,6 +1581,7 @@ public class ViewPagerFixed extends FrameLayout { overrideFromW = lastDrawnIndicatorW; } + private final Paint selectorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { @@ -1594,10 +1624,10 @@ public class ViewPagerFixed extends FrameLayout { int prevW = positionToWidth.get(idx1); int newW = positionToWidth.get(idx2); if (additionalTabWidth != 0) { - indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) + AndroidUtilities.dp(tabMarginDp); + indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) + dp(tabMarginDp); } else { int x = positionToX.get(position); - indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) - (x - holder.itemView.getLeft()) + AndroidUtilities.dp(tabMarginDp); + indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) - (x - holder.itemView.getLeft()) + dp(tabMarginDp); } indicatorWidth = (int) (prevW + (newW - prevW) * animatingIndicatorProgress); } @@ -1606,19 +1636,27 @@ public class ViewPagerFixed extends FrameLayout { RecyclerListView.ViewHolder holder = listView.findViewHolderForAdapterPosition(currentPosition); if (holder != null) { TabView tabView = (TabView) holder.itemView; - indicatorWidth = Math.max(AndroidUtilities.dp(40), tabView.tabWidth); + indicatorWidth = Math.max(dp(40), tabView.tabWidth); indicatorX = (int) (tabView.getX() + (tabView.getMeasuredWidth() - indicatorWidth) / 2); } } + indicatorX += listView.getX(); if (indicatorWidth != 0) { - lastDrawnIndicatorX = indicatorX; - lastDrawnIndicatorW = indicatorWidth; - if (indicatorProgress2 != 1f) { - indicatorX = (int) AndroidUtilities.lerp(lastDrawnIndicatorX, indicatorX, indicatorProgress2); - indicatorWidth = (int) AndroidUtilities.lerp(lastDrawnIndicatorW, indicatorWidth, indicatorProgress2); + if (selectorType == 9) { + selectorPaint.setColor(Theme.multAlpha(textPaint.getColor(), .15f)); + final float cy = height / 2f, h = dp(26); + AndroidUtilities.rectTmp.set(indicatorX - dp(12), cy - h / 2f, indicatorX + indicatorWidth + dp(12), cy + h / 2f); + canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.rectTmp.height() / 2f, AndroidUtilities.rectTmp.height() / 2f, selectorPaint); + } else { + lastDrawnIndicatorX = indicatorX; + lastDrawnIndicatorW = indicatorWidth; + if (indicatorProgress2 != 1f) { + indicatorX = (int) AndroidUtilities.lerp(lastDrawnIndicatorX, indicatorX, indicatorProgress2); + indicatorWidth = (int) AndroidUtilities.lerp(lastDrawnIndicatorW, indicatorWidth, indicatorProgress2); + } + selectorDrawable.setBounds(indicatorX, (int) (height - AndroidUtilities.dpr(4) + hideProgress * AndroidUtilities.dpr(4)), indicatorX + indicatorWidth, (int) (height + hideProgress * AndroidUtilities.dpr(4))); + selectorDrawable.draw(canvas); } - selectorDrawable.setBounds(indicatorX, (int) (height - AndroidUtilities.dpr(4) + hideProgress * AndroidUtilities.dpr(4)), indicatorX + indicatorWidth, (int) (height + hideProgress * AndroidUtilities.dpr(4))); - selectorDrawable.draw(canvas); } if (crossfadeBitmap != null) { crossfadePaint.setAlpha((int) (crossfadeAlpha * 255)); @@ -1632,9 +1670,9 @@ public class ViewPagerFixed extends FrameLayout { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!tabs.isEmpty()) { - int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(7) - AndroidUtilities.dp(7); + int width = MeasureSpec.getSize(widthMeasureSpec) - dp(7) - dp(7); int prevWidth = additionalTabWidth; - if (tabs.size() == 1) { + if (tabs.size() == 1 || selectorType == 9) { additionalTabWidth = 0; } else { additionalTabWidth = allTabsWidth < width ? (width - allTabsWidth) / tabs.size() : 0; @@ -1690,6 +1728,7 @@ public class ViewPagerFixed extends FrameLayout { } } } + public void selectTab(int currentPosition, int nextPosition, float progress) { if (progress < 0) { progress = 0; @@ -1757,9 +1796,9 @@ public class ViewPagerFixed extends FrameLayout { private int getChildWidth(TextView child) { Layout layout = child.getLayout(); if (layout != null) { - int w = (int) Math.ceil(layout.getLineWidth(0)) + AndroidUtilities.dp(2); + int w = (int) Math.ceil(layout.getLineWidth(0)) + dp(2); if (child.getCompoundDrawables()[2] != null) { - w += child.getCompoundDrawables()[2].getIntrinsicWidth() + AndroidUtilities.dp(6); + w += child.getCompoundDrawables()[2].getIntrinsicWidth() + dp(6); } return w; } else { @@ -1897,7 +1936,7 @@ public class ViewPagerFixed extends FrameLayout { if (recyclerListView != null) { for (int j = 0; j < recyclerListView.getChildCount(); j++) { View child = recyclerListView.getChildAt(j); - if (child.getY() < AndroidUtilities.dp(203) + AndroidUtilities.dp(100)) { + if (child.getY() < dp(203) + dp(100)) { int restore = blurCanvas.save(); blurCanvas.translate(viewPages[i].getX(), getY() + viewPages[i].getY() + recyclerListView.getY() + child.getY()); child.draw(blurCanvas); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java index e564262a9..34e3b96fc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java @@ -9,6 +9,7 @@ package org.telegram.ui; import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import android.Manifest; @@ -176,6 +177,8 @@ import org.telegram.ui.Components.ArchiveHelp; import org.telegram.ui.Components.AvatarDrawable; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.BlurredRecyclerView; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.StealthModeAlert; import org.telegram.ui.bots.BotWebViewSheet; import org.telegram.ui.Components.Bulletin; @@ -2770,6 +2773,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. getNotificationCenter().addObserver(this, NotificationCenter.chatlistFolderUpdate); getNotificationCenter().addObserver(this, NotificationCenter.dialogTranslate); } + getNotificationCenter().addObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().addObserver(this, NotificationCenter.starSubscriptionsLoaded); loadDialogs(getAccountInstance()); getMessagesController().getStoriesController().loadAllStories(); @@ -2926,6 +2931,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. getNotificationCenter().removeObserver(this, NotificationCenter.chatlistFolderUpdate); getNotificationCenter().removeObserver(this, NotificationCenter.dialogTranslate); } + getNotificationCenter().removeObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().removeObserver(this, NotificationCenter.starSubscriptionsLoaded); if (commentView != null) { commentView.onDestroy(); @@ -5519,6 +5526,28 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. } } + public boolean isStarsSubscriptionHintVisible() { + if (folderId == 0) { + if (MessagesController.getInstance(currentAccount).pendingSuggestions.contains("STARS_SUBSCRIPTION_LOW_BALANCE")) { + StarsController c = StarsController.getInstance(currentAccount); + if (!c.hasInsufficientSubscriptions()) { + c.loadInsufficientSubscriptions(); + return false; + } else { + long starsNeeded = -c.balance; + for (int i = 0; i < c.insufficientSubscriptions.size(); ++i) { + TLRPC.StarsSubscription sub = c.insufficientSubscriptions.get(i); + TLRPC.Chat chat = getMessagesController().getChat(-DialogObject.getPeerDialogId(sub.peer)); + if (chat == null) continue; + starsNeeded += sub.pricing.amount; + } + return starsNeeded > 0; + } + } + } + return false; + } + public boolean isPremiumRestoreHintVisible() { if (!MessagesController.getInstance(currentAccount).premiumFeaturesBlocked() && folderId == 0) { return MessagesController.getInstance(currentAccount).pendingSuggestions.contains("PREMIUM_RESTORE") && !getUserConfig().isPremium() && MediaDataController.getInstance(currentAccount).getPremiumHintAnnualDiscount(false) != null; @@ -5797,6 +5826,39 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. updateDialogsHint(); }); updateAuthHintCellVisibility(false); + } else if (isStarsSubscriptionHintVisible()) { + StarsController c = StarsController.getInstance(currentAccount); + dialogsHintCellVisible = true; + dialogsHintCell.setVisibility(View.VISIBLE); + dialogsHintCell.setCompact(true); + StringBuilder s = new StringBuilder(); + long starsNeeded = 0; + if (c.hasInsufficientSubscriptions()) { + for (int i = 0; i < c.insufficientSubscriptions.size(); ++i) { + TLRPC.StarsSubscription sub = c.insufficientSubscriptions.get(i); + TLRPC.Chat chat = getMessagesController().getChat(-DialogObject.getPeerDialogId(sub.peer)); + if (chat == null) continue; + if (s.length() > 0) s.append(", "); + s.append(chat.title); + starsNeeded += sub.pricing.amount; + } + } + final String starsNeededName = s.toString(); + final long starsNeededFinal = starsNeeded; + dialogsHintCell.setOnClickListener(v -> { + new StarsIntroActivity.StarsNeededSheet(getContext(), getResourceProvider(), starsNeededFinal, StarsIntroActivity.StarsNeededSheet.TYPE_SUBSCRIPTION_KEEP, starsNeededName, () -> { + updateDialogsHint(); + }).show(); + }); + dialogsHintCell.setText(StarsIntroActivity.replaceStarsWithPlain(formatString(R.string.StarsSubscriptionExpiredHintTitle, starsNeeded - c.balance <= 0 ? starsNeeded : starsNeeded - c.balance, starsNeededName), .72f), LocaleController.getString(R.string.StarsSubscriptionExpiredHintText)); + dialogsHintCell.setOnCloseListener(v -> { + MessagesController.getInstance(currentAccount).removeSuggestion(0, "STARS_SUBSCRIPTION_LOW_BALANCE"); + ChangeBounds transition = new ChangeBounds(); + transition.setDuration(200); + TransitionManager.beginDelayedTransition((ViewGroup) dialogsHintCell.getParent(), transition); + updateDialogsHint(); + }); + updateAuthHintCellVisibility(false); } else if (folderId == 0 && !getMessagesController().premiumPurchaseBlocked() && BirthdayController.getInstance(currentAccount).contains() && !getMessagesController().dismissedSuggestions.contains("BIRTHDAY_CONTACTS_TODAY")) { BirthdayController.BirthdayState state = BirthdayController.getInstance(currentAccount).getState(); ArrayList users = state.today; @@ -5849,6 +5911,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. userFull.flags2 |= 32; userFull.birthday = birthday; } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { BulletinFactory.of(DialogsActivity.this) @@ -10634,6 +10697,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. updateDialogsHint(); } else if (id == NotificationCenter.premiumPromoUpdated) { updateDialogsHint(); + } else if (id == NotificationCenter.starBalanceUpdated || id == NotificationCenter.starSubscriptionsLoaded) { + updateDialogsHint(); } } @@ -12817,6 +12882,44 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. presentFragment(highlightFoundQuote(chatActivity, msg)); } }); + searchViewPager.botsSearchListView.setOnItemClickListener((view, position, x, y) -> { + Object obj = searchViewPager.botsSearchAdapter.getTopPeerObject(position); + if (obj instanceof TLRPC.User) { + getMessagesController().openApp((TLRPC.User) obj, getClassGuid()); + return; + } + obj = searchViewPager.botsSearchAdapter.getObject(position); + if (obj instanceof TLRPC.User) { + presentFragment(ProfileActivity.of(((TLRPC.User) obj).id)); + } else if (obj instanceof MessageObject) { + MessageObject msg = (MessageObject) obj; + Bundle args = new Bundle(); + if (msg.getDialogId() >= 0) { + args.putLong("user_id", msg.getDialogId()); + } else { + args.putLong("chat_id", -msg.getDialogId()); + } + args.putInt("message_id", msg.getId()); + ChatActivity chatActivity = new ChatActivity(args); + presentFragment(highlightFoundQuote(chatActivity, msg)); + } + }); + searchViewPager.botsSearchListView.setOnItemLongClickListener((view, position) -> { + Object obj = searchViewPager.botsSearchAdapter.getTopPeerObject(position); + if (obj instanceof TLRPC.User) { + final TLRPC.User user = (TLRPC.User) obj; + new AlertDialog.Builder(getContext(), resourceProvider) + .setTitle(getString(R.string.AppsClearSearch)) + .setMessage(formatString(R.string.AppsClearSearchAlert, "\"" + UserObject.getUserName(user) + "\"")) + .setNegativeButton(LocaleController.getString(R.string.Cancel), null) + .setPositiveButton(LocaleController.getString(R.string.Remove), (di, w) -> { + getMediaDataController().removeWebapp(user.id); + }) + .makeRed(DialogInterface.BUTTON_POSITIVE) + .show(); + } + return false; + }); searchViewPager.searchListView.setOnItemClickListener((view, position, x, y) -> { if (view instanceof ProfileSearchCell && ((ProfileSearchCell) view).isBlocked()) { showPremiumBlockedToast(view, ((ProfileSearchCell) view).getDialogId()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java new file mode 100644 index 000000000..bad254242 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java @@ -0,0 +1,17 @@ +package org.telegram.ui; + +import android.content.Context; +import android.view.View; +import android.widget.FrameLayout; + +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.Components.SizeNotifierFrameLayout; + +public class EmptyBaseFragment extends BaseFragment { + + @Override + public View createView(Context context) { + return fragmentView = new SizeNotifierFrameLayout(context); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java b/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java index 60eb82f4a..41d542f09 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java @@ -1,5 +1,7 @@ package org.telegram.ui; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -439,6 +441,15 @@ public class FilteredSearchView extends FrameLayout implements NotificationCente QuickRepliesController.QuickReply reply = QuickRepliesController.getInstance(messageObject.currentAccount).findReply(messageObject.getQuickReplyId()); return reply == null ? "" : reply.name; } + if (messageObject.isSponsored()) { + if (messageObject.sponsoredCanReport) { + return getString(R.string.SponsoredMessageAd); + } else if (messageObject.sponsoredRecommended) { + return getString(R.string.SponsoredMessage2Recommended); + } else { + return getString(R.string.SponsoredMessage2); + } + } if (arrowSpan[arrowType] == null) { arrowSpan[arrowType] = new SpannableStringBuilder(">"); int resId; @@ -1102,8 +1113,10 @@ public class FilteredSearchView extends FrameLayout implements NotificationCente String link = null; if (webPage != null && !(webPage instanceof TLRPC.TL_webPageEmpty)) { if (webPage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(parentActivity, parentFragment); - ArticleViewer.getInstance().open(message); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(message) != null) { + return; + } + parentFragment.createArticleViewer(false).open(message); return; } else if (webPage.embed_url != null && webPage.embed_url.length() != 0) { openWebView(webPage, message); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java index c0a6d5a9a..0164040fb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java @@ -87,8 +87,8 @@ public abstract class GradientHeaderActivity extends BaseFragment { public int particlesViewHeight = -1; protected LinearLayoutManager layoutManager; protected boolean useFillLastLayoutManager = true; - private boolean isLandscapeMode; - private int statusBarHeight; + public boolean isLandscapeMode; + public int statusBarHeight; private int firstViewHeight; private final Paint headerBgPaint = new Paint(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 47be79069..b56c9d777 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -8,6 +8,8 @@ package org.telegram.ui; +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; import static org.telegram.ui.Components.Premium.LimitReachedBottomSheet.TYPE_ACCOUNTS; import static org.telegram.ui.Components.Premium.LimitReachedBottomSheet.TYPE_BOOSTS_FOR_USERS; @@ -36,8 +38,6 @@ import android.media.AudioManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.Debug; -import android.os.Environment; import android.os.Parcelable; import android.os.StatFs; import android.os.StrictMode; @@ -190,17 +190,25 @@ import org.telegram.ui.Components.ThemeEditorView; import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.spoilers.SpoilerEffect2; import org.telegram.ui.Components.voip.VoIPHelper; +import org.telegram.ui.Stars.ISuperRipple; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stars.SuperRipple; +import org.telegram.ui.Stars.SuperRippleFallback; import org.telegram.ui.Stories.StoriesController; import org.telegram.ui.Stories.StoriesListPlaceProvider; import org.telegram.ui.Stories.StoryViewer; import org.telegram.ui.Stories.recorder.StoryRecorder; +import org.telegram.ui.Stories.recorder.Weather; import org.telegram.ui.bots.BotWebViewAttachedSheet; import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import org.webrtc.voiceengine.WebRtcAudioTrack; import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -218,6 +226,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; public class LaunchActivity extends BasePermissionsActivity implements INavigationLayout.INavigationLayoutDelegate, NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate { public final static String EXTRA_FORCE_NOT_INTERNAL_APPS = "force_not_internal_apps"; @@ -265,7 +275,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati private FrameLayout shadowTablet; private FrameLayout shadowTabletSide; private SizeNotifierFrameLayout backgroundTablet; - private FrameLayout frameLayout; + public FrameLayout frameLayout; private FireworksOverlay fireworksOverlay; private BottomSheetTabsOverlay bottomSheetTabsOverlay; public DrawerLayoutContainer drawerLayoutContainer; @@ -292,6 +302,10 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati return null; } + public FrameLayout getFrameLayout() { + return frameLayout; + } + private Dialog localeDialog; private boolean loadingLocaleDialog; private HashMap systemLocaleStrings; @@ -322,6 +336,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati private static final int PLAY_SERVICES_REQUEST_CHECK_SETTINGS = 140; public static final int SCREEN_CAPTURE_REQUEST_CODE = 520; + public static final int WEBVIEW_SHARE_API_REQUEST_CODE = 521; public static final int BLUETOOTH_CONNECT_TYPE = 0; private SparseIntArray requestedPermissions = new SparseIntArray(); @@ -485,9 +500,9 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } @Override - public void start() { + public void start(boolean withStars) { setVisibility(VISIBLE); - super.start(); + super.start(withStars); } @Override @@ -585,7 +600,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati showAttachMenuBot(attachMenuBot, null, true); MediaDataController.getInstance(currentAccount).updateAttachMenuBotsInCache(); }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, null); + }, null, null); } else { showAttachMenuBot(attachMenuBot, null, true); } @@ -999,7 +1014,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati drawerLayoutContainer.closeDrawer(); BaseFragment lastFragment = getLastFragment(); if (lastFragment == null) return; - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, attachMenuBot.bot_id, attachMenuBot.bot_id, attachMenuBot.short_name, null, BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, startApp, null, BotWebViewSheet.FLAG_FROM_SIDE_MENU, false); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, attachMenuBot.bot_id, attachMenuBot.bot_id, attachMenuBot.short_name, null, BotWebViewAttachedSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, startApp, null, BotWebViewSheet.FLAG_FROM_SIDE_MENU, false); if (getBottomSheetTabs() != null && getBottomSheetTabs().tryReopenTab(props) != null) { return; } @@ -1011,7 +1026,11 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati webViewSheet.requestWebView(null, props); webViewSheet.show(); } else { - BotWebViewAttachedSheet webViewSheet = lastFragment.createBotViewer(); + BaseFragment fragment = lastFragment; + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + BotWebViewAttachedSheet webViewSheet = fragment.createBotViewer(); webViewSheet.setNeedsContext(false); webViewSheet.setDefaultFullsize(sidemenu); webViewSheet.setParentActivity(this); @@ -1360,6 +1379,21 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati boolean enable; if (currentFragment != null) { enable = currentFragment.isLightStatusBar(); + if (currentFragment.getParentLayout() instanceof ActionBarLayout) { + ActionBarLayout actionBarLayout1 = (ActionBarLayout) currentFragment.getParentLayout(); + if (actionBarLayout1.getSheetFragment(false) != null && actionBarLayout1.getSheetFragment(false).getLastSheet() != null) { +// BaseFragment sheetFragment = actionBarLayout1.getSheetFragment(false); + BaseFragment.AttachedSheet sheet = actionBarLayout1.getSheetFragment(false).getLastSheet(); + if (sheet.isShown()) { + enable = sheet.isAttachedLightStatusBar(); + } + } else if (currentFragment.sheetsStack != null && !currentFragment.sheetsStack.isEmpty()) { + BaseFragment.AttachedSheet sheet = currentFragment.sheetsStack.get(currentFragment.sheetsStack.size() - 1); + if (sheet.isShown()) { + enable = sheet.isAttachedLightStatusBar(); + } + } + } } else { int color = Theme.getColor(Theme.key_actionBarDefault, null, true); enable = ColorUtils.calculateLuminance(color) > 0.7f; @@ -1367,8 +1401,20 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati AndroidUtilities.setLightStatusBar(getWindow(), enable, forceLightStatusBar); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && checkNavigationBar && (!useCurrentFragment || currentFragment == null || !currentFragment.isInPreviewMode())) { - final int color = currentFragment != null && useCurrentFragment ? currentFragment.getNavigationBarColor() : Theme.getColor(Theme.key_windowBackgroundGray, null, true); + int color = currentFragment != null && useCurrentFragment ? currentFragment.getNavigationBarColor() : Theme.getColor(Theme.key_windowBackgroundGray, null, true); + if (actionBarLayout.getSheetFragment(false) != null) { + BaseFragment sheetFragment = actionBarLayout.getSheetFragment(false); + if (sheetFragment.sheetsStack != null) { + for (int i = 0; i < sheetFragment.sheetsStack.size(); ++i) { + BaseFragment.AttachedSheet sheet = sheetFragment.sheetsStack.get(i); + if (sheet.attachedToParent()) { + color = sheet.getNavigationBarColor(color); + } + } + } + } setNavigationBarColor(color, checkButtons); + setLightNavigationBar(AndroidUtilities.computePerceivedBrightness(color) >= .721f); } } if ((SharedConfig.noStatusBar || forceLightStatusBar) && Build.VERSION.SDK_INT >= 21 && checkStatusBar) { @@ -1745,6 +1791,11 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati PhotoViewer.getInstance().closePhoto(false, true); } StoryRecorder.destroyInstance(); + dismissAllWeb(); + } + if (webviewShareAPIDoneListener != null) { + webviewShareAPIDoneListener.run(true); + webviewShareAPIDoneListener = null; } int flags = intent.getFlags(); String action = intent.getAction(); @@ -2125,10 +2176,18 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati String attachMenuBotToOpen = null; String attachMenuBotChoose = null; boolean botCompact = false; + boolean openProfile = false; int storyId = 0; final String scheme = data.getScheme(); if (scheme != null) { switch (scheme) { + case "tonsite": + Browser.openUrl(this, data); + intent.setAction(null); + if (progress != null) { + progress.end(); + } + return false; case "http": case "https": { String host = data.getHost().toLowerCase(); @@ -2361,6 +2420,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati attachMenuBotChoose = data.getQueryParameter("choose"); attachMenuBotToOpen = data.getQueryParameter("attach"); botCompact = TextUtils.equals(data.getQueryParameter("mode"), "compact"); + openProfile = data.getBooleanQueryParameter("profile", false); threadId = Utilities.parseLong(data.getQueryParameter("thread")); text = data.getQueryParameter("text"); if (data.getQuery() != null) { @@ -2411,6 +2471,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } botAppMaybe = data.getQueryParameter("appname"); startApp = data.getQueryParameter("startapp"); + openProfile = data.getBooleanQueryParameter("profile", false); if ("telegrampassport".equals(username)) { username = null; auth = new HashMap<>(); @@ -2759,6 +2820,17 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati url = url.replace("tg:message", "tg://telegram.org").replace("tg://message", "tg://telegram.org"); data = Uri.parse(url); chatLinkSlug = data.getQueryParameter("slug"); + } else if (url.startsWith("tg:stars_topup") || url.startsWith("tg://stars_topup")) { + url = url.replace("tg:stars_topup", "tg://telegram.org").replace("tg://stars_topup", "tg://telegram.org"); + data = Uri.parse(url); + long balance = 0; + try { + balance = Long.parseLong(data.getQueryParameter("balance")); + } catch (Exception e) { + FileLog.e(e); + } + String purpose = data.getQueryParameter("purpose"); + StarsController.getInstance(intentAccount[0]).showStarsTopup(this, balance, purpose); } else { unsupportedUrl = url.replace("tg://", "").replace("tg:", ""); int index; @@ -2813,7 +2885,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati if (message != null && message.startsWith("@")) { message = " " + message; } - runLinkRequest(intentAccount[0], username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, login, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 0, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, startApp, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram); + runLinkRequest(intentAccount[0], username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, login, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 0, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, startApp, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile); } else { try (Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null)) { if (cursor != null) { @@ -2945,6 +3017,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati ChatActivity fragment = new ChatActivity(args); if (getActionBarLayout().presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) { pushOpened = true; + LaunchActivity.dismissAllWeb(); drawerLayoutContainer.closeDrawer(); } } @@ -2980,6 +3053,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } if (getActionBarLayout().presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) { pushOpened = true; + LaunchActivity.dismissAllWeb(); drawerLayoutContainer.closeDrawer(); } } @@ -2989,6 +3063,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati ChatActivity fragment = new ChatActivity(args); if (getActionBarLayout().presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) { pushOpened = true; + LaunchActivity.dismissAllWeb(); drawerLayoutContainer.closeDrawer(); } } else if (showDialogsList) { @@ -3512,6 +3587,69 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } + private String readImport(Uri uri) { + final String filename = FileLoader.fixFileName(MediaController.getFileName(uri)); + if (filename != null && filename.endsWith(".zip")) { + String content = null; + try { + try (ZipInputStream zis = new ZipInputStream(getContentResolver().openInputStream(uri))) { + ZipEntry zipEntry = zis.getNextEntry(); + while (zipEntry != null) { + if (zipEntry.getName().endsWith(".txt")) { + try { + int linesCount = 0; + BufferedReader r = new BufferedReader(new InputStreamReader(zis)); + StringBuilder total = new StringBuilder(); + for (String line; (line = r.readLine()) != null && linesCount < 100; ) { + total.append(line).append('\n'); + linesCount++; + } + content = total.toString(); + } catch (Exception e) { + FileLog.e(e); + return null; + } + break; + } + zipEntry = zis.getNextEntry(); + } + zis.closeEntry(); + } catch (IOException e) { + FileLog.e(e); + } + } catch (Exception e2) { + FileLog.e(e2); + } + return content; + } else { + String content; + InputStream inputStream = null; + try { + int linesCount = 0; + inputStream = getContentResolver().openInputStream(uri); + BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder total = new StringBuilder(); + for (String line; (line = r.readLine()) != null && linesCount < 100; ) { + total.append(line).append('\n'); + linesCount++; + } + content = total.toString(); + } catch (Exception e) { + FileLog.e(e); + return null; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (Exception e2) { + FileLog.e(e2); + } + } + return content; + } + } + private void runImportRequest(final Uri importUri, ArrayList documents) { final int intentAccount = UserConfig.selectedAccount; @@ -3519,30 +3657,8 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati final int[] requestId = new int[]{0}; Runnable cancelRunnable = null; - String content; - InputStream inputStream = null; - try { - int linesCount = 0; - inputStream = getContentResolver().openInputStream(importUri); - BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); - StringBuilder total = new StringBuilder(); - for (String line; (line = r.readLine()) != null && linesCount < 100; ) { - total.append(line).append('\n'); - linesCount++; - } - content = total.toString(); - } catch (Exception e) { - FileLog.e(e); - return; - } finally { - try { - if (inputStream != null) { - inputStream.close(); - } - } catch (Exception e2) { - FileLog.e(e2); - } - } + String content = readImport(importUri); + if (content == null) return; final TLRPC.TL_messages_checkHistoryImport req = new TLRPC.TL_messages_checkHistoryImport(); req.import_head = content; requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { @@ -3769,9 +3885,9 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati final boolean forceNotInternalForApps, final int storyId, final boolean isBoost, - final String chatLinkSlug, boolean botCompact, boolean openedTelegram) { + final String chatLinkSlug, boolean botCompact, boolean openedTelegram, boolean openProfile) { if (state == 0 && ChatActivity.SCROLL_DEBUG_DELAY && progress != null) { - Runnable runnable = () -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram); + Runnable runnable = () -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile); progress.init(); progress.onCancel(() -> AndroidUtilities.cancelRunOnUIThread(runnable)); AndroidUtilities.runOnUIThread(runnable, 7500); @@ -3781,7 +3897,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati if (account != intentAccount) { switchToAccount(account, true); } - runLinkRequest(account, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram); + runLinkRequest(account, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile); }).show(); return; } else if (code != null) { @@ -3972,7 +4088,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati getAttachMenuBot.bot = MessagesController.getInstance(intentAccount).getInputUser(peerId); ConnectionsManager.getInstance(intentAccount).sendRequest(getAttachMenuBot, (response1, error1) -> AndroidUtilities.runOnUIThread(() -> { if (error1 != null) { - AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram)); + AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile)); } else if (response1 instanceof TLRPC.TL_attachMenuBotsBot) { TLRPC.TL_attachMenuBotsBot bot = (TLRPC.TL_attachMenuBotsBot) response1; TLRPC.TL_attachMenuBot attachBot = bot.bot; @@ -3993,8 +4109,8 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, botAttachable, true, botCompact, openedTelegram); - }, null); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, botAttachable, true, botCompact, openedTelegram, openProfile); + }, null, progress != null ? progress::end : null); } else if (attachBot.request_write_access || forceNotInternalForApps) { AtomicBoolean allowWrite = new AtomicBoolean(true); AlertsCreator.createBotLaunchAlert(getLastFragment(), allowWrite, user, () -> { @@ -4011,15 +4127,15 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram, openProfile); }); } else { - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram, openProfile); } } })); } else { - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram, openProfile); } return; } @@ -4033,7 +4149,12 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } - if ((setAsAttachBot != null || botAppStartParam != null) && attachMenuBotToOpen == null) { + if (botAppStartParam != null) { + TLRPC.User user = MessagesController.getInstance(intentAccount).getUser(peerId); + if (user != null && user.bot) { + MessagesController.getInstance(intentAccount).openApp(null, user, 0, progress); + } + } else if (setAsAttachBot != null && attachMenuBotToOpen == null) { TLRPC.User user = MessagesController.getInstance(intentAccount).getUser(peerId); if (user != null && user.bot) { if (user.bot_attach_menu) { @@ -4312,7 +4433,21 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati ((ChatActivity) lastFragment).openAttachBotLayout(attachMenuBotToOpen); } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialog_id); - if (chat != null && chat.forum) { + if (openProfile) { + try { + dismissLoading.run(); + } catch (Exception e) { + FileLog.e(e); + } + if (LaunchActivity.this.isFinishing()) return; + Bundle profile_args = new Bundle(); + if (peerId < 0) { + profile_args.putLong("chat_id", -peerId); + } else { + profile_args.putLong("user_id", peerId); + } + getActionBarLayout().presentFragment(new ProfileActivity(profile_args)); + } else if (chat != null && chat.forum) { Long topicId = threadId; if (topicId == null && messageId != null) { topicId = (long) (int) messageId; @@ -4501,6 +4636,26 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } + } else if (invite.subscription_pricing != null && !invite.can_refulfill_subscription) { + final long stars = invite.subscription_pricing.amount; + MessagesController.getInstance(intentAccount).putChat(invite.chat, false); + StarsController.getInstance(currentAccount).subscribeTo(group, invite, (status, dialogId) -> { + if ("paid".equals(status) && dialogId != 0) { + AndroidUtilities.runOnUIThread(() -> { + BaseFragment lastFragment = getSafeLastFragment(); + if (lastFragment == null) return; + BaseFragment chatActivity = ChatActivity.of(dialogId); + lastFragment.presentFragment(chatActivity); + + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + if (chat != null) { + AndroidUtilities.runOnUIThread(() -> { + BulletinFactory.of(chatActivity).createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsSubscriptionCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsSubscriptionCompletedText", (int) stars, chat.title))).show(true); + }, 250); + } + }); + } + }); } else { BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); fragment.showDialog(new JoinGroupAlert(LaunchActivity.this, invite, group, fragment, (fragment instanceof ChatActivity ? ((ChatActivity) fragment).themeDelegate : null))); @@ -4640,7 +4795,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati }); presentFragment(fragment, false, true); } else if (auth != null) { - final int bot_id = Utilities.parseInt(auth.get("bot_id")); + final long bot_id = Utilities.parseLong(auth.get("bot_id")); if (bot_id == 0) { return; } @@ -5035,7 +5190,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati final boolean isBoost, final String chatLinkSlug, TLRPC.User user, - Runnable dismissLoading, boolean botAttachable, boolean ignoreInactive, boolean botCompact, boolean openedTelegram) { + Runnable dismissLoading, boolean botAttachable, boolean ignoreInactive, boolean botCompact, boolean openedTelegram, boolean openProfile) { TLRPC.TL_messages_getBotApp getBotApp = new TLRPC.TL_messages_getBotApp(); TLRPC.TL_inputBotAppShortName app = new TLRPC.TL_inputBotAppShortName(); @@ -5047,7 +5202,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati progress.end(); } if (error1 != null) { - AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram)); + AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile)); } else { TLRPC.TL_messages_botApp botApp = (TLRPC.TL_messages_botApp) response1; AndroidUtilities.runOnUIThread(() -> { @@ -5057,7 +5212,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati BaseFragment lastFragment = mainFragmentsStack == null || mainFragmentsStack.isEmpty() ? null : mainFragmentsStack.get(mainFragmentsStack.size() - 1); Runnable loadBotSheet = () -> { if (lastFragment == null || !isActive || isFinishing() || isDestroyed()) return; - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(intentAccount, user.id, user.id, null, null, BotWebViewSheet.TYPE_WEB_VIEW_BOT_APP, 0, false, botApp.app, allowWrite.get(), botAppStartParam, user, 0, botCompact); + WebViewRequestProps props = WebViewRequestProps.of(intentAccount, user.id, user.id, null, null, BotWebViewAttachedSheet.TYPE_WEB_VIEW_BOT_APP, 0, false, botApp.app, allowWrite.get(), botAppStartParam, user, 0, botCompact); if (getBottomSheetTabs() != null && getBottomSheetTabs().tryReopenTab(props) != null) { return; } @@ -5073,12 +5228,16 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati sheet.showJustAddedBulletin(); } } else { - BotWebViewAttachedSheet sheet = lastFragment.createBotViewer(); + BaseFragment fragment = lastFragment; + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + BotWebViewAttachedSheet sheet = fragment.createBotViewer(); sheet.setWasOpenedByLinkIntent(openedTelegram); sheet.setDefaultFullsize(!botCompact); sheet.setNeedsContext(false); sheet.setParentActivity(LaunchActivity.this); - sheet.requestWebView(lastFragment, props); + sheet.requestWebView(fragment, props); sheet.show(); if (botApp.inactive || forceNotInternalForApps) { sheet.showJustAddedBulletin(); @@ -5091,7 +5250,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } else if (botApp.inactive && botAttachable) { WebAppDisclaimerAlert.show(this, (allowSendMessage) -> { loadBotSheet.run(); - }, null); + }, null, progress != null ? progress::end : null); } else if (botApp.request_write_access || forceNotInternalForApps) { AlertsCreator.createBotLaunchAlert(lastFragment, allowWrite, user, loadBotSheet); } else { @@ -5324,7 +5483,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati }); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, attachMenuBot.request_write_access ? user : null); + }, attachMenuBot.request_write_access ? user : null, null); } } else { BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.BotCantAddToAttachMenu)).show(); @@ -5994,6 +6153,11 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } else if (requestCode == PLAY_SERVICES_REQUEST_CHECK_SETTINGS) { LocationController.getInstance(currentAccount).startFusedLocationRequest(resultCode == Activity.RESULT_OK); + } else if (requestCode == WEBVIEW_SHARE_API_REQUEST_CODE) { + if (webviewShareAPIDoneListener != null) { + webviewShareAPIDoneListener.run(resultCode == RESULT_OK); + webviewShareAPIDoneListener = null; + } } else { ThemeEditorView editorView = ThemeEditorView.getInstance(); if (editorView != null) { @@ -6022,6 +6186,11 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } + private Utilities.Callback webviewShareAPIDoneListener; + public void whenWebviewShareAPIDone(Utilities.Callback listener) { + webviewShareAPIDoneListener = listener; + } + @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); @@ -6046,6 +6215,9 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati VoIPFragment.onRequestPermissionsResult(requestCode, permissions, grantResults); StoryRecorder.onRequestPermissionsResult(requestCode, permissions, grantResults); NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.onRequestPermissionResultReceived, requestCode, permissions, grantResults); + if (requestCode == Weather.LOCATION_REQUEST) { + Weather.receivePermissionIntent(permissions, grantResults); + } if (requestedPermissions.get(requestCode, -1) >= 0) { int type = requestedPermissions.get(requestCode, -1); @@ -6280,8 +6452,14 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati if (ApplicationLoader.applicationLoaderInstance != null) { ApplicationLoader.applicationLoaderInstance.onResume(); } + if (whenResumed != null) { + whenResumed.run(); + whenResumed = null; + } } + public static Runnable whenResumed; + private void invalidateTabletMode() { Boolean wasTablet = AndroidUtilities.getWasTablet(); if (wasTablet == null) { @@ -6531,8 +6709,11 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati if (mainFragmentsStack.isEmpty()) { return; } - ArticleViewer.getInstance().setParentActivity(this, mainFragmentsStack.get(mainFragmentsStack.size() - 1)); - ArticleViewer.getInstance().open((TLRPC.TL_webPage) args[0], (String) args[1]); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab((TLRPC.TL_webPage) args[0]) != null) { + return; + } + BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); + fragment.createArticleViewer(false).open((TLRPC.TL_webPage) args[0], (String) args[1]); } else if (id == NotificationCenter.hasNewContactsToImport) { if (actionBarLayout == null || actionBarLayout.getFragmentStack().isEmpty()) { return; @@ -7610,14 +7791,14 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } else if (!mainFragmentsStack.isEmpty() && (!PhotoViewer.hasInstance() || !PhotoViewer.getInstance().isVisible()) && event.getRepeatCount() == 0) { BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); - if (fragment instanceof ChatActivity) { + if (fragment instanceof ChatActivity && !BaseFragment.hasSheets(fragment)) { if (((ChatActivity) fragment).maybePlayVisibleVideo()) { return true; } } if (AndroidUtilities.isTablet() && !rightFragmentsStack.isEmpty()) { fragment = rightFragmentsStack.get(rightFragmentsStack.size() - 1); - if (fragment instanceof ChatActivity) { + if (fragment instanceof ChatActivity && !BaseFragment.hasSheets(fragment)) { if (((ChatActivity) fragment).maybePlayVisibleVideo()) { return true; } @@ -8276,4 +8457,50 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati } } } + + public static void dismissAllWeb() { + BaseFragment lastFragment = getSafeLastFragment(); + if (lastFragment == null) return; + + BaseFragment sheetFragment = + lastFragment.getParentLayout() instanceof ActionBarLayout ? + ((ActionBarLayout) lastFragment.getParentLayout()).getSheetFragment(false) : + null; + + if (sheetFragment != null && sheetFragment.sheetsStack != null) { + for (int i = sheetFragment.sheetsStack.size() - 1; i >= 0; --i) { + BaseFragment.AttachedSheet sheet = sheetFragment.sheetsStack.get(i); + sheet.dismiss(true); + } + } + if (lastFragment != null && lastFragment.sheetsStack != null) { + for (int i = lastFragment.sheetsStack.size() - 1; i >= 0; --i) { + BaseFragment.AttachedSheet sheet = lastFragment.sheetsStack.get(i); + sheet.dismiss(true); + } + } + } + + public static void makeRipple(float x, float y, float intensity) { + if (instance == null) return; + instance.makeRippleInternal(x, y, intensity); + } + + private ISuperRipple currentRipple; + private void makeRippleInternal(float x, float y, float intensity) { + View parent = getWindow().getDecorView(); + if (parent == null) return; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (currentRipple == null || currentRipple.view != parent) { + currentRipple = new SuperRipple(parent); + } + } else if (Build.VERSION.SDK_INT >= 26) { + if (currentRipple == null || currentRipple.view != parent) { + currentRipple = new SuperRippleFallback(parent); + } + } + if (currentRipple != null) { + currentRipple.animate(x, y, intensity); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java index 1b503e1dc..4c038b5fb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java @@ -1,5 +1,9 @@ package org.telegram.ui; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.LayoutTransition; import android.annotation.SuppressLint; import android.content.Context; @@ -17,14 +21,21 @@ import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BillingController; +import org.telegram.messenger.ChatObject; import org.telegram.messenger.Emoji; +import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; +import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; @@ -33,14 +44,18 @@ import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ActionBar.ThemeDescription; +import org.telegram.ui.Cells.EditTextCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.TextCheckCell; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; import org.telegram.ui.Components.AlertsCreator; +import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.SizeNotifierFrameLayout; import org.telegram.ui.Components.SlideChooseView; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stories.recorder.KeyboardNotifier; import java.util.ArrayList; @@ -56,18 +71,25 @@ public class LinkEditActivity extends BaseFragment { TLRPC.TL_chatInviteExported inviteToEdit; private TextCheckCell approveCell; + private TextInfoPrivacyCell approveHintCell; + private TextCheckCell subCell; + private EditTextCell subEditPriceCell; + private TextView subPriceView; + private TextInfoPrivacyCell subInfoCell; private TextView timeEditText; private HeaderCell timeHeaderCell; private TextInfoPrivacyCell divider; private HeaderCell usesHeaderCell; private EditText usesEditText; private TextInfoPrivacyCell dividerUses; + private FrameLayout buttonLayout; private TextView buttonTextView; private TextSettingsCell revokeLink; private ScrollView scrollView; private EditText nameEditText; private TextInfoPrivacyCell dividerName; private TextView createTextView; + private int shakeDp = -3; private boolean ignoreSet; private boolean finished; @@ -96,9 +118,9 @@ public class LinkEditActivity extends BaseFragment { actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); if (type == CREATE_TYPE) { - actionBar.setTitle(LocaleController.getString("NewLink", R.string.NewLink)); + actionBar.setTitle(getString("NewLink", R.string.NewLink)); } else if (type == EDIT_TYPE) { - actionBar.setTitle(LocaleController.getString("EditLink", R.string.EditLink)); + actionBar.setTitle(getString("EditLink", R.string.EditLink)); } actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override @@ -116,85 +138,83 @@ public class LinkEditActivity extends BaseFragment { createTextView.setOnClickListener(this::onCreateClicked); createTextView.setSingleLine(); if (type == CREATE_TYPE) { - createTextView.setText(LocaleController.getString("CreateLinkHeader", R.string.CreateLinkHeader)); + createTextView.setText(getString("CreateLinkHeader", R.string.CreateLinkHeader)); } else if (type == EDIT_TYPE) { - createTextView.setText(LocaleController.getString("SaveLinkHeader", R.string.SaveLinkHeader)); + createTextView.setText(getString("SaveLinkHeader", R.string.SaveLinkHeader)); } createTextView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultTitle)); createTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14f); createTextView.setTypeface(AndroidUtilities.bold()); - createTextView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(8), AndroidUtilities.dp(18), AndroidUtilities.dp(8)); - int topSpace = actionBar.getOccupyStatusBar() ? (AndroidUtilities.statusBarHeight / AndroidUtilities.dp(2)) : 0; + createTextView.setPadding(dp(18), dp(8), dp(18), dp(8)); + int topSpace = actionBar.getOccupyStatusBar() ? (AndroidUtilities.statusBarHeight / dp(2)) : 0; actionBar.addView(createTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.END | Gravity.CENTER_VERTICAL, 0, topSpace, 0, 0)); scrollView = new ScrollView(context); SizeNotifierFrameLayout contentView = new SizeNotifierFrameLayout(context) { - int oldKeyboardHeight; - - @Override - protected AdjustPanLayoutHelper createAdjustPanLayoutHelper() { - AdjustPanLayoutHelper panLayoutHelper = new AdjustPanLayoutHelper(this) { - - @Override - protected void onTransitionStart(boolean keyboardVisible, int contentHeight) { - super.onTransitionStart(keyboardVisible, contentHeight); - scrollView.getLayoutParams().height = contentHeight; - } - - @Override - protected void onTransitionEnd() { - super.onTransitionEnd(); - scrollView.getLayoutParams().height = LinearLayout.LayoutParams.MATCH_PARENT; - scrollView.requestLayout(); - } - - @Override - protected void onPanTranslationUpdate(float y, float progress, boolean keyboardVisible) { - super.onPanTranslationUpdate(y, progress, keyboardVisible); - setTranslationY(0); - } - - @Override - protected boolean heightAnimationEnabled() { - return !finished; - } - }; - panLayoutHelper.setCheckHierarchyHeight(true); - return panLayoutHelper; - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - adjustPanLayoutHelper.onAttach(); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - adjustPanLayoutHelper.onDetach(); - } +// int oldKeyboardHeight; +// +// @Override +// protected AdjustPanLayoutHelper createAdjustPanLayoutHelper() { +// AdjustPanLayoutHelper panLayoutHelper = new AdjustPanLayoutHelper(this) { +// @Override +// protected void onTransitionStart(boolean keyboardVisible, int contentHeight) { +// super.onTransitionStart(keyboardVisible, contentHeight); +// scrollView.getLayoutParams().height = contentHeight; +// } +// @Override +// protected void onTransitionEnd() { +// super.onTransitionEnd(); +// scrollView.getLayoutParams().height = LinearLayout.LayoutParams.MATCH_PARENT; +// scrollView.requestLayout(); +// } +// @Override +// protected void onPanTranslationUpdate(float y, float progress, boolean keyboardVisible) { +// super.onPanTranslationUpdate(y, progress, keyboardVisible); +// setTranslationY(0); +// buttonLayout.setTranslationY(y); +// } +// @Override +// protected boolean heightAnimationEnabled() { +// return !finished; +// } +// }; +// panLayoutHelper.setCheckHierarchyHeight(true); +// return panLayoutHelper; +// } +// +// @Override +// protected void onAttachedToWindow() { +// super.onAttachedToWindow(); +// adjustPanLayoutHelper.onAttach(); +// } +// +// @Override +// protected void onDetachedFromWindow() { +// super.onDetachedFromWindow(); +// adjustPanLayoutHelper.onDetach(); +// } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measureKeyboardHeight(); - boolean isNeedScrollToEnd = usesEditText.isCursorVisible() || nameEditText.isCursorVisible(); - if (oldKeyboardHeight != keyboardHeight && keyboardHeight > AndroidUtilities.dp(20) && isNeedScrollToEnd) { - scrollToEnd = true; - invalidate(); - } else if (scrollView.getScrollY() == 0 && !isNeedScrollToEnd) { - scrollToStart = true; - invalidate(); - } +// boolean isNeedScrollToEnd = usesEditText.isCursorVisible() || nameEditText.isCursorVisible(); +// if (oldKeyboardHeight != keyboardHeight && keyboardHeight > dp(20) && isNeedScrollToEnd) { +// scrollToEnd = true; +// invalidate(); +// } else if (scrollView.getScrollY() == 0 && !isNeedScrollToEnd) { +// scrollToStart = true; +// invalidate(); +// } - if (keyboardHeight != 0 && keyboardHeight < AndroidUtilities.dp(20)) { + if (keyboardHeight != 0 && keyboardHeight < dp(20)) { usesEditText.clearFocus(); nameEditText.clearFocus(); } + buttonLayout.setVisibility(keyboardHeight > dp(20) ? GONE : VISIBLE); - oldKeyboardHeight = keyboardHeight; +// oldKeyboardHeight = keyboardHeight; } @Override @@ -228,33 +248,33 @@ public class LinkEditActivity extends BaseFragment { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// super.onMeasure(widthMeasureSpec, heightMeasureSpec); +// int elementsHeight = 0; +// int h = MeasureSpec.getSize(heightMeasureSpec); +// for (int i = 0; i < getChildCount(); i++) { +// View child = getChildAt(i); +// if (child != buttonTextView && child.getVisibility() != View.GONE) { +// elementsHeight += child.getMeasuredHeight(); +// } +// } +// elementsHeight += dp(79); +// +// int topMargin; +// int buttonH = dp(48) + dp(24) + dp(16); +// if (elementsHeight >= h - buttonH) { +// topMargin = dp(24); +// } else { +// topMargin = dp(24) + (h - buttonH) - elementsHeight; +// } +// +// if (((LayoutParams) buttonLayout.getLayoutParams()).topMargin != topMargin) { +// int oldMargin = ((LayoutParams) buttonLayout.getLayoutParams()).topMargin; +// ((LayoutParams) buttonLayout.getLayoutParams()).topMargin = topMargin; +// if (!firstLayout) { +// buttonLayout.setTranslationY(oldMargin - topMargin); +// buttonLayout.animate().translationY(0).setDuration(AdjustPanLayoutHelper.keyboardDuration).setInterpolator(AdjustPanLayoutHelper.keyboardInterpolator).start(); +// } super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int elementsHeight = 0; - int h = MeasureSpec.getSize(heightMeasureSpec); - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - if (child != buttonTextView && child.getVisibility() != View.GONE) { - elementsHeight += child.getMeasuredHeight(); - } - } - - int topMargin; - int buttonH = AndroidUtilities.dp(48) + AndroidUtilities.dp(24) + AndroidUtilities.dp(16); - if (elementsHeight >= h - buttonH) { - topMargin = AndroidUtilities.dp(24); - } else { - topMargin = AndroidUtilities.dp(24) + (h - buttonH) - elementsHeight; - } - - if (((LayoutParams) buttonTextView.getLayoutParams()).topMargin != topMargin) { - int oldMargin = ((LayoutParams) buttonTextView.getLayoutParams()).topMargin; - ((LayoutParams) buttonTextView.getLayoutParams()).topMargin = topMargin; - if (!firstLayout) { - buttonTextView.setTranslationY(oldMargin - topMargin); - buttonTextView.animate().translationY(0).setDuration(AdjustPanLayoutHelper.keyboardDuration).setInterpolator(AdjustPanLayoutHelper.keyboardInterpolator).start(); - } - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } } @Override @@ -264,28 +284,32 @@ public class LinkEditActivity extends BaseFragment { } }; LayoutTransition transition = new LayoutTransition(); - transition.setDuration(100); + transition.setDuration(420); + transition.setInterpolator(LayoutTransition.APPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.CHANGE_APPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.CHANGING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.CHANGE_DISAPPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.DISAPPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); linearLayout.setLayoutTransition(transition); linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(0, 0, 0, dp(79)); scrollView.addView(linearLayout); buttonTextView = new TextView(context); - buttonTextView.setPadding(AndroidUtilities.dp(34), 0, AndroidUtilities.dp(34), 0); + buttonTextView.setPadding(dp(34), 0, dp(34), 0); buttonTextView.setGravity(Gravity.CENTER); buttonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); buttonTextView.setTypeface(AndroidUtilities.bold()); if (type == CREATE_TYPE) { - buttonTextView.setText(LocaleController.getString("CreateLink", R.string.CreateLink)); + buttonTextView.setText(getString("CreateLink", R.string.CreateLink)); } else if (type == EDIT_TYPE) { - buttonTextView.setText(LocaleController.getString("SaveLink", R.string.SaveLink)); + buttonTextView.setText(getString("SaveLink", R.string.SaveLink)); } TLRPC.Chat chatLocal = getMessagesController().getChat(chatId); - boolean hasApproveCell = false; if (chatLocal == null || chatLocal.username == null) { - hasApproveCell = true; approveCell = new TextCheckCell(context) { @Override protected void onDraw(Canvas canvas) { @@ -300,37 +324,148 @@ public class LinkEditActivity extends BaseFragment { approveCell.setDrawCheckRipple(true); approveCell.setHeight(56); approveCell.setTag(Theme.key_windowBackgroundUnchecked); - approveCell.setTextAndCheck(LocaleController.getString("ApproveNewMembers", R.string.ApproveNewMembers), false, false); + approveCell.setTextAndCheck(getString(R.string.ApproveNewMembers), false, false); approveCell.setTypeface(AndroidUtilities.bold()); approveCell.setOnClickListener(view -> { + if (subCell != null && subCell.isChecked()) { + AndroidUtilities.shakeViewSpring(subCell, shakeDp = -shakeDp); + return; + } + TextCheckCell cell = (TextCheckCell) view; boolean newIsChecked = !cell.isChecked(); cell.setBackgroundColorAnimated(newIsChecked, Theme.getColor(newIsChecked ? Theme.key_windowBackgroundChecked : Theme.key_windowBackgroundUnchecked)); cell.setChecked(newIsChecked); setUsesVisible(!newIsChecked); firstLayout = true; + + if (subCell != null) { + if (cell.isChecked()) { + subCell.setChecked(false); + subCell.setCheckBoxIcon(R.drawable.permission_locked); + subEditPriceCell.setVisibility(View.GONE); + } else if (inviteToEdit == null) { + subCell.setCheckBoxIcon(0); + } + } }); linearLayout.addView(approveCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 56)); - } - TextInfoPrivacyCell hintCell = new TextInfoPrivacyCell(context); - hintCell.setBackground(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - if (hasApproveCell) { - hintCell.setText(LocaleController.getString("ApproveNewMembersDescription", R.string.ApproveNewMembersDescription)); + approveHintCell = new TextInfoPrivacyCell(context); + approveHintCell.setBackground(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); + approveHintCell.setText(getString(R.string.ApproveNewMembersDescription)); + linearLayout.addView(approveHintCell); + + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(chatId); + if (inviteToEdit == null && ChatObject.isChannelAndNotMegaGroup(MessagesController.getInstance(currentAccount).getChat(chatId)) && chatFull != null && chatFull.paid_media_allowed || inviteToEdit != null && inviteToEdit.subscription_pricing != null) { + subCell = new TextCheckCell(context); + subCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + subCell.setDrawCheckRipple(true); + subCell.setTextAndCheck(getString(R.string.RequireMonthlyFee), false, true); + if (inviteToEdit != null) { + subCell.setCheckBoxIcon(R.drawable.permission_locked); + subCell.setEnabled(false); + } + final Runnable[] keyboardUpdate = new Runnable[1]; + subCell.setOnClickListener(view -> { + if (inviteToEdit != null) { + return; + } + if (approveCell.isChecked()) { + AndroidUtilities.shakeViewSpring(approveCell, shakeDp = -shakeDp); + return; + } + + TextCheckCell cell = (TextCheckCell) view; + cell.setChecked(!cell.isChecked()); + subEditPriceCell.setVisibility(cell.isChecked() ? View.VISIBLE : View.GONE); + AndroidUtilities.cancelRunOnUIThread(keyboardUpdate[0]); + if (cell.isChecked()) { + approveCell.setChecked(false); + approveCell.setCheckBoxIcon(R.drawable.permission_locked); + approveHintCell.setText(getString(R.string.ApproveNewMembersDescriptionFrozen)); + AndroidUtilities.runOnUIThread(keyboardUpdate[0] = () -> { + subEditPriceCell.editText.requestFocus(); + AndroidUtilities.showKeyboard(subEditPriceCell.editText); + }, 60); + } else { + approveCell.setCheckBoxIcon(0); + approveHintCell.setText(getString(R.string.ApproveNewMembersDescription)); + AndroidUtilities.runOnUIThread(keyboardUpdate[0] = () -> { + subEditPriceCell.editText.clearFocus(); + AndroidUtilities.hideKeyboard(subEditPriceCell.editText); + }); + } + }); + linearLayout.addView(subCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + + subPriceView = new TextView(context); + subPriceView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + subPriceView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText3)); + subEditPriceCell = new EditTextCell(context, getString(getConnectionsManager().isTestBackend() ? R.string.RequireMonthlyFeePriceHintTest5Minutes : R.string.RequireMonthlyFeePriceHint), false, -1, resourceProvider) { + private boolean ignoreTextChanged; + @Override + protected void onTextChanged(CharSequence newText) { + super.onTextChanged(newText); + if (ignoreTextChanged) return; + if (TextUtils.isEmpty(newText)) { + subPriceView.setText(""); + } else { + try { + long stars = Long.parseLong(newText.toString()); + if (stars > getMessagesController().starsSubscriptionAmountMax) { + ignoreTextChanged = true; + stars = getMessagesController().starsSubscriptionAmountMax; + setText(Long.toString(stars)); + ignoreTextChanged = false; + } + subPriceView.setText(formatString( + getConnectionsManager().isTestBackend() ? R.string.RequireMonthlyFeePriceTest5Minutes : R.string.RequireMonthlyFeePrice, + BillingController.getInstance().formatCurrency((long) (stars / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000), "USD") + )); + } catch (Exception e) { + FileLog.e(e); + } + } + } + }; + subEditPriceCell.editText.setInputType(InputType.TYPE_CLASS_NUMBER); + subEditPriceCell.editText.setRawInputType(InputType.TYPE_CLASS_NUMBER); + subEditPriceCell.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + subEditPriceCell.hideKeyboardOnEnter(); + subEditPriceCell.addView(subPriceView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 19, 0)); + + ImageView star = subEditPriceCell.setLeftDrawable(getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate()); + star.setScaleX(.83f); + star.setScaleY(.83f); + star.setTranslationY(dp(-1)); + star.setTranslationX(dp(1)); + linearLayout.addView(subEditPriceCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + subEditPriceCell.setVisibility(View.GONE); + + subInfoCell = new TextInfoPrivacyCell(context); + if (inviteToEdit != null) { + subInfoCell.setText(getString(R.string.RequireMonthlyFeeInfoFrozen)); + } else { + subInfoCell.setText(AndroidUtilities.withLearnMore(getString(R.string.RequireMonthlyFeeInfo), () -> { + Browser.openUrl(getContext(), getString(R.string.RequireMonthlyFeeInfoLink)); + })); + } + linearLayout.addView(subInfoCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } } - linearLayout.addView(hintCell); timeHeaderCell = new HeaderCell(context); - timeHeaderCell.setText(LocaleController.getString("LimitByPeriod", R.string.LimitByPeriod)); + timeHeaderCell.setText(getString(R.string.LimitByPeriod)); linearLayout.addView(timeHeaderCell); timeChooseView = new SlideChooseView(context); linearLayout.addView(timeChooseView); timeEditText = new TextView(context); - timeEditText.setPadding(AndroidUtilities.dp(22), 0, AndroidUtilities.dp(22), 0); + timeEditText.setPadding(dp(22), 0, dp(22), 0); timeEditText.setGravity(Gravity.CENTER_VERTICAL); timeEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - timeEditText.setHint(LocaleController.getString("TimeLimitHint", R.string.TimeLimitHint)); - timeEditText.setOnClickListener(view -> AlertsCreator.createDatePickerDialog(context, LocaleController.getString(R.string.ExpireAfter), LocaleController.getString(R.string.SetTimeLimit), -1, (notify, scheduleDate) -> chooseDate(scheduleDate))); + timeEditText.setHint(getString("TimeLimitHint", R.string.TimeLimitHint)); + timeEditText.setOnClickListener(view -> AlertsCreator.createDatePickerDialog(context, getString(R.string.ExpireAfter), getString(R.string.SetTimeLimit), -1, (notify, scheduleDate) -> chooseDate(scheduleDate))); timeChooseView.setCallback(index -> { if (index < dispalyedDates.size()) { @@ -344,11 +479,11 @@ public class LinkEditActivity extends BaseFragment { linearLayout.addView(timeEditText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); divider = new TextInfoPrivacyCell(context); - divider.setText(LocaleController.getString("TimeLimitHelp", R.string.TimeLimitHelp)); + divider.setText(getString("TimeLimitHelp", R.string.TimeLimitHelp)); linearLayout.addView(divider); usesHeaderCell = new HeaderCell(context); - usesHeaderCell.setText(LocaleController.getString("LimitNumberOfUses", R.string.LimitNumberOfUses)); + usesHeaderCell.setText(getString("LimitNumberOfUses", R.string.LimitNumberOfUses)); linearLayout.addView(usesHeaderCell); usesChooseView = new SlideChooseView(context); usesChooseView.setCallback(index -> { @@ -373,10 +508,10 @@ public class LinkEditActivity extends BaseFragment { return super.onTouchEvent(event); } }; - usesEditText.setPadding(AndroidUtilities.dp(22), 0, AndroidUtilities.dp(22), 0); + usesEditText.setPadding(dp(22), 0, dp(22), 0); usesEditText.setGravity(Gravity.CENTER_VERTICAL); usesEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - usesEditText.setHint(LocaleController.getString("UsesLimitHint", R.string.UsesLimitHint)); + usesEditText.setHint(getString("UsesLimitHint", R.string.UsesLimitHint)); usesEditText.setKeyListener(DigitsKeyListener.getInstance("0123456789.")); usesEditText.setInputType(InputType.TYPE_CLASS_NUMBER); usesEditText.addTextChangedListener(new TextWatcher() { @@ -416,7 +551,7 @@ public class LinkEditActivity extends BaseFragment { linearLayout.addView(usesEditText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); dividerUses = new TextInfoPrivacyCell(context); - dividerUses.setText(LocaleController.getString("UsesLimitHelp", R.string.UsesLimitHelp)); + dividerUses.setText(getString("UsesLimitHelp", R.string.UsesLimitHelp)); linearLayout.addView(dividerUses); nameEditText = new EditText(context) { @@ -440,10 +575,10 @@ public class LinkEditActivity extends BaseFragment { nameEditText.setCursorVisible(false); nameEditText.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(32) }); nameEditText.setGravity(Gravity.CENTER_VERTICAL); - nameEditText.setHint(LocaleController.getString("LinkNameHint", R.string.LinkNameHint)); + nameEditText.setHint(getString("LinkNameHint", R.string.LinkNameHint)); nameEditText.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); nameEditText.setLines(1); - nameEditText.setPadding(AndroidUtilities.dp(22), 0, AndroidUtilities.dp(22), 0); + nameEditText.setPadding(dp(22), 0, dp(22), 0); nameEditText.setSingleLine(); nameEditText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); nameEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); @@ -451,23 +586,23 @@ public class LinkEditActivity extends BaseFragment { dividerName = new TextInfoPrivacyCell(context); dividerName.setBackground(Theme.getThemedDrawableByKey(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); - dividerName.setText(LocaleController.getString("LinkNameHelp", R.string.LinkNameHelp)); + dividerName.setText(getString("LinkNameHelp", R.string.LinkNameHelp)); linearLayout.addView(dividerName); if (type == EDIT_TYPE) { revokeLink = new TextSettingsCell(context); revokeLink.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - revokeLink.setText(LocaleController.getString("RevokeLink", R.string.RevokeLink), false); + revokeLink.setText(getString("RevokeLink", R.string.RevokeLink), false); revokeLink.setTextColor(Theme.getColor(Theme.key_text_RedRegular)); revokeLink.setOnClickListener(view -> { AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity()); - builder2.setMessage(LocaleController.getString("RevokeAlert", R.string.RevokeAlert)); - builder2.setTitle(LocaleController.getString("RevokeLink", R.string.RevokeLink)); - builder2.setPositiveButton(LocaleController.getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> { + builder2.setMessage(getString("RevokeAlert", R.string.RevokeAlert)); + builder2.setTitle(getString("RevokeLink", R.string.RevokeLink)); + builder2.setPositiveButton(getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> { callback.revokeLink(inviteToEdit); finishFragment(); }); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder2.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder2.create()); }); @@ -475,7 +610,14 @@ public class LinkEditActivity extends BaseFragment { } contentView.addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - linearLayout.addView(buttonTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM, 16, 15, 16, 16)); + + buttonLayout = new FrameLayout(context); + buttonLayout.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundGray)); + new KeyboardNotifier(contentView, keyboardHeight -> { +// buttonLayout.setVisibility((keyboardHeight > dp(40)) ? View.GONE : View.VISIBLE); + }); + buttonLayout.addView(buttonTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, 16, 15, 16, 16)); + contentView.addView(buttonLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM)); timeHeaderCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); timeChooseView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); @@ -491,7 +633,7 @@ public class LinkEditActivity extends BaseFragment { dividerUses.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); divider.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); + buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); usesEditText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); usesEditText.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); @@ -524,6 +666,15 @@ public class LinkEditActivity extends BaseFragment { return; } + long stars = 0; + if (subCell != null && subCell.isChecked()) { + try { + stars = Long.parseLong(subEditPriceCell.editText.getText().toString()); + } catch (Exception e) { + FileLog.e(e); + } + } + if (type == CREATE_TYPE) { if (progressDialog != null) { progressDialog.dismiss(); @@ -561,6 +712,13 @@ public class LinkEditActivity extends BaseFragment { req.flags |= 16; } + if (stars > 0) { + req.flags |= 32; + req.subscription_pricing = new TLRPC.TL_starsSubscriptionPricing(); + req.subscription_pricing.period = getConnectionsManager().isTestBackend() ? StarsController.PERIOD_5MINUTES : StarsController.PERIOD_MONTHLY; + req.subscription_pricing.amount = stars; + } + getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { loading = false; if (progressDialog != null) { @@ -685,7 +843,7 @@ public class LinkEditActivity extends BaseFragment { String[] options = new String[dispalyedUses.size() + 1]; for (int i = 0; i < options.length; i++) { if (i == options.length - 1) { - options[i] = LocaleController.getString("NoLimit", R.string.NoLimit); + options[i] = getString("NoLimit", R.string.NoLimit); } else { options[i] = dispalyedUses.get(i).toString(); } @@ -717,7 +875,7 @@ public class LinkEditActivity extends BaseFragment { String[] options = new String[dispalyedDates.size() + 1]; for (int i = 0; i < options.length; i++) { if (i == options.length - 1) { - options[i] = LocaleController.getString("NoLimit", R.string.NoLimit); + options[i] = getString("NoLimit", R.string.NoLimit); } else { if (dispalyedDates.get(i) == defaultDates[0]) { options[i] = LocaleController.formatPluralString("Hours", 1); @@ -727,7 +885,7 @@ public class LinkEditActivity extends BaseFragment { options[i] = LocaleController.formatPluralString("Weeks", 1); } else { if (selectedDate < 86400L) { - options[i] = LocaleController.getString("MessageScheduleToday", R.string.MessageScheduleToday); + options[i] = getString("MessageScheduleToday", R.string.MessageScheduleToday); } else if (selectedDate < 364 * 86400L) { options[i] = LocaleController.getInstance().getFormatterScheduleDay().format(originDate * 1000L); } else { @@ -744,7 +902,7 @@ public class LinkEditActivity extends BaseFragment { for (int i = 0; i < defaultDates.length; i++) { dispalyedDates.add(defaultDates[i]); } - String[] options = new String[]{ LocaleController.formatPluralString("Hours", 1), LocaleController.formatPluralString("Days", 1), LocaleController.formatPluralString("Weeks", 1), LocaleController.getString("NoLimit", R.string.NoLimit) }; + String[] options = new String[]{ LocaleController.formatPluralString("Hours", 1), LocaleController.formatPluralString("Days", 1), LocaleController.formatPluralString("Weeks", 1), getString("NoLimit", R.string.NoLimit) }; timeChooseView.setOptions(options.length - 1, options); } @@ -757,7 +915,7 @@ public class LinkEditActivity extends BaseFragment { for (int i = 0; i < defaultUses.length; i++) { dispalyedUses.add(defaultUses[i]); } - String[] options = new String[]{ "1", "10", "100", LocaleController.getString("NoLimit", R.string.NoLimit) }; + String[] options = new String[]{ "1", "10", "100", getString("NoLimit", R.string.NoLimit) }; usesChooseView.setOptions(options.length - 1, options); } @@ -784,6 +942,27 @@ public class LinkEditActivity extends BaseFragment { Emoji.replaceEmoji(builder, nameEditText.getPaint().getFontMetricsInt(), (int) nameEditText.getPaint().getTextSize(), false); nameEditText.setText(builder); } + + if (subCell != null) { + subCell.setChecked(invite.subscription_pricing != null); + } + if (invite.subscription_pricing != null) { + if (approveCell != null) { + approveCell.setChecked(false); + approveCell.setCheckBoxIcon(R.drawable.permission_locked); + } + if (approveHintCell != null) { + approveHintCell.setText(getString(R.string.ApproveNewMembersDescriptionFrozen)); + } + } + if (subEditPriceCell != null) { + subEditPriceCell.setVisibility(invite.subscription_pricing != null ? View.VISIBLE : View.GONE); + subEditPriceCell.setText(Long.toString(invite.subscription_pricing.amount)); + subEditPriceCell.editText.setClickable(false); + subEditPriceCell.editText.setFocusable(false); + subEditPriceCell.editText.setFocusableInTouchMode(false); + subEditPriceCell.editText.setLongClickable(false); + } } } @@ -820,7 +999,7 @@ public class LinkEditActivity extends BaseFragment { Context context = dividerUses.getContext(); dividerUses.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); divider.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); + buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); usesEditText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); usesEditText.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java index da8e5fb68..735aeeef4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java @@ -1,5 +1,9 @@ package org.telegram.ui; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.content.Context; import android.content.Intent; import android.graphics.Canvas; @@ -24,6 +28,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.collection.LongSparseArray; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.recyclerview.widget.DefaultItemAnimator; @@ -36,6 +41,7 @@ import org.telegram.messenger.AnimationNotificationsLocker; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ChatObject; import org.telegram.messenger.ContactsController; +import org.telegram.messenger.DialogObject; import org.telegram.messenger.DocumentObject; import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLog; @@ -62,16 +68,23 @@ import org.telegram.ui.Cells.ShadowSectionCell; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.CombinedDrawable; +import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.DotDividerSpan; import org.telegram.ui.Components.FlickerLoadingView; import org.telegram.ui.Components.InviteLinkBottomSheet; +import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.LinkActionView; import org.telegram.ui.Components.RecyclerItemsEnterAnimator; import org.telegram.ui.Components.RecyclerListView; +import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.TimerParticles; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stories.recorder.HintView2; import java.util.ArrayList; import java.util.HashMap; @@ -99,6 +112,7 @@ public class ManageLinksActivity extends BaseFragment { private int linksStartRow; private int linksEndRow; private int linksLoadingRow; + private int linksInfoRow; private int revokedLinksStartRow; private int revokedLinksEndRow; private int revokedDivider; @@ -123,6 +137,7 @@ public class ManageLinksActivity extends BaseFragment { Drawable linkIcon; Drawable linkIconRevoked; + Drawable linkIconRevenue; boolean hasMore; boolean deletingRevokedLinks; @@ -177,7 +192,7 @@ public class ManageLinksActivity extends BaseFragment { public EmptyView(Context context) { super(context); - setPadding(0, AndroidUtilities.dp(12), 0, AndroidUtilities.dp(12)); + setPadding(0, dp(12), 0, dp(12)); setOrientation(LinearLayout.VERTICAL); stickerView = new BackupImageView(context); @@ -445,6 +460,7 @@ public class ManageLinksActivity extends BaseFragment { adminsHeaderRow = -1; linksHeaderRow = -1; dividerRow = -1; + linksInfoRow = -1; rowCount = 0; @@ -507,7 +523,9 @@ public class ManageLinksActivity extends BaseFragment { linksLoadingRow = rowCount++; } - if (!invites.isEmpty() || !revokedInvites.isEmpty()) { + if (!invites.isEmpty() && linksEndRow == rowCount) { + linksInfoRow = rowCount++; + } else if (!invites.isEmpty() || !revokedInvites.isEmpty()) { lastDivider = rowCount++; } @@ -520,7 +538,7 @@ public class ManageLinksActivity extends BaseFragment { public View createView(Context context) { actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); - actionBar.setTitle(LocaleController.getString("InviteLinks", R.string.InviteLinks)); + actionBar.setTitle(getString("InviteLinks", R.string.InviteLinks)); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override public void onItemClick(int id) { @@ -571,6 +589,8 @@ public class ManageLinksActivity extends BaseFragment { }); recyclerItemsEnterAnimator = new RecyclerItemsEnterAnimator(listView, false); DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator(); + defaultItemAnimator.setDurations(420); + defaultItemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); defaultItemAnimator.setDelayAnimations(false); defaultItemAnimator.setSupportsChangeAnimations(false); listView.setItemAnimator(defaultItemAnimator); @@ -606,9 +626,9 @@ public class ManageLinksActivity extends BaseFragment { } AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks)); - builder.setMessage(LocaleController.getString("DeleteAllRevokedLinkHelp", R.string.DeleteAllRevokedLinkHelp)); - builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface2, i2) -> { + builder.setTitle(getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks)); + builder.setMessage(getString("DeleteAllRevokedLinkHelp", R.string.DeleteAllRevokedLinkHelp)); + builder.setPositiveButton(getString("Delete", R.string.Delete), (dialogInterface2, i2) -> { TLRPC.TL_messages_deleteRevokedExportedChatInvites req = new TLRPC.TL_messages_deleteRevokedExportedChatInvites(); req.peer = getMessagesController().getInputPeer(-currentChatId); if (adminId == getUserConfig().getClientUserId()) { @@ -626,7 +646,7 @@ public class ManageLinksActivity extends BaseFragment { } })); }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } else if (position >= adminsStartRow && position < adminsEndRow) { int p = position - adminsStartRow; @@ -651,6 +671,7 @@ public class ManageLinksActivity extends BaseFragment { linkIcon = ContextCompat.getDrawable(context, R.drawable.msg_link_1); linkIconRevoked = ContextCompat.getDrawable(context, R.drawable.msg_link_2); + linkIconRevenue = ContextCompat.getDrawable(context, R.drawable.large_income); linkIcon.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY)); updateRows(true); @@ -690,7 +711,7 @@ public class ManageLinksActivity extends BaseFragment { messageTextView.setTextColor(Theme.getColor(Theme.key_chats_message)); messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); messageTextView.setGravity(Gravity.CENTER); - messageTextView.setText(isChannel ? LocaleController.getString("PrimaryLinkHelpChannel", R.string.PrimaryLinkHelpChannel) : LocaleController.getString("PrimaryLinkHelp", R.string.PrimaryLinkHelp)); + messageTextView.setText(isChannel ? getString("PrimaryLinkHelpChannel", R.string.PrimaryLinkHelpChannel) : getString("PrimaryLinkHelp", R.string.PrimaryLinkHelp)); addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 52, 143, 52, 18)); } @@ -765,7 +786,7 @@ public class ManageLinksActivity extends BaseFragment { view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; case 3: - view = new CreationTextCell(mContext); + view = new CreationTextCell(mContext, 64, resourceProvider); view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; case 4: @@ -789,13 +810,12 @@ public class ManageLinksActivity extends BaseFragment { case 8: TextSettingsCell revokeAll = new TextSettingsCell(mContext); revokeAll.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - revokeAll.setText(LocaleController.getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks), false); + revokeAll.setText(getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks), false); revokeAll.setTextColor(Theme.getColor(Theme.key_text_RedRegular)); view = revokeAll; break; case 9: TextInfoPrivacyCell cell = new TextInfoPrivacyCell(mContext); - cell.setText(LocaleController.getString("CreateNewLinkHelp", R.string.CreateNewLinkHelp)); cell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); view = cell; break; @@ -804,6 +824,9 @@ public class ManageLinksActivity extends BaseFragment { userCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); view = userCell; break; + case 11: + view = new TextInfoPrivacyCell(mContext, resourceProvider); + break; } view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new RecyclerListView.Holder(view); @@ -837,18 +860,18 @@ public class ManageLinksActivity extends BaseFragment { HeaderCell headerCell = (HeaderCell) holder.itemView; if (position == permanentLinkHeaderRow) { if (isPublic && adminId == getAccountInstance().getUserConfig().clientUserId) { - headerCell.setText(LocaleController.getString("PublicLink", R.string.PublicLink)); + headerCell.setText(getString("PublicLink", R.string.PublicLink)); } else if (adminId == getAccountInstance().getUserConfig().clientUserId) { - headerCell.setText(LocaleController.getString("ChannelInviteLinkTitle", R.string.ChannelInviteLinkTitle)); + headerCell.setText(getString("ChannelInviteLinkTitle", R.string.ChannelInviteLinkTitle)); } else { - headerCell.setText(LocaleController.getString("PermanentLinkForThisAdmin", R.string.PermanentLinkForThisAdmin)); + headerCell.setText(getString("PermanentLinkForThisAdmin", R.string.PermanentLinkForThisAdmin)); } } else if (position == revokedHeader) { - headerCell.setText(LocaleController.getString("RevokedLinks", R.string.RevokedLinks)); + headerCell.setText(getString("RevokedLinks", R.string.RevokedLinks)); } else if (position == linksHeaderRow) { - headerCell.setText(LocaleController.getString("LinksCreatedByThisAdmin", R.string.LinksCreatedByThisAdmin)); + headerCell.setText(getString("LinksCreatedByThisAdmin", R.string.LinksCreatedByThisAdmin)); } else if (position == adminsHeaderRow) { - headerCell.setText(LocaleController.getString("LinksCreatedByOtherAdmins", R.string.LinksCreatedByOtherAdmins)); + headerCell.setText(getString("LinksCreatedByOtherAdmins", R.string.LinksCreatedByOtherAdmins)); } break; case 3: @@ -859,7 +882,7 @@ public class ManageLinksActivity extends BaseFragment { drawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_checkboxCheck), PorterDuff.Mode.MULTIPLY)); CombinedDrawable combinedDrawable = new CombinedDrawable(drawable1, drawable2); - textCell.setTextAndIcon(LocaleController.getString("CreateNewLink", R.string.CreateNewLink), combinedDrawable, !invites.isEmpty()); + textCell.setTextAndIcon(getString("CreateNewLink", R.string.CreateNewLink), combinedDrawable, !invites.isEmpty()); break; case 5: TLRPC.TL_chatInviteExported invite; @@ -901,6 +924,30 @@ public class ManageLinksActivity extends BaseFragment { if (user != null) { userCell.setData(user, ContactsController.formatName(user.first_name, user.last_name), LocaleController.formatPluralString("InviteLinkCount", count), drawDivider); } + break; + case 11: + TextInfoPrivacyCell infoCell = (TextInfoPrivacyCell) holder.itemView; + infoCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); + if (position == linksInfoRow) { + final TLRPC.ChatFull chatFull = getMessagesController().getChatFull(currentChatId); + final TLRPC.Chat chat = getMessagesController().getChat(currentChatId); + if (chatFull != null && chatFull.paid_media_allowed && ChatObject.isChannelAndNotMegaGroup(chat)) { + infoCell.setText(getString(R.string.ChannelLinksInfoPaid)); + } else { + infoCell.setText(getString(R.string.ChannelLinksInfo)); + } + } + break; + case 9: + TextInfoPrivacyCell infoCell2 = (TextInfoPrivacyCell) holder.itemView; + final TLRPC.ChatFull chatFull = getMessagesController().getChatFull(currentChatId); + final TLRPC.Chat chat = getMessagesController().getChat(currentChatId); + if (chatFull != null && chatFull.paid_media_allowed && ChatObject.isChannelAndNotMegaGroup(chat)) { + infoCell2.setText(getString(R.string.ChannelLinksInfoPaid)); + } else { + infoCell2.setText(getString(R.string.ChannelLinksInfo)); + } + break; } } @@ -935,6 +982,8 @@ public class ManageLinksActivity extends BaseFragment { return 9; } else if (position == creatorRow || (position >= adminsStartRow && position < adminsEndRow)) { return 10; + } else if (position == linksInfoRow) { + return 11; } return 1; } @@ -963,7 +1012,7 @@ public class ManageLinksActivity extends BaseFragment { DiffCallback callback = saveListState(); revokedInvites.add(0, oldInvite); updateRecyclerViewAnimated(callback); - BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, LocaleController.getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); + BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); } })); @@ -984,8 +1033,14 @@ public class ManageLinksActivity extends BaseFragment { int lastDrawingState; - TextView titleView; - TextView subtitleView; + private final LinearLayout textLayout; + private final TextView titleView; + private final TextView subtitleView; + + private final LinearLayout priceLayout; + private final TextView priceTitleView; + private final TextView priceSubitleView; + TLRPC.TL_chatInviteExported invite; int position; Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -1007,23 +1062,21 @@ public class ManageLinksActivity extends BaseFragment { paint2.setStyle(Paint.Style.STROKE); paint2.setStrokeCap(Paint.Cap.ROUND); - LinearLayout linearLayout = new LinearLayout(context); - linearLayout.setOrientation(LinearLayout.VERTICAL); - - addView(linearLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 70, 0, 30, 0)); + textLayout = new LinearLayout(context); + textLayout.setOrientation(LinearLayout.VERTICAL); + addView(textLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 64, 0, 30, 0)); titleView = new TextView(context); titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); titleView.setLines(1); titleView.setEllipsize(TextUtils.TruncateAt.END); + textLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); subtitleView = new TextView(context); subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); - - linearLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); - linearLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 6, 0, 0)); + textLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 4.33f, 0, 0)); optionsView = new ImageView(context); optionsView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_ab_other)); @@ -1033,121 +1086,116 @@ public class ManageLinksActivity extends BaseFragment { if (invite == null) { return; } - ArrayList items = new ArrayList<>(); - ArrayList icons = new ArrayList<>(); - final ArrayList actions = new ArrayList<>(); + if (!(fragmentView instanceof ViewGroup)) { + return; + } - boolean redLastItem = false; + ItemOptions options = ItemOptions.makeOptions((ViewGroup) fragmentView, LinkCell.this); if (invite.revoked) { - items.add(LocaleController.getString("Delete", R.string.Delete)); - icons.add(R.drawable.msg_delete); - actions.add(4); - redLastItem = true; + options.add(R.drawable.msg_delete, getString(R.string.Delete), true, () -> { + TLRPC.TL_chatInviteExported inviteFinal = invite; + new AlertDialog.Builder(getParentActivity()) + .setTitle(getString("DeleteLink", R.string.DeleteLink)) + .setMessage(getString("DeleteLinkHelp", R.string.DeleteLinkHelp)) + .setPositiveButton(getString("Delete", R.string.Delete), (dialogInterface2, i2) -> deleteLink(inviteFinal)) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .show(); + }); } else { - items.add(LocaleController.getString("CopyLink", R.string.CopyLink)); - icons.add(R.drawable.msg_copy); - actions.add(0); - - items.add(LocaleController.getString("ShareLink", R.string.ShareLink)); - icons.add(R.drawable.msg_share); - actions.add(1); - - if (!invite.permanent && canEdit) { - items.add(LocaleController.getString("EditLink", R.string.EditLink)); - icons.add(R.drawable.msg_edit); - actions.add(2); - } - - if (canEdit) { - items.add(LocaleController.getString("RevokeLink", R.string.RevokeLink)); - icons.add(R.drawable.msg_delete); - actions.add(3); - redLastItem = true; - } - } - - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setItems(items.toArray(new CharSequence[0]), AndroidUtilities.toIntArray(icons), (dialogInterface, i) -> { - switch (actions.get(i)) { - case 0: - try { - if (invite.link == null) { - return; + options.add(R.drawable.msg_copy, getString(R.string.CopyLink), () -> { + try { + if (invite.link == null) return; + android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE); + android.content.ClipData clip = android.content.ClipData.newPlainText("label", invite.link); + clipboard.setPrimaryClip(clip); + BulletinFactory.createCopyLinkBulletin(ManageLinksActivity.this).show(); + } catch (Exception e) { + FileLog.e(e); + } + }); + options.add(R.drawable.msg_share, getString(R.string.ShareLink), () -> { + try { + if (invite.link == null) return; + showDialog(new ShareAlert(getContext(), null, invite.link, false, invite.link, false, getResourceProvider()) { + @Override + protected void onSend(LongSparseArray dids, int count, TLRPC.TL_forumTopic topic) { + final String str; + if (dids != null && dids.size() == 1) { + long did = dids.valueAt(0).id; + if (did == 0 || did == getUserConfig().getClientUserId()) { + str = getString(R.string.InvLinkToSavedMessages); + } else { + str = formatString(R.string.InvLinkToUser, getMessagesController().getPeerName(did, true)); + } + } else { + str = formatString(R.string.InvLinkToChats, LocaleController.formatPluralString("Chats", count)); + } + Bulletin b = BulletinFactory.of(ManageLinksActivity.this).createSimpleBulletin(R.raw.forward, AndroidUtilities.replaceTags(str)); + b.hideAfterBottomSheet = false; + b.show(true); } - android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE); - android.content.ClipData clip = android.content.ClipData.newPlainText("label", invite.link); - clipboard.setPrimaryClip(clip); - BulletinFactory.createCopyLinkBulletin(ManageLinksActivity.this).show(); - } catch (Exception e) { - FileLog.e(e); - } - break; - case 1: - try { - if (invite.link == null) { - return; - } - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, invite.link); - startActivityForResult(Intent.createChooser(intent, LocaleController.getString("InviteToGroupByLink", R.string.InviteToGroupByLink)), 500); - } catch (Exception e) { - FileLog.e(e); - } - break; - case 2: - editLink(invite); - break; - case 3: - TLRPC.TL_chatInviteExported inviteFinal = invite; - AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity()); - builder2.setMessage(LocaleController.getString("RevokeAlert", R.string.RevokeAlert)); - builder2.setTitle(LocaleController.getString("RevokeLink", R.string.RevokeLink)); - builder2.setPositiveButton(LocaleController.getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> revokeLink(inviteFinal)); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - showDialog(builder2.create()); - break; - case 4: - inviteFinal = invite; - builder2 = new AlertDialog.Builder(getParentActivity()); - builder2.setTitle(LocaleController.getString("DeleteLink", R.string.DeleteLink)); - builder2.setMessage(LocaleController.getString("DeleteLinkHelp", R.string.DeleteLinkHelp)); - builder2.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface2, i2) -> deleteLink(inviteFinal)); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - showDialog(builder2.create()); - break; - } - }); - builder.setTitle(LocaleController.getString("InviteLink", R.string.InviteLink)); - AlertDialog alert = builder.create(); - builder.show(); - if (redLastItem) { - alert.setItemColor(items.size() - 1, Theme.getColor(Theme.key_text_RedBold), Theme.getColor(Theme.key_text_RedRegular)); + }); + } catch (Exception e) { + FileLog.e(e); + } + }); + options.addIf(!invite.permanent && canEdit, R.drawable.msg_edit, getString(R.string.EditLink), () -> editLink(invite)); + options.addIf(canEdit, R.drawable.msg_delete, getString(R.string.RevokeLink), true, () -> { + TLRPC.TL_chatInviteExported inviteFinal = invite; + new AlertDialog.Builder(getParentActivity()) + .setMessage(getString("RevokeAlert", R.string.RevokeAlert)) + .setTitle(getString("RevokeLink", R.string.RevokeLink)) + .setPositiveButton(getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> revokeLink(inviteFinal)) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .show(); + }); } + options.show(); }); optionsView.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 1)); - addView(optionsView, LayoutHelper.createFrame(40, 48, Gravity.RIGHT | Gravity.CENTER_VERTICAL)); - + addView(optionsView, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 0, 8, 0)); setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); setWillNotDraw(false); + + priceLayout = new LinearLayout(context); + priceLayout.setOrientation(LinearLayout.VERTICAL); + + priceTitleView = new TextView(context); + priceTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + priceTitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + priceTitleView.setLines(1); + priceTitleView.setEllipsize(TextUtils.TruncateAt.END); + priceTitleView.setTypeface(AndroidUtilities.bold()); + priceTitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceTitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT)); + + priceSubitleView = new TextView(context); + priceSubitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + priceSubitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); + priceSubitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceSubitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 1, 0, 0)); + addView(priceLayout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 0, 18, 0)); + + priceLayout.setVisibility(View.GONE); } + boolean timerRunning; @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY)); - paint2.setStrokeWidth(AndroidUtilities.dp(2)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(60), MeasureSpec.EXACTLY)); + paint2.setStrokeWidth(dp(2)); } - private TimerParticles timerParticles = new TimerParticles(); + private final TimerParticles timerParticles = new TimerParticles(); @Override protected void onDraw(Canvas canvas) { if (invite == null) { return; } - int cX = AndroidUtilities.dp(36); + int cX = dp(32); int cY = getMeasuredHeight() / 2; int drawState; @@ -1210,14 +1258,14 @@ public class ManageLinksActivity extends BaseFragment { } paint.setColor(color); - canvas.drawCircle(cX, cY, AndroidUtilities.dp(32) / 2f, paint); + canvas.drawCircle(cX, cY, dp(32) / 2f, paint); if (animateHideExpiring || (!invite.expired && invite.expire_date > 0 && !invite.revoked)) { if (animateHideExpiring) { timeProgress = lastDrawExpringProgress; } paint2.setColor(color); - rectF.set(cX - AndroidUtilities.dp(20), cY - AndroidUtilities.dp(20), cX + AndroidUtilities.dp(20), cY + AndroidUtilities.dp(20)); + rectF.set(cX - dp(20), cY - dp(20), cX + dp(20), cY + dp(20)); if (animateToStateProgress != 1f && (!hasProgress(animateFromState) || animateHideExpiring)) { canvas.save(); @@ -1237,16 +1285,19 @@ public class ManageLinksActivity extends BaseFragment { lastDrawExpringProgress = timeProgress; } - if (invite.revoked) { - linkIconRevoked.setBounds(cX - AndroidUtilities.dp(12), cY - AndroidUtilities.dp(12), cX + AndroidUtilities.dp(12), cY + AndroidUtilities.dp(12)); + if (invite.subscription_pricing != null) { + linkIconRevenue.setBounds(cX - dp(12), cY - dp(12), cX + dp(12), cY + dp(12)); + linkIconRevenue.draw(canvas); + } else if (invite.revoked) { + linkIconRevoked.setBounds(cX - dp(12), cY - dp(12), cX + dp(12), cY + dp(12)); linkIconRevoked.draw(canvas); } else { - linkIcon.setBounds(cX - AndroidUtilities.dp(12), cY - AndroidUtilities.dp(12), cX + AndroidUtilities.dp(12), cY + AndroidUtilities.dp(12)); + linkIcon.setBounds(cX - dp(12), cY - dp(12), cX + dp(12), cY + dp(12)); linkIcon.draw(canvas); } if (drawDivider) { - canvas.drawLine(AndroidUtilities.dp(70), getMeasuredHeight() - 1, getMeasuredWidth() + AndroidUtilities.dp(23), getMeasuredHeight(), Theme.dividerPaint); + canvas.drawLine(dp(70), getMeasuredHeight() - 1, getMeasuredWidth() + dp(23), getMeasuredHeight(), Theme.dividerPaint); } } @@ -1255,7 +1306,9 @@ public class ManageLinksActivity extends BaseFragment { } private int getColor(int state, float progress) { - if (state == LINK_STATE_RED) { + if (invite != null && invite.subscription_pricing != null) { + return Theme.getColor(Theme.key_color_green); + } else if (state == LINK_STATE_RED) { return Theme.getColor(Theme.key_chat_attachAudioBackground); } else if (state == LINK_STATE_GREEN) { if (progress > 0.5f) { @@ -1287,12 +1340,32 @@ public class ManageLinksActivity extends BaseFragment { return; } + int rightMargin = dp(30); + if (invite.subscription_pricing != null) { + priceLayout.setVisibility(View.VISIBLE); + optionsView.setVisibility(View.GONE); + + priceTitleView.setText(StarsIntroActivity.replaceStarsWithPlain("⭐️ " + LocaleController.formatNumber(invite.subscription_pricing.amount, ','), .75f)); + if (invite.subscription_pricing.period == StarsController.PERIOD_MONTHLY) { + priceSubitleView.setText(getString(R.string.StarsParticipantSubscriptionPerMonth)); + } else if (invite.subscription_pricing.period == StarsController.PERIOD_5MINUTES) { + priceSubitleView.setText("per 5 minutes"); + } else if (invite.subscription_pricing.period == StarsController.PERIOD_MINUTE) { + priceSubitleView.setText("each minute"); + } + rightMargin = dp(18 + 10) + (int) Math.max(HintView2.measureCorrectly(priceTitleView.getText(), priceTitleView.getPaint()), HintView2.measureCorrectly(priceSubitleView.getText(), priceSubitleView.getPaint())); + } else { + priceLayout.setVisibility(View.GONE); + optionsView.setVisibility(View.GONE); + } + ((MarginLayoutParams) textLayout.getLayoutParams()).rightMargin = rightMargin; + if (!TextUtils.isEmpty(invite.title)) { SpannableStringBuilder builder = new SpannableStringBuilder(invite.title); Emoji.replaceEmoji(builder, titleView.getPaint().getFontMetricsInt(), (int) titleView.getPaint().getTextSize(), false); titleView.setText(builder); } else if (invite.link.startsWith("https://t.me/+")) { - titleView.setText(invite.link.substring("https://t.me/+".length())); + titleView.setText(MessagesController.getInstance(currentAccount).linkPrefix + "/" + invite.link.substring("https://t.me/+".length())); } else if (invite.link.startsWith("https://t.me/joinchat/")) { titleView.setText(invite.link.substring("https://t.me/joinchat/".length())); } else if (invite.link.startsWith("https://")) { @@ -1303,7 +1376,7 @@ public class ManageLinksActivity extends BaseFragment { String joinedString = ""; if (invite.usage == 0 && invite.usage_limit == 0 && invite.requested == 0) { - joinedString = LocaleController.getString("NoOneJoinedYet", R.string.NoOneJoinedYet); + joinedString = getString(invite.subscription_pricing != null ? R.string.NoOneSubscribed : R.string.NoOneJoined); } else { if (invite.usage_limit > 0 && invite.usage == 0 && !invite.expired && !invite.revoked) { joinedString = LocaleController.formatPluralString("CanJoin", invite.usage_limit); @@ -1324,28 +1397,28 @@ public class ManageLinksActivity extends BaseFragment { if (invite.permanent && !invite.revoked) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(joinedString); DotDividerSpan dotDividerSpan = new DotDividerSpan(); - dotDividerSpan.setTopPadding(AndroidUtilities.dp(1.5f)); + dotDividerSpan.setTopPadding(dp(1.5f)); spannableStringBuilder.append(" . ").setSpan(dotDividerSpan, spannableStringBuilder.length() - 3, spannableStringBuilder.length() - 2, 0); - spannableStringBuilder.append(LocaleController.getString("Permanent", R.string.Permanent)); + spannableStringBuilder.append(getString("Permanent", R.string.Permanent)); subtitleView.setText(spannableStringBuilder); } else if (invite.expired || invite.revoked) { if (invite.revoked && invite.usage == 0) { - joinedString = LocaleController.getString("NoOneJoined", R.string.NoOneJoined); + joinedString = getString(invite.subscription_pricing != null ? R.string.NoOneSubscribed : R.string.NoOneJoined); } SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(joinedString); DotDividerSpan dotDividerSpan = new DotDividerSpan(); - dotDividerSpan.setTopPadding(AndroidUtilities.dp(1.5f)); + dotDividerSpan.setTopPadding(dp(1.5f)); spannableStringBuilder.append(" . ").setSpan(dotDividerSpan, spannableStringBuilder.length() - 3, spannableStringBuilder.length() - 2, 0); if (!invite.revoked && invite.usage_limit > 0 && invite.usage >= invite.usage_limit) { - spannableStringBuilder.append(LocaleController.getString("LinkLimitReached", R.string.LinkLimitReached)); + spannableStringBuilder.append(getString("LinkLimitReached", R.string.LinkLimitReached)); } else { - spannableStringBuilder.append(invite.revoked ? LocaleController.getString("Revoked", R.string.Revoked) : LocaleController.getString("Expired", R.string.Expired)); + spannableStringBuilder.append(invite.revoked ? getString("Revoked", R.string.Revoked) : getString("Expired", R.string.Expired)); } subtitleView.setText(spannableStringBuilder); } else if (invite.expire_date > 0) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(joinedString); DotDividerSpan dotDividerSpan = new DotDividerSpan(); - dotDividerSpan.setTopPadding(AndroidUtilities.dp(1.5f)); + dotDividerSpan.setTopPadding(dp(1.5f)); spannableStringBuilder.append(" . ").setSpan(dotDividerSpan, spannableStringBuilder.length() - 3, spannableStringBuilder.length() - 2, 0); long currentTime = System.currentTimeMillis() + timeDif * 1000L; @@ -1422,7 +1495,7 @@ public class ManageLinksActivity extends BaseFragment { } } if (getParentActivity() != null) { - BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, LocaleController.getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); + BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); } } })); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java b/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java index 1c359a17b..781f3a702 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java @@ -13,19 +13,14 @@ import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Insets; -import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; -import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.TextureView; @@ -49,25 +44,20 @@ import androidx.recyclerview.widget.RecyclerView; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.BuildVars; import org.telegram.messenger.ChatMessageSharedResources; -import org.telegram.messenger.ChatObject; import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLog; -import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; -import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBarPopupWindow; import org.telegram.ui.ActionBar.AdjustPanLayoutHelper; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; -import org.telegram.ui.Cells.BotHelpCell; -import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.AnimatedFloat; @@ -77,12 +67,10 @@ import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.EditTextCaption; import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; -import org.telegram.ui.Components.MessageBackgroundDrawable; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.Components.ReactionsContainerLayout; import org.telegram.ui.Components.RecyclerListView; import org.telegram.ui.Components.SizeNotifierFrameLayout; -import org.telegram.ui.Components.SmoothScroller; import org.telegram.ui.Components.Text; import org.telegram.ui.Components.spoilers.SpoilerEffect2; import org.telegram.ui.Stars.StarsIntroActivity; @@ -522,7 +510,7 @@ public class MessageSendPreview extends Dialog implements NotificationCenter.Not cell.drawCaptionLayout(canvas, false, cell.getAlpha()); } if ((cell.getCurrentPosition() != null && ((cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_BOTTOM) != 0 && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) != 0 || cell.getCurrentMessagesGroup() != null && cell.getCurrentMessagesGroup().isDocuments))) { - cell.drawReactionsLayout(canvas, cell.getAlpha()); + cell.drawReactionsLayout(canvas, cell.getAlpha(), null); } if (cell.getCurrentPosition() != null) { cell.drawNamesLayout(canvas, cell.getAlpha()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java index 107f93235..133491141 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java @@ -486,7 +486,7 @@ public class MultiContactsSelectorBottomSheet extends BottomSheetWithRecyclerLis @Override protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { - selectorAdapter = new SelectorAdapter(getContext(), resourcesProvider); + selectorAdapter = new SelectorAdapter(getContext(), true, resourcesProvider); selectorAdapter.setGreenSelector(true); return selectorAdapter; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java index c262eaea7..5bac35160 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java @@ -669,7 +669,7 @@ public class NewContactBottomSheet extends BottomSheet implements AdapterView.On if (res != null) { if (!res.users.isEmpty()) { MessagesController.getInstance(currentAccount).putUsers(res.users, false); - MessagesController.openChatOrProfileWith(res.users.get(0), null, parentFragment, 1, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(res.users.get(0), null, parentFragment, 1, false); dismiss(); } else { if (parentFragment.getParentActivity() == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java index 992e3208b..e335f463f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java @@ -639,7 +639,7 @@ public class NotificationsSoundActivity extends BaseFragment implements ChatAtta view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); break; case 2: - CreationTextCell creationTextCell = new CreationTextCell(context, resourcesProvider); + CreationTextCell creationTextCell = new CreationTextCell(context, 70, resourcesProvider); creationTextCell.startPadding = 61; view = creationTextCell; view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java index cd2b469d8..3bd86e877 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java @@ -106,6 +106,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.SRPHelper; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; @@ -1161,6 +1162,11 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setSupportZoom(true); + webView.getSettings().setBuiltInZoomControls(true); + webView.getSettings().setDisplayZoomControls(false); + webView.getSettings().setUseWideViewPort(true); + if (Build.VERSION.SDK_INT >= 21) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); CookieManager cookieManager = CookieManager.getInstance(); @@ -2411,6 +2417,11 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setSupportZoom(true); + webView.getSettings().setBuiltInZoomControls(true); + webView.getSettings().setDisplayZoomControls(false); + webView.getSettings().setUseWideViewPort(true); + if (Build.VERSION.SDK_INT >= 21) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); CookieManager cookieManager = CookieManager.getInstance(); @@ -4130,9 +4141,15 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } getMessagesController().processUpdates(updates, false); AndroidUtilities.runOnUIThread(() -> { + Context context = getContext(); + if (context == null) context = ApplicationLoader.applicationContext; + if (context == null) context = LaunchActivity.instance; + if (context == null) return; + paymentStatusSent = true; invoiceStatus = InvoiceStatus.PAID; final boolean isStars = invoiceInput instanceof TLRPC.TL_inputInvoiceStars; + final boolean isStarsGift = isStars && ((TLRPC.TL_inputInvoiceStars) invoiceInput).purpose instanceof TLRPC.TL_inputStorePaymentStarsGift; if (!isStars && paymentFormCallback != null) { paymentFormCallback.onInvoiceStatusChanged(invoiceStatus); } @@ -4141,21 +4158,46 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen if (isStars && paymentFormCallback != null) { paymentFormCallback.onInvoiceStatusChanged(invoiceStatus); } + final long giftUserId = getStarsGiftUserId(); + String giftUser = ""; + if (giftUserId != 0) { + giftUser = UserObject.getForcedFirstName(getMessagesController().getUser(giftUserId)); + } + long stars = getStars(); + int icon = isStars ? (isStarsGift ? R.raw.stars_send : R.raw.stars_topup) : R.raw.payment_success; + CharSequence bulletinTitle = !isStars ? null : (isStarsGift ? getString(R.string.StarsGiftSentPopup) : getString(R.string.StarsAcquired)); CharSequence bulletinText = AndroidUtilities.replaceTags( isStars ? - LocaleController.formatPluralString("PaymentInfoHintStars", (int) ((TLRPC.TL_inputInvoiceStars) invoiceInput).option.stars, totalPrice[0]) : + LocaleController.formatPluralString(isStarsGift ? "StarsGiftSentPopupInfo" : "StarsAcquiredInfo", (int) stars, giftUser) : LocaleController.formatString(R.string.PaymentInfoHint, totalPrice[0], currentItemName) ); - if (parentFragment instanceof ChatActivity) { - UndoView undoView = ((ChatActivity) parentFragment).getUndoView(); - if (undoView != null) { - undoView.showWithAction(0, UndoView.ACTION_PAYMENT_SUCCESS, bulletinText, message[0], null, null); - } + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + BulletinFactory factory = BulletinFactory.of(lastFragment); + Bulletin bulletin; + if (giftUserId != 0 && bulletinTitle != null) { + bulletin = factory.createSimpleBulletin(icon, bulletinTitle, bulletinText, getString(R.string.ViewInChat), () -> { + BaseFragment lastFragment2 = LaunchActivity.getSafeLastFragment(); + if (lastFragment2 != null) { + lastFragment2.presentFragment(ChatActivity.of(giftUserId)); + } + }); + } else if (bulletinTitle != null) { + bulletin = factory.createSimpleBulletin(icon, bulletinTitle, bulletinText); } else { - Bulletin bulletin = BulletinFactory.global().createSimpleBulletin(R.raw.payment_success, bulletinText); - if (message[0] != null) { - bulletin.setOnClickListener(v -> { - bulletin.hide(); + bulletin = factory.createSimpleBulletin(icon, bulletinText); + } + bulletin.hideAfterBottomSheet = false; + bulletin.setDuration(Bulletin.DURATION_PROLONG); + if (message[0] != null) { + bulletin.setOnClickListener(v -> { + bulletin.hide(); + if (isStarsGift) { + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + fragment.presentFragment(ChatActivity.of(MessageObject.getDialogId(message[0]), message[0].id)); + } + } else { TLRPC.TL_payments_getPaymentReceipt req2 = new TLRPC.TL_payments_getPaymentReceipt(); req2.msg_id = message[0].id; req2.peer = MessagesController.getInstance(currentAccount).getInputPeer(message[0].peer_id); @@ -4163,19 +4205,19 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen if (response2 instanceof TLRPC.TL_payments_paymentReceiptStars) { StarsIntroActivity.showTransactionSheet(getContext(), false, currentAccount, (TLRPC.TL_payments_paymentReceiptStars) response2, getResourceProvider()); } else if (response2 instanceof TLRPC.PaymentReceipt) { - BaseFragment lastFragment = LaunchActivity.getLastFragment(); - if (lastFragment != null) { + BaseFragment lastFragment3 = LaunchActivity.getLastFragment(); + if (lastFragment3 != null) { BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); params.transitionFromLeft = true; params.allowNestedScroll = false; - lastFragment.showAsSheet(new PaymentFormActivity((TLRPC.PaymentReceipt) response2), params); + lastFragment3.showAsSheet(new PaymentFormActivity((TLRPC.PaymentReceipt) response2), params); } } }), ConnectionsManager.RequestFlagFailOnServerErrors); - }); - } - bulletin.show(); + } + }); } + bulletin.show(); }); } else if (response instanceof TLRPC.TL_payments_paymentVerificationNeeded) { AndroidUtilities.runOnUIThread(() -> { @@ -4203,9 +4245,10 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen onCheckoutSuccess(parentLayout, parentActivity); + long stars = getStars(); CharSequence bulletinText = AndroidUtilities.replaceTags( invoiceInput instanceof TLRPC.TL_inputInvoiceStars ? - LocaleController.formatPluralString("PaymentInfoHintStars", (int) ((TLRPC.TL_inputInvoiceStars) invoiceInput).option.stars, totalPrice[0]) : + LocaleController.formatPluralString("PaymentInfoHintStars", (int) stars, totalPrice[0]) : LocaleController.formatString(R.string.PaymentInfoHint, totalPrice[0], currentItemName) ); if (parentFragment instanceof ChatActivity) { @@ -4215,6 +4258,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } } else { Bulletin bulletin = BulletinFactory.global().createSimpleBulletin(R.raw.payment_success, bulletinText); + bulletin.hideAfterBottomSheet = false; if (message != null) { bulletin.setOnClickListener(v -> { bulletin.hide(); @@ -4272,6 +4316,31 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen }, ConnectionsManager.RequestFlagFailOnServerErrors); } + private long getStars() { + if (invoiceInput instanceof TLRPC.TL_inputInvoiceStars) { + TLRPC.TL_inputInvoiceStars invoiceInputStars = (TLRPC.TL_inputInvoiceStars) invoiceInput; + final TLRPC.InputStorePaymentPurpose purpose = invoiceInputStars.purpose; + if (purpose instanceof TLRPC.TL_inputStorePaymentStarsGift) { + return ((TLRPC.TL_inputStorePaymentStarsGift) purpose).stars; + } else if (purpose instanceof TLRPC.TL_inputStorePaymentStarsTopup) { + return ((TLRPC.TL_inputStorePaymentStarsTopup) purpose).stars; + } + } + return 0; + } + + private long getStarsGiftUserId() { + if (invoiceInput instanceof TLRPC.TL_inputInvoiceStars) { + TLRPC.TL_inputInvoiceStars invoiceInputStars = (TLRPC.TL_inputInvoiceStars) invoiceInput; + final TLRPC.InputStorePaymentPurpose purpose = invoiceInputStars.purpose; + if (purpose instanceof TLRPC.TL_inputStorePaymentStarsGift) { + TLRPC.TL_inputStorePaymentStarsGift p = (TLRPC.TL_inputStorePaymentStarsGift) purpose; + if (p.user_id != null) return p.user_id.user_id; + } + } + return 0; + } + private void shakeField(int field) { shakeView(inputFields[field]); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index 1d8f2e60c..1f35fa1eb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -10,6 +10,7 @@ package org.telegram.ui; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.getString; import android.Manifest; import android.animation.Animator; @@ -70,6 +71,7 @@ import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; import android.text.style.ClickableSpan; +import android.text.style.LineHeightSpan; import android.text.style.URLSpan; import android.text.util.Linkify; import android.transition.ChangeBounds; @@ -196,6 +198,7 @@ import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.Cells.PhotoPickerPhotoCell; import org.telegram.ui.Cells.TextSelectionHelper; @@ -225,6 +228,7 @@ import org.telegram.ui.Components.GestureDetector2; import org.telegram.ui.Components.GroupedPhotosListView; import org.telegram.ui.Components.HideViewAfterAnimation; import org.telegram.ui.Components.ImageUpdater; +import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; @@ -245,6 +249,7 @@ import org.telegram.ui.Components.PickerBottomLayoutViewer; import org.telegram.ui.Components.PipVideoOverlay; import org.telegram.ui.Components.PlayPauseDrawable; import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; +import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; import org.telegram.ui.Components.QuoteSpan; import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.RadialProgressView; @@ -259,6 +264,7 @@ import org.telegram.ui.Components.TextViewSwitcher; import org.telegram.ui.Components.ThanosEffect; import org.telegram.ui.Components.Tooltip; import org.telegram.ui.Components.TranslateAlert2; +import org.telegram.ui.Components.TypefaceSpan; import org.telegram.ui.Components.URLSpanReplacement; import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.VideoCompressButton; @@ -279,6 +285,7 @@ import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.net.IDN; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; @@ -654,7 +661,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private String getOf() { lng = LocaleController.getInstance().getCurrentLocaleInfo().shortName; - String text = LocaleController.getString("Of"); // %1$d of %2$d + String text = getString("Of"); // %1$d of %2$d text = text.replace("%1$d", ""); text = text.replace("%2$d", ""); return text; @@ -868,6 +875,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private boolean maskPaintViewShuttingDown; private AlertDialog visibleDialog; private CaptionTextViewSwitcher captionTextViewSwitcher; + private FrameLayout adButtonView; + private TextView adButtonTextView; private CaptionScrollView captionScrollView; private CaptionPhotoViewer captionEdit; private float shiftDp = -8; @@ -1122,10 +1131,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } if (avatarFor != null) { if (avatarFor.type == ImageUpdater.TYPE_SUGGEST_PHOTO_FOR_USER) { - setTitle(avatarFor.isVideo ? LocaleController.getString("SuggestVideo", R.string.SuggestVideo) : LocaleController.getString("SuggestPhoto", R.string.SuggestPhoto)); + setTitle(avatarFor.isVideo ? getString("SuggestVideo", R.string.SuggestVideo) : getString("SuggestPhoto", R.string.SuggestPhoto)); } if (avatarFor.isVideo) { - videoAvatarTooltip.setText(LocaleController.getString("SetCover", R.string.SetCover)); + videoAvatarTooltip.setText(getString("SetCover", R.string.SetCover)); } actionBar.setBackground(null); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { @@ -1197,7 +1206,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat builder.setTitle(link.getURL()); } final int finalTimestamp = timestamp; - builder.setItems(new CharSequence[]{LocaleController.getString("Open", R.string.Open), LocaleController.getString("Copy", R.string.Copy)}, (dialog, which) -> { + builder.setItems(new CharSequence[]{getString("Open", R.string.Open), getString("Copy", R.string.Copy)}, (dialog, which) -> { if (which == 0) { onLinkClick(link, widget); } else if (which == 1) { @@ -1246,13 +1255,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat AndroidUtilities.addToClipboard(url1); String bulletinMessage; if (tel) { - bulletinMessage = LocaleController.getString("PhoneCopied", R.string.PhoneCopied); + bulletinMessage = getString("PhoneCopied", R.string.PhoneCopied); } else if (url1.startsWith("#")) { - bulletinMessage = LocaleController.getString("HashtagCopied", R.string.HashtagCopied); + bulletinMessage = getString("HashtagCopied", R.string.HashtagCopied); } else if (url1.startsWith("@")) { - bulletinMessage = LocaleController.getString("UsernameCopied", R.string.UsernameCopied); + bulletinMessage = getString("UsernameCopied", R.string.UsernameCopied); } else { - bulletinMessage = LocaleController.getString("LinkCopied", R.string.LinkCopied); + bulletinMessage = getString("LinkCopied", R.string.LinkCopied); } if (AndroidUtilities.shouldShowClipboardToast()) { BulletinFactory.of(containerView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, bulletinMessage).show(); @@ -1996,6 +2005,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private final static int gallery_menu_hide_translation = 22; private final static int gallery_menu_reply = 23; + private final static int ads_sponsor_info = 101; + private final static int ads_about = 102; + private final static int ads_report = 103; + private final static int ads_separator = 104; + private final static int ads_remove = 105; + private static DecelerateInterpolator decelerateInterpolator; private static Paint progressPaint; @@ -2583,6 +2598,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } + @Override + public boolean canEdit(int index) { + return false; + } + @Override public boolean canReplace(int index) { return false; @@ -2726,6 +2746,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat void needAddMorePhotos(); void sendButtonPressed(int index, VideoEditedInfo videoEditedInfo, boolean notify, int scheduleDate, boolean forceDocument); void replaceButtonPressed(int index, VideoEditedInfo videoEditedInfo); + boolean canEdit(int index); boolean canReplace(int index); int getSelectedCount(); void updatePhotoAtIndex(int index); @@ -3574,7 +3595,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat final int lineCount = layout.getLineCount(); if (isLandscape && lineCount <= 2 || !isLandscape && lineCount <= 5) { - return height - textView.getMeasuredHeight(); + return height - textView.getMeasuredHeight() - captionTextViewSwitcher.getPaddingBottom(); } int i = Math.min(isLandscape ? 2 : 5, lineCount); @@ -4196,13 +4217,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat private void showDownloadAlert() { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity, resourcesProvider); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); + builder.setTitle(getString("AppName", R.string.AppName)); + builder.setPositiveButton(getString("OK", R.string.OK), null); boolean alreadyDownloading = currentMessageObject != null && currentMessageObject.isVideo() && FileLoader.getInstance(currentMessageObject.currentAccount).isLoadingFile(currentFileNames[0]); if (alreadyDownloading) { - builder.setMessage(LocaleController.getString("PleaseStreamDownload", R.string.PleaseStreamDownload)); + builder.setMessage(getString("PleaseStreamDownload", R.string.PleaseStreamDownload)); } else { - builder.setMessage(LocaleController.getString("PleaseDownload", R.string.PleaseDownload)); + builder.setMessage(getString("PleaseDownload", R.string.PleaseDownload)); } showAlertDialog(builder); } @@ -4261,7 +4282,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); } - parentActivity.startActivityForResult(Intent.createChooser(intent, LocaleController.getString("ShareFile", R.string.ShareFile)), 500); + parentActivity.startActivityForResult(Intent.createChooser(intent, getString("ShareFile", R.string.ShareFile)), 500); } else { showDownloadAlert(); } @@ -4783,10 +4804,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } final boolean isVideo = isVideo_; AlertDialog dialog = new AlertDialog.Builder(parentActivity, resourcesProvider) - .setTitle(LocaleController.getString("SaveGroupMedia", R.string.SaveGroupMedia)) - .setMessage(LocaleController.getString("SaveGroupMediaMessage", R.string.SaveGroupMediaMessage)) + .setTitle(getString("SaveGroupMedia", R.string.SaveGroupMedia)) + .setMessage(getString("SaveGroupMediaMessage", R.string.SaveGroupMediaMessage)) .setDialogButtonColorKey(Theme.key_voipgroup_listeningText) - .setNegativeButton((!isVideo ? LocaleController.getString("ThisPhoto", R.string.ThisPhoto) : LocaleController.getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { + .setNegativeButton((!isVideo ? getString("ThisPhoto", R.string.ThisPhoto) : getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { if (currentMessageObject == null) { return; } @@ -4835,7 +4856,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } }) - .setNeutralButton(LocaleController.getString("Cancel", R.string.Cancel), (di, a) -> { + .setNeutralButton(getString("Cancel", R.string.Cancel), (di, a) -> { di.dismiss(); }).create(); dialog.setBackgroundColor(getThemedColor(Theme.key_voipgroup_dialogBackground)); @@ -4930,10 +4951,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } AlertDialog dialog = new AlertDialog.Builder(parentActivity, resourcesProvider) - .setTitle(LocaleController.getString("ForwardGroupMedia", R.string.ForwardGroupMedia)) - .setMessage(LocaleController.getString("ForwardGroupMediaMessage", R.string.ForwardGroupMediaMessage)) + .setTitle(getString("ForwardGroupMedia", R.string.ForwardGroupMedia)) + .setMessage(getString("ForwardGroupMediaMessage", R.string.ForwardGroupMediaMessage)) .setDialogButtonColorKey(Theme.key_voipgroup_listeningText) - .setNegativeButton((photos ? LocaleController.getString("ThisPhoto", R.string.ThisPhoto) : LocaleController.getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { + .setNegativeButton((photos ? getString("ThisPhoto", R.string.ThisPhoto) : getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { ArrayList singleMessage = new ArrayList<>(1); singleMessage.add(currentMessageObject); showShareAlert(singleMessage); @@ -4941,7 +4962,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat .setPositiveButton(photos ? LocaleController.formatPluralString("AllNPhotos", msgs.size()) : LocaleController.formatPluralString("AllNMedia", msgs.size()), (di, a) -> { showShareAlert(msgs); }) - .setNeutralButton(LocaleController.getString("Cancel", R.string.Cancel), (di, a) -> { + .setNeutralButton(getString("Cancel", R.string.Cancel), (di, a) -> { di.dismiss(); }).create(); dialog.setBackgroundColor(getThemedColor(Theme.key_voipgroup_dialogBackground)); @@ -5027,24 +5048,24 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity); String text = placeProvider.getDeleteMessageString(); if (text != null) { - builder.setTitle(LocaleController.getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); + builder.setTitle(getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); builder.setMessage(text); } else if (isEmbedVideo || currentFileLocationVideo != null && currentFileLocationVideo != currentFileLocation || currentMessageObject != null && currentMessageObject.isVideo()) { - builder.setTitle(LocaleController.getString("AreYouSureDeleteVideoTitle", R.string.AreYouSureDeleteVideoTitle)); + builder.setTitle(getString("AreYouSureDeleteVideoTitle", R.string.AreYouSureDeleteVideoTitle)); if (isChannel) { builder.setMessage(LocaleController.formatString("AreYouSureDeleteVideoEveryone", R.string.AreYouSureDeleteVideoEveryone)); } else { builder.setMessage(LocaleController.formatString("AreYouSureDeleteVideo", R.string.AreYouSureDeleteVideo)); } } else if (currentMessageObject != null && currentMessageObject.isGif()) { - builder.setTitle(LocaleController.getString("AreYouSureDeleteGIFTitle", R.string.AreYouSureDeleteGIFTitle)); + builder.setTitle(getString("AreYouSureDeleteGIFTitle", R.string.AreYouSureDeleteGIFTitle)); if (isChannel) { builder.setMessage(LocaleController.formatString("AreYouSureDeleteGIFEveryone", R.string.AreYouSureDeleteGIFEveryone)); } else { builder.setMessage(LocaleController.formatString("AreYouSureDeleteGIF", R.string.AreYouSureDeleteGIF)); } } else { - builder.setTitle(LocaleController.getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); + builder.setTitle(getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); if (isChannel) { builder.setMessage(LocaleController.formatString("AreYouSureDeletePhotoEveryone", R.string.AreYouSureDeletePhotoEveryone)); } else { @@ -5083,7 +5104,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat CheckBoxCell cell = new CheckBoxCell(parentActivity, 1, resourcesProvider); cell.setBackgroundDrawable(Theme.getSelectorDrawable(false)); if (currentChat != null) { - cell.setText(LocaleController.getString("DeleteForAll", R.string.DeleteForAll), "", false, false); + cell.setText(getString("DeleteForAll", R.string.DeleteForAll), "", false, false); } else { cell.setText(LocaleController.formatString("DeleteForUser", R.string.DeleteForUser, UserObject.getFirstName(currentUser)), "", false, false); } @@ -5101,7 +5122,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } - builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface, i) -> { + builder.setPositiveButton(getString("Delete", R.string.Delete), (dialogInterface, i) -> { if (!placeProvider.onDeletePhoto(currentIndex)) { closePhoto(false, false); return; @@ -5201,7 +5222,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); AlertDialog alertDialog = builder.create(); showAlertDialog(builder); TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); @@ -5449,15 +5470,22 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat menu.setOnLayoutListener(this::updateActionBarTitlePadding); masksItem = menu.addItem(gallery_menu_masks, R.drawable.msg_mask); - masksItem.setContentDescription(LocaleController.getString("Masks", R.string.Masks)); + masksItem.setContentDescription(getString("Masks", R.string.Masks)); pipItem = menu.addItem(gallery_menu_pip, R.drawable.ic_goinline); - pipItem.setContentDescription(LocaleController.getString("AccDescrPipMode", R.string.AccDescrPipMode)); + pipItem.setContentDescription(getString("AccDescrPipMode", R.string.AccDescrPipMode)); editItem = menu.addItem(gallery_menu_paint, R.drawable.msg_header_draw); - editItem.setContentDescription(LocaleController.getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); + editItem.setContentDescription(getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); sendItem = menu.addItem(gallery_menu_send, R.drawable.msg_header_share); - sendItem.setContentDescription(LocaleController.getString("Forward", R.string.Forward)); + sendItem.setContentDescription(getString("Forward", R.string.Forward)); menuItem = menu.addItem(0, menuItemIcon = new OptionsSpeedIconDrawable()); + menuItem.setOnClickListener(v -> { + if (currentMessageObject != null && currentMessageObject.isSponsored()) { + openAdsMenu(); + } else if (actionBar.actionBarMenuOnItemClick.canOpenMenu()) { + menuItem.toggleSubMenu(); + } + }); menuItem.setOnMenuDismiss(byClick -> checkProgress(0, false, false)); menuItem.getPopupLayout().swipeBackGravityRight = true; @@ -5488,30 +5516,30 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } }); - speedItem = menuItem.addSwipeBackItem(R.drawable.msg_speed, null, LocaleController.getString("Speed", R.string.Speed), chooseSpeedLayout.speedSwipeBackLayout); + speedItem = menuItem.addSwipeBackItem(R.drawable.msg_speed, null, getString("Speed", R.string.Speed), chooseSpeedLayout.speedSwipeBackLayout); menuItem.getPopupLayout().setSwipeBackForegroundColor(0xff222222); - speedItem.setSubtext(LocaleController.getString("SpeedNormal", R.string.SpeedNormal)); + speedItem.setSubtext(getString("SpeedNormal", R.string.SpeedNormal)); speedItem.setColors(0xfffafafa, 0xfffafafa); speedGap = menuItem.addColoredGap(); speedGap.setColor(0xff181818); menuItem.getPopupLayout().setFitItems(true); - menuItem.addSubItem(gallery_menu_openin, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp)).setColors(0xfffafafa, 0xfffafafa); - menuItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); - allMediaItem = menuItem.addSubItem(gallery_menu_showall, R.drawable.msg_media, LocaleController.getString(R.string.ShowAllMedia)); + menuItem.addSubItem(gallery_menu_openin, R.drawable.msg_openin, getString("OpenInExternalApp", R.string.OpenInExternalApp)).setColors(0xfffafafa, 0xfffafafa); + menuItem.setContentDescription(getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); + allMediaItem = menuItem.addSubItem(gallery_menu_showall, R.drawable.msg_media, getString(R.string.ShowAllMedia)); allMediaItem.setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_savegif, R.drawable.msg_gif, LocaleController.getString("SaveToGIFs", R.string.SaveToGIFs)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_showinchat, R.drawable.msg_message, LocaleController.getString("ShowInChat", R.string.ShowInChat)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, LocaleController.getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_reply, R.drawable.menu_reply, LocaleController.getString(R.string.Reply)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_share, R.drawable.msg_shareout, LocaleController.getString("ShareFile", R.string.ShareFile)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, LocaleController.getString("SaveToGallery", R.string.SaveToGallery)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_savegif, R.drawable.msg_gif, getString("SaveToGIFs", R.string.SaveToGIFs)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_showinchat, R.drawable.msg_message, getString("ShowInChat", R.string.ShowInChat)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, getString("SaveToGallery", R.string.SaveToGallery)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_reply, R.drawable.menu_reply, getString(R.string.Reply)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_share, R.drawable.msg_shareout, getString("ShareFile", R.string.ShareFile)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa); //menuItem.addSubItem(gallery_menu_edit_avatar, R.drawable.photo_paint, LocaleController.getString("EditPhoto", R.string.EditPhoto)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_set_as_main, R.drawable.msg_openprofile, LocaleController.getString("SetAsMain", R.string.SetAsMain)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_translate, R.drawable.msg_translate, LocaleController.getString(R.string.TranslateMessage)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_hide_translation, R.drawable.msg_translate, LocaleController.getString(R.string.HideTranslation)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_delete, R.drawable.msg_delete, LocaleController.getString("Delete", R.string.Delete)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_cancel_loading, R.drawable.msg_cancel, LocaleController.getString("StopDownload", R.string.StopDownload)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_set_as_main, R.drawable.msg_openprofile, getString("SetAsMain", R.string.SetAsMain)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_translate, R.drawable.msg_translate, getString(R.string.TranslateMessage)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_hide_translation, R.drawable.msg_translate, getString(R.string.HideTranslation)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_delete, R.drawable.msg_delete, getString("Delete", R.string.Delete)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_cancel_loading, R.drawable.msg_cancel, getString("StopDownload", R.string.StopDownload)).setColors(0xfffafafa, 0xfffafafa); menuItem.redrawPopup(0xf9222222); menuItem.hideSubItem(gallery_menu_translate); menuItem.hideSubItem(gallery_menu_hide_translation); @@ -5638,7 +5666,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat for (int a = 0; a < 3; a++) { fullscreenButton[a] = new ImageView(parentActivity); fullscreenButton[a].setImageResource(R.drawable.msg_maxvideo); - fullscreenButton[a].setContentDescription(LocaleController.getString("AccSwitchToFullscreen", R.string.AccSwitchToFullscreen)); + fullscreenButton[a].setContentDescription(getString("AccSwitchToFullscreen", R.string.AccSwitchToFullscreen)); fullscreenButton[a].setScaleType(ImageView.ScaleType.CENTER); fullscreenButton[a].setBackground(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); fullscreenButton[a].setVisibility(View.INVISIBLE); @@ -5732,7 +5760,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat qualityPicker.setBackgroundColor(0x7f000000); qualityPicker.updateSelectedCount(0, false); qualityPicker.setTranslationY(dp(120)); - qualityPicker.doneButton.setText(LocaleController.getString("Done", R.string.Done).toUpperCase()); + qualityPicker.doneButton.setText(getString("Done", R.string.Done).toUpperCase()); qualityPicker.doneButton.setTextColor(getThemedColor(Theme.key_chat_editMediaButton)); containerView.addView(qualityPicker, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.LEFT)); qualityPicker.cancelButton.setOnClickListener(view -> { @@ -5878,7 +5906,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat doneButtonFullWidth.setGravity(Gravity.CENTER); doneButtonFullWidth.setLines(1); doneButtonFullWidth.setSingleLine(true); - doneButtonFullWidth.setText(LocaleController.getString("SetAsMyPhoto", R.string.SetAsMyPhoto)); + doneButtonFullWidth.setText(getString("SetAsMyPhoto", R.string.SetAsMyPhoto)); doneButtonFullWidth.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); doneButtonFullWidth.setTypeface(AndroidUtilities.bold()); doneButtonFullWidth.setOnClickListener(v -> sendPressed(false, 0)); @@ -6387,7 +6415,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat videoAvatarTooltip = new TextView(parentActivity); videoAvatarTooltip.setSingleLine(true); videoAvatarTooltip.setVisibility(View.GONE); - videoAvatarTooltip.setText(LocaleController.getString("ChooseCover", R.string.ChooseCover)); + videoAvatarTooltip.setText(getString("ChooseCover", R.string.ChooseCover)); videoAvatarTooltip.setGravity(Gravity.CENTER_HORIZONTAL); videoAvatarTooltip.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); videoAvatarTooltip.setTextColor(0xff8c8c8c); @@ -6400,7 +6428,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat pickerViewSendButton.setImageResource(R.drawable.msg_input_send_mini); pickerViewSendButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_dialogFloatingIcon), PorterDuff.Mode.MULTIPLY)); containerView.addView(pickerViewSendButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, 14, 2.33f)); - pickerViewSendButton.setContentDescription(LocaleController.getString("Send", R.string.Send)); + pickerViewSendButton.setContentDescription(getString("Send", R.string.Send)); ScaleStateListAnimator.apply(pickerViewSendButton); pickerViewSendButton.setOnClickListener(v -> { if (captionEdit.isCaptionOverLimit()) { @@ -6455,11 +6483,15 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat sendPopupLayout.setShownFromBottom(false); sendPopupLayout.setBackgroundColor(0xf9222222); + final boolean canEdit = placeProvider != null && placeProvider.canEdit(currentIndex); final boolean canReplace = placeProvider != null && placeProvider.canReplace(currentIndex); final int[] order = {4, 3, 2, 0, 1}; for (int i = 0; i < 5; i++) { final int a = order[i]; - if (a != 2 && a != 3 && canReplace) { + if (a != 2 && a != 3 && canEdit && canReplace) { + continue; + } + if (a != 1 && canEdit && !canReplace) { continue; } if (a == 0 && !parentChatActivity.canScheduleMessage()) { @@ -6497,21 +6529,21 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat ActionBarMenuSubItem cell = new ActionBarMenuSubItem(parentActivity, a == 0, a == 3, resourcesProvider); if (a == 0) { if (UserObject.isUserSelf(user)) { - cell.setTextAndIcon(LocaleController.getString("SetReminder", R.string.SetReminder), R.drawable.msg_calendar2); + cell.setTextAndIcon(getString("SetReminder", R.string.SetReminder), R.drawable.msg_calendar2); } else { - cell.setTextAndIcon(LocaleController.getString("ScheduleMessage", R.string.ScheduleMessage), R.drawable.msg_calendar2); + cell.setTextAndIcon(getString("ScheduleMessage", R.string.ScheduleMessage), R.drawable.msg_calendar2); } } else if (a == 1) { - cell.setTextAndIcon(LocaleController.getString("SendWithoutSound", R.string.SendWithoutSound), R.drawable.input_notify_off); + cell.setTextAndIcon(getString("SendWithoutSound", R.string.SendWithoutSound), R.drawable.input_notify_off); } else if (a == 2) { - cell.setTextAndIcon(LocaleController.getString("ReplacePhoto", R.string.ReplacePhoto), R.drawable.msg_replace); + cell.setTextAndIcon(getString("ReplacePhoto", R.string.ReplacePhoto), R.drawable.msg_replace); } else if (a == 3) { - cell.setTextAndIcon(LocaleController.getString("SendAsNewPhoto", R.string.SendAsNewPhoto), R.drawable.msg_send); + cell.setTextAndIcon(getString("SendAsNewPhoto", R.string.SendAsNewPhoto), R.drawable.msg_send); } else if (a == 4) { if (placeProvider != null && placeProvider.getSelectedCount() > 1) { - cell.setTextAndIcon(LocaleController.getString(R.string.SendAsFiles), R.drawable.msg_sendfile); + cell.setTextAndIcon(getString(R.string.SendAsFiles), R.drawable.msg_sendfile); } else { - cell.setTextAndIcon(LocaleController.getString(R.string.SendAsFile), R.drawable.msg_sendfile); + cell.setTextAndIcon(getString(R.string.SendAsFile), R.drawable.msg_sendfile); } } cell.setMinimumWidth(dp(196)); @@ -6632,7 +6664,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } switchToEditMode(EDIT_MODE_CROP); }); - cropItem.setContentDescription(LocaleController.getString("CropImage", R.string.CropImage)); + cropItem.setContentDescription(getString("CropImage", R.string.CropImage)); rotateItem = new ImageView(parentActivity); rotateItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6640,7 +6672,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat rotateItem.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); itemsLayout.addView(rotateItem, LayoutHelper.createLinear(48, 48)); rotateItem.setOnClickListener(v -> cropRotate(-90)); - rotateItem.setContentDescription(LocaleController.getString("AccDescrRotate", R.string.AccDescrRotate)); + rotateItem.setContentDescription(getString("AccDescrRotate", R.string.AccDescrRotate)); mirrorItem = new ImageView(parentActivity); mirrorItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6648,7 +6680,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat mirrorItem.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); itemsLayout.addView(mirrorItem, LayoutHelper.createLinear(48, 48)); mirrorItem.setOnClickListener(v -> cropMirror()); - mirrorItem.setContentDescription(LocaleController.getString("AccDescrMirror", R.string.AccDescrMirror)); + mirrorItem.setContentDescription(getString("AccDescrMirror", R.string.AccDescrMirror)); paintItem = new ImageView(parentActivity); paintItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6675,7 +6707,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } switchToEditMode(EDIT_MODE_PAINT); }); - paintItem.setContentDescription(LocaleController.getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); + paintItem.setContentDescription(getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); muteItem = new ImageView(parentActivity); muteItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6704,7 +6736,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat selectedCompression = selectCompression(); compressItem.setState(videoConvertSupported && compressionsCount > 1, muteVideo, Math.min(resultWidth, resultHeight)); - compressItem.setContentDescription(LocaleController.getString("AccDescrVideoQuality", R.string.AccDescrVideoQuality)); + compressItem.setContentDescription(getString("AccDescrVideoQuality", R.string.AccDescrVideoQuality)); itemsLayout.addView(compressItem, LayoutHelper.createLinear(48, 48)); compressItem.setOnClickListener(v -> { if (isCaptionOpen() || muteVideo) { @@ -6715,7 +6747,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (tooltip == null) { tooltip = new Tooltip(activity, containerView, 0xcc111111, Color.WHITE); } - tooltip.setText(LocaleController.getString("VideoQualityIsTooLow", R.string.VideoQualityIsTooLow)); + tooltip.setText(getString("VideoQualityIsTooLow", R.string.VideoQualityIsTooLow)); tooltip.show(compressItem); } return; @@ -6750,7 +6782,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } switchToEditMode(EDIT_MODE_FILTER); }); - tuneItem.setContentDescription(LocaleController.getString("AccDescrPhotoAdjust", R.string.AccDescrPhotoAdjust)); + tuneItem.setContentDescription(getString("AccDescrPhotoAdjust", R.string.AccDescrPhotoAdjust)); editorDoneLayout = new PickerBottomLayoutViewer(activityContext); editorDoneLayout.setBackgroundColor(0xcc000000); @@ -6805,7 +6837,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat resetButton.setGravity(Gravity.CENTER); resetButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_PICKER_SELECTOR_COLOR, 0)); resetButton.setPadding(dp(20), 0, dp(20), 0); - resetButton.setText(LocaleController.getString("Reset", R.string.CropReset).toUpperCase()); + resetButton.setText(getString("Reset", R.string.CropReset).toUpperCase()); resetButton.setTypeface(AndroidUtilities.bold()); editorDoneLayout.addView(resetButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.CENTER)); resetButton.setOnClickListener(v -> { @@ -6931,7 +6963,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (AndroidUtilities.isAccessibilityScreenReaderEnabled()) { playButtonAccessibilityOverlay = new View(activityContext); - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionPlay", R.string.AccActionPlay)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionPlay", R.string.AccActionPlay)); playButtonAccessibilityOverlay.setFocusable(true); containerView.addView(playButtonAccessibilityOverlay, LayoutHelper.createFrame(64, 64, Gravity.CENTER)); } @@ -7048,14 +7080,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat String confirmMessage; if (setAvatarFor.type == ImageUpdater.TYPE_SET_PHOTO_FOR_USER) { if (UserConfig.getInstance(currentAccount).clientUserId == dialog_id) { - builder.setMessage(AndroidUtilities.replaceTags(LocaleController.getString("SetUserPhotoSelfAlertMessage", R.string.SetUserPhotoSelfAlertMessage))); + builder.setMessage(AndroidUtilities.replaceTags(getString("SetUserPhotoSelfAlertMessage", R.string.SetUserPhotoSelfAlertMessage))); } else { builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("SetUserPhotoAlertMessage", R.string.SetUserPhotoAlertMessage, userName, userName))); } if (centerImageIsVideo) { - confirmMessage = LocaleController.getString("SetVideo", R.string.SetVideo); + confirmMessage = getString("SetVideo", R.string.SetVideo); } else { - confirmMessage = LocaleController.getString("SetPhoto", R.string.SetPhoto); + confirmMessage = getString("SetPhoto", R.string.SetPhoto); } } else { if (centerImageIsVideo) { @@ -7063,9 +7095,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } else { builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("SuggestPhotoAlertMessage", R.string.SuggestPhotoAlertMessage, userName))); } - confirmMessage = LocaleController.getString("SuggestPhotoShort", R.string.SuggestPhotoShort); + confirmMessage = getString("SuggestPhotoShort", R.string.SuggestPhotoShort); } - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> { + builder.setNegativeButton(getString("Cancel", R.string.Cancel), (dialog, which) -> { }); builder.setPositiveButton(confirmMessage, (dialog, which) -> { @@ -7137,11 +7169,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (parentChatActivity != null && parentChatActivity.getCurrentChat() != null) { boolean isVideo = (isCurrentVideo || videoEditedInfo != null); if (isVideo && !ChatObject.canSendVideo(parentChatActivity.getCurrentChat())) { - BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(LocaleController.getString(R.string.GlobalAttachVideoRestricted)).show(); + BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(getString(R.string.GlobalAttachVideoRestricted)).show(); return; } if (!isVideo && !ChatObject.canSendPhoto(parentChatActivity.getCurrentChat())) { - BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(LocaleController.getString(R.string.GlobalAttachPhotoRestricted)).show(); + BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(getString(R.string.GlobalAttachPhotoRestricted)).show(); return; } } @@ -7491,15 +7523,15 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat menuItemIcon.setSpeed(Math.abs(currentVideoSpeed - 1f) < 0.001f ? null : currentVideoSpeed, animated); if (isFinal) { if (Math.abs(currentVideoSpeed - 0.2f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedVerySlow", R.string.VideoSpeedVerySlow)); + speedItem.setSubtext(getString("VideoSpeedVerySlow", R.string.VideoSpeedVerySlow)); } else if (Math.abs(currentVideoSpeed - 0.5f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedSlow", R.string.VideoSpeedSlow)); + speedItem.setSubtext(getString("VideoSpeedSlow", R.string.VideoSpeedSlow)); } else if (Math.abs(currentVideoSpeed - 1.0f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedNormal", R.string.VideoSpeedNormal)); + speedItem.setSubtext(getString("VideoSpeedNormal", R.string.VideoSpeedNormal)); } else if (Math.abs(currentVideoSpeed - 1.5f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedFast", R.string.VideoSpeedFast)); + speedItem.setSubtext(getString("VideoSpeedFast", R.string.VideoSpeedFast)); } else if (Math.abs(currentVideoSpeed - 2f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedVeryFast", R.string.VideoSpeedVeryFast)); + speedItem.setSubtext(getString("VideoSpeedVeryFast", R.string.VideoSpeedVeryFast)); } else { speedItem.setSubtext(LocaleController.formatString("VideoSpeedCustom", R.string.VideoSpeedCustom, SpeedIconDrawable.formatNumber(currentVideoSpeed) + "x")); } @@ -8491,7 +8523,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat exitFullscreenButton = new ImageView(containerView.getContext()); exitFullscreenButton.setImageResource(R.drawable.msg_minvideo); - exitFullscreenButton.setContentDescription(LocaleController.getString("AccExitFullscreen", R.string.AccExitFullscreen)); + exitFullscreenButton.setContentDescription(getString("AccExitFullscreen", R.string.AccExitFullscreen)); exitFullscreenButton.setScaleType(ImageView.ScaleType.CENTER); exitFullscreenButton.setBackground(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); exitFullscreenButton.setVisibility(View.INVISIBLE); @@ -8834,7 +8866,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (autoDownload && progress < 0.9f && (document.size * progress >= 5 * 1024 * 1024 || progress >= 0.5f && document.size >= 2 * 1024 * 1024) && Math.abs(SystemClock.elapsedRealtime() - startedPlayTime) >= (bigFile ? 10000 : 3000)) { long duration = videoPlayer.getDuration(); if (duration == C.TIME_UNSET) { - Toast toast = Toast.makeText(parentActivity, LocaleController.getString(R.string.VideoDoesNotSupportStreaming), Toast.LENGTH_LONG); + Toast toast = Toast.makeText(parentActivity, getString(R.string.VideoDoesNotSupportStreaming), Toast.LENGTH_LONG); toast.show(); } streamingAlertShown = true; @@ -9295,9 +9327,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return; } AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity, resourcesProvider); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setMessage(LocaleController.getString("CantPlayVideo", R.string.CantPlayVideo)); - builder.setPositiveButton(LocaleController.getString("Open", R.string.Open), (dialog, which) -> { + builder.setTitle(getString("AppName", R.string.AppName)); + builder.setMessage(getString("CantPlayVideo", R.string.CantPlayVideo)); + builder.setPositiveButton(getString("Open", R.string.Open), (dialog, which) -> { try { AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider, true); closePhoto(false, false); @@ -9305,7 +9337,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat FileLog.e(e1); } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showAlertDialog(builder); } @@ -10413,7 +10445,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (allowOrder && parentChatActivity != null) { TLRPC.Chat chat = parentChatActivity.getCurrentChat(); if (chat != null && !ChatObject.hasAdminRights(chat) && chat.slowmode_enabled) { - AlertsCreator.createSimpleAlert(parentActivity, LocaleController.getString("Slowmode", R.string.Slowmode), LocaleController.getString("SlowmodeSelectSendError", R.string.SlowmodeSelectSendError)).show(); + AlertsCreator.createSimpleAlert(parentActivity, getString("Slowmode", R.string.Slowmode), getString("SlowmodeSelectSendError", R.string.SlowmodeSelectSendError)).show(); } } return; @@ -10951,7 +10983,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat previousCropMirrored = cropTransform.isMirrored(); photoCropView.onAppear(); - editorDoneLayout.doneButton.setText(LocaleController.getString("Crop", R.string.Crop)); + editorDoneLayout.doneButton.setText(getString("Crop", R.string.Crop)); editorDoneLayout.doneButton.setTextColor(getThemedColor(Theme.key_chat_editMediaButton)); changeModeAnimation = new AnimatorSet(); @@ -11141,10 +11173,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return; } AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity, resourcesProvider); - builder.setMessage(LocaleController.getString("DiscardChanges", R.string.DiscardChanges)); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> switchToEditMode(0)); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setMessage(getString("DiscardChanges", R.string.DiscardChanges)); + builder.setTitle(getString("AppName", R.string.AppName)); + builder.setPositiveButton(getString("OK", R.string.OK), (dialogInterface, i) -> switchToEditMode(0)); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showAlertDialog(builder); } else { switchToEditMode(EDIT_MODE_NONE); @@ -12187,7 +12219,27 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat size[0] = -1; } } - } else if (MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaPhoto && MessageObject.getMedia(message.messageOwner).photo != null || MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(message.messageOwner).webpage != null) { + } else if (message.sponsoredMedia != null) { + if (message.sponsoredMedia.document != null) { + return ImageLocation.getForDocument(message.sponsoredMedia.document); + } else if (message.sponsoredMedia.photo != null) { + final TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.sponsoredMedia.photo.sizes, AndroidUtilities.getPhotoSize(), false, null, true); + if (sizeFull != null) { + if (size != null) { + size[0] = sizeFull.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return ImageLocation.getForObject(sizeFull, message.sponsoredMedia.photo); + } else if (size != null) { + size[0] = -1; + } + } + } else if ( + MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaPhoto && MessageObject.getMedia(message.messageOwner).photo != null || + MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(message.messageOwner).webpage != null + ) { if (message.isGif()) { return ImageLocation.getForDocument(message.getDocument()); } else { @@ -12272,6 +12324,30 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat size[0] = -1; } } + } else if (message.sponsoredMedia != null) { + if (message.sponsoredMedia.document != null) { + TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(message.sponsoredMedia.document.thumbs, 90); + if (size != null) { + size[0] = thumb.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return thumb; + } else if (message.sponsoredMedia.photo != null) { + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.sponsoredMedia.photo.sizes, AndroidUtilities.getPhotoSize(), false, null, true); + if (sizeFull != null) { + if (size != null) { + size[0] = sizeFull.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return sizeFull; + } else if (size != null) { + size[0] = -1; + } + } } else if (MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaPhoto && MessageObject.getMedia(message.messageOwner).photo != null || MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(message.messageOwner).webpage != null) { TLRPC.FileLocation location; TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize(), false, null, true); @@ -12428,7 +12504,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat currentThumb = object != null ? object.thumb : null; isEvent = object != null && object.isEvent; sharedMediaType = MediaDataController.MEDIA_PHOTOVIDEO; - allMediaItem.setText(LocaleController.getString("ShowAllMedia", R.string.ShowAllMedia)); + allMediaItem.setText(getString("ShowAllMedia", R.string.ShowAllMedia)); setItemVisible(sendItem, false, false); setItemVisible(pipItem, false, true); if (photoCropView != null) { @@ -12591,10 +12667,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } if (messageObject.canPreviewDocument()) { sharedMediaType = MediaDataController.MEDIA_FILE; - allMediaItem.setText(LocaleController.getString("ShowAllFiles", R.string.ShowAllFiles)); + allMediaItem.setText(getString("ShowAllFiles", R.string.ShowAllFiles)); } else if (messageObject.isGif()) { sharedMediaType = MediaDataController.MEDIA_GIF; - allMediaItem.setText(LocaleController.getString("ShowAllGIFs", R.string.ShowAllGIFs)); + allMediaItem.setText(getString("ShowAllGIFs", R.string.ShowAllGIFs)); } if (isEmbedVideo && !(photoViewerWebView != null && photoViewerWebView.isControllable())) { bottomLayout.setTag(null); @@ -12609,7 +12685,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (messageObject.canForwardMessage() && !noforwards) { setItemVisible(sendItem, true, false); } - } else if (!messageObject.scheduled && !messageObject.isQuickReply() && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaInvoice) && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaWebPage) && (messageObject.messageOwner.action == null || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionEmpty)) { + } else if (!messageObject.scheduled && !messageObject.isQuickReply() && !messageObject.isSponsored() && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaInvoice) && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaWebPage) && (messageObject.messageOwner.action == null || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionEmpty)) { needSearchImageInArr = true; imagesByIds[0].put(messageObject.getId(), messageObject); if (parentChatActivity == null || !parentChatActivity.isThreadChat() && parentChatActivity.getChatMode() != ChatActivity.MODE_SAVED && parentChatActivity.getChatMode() != ChatActivity.MODE_QUICK_REPLIES) { @@ -12686,7 +12762,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat imagesByIds[message.getDialogId() == currentDialogId ? 0 : 1].put(message.getId(), message); } MessageObject openingObject = imagesArr.get(index); - if (!openingObject.scheduled && !openingObject.isQuickReply() && (parentChatActivity == null || !parentChatActivity.isThreadChat())) { + if (!openingObject.scheduled && !openingObject.isQuickReply() && !openingObject.isSponsored() && (parentChatActivity == null || !parentChatActivity.isThreadChat())) { opennedFromMedia = parentChatActivity == null; if (parentFragment instanceof ProfileActivity) { openedFromProfile = true; @@ -12711,10 +12787,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } if (openingObject.canPreviewDocument()) { sharedMediaType = MediaDataController.MEDIA_FILE; - allMediaItem.setText(LocaleController.getString("ShowAllFiles", R.string.ShowAllFiles)); + allMediaItem.setText(getString("ShowAllFiles", R.string.ShowAllFiles)); } else if (openingObject.isGif()) { sharedMediaType = MediaDataController.MEDIA_GIF; - allMediaItem.setText(LocaleController.getString("ShowAllGIFs", R.string.ShowAllGIFs)); + allMediaItem.setText(getString("ShowAllGIFs", R.string.ShowAllGIFs)); } } else { totalImagesCount = imagesArr.size(); @@ -12956,7 +13032,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat title = FilteredSearchView.createFromInfoString(newMessageObject, opennedFromMedia && !openedFromProfile, 0); CharSequence subtitle = null; - if (!newMessageObject.isQuickReply() && newMessageObject.messageOwner != null) { + if (!newMessageObject.isQuickReply() && !newMessageObject.isSponsored() && newMessageObject.messageOwner != null) { subtitle = LocaleController.formatDateAudio(newMessageObject.messageOwner.date, false); } actionBarContainer.setSubtitle(subtitle, animated); @@ -13073,7 +13149,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat setItemVisible(editItem, canPaint, animated && !pipItemVisible && !shouldMasksItemBeVisible); setItemVisible(masksItem, shouldMasksItemBeVisible, !pipItemVisible); } - String restrictionReason = MessagesController.getRestrictionReason(newMessageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(newMessageObject.currentAccount).getRestrictionReason(newMessageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { caption = restrictionReason; } else if (captionTranslated && newMessageObject.messageOwner != null && newMessageObject.messageOwner.translatedText != null && TextUtils.equals(newMessageObject.messageOwner.translatedToLanguage, TranslateAlert2.getToLanguage())) { @@ -13093,7 +13169,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } allowShare = !noforwards; } - if (parentChatActivity != null && parentChatActivity.getChatMode() == ChatActivity.MODE_QUICK_REPLIES) { + if (newMessageObject.isSponsored()) { + if (countView != null) { + countView.updateShow(false, animated); + } + } else if (parentChatActivity != null && parentChatActivity.getChatMode() == ChatActivity.MODE_QUICK_REPLIES) { if (countView != null) { countView.updateShow(false, animated); } @@ -13158,13 +13238,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (isEmbedVideo) { title = "YouTube"; } else if (newMessageObject.canPreviewDocument()) { - title = LocaleController.getString("AttachDocument", R.string.AttachDocument); + title = getString("AttachDocument", R.string.AttachDocument); } else if (newMessageObject.isVideo()) { - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else if (newMessageObject.isGif()) { - title = LocaleController.getString("AttachGif", R.string.AttachGif); + title = getString("AttachGif", R.string.AttachGif); } else { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } } else if (isInvoice) { if (countView != null) { @@ -13175,17 +13255,17 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (countView != null) { countView.updateShow(false, animated); } - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else if (newMessageObject.isGif()) { if (countView != null) { countView.updateShow(false, animated); } - title = LocaleController.getString("AttachGif", R.string.AttachGif); + title = getString("AttachGif", R.string.AttachGif); } else if (newMessageObject.getDocument() != null) { if (countView != null) { countView.updateShow(false, animated); } - title = LocaleController.getString("AttachDocument", R.string.AttachDocument); + title = getString("AttachDocument", R.string.AttachDocument); } if (DialogObject.isEncryptedDialog(currentDialogId) && !isEmbedVideo || noforwards) { setItemVisible(sendItem, false, false); @@ -13271,7 +13351,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (customTitle != null) { title = customTitle; } else if (isEvent) { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } boolean noforwards = avatarsDialogId != 0 && MessagesController.getInstance(currentAccount).isChatNoForwards(-avatarsDialogId); if (noforwards) { @@ -13452,9 +13532,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } if (fromCamera) { if (isVideo) { - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } } if (parentChatActivity != null) { @@ -13475,9 +13555,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat title = chat.title; } else { if (UserObject.isUserSelf(user)) { - title = LocaleController.getString(parentChatActivity.getChatMode() == ChatActivity.MODE_SAVED ? R.string.MyNotes : R.string.SavedMessages); + title = getString(parentChatActivity.getChatMode() == ChatActivity.MODE_SAVED ? R.string.MyNotes : R.string.SavedMessages); } else if (UserObject.isAnonymous(user)) { - title = LocaleController.getString(R.string.AnonymousForward); + title = getString(R.string.AnonymousForward); } else { title = UserObject.getUserName(user); } @@ -13546,13 +13626,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat menuItem.hideSubItem(gallery_menu_savegif); } menuItem.checkHideMenuItem(); - title = LocaleController.getString("AttachGif", R.string.AttachGif); + title = getString("AttachGif", R.string.AttachGif); } else { if (size == 1) { if (isVideo) { - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } } menuItem.showSubItem(gallery_menu_save); @@ -14357,6 +14437,17 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat captionContainer.addView(captionTextViewSwitcher, LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT); videoPreviewFrame.bringToFront(); } + if (messageObject != null && messageObject.isSponsored()) { + createAdButtonView(); + AndroidUtilities.removeFromParent(adButtonView); + adButtonTextView.setText(messageObject.sponsoredButtonText); + captionContainer.addView(adButtonView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 44, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, 16, 0, 16, 12)); + captionTextViewSwitcher.setPadding(0, 0, 0, dp(64)); + adButtonView.bringToFront(); + } else if (adButtonView != null) { + AndroidUtilities.removeFromParent(adButtonView); + captionTextViewSwitcher.setPadding(0, 0, 0, 0); + } } final boolean isCaptionEmpty = TextUtils.isEmpty(caption); @@ -14539,6 +14630,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } else { str = Emoji.replaceEmoji(new SpannableStringBuilder(caption), captionTextView.getPaint().getFontMetricsInt(), dp(20), false); } + if (messageObject != null && messageObject.isSponsored()) { + str = sponsoredCaption(messageObject, str); + } captionTextViewSwitcher.setTag(str); try { switchedToNext = captionTextViewSwitcher.setText(str, animated, lastCaptionTranslating != translating); @@ -14554,7 +14648,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat captionTextViewSwitcher.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); } else { if (needCaptionLayout) { - captionTextViewSwitcher.setText(LocaleController.getString("AddCaption", R.string.AddCaption), animated); + captionTextViewSwitcher.setText(getString("AddCaption", R.string.AddCaption), animated); captionTextViewSwitcher.getCurrentView().setTextColor(0xb2ffffff); captionTextViewSwitcher.setTag("empty"); captionTextViewSwitcher.setVisibility(View.VISIBLE); @@ -15013,7 +15107,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } if (messageObject != null) { - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(messageObject.currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { imageReceiver.setImageBitmap(parentActivity.getResources().getDrawable(R.drawable.photoview_placeholder)); return; @@ -15344,12 +15438,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat File file = null; boolean isVideo = false; + boolean canEdit = false; boolean capReplace = false; MessageObject messageObject = null; if (currentMessageObject != null) { messageObject = currentMessageObject; - capReplace = currentMessageObject.canEditMedia() && !currentMessageObject.isDocument(); + canEdit = currentMessageObject.canEditMedia() && !currentMessageObject.isDocument(); + capReplace = canEdit && currentMessageObject.isOutOwner(); isVideo = currentMessageObject.isVideo(); if (!TextUtils.isEmpty(currentMessageObject.messageOwner.attachPath)) { file = new File(currentMessageObject.messageOwner.attachPath); @@ -15370,6 +15466,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat File finalFile = file; boolean finalIsVideo = isVideo; + boolean finalCanEdit = canEdit; boolean finalCanReplace = capReplace; MessageObject finalMessageObject = messageObject; AndroidUtilities.runOnUIThread(() -> { @@ -15405,6 +15502,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } + @Override + public boolean canEdit(int index) { + return chatPhotoProvider != null && finalCanEdit; + } + @Override public boolean canReplace(int index) { return chatPhotoProvider != null && finalCanReplace; @@ -16034,7 +16136,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (am.isTouchExplorationEnabled()) { AccessibilityEvent event = AccessibilityEvent.obtain(); event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT); - event.getText().add(LocaleController.getString("AccDescrPhotoViewer", R.string.AccDescrPhotoViewer)); + event.getText().add(getString("AccDescrPhotoViewer", R.string.AccDescrPhotoViewer)); am.sendAccessibilityEvent(event); } @@ -18958,8 +19060,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat textPaint.setTextSize(dp(14)); textPaint.setColor(0xffcdcdcd); - lowQualityDescription = LocaleController.getString("AccDescrVideoCompressLow", R.string.AccDescrVideoCompressLow); - hightQualityDescription = LocaleController.getString("AccDescrVideoCompressHigh", R.string.AccDescrVideoCompressHigh); + lowQualityDescription = getString("AccDescrVideoCompressLow", R.string.AccDescrVideoCompressLow); + hightQualityDescription = getString("AccDescrVideoCompressHigh", R.string.AccDescrVideoCompressHigh); } @Override @@ -19048,7 +19150,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat muteItem.animate().alpha(1f).setDuration(180).start(); if (muteVideo) { if (customTitle == null) { - actionBarContainer.setSubtitle(LocaleController.getString("SoundMuted", R.string.SoundMuted)); + actionBarContainer.setSubtitle(getString("SoundMuted", R.string.SoundMuted)); } muteItem.setImageResource(R.drawable.video_send_mute); if (compressItem.getTag() != null) { @@ -19063,11 +19165,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat videoTimelineView.setMaxProgressDiff(1.0f); videoTimelineView.setMode(VideoTimelinePlayView.MODE_VIDEO); } - muteItem.setContentDescription(LocaleController.getString("NoSound", R.string.NoSound)); + muteItem.setContentDescription(getString("NoSound", R.string.NoSound)); } else { actionBarContainer.setSubtitle(currentSubtitle); muteItem.setImageResource(R.drawable.video_send_unmute); - muteItem.setContentDescription(LocaleController.getString("Sound", R.string.Sound)); + muteItem.setContentDescription(getString("Sound", R.string.Sound)); if (compressItem.getTag() != null) { compressItem.setAlpha(1.0f); compressItem.setEnabled(true); @@ -19164,7 +19266,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat currentSubtitle = String.format("%s, %s", videoDimension, videoTimeSize); actionBar.beginDelayedTransition(); if (customTitle == null) { - actionBarContainer.setSubtitle(muteVideo ? LocaleController.getString("SoundMuted", R.string.SoundMuted) : currentSubtitle); + actionBarContainer.setSubtitle(muteVideo ? getString("SoundMuted", R.string.SoundMuted) : currentSubtitle); } } @@ -19543,13 +19645,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat final int state = photoProgressViews[0].backgroundState; if (photoProgressViews[0].isVisible() && (state == PROGRESS_PLAY || state == PROGRESS_PAUSE || state == PROGRESS_LOAD || state == PROGRESS_CANCEL)) { if (state == PROGRESS_PLAY) { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionPlay", R.string.AccActionPlay)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionPlay", R.string.AccActionPlay)); } else if (state == PROGRESS_LOAD) { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionDownload", R.string.AccActionDownload)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionDownload", R.string.AccActionDownload)); } else if (state == PROGRESS_CANCEL) { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionCancelDownload", R.string.AccActionCancelDownload)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionCancelDownload", R.string.AccActionCancelDownload)); } else { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionPause", R.string.AccActionPause)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionPause", R.string.AccActionPause)); } playButtonAccessibilityOverlay.setVisibility(View.VISIBLE); } else { @@ -20670,4 +20772,262 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat matrix.preSkew(0, 4 * currentMirror * (1f - currentMirror) * .25f); } } + + public void openAdsMenu() { + if (currentMessageObject == null || !currentMessageObject.isSponsored() || menuItem.getAlpha() <= 0.5f) return; + + final int account = currentMessageObject.currentAccount; + final Theme.ResourcesProvider resourcesProvider = new DarkThemeResourceProvider(); + + final ItemOptions o = ItemOptions.makeOptions(containerView, resourcesProvider, menuItem, true); + o.translate(0, -dp(46)); + o.setGravity(Gravity.RIGHT); + +// if (!currentMessageObject.sponsoredCanReport) { +// FrameLayout sponsoredAbout = new FrameLayout(activityContext); +// sponsoredAbout.setMinimumHeight(AndroidUtilities.dp(56)); +// sponsoredAbout.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_dialogButtonSelector, resourcesProvider), 6, 0)); +// sponsoredAbout.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); +// +// ImageView infoImage = new ImageView(activityContext); +// infoImage.setScaleType(ImageView.ScaleType.CENTER); +// infoImage.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_actionBarDefaultSubmenuItemIcon, resourcesProvider), PorterDuff.Mode.MULTIPLY)); +// infoImage.setImageResource(R.drawable.msg_info); +// sponsoredAbout.addView(infoImage, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 40, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT))); +// +// TextView infoText = new TextView(activityContext) { +// @Override +// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST && getLayout() != null) { +// Layout layout = getLayout(); +// int width = 0; +// for (int i = 0; i < layout.getLineCount(); ++i) { +// width = Math.max(width, (int) Math.ceil(layout.getLineWidth(i))); +// } +// widthMeasureSpec = MeasureSpec.makeMeasureSpec(getPaddingLeft() + width + getPaddingRight(), MeasureSpec.EXACTLY); +// } +// super.onMeasure(widthMeasureSpec, heightMeasureSpec); +// } +// }; +// infoText.setMaxLines(3); +// infoText.setGravity(Gravity.LEFT); +// infoText.setEllipsize(TextUtils.TruncateAt.END); +// infoText.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem, resourcesProvider)); +// infoText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); +// infoText.setMaxWidth(AndroidUtilities.dp(240)); +// infoText.setText(LocaleController.getString(R.string.SponsoredMessageInfo)); +// infoText.setPadding(LocaleController.isRTL ? 0 : AndroidUtilities.dp(43), 0, LocaleController.isRTL ? AndroidUtilities.dp(43) : 0, 0); +// sponsoredAbout.addView(infoText, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL)); +// +// o.addView(sponsoredAbout); +// sponsoredAbout.setOnClickListener(v1 -> { +// if (activityContext == null) { +// return; +// } +// BottomSheet.Builder builder = new BottomSheet.Builder(activityContext, false, resourcesProvider); +// BottomSheet[] sheet = new BottomSheet[1]; +// builder.setCustomView(new SponsoredMessageInfoView(activityContext, () -> { +// sheet[0].dismiss(); +// closePhoto(true, false); +// }, resourcesProvider)); +// sheet[0] = builder.show(); +// o.dismiss(); +// }); +// o.addGap(); +// } + + if (currentMessageObject.sponsoredInfo != null || currentMessageObject.sponsoredAdditionalInfo != null || currentMessageObject.sponsoredUrl != null && !currentMessageObject.sponsoredUrl.startsWith("https://" + MessagesController.getInstance(currentAccount).linkPrefix)) { + ItemOptions info = o.makeSwipeback(); + + ActionBarMenuSubItem backCell = new ActionBarMenuSubItem(activityContext, true, false, resourcesProvider); + backCell.setItemHeight(44); + backCell.setTextAndIcon(getString(R.string.Back), R.drawable.msg_arrow_back); + backCell.getTextView().setPadding(LocaleController.isRTL ? 0 : AndroidUtilities.dp(40), 0, LocaleController.isRTL ? AndroidUtilities.dp(40) : 0, 0); + backCell.setOnClickListener(v1 -> o.closeSwipeback()); + info.addView(backCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + info.addView(new ActionBarPopupWindow.GapView(activityContext, resourcesProvider), LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); + + ArrayList sections = new ArrayList<>(); + + if (currentMessageObject.sponsoredUrl != null && !TextUtils.equals(AndroidUtilities.getHostAuthority(currentMessageObject.sponsoredUrl), MessagesController.getInstance(currentAccount).linkPrefix)) { + TextView textView = new TextView(activityContext); + textView.setTextColor(getThemedColor(Theme.key_chat_messageLinkIn)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); + textView.setMaxWidth(AndroidUtilities.dp(300)); + Uri uri = Uri.parse(currentMessageObject.sponsoredUrl); + textView.setText(Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null)); + textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, currentMessageObject.sponsoredAdditionalInfo == null ? 6 : 0)); + textView.setOnClickListener(e -> { + if (currentMessageObject == null) { + return; + } + o.dismiss(); + if (parentFragment instanceof ChatActivity) { + ((ChatActivity) parentFragment).logSponsoredClicked(currentMessageObject); + } + Browser.openUrl(activityContext, currentMessageObject.sponsoredUrl, true, false); + }); + textView.setOnLongClickListener(e -> { + if (currentMessageObject == null) { + return false; + } + if (AndroidUtilities.addToClipboard(currentMessageObject.sponsoredUrl)) { + BulletinFactory.of(Bulletin.BulletinWindow.make(activityContext), resourcesProvider).createCopyLinkBulletin().show(); + } + return true; + }); + sections.add(textView); + } + + if (currentMessageObject.sponsoredInfo != null) { + TextView textView = new TextView(activityContext); + textView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); + textView.setMaxWidth(AndroidUtilities.dp(300)); + textView.setText(currentMessageObject.sponsoredInfo); + textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, currentMessageObject.sponsoredAdditionalInfo == null ? 6 : 0)); + textView.setOnClickListener(e -> { + if (AndroidUtilities.addToClipboard(currentMessageObject.sponsoredInfo)) { + BulletinFactory.of(Bulletin.BulletinWindow.make(activityContext), resourcesProvider).createCopyBulletin(LocaleController.getString(R.string.TextCopied)).show(); + } + }); + sections.add(textView); + } + + if (currentMessageObject.sponsoredAdditionalInfo != null) { + TextView textView = new TextView(activityContext); + textView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); + textView.setMaxWidth(AndroidUtilities.dp(300)); + textView.setText(currentMessageObject.sponsoredAdditionalInfo); + textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, 6)); + textView.setOnClickListener(e -> { + if (AndroidUtilities.addToClipboard(currentMessageObject.sponsoredAdditionalInfo)) { + BulletinFactory.of(Bulletin.BulletinWindow.make(activityContext), resourcesProvider).createCopyBulletin(LocaleController.getString(R.string.TextCopied)).show(); + } + }); + sections.add(textView); + } + + for (int i = 0; i < sections.size(); ++i) { + View section = sections.get(i); + if (i > 0) { + FrameLayout separator = new FrameLayout(activityContext); + separator.setBackgroundColor(getThemedColor(Theme.key_divider)); + LinearLayout.LayoutParams params = LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 1); + params.height = 1; + info.addView(separator, params); + } + info.addView(section, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } + o.add(R.drawable.msg_channel, getString(R.string.SponsoredMessageSponsorReportable), () -> o.openSwipeback(info)); + } + + if (!UserConfig.getInstance(account).isPremium() && !MessagesController.getInstance(currentAccount).premiumFeaturesBlocked() && !currentMessageObject.sponsoredCanReport) { + o.add(R.drawable.msg_block2, getString(R.string.HideAd), () -> { + if (UserConfig.getInstance(account).isPremium()) { + BulletinFactory.of(containerView, resourcesProvider) + .createAdReportedBulletin(LocaleController.getString(R.string.AdHidden)) + .show(); + MessagesController.getInstance(account).disableAds(true); + if (parentFragment instanceof ChatActivity) { + ChatActivity chatActivity = (ChatActivity) parentFragment; + chatActivity.removeFromSponsored(currentMessageObject); + chatActivity.removeMessageWithThanos(currentMessageObject); + } + } else { + new PremiumFeatureBottomSheet(parentFragment, PremiumPreviewFragment.PREMIUM_FEATURE_ADS, true).show(); + } + }); + } + if (currentMessageObject.sponsoredCanReport || true) { + o.add(R.drawable.msg_info, getString(R.string.AboutRevenueSharingAds), () -> { + RevenueSharingAdsInfoBottomSheet.showAlert(activityContext, parentFragment, resourcesProvider); + }); +// o.add(R.drawable.msg_block2, getString(R.string.ReportAd), () -> { +// +// }); + if (parentFragment instanceof ChatActivity && !MessagesController.getInstance(account).premiumFeaturesBlocked()) { + o.addGap(); + o.add(R.drawable.msg_cancel, getString(R.string.RemoveAds), () -> { + if (UserConfig.getInstance(account).isPremium()) { + BulletinFactory.of(containerView, resourcesProvider) + .createAdReportedBulletin(LocaleController.getString(R.string.AdHidden)) + .show(); + MessagesController.getInstance(account).disableAds(true); + if (parentFragment instanceof ChatActivity) { + ChatActivity chatActivity = (ChatActivity) parentFragment; + chatActivity.removeFromSponsored(currentMessageObject); + chatActivity.removeMessageWithThanos(currentMessageObject); + } + } else { + new PremiumFeatureBottomSheet(parentFragment, PremiumPreviewFragment.PREMIUM_FEATURE_ADS, true).show(); + } + }); + } + } + + if (o.getItemsCount() <= 0) return; + o.show(); + } + + private static CharSequence sponsoredCaption(MessageObject messageObject, CharSequence str) { + SpannableStringBuilder sb = new SpannableStringBuilder(); + if (!TextUtils.isEmpty(messageObject.sponsoredTitle)) { + sb.append(messageObject.sponsoredTitle); + sb.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sb.setSpan(new LineHeightSpan() { + @Override + public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int lineHeight, Paint.FontMetricsInt fm) { + fm.descent += dp(4); + fm.ascent = fm.ascent; + } + }, 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sb.append("\n"); + } + sb.append(str); +// sb.append("\n"); +// sb.setSpan(new LineHeightSpan() { +// @Override +// public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int lineHeight, Paint.FontMetricsInt fm) { +// final int originHeight = fm.descent - fm.ascent; +// if (originHeight <= 0) { +// return; +// } +// final float ratio = dp(72) * 1.0f / originHeight; +// fm.descent = Math.round(fm.descent * ratio); +// fm.ascent = fm.descent - dp(72); +// } +// }, sb.length() - 1, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + return sb; + } + + private void createAdButtonView() { + if (adButtonView != null) return; + + adButtonView = new FrameLayout(activityContext); + adButtonView.setBackground(Theme.createRadSelectorDrawable(0x24FFFFFF, 0x15FFFFFF, 8, 8)); + ScaleStateListAnimator.apply(adButtonView, .05f, 1.25f); + + adButtonTextView = new TextView(activityContext); + adButtonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + adButtonTextView.setTextColor(0xFFFFFFFF); + adButtonTextView.setTypeface(AndroidUtilities.bold()); + adButtonView.addView(adButtonTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER)); + + adButtonView.setOnClickListener(v -> { + if (currentMessageObject == null || !currentMessageObject.isSponsored()) return; + if (parentFragment instanceof ChatActivity) { + ((ChatActivity) parentFragment).logSponsoredClicked(currentMessageObject); + } + closePhoto(true, false); + if (currentMessageObject.sponsoredUrl != null) { + Browser.openUrl(LaunchActivity.instance != null ? LaunchActivity.instance : activityContext, Uri.parse(currentMessageObject.sponsoredUrl), true, false, false, null, null, false); + } + }); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java index 81178df6c..6009d569f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java @@ -208,6 +208,7 @@ public class PremiumPreviewFragment extends BaseFragment implements Notification public final static int PREMIUM_FEATURE_FOLDER_TAGS = 35; public final static int PREMIUM_FEATURE_BUSINESS_INTRO = 36; public final static int PREMIUM_FEATURE_BUSINESS_CHAT_LINKS = 37; + public final static int PREMIUM_FEATURE_MESSAGE_EFFECTS = 38; private int statusBarHeight; private int firstViewHeight; @@ -263,6 +264,8 @@ public class PremiumPreviewFragment extends BaseFragment implements Notification return PREMIUM_FEATURE_EMOJI_STATUS; case "translations": return PREMIUM_FEATURE_TRANSLATIONS; + case "effects": + return PREMIUM_FEATURE_MESSAGE_EFFECTS; case "stories": return PREMIUM_FEATURE_STORIES; @@ -348,6 +351,8 @@ public class PremiumPreviewFragment extends BaseFragment implements Notification return "emoji_status"; case PREMIUM_FEATURE_TRANSLATIONS: return "translations"; + case PREMIUM_FEATURE_MESSAGE_EFFECTS: + return "effects"; case PREMIUM_FEATURE_STORIES: return "stories"; case PREMIUM_FEATURE_STORIES_STEALTH_MODE: @@ -893,6 +898,7 @@ public class PremiumPreviewFragment extends BaseFragment implements Notification premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_LAST_SEEN, R.drawable.menu_premium_seen, getString(R.string.PremiumPreviewLastSeen), getString(R.string.PremiumPreviewLastSeenDescription))); premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_MESSAGE_PRIVACY, R.drawable.menu_premium_privacy, getString(R.string.PremiumPreviewMessagePrivacy), getString(R.string.PremiumPreviewMessagePrivacyDescription))); premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_BUSINESS, R.drawable.filled_premium_business, applyNewSpan(getString(R.string.TelegramBusiness)), getString(R.string.PremiumPreviewBusinessDescription))); + premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_MESSAGE_EFFECTS, R.drawable.menu_premium_effects, applyNewSpan(getString(R.string.PremiumPreviewEffects)), getString(R.string.PremiumPreviewEffectsDescription))); if (messagesController.premiumFeaturesTypesToPosition.size() > 0) { for (int i = 0; i < premiumFeatures.size(); i++) { @@ -1958,7 +1964,8 @@ public class PremiumPreviewFragment extends BaseFragment implements Notification if (currentSubscriptionTier != null && currentSubscriptionTier.subscriptionOption != null && currentSubscriptionTier.subscriptionOption.transaction != null) { updateParams = BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(BillingController.getInstance().getLastPremiumToken()) - .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) +// .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) + .setSubscriptionReplacementMode(BillingFlowParams.SubscriptionUpdateParams.ReplacementMode.CHARGE_FULL_PRICE) .build(); } buyPremium(this, tier, "settings", true, updateParams); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java index 280d551c6..b9f75cb20 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java @@ -1430,6 +1430,7 @@ public class PrivacyControlActivity extends BaseFragment implements Notification userFull.birthday = birthday; getMessagesStorage().updateUserInfo(userFull, false); } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { BulletinFactory.of(PrivacyControlActivity.this) diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index f02172203..b799bf45a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -87,7 +87,9 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; +import android.webkit.CookieManager; import android.webkit.WebStorage; +import android.webkit.WebView; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; @@ -156,6 +158,7 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_fragment; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; @@ -256,6 +259,8 @@ import org.telegram.ui.Components.TypefaceSpan; import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.VectorAvatarThumbDrawable; import org.telegram.ui.Components.voip.VoIPHelper; +import org.telegram.ui.Stars.BotStarsActivity; +import org.telegram.ui.Stars.BotStarsController; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.ProfileStoriesView; @@ -266,12 +271,15 @@ import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import org.telegram.ui.Stories.recorder.DualCameraView; import org.telegram.ui.Stories.recorder.StoryRecorder; import org.telegram.ui.bots.BotBiometry; +import org.telegram.ui.bots.BotWebViewAttachedSheet; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.time.LocalDate; import java.time.Period; import java.util.ArrayList; @@ -339,6 +347,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private AnimatorSet avatarAnimation; private RadialProgressView avatarProgressView; private ImageView timeItem; + private ImageView starBgItem, starFgItem; private TimerDrawable timerDrawable; private ProfileGalleryView avatarsViewPager; private PagerIndicatorView avatarsViewPagerIndicatorView; @@ -423,6 +432,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private boolean recreateMenuAfterAnimation; private int playProfileAnimation; private boolean needTimerImage; + private boolean needStarImage; private boolean allowProfileAnimation = true; private boolean disableProfileAnimation = false; private float extraHeight; @@ -474,7 +484,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private TLRPC.EncryptedChat currentEncryptedChat; private TLRPC.Chat currentChat; - private TLRPC.BotInfo botInfo; + private TL_bots.BotInfo botInfo; private TLRPC.ChannelParticipant currentChannelParticipant; private TLRPC.TL_account_password currentPassword; @@ -516,6 +526,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private final static int edit_profile = 41; private final static int copy_link_profile = 42; private final static int set_username = 43; + private final static int bot_privacy = 44; private Rect rect = new Rect(); @@ -588,6 +599,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private int businessRow; private int premiumGiftingRow; private int premiumSectionsRow; + private int botAppRow; private int settingsTimerRow; private int settingsKeyRow; @@ -601,6 +613,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private int subscribersRequestsRow; private int administratorsRow; private int settingsRow; + private int balanceRow; + private int balanceDividerRow; private int blockedUsersRow; private int membersSectionRow; @@ -1881,6 +1895,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. getNotificationCenter().addObserver(this, NotificationCenter.userIsPremiumBlockedUpadted); getNotificationCenter().addObserver(this, NotificationCenter.currentUserPremiumStatusChanged); getNotificationCenter().addObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().addObserver(this, NotificationCenter.botStarsUpdated); NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.emojiLoaded); updateRowsIds(); if (listAdapter != null) { @@ -1925,6 +1940,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return bottomButtonsContainer == null; } }); + + if (userId != 0 && UserObject.isUserSelf(getMessagesController().getUser(userId)) && !myProfile) { + getMessagesController().getContentSettings(null); + } + return true; } @@ -1977,6 +1997,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. getNotificationCenter().removeObserver(this, NotificationCenter.userIsPremiumBlockedUpadted); getNotificationCenter().removeObserver(this, NotificationCenter.currentUserPremiumStatusChanged); getNotificationCenter().removeObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().removeObserver(this, NotificationCenter.botStarsUpdated); NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.emojiLoaded); if (avatarsViewPager != null) { avatarsViewPager.onDestroy(); @@ -2439,6 +2460,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); + } else if (id == bot_privacy) { + BotWebViewAttachedSheet.openPrivacy(currentAccount, userId); } else if (id == gallery_menu_save) { if (getParentActivity() == null) { return; @@ -3287,10 +3310,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } if (myProfile) { editItem = menu.addItem(edit_profile, R.drawable.group_edit_profile); - editItem.setContentDescription(LocaleController.getString("Edit", R.string.Edit)); + editItem.setContentDescription(LocaleController.getString(R.string.Edit)); } else { editItem = menu.addItem(edit_channel, R.drawable.group_edit_profile); - editItem.setContentDescription(LocaleController.getString("Edit", R.string.Edit)); + editItem.setContentDescription(LocaleController.getString(R.string.Edit)); } otherItem = menu.addItem(10, R.drawable.ic_ab_other, resourcesProvider); ttlIconView = new ImageView(context); @@ -3362,8 +3385,13 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. @Override public boolean onInterceptTouchEvent(MotionEvent e) { - if (sharedMediaLayout.canEditStories() && sharedMediaLayout != null && sharedMediaLayout.isActionModeShown() && sharedMediaLayout.getClosestTab() == SharedMediaLayout.TAB_STORIES) { - return false; + if (sharedMediaLayout != null) { + if (sharedMediaLayout.canEditStories() && sharedMediaLayout.isActionModeShown() && sharedMediaLayout.getClosestTab() == SharedMediaLayout.TAB_BOT_PREVIEWS) { + return false; + } + if (sharedMediaLayout.canEditStories() && sharedMediaLayout.isActionModeShown() && sharedMediaLayout.getClosestTab() == SharedMediaLayout.TAB_STORIES) { + return false; + } } return super.onInterceptTouchEvent(e); } @@ -3769,19 +3797,13 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } else if (position == joinRow) { getMessagesController().addUserToChat(currentChat.id, getUserConfig().getCurrentUser(), 0, null, ProfileActivity.this, true, () -> { - updateRowsIds(); - if (listAdapter != null) { - listAdapter.notifyDataSetChanged(); - } + updateListAnimated(false); }, err -> { if (err != null && "INVITE_REQUEST_SENT".equals(err.text)) { SharedPreferences preferences = MessagesController.getNotificationsSettings(currentAccount); preferences.edit().putLong("dialog_join_requested_time_" + dialogId, System.currentTimeMillis()).commit(); JoinGroupAlert.showBulletin(context, ProfileActivity.this, ChatObject.isChannel(currentChat) && !currentChat.megagroup); - updateRowsIds(); - if (listAdapter != null) { - listAdapter.notifyDataSetChanged(); - } + updateListAnimated(false); if (lastFragment instanceof ChatActivity) { ((ChatActivity) lastFragment).showBottomOverlayProgress(false, true); } @@ -3809,6 +3831,15 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. presentFragment(fragment); } else if (position == settingsRow) { editItem.performClick(); + } else if (position == balanceRow) { + Bundle args = new Bundle(); + if (userInfo != null) { + presentFragment(new BotStarsActivity(userId)); + } else { + args.putLong("chat_id", chatId); + args.putBoolean("start_from_monetization", true); + presentFragment(new StatisticActivity(args)); + } } else if (position == blockedUsersRow) { Bundle args = new Bundle(); args.putLong("chat_id", chatId); @@ -3918,32 +3949,33 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. pressCount++; if (pressCount >= 2 || BuildVars.DEBUG_PRIVATE_VERSION) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity(), resourcesProvider); - builder.setTitle(LocaleController.getString("DebugMenu", R.string.DebugMenu)); + builder.setTitle(getString("DebugMenu", R.string.DebugMenu)); CharSequence[] items; items = new CharSequence[]{ - LocaleController.getString("DebugMenuImportContacts", R.string.DebugMenuImportContacts), - LocaleController.getString("DebugMenuReloadContacts", R.string.DebugMenuReloadContacts), - LocaleController.getString("DebugMenuResetContacts", R.string.DebugMenuResetContacts), - LocaleController.getString("DebugMenuResetDialogs", R.string.DebugMenuResetDialogs), - BuildVars.DEBUG_VERSION ? null : (BuildVars.LOGS_ENABLED ? LocaleController.getString("DebugMenuDisableLogs", R.string.DebugMenuDisableLogs) : LocaleController.getString("DebugMenuEnableLogs", R.string.DebugMenuEnableLogs)), - SharedConfig.inappCamera ? LocaleController.getString("DebugMenuDisableCamera", R.string.DebugMenuDisableCamera) : LocaleController.getString("DebugMenuEnableCamera", R.string.DebugMenuEnableCamera), - LocaleController.getString("DebugMenuClearMediaCache", R.string.DebugMenuClearMediaCache), - LocaleController.getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings), + getString("DebugMenuImportContacts", R.string.DebugMenuImportContacts), + getString("DebugMenuReloadContacts", R.string.DebugMenuReloadContacts), + getString("DebugMenuResetContacts", R.string.DebugMenuResetContacts), + getString("DebugMenuResetDialogs", R.string.DebugMenuResetDialogs), + BuildVars.DEBUG_VERSION ? null : (BuildVars.LOGS_ENABLED ? getString("DebugMenuDisableLogs", R.string.DebugMenuDisableLogs) : getString("DebugMenuEnableLogs", R.string.DebugMenuEnableLogs)), + SharedConfig.inappCamera ? getString("DebugMenuDisableCamera", R.string.DebugMenuDisableCamera) : getString("DebugMenuEnableCamera", R.string.DebugMenuEnableCamera), + getString("DebugMenuClearMediaCache", R.string.DebugMenuClearMediaCache), + getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings), null, - BuildVars.DEBUG_PRIVATE_VERSION || ApplicationLoader.isStandaloneBuild() ? LocaleController.getString("DebugMenuCheckAppUpdate", R.string.DebugMenuCheckAppUpdate) : null, - LocaleController.getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs), + BuildVars.DEBUG_PRIVATE_VERSION || ApplicationLoader.isStandaloneBuild() ? getString("DebugMenuCheckAppUpdate", R.string.DebugMenuCheckAppUpdate) : null, + getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs), BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.disableVoiceAudioEffects ? "Enable voip audio effects" : "Disable voip audio effects") : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Clean app update" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Reset suggestions" : null, - BuildVars.DEBUG_PRIVATE_VERSION ? LocaleController.getString(R.string.DebugMenuClearWebViewCache) : null, - Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? LocaleController.getString(SharedConfig.debugWebView ? R.string.DebugMenuDisableWebViewDebug : R.string.DebugMenuEnableWebViewDebug) : null, + BuildVars.DEBUG_PRIVATE_VERSION ? getString(R.string.DebugMenuClearWebViewCache) : null, + getString(R.string.DebugMenuClearWebViewCookies), + Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? getString(SharedConfig.debugWebView ? R.string.DebugMenuDisableWebViewDebug : R.string.DebugMenuEnableWebViewDebug) : null, (AndroidUtilities.isTabletInternal() && BuildVars.DEBUG_PRIVATE_VERSION) ? (SharedConfig.forceDisableTabletMode ? "Enable tablet mode" : "Disable tablet mode") : null, - BuildVars.DEBUG_PRIVATE_VERSION ? LocaleController.getString(SharedConfig.isFloatingDebugActive ? R.string.FloatingDebugDisable : R.string.FloatingDebugEnable) : null, + BuildVars.DEBUG_PRIVATE_VERSION ? getString(SharedConfig.isFloatingDebugActive ? R.string.FloatingDebugDisable : R.string.FloatingDebugEnable) : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Force remove premium suggestions" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Share device info" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Force performance class" : null, BuildVars.DEBUG_PRIVATE_VERSION && !InstantCameraView.allowBigSizeCameraDebug() ? (!SharedConfig.bigCameraForRound ? "Force big camera for round" : "Disable big camera for round") : null, - LocaleController.getString(DualCameraView.dualAvailableStatic(getContext()) ? "DebugMenuDualOff" : "DebugMenuDualOn"), + getString(DualCameraView.dualAvailableStatic(getContext()) ? "DebugMenuDualOff" : "DebugMenuDualOn"), BuildVars.DEBUG_VERSION ? (SharedConfig.useSurfaceInStories ? "back to TextureView in stories" : "use SurfaceView in stories") : null, BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.photoViewerBlur ? "do not blur in photoviewer" : "blur in photoviewer") : null, !SharedConfig.payByInvoice ? "Enable Invoice Payment" : "Disable Invoice Payment", @@ -3952,21 +3984,22 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. BuildVars.DEBUG_VERSION ? "Clear bot biometry data" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Clear all login tokens" : null, SharedConfig.canBlurChat() && Build.VERSION.SDK_INT >= 31 ? (SharedConfig.useNewBlur ? "back to cpu blur" : "use new gpu blur") : null, - BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.botTabs3DEffect ? "disable tabs 3d effect" : "enable tabs 3d effect") : null + BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.botTabs3DEffect ? "disable tabs 3d effect" : "enable tabs 3d effect") : null, + SharedConfig.adaptableColorInBrowser ? "Disabled adaptive browser colors" : "Enable adaptive browser colors" }; builder.setItems(items, (dialog, which) -> { - if (which == 0) { + if (which == 0) { // Import Contacts getUserConfig().syncContacts = true; getUserConfig().saveConfig(false); getContactsController().forceImportContacts(); - } else if (which == 1) { + } else if (which == 1) { // Reload Contacts getContactsController().loadContacts(false, 0); - } else if (which == 2) { + } else if (which == 2) { // Reset Imported Contacts getContactsController().resetImportedContacts(); - } else if (which == 3) { + } else if (which == 3) { // Reset Dialogs getMessagesController().forceResetDialogs(); - } else if (which == 4) { + } else if (which == 4) { // Logs BuildVars.LOGS_ENABLED = !BuildVars.LOGS_ENABLED; SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", Context.MODE_PRIVATE); sharedPreferences.edit().putBoolean("logsEnabled", BuildVars.LOGS_ENABLED).commit(); @@ -3980,9 +4013,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. FileLog.e(e); } } - } else if (which == 5) { + } else if (which == 5) { // In-app camera SharedConfig.toggleInappCamera(); - } else if (which == 6) { + } else if (which == 6) { // Clear sent media cache getMessagesStorage().clearSentMedia(); SharedConfig.setNoSoundHintShowed(false); SharedPreferences.Editor editor = MessagesController.getGlobalMainSettings().edit(); @@ -4015,33 +4048,44 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } editor.commit(); - } else if (which == 7) { + } else if (which == 7) { // Call settings VoIPHelper.showCallDebugSettings(getParentActivity()); - } else if (which == 8) { + } else if (which == 8) { // ? SharedConfig.toggleRoundCamera16to9(); - } else if (which == 9) { + } else if (which == 9) { // Check app update ((LaunchActivity) getParentActivity()).checkAppUpdate(true, null); - } else if (which == 10) { + } else if (which == 10) { // Read all chats getMessagesStorage().readAllDialogs(-1); - } else if (which == 11) { + } else if (which == 11) { // Voip audio effects SharedConfig.toggleDisableVoiceAudioEffects(); - } else if (which == 12) { + } else if (which == 12) { // Clean app update SharedConfig.pendingAppUpdate = null; SharedConfig.saveConfig(); NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.appUpdateAvailable); - } else if (which == 13) { + } else if (which == 13) { // Reset suggestions Set suggestions = getMessagesController().pendingSuggestions; suggestions.add("VALIDATE_PHONE_NUMBER"); suggestions.add("VALIDATE_PASSWORD"); getNotificationCenter().postNotificationName(NotificationCenter.newSuggestionsAvailable); - } else if (which == 14) { + } else if (which == 14) { // WebView Cache ApplicationLoader.applicationContext.deleteDatabase("webview.db"); ApplicationLoader.applicationContext.deleteDatabase("webviewCache.db"); WebStorage.getInstance().deleteAllData(); + try { + WebView webView = new WebView(ApplicationLoader.applicationContext); + webView.clearHistory(); + webView.destroy(); + } catch (Exception e) {} } else if (which == 15) { + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeAllCookies(null); + cookieManager.flush(); + } + } else if (which == 16) { // WebView debug SharedConfig.toggleDebugWebView(); - Toast.makeText(getParentActivity(), LocaleController.getString(SharedConfig.debugWebView ? R.string.DebugMenuWebViewDebugEnabled : R.string.DebugMenuWebViewDebugDisabled), Toast.LENGTH_SHORT).show(); - } else if (which == 16) { + Toast.makeText(getParentActivity(), getString(SharedConfig.debugWebView ? R.string.DebugMenuWebViewDebugEnabled : R.string.DebugMenuWebViewDebugDisabled), Toast.LENGTH_SHORT).show(); + } else if (which == 17) { // Tablet mode SharedConfig.toggleForceDisableTabletMode(); Activity activity = AndroidUtilities.findActivity(context); @@ -4050,9 +4094,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. activity.finishAffinity(); // Finishes all activities. activity.startActivity(intent); // Start the launch activity System.exit(0); - } else if (which == 17) { - FloatingDebugController.setActive((LaunchActivity) getParentActivity(), !FloatingDebugController.isActive()); } else if (which == 18) { + FloatingDebugController.setActive((LaunchActivity) getParentActivity(), !FloatingDebugController.isActive()); + } else if (which == 19) { getMessagesController().loadAppConfig(); TLRPC.TL_help_dismissSuggestion req = new TLRPC.TL_help_dismissSuggestion(); req.suggestion = "VALIDATE_PHONE_NUMBER"; @@ -4065,7 +4109,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. getMessagesController().loadAppConfig(); }); }); - } else if (which == 19) { + } else if (which == 20) { int androidVersion = Build.VERSION.SDK_INT; int cpuCount = ConnectionsManager.CPU_COUNT; int memoryClass = ((ActivityManager) ApplicationLoader.applicationContext.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); @@ -4167,7 +4211,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }, 250); } }); - } else if (which == 20) { + } else if (which == 21) { AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity(), resourcesProvider); builder2.setTitle("Force performance class"); int currentClass = SharedConfig.getDevicePerformanceClass(); @@ -4184,44 +4228,46 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. SharedConfig.overrideDevicePerformanceClass(newClass); } }); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder2.setNegativeButton(getString("Cancel", R.string.Cancel), null); builder2.show(); - } else if (which == 21) { - SharedConfig.toggleRoundCamera(); } else if (which == 22) { + SharedConfig.toggleRoundCamera(); + } else if (which == 23) { boolean enabled = DualCameraView.dualAvailableStatic(getContext()); MessagesController.getGlobalMainSettings().edit().putBoolean("dual_available", !enabled).apply(); try { - Toast.makeText(getParentActivity(), LocaleController.getString(!enabled ? R.string.DebugMenuDualOnToast : R.string.DebugMenuDualOffToast), Toast.LENGTH_SHORT).show(); + Toast.makeText(getParentActivity(), getString(!enabled ? R.string.DebugMenuDualOnToast : R.string.DebugMenuDualOffToast), Toast.LENGTH_SHORT).show(); } catch (Exception e) {} - } else if (which == 23) { + } else if (which == 24) { SharedConfig.toggleSurfaceInStories(); for (int i = 0; i < getParentLayout().getFragmentStack().size(); i++) { getParentLayout().getFragmentStack().get(i).clearSheets(); } - } else if (which == 24) { - SharedConfig.togglePhotoViewerBlur(); } else if (which == 25) { - SharedConfig.togglePaymentByInvoice(); + SharedConfig.togglePhotoViewerBlur(); } else if (which == 26) { - getMediaDataController().loadAttachMenuBots(false, true); + SharedConfig.togglePaymentByInvoice(); } else if (which == 27) { - SharedConfig.toggleUseCamera2(currentAccount); + getMediaDataController().loadAttachMenuBots(false, true); } else if (which == 28) { - BotBiometry.clear(); + SharedConfig.toggleUseCamera2(currentAccount); } else if (which == 29) { - AuthTokensHelper.clearLogInTokens(); + BotBiometry.clear(); } else if (which == 30) { - SharedConfig.toggleUseNewBlur(); + AuthTokensHelper.clearLogInTokens(); } else if (which == 31) { + SharedConfig.toggleUseNewBlur(); + } else if (which == 32) { SharedConfig.setBotTabs3DEffect(!SharedConfig.botTabs3DEffect); + } else if (which == 33) { + SharedConfig.toggleBrowserAdaptableColors(); } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } else { try { - Toast.makeText(getParentActivity(), LocaleController.getString("DebugMenuLongPress", R.string.DebugMenuLongPress), Toast.LENGTH_SHORT).show(); + Toast.makeText(getParentActivity(), getString("DebugMenuLongPress", R.string.DebugMenuLongPress), Toast.LENGTH_SHORT).show(); } catch (Exception e) { FileLog.e(e); } @@ -4240,7 +4286,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (userInfo == null) return false; try { AndroidUtilities.addToClipboard(UserInfoActivity.birthdayString(userInfo.birthday)); - BulletinFactory.of(ProfileActivity.this).createCopyBulletin(LocaleController.getString(R.string.BirthdayCopied)).show(); + BulletinFactory.of(ProfileActivity.this).createCopyBulletin(getString(R.string.BirthdayCopied)).show(); } catch (Exception e) { FileLog.e(e); } @@ -4607,6 +4653,21 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. timeItem.setTranslationY(-1); frameLayout.addView(timeItem, LayoutHelper.createFrame(34, 34, Gravity.TOP | Gravity.LEFT)); + starBgItem = new ImageView(context); + starBgItem.setImageResource(R.drawable.star_small_outline); + starBgItem.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_actionBarDefault), PorterDuff.Mode.SRC_IN)); + starBgItem.setAlpha(0.0f); + starBgItem.setScaleY(0.0f); + starBgItem.setScaleX(0.0f); + frameLayout.addView(starBgItem, LayoutHelper.createFrame(20, 20, Gravity.TOP | Gravity.LEFT)); + + starFgItem = new ImageView(context); + starFgItem.setImageResource(R.drawable.star_small_inner); + starFgItem.setAlpha(0.0f); + starFgItem.setScaleY(0.0f); + starFgItem.setScaleX(0.0f); + frameLayout.addView(starFgItem, LayoutHelper.createFrame(20, 20, Gravity.TOP | Gravity.LEFT)); + showAvatarProgress(false, false); if (avatarsViewPager != null) { @@ -5209,7 +5270,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }); return; } - StoryRecorder.getInstance(getParentActivity(), currentAccount) + StoryRecorder recorder = StoryRecorder.getInstance(getParentActivity(), currentAccount) .selectedPeerId(getDialogId()) .canChangePeer(false) .closeToWhenSent(new StoryRecorder.ClosingViewProvider() { @@ -5230,8 +5291,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. updateAvatarRoundRadius(); return StoryRecorder.SourceView.fromAvatarImage(avatarImage, ChatObject.isForum(currentChat)); } - }) - .open(StoryRecorder.SourceView.fromFloatingButton(floatingButtonContainer), true); + }); + recorder.open(StoryRecorder.SourceView.fromFloatingButton(floatingButtonContainer), true); }); floatingButton = new RLottieImageView(context); @@ -5288,6 +5349,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } private void hideFloatingButton(boolean hide) { + TLRPC.User bot = getMessagesController().getUser(userId); + if (bot != null && bot.bot && bot.bot_can_edit && bot.bot_has_main_app) { + StoriesController.BotPreviewsList list = (StoriesController.BotPreviewsList) getMessagesController().getStoriesController().getStoriesList(userId, StoriesController.StoriesList.TYPE_BOTS); + ArrayList uploadingStories = getMessagesController().getStoriesController().getUploadingStories(userId); + if (list != null && list.getCount() + (uploadingStories == null ? 0 : uploadingStories.size()) >= getMessagesController().botPreviewMediasMax) { + hide = true; + } + } if (floatingHidden == hide || floatingButtonContainer == null || waitCanSendStoryRequest) { return; } @@ -6599,7 +6668,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (mediaOptionsItem != null) { mediaOptionsItem.setVisibility(View.VISIBLE); } - if (sharedMediaLayout.isCalendarItemVisible()) { + if (sharedMediaLayout.isOptionsItemVisible()) { sharedMediaLayout.photoVideoOptionsItem.setVisibility(View.VISIBLE); sharedMediaLayout.animateSearchToOptions(true, false); } else { @@ -6858,7 +6927,13 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } else if (id == SharedMediaLayout.TAB_GROUPUSERS) { mediaCounterTextView.setText(onlineTextView[1].getText()); } else if (id == SharedMediaLayout.TAB_STORIES) { - mediaCounterTextView.setText(LocaleController.formatPluralString("ProfileStoriesCount", sharedMediaLayout.getStoriesCount(id))); + if (isBot) { + mediaCounterTextView.setText(sharedMediaLayout.getBotPreviewsSubtitle(false)); + } else { + mediaCounterTextView.setText(LocaleController.formatPluralString("ProfileStoriesCount", sharedMediaLayout.getStoriesCount(id))); + } + } else if (id == SharedMediaLayout.TAB_BOT_PREVIEWS) { + mediaCounterTextView.setText(sharedMediaLayout.getBotPreviewsSubtitle(true)); } else if (id == SharedMediaLayout.TAB_ARCHIVED_STORIES) { mediaCounterTextView.setText(LocaleController.formatPluralString("ProfileStoriesArchiveCount", sharedMediaLayout.getStoriesCount(id))); } else if (id == SharedMediaLayout.TAB_RECOMMENDED_CHANNELS) { @@ -7137,6 +7212,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. float extra = (avatarContainer.getMeasuredWidth() - AndroidUtilities.dp(42)) * avatarScale; timeItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(16) + extra); timeItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(15) + extra); + starBgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starBgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); + starFgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starFgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); avatarContainer.setScaleX(avatarScale); avatarContainer.setScaleY(avatarScale); @@ -7177,6 +7256,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. float extra = AndroidUtilities.dp(42) * avatarScale - AndroidUtilities.dp(42); timeItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(16) + extra); timeItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(15) + extra); + starBgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starBgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); + starFgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starFgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); } nameX = -21 * AndroidUtilities.density * diff; nameY = (float) Math.floor(avatarY) + AndroidUtilities.dp(1.3f) + AndroidUtilities.dp(7) * diff + titleAnimationsYDiff * (1f - avatarAnimationProgress); @@ -7554,7 +7637,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } else if (id == NotificationCenter.closeChats) { removeSelfFromStack(true); } else if (id == NotificationCenter.botInfoDidLoad) { - TLRPC.BotInfo info = (TLRPC.BotInfo) args[0]; + TL_bots.BotInfo info = (TL_bots.BotInfo) args[0]; if (info.user_id == userId) { botInfo = info; updateListAnimated(false); @@ -7607,6 +7690,13 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. birthdayFetcher.subscribe(this::createBirthdayEffect); } } + if (otherItem != null) { + if (hasPrivacyCommand()) { + otherItem.showSubItem(bot_privacy); + } else { + otherItem.hideSubItem(bot_privacy); + } + } } } else if (id == NotificationCenter.privacyRulesUpdated) { if (qrItem != null) { @@ -7677,6 +7767,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. updateEditColorIcon(); } else if (id == NotificationCenter.starBalanceUpdated) { updateListAnimated(false); + } else if (id == NotificationCenter.botStarsUpdated) { + updateListAnimated(false); } } @@ -7724,6 +7816,21 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } + private void updateStar() { + if (starBgItem == null || starFgItem == null) return; + if (needStarImage && currentChat != null && (currentChat.flags2 & 2048) != 0) { + starFgItem.setTag(1); + starFgItem.setVisibility(View.VISIBLE); + starBgItem.setTag(1); + starBgItem.setVisibility(View.VISIBLE); + } else { + starFgItem.setTag(null); + starFgItem.setVisibility(View.GONE); + starBgItem.setTag(null); + starBgItem.setVisibility(View.GONE); + } + } + @Override public boolean needDelayOpenAnimation() { if (playProfileAnimation == 0) { @@ -7867,6 +7974,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. SharedPreferences preferences = MessagesController.getGlobalMainSettings(); if (!AndroidUtilities.isTablet()) { needTimerImage = type != 0; + needStarImage = type != 0; if (preferences.getBoolean("view_animations", true)) { playProfileAnimation = type; } else if (type == 2) { @@ -8033,6 +8141,16 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (timeItem != null) { timeItem.setAlpha(1.0f); } + if (starFgItem != null) { + starFgItem.setAlpha(1.0f); + starFgItem.setScaleX(1.0f); + starFgItem.setScaleY(1.0f); + } + if (starBgItem != null) { + starBgItem.setAlpha(1.0f); + starBgItem.setScaleX(1.0f); + starBgItem.setScaleY(1.0f); + } if (parentLayout != null && parentLayout.getFragmentStack().size() >= 2) { BaseFragment fragment = parentLayout.getFragmentStack().get(parentLayout.getFragmentStack().size() - 2); if (fragment instanceof ChatActivityInterface) { @@ -8047,6 +8165,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } if (previousTransitionFragment != null) { updateTimeItem(); + updateStar(); } final AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(playProfileAnimation == 2 ? 250 : 180); @@ -8123,6 +8242,16 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_X, 1.0f, 0.0f)); animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_Y, 1.0f, 0.0f)); } + if (starFgItem.getTag() != null) { + animators.add(ObjectAnimator.ofFloat(starFgItem, View.ALPHA, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_X, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_Y, 1.0f, 0.0f)); + } + if (starBgItem.getTag() != null) { + animators.add(ObjectAnimator.ofFloat(starBgItem, View.ALPHA, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_X, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_Y, 1.0f, 0.0f)); + } if (animatingItem != null) { animatingItem.setAlpha(1.0f); animators.add(ObjectAnimator.ofFloat(animatingItem, View.ALPHA, 0.0f)); @@ -8194,6 +8323,18 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_X, 0.0f, 1.0f)); animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_Y, 0.0f, 1.0f)); } + if (starFgItem.getTag() != null) { + starFgItem.setAlpha(0f); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.ALPHA, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_X, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_Y, 0.0f, 1.0f)); + } + if (starBgItem.getTag() != null) { + starBgItem.setAlpha(0f); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.ALPHA, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_X, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_Y, 0.0f, 1.0f)); + } if (animatingItem != null) { animatingItem.setAlpha(0.0f); animators.add(ObjectAnimator.ofFloat(animatingItem, View.ALPHA, 1.0f)); @@ -8396,6 +8537,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } if (otherItem != null) { otherItem.setSubItemShown(start_secret_chat, !getMessagesController().isUserPremiumBlocked(userId)); + if (hasPrivacyCommand()) { + otherItem.showSubItem(bot_privacy); + } else { + otherItem.hideSubItem(bot_privacy); + } } } @@ -8489,6 +8635,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. clearLogsRow = -1; switchBackendRow = -1; versionRow = -1; + botAppRow = -1; sendMessageRow = -1; reportRow = -1; @@ -8528,6 +8675,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. sharedMediaRow = -1; notificationsSimpleRow = -1; settingsRow = -1; + balanceRow = -1; + balanceDividerRow = -1; unblockRow = -1; joinRow = -1; @@ -8547,10 +8696,16 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (!hasMedia) { hasMedia = sharedMediaPreloader.hasSavedMessages; } + if (!hasMedia) { + hasMedia = sharedMediaPreloader.hasPreviews; + } } if (!hasMedia && userInfo != null) { hasMedia = userInfo.stories_pinned_available; } + if (!hasMedia && userInfo != null && userInfo.bot_info != null) { + hasMedia = userInfo.bot_info.has_preview_medias; + } if (!hasMedia && chatInfo != null) { hasMedia = chatInfo.stories_pinned_available; } @@ -8606,7 +8761,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (!getMessagesController().premiumFeaturesBlocked()) { premiumRow = rowCount++; } - if (getMessagesController().starsPurchaseAvailable() && (StarsController.getInstance(currentAccount).getBalance() > 0 || StarsController.getInstance(currentAccount).hasTransactions())) { + if (getMessagesController().starsPurchaseAvailable()) { starsRow = rowCount++; } if (!getMessagesController().premiumFeaturesBlocked()) { @@ -8675,6 +8830,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (userId != getUserConfig().getClientUserId()) { notificationsRow = rowCount++; } + if (isBot && user != null && user.bot_has_main_app) { + botAppRow = rowCount++; + } infoEndRow = rowCount - 1; infoSectionRow = rowCount++; @@ -8691,12 +8849,21 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } + + boolean divider = false; + if (user != null && user.bot) { + if (BotStarsController.getInstance(currentAccount).getBalance(userId) > 0 || BotStarsController.getInstance(currentAccount).hasTransactions(userId)) { + balanceRow = rowCount++; + } + } + if (user != null && isBot && !user.bot_nochats) { addToGroupButtonRow = rowCount++; addToGroupInfoRow = rowCount++; + } else if (balanceRow >= 0) { + divider = true; } - boolean divider = false; if (!myProfile && showAddToContacts && user != null && !user.contact && !user.bot && !UserObject.isService(user.id)) { addToContactsRow = rowCount++; divider = true; @@ -8709,7 +8876,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. reportDividerRow = rowCount++; } - if (hasMedia || userInfo != null && userInfo.common_chats_count != 0 || myProfile) { + if (hasMedia || (user != null && user.bot && user.bot_can_edit) || userInfo != null && userInfo.common_chats_count != 0 || myProfile) { sharedMediaRow = rowCount++; } else if (lastSectionRow == -1 && needSendMessage) { sendMessageRow = rowCount++; @@ -8760,6 +8927,19 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (chatInfo.banned_count != 0 || chatInfo.kicked_count != 0) { blockedUsersRow = rowCount++; } + long did = chatId != 0 ? -chatId : userId; + if ( + chatInfo != null && + chatInfo.can_view_stars_revenue && ( + BotStarsController.getInstance(currentAccount).getBalance(did) > 0 || + BotStarsController.getInstance(currentAccount).hasTransactions(did) + ) || + chatInfo != null && + chatInfo.can_view_revenue && + BotStarsController.getInstance(currentAccount).getChannelBalance(did) > 0 + ) { + balanceRow = rowCount++; + } settingsRow = rowCount++; membersSectionRow = rowCount++; } @@ -9073,7 +9253,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } else if (MessagesController.isSupportUser(user)) { newString2 = LocaleController.getString("SupportStatus", R.string.SupportStatus); } else if (isBot) { - newString2 = LocaleController.getString("Bot", R.string.Bot); + if (user.bot_active_users != 0) { + newString2 = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ','); + } else { + newString2 = LocaleController.getString(R.string.Bot); + } } else { isOnline[0] = false; newString2 = LocaleController.formatUserStatus(currentAccount, user, isOnline, shortStatus ? new boolean[1] : null); @@ -9688,6 +9872,12 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. otherItem.addSubItem(share_contact, R.drawable.msg_share, LocaleController.getString("ShareContact", R.string.ShareContact)); } if (isBot) { + otherItem.addSubItem(bot_privacy, R.drawable.menu_privacy_policy, getString(R.string.BotPrivacyPolicy)); + if (hasPrivacyCommand()) { + otherItem.showSubItem(bot_privacy); + } else { + otherItem.hideSubItem(bot_privacy); + } if (!userBlocked) { otherItem.addSubItem(block_contact, R.drawable.msg_block2, LocaleController.getString(R.string.DeleteAndBlock)).setColors(getThemedColor(Theme.key_text_RedRegular), getThemedColor(Theme.key_text_RedRegular)); } else { @@ -9742,7 +9932,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. otherItem.addSubItem(call_item, R.drawable.msg_voicechat, chat.megagroup && !chat.gigagroup ? LocaleController.getString("StartVoipChat", R.string.StartVoipChat) : LocaleController.getString("StartVoipChannel", R.string.StartVoipChannel)); hasVoiceChatItem = true; } - if ((chatInfo.can_view_stats || getMessagesController().getStoriesController().canPostStories(getDialogId())) && topicId == 0) { + if ((chatInfo.can_view_stats || chatInfo.can_view_revenue || chatInfo.can_view_stars_revenue || getMessagesController().getStoriesController().canPostStories(getDialogId())) && topicId == 0) { otherItem.addSubItem(statistics, R.drawable.msg_stats, LocaleController.getString("Statistics", R.string.Statistics)); } ChatObject.Call call = getMessagesController().getGroupCall(chatId, false); @@ -10548,7 +10738,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. VIEW_TYPE_LOCATION = 21, VIEW_TYPE_HOURS = 22, VIEW_TYPE_CHANNEL = 23, - VIEW_TYPE_STARS_TEXT_CELL = 24; + VIEW_TYPE_STARS_TEXT_CELL = 24, + VIEW_TYPE_BOT_APP = 25, + VIEW_TYPE_SHADOW_TEXT = 26; private Context mContext; @@ -10637,6 +10829,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. view = new ShadowSectionCell(mContext, resourcesProvider); break; } + case VIEW_TYPE_SHADOW_TEXT: { + view = new TextInfoPrivacyCell(mContext, resourcesProvider); + break; + } case VIEW_TYPE_USER: { view = new UserCell(mContext, addMemberRow == -1 ? 9 : 6, 0, true, resourcesProvider); view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); @@ -10788,6 +10984,18 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }; view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); break; + case VIEW_TYPE_BOT_APP: + FrameLayout frameLayout = new FrameLayout(mContext); + ButtonWithCounterView button = new ButtonWithCounterView(mContext, resourcesProvider); + button.setText(LocaleController.getString(R.string.ProfileBotOpenApp), false); + button.setOnClickListener(v -> { + TLRPC.User bot = getMessagesController().getUser(userId); + getMessagesController().openApp(ProfileActivity.this, bot, getClassGuid(), null); + }); + frameLayout.addView(button, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.FILL, 18, 14, 18, 14)); + view = frameLayout; + view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + break; } if (viewType != VIEW_TYPE_SHARED_MEDIA) { view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); @@ -10925,13 +11133,15 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } else if (currentChat != null) { TLRPC.Chat chat = getMessagesController().getChat(chatId); username = ChatObject.getPublicUsername(chat); - usernames.addAll(chat.usernames); + if (chat != null) { + usernames.addAll(chat.usernames); + } if (ChatObject.isPublic(chat)) { containsQr = true; text = getMessagesController().linkPrefix + "/" + username + (topicId != 0 ? "/" + topicId : ""); value = LocaleController.getString("InviteLink", R.string.InviteLink); } else { - text = getMessagesController().linkPrefix + "/c/" + chat.id + (topicId != 0 ? "/" + topicId : ""); + text = getMessagesController().linkPrefix + "/c/" + chatId + (topicId != 0 ? "/" + topicId : ""); value = LocaleController.getString("InviteLinkPrivate", R.string.InviteLinkPrivate); } } else { @@ -11087,6 +11297,25 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } else if (position == settingsRow) { textCell.setTextAndIcon(LocaleController.getString("ChannelAdminSettings", R.string.ChannelAdminSettings), R.drawable.msg_customize, position != membersSectionRow - 1); + } else if (position == balanceRow) { + long did = chatId != 0 ? -chatId : userId; + long stars_balance = BotStarsController.getInstance(currentAccount).getBalance(did); + long ton_balance = BotStarsController.getInstance(currentAccount).getChannelBalance(did); + SpannableStringBuilder ssb = new SpannableStringBuilder(); + if (ton_balance > 0) { + DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US); + symbols.setDecimalSeparator('.'); + DecimalFormat formatterTON = new DecimalFormat("#.##", symbols); + formatterTON.setMinimumFractionDigits(2); + formatterTON.setMaximumFractionDigits(3); + formatterTON.setGroupingUsed(false); + ssb.append("TON ").append(formatterTON.format(ton_balance / 1_000_000_000.0)); + } + if (stars_balance > 0) { + if (ssb.length() > 0) ssb.append(" "); + ssb.append("XTR ").append(LocaleController.formatNumber(stars_balance, ',')); + } + textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.ChannelStars), ChannelMonetizationLayout.replaceTON(StarsIntroActivity.replaceStarsWithPlain(ssb, .7f), textCell.getTextView().getPaint()), R.drawable.menu_feature_paid, true); } else if (position == blockedUsersRow) { if (chatInfo != null) { textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelBlacklist", R.string.ChannelBlacklist), String.format("%d", Math.max(chatInfo.banned_count, chatInfo.kicked_count)), R.drawable.msg_user_remove, position != membersSectionRow - 1); @@ -11159,14 +11388,13 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. setAvatarCell = textCell; } else if (position == addToGroupButtonRow) { textCell.setTextAndIcon(LocaleController.getString("AddToGroupOrChannel", R.string.AddToGroupOrChannel), R.drawable.msg_groups_create, false); - textCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); } else if (position == premiumRow) { textCell.setTextAndIcon(LocaleController.getString(R.string.TelegramPremium), new AnimatedEmojiDrawable.WrapSizeDrawable(PremiumGradient.getInstance().premiumStarMenuDrawable, dp(24), dp(24)), true); textCell.setImageLeft(23); } else if (position == starsRow) { StarsController c = StarsController.getInstance(currentAccount); long balance = c.getBalance(); - textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.MenuTelegramStars), c.balanceAvailable() ? LocaleController.formatNumber((int) balance, ',') : "", new AnimatedEmojiDrawable.WrapSizeDrawable(PremiumGradient.getInstance().goldenStarMenuDrawable, dp(24), dp(24)), true); + textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.MenuTelegramStars), c.balanceAvailable() && balance > 0 ? LocaleController.formatNumber((int) balance, ',') : "", new AnimatedEmojiDrawable.WrapSizeDrawable(PremiumGradient.getInstance().goldenStarMenuDrawable, dp(24), dp(24)), true); textCell.setImageLeft(23); } else if (position == businessRow) { textCell.setTextAndIcon(TextCell.applyNewSpan(LocaleController.getString(R.string.TelegramBusiness)), R.drawable.menu_shop, true); @@ -11237,7 +11465,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. val = String.format(Locale.US, LocaleController.getPluralString("NotificationTopicExceptionsDesctription", notificationsExceptionTopics.size()), val, notificationsExceptionTopics.size()); } checkCell.setAnimationsEnabled(fragmentOpened); - checkCell.setTextAndValueAndCheck(LocaleController.getString("Notifications", R.string.Notifications), val, enabled, false); + checkCell.setTextAndValueAndCheck(LocaleController.getString("Notifications", R.string.Notifications), val, enabled, botAppRow >= 0); } break; case VIEW_TYPE_SHADOW: @@ -11250,6 +11478,28 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. sectionCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, getThemedColor(Theme.key_windowBackgroundGrayShadow))); } break; + case VIEW_TYPE_SHADOW_TEXT: { + TextInfoPrivacyCell cell = (TextInfoPrivacyCell) holder.itemView; + if (position == infoSectionRow) { + if (botAppRow >= 0) { + final TLRPC.User user = getMessagesController().getUser(userId); + final boolean botOwner = user != null && user.bot && user.bot_can_edit; + cell.setFixedSize(0); + cell.setText(AndroidUtilities.replaceSingleTag(getString(botOwner ? R.string.ProfileBotOpenAppInfoOwner : R.string.ProfileBotOpenAppInfo), () -> { + Browser.openUrl(getContext(), getString(botOwner ? R.string.ProfileBotOpenAppInfoOwnerLink : R.string.ProfileBotOpenAppInfoLink)); + })); + } else { + cell.setFixedSize(14); + cell.setText(null); + } + } + if (position == infoSectionRow && lastSectionRow == -1 && secretSettingsSectionRow == -1 && sharedMediaRow == -1 && membersSectionRow == -1 || position == secretSettingsSectionRow || position == lastSectionRow || position == membersSectionRow && lastSectionRow == -1 && sharedMediaRow == -1) { + cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, getThemedColor(Theme.key_windowBackgroundGrayShadow))); + } else { + cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, getThemedColor(Theme.key_windowBackgroundGrayShadow))); + } + break; + } case VIEW_TYPE_USER: UserCell userCell = (UserCell) holder.itemView; TLRPC.ChatParticipant part; @@ -11337,6 +11587,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. getMessagesController().getChat(userInfo.personal_channel_id), profileChannelMessageFetcher != null ? profileChannelMessageFetcher.messageObject : null ); + break; + case VIEW_TYPE_BOT_APP: + break; } } @@ -11495,7 +11748,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. position == questionRow || position == devicesRow || position == filtersRow || position == stickersRow || position == faqRow || position == policyRow || position == sendLogsRow || position == sendLastLogsRow || position == clearLogsRow || position == switchBackendRow || position == setAvatarRow || position == addToGroupButtonRow || - position == addToContactsRow || position == liteModeRow || position == premiumGiftingRow || position == businessRow) { + position == addToContactsRow || position == liteModeRow || position == premiumGiftingRow || position == businessRow || position == balanceRow) { return VIEW_TYPE_TEXT; } else if (position == notificationsDividerRow) { return VIEW_TYPE_DIVIDER; @@ -11503,11 +11756,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return VIEW_TYPE_NOTIFICATIONS_CHECK; } else if (position == notificationsSimpleRow) { return VIEW_TYPE_NOTIFICATIONS_CHECK_SIMPLE; - } else if (position == infoSectionRow || position == lastSectionRow || position == membersSectionRow || + } else if (position == lastSectionRow || position == membersSectionRow || position == secretSettingsSectionRow || position == settingsSectionRow || position == devicesSectionRow || position == helpSectionCell || position == setAvatarSectionRow || position == passwordSuggestionSectionRow || position == phoneSuggestionSectionRow || position == premiumSectionsRow || position == reportDividerRow || - position == channelDividerRow || position == graceSuggestionSectionRow + position == channelDividerRow || position == graceSuggestionSectionRow || position == balanceDividerRow ) { return VIEW_TYPE_SHADOW; } else if (position >= membersStartRow && position < membersEndRow) { @@ -11534,6 +11787,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return VIEW_TYPE_HOURS; } else if (position == channelRow) { return VIEW_TYPE_CHANNEL; + } else if (position == botAppRow) { + return VIEW_TYPE_BOT_APP; + } else if (position == infoSectionRow) { + return VIEW_TYPE_SHADOW_TEXT; } return 0; } @@ -11792,7 +12049,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. new SearchResult(323, LocaleController.getString(R.string.ChatListSwipeGesture), "swipeGestureHeaderRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(324, LocaleController.getString(R.string.AppIcon), "appIconHeaderRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(305, LocaleController.getString("AutoNightTheme", R.string.AutoNightTheme), LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_NIGHT))), - new SearchResult(307, LocaleController.getString("ChromeCustomTabs", R.string.ChromeCustomTabs), "customTabsRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(328, LocaleController.getString(R.string.NextMediaTap), "nextMediaTapRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(327, LocaleController.getString(R.string.RaiseToListen), "raiseToListenRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(310, LocaleController.getString("RaiseToSpeak", R.string.RaiseToSpeak), "raiseToSpeakRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), @@ -12835,6 +13091,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. put(++pointer, bizLocationRow, sparseIntArray); put(++pointer, birthdayRow, sparseIntArray); put(++pointer, channelRow, sparseIntArray); + put(++pointer, balanceRow, sparseIntArray); + put(++pointer, balanceDividerRow, sparseIntArray); + put(++pointer, botAppRow, sparseIntArray); } private void put(int id, int position, SparseIntArray sparseIntArray) { @@ -13401,6 +13660,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. userFull.flags2 |= 32; userFull.birthday = birthday; } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { BulletinFactory.of(ProfileActivity.this) @@ -13450,6 +13710,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. userFull.birthday = null; userFull.flags2 &=~ 32; } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (err != null) { BulletinFactory.showError(err); @@ -13457,8 +13718,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. BulletinFactory.of(this).createErrorBulletin(LocaleController.getString(R.string.UnknownError)).show(); } })); - updateRowsIds(); - listAdapter.notifyItemRemoved(position); + updateListAnimated(false); getMessagesStorage().updateUserInfo(userFull, false); }); builder.setNegativeButton(LocaleController.getString(R.string.Cancel), null); @@ -13480,6 +13740,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. builder.setMessage(LocaleController.getString(R.string.ProfileChannelClearMessage)); builder.setPositiveButton(LocaleController.getString(R.string.Remove), (di, w) -> { TLRPC.TL_account_updatePersonalChannel req = new TLRPC.TL_account_updatePersonalChannel(); + req.channel = new TLRPC.TL_inputChannelEmpty(); if (userFull != null) { userFull.personal_channel_id = 0; userFull.personal_channel_message = 0; @@ -13492,8 +13753,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. BulletinFactory.of(this).createErrorBulletin(LocaleController.getString(R.string.UnknownError)).show(); } })); - updateRowsIds(); - listAdapter.notifyItemRemoved(position); + updateListAnimated(false); getMessagesStorage().updateUserInfo(userFull, false); }); builder.setNegativeButton(LocaleController.getString(R.string.Cancel), null); @@ -13539,4 +13799,16 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } + public boolean hasPrivacyCommand() { + if (!isBot) return false; + if (userInfo == null || userInfo.bot_info == null) return false; + if (userInfo.bot_info.privacy_policy_url != null) return true; + for (TLRPC.TL_botCommand command : userInfo.bot_info.commands) { + if ("privacy".equals(command.command)) { + return true; + } + } + return true; + } + } \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java index cd0f07ccf..350bd1a44 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java @@ -51,7 +51,7 @@ public class RevenueSharingAdsInfoBottomSheet extends BottomSheet { topIconBgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); topIconBgPaint.setStyle(Paint.Style.FILL); - topIconBgPaint.setColor(Theme.getColor(Theme.key_featuredStickers_addButton)); + topIconBgPaint.setColor(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider)); LinearLayout linearLayout = new LinearLayout(context); linearLayout.setOrientation(LinearLayout.VERTICAL); @@ -95,7 +95,7 @@ public class RevenueSharingAdsInfoBottomSheet extends BottomSheet { linearLayout.addView(info3, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 16, 0, 0)); View divider = new View(getContext()); - divider.setBackgroundColor(Theme.getColor(Theme.key_divider)); + divider.setBackgroundColor(Theme.getColor(Theme.key_divider, resourcesProvider)); LinearLayout.LayoutParams dividerLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1); dividerLayoutParams.setMargins(AndroidUtilities.dp(24), AndroidUtilities.dp(20), AndroidUtilities.dp(24), AndroidUtilities.dp(20)); linearLayout.addView(divider, dividerLayoutParams); @@ -132,11 +132,11 @@ public class RevenueSharingAdsInfoBottomSheet extends BottomSheet { buttonTextView.setSingleLine(true); buttonTextView.setGravity(Gravity.CENTER); buttonTextView.setEllipsize(TextUtils.TruncateAt.END); - buttonTextView.setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText)); + buttonTextView.setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText, resourcesProvider)); buttonTextView.setTypeface(AndroidUtilities.bold()); buttonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); buttonTextView.setText(LocaleController.getString("RevenueSharingAdsAlertButton", R.string.RevenueSharingAdsAlertButton)); - buttonTextView.setBackground(Theme.AdaptiveRipple.filledRect(Theme.getColor(Theme.key_featuredStickers_addButton), 6)); + buttonTextView.setBackground(Theme.AdaptiveRipple.filledRect(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider), 6)); buttonTextView.setOnClickListener(e -> dismiss()); linearLayout.addView(buttonTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 0, 14, 22, 14, 14)); @@ -163,13 +163,13 @@ public class RevenueSharingAdsInfoBottomSheet extends BottomSheet { boolean isRtl = LocaleController.isRTL; ImageView ivIcon = new ImageView(getContext()); Drawable iconDrawable = getContext().getResources().getDrawable(icon).mutate(); - iconDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + iconDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider), PorterDuff.Mode.MULTIPLY)); ivIcon.setImageDrawable(iconDrawable); addView(ivIcon, LayoutHelper.createFrame(ICON_SIZE, ICON_SIZE, isRtl ? Gravity.RIGHT : Gravity.LEFT, isRtl ? 0 : ITEM_HORIZONTAL_PADDING, 6, isRtl ? ITEM_HORIZONTAL_PADDING : 0, 0)); TextView tvTitle = new TextView(getContext()); tvTitle.setText(header); - tvTitle.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + tvTitle.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); tvTitle.setTypeface(AndroidUtilities.bold()); addView(tvTitle, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, isRtl ? Gravity.RIGHT : Gravity.LEFT, isRtl ? ITEM_HORIZONTAL_PADDING : ITEM_TEXT_PADDING, 0, isRtl ? ITEM_TEXT_PADDING : ITEM_HORIZONTAL_PADDING, 0)); @@ -177,7 +177,7 @@ public class RevenueSharingAdsInfoBottomSheet extends BottomSheet { LinkSpanDrawable.LinksTextView tvSubtitle = new LinkSpanDrawable.LinksTextView(getContext()); tvSubtitle.setText(text); tvSubtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - tvSubtitle.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle)); + tvSubtitle.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle, resourcesProvider)); tvSubtitle.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); tvSubtitle.setLineSpacing(AndroidUtilities.dp(2), 1f); addView(tvSubtitle, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, isRtl ? Gravity.RIGHT : Gravity.LEFT, isRtl ? ITEM_HORIZONTAL_PADDING : ITEM_TEXT_PADDING, 18, isRtl ? ITEM_TEXT_PADDING : ITEM_HORIZONTAL_PADDING, 0)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java b/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java index b21309e0c..f0392e785 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java @@ -838,7 +838,7 @@ public class SecretVoicePlayer extends Dialog { AndroidUtilities.runOnUIThread(this.closeAction); this.closeAction = null; - myCell.setInvalidateCallback(() -> {}); +// myCell.setOverrideInvalidate(() -> {}); thanosEffect = new ThanosEffect(context, null); windowView.addView(thanosEffect, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); thanosEffect.animate(myCell, 1.5f, super::dismiss); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java b/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java index b5879177a..ccdd91e18 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java @@ -1,6 +1,7 @@ package org.telegram.ui; import android.app.Activity; +import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.TypedValue; @@ -23,7 +24,7 @@ public class SponsoredMessageInfoView extends FrameLayout { LinearLayout linearLayout; - public SponsoredMessageInfoView(Activity context, Theme.ResourcesProvider resourcesProvider) { + public SponsoredMessageInfoView(Context context, Runnable close, Theme.ResourcesProvider resourcesProvider) { super(context); LinearLayout linearLayout = new LinearLayout(context); @@ -41,18 +42,30 @@ public class SponsoredMessageInfoView extends FrameLayout { description1.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); description1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); description1.setLineSpacing(AndroidUtilities.dp(2), 1f); + description1.setOnLinkPressListener(link -> { + if (close != null) close.run(); + link.onClick(this); + }); LinkSpanDrawable.LinksTextView description2 = new LinkSpanDrawable.LinksTextView(context); description2.setText(AndroidUtilities.replaceLinks(LocaleController.getString("SponsoredMessageInfo2Description2"), resourcesProvider)); description2.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); description2.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); description2.setLineSpacing(AndroidUtilities.dp(2), 1f); + description2.setOnLinkPressListener(link -> { + if (close != null) close.run(); + link.onClick(this); + }); LinkSpanDrawable.LinksTextView description3 = new LinkSpanDrawable.LinksTextView(context); description3.setText(AndroidUtilities.replaceLinks(LocaleController.getString("SponsoredMessageInfo2Description3"), resourcesProvider)); description3.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); description3.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); description3.setLineSpacing(AndroidUtilities.dp(2), 1f); + description3.setOnLinkPressListener(link -> { + if (close != null) close.run(); + link.onClick(this); + }); Paint buttonPaint = new Paint(Paint.ANTI_ALIAS_FLAG); buttonPaint.setStyle(Paint.Style.STROKE); @@ -70,7 +83,8 @@ public class SponsoredMessageInfoView extends FrameLayout { button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - Browser.openUrl(context, LocaleController.getString("SponsoredMessageAlertLearnMoreUrl", R.string.SponsoredMessageAlertLearnMoreUrl)); + if (close != null) close.run(); + Browser.openUrl(context, LocaleController.getString(R.string.SponsoredMessageAlertLearnMoreUrl)); } }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java index 119ef1061..abb4b1849 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java @@ -627,6 +627,12 @@ public class BotStarsActivity extends BaseFragment implements NotificationCenter if (innerListView != null && consumed[1] > 0) { innerListView.scrollBy(0, consumed[1]); } + } else if (dy > 0) { + RecyclerListView innerListView = transactionsLayout.getCurrentListView(); + if (listView.getHeight() - bottom >= 0 && innerListView != null && !innerListView.canScrollVertically(1)) { + consumed[1] = dy; + listView.stopScroll(); + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java index 358cf496e..e35fa9bc4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java @@ -33,6 +33,7 @@ import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_stats; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; @@ -79,56 +80,88 @@ public class BotStarsController { private final HashMap lastLoadedStats = new HashMap<>(); private final HashMap stats = new HashMap<>(); - public long getBalance(long bot_id) { - TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id); + private final HashMap lastLoadedChannelStats = new HashMap<>(); + private final HashMap channelStats = new HashMap<>(); + + public long getBalance(long did) { + TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(did); return botStats == null ? 0 : botStats.status.current_balance; } - public long getAvailableBalance(long bot_id) { - TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id); + public long getChannelBalance(long did) { + TL_stats.TL_broadcastRevenueStats botStats = getChannelRevenueStats(did, false); + return botStats == null || botStats.balances == null ? 0 : botStats.balances.current_balance; + } + + public long getAvailableBalance(long did) { + TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(did); return botStats == null ? 0 : botStats.status.available_balance; } - public boolean isBalanceAvailable(long bot_id) { - return getRevenueStats(bot_id) != null; + public boolean isBalanceAvailable(long did) { + return getRevenueStats(did) != null; } - public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long bot_id) { - return getRevenueStats(bot_id, false); + public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long did) { + return getRevenueStats(did, false); } - public boolean hasStars(long bot_id) { - TLRPC.TL_payments_starsRevenueStats stats = getRevenueStats(bot_id); + public boolean hasStars(long did) { + TLRPC.TL_payments_starsRevenueStats stats = getRevenueStats(did); return stats != null && stats.status != null && (stats.status.available_balance > 0 || stats.status.overall_revenue > 0 || stats.status.current_balance > 0); } - public void preloadRevenueStats(long bot_id) { - Long lastLoaded = lastLoadedStats.get(bot_id); - TLRPC.TL_payments_starsRevenueStats botStats = stats.get(bot_id); - getRevenueStats(bot_id, lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 30); + public void preloadRevenueStats(long did) { + Long lastLoaded = lastLoadedStats.get(did); + TLRPC.TL_payments_starsRevenueStats botStats = stats.get(did); + getRevenueStats(did, lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 30); } - public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long bot_id, boolean force) { - Long lastLoaded = lastLoadedStats.get(bot_id); - TLRPC.TL_payments_starsRevenueStats botStats = stats.get(bot_id); + public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long did, boolean force) { + Long lastLoaded = lastLoadedStats.get(did); + TLRPC.TL_payments_starsRevenueStats botStats = stats.get(did); if (lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 60 * 5 || force) { TLRPC.TL_payments_getStarsRevenueStats req = new TLRPC.TL_payments_getStarsRevenueStats(); req.dark = Theme.isCurrentThemeDark(); - req.peer = MessagesController.getInstance(currentAccount).getInputPeer(bot_id); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(did); ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_payments_starsRevenueStats) { TLRPC.TL_payments_starsRevenueStats r = (TLRPC.TL_payments_starsRevenueStats) res; - stats.put(bot_id, r); + stats.put(did, r); } else { - stats.put(bot_id, null); + stats.put(did, null); } - lastLoadedStats.put(bot_id, System.currentTimeMillis()); - NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsUpdated, bot_id); + lastLoadedStats.put(did, System.currentTimeMillis()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsUpdated, did); })); } return botStats; } + public TL_stats.TL_broadcastRevenueStats getChannelRevenueStats(long did, boolean force) { + Long lastLoaded = lastLoadedChannelStats.get(did); + TL_stats.TL_broadcastRevenueStats botStats = channelStats.get(did); + if (lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 60 * 5 || force) { + TL_stats.TL_getBroadcastRevenueStats req = new TL_stats.TL_getBroadcastRevenueStats(); + req.dark = Theme.isCurrentThemeDark(); + req.channel = MessagesController.getInstance(currentAccount).getInputChannel(-did); + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(-did); + if (chatFull == null) return botStats; + final int stats_dc = chatFull.stats_dc; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_stats.TL_broadcastRevenueStats) { + TL_stats.TL_broadcastRevenueStats r = (TL_stats.TL_broadcastRevenueStats) res; + channelStats.put(did, r); + } else { + channelStats.put(did, null); + } + lastLoadedChannelStats.put(did, System.currentTimeMillis()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsUpdated, did); + }), null, null, 0, stats_dc, ConnectionsManager.ConnectionTypeGeneric, true); + } + return botStats; + } + public void onUpdate(TLRPC.TL_updateStarsRevenueStatus update) { if (update == null) return; long dialogId = DialogObject.getPeerDialogId(update.peer); @@ -163,22 +196,22 @@ public class BotStarsController { private final HashMap transactions = new HashMap<>(); @NonNull - private TransactionsState getTransactionsState(long bot_id) { - TransactionsState state = transactions.get(bot_id); + private TransactionsState getTransactionsState(long did) { + TransactionsState state = transactions.get(did); if (state == null) { - transactions.put(bot_id, state = new TransactionsState()); + transactions.put(did, state = new TransactionsState()); } return state; } @NonNull - public ArrayList getTransactions(long bot_id, int type) { - TransactionsState state = getTransactionsState(bot_id); + public ArrayList getTransactions(long did, int type) { + TransactionsState state = getTransactionsState(did); return state.transactions[type]; } - public void invalidateTransactions(long bot_id, boolean load) { - final TransactionsState state = getTransactionsState(bot_id); + public void invalidateTransactions(long did, boolean load) { + final TransactionsState state = getTransactionsState(did); for (int i = 0; i < 3; ++i) { if (state.loading[i]) continue; state.transactions[i].clear(); @@ -186,21 +219,21 @@ public class BotStarsController { state.loading[i] = false; state.endReached[i] = false; if (load) - loadTransactions(bot_id, i); + loadTransactions(did, i); } } - public void preloadTransactions(long bot_id) { - final TransactionsState state = getTransactionsState(bot_id); + public void preloadTransactions(long did) { + final TransactionsState state = getTransactionsState(did); for (int i = 0; i < 3; ++i) { if (!state.loading[i] && !state.endReached[i] && state.offset[i] == null) { - loadTransactions(bot_id, i); + loadTransactions(did, i); } } } - public void loadTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public void loadTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); if (state.loading[type] || state.endReached[type]) { return; } @@ -208,7 +241,7 @@ public class BotStarsController { state.loading[type] = true; TLRPC.TL_payments_getStarsTransactions req = new TLRPC.TL_payments_getStarsTransactions(); - req.peer = MessagesController.getInstance(currentAccount).getInputPeer(bot_id); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(did); req.inbound = type == INCOMING_TRANSACTIONS; req.outbound = type == OUTGOING_TRANSACTIONS; req.offset = state.offset[type]; @@ -228,27 +261,27 @@ public class BotStarsController { state.offset[type] = state.endReached[type] ? null : r.next_offset; // state.updateBalance(r.balance); - NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsTransactionsLoaded, bot_id); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsTransactionsLoaded, did); } })); } - public boolean isLoadingTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public boolean isLoadingTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); return state.loading[type]; } - public boolean didFullyLoadTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public boolean didFullyLoadTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); return state.endReached[type]; } - public boolean hasTransactions(long bot_id) { - return hasTransactions(bot_id, ALL_TRANSACTIONS); + public boolean hasTransactions(long did) { + return hasTransactions(did, ALL_TRANSACTIONS); } - public boolean hasTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public boolean hasTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); return !state.transactions[type].isEmpty(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java new file mode 100644 index 000000000..36d4bd8f7 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java @@ -0,0 +1,17 @@ +package org.telegram.ui.Stars; + +import android.view.View; + +public abstract class ISuperRipple { + + public final View view; + + public ISuperRipple(View view) { + this.view = view; + } + + public void animate(float cx, float cy, float intensity) { + + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java new file mode 100644 index 000000000..51fcf7651 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java @@ -0,0 +1,384 @@ +package org.telegram.ui.Stars; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.scaleRect; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.R; +import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.ChatMessageCell; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; +import org.telegram.ui.GradientClip; +import org.telegram.ui.LaunchActivity; + +import java.util.ArrayList; + +public class StarReactionsOverlay extends View { + + private final ChatActivity chatActivity; + + private ChatMessageCell cell; + private int messageId; + +// private final Camera camera = new Camera(); +// private final Matrix matrix = new Matrix(); + private final int[] pos = new int[2]; + private final int[] pos2 = new int[2]; + private final RectF reactionBounds = new RectF(); + private final RectF clickBounds = new RectF(); + private final Paint shadowPaint = new Paint(); + + private boolean counterShown; +// private final AnimatedFloat counterX = new AnimatedFloat(this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedFloat counterAlpha = new AnimatedFloat(this, 0, 420, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedTextView.AnimatedTextDrawable counter = new AnimatedTextView.AnimatedTextDrawable(); + + private final GradientClip clip = new GradientClip(); + + public StarReactionsOverlay(ChatActivity chatActivity) { + super(chatActivity.getContext()); + this.chatActivity = chatActivity; + + counter.setCallback(this); + counter.setHacks(false, true, true); + counter.setTextSize(dp(40)); + counter.setTypeface(AndroidUtilities.getTypeface("fonts/num.otf")); + counter.setShadowLayer(dp(12), 0, dp(3.5f), 0x00000000); + counter.setOverrideFullWidth(AndroidUtilities.displaySize.x); + counter.setTextColor(0xFFFFFFFF); + counter.setGravity(Gravity.CENTER); + + hideCounterRunnable = () -> { + counterShown = false; + invalidate(); + if (cell != null && cell.getPrimaryMessageObject() != null) { + final MessageObject msg = cell.getPrimaryMessageObject(); + final StarsController starsController = StarsController.getInstance(chatActivity.getCurrentAccount()); + final long totalStars = starsController.getPendingPaidReactions(msg); + if (starsController.balanceAvailable() && starsController.getBalance() < totalStars) { + StarsController.getInstance(chatActivity.getCurrentAccount()).undoPaidReaction(); + final long dialogId = chatActivity.getDialogId(); + String name; + if (dialogId >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(dialogId); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-dialogId); + name = chat == null ? "" : chat.title; + } + new StarsIntroActivity.StarsNeededSheet(chatActivity.getContext(), chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + starsController.sendPaidReaction(msg, chatActivity, totalStars, true, true, null); + }).show(); + } + } + hide(); + }; + + longPressRunnable = () -> { + if (cell == null) return; + cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); + + ArrayList reactors = null; + final MessageObject msg = cell.getPrimaryMessageObject(); + if (msg == null) return; + + if (msg != null && msg.messageOwner != null && msg.messageOwner.reactions != null) { + reactors = msg.messageOwner.reactions.top_reactors; + } + + StarsController.getInstance(msg.currentAccount).commitPaidReaction(); + + StarsReactionsSheet sheet = new StarsReactionsSheet(getContext(), chatActivity.getCurrentAccount(), chatActivity.getDialogId(), chatActivity, msg, reactors, chatActivity.getResourceProvider()); + sheet.setMessageCell(chatActivity, msg.getId(), cell); + sheet.show(); + }; + } + + public void setMessageCell(ChatMessageCell cell) { + if (this.cell == cell) return; + if (this.cell != null) { + this.cell.setScrimReaction(null); + this.cell.setInvalidateListener(null); + } + this.cell = cell; + this.messageId = cell != null && cell.getPrimaryMessageObject() != null ? cell.getPrimaryMessageObject().getId() : 0; + if (this.cell != null) { + this.cell.setInvalidateListener(this::invalidate); + } + invalidate(); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + if (cell == null || !cell.isCellAttachedToWindow()) return; + final MessageObject msg = cell.getPrimaryMessageObject(); + if ((msg != null ? msg.getId() : 0) != messageId) { + setMessageCell(null); + return; + } + + final float s = AndroidUtilities.lerp(1, 1.8f, focus); + + float clipTop = chatActivity.getClipTop(), clipBottom = chatActivity.getClipBottom(); + canvas.save(); + canvas.clipRect(0, clipTop * (1f - focus), getWidth(), getHeight() - clipBottom * (1f - focus)); + + getLocationInWindow(pos2); + cell.getLocationInWindow(pos); + pos[1] += (int) chatActivity.drawingChatListViewYoffset; + canvas.save(); +// canvas.saveLayerAlpha(cell.getBackgroundDrawableLeft(), 0, cell.getBackgroundDrawableRight(), cell.getHeight(), 0xFF, Canvas.ALL_SAVE_FLAG); + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + Integer hash = null; + if (btn != null) { + final int btnX = pos[0] - pos2[0] + cell.reactionsLayoutInBubble.x + btn.x; + final int btnY = pos[1] - pos2[1] + cell.reactionsLayoutInBubble.y + btn.y; + + reactionBounds.set(btnX, btnY, btnX + btn.width, btnY + btn.height); + scaleRect(reactionBounds, s, btnX + btn.width * .1f, btnY + btn.height / 2f); + + shadowPaint.setColor(0); + shadowPaint.setShadowLayer(dp(12), 0, dp(3), Theme.multAlpha(0x55000000, focus)); + canvas.drawRoundRect(reactionBounds, reactionBounds.height() / 2f, reactionBounds.height() / 2f, shadowPaint); + + canvas.scale(s, s, btnX + btn.width * .1f, btnY + btn.height / 2f); + + hash = btn.reaction.hashCode(); + } + canvas.translate(pos[0] - pos2[0], pos[1] - pos2[1]); + cell.setScrimReaction(null); + cell.drawReactionsLayout(canvas, 0f, hash); + cell.setScrimReaction(hash); +// AndroidUtilities.rectTmp.set(cell.getBackgroundDrawableRight() - dp(24), 0, cell.getBackgroundDrawableRight(), cell.getHeight()); +// clip.draw(canvas, AndroidUtilities.rectTmp, GradientClip.RIGHT, 1f); +// canvas.restore(); + canvas.restore(); + + canvas.restore(); + + if (btn != null) { + clickBounds.set(reactionBounds); + clickBounds.inset(-dp(42), -dp(42)); + + final int effectSize = (int) (dp(90) * s); + for (int i = 0; i < effects.size(); ++i) { + RLottieDrawable drawable = effects.get(i); + if (drawable.getCurrentFrame() >= drawable.getFramesCount()) { + effects.remove(i); + i--; + continue; + } + + drawable.setBounds( + (int) (reactionBounds.left + dp(4 + 11) * s - effectSize / 2f), + (int) (reactionBounds.centerY() - effectSize / 2f), + (int) (reactionBounds.left + dp(4 + 11) * s + effectSize / 2f), + (int) (reactionBounds.centerY() + effectSize / 2f) + ); + drawable.setAlpha((int) (0xFF * focus)); + drawable.draw(canvas); + } + + final float cx = reactionBounds.centerX(); + final float cy = reactionBounds.top - dp(12 + 24); + canvas.save(); + float t = counterAlpha.set(counterShown); + canvas.translate(0, counterShown ? dp(60) * (1f - t) : -dp(30) * (1f - t)); + final float counterScale = AndroidUtilities.lerp(counterShown ? 1.8f : 1.3f, 1f, t); + canvas.scale(counterScale, counterScale, cx, cy); +// canvas.translate(cx, cy); +// canvas.skew(.02f * (counterShown ? (1f - t) : -(1f - t)), 0); +// canvas.translate(-cx, -cy); +// camera.restore(); +// camera.rotate(0, 0, t * 360); +// camera.getMatrix(matrix); +// matrix.preTranslate(-cx, -cy); +// matrix.postTranslate(cx, cy); +// canvas.concat(matrix); + counter.setAlpha((int) (0xFF * t)); + counter.setShadowLayer(dp(12), 0, dp(3.5f), Theme.multAlpha(0xAA000000, t)); + counter.setBounds(cx - dp(100), reactionBounds.top - dp(24 + 24), cx + dp(100), reactionBounds.top - dp(24)); + counter.draw(canvas); + canvas.restore(); + + } + + invalidate(); + } + + private boolean pressed; + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (cell == null || hidden) return false; + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (clickBounds.contains(event.getX(), event.getY())) { + pressed = true; + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + if (btn != null) btn.bounce.setPressed(true); + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + AndroidUtilities.runOnUIThread(longPressRunnable, ViewConfiguration.getLongPressTimeout()); + } + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + if (event.getAction() == MotionEvent.ACTION_UP) { + tap(event.getX(), event.getY(), true, true); + } + if (btn != null) btn.bounce.setPressed(false); + pressed = false; + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + } + return pressed; + } + + private final Runnable longPressRunnable; + + private float focus; + private ValueAnimator focusAnimator; + public void focusTo(float dst, Runnable whenDone) { + if (focusAnimator != null) { + ValueAnimator anm = focusAnimator; + focusAnimator = null; + anm.cancel(); + } + focusAnimator = ValueAnimator.ofFloat(focus, dst); + focusAnimator.addUpdateListener(anm -> { + focus = (float) anm.getAnimatedValue(); + invalidate(); + }); + focusAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + focus = dst; + invalidate(); + if (animation == focusAnimator && whenDone != null) { + whenDone.run(); + } + } + }); + focusAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + focusAnimator.setDuration(320); + focusAnimator.start(); + } + + public void tap(float x, float y, boolean send, boolean ripple) { + if (cell == null || hidden) return; + + final MessageObject msg = cell.getPrimaryMessageObject(); + final StarsController starsController = StarsController.getInstance(chatActivity.getCurrentAccount()); + + playEffect(); + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + if (btn != null) btn.startAnimation(); + if (send) { + try { + performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + StarsController.getInstance(chatActivity.getCurrentAccount()).sendPaidReaction(cell.getPrimaryMessageObject(), chatActivity, +1, true, false, null); + } + counter.cancelAnimation(); + counter.setText("+" + starsController.getPendingPaidReactions(msg)); + counterShown = true; + AndroidUtilities.cancelRunOnUIThread(hideCounterRunnable); + AndroidUtilities.runOnUIThread(hideCounterRunnable, 1500); + + if (ripple) { + final long now = System.currentTimeMillis(); + if (now - lastRippleTime < 100) { + accumulatedRippleIntensity += .5f; + } else { + accumulatedRippleIntensity *= Utilities.clamp(1f - (now - lastRippleTime - 100) / 200f, 1f, 0f); + if (getMeasuredWidth() == 0 && chatActivity.getLayoutContainer() != null) { + chatActivity.getLayoutContainer().getLocationInWindow(pos2); + } else { + getLocationInWindow(pos2); + } + LaunchActivity.makeRipple(pos2[0] + x, pos2[1] + y, Utilities.clamp(accumulatedRippleIntensity, 0.9f, 0.3f)); + accumulatedRippleIntensity = 0; + lastRippleTime = now; + } + } + } + + private long lastRippleTime; + private float accumulatedRippleIntensity; + + private Runnable hideCounterRunnable; + + public boolean hidden; + public void hide() { + hidden = true; + AndroidUtilities.cancelRunOnUIThread(hideCounterRunnable); + counter.setText(""); + counterShown = false; + invalidate(); + focusTo(0f, () -> { + setMessageCell(null); + clearEffects(); + }); + } + + public boolean isShowing(MessageObject obj) { + return obj != null && obj.getId() == messageId; + } + + public void show() { + hidden = false; + focusTo(1f, null); + } + + private final ArrayList effects = new ArrayList<>(); + private final int[] effectAssets = new int[] { + R.raw.star_reaction_effect1, + R.raw.star_reaction_effect2, + R.raw.star_reaction_effect3, + R.raw.star_reaction_effect4, + R.raw.star_reaction_effect5 + }; + + public void playEffect() { + while (effects.size() > 4) { + RLottieDrawable drawable = effects.remove(0); + drawable.recycle(true); + } + final int asset = effectAssets[Utilities.fastRandom.nextInt(effectAssets.length)]; + RLottieDrawable drawable = new RLottieDrawable(asset, "" + asset, dp(70), dp(70)); + drawable.setMasterParent(this); + drawable.setAllowDecodeSingleFrame(true); + drawable.setAutoRepeat(0); + drawable.start(); + effects.add(drawable); + invalidate(); + } + + public void clearEffects() { + for (RLottieDrawable effect : effects) { + effect.recycle(true); + } + effects.clear(); + } + + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java index 8586cb326..c9590ac29 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java @@ -1,12 +1,17 @@ package org.telegram.ui.Stars; +import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.LocaleController.formatPluralString; -import static org.telegram.messenger.LocaleController.getCurrencyExpDivider; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.drawable.Drawable; +import android.view.Gravity; + +import androidx.annotation.Nullable; import com.android.billingclient.api.BillingClient; import com.android.billingclient.api.BillingFlowParams; @@ -34,8 +39,10 @@ import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; -import org.telegram.ui.Components.FireworksOverlay; +import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.bots.BotWebViewSheet; @@ -43,11 +50,17 @@ import org.telegram.ui.bots.BotWebViewSheet; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Objects; public class StarsController { public static final String currency = "XTR"; + public static final int PERIOD_MONTHLY = 2592000; + // test backend only: + public static final int PERIOD_MINUTE = 60; + public static final int PERIOD_5MINUTES = 300; + private static volatile StarsController[] Instance = new StarsController[UserConfig.MAX_ACCOUNT_COUNT]; private static final Object[] lockObjects = new Object[UserConfig.MAX_ACCOUNT_COUNT]; static { @@ -89,6 +102,7 @@ public class StarsController { req.peer = new TLRPC.TL_inputPeerSelf(); ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { boolean updatedTransactions = false; + boolean updatedSubscriptions = false; boolean updatedBalance = !balanceLoaded; lastBalanceLoaded = System.currentTimeMillis(); if (res instanceof TLRPC.TL_payments_starsStatus) { @@ -112,6 +126,14 @@ public class StarsController { updatedTransactions = true; } + if (subscriptions.isEmpty()) { + subscriptions.addAll(r.subscriptions); + subscriptionsLoading = false; + subscriptionsOffset = r.subscriptions_next_offset; + subscriptionsEndReached = (r.flags & 4) == 0; + updatedSubscriptions = true; + } + if (this.balance != r.balance) { updatedBalance = true; } @@ -125,6 +147,9 @@ public class StarsController { if (updatedTransactions) { NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starTransactionsLoaded); } + if (updatedSubscriptions) { + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starSubscriptionsLoaded); + } if (loaded != null) { loaded.run(); @@ -134,6 +159,12 @@ public class StarsController { return balance; } + public void invalidateBalance() { + balanceLoaded = false; + getBalance(); + balanceLoaded = true; + } + public void updateBalance(long balance) { if (this.balance != balance) { this.balance = balance; @@ -145,17 +176,6 @@ public class StarsController { return balanceLoaded; } - private static boolean isCollapsed(long stars) { - return ( - stars != 15 && - stars != 75 && - stars != 250 && - stars != 500 && - stars != 1000 && - stars != 2500 - ); - } - private boolean optionsLoading, optionsLoaded; private ArrayList options; public ArrayList getOptionsCached() { @@ -176,16 +196,15 @@ public class StarsController { if (object instanceof TLRPC.TL_starsTopupOption) { TLRPC.TL_starsTopupOption option = (TLRPC.TL_starsTopupOption) object; loadedOptions.add(option); - option.collapsed = isCollapsed(option.stars); if (option.store_product != null && !BuildVars.useInvoiceBilling()) { toLoadStorePrice.add(option); option.loadingStorePrice = true; } } } + optionsLoaded = true; } options = loadedOptions; - optionsLoaded = true; optionsLoading = false; NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starOptionsLoaded); if (!toLoadStorePrice.isEmpty()) { @@ -224,6 +243,14 @@ public class StarsController { } } } + if (options != null) { + for (int i = 0; i < options.size(); ++i) { + TLRPC.TL_starsTopupOption option = options.get(i); + if (option != null && option.loadingStorePrice) { + option.missingStorePrice = true; + } + } + } NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starOptionsLoaded); })); }; @@ -237,13 +264,101 @@ public class StarsController { return options; } + private boolean giftOptionsLoading, giftOptionsLoaded; + private ArrayList giftOptions; + public ArrayList getGiftOptionsCached() { + return giftOptions; + } + public ArrayList getGiftOptions() { + if (giftOptionsLoading || giftOptionsLoaded) { + return giftOptions; + } + giftOptionsLoading = true; + TLRPC.TL_payments_getStarsGiftOptions req = new TLRPC.TL_payments_getStarsGiftOptions(); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + ArrayList loadedOptions = new ArrayList<>(); + ArrayList toLoadStorePrice = new ArrayList<>(); + if (res instanceof TLRPC.Vector) { + TLRPC.Vector vector = (TLRPC.Vector) res; + for (Object object : vector.objects) { + if (object instanceof TLRPC.TL_starsGiftOption) { + TLRPC.TL_starsGiftOption option = (TLRPC.TL_starsGiftOption) object; + loadedOptions.add(option); + if (option.store_product != null && !BuildVars.useInvoiceBilling()) { + toLoadStorePrice.add(option); + option.loadingStorePrice = true; + } + } + } + giftOptionsLoaded = true; + } + giftOptions = loadedOptions; + giftOptionsLoading = false; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starGiftOptionsLoaded); + if (!toLoadStorePrice.isEmpty()) { + Runnable fetchStorePrices = () -> { + ArrayList productQueries = new ArrayList<>(); + for (int i = 0; i < toLoadStorePrice.size(); ++i) { + productQueries.add( + QueryProductDetailsParams.Product.newBuilder() + .setProductType(BillingClient.ProductType.INAPP) + .setProductId(toLoadStorePrice.get(i).store_product) + .build() + ); + } + BillingController.getInstance().queryProductDetails(productQueries, (result, list) -> AndroidUtilities.runOnUIThread(() -> { + if (result.getResponseCode() != BillingClient.BillingResponseCode.OK) { + bulletinError("BILLING_" + BillingController.getResponseCodeString(result.getResponseCode())); + return; + } + if (list != null) { + for (int i = 0; i < list.size(); ++i) { + ProductDetails productDetails = list.get(i); + TLRPC.TL_starsGiftOption option = null; + for (int j = 0; j < toLoadStorePrice.size(); ++j) { + if (toLoadStorePrice.get(j).store_product.equals(productDetails.getProductId())) { + option = toLoadStorePrice.get(j); + break; + } + } + if (option == null) continue; + + ProductDetails.OneTimePurchaseOfferDetails offerDetails = productDetails.getOneTimePurchaseOfferDetails(); + if (offerDetails != null) { + option.currency = offerDetails.getPriceCurrencyCode(); + option.amount = (long) ((offerDetails.getPriceAmountMicros() / Math.pow(10, 6)) * Math.pow(10, BillingController.getInstance().getCurrencyExp(option.currency))); + option.loadingStorePrice = false; + } + } + } + if (giftOptions != null) { + for (int i = 0; i < giftOptions.size(); ++i) { + TLRPC.TL_starsGiftOption option = giftOptions.get(i); + if (option != null && option.loadingStorePrice) { + option.missingStorePrice = true; + } + } + } + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starGiftOptionsLoaded); + })); + }; + if (!BillingController.getInstance().isReady()) { + BillingController.getInstance().whenSetuped(fetchStorePrices); + } else { + fetchStorePrices.run(); + } + } + })); + return giftOptions; + } + private void bulletinError(TLRPC.TL_error err, String str) { bulletinError(err == null ? str : err.text); } private void bulletinError(String err) { BaseFragment fragment = LaunchActivity.getLastFragment(); BulletinFactory b = fragment != null && fragment.visibleDialog == null ? BulletinFactory.of(fragment) : BulletinFactory.global(); - b.createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, err)).show(); + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err)).show(); } public static final int ALL_TRANSACTIONS = 0; @@ -324,14 +439,121 @@ public class StarsController { return balanceAvailable() && !transactions[type].isEmpty(); } + public final ArrayList subscriptions = new ArrayList<>(); + public String subscriptionsOffset; + public boolean subscriptionsLoading, subscriptionsEndReached; + + public boolean hasSubscriptions() { + return balanceAvailable() && !subscriptions.isEmpty(); + } + + public void invalidateSubscriptions(boolean load) { + if (subscriptionsLoading) return; + subscriptions.clear(); + subscriptionsOffset = null; + subscriptionsLoading = false; + subscriptionsEndReached = false; + if (load) loadSubscriptions(); + } + + public void loadSubscriptions() { + if (subscriptionsLoading || subscriptionsEndReached) return; + subscriptionsLoading = true; + TLRPC.TL_getStarsSubscriptions req = new TLRPC.TL_getStarsSubscriptions(); + req.peer = new TLRPC.TL_inputPeerSelf(); + req.offset = subscriptionsOffset; + if (req.offset == null) { + req.offset = ""; + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + subscriptionsLoading = false; + if (res instanceof TLRPC.TL_payments_starsStatus) { + TLRPC.TL_payments_starsStatus r = (TLRPC.TL_payments_starsStatus) res; + MessagesController.getInstance(currentAccount).putUsers(r.users, false); + MessagesController.getInstance(currentAccount).putChats(r.chats, false); + + subscriptions.addAll(r.subscriptions); + subscriptionsEndReached = (r.flags & 4) == 0; + subscriptionsOffset = r.subscriptions_next_offset; + + updateBalance(r.balance); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starSubscriptionsLoaded); + } + })); + } + public boolean isLoadingSubscriptions() { + return subscriptionsLoading; + } + public boolean didFullyLoadSubscriptions() { + return subscriptionsEndReached; + } + + + public final ArrayList insufficientSubscriptions = new ArrayList<>(); + private boolean insufficientSubscriptionsLoading; + public void loadInsufficientSubscriptions() { + if (insufficientSubscriptionsLoading) return; + insufficientSubscriptionsLoading = true; + TLRPC.TL_getStarsSubscriptions req = new TLRPC.TL_getStarsSubscriptions(); + req.peer = new TLRPC.TL_inputPeerSelf(); + req.missing_balance = true; + req.offset = ""; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + insufficientSubscriptionsLoading = false; + if (res instanceof TLRPC.TL_payments_starsStatus) { + TLRPC.TL_payments_starsStatus r = (TLRPC.TL_payments_starsStatus) res; + MessagesController.getInstance(currentAccount).putUsers(r.users, false); + MessagesController.getInstance(currentAccount).putChats(r.chats, false); + insufficientSubscriptions.addAll(r.subscriptions); + updateBalance(r.balance); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starSubscriptionsLoaded); + } + })); + } + public void invalidateInsufficientSubscriptions(boolean load) { + if (insufficientSubscriptionsLoading) return; + insufficientSubscriptions.clear(); + insufficientSubscriptionsLoading = false; + if (load) loadInsufficientSubscriptions(); + } + public boolean hasInsufficientSubscriptions() { + return !insufficientSubscriptions.isEmpty(); + } + public Theme.ResourcesProvider getResourceProvider() { - BaseFragment lastFragment = LaunchActivity.getLastFragment(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); if (lastFragment != null) { return lastFragment.getResourceProvider(); } return null; } + public void showStarsTopup(Activity activity, long amount, String purpose) { + if (!balanceAvailable()) { + getBalance(() -> { + showStarsTopupInternal(activity, amount, purpose); + }); + return; + } + showStarsTopupInternal(activity, amount, purpose); + } + + private void showStarsTopupInternal(Activity activity, long amount, String purpose) { + if (getBalance() >= amount || amount <= 0) { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + BulletinFactory.of(lastFragment).createSimpleBulletin(R.raw.stars_topup, getString(R.string.StarsTopupLinkEnough), getString(R.string.StarsTopupLinkTopupAnyway), () -> { + BaseFragment lastFragment2 = LaunchActivity.getSafeLastFragment(); + if (lastFragment2 == null) return; + lastFragment2.presentFragment(new StarsIntroActivity()); + }).setDuration(Bulletin.DURATION_PROLONG).show(true); + return; + } + new StarsIntroActivity.StarsNeededSheet(activity, null, amount, StarsIntroActivity.StarsNeededSheet.TYPE_LINK, purpose, () -> { + + }).show(); + } + public void buy(Activity activity, TLRPC.TL_starsTopupOption option, Utilities.Callback2 whenDone) { if (activity == null) { return; @@ -348,13 +570,18 @@ public class StarsController { } if (BuildVars.useInvoiceBilling() || !BillingController.getInstance().isReady()) { - TLRPC.TL_inputStorePaymentStars payload = new TLRPC.TL_inputStorePaymentStars(); + TLRPC.TL_inputStorePaymentStarsTopup payload = new TLRPC.TL_inputStorePaymentStarsTopup(); payload.stars = option.stars; payload.currency = option.currency; payload.amount = option.amount; + TLRPC.TL_inputStorePaymentStarsTopup purpose = new TLRPC.TL_inputStorePaymentStarsTopup(); + purpose.stars = option.stars; + purpose.amount = option.amount; + purpose.currency = option.currency; + TLRPC.TL_inputInvoiceStars invoice = new TLRPC.TL_inputInvoiceStars(); - invoice.option = option; + invoice.purpose = purpose; TLRPC.TL_payments_getPaymentForm req = new TLRPC.TL_payments_getPaymentForm(); final JSONObject themeParams = BotWebViewSheet.makeThemeParams(getResourceProvider()); @@ -413,7 +640,7 @@ public class StarsController { return; } - TLRPC.TL_inputStorePaymentStars payload = new TLRPC.TL_inputStorePaymentStars(); + TLRPC.TL_inputStorePaymentStarsTopup payload = new TLRPC.TL_inputStorePaymentStarsTopup(); payload.stars = option.stars; payload.currency = option.currency; payload.amount = option.amount; @@ -454,6 +681,145 @@ public class StarsController { })); } + public void buyGift(Activity activity, TLRPC.TL_starsGiftOption option, long user_id, Utilities.Callback2 whenDone) { + if (activity == null) { + return; + } + + if (!MessagesController.getInstance(currentAccount).starsPurchaseAvailable()) { + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment != null && lastFragment.getContext() != null) { + showNoSupportDialog(lastFragment.getContext(), lastFragment.getResourceProvider()); + } else { + showNoSupportDialog(activity, null); + } + return; + } + + if (BuildVars.useInvoiceBilling() || !BillingController.getInstance().isReady()) { + TLRPC.TL_inputStorePaymentStarsGift purpose = new TLRPC.TL_inputStorePaymentStarsGift(); + purpose.stars = option.stars; + purpose.amount = option.amount; + purpose.currency = option.currency; + purpose.user_id = MessagesController.getInstance(currentAccount).getInputUser(user_id); + + TLRPC.TL_inputInvoiceStars invoice = new TLRPC.TL_inputInvoiceStars(); + invoice.purpose = purpose; + + TLRPC.TL_payments_getPaymentForm req = new TLRPC.TL_payments_getPaymentForm(); + final JSONObject themeParams = BotWebViewSheet.makeThemeParams(getResourceProvider()); + if (themeParams != null) { + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = themeParams.toString(); + req.flags |= 1; + } + req.invoice = invoice; + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (error != null) { + if (whenDone != null) { + whenDone.run(false, error.text); + } + return; + } + PaymentFormActivity paymentFormActivity = null; + if (response instanceof TLRPC.PaymentForm) { + TLRPC.PaymentForm form = (TLRPC.PaymentForm) response; + form.invoice.recurring = true; + MessagesController.getInstance(currentAccount).putUsers(form.users, false); + paymentFormActivity = new PaymentFormActivity(form, invoice, null); + } else if (response instanceof TLRPC.PaymentReceipt) { + paymentFormActivity = new PaymentFormActivity((TLRPC.PaymentReceipt) response); + } + if (paymentFormActivity != null) { + paymentFormActivity.setPaymentFormCallback(status -> { + if (status == PaymentFormActivity.InvoiceStatus.PAID) { + if (whenDone != null) { + whenDone.run(true, null); + } + } else if (status != PaymentFormActivity.InvoiceStatus.PENDING) { + if (whenDone != null) { + whenDone.run(false, null); + } + } + }); + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment == null) return; + if (AndroidUtilities.hasDialogOnTop(lastFragment)) { + BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); + bottomSheetParams.transitionFromLeft = true; + bottomSheetParams.allowNestedScroll = false; + lastFragment.showAsSheet(paymentFormActivity, bottomSheetParams); + } else { + lastFragment.presentFragment(paymentFormActivity); + } + } else { + if (whenDone != null) { + whenDone.run(false, "UNKNOWN_RESPONSE"); + } + } + })); + + return; + } + + TLRPC.TL_inputStorePaymentStarsGift payload = new TLRPC.TL_inputStorePaymentStarsGift(); + payload.stars = option.stars; + payload.currency = option.currency; + payload.amount = option.amount; + payload.user_id = MessagesController.getInstance(currentAccount).getInputUser(user_id); + + QueryProductDetailsParams.Product product = QueryProductDetailsParams.Product.newBuilder() + .setProductType(BillingClient.ProductType.INAPP) + .setProductId(option.store_product) + .build(); + BillingController.getInstance().queryProductDetails(Arrays.asList(product), (billingResult, list) -> AndroidUtilities.runOnUIThread(() -> { + if (list.isEmpty()) { + AndroidUtilities.runOnUIThread(() -> whenDone.run(false, "PRODUCT_NOT_FOUND")); + return; + } + + ProductDetails productDetails = list.get(0); + ProductDetails.OneTimePurchaseOfferDetails offerDetails = productDetails.getOneTimePurchaseOfferDetails(); + if (offerDetails == null) { + AndroidUtilities.runOnUIThread(() -> whenDone.run(false, "PRODUCT_NO_ONETIME_OFFER_DETAILS")); + return; + } + + payload.currency = offerDetails.getPriceCurrencyCode(); + payload.amount = (long) ((offerDetails.getPriceAmountMicros() / Math.pow(10, 6)) * Math.pow(10, BillingController.getInstance().getCurrencyExp(option.currency))); + + TLRPC.TL_payments_canPurchasePremium checkReq = new TLRPC.TL_payments_canPurchasePremium(); + checkReq.purpose = payload; + ConnectionsManager.getInstance(currentAccount).sendRequest(checkReq, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TLRPC.TL_boolTrue) { + BillingController.getInstance().addResultListener(productDetails.getProductId(), billingResult1 -> { + final boolean success = billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK; + final String error = success ? null : BillingController.getResponseCodeString(billingResult.getResponseCode()); + AndroidUtilities.runOnUIThread(() -> whenDone.run(success, error)); + }); + BillingController.getInstance().setOnCanceled(() -> { + AndroidUtilities.runOnUIThread(() -> whenDone.run(false, null)); + }); + BillingController.getInstance().launchBillingFlow( + activity, AccountInstance.getInstance(UserConfig.selectedAccount), payload, + Collections.singletonList(BillingFlowParams.ProductDetailsParams.newBuilder() + .setProductDetails(list.get(0)) + .build()) + ); + } else if (res instanceof TLRPC.TL_boolFalse) { + if (whenDone != null) { + whenDone.run(false, "PURCHASE_FORBIDDEN"); + } + } else { + if (whenDone != null) { + whenDone.run(false, err != null ? err.text : "SERVER_ERROR"); + } + } + })); + })); + } + public Runnable pay(MessageObject messageObject, Runnable whenShown) { final Context context = LaunchActivity.instance != null ? LaunchActivity.instance : ApplicationLoader.applicationContext; final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); @@ -502,16 +868,12 @@ public class StarsController { private boolean paymentFormOpened; public void openPaymentForm(MessageObject messageObject, TLRPC.InputInvoice inputInvoice, TLRPC.TL_payments_paymentFormStars form, Runnable whenShown, Utilities.Callback whenAllDone) { - if (form == null || form.invoice == null || paymentFormOpened) { - return; - } + if (form == null || form.invoice == null || paymentFormOpened) return; final Context context = LaunchActivity.instance != null ? LaunchActivity.instance : ApplicationLoader.applicationContext; final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); - if (context == null) { - return; - } + if (context == null) return; if (!balanceAvailable()) { getBalance(() -> { @@ -566,7 +928,7 @@ public class StarsController { return; } final boolean[] purchased = new boolean[] { false }; - StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, bot, () -> { + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_BOT, bot, () -> { purchased[0] = true; payAfterConfirmed(messageObject, inputInvoice, form, success -> { allDone[0] = true; @@ -609,6 +971,76 @@ public class StarsController { }); } + public void subscribeTo(String hash, TLRPC.ChatInvite chatInvite, Utilities.Callback2 whenAllDone) { + if (chatInvite == null || chatInvite.subscription_pricing == null) return; + + final Context context = LaunchActivity.instance != null ? LaunchActivity.instance : ApplicationLoader.applicationContext; + final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); + final long stars = chatInvite.subscription_pricing.amount; + + if (context == null) return; + + final int currentAccount = UserConfig.selectedAccount; + + final boolean[] allDone = new boolean[] { false }; + StarsIntroActivity.openStarsChannelInviteSheet(context, resourcesProvider, currentAccount, chatInvite, whenDone -> { + if (balance < stars) { + if (!MessagesController.getInstance(currentAccount).starsPurchaseAvailable()) { + paymentFormOpened = false; + if (whenDone != null) { + whenDone.run(false); + } + if (!allDone[0] && whenAllDone != null) { + whenAllDone.run("cancelled", 0L); + allDone[0] = true; + } + showNoSupportDialog(context, resourcesProvider); + return; + } + final boolean[] purchased = new boolean[] { false }; + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_SUBSCRIPTION_BUY, chatInvite.title, () -> { + purchased[0] = true; + payAfterConfirmed(hash, chatInvite, (did, success) -> { + allDone[0] = true; + if (whenAllDone != null) { + whenAllDone.run(success ? "paid" : "failed", did); + } + if (whenDone != null) { + whenDone.run(true); + } + }); + }); + sheet.setOnDismissListener(d -> { + if (whenDone != null && !purchased[0]) { + whenDone.run(false); + paymentFormOpened = false; + if (!allDone[0] && whenAllDone != null) { + whenAllDone.run("cancelled", 0L); + allDone[0] = true; + } + } + }); + sheet.show(); + } else { + payAfterConfirmed(hash, chatInvite, (did, success) -> { + if (whenDone != null) { + whenDone.run(true); + } + allDone[0] = true; + if (whenAllDone != null) { + whenAllDone.run(success ? "paid" : "failed", did); + } + }); + } + }, () -> { + paymentFormOpened = false; + if (!allDone[0] && whenAllDone != null) { + whenAllDone.run("cancelled", 0L); + allDone[0] = true; + } + }); + } + private void showNoSupportDialog(Context context, Theme.ResourcesProvider resourcesProvider) { new AlertDialog.Builder(context, resourcesProvider) .setTitle(getString(R.string.StarsNotAvailableTitle)) @@ -636,11 +1068,19 @@ public class StarsController { final long stars = _stars; final long dialogId; if (messageObject != null) { + long did; if (messageObject.messageOwner != null && messageObject.messageOwner.fwd_from != null && messageObject.messageOwner.fwd_from.from_id != null) { - dialogId = DialogObject.getPeerDialogId(messageObject.messageOwner.fwd_from.from_id); + did = DialogObject.getPeerDialogId(messageObject.messageOwner.fwd_from.from_id); } else { - dialogId = messageObject.getDialogId(); + did = messageObject.getDialogId(); } + if (did < 0 && messageObject.getFromChatId() > 0) { + final TLRPC.User _user = MessagesController.getInstance(currentAccount).getUser(messageObject.getFromChatId()); + if (_user != null && _user.bot) { + did = _user.id; + } + } + dialogId = did; } else { dialogId = form.bot_id; } @@ -669,17 +1109,20 @@ public class StarsController { MessagesController.getInstance(currentAccount).processUpdates(result.updates, false); final boolean media = messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaPaidMedia; - Drawable starDrawable = context.getResources().getDrawable(R.drawable.star_small_inner).mutate(); if (media) { + Drawable starDrawable = context.getResources().getDrawable(R.drawable.star_small_inner).mutate(); b.createSimpleBulletin(starDrawable, getString(R.string.StarsMediaPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsMediaPurchaseCompletedInfo", (int) stars, bot))).show(); } else { - b.createSimpleBulletin(starDrawable, getString(R.string.StarsPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsPurchaseCompletedInfo", (int) stars, product, bot))).show(); + b.createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsPurchaseCompletedInfo", (int) stars, product, bot))).show(); } if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { LaunchActivity.instance.getFireworksOverlay().start(true); } - invalidateTransactions(true); + final boolean isStarsGift = inputInvoice instanceof TLRPC.TL_inputInvoiceStars && ((TLRPC.TL_inputInvoiceStars) inputInvoice).purpose instanceof TLRPC.TL_inputStorePaymentStarsGift; + if (!isStarsGift) { + invalidateTransactions(true); + } if (messageObject != null) { TLRPC.TL_messages_getExtendedMedia req = new TLRPC.TL_messages_getExtendedMedia(); @@ -696,7 +1139,7 @@ public class StarsController { return; } final boolean[] purchased = new boolean[] { false }; - StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, bot, () -> { + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_BOT, bot, () -> { purchased[0] = true; payAfterConfirmed(messageObject, inputInvoice, form, success -> { if (whenDone != null) { @@ -726,14 +1169,14 @@ public class StarsController { if (whenDone != null) { whenDone.run(false); } - b.createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, err3 != null ? err3.text : "FAILED_GETTING_FORM")).show(); + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err3 != null ? err3.text : "FAILED_GETTING_FORM")).show(); } })); } else { if (whenDone != null) { whenDone.run(false); } - b.createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, err2 != null ? err2.text : "FAILED_SEND_STARS")).show(); + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err2 != null ? err2.text : "FAILED_SEND_STARS")).show(); if (messageObject != null) { TLRPC.TL_messages_getExtendedMedia req = new TLRPC.TL_messages_getExtendedMedia(); @@ -745,6 +1188,94 @@ public class StarsController { })); } + private void payAfterConfirmed(String hash, TLRPC.ChatInvite chatInvite, Utilities.Callback2 whenDone) { + if (chatInvite == null || chatInvite.subscription_pricing == null) { + return; + } + + final Context context = ApplicationLoader.applicationContext; + final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); + + if (context == null) { + return; + } + + final long stars = chatInvite.subscription_pricing.amount; + final String channel = chatInvite.title; + + TLRPC.TL_inputInvoiceChatInviteSubscription inputInvoice = new TLRPC.TL_inputInvoiceChatInviteSubscription(); + inputInvoice.hash = hash; + + TLRPC.TL_payments_sendStarsForm req2 = new TLRPC.TL_payments_sendStarsForm(); + req2.form_id = chatInvite.subscription_form_id; + req2.invoice = inputInvoice; + ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { + paymentFormOpened = false; + BaseFragment fragment = LaunchActivity.getLastFragment(); + BulletinFactory b = !AndroidUtilities.hasDialogOnTop(fragment) ? BulletinFactory.of(fragment) : BulletinFactory.global(); + if (res2 instanceof TLRPC.TL_payments_paymentResult) { + TLRPC.TL_payments_paymentResult result = (TLRPC.TL_payments_paymentResult) res2; + MessagesController.getInstance(currentAccount).processUpdates(result.updates, false); + + long dialogId = 0; + if (result.updates.update instanceof TLRPC.TL_updateChannel) { + TLRPC.TL_updateChannel upd = (TLRPC.TL_updateChannel) result.updates.update; + dialogId = -upd.channel_id; + } + if (result.updates.updates != null) { + for (int i = 0; i < result.updates.updates.size(); ++i) { + if (result.updates.updates.get(i) instanceof TLRPC.TL_updateChannel) { + TLRPC.TL_updateChannel upd = (TLRPC.TL_updateChannel) result.updates.updates.get(i); + dialogId = -upd.channel_id; + } + } + } + + if (whenDone != null) { + whenDone.run(dialogId, true); + } + + if (dialogId == 0) { + b.createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsSubscriptionCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsSubscriptionCompletedText", (int) stars, channel))).show(); + } + if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { + LaunchActivity.instance.getFireworksOverlay().start(true); + } + + invalidateTransactions(true); + invalidateSubscriptions(true); + } else if (err2 != null && "BALANCE_TOO_LOW".equals(err2.text)) { + if (!MessagesController.getInstance(currentAccount).starsPurchaseAvailable()) { + if (whenDone != null) { + whenDone.run(0L, false); + } + showNoSupportDialog(context, resourcesProvider); + return; + } + final boolean[] purchased = new boolean[] { false }; + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_SUBSCRIPTION_BUY, chatInvite.title, () -> { + purchased[0] = true; + payAfterConfirmed(hash, chatInvite, (did, success) -> { + if (whenDone != null) { + whenDone.run(did, success); + } + }); + }); + sheet.setOnDismissListener(d -> { + if (whenDone != null && !purchased[0]) { + whenDone.run(0L, false); + } + }); + sheet.show(); + } else { + if (whenDone != null) { + whenDone.run(0L, false); + } + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err2 != null ? err2.text : "FAILED_SEND_STARS")).show(); + } + })); + } + public void updateMediaPrice(MessageObject msg, long price, Runnable done) { updateMediaPrice(msg, price, done, false); } @@ -828,4 +1359,427 @@ public class StarsController { })); } + public static final long REACTIONS_TIMEOUT = 5_000; + public PendingPaidReactions currentPendingReactions; + + public static class MessageId { + public long did; + public int mid; + private MessageId(long did, int mid) { + this.did = did; + this.mid = mid; + } + public static MessageId from(long did, int mid) { + return new MessageId(did, mid); + } + public static MessageId from(MessageObject msg) { + if (msg.messageOwner.isThreadMessage && msg.messageOwner.fwd_from != null) { + return new MessageId(msg.getFromChatId(), msg.messageOwner.fwd_from.saved_from_msg_id); + } else { + return new MessageId(msg.getDialogId(), msg.getId()); + } + } + @Override + public int hashCode() { + return Objects.hash(did, mid); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof MessageId) { + MessageId id = (MessageId) obj; + return id.did == did && id.mid == mid; + } + return false; + } + } + + public boolean arePaidReactionsAnonymous(MessageObject messageObject) { + if (currentPendingReactions != null && currentPendingReactions.message.equals(MessageId.from(messageObject)) && currentPendingReactions.anonymous != null) { + return currentPendingReactions.anonymous; + } + Boolean messageSettings = messageObject == null ? null : messageObject.isMyPaidReactionAnonymous(); + if (messageSettings != null) { + return messageSettings; + } + final long did = messageObject == null ? 0 : messageObject.getDialogId(); + final SharedPreferences prefs = MessagesController.getInstance(currentAccount).getMainSettings(); + if (prefs.contains("anon_react_" + did)) { + return prefs.getBoolean("anon_react_" + did, false); + } + if (prefs.contains("anon_react_" + 0)) { + return prefs.getBoolean("anon_react_" + 0, false); + } + return false; + } + + public boolean arePaidReactionsAnonymous(MessageId id, TLRPC.MessageReactions reactions) { + if (currentPendingReactions != null && currentPendingReactions.message.equals(id) && currentPendingReactions.anonymous != null) { + return currentPendingReactions.anonymous; + } + Boolean messageSettings = MessageObject.isMyPaidReactionAnonymous(reactions); + if (messageSettings != null) { + return messageSettings; + } + final SharedPreferences prefs = MessagesController.getInstance(currentAccount).getMainSettings(); + if (prefs.contains("anon_react_" + id.did)) { + return prefs.getBoolean("anon_react_" + id.did, false); + } + if (prefs.contains("anon_react_" + 0)) { + return prefs.getBoolean("anon_react_" + 0, false); + } + return false; + } + + public void saveAnonymous(MessageObject messageObject, boolean value) { + final SharedPreferences prefs = MessagesController.getInstance(currentAccount).getMainSettings(); + prefs.edit().putBoolean("anon_react_" + (messageObject == null ? 0 : messageObject.getDialogId()), value).putBoolean("anon_react_0", value).apply(); + } + + public class PendingPaidReactions { + + public MessageId message; + public MessageObject messageObject; + public long random_id; + public ChatActivity chatActivity; + public Bulletin bulletin; + public Bulletin.TwoLineAnimatedLottieLayout bulletinLayout; + public Bulletin.UndoButton bulletinButton; + public Bulletin.TimerView timerView; + + public boolean wasChosen; + + public long amount; + public long lastTime; + public boolean committed = false; + public boolean cancelled = false; + + public long not_added; + public boolean applied; + + public Boolean anonymous = null; + public boolean isAnonymous() { + if (anonymous != null) return anonymous; + return arePaidReactionsAnonymous(messageObject); + } + + private void saveAnonymous() { + StarsController.this.saveAnonymous(messageObject, isAnonymous()); + } + + public StarReactionsOverlay overlay; + public void setOverlay(StarReactionsOverlay overlay) { + this.overlay = overlay; + } + + public PendingPaidReactions( + MessageId message, + MessageObject messageObject, + ChatActivity chatActivity, + long currentTime, + boolean affect + ) { + this.message = message; + this.messageObject = messageObject; + this.random_id = Utilities.random.nextLong() & 0xFFFFFFFFL | (currentTime << 32); + this.chatActivity = chatActivity; + + final Context context = getContext(chatActivity); + bulletinLayout = new Bulletin.TwoLineAnimatedLottieLayout(context, chatActivity.themeDelegate); + bulletinLayout.setAnimation(R.raw.stars_topup); + bulletinLayout.titleTextView.setText(LocaleController.getString(R.string.StarsSentTitle)); + bulletinButton = new Bulletin.UndoButton(context, true, false, chatActivity.themeDelegate); + bulletinButton.setText(LocaleController.getString(R.string.StarsSentUndo)); + bulletinButton.setUndoAction(this::cancel); + timerView = new Bulletin.TimerView(context, chatActivity.themeDelegate); + timerView.timeLeft = REACTIONS_TIMEOUT; + timerView.setColor(Theme.getColor(Theme.key_undo_cancelColor, chatActivity.themeDelegate)); + bulletinButton.addView(timerView, LayoutHelper.createFrame(20, 20, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 0, 12, 0)); + bulletinButton.undoTextView.setPadding(dp(12), dp(8), dp(20 + 10), dp(8)); + bulletinLayout.setButton(bulletinButton); + bulletin = BulletinFactory.of(chatActivity).create(bulletinLayout, -1); + bulletin.hideAfterBottomSheet = false; + if (affect) bulletin.show(true); + bulletin.setOnHideListener(closeRunnable); + + this.amount = 0; + this.lastTime = System.currentTimeMillis(); + + wasChosen = messageObject.isPaidReactionChosen(); + } + + public void add(long amount, boolean affect) { + if (committed || cancelled) { + if (BuildVars.DEBUG_PRIVATE_VERSION) { + throw new RuntimeException("adding more amount to committed reactions"); + } else { + return; + } + } + this.amount += amount; + this.lastTime = System.currentTimeMillis(); + + bulletinLayout.subtitleTextView.cancelAnimation(); + bulletinLayout.subtitleTextView.setText(AndroidUtilities.replaceTags(LocaleController.formatPluralString("StarsSentText", (int) this.amount)), true); + + timerView.timeLeft = REACTIONS_TIMEOUT; + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + AndroidUtilities.runOnUIThread(closeRunnable, REACTIONS_TIMEOUT); + + if (affect) { + applied = true; + messageObject.addPaidReactions((int) +amount, true, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + } else { + applied = false; + if (messageObject.ensurePaidReactionsExist(true)) { + not_added--; + } + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + not_added += amount; + } + } + + public void apply() { + if (applied) return; + applied = true; + + timerView.timeLeft = REACTIONS_TIMEOUT; + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + AndroidUtilities.runOnUIThread(closeRunnable, REACTIONS_TIMEOUT); + + messageObject.addPaidReactions((int) +not_added, true, isAnonymous()); + not_added = 0; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + bulletin.show(true); + bulletin.setOnHideListener(closeRunnable); + } + + public final Runnable closeRunnable = this::close; + public void close() { + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + + if (applied) { + commit(); + } else { + cancelled = true; + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + } + bulletin.hide(); + if (overlay != null && overlay.isShowing(messageObject)) { + overlay.hide(); + } + + if (currentPendingReactions == this) { + currentPendingReactions = null; + } + } + + public final Runnable cancelRunnable = this::cancel; + public void cancel() { + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + + cancelled = true; + bulletin.hide(); + if (overlay != null) { + overlay.hide(); + } + + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + + if (currentPendingReactions == this) { + currentPendingReactions = null; + } + } + + public void commit() { + if (committed || cancelled) { + return; + } + + final StarsController starsController = StarsController.getInstance(currentAccount); + final MessagesController messagesController = MessagesController.getInstance(currentAccount); + final ConnectionsManager connectionsManager = ConnectionsManager.getInstance(currentAccount); + + final long totalStars = amount; + if (starsController.balanceAvailable() && starsController.getBalance() < totalStars) { + cancelled = true; + + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + + String name; + if (message.did >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(message.did); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-message.did); + name = chat == null ? "" : chat.title; + } + Context context = chatActivity.getContext(); + if (context == null) context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + new StarsIntroActivity.StarsNeededSheet(context, chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars, true, true, anonymous); + }).show(); + + return; + } + + committed = true; + + TLRPC.TL_messages_sendPaidReaction req = new TLRPC.TL_messages_sendPaidReaction(); + req.peer = messagesController.getInputPeer(message.did); + req.msg_id = message.mid; + req.random_id = random_id; + req.count = (int) amount; + req.isPrivate = isAnonymous(); + saveAnonymous(); + + connectionsManager.sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (response != null) { + messagesController.processUpdates((TLRPC.Updates) response, false); + } else if (error != null) { + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + + if ("BALANCE_TOO_LOW".equals(error.text)) { + String name; + if (message.did >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(message.did); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-message.did); + name = chat == null ? "" : chat.title; + } + Context context = chatActivity.getContext(); + if (context == null) context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + new StarsIntroActivity.StarsNeededSheet(context, chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars, true, true, anonymous); + }).show(); + } + + invalidateTransactions(false); + invalidateBalance(); + } + })); + } + } + + public StarsController.PendingPaidReactions sendPaidReaction(MessageObject messageObject, ChatActivity chatActivity) { + return sendPaidReaction(messageObject, chatActivity, +1, true, true, null); + } + + public Context getContext(ChatActivity chatActivity) { + if (chatActivity != null && chatActivity.getContext() != null) + return chatActivity.getContext(); + if (LaunchActivity.instance != null && !LaunchActivity.instance.isFinishing()) + return LaunchActivity.instance; + if (ApplicationLoader.applicationContext != null) + return ApplicationLoader.applicationContext; + return null; + } + + public StarsController.PendingPaidReactions sendPaidReaction( + MessageObject messageObject, + ChatActivity chatActivity, + long amount, + boolean affect, + boolean checkBalance, + Boolean anonymous + ) { + final MessageId key = MessageId.from(messageObject); + final StarsController s = StarsController.getInstance(currentAccount); + final long totalStars = amount; + final Context context = getContext(chatActivity); + if (context == null) return null; + if (checkBalance && s.balanceAvailable() && s.getBalance() <= 0) { + final long dialogId = chatActivity.getDialogId(); + String name; + if (dialogId >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(dialogId); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-dialogId); + name = chat == null ? "" : chat.title; + } + new StarsIntroActivity.StarsNeededSheet(chatActivity.getContext(), chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars, true, true, anonymous); + }).show(); + return null; + } + if (messageObject != null && !messageObject.doesPaidReactionExist()) { + affect = true; + } + if (currentPendingReactions == null || !currentPendingReactions.message.equals(key)) { + if (currentPendingReactions != null) { + currentPendingReactions.close(); + } + currentPendingReactions = new PendingPaidReactions(key, messageObject, chatActivity, ConnectionsManager.getInstance(currentAccount).getCurrentTime(), affect); + currentPendingReactions.anonymous = anonymous; + } + if (currentPendingReactions.amount + amount > MessagesController.getInstance(currentAccount).starsPaidReactionAmountMax) { + currentPendingReactions.close(); + currentPendingReactions = new PendingPaidReactions(key, messageObject, chatActivity, ConnectionsManager.getInstance(currentAccount).getCurrentTime(), affect); + } + final long totalStars2 = currentPendingReactions.amount + amount; + if (checkBalance && s.balanceAvailable() && s.getBalance() < totalStars2) { + currentPendingReactions.cancel(); + final long dialogId = chatActivity.getDialogId(); + String name; + if (dialogId >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(dialogId); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-dialogId); + name = chat == null ? "" : chat.title; + } + new StarsIntroActivity.StarsNeededSheet(context, chatActivity.getResourceProvider(), totalStars2, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars2, true, true, anonymous); + }).show(); + return null; + } + currentPendingReactions.add(amount, affect); + currentPendingReactions.anonymous = anonymous; + return currentPendingReactions; + } + + public void undoPaidReaction() { + if (currentPendingReactions != null) { + currentPendingReactions.cancel(); + } + } + + public void commitPaidReaction() { + if (currentPendingReactions != null) { + currentPendingReactions.close(); + } + } + + public boolean hasPendingPaidReactions(MessageObject messageObject) { + if (currentPendingReactions == null) return false; + if (messageObject == null) return false; + final MessageId key = MessageId.from(messageObject); + if (currentPendingReactions.message.did != key.did || currentPendingReactions.message.mid != key.mid) return false; + if (!currentPendingReactions.applied) return false; + return true; + } + + public long getPendingPaidReactions(MessageObject messageObject) { + if (messageObject == null || messageObject.messageOwner == null) return 0; + if (messageObject.messageOwner.isThreadMessage && messageObject.messageOwner.fwd_from != null) { + return getPendingPaidReactions(messageObject.getFromChatId(), messageObject.messageOwner.fwd_from.saved_from_msg_id); + } else { + return getPendingPaidReactions(messageObject.getDialogId(), messageObject.getId()); + } + } + + public long getPendingPaidReactions(long dialogId, int messageId) { + if (currentPendingReactions == null) return 0; + if (currentPendingReactions.message.did != dialogId || currentPendingReactions.message.mid != messageId) return 0; + if (!currentPendingReactions.applied) return 0; + return currentPendingReactions.amount; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java index a06dcadd9..02c6f1153 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java @@ -5,6 +5,7 @@ import static org.telegram.messenger.LocaleController.formatPluralString; import static org.telegram.messenger.LocaleController.formatPluralStringComma; import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; +import static org.telegram.ui.Stars.StarsIntroActivity.StarsTransactionView.getPlatformDrawable; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -34,7 +35,6 @@ import android.text.style.ImageSpan; import android.text.style.ReplacementSpan; import android.util.TypedValue; import android.view.Gravity; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.OvershootInterpolator; @@ -54,33 +54,40 @@ import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import org.checkerframework.checker.units.qual.Angle; +import com.google.android.exoplayer2.scheduler.RequirementsWatcher; +import com.google.common.collect.Lists; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.BillingController; +import org.telegram.messenger.BirthdayController; import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; +import org.telegram.messenger.DocumentObject; +import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MediaDataController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; +import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.WebFile; import org.telegram.messenger.browser.Browser; +import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; +import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.AvatarSpan; -import org.telegram.ui.Cells.ChatActionCell; -import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.SessionCell; import org.telegram.ui.ChatActivity; @@ -89,6 +96,7 @@ import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.AvatarDrawable; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.BottomSheetWithRecyclerListView; +import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CombinedDrawable; @@ -104,8 +112,11 @@ import org.telegram.ui.Components.Premium.GLIcon.GLIconRenderer; import org.telegram.ui.Components.Premium.GLIcon.GLIconTextureView; import org.telegram.ui.Components.Premium.GLIcon.Icon3D; import org.telegram.ui.Components.Premium.StarParticlesView; +import org.telegram.ui.Components.Premium.boosts.UserSelectorBottomSheet; +import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.RecyclerListView; import org.telegram.ui.Components.ScaleStateListAnimator; +import org.telegram.ui.Components.StarAppsSheet; import org.telegram.ui.Components.TableView; import org.telegram.ui.Components.Text; import org.telegram.ui.Components.UItem; @@ -120,11 +131,12 @@ import org.telegram.ui.PhotoViewer; import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import org.telegram.ui.Stories.recorder.HintView2; -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.Locale; public class StarsIntroActivity extends GradientHeaderActivity implements NotificationCenter.NotificationCenterDelegate { @@ -146,7 +158,9 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starOptionsLoaded); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starBalanceUpdated); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starTransactionsLoaded); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starSubscriptionsLoaded); StarsController.getInstance(currentAccount).invalidateTransactions(true); + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); return super.onFragmentCreate(); } @@ -156,8 +170,10 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starOptionsLoaded); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starBalanceUpdated); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starTransactionsLoaded); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starSubscriptionsLoaded); } + private boolean hadTransactions; @Override public void didReceivedNotification(int id, int account, Object... args) { if ( @@ -172,9 +188,31 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi savedScrollOffset = 0; } applyScrolledPosition(); + } else if (id == NotificationCenter.starTransactionsLoaded) { + final StarsController c = StarsController.getInstance(currentAccount); + if (hadTransactions != c.hasTransactions()) { + hadTransactions = c.hasTransactions(); + saveScrollPosition(); + if (adapter != null) { + adapter.update(true); + } + if (savedScrollPosition == 0 && savedScrollOffset < 0) { + savedScrollOffset = 0; + } + applyScrolledPosition(); + } + } else if (id == NotificationCenter.starSubscriptionsLoaded) { + if (adapter != null) { + adapter.update(true); + } } } + @Override + public int getNavigationBarColor() { + return Theme.getColor(Theme.key_dialogBackgroundGray); + } + @Override public View createView(Context context) { useFillLastLayoutManager = false; @@ -183,10 +221,21 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi emptyLayout = new View(context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(300), MeasureSpec.EXACTLY)); + int firstViewHeight; + if (StarsIntroActivity.this.isLandscapeMode) { + firstViewHeight = StarsIntroActivity.this.statusBarHeight + actionBar.getMeasuredHeight() - AndroidUtilities.dp(16); + } else { + int h = AndroidUtilities.dp(140) + statusBarHeight; + if (backgroundView.getMeasuredHeight() + AndroidUtilities.dp(24) > h) { + h = backgroundView.getMeasuredHeight() + AndroidUtilities.dp(24); + } + firstViewHeight = h; + } + firstViewHeight -= 2.5f * yOffset; + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(firstViewHeight, MeasureSpec.EXACTLY)); } }; - emptyLayout.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray)); + emptyLayout.setBackgroundColor(Theme.getColor(Theme.key_dialogBackgroundGray)); super.createView(context); @@ -314,6 +363,12 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi if (innerListView != null && consumed[1] > 0) { innerListView.scrollBy(0, consumed[1]); } + } else if (dy > 0) { + RecyclerListView innerListView = transactionsLayout.getCurrentListView(); + if (listView.getHeight() - bottom >= 0 && innerListView != null && !innerListView.canScrollVertically(1)) { + consumed[1] = dy; + listView.stopScroll(); + } } } } @@ -427,7 +482,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == UniversalAdapter.VIEW_TYPE_HEADER) { + if (viewType == UniversalAdapter.VIEW_TYPE_ANIMATED_HEADER) { HeaderCell headerCell = new HeaderCell(getContext(), Theme.key_windowBackgroundWhiteBlueHeader, 21, 0, false, resourceProvider); headerCell.setHeight(40 - 15); return new RecyclerListView.Holder(headerCell); @@ -439,21 +494,8 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi private boolean expanded = false; private final int BUTTON_EXPAND = -1; - - public static class StarTier { - public final boolean main; - public final int id; - public final int stars; - public final int amount; - public final String currency; - public StarTier(boolean main, int id, int stars, int amount, String currency) { - this.main = main; - this.id = id; - this.stars = stars; - this.amount = amount; - this.currency = currency; - } - } + private final int BUTTON_GIFT = -2; + private final int BUTTON_SUBSCRIPTIONS_EXPAND = -3; public void fillItems(ArrayList items, UniversalAdapter adapter) { if (getContext() == null) { @@ -463,7 +505,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi final StarsController c = StarsController.getInstance(currentAccount); items.add(UItem.asFullyCustom(getHeader(getContext()))); - items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + items.add(UItem.asAnimatedHeader(-99, getString(R.string.TelegramStarsChoose))); int stars = 1; ArrayList options = c.getOptions(); @@ -471,7 +513,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi int hidden = 0; for (int id = 0; id < options.size(); ++id) { TLRPC.TL_starsTopupOption option = options.get(id); - if (option.collapsed && !expanded) { + if (option.extended && !expanded) { hidden++; continue; } @@ -492,24 +534,47 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi Browser.openUrl(getContext(), getString(R.string.StarsTOSLink)); }))); -// if (c.hasTransactions()) { + if (getMessagesController().starsGiftsEnabled) { + items.add(UItem.asButton(BUTTON_GIFT, R.drawable.menu_stars_gift, getString(R.string.TelegramStarsGift)).accent()); + items.add(UItem.asShadow(null)); + } + + if (c.hasSubscriptions()) { + items.add(UItem.asHeader(getString(R.string.StarMySubscriptions))); + for (int i = 0; i < c.subscriptions.size(); ++i) { + items.add(StarsSubscriptionView.Factory.asSubscription(c.subscriptions.get(i))); + } + if (c.isLoadingSubscriptions()) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.STAR_SUBSCRIPTION)); + } else if (!c.didFullyLoadSubscriptions()) { + items.add(UItem.asButton(BUTTON_SUBSCRIPTIONS_EXPAND, R.drawable.arrow_more, getString(R.string.StarMySubscriptionsExpand)).accent()); + } + items.add(UItem.asShadow(null)); + } + + if (hadTransactions = c.hasTransactions()) { items.add(UItem.asFullscreenCustom(transactionsLayout, ActionBar.getCurrentActionBarHeight() + AndroidUtilities.statusBarHeight)); -// } else { -// items.add(UItem.asCustom(emptyLayout)); -// } + } else { + items.add(UItem.asCustom(emptyLayout)); + } } public void onItemClick(UItem item, int position) { if (item.id == BUTTON_EXPAND) { expanded = !expanded; adapter.update(true); + } else if (item.id == BUTTON_GIFT) { + StarsController.getInstance(currentAccount).getGiftOptions(); + UserSelectorBottomSheet.open(UserSelectorBottomSheet.TYPE_STARS, 0, BirthdayController.getInstance(currentAccount).getState()); + } else if (item.id == BUTTON_SUBSCRIPTIONS_EXPAND) { + StarsController.getInstance(currentAccount).loadSubscriptions(); + adapter.update(true); } else if (item.instanceOf(StarTierView.Factory.class)) { if (item.object instanceof TLRPC.TL_starsTopupOption) { StarsController.getInstance(currentAccount).buy(getParentActivity(), (TLRPC.TL_starsTopupOption) item.object, (success, error) -> { if (getContext() == null) return; if (success) { - Drawable starDrawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); - BulletinFactory.of(this).createSimpleBulletin(starDrawable, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); + BulletinFactory.of(this).createSimpleBulletin(R.raw.stars_topup, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); fireworksOverlay.start(true); StarsController.getInstance(currentAccount).invalidateTransactions(true); } else if (error != null) { @@ -517,6 +582,10 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi } }); } + } else if (item.instanceOf(StarsSubscriptionView.Factory.class)) { + if (item.object instanceof TLRPC.StarsSubscription) { + showSubscriptionSheet(getContext(), currentAccount, (TLRPC.StarsSubscription) item.object, getResourceProvider()); + } } } @@ -749,7 +818,18 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi item.id = id; item.intValue = index; item.longValue = option.stars; - item.text = formatPluralString("StarsCount", (int) option.stars); + item.text = formatPluralStringComma("StarsCount", (int) option.stars, ' '); + item.subtext = option.loadingStorePrice ? null : BillingController.getInstance().formatCurrency(option.amount, option.currency); + item.object = option; + return item; + } + + public static UItem asStarTier(int id, int index, TLRPC.TL_starsGiftOption option) { + UItem item = UItem.ofFactory(StarTierView.Factory.class); + item.id = id; + item.intValue = index; + item.longValue = option.stars; + item.text = formatPluralStringComma("StarsCount", (int) option.stars, ' '); item.subtext = option.loadingStorePrice ? null : BillingController.getInstance().formatCurrency(option.amount, option.currency); item.object = option; return item; @@ -1006,24 +1086,28 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - scheduleLoadTransactions(); + if (!Page.this.listView.canScrollVertically(1) || isLoadingVisible()) { + loadTransactionsRunnable.run(); + } } }); } private final Runnable loadTransactionsRunnable; - private void scheduleLoadTransactions() { - if (!Page.this.listView.canScrollVertically(1)) { - AndroidUtilities.cancelRunOnUIThread(loadTransactionsRunnable); - AndroidUtilities.runOnUIThread(loadTransactionsRunnable, 250); + public boolean isLoadingVisible() { + for (int i = 0; i < listView.getChildCount(); ++i) { + if (listView.getChildAt(i) instanceof FlickerLoadingView) + return true; } + return false; } @Override public void didReceivedNotification(int id, int account, Object... args) { if (id == NotificationCenter.starTransactionsLoaded) { listView.adapter.update(true); + loadTransactionsRunnable.run(); } else if (id == NotificationCenter.botStarsTransactionsLoaded) { if ((long) args[0] == bot_id) { listView.adapter.update(true); @@ -1148,7 +1232,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi return super.drawChild(canvas, child, drawingTime); } }; - addView(imageViewContainer, LayoutHelper.createLinear(72, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.FILL_VERTICAL)); + addView(imageViewContainer, LayoutHelper.createLinear(72, LayoutHelper.MATCH_PARENT, 0, Gravity.LEFT | Gravity.FILL_VERTICAL)); imageView2 = new BackupImageView(context); imageView2.setRoundRadius(dp(46)); @@ -1162,29 +1246,35 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi textLayout = new LinearLayout(context); textLayout.setOrientation(VERTICAL); textLayout.setGravity(Gravity.CENTER | Gravity.LEFT); - addView(textLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + addView(textLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, 1, Gravity.FILL)); titleTextView = new TextView(context); titleTextView.setTypeface(AndroidUtilities.bold()); titleTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - textLayout.addView(titleTextView, titleTextViewParams = LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 4.33f)); + titleTextView.setEllipsize(TextUtils.TruncateAt.END); + titleTextView.setSingleLine(true); + textLayout.addView(titleTextView, titleTextViewParams = LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 4.33f)); subtitleTextView = new TextView(context); subtitleTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); subtitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); - textLayout.addView(subtitleTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, .33f)); + subtitleTextView.setEllipsize(TextUtils.TruncateAt.END); + subtitleTextView.setSingleLine(true); + textLayout.addView(subtitleTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, .33f)); dateTextView = new TextView(context); dateTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); dateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - textLayout.addView(dateTextView, dateTextViewParams = LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + dateTextView.setEllipsize(TextUtils.TruncateAt.END); + dateTextView.setSingleLine(true); + textLayout.addView(dateTextView, dateTextViewParams = LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); amountTextView = new TextView(context); amountTextView.setTypeface(AndroidUtilities.bold()); amountTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15.3f); amountTextView.setGravity(Gravity.RIGHT); - addView(amountTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 20, 0)); + addView(amountTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 0, 20, 0)); star = new SpannableString("⭐️"); Drawable drawable = context.getResources().getDrawable(R.drawable.star_small_inner).mutate(); @@ -1192,12 +1282,16 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi star.setSpan(new ImageSpan(drawable), 0, star.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } - public static HashMap cachedPlatformDrawables; - public static Drawable getPlatformDrawable(String platform) { + public static HashMap cachedPlatformDrawables; + public static CombinedDrawable getPlatformDrawable(String platform) { + return getPlatformDrawable(platform, 44); + } + public static CombinedDrawable getPlatformDrawable(String platform, int sz) { + if (sz != 44) return SessionCell.createDrawable(sz, platform); if (cachedPlatformDrawables == null) { cachedPlatformDrawables = new HashMap<>(); } - Drawable drawable = cachedPlatformDrawables.get(platform); + CombinedDrawable drawable = cachedPlatformDrawables.get(platform); if (drawable == null) { cachedPlatformDrawables.put(platform, drawable = SessionCell.createDrawable(44, platform)); } @@ -1208,7 +1302,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi public void set(TLRPC.StarsTransaction transaction, boolean bot, boolean divider) { long did = DialogObject.getPeerDialogId(transaction.peer.peer); - threeLines = did != 0; + threeLines = did != 0 || transaction.subscription || transaction.gift && transaction.peer instanceof TLRPC.TL_starsTransactionPeerFragment; titleTextViewParams.bottomMargin = threeLines ? 0 : dp(4.33f); subtitleTextView.setVisibility(threeLines ? View.VISIBLE : View.GONE); dateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, threeLines ? 13 : 14); @@ -1229,7 +1323,10 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi if (did != 0) { boolean deleted = false; String username; - if (did >= 0) { + if (UserObject.isService(did)) { + username = getString(R.string.StarsTransactionUnknown); + imageView.setImageDrawable(getPlatformDrawable("fragment")); + } else if (did >= 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); deleted = user == null; if (transaction.photo == null) { @@ -1246,7 +1343,25 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi } username = chat == null ? "" : chat.title; } - if (!transaction.extended_media.isEmpty()) { + if (transaction.subscription) { + titleTextView.setText(username); + if (transaction.subscription_period == StarsController.PERIOD_MONTHLY) { + subtitleTextView.setVisibility(VISIBLE); + subtitleTextView.setText(getString(R.string.StarsTransactionSubscriptionMonthly)); + } else { + final String period = transaction.subscription_period == StarsController.PERIOD_5MINUTES ? "5 minutes" : "Minute"; + subtitleTextView.setVisibility(VISIBLE); + subtitleTextView.setText(String.format(Locale.US, "%s subscription fee", period)); + } + } else if (transaction.gift) { + titleTextView.setText(LocaleController.getString(R.string.StarsGiftReceived)); + subtitleTextView.setVisibility(deleted ? GONE : VISIBLE); + subtitleTextView.setText(username); + } else if (transaction.reaction) { + titleTextView.setText(LocaleController.getString(R.string.StarsReactionsSent)); + subtitleTextView.setVisibility(deleted ? GONE : VISIBLE); + subtitleTextView.setText(username); + } else if (!transaction.extended_media.isEmpty()) { if (bot) { titleTextView.setText(username); subtitleTextView.setVisibility(VISIBLE); @@ -1294,7 +1409,13 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi titleTextView.setText(getString(R.string.StarsTransactionInApp)); imageView.setImageDrawable(getPlatformDrawable("android")); } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerFragment) { - titleTextView.setText(getString(bot ? R.string.StarsTransactionWithdrawFragment : R.string.StarsTransactionFragment)); + if (transaction.gift) { + titleTextView.setText(LocaleController.getString(R.string.StarsGiftReceived)); + subtitleTextView.setText(getString(R.string.StarsTransactionUnknown)); + subtitleTextView.setVisibility(VISIBLE); + } else { + titleTextView.setText(getString(bot ? R.string.StarsTransactionWithdrawFragment : R.string.StarsTransactionFragment)); + } imageView.setImageDrawable(getPlatformDrawable("fragment")); } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerPremiumBot) { titleTextView.setText(getString(R.string.StarsTransactionBot)); @@ -1325,6 +1446,10 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi setWillNotDraw(!(needDivider = divider)); } + public void setLoading() { + + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); @@ -1353,7 +1478,8 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi @Override public void bindView(View view, UItem item, boolean divider) { - ((StarsTransactionView) view).set((TLRPC.StarsTransaction) item.object, item.accent, divider); + StarsTransactionView transactionView = (StarsTransactionView) view; + transactionView.set((TLRPC.StarsTransaction) item.object, item.accent, divider); } public static UItem asTransaction(TLRPC.StarsTransaction transaction, boolean bot) { @@ -1362,6 +1488,160 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi item.accent = bot; return item; } + + public static UItem asLoading() { + UItem item = UItem.ofFactory(StarsTransactionView.Factory.class); + item.accent = true; + return item; + } + } + } + + public static class StarsSubscriptionView extends LinearLayout { + + private final int currentAccount; + private final Theme.ResourcesProvider resourcesProvider; + + public final BackupImageView imageView; + public final LinearLayout textLayout; + public final SimpleTextView titleView; + public final TextView subtitleView; + public final LinearLayout priceLayout; + public final TextView priceTitleView; + public final TextView priceSubtitleView; + + private boolean needDivider; + + public StarsSubscriptionView(Context context, int currentAccount, Theme.ResourcesProvider resourcesProvider) { + super(context); + + this.currentAccount = currentAccount; + this.resourcesProvider = resourcesProvider; + setOrientation(HORIZONTAL); + + imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(46)); + addView(imageView, LayoutHelper.createLinear(46, 46, 0, Gravity.CENTER_VERTICAL | Gravity.LEFT, 13, 0, 13, 0)); + + textLayout = new LinearLayout(context); + textLayout.setOrientation(VERTICAL); + addView(textLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 1, Gravity.CENTER_VERTICAL, 0, 0, 0, 0)); + + titleView = new SimpleTextView(context); + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + titleView.setTextSize(16); + titleView.setTypeface(AndroidUtilities.bold()); + textLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 2)); + + subtitleView = new TextView(context); + subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 0)); + + priceLayout = new LinearLayout(context); + priceLayout.setOrientation(VERTICAL); + addView(priceLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, Gravity.CENTER_VERTICAL, 0, 0, 18, 0)); + + priceTitleView = new TextView(context); + priceTitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + priceTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + priceTitleView.setTypeface(AndroidUtilities.bold()); + priceTitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceTitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 0, 0, 1)); + + priceSubtitleView = new TextView(context); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + priceSubtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + priceSubtitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceSubtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 0, 0, 0)); + } + + public void set(TLRPC.StarsSubscription subscription, boolean divider) { + long dialogId = DialogObject.getPeerDialogId(subscription.peer); + + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + if (chat == null) return; + + AvatarDrawable avatarDrawable = new AvatarDrawable(); + avatarDrawable.setInfo(chat); + imageView.setForUserOrChat(chat, avatarDrawable); + + long now = ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + titleView.setText(chat.title); + if (subscription.canceled) { + subtitleView.setText(formatString(subscription.until_date < now ? R.string.StarsSubscriptionExpired : R.string.StarsSubscriptionExpires, LocaleController.formatDateChat(subscription.until_date))); + priceTitleView.setVisibility(View.GONE); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + priceSubtitleView.setText(LocaleController.getString(R.string.StarsSubscriptionStatusCancelled)); + } else if (subscription.until_date < now) { + subtitleView.setText(formatString(R.string.StarsSubscriptionExpired, LocaleController.formatDateChat(subscription.until_date))); + priceTitleView.setVisibility(View.GONE); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + priceSubtitleView.setText(LocaleController.getString(R.string.StarsSubscriptionStatusExpired)); + } else { + subtitleView.setText(formatString(R.string.StarsSubscriptionRenews, LocaleController.formatDateChat(subscription.until_date))); + priceTitleView.setVisibility(View.VISIBLE); + priceTitleView.setText(replaceStarsWithPlain("⭐️ " + Long.toString(subscription.pricing.amount), .8f)); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + if (subscription.pricing.period == StarsController.PERIOD_MONTHLY) { + priceSubtitleView.setText(getString(R.string.StarsParticipantSubscriptionPerMonth)); + } else if (subscription.pricing.period == StarsController.PERIOD_MINUTE) { + priceSubtitleView.setText("per minute"); + } else if (subscription.pricing.period == StarsController.PERIOD_5MINUTES) { + priceSubtitleView.setText("per 5 minutes"); + } + } + + setWillNotDraw(!(needDivider = divider)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(58), MeasureSpec.EXACTLY) + ); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(dp(72), getMeasuredHeight() - 1, getMeasuredWidth(), getMeasuredHeight(), Theme.dividerPaint); + } + } + + public static class Factory extends UItem.UItemFactory { + @Override + public StarsSubscriptionView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + StarsSubscriptionView cached = getCached(); + if (cached != null) { + return cached; + } + return new StarsSubscriptionView(context, currentAccount, resourcesProvider); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + StarsSubscriptionView subscriptionView = (StarsSubscriptionView) view; + subscriptionView.set((TLRPC.StarsSubscription) item.object, divider); + } + + public static UItem asSubscription(TLRPC.StarsSubscription subscription) { + UItem item = UItem.ofFactory(StarsSubscriptionView.Factory.class); + item.object = subscription; + return item; + } + + @Override + public boolean equals(UItem a, UItem b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (!(a.object instanceof TLRPC.StarsSubscription) || !(b.object instanceof TLRPC.StarsSubscription)) return false; + TLRPC.StarsSubscription subA = (TLRPC.StarsSubscription) a.object; + TLRPC.StarsSubscription subB = (TLRPC.StarsSubscription) b.object; + return TextUtils.equals(subA.id, subB.id); + } } } @@ -1492,12 +1772,22 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi if (messageObject.messageOwner != null && messageObject.messageOwner.fwd_from != null && messageObject.messageOwner.fwd_from.from_id != null) { did = DialogObject.getPeerDialogId(messageObject.messageOwner.fwd_from.from_id); } + if (did < 0 && messageObject.getFromChatId() > 0) { + final TLRPC.User _user = MessagesController.getInstance(currentAccount).getUser(messageObject.getFromChatId()); + if (_user != null && _user.bot) { + did = _user.id; + } + } final String chatTitle; + final boolean isBot; if (did >= 0) { - chatTitle = UserObject.getUserName(MessagesController.getInstance(currentAccount).getUser(did)); + final TLRPC.User _user = MessagesController.getInstance(currentAccount).getUser(did); + chatTitle = UserObject.getUserName(_user); + isBot = _user != null && _user.bot; } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); chatTitle = chat == null ? "" : chat.title; + isBot = false; } int photosCount = 0, videosCount = 0; @@ -1518,11 +1808,11 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi String c; if (videosCount == 0) { - c = formatPluralString("StarsConfirmPurchaseMediaOne2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), chatTitle); + c = formatPluralString(isBot ? "StarsConfirmPurchaseMediaBotOne2" : "StarsConfirmPurchaseMediaOne2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), chatTitle); } else if (photosCount == 0) { - c = formatPluralString("StarsConfirmPurchaseMediaOne2", (int) stars, videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); + c = formatPluralString(isBot ? "StarsConfirmPurchaseMediaBotOne2" : "StarsConfirmPurchaseMediaOne2", (int) stars, videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); } else { - c = formatPluralString("StarsConfirmPurchaseMediaTwo2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); + c = formatPluralString(isBot ? "StarsConfirmPurchaseMediaBotTwo2" : "StarsConfirmPurchaseMediaTwo2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); } subtitleView.setText(AndroidUtilities.replaceTags(c)); } else { @@ -1568,6 +1858,152 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi return sheet; } + public static BottomSheet openStarsChannelInviteSheet( + Context context, + Theme.ResourcesProvider resourcesProvider, + int currentAccount, + TLRPC.ChatInvite chatInvite, + Utilities.Callback> whenConfirmed, + Runnable whenDismissed + ) { + BottomSheet.Builder b = new BottomSheet.Builder(context, false, resourcesProvider); + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(dp(16), 0, dp(16), dp(8)); + + FrameLayout topView = new FrameLayout(context); + topView.addView(makeParticlesView(context, 40, 0), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + BackupImageView imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(80)); + AvatarDrawable avatarDrawable = new AvatarDrawable(); + avatarDrawable.setPeerColor(chatInvite.color); + avatarDrawable.setText(chatInvite.title); + if (chatInvite.photo != null) { + TLRPC.PhotoSize photoSize = FileLoader.getClosestPhotoSizeWithSize(chatInvite.photo.sizes, dp(80)); + imageView.setImage(ImageLocation.getForPhoto(photoSize, chatInvite.photo), "80_80", avatarDrawable, chatInvite); + } else { + imageView.setImageDrawable(avatarDrawable); + } + + topView.addView(imageView, LayoutHelper.createFrame(80, 80, Gravity.CENTER)); + + Drawable starBg = context.getResources().getDrawable(R.drawable.star_small_outline); + starBg.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogBackground, resourcesProvider), PorterDuff.Mode.SRC_IN)); + Drawable starFg = context.getResources().getDrawable(R.drawable.star_small_inner); + + ImageView starBgView = new ImageView(context); + starBgView.setImageDrawable(starBg); + topView.addView(starBgView, LayoutHelper.createFrame(26, 26, Gravity.CENTER)); + starBgView.setTranslationX(dp(26)); + starBgView.setTranslationY(dp(26)); + starBgView.setScaleX(1.2f); + starBgView.setScaleY(1.2f); + + ImageView starFgView = new ImageView(context); + starFgView.setImageDrawable(starFg); + topView.addView(starFgView, LayoutHelper.createFrame(26, 26, Gravity.CENTER)); + starFgView.setTranslationX(dp(26)); + starFgView.setTranslationY(dp(26)); + + StarsBalanceView balanceView = new StarsBalanceView(context, currentAccount); + ScaleStateListAnimator.apply(balanceView); + balanceView.setOnClickListener(v -> { + if (balanceView.lastBalance <= 0) return; + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment != null) { + BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); + bottomSheetParams.transitionFromLeft = true; + bottomSheetParams.allowNestedScroll = false; + lastFragment.showAsSheet(new StarsIntroActivity(), bottomSheetParams); + } + }); + topView.addView(balanceView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.RIGHT, 0, 0, -8, 0)); + + linearLayout.addView(topView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 117, Gravity.FILL_HORIZONTAL)); + + TextView titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + titleView.setText(getString(R.string.StarsSubscribeTitle)); + titleView.setGravity(Gravity.CENTER); + linearLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 8, 0, 0)); + + TextView subtitleView = new TextView(context); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + if (chatInvite.subscription_pricing.period == StarsController.PERIOD_MONTHLY) { + subtitleView.setText(AndroidUtilities.replaceTags(formatPluralString("StarsSubscribeText", (int) chatInvite.subscription_pricing.amount, chatInvite.title))); + } else { + final String period = chatInvite.subscription_pricing.period == StarsController.PERIOD_5MINUTES ? "5 minutes" : "a minute"; + subtitleView.setText(AndroidUtilities.replaceTags(formatPluralString("StarsSubscribeTextTest", (int) chatInvite.subscription_pricing.amount, chatInvite.title, period))); + } + subtitleView.setMaxWidth(HintView2.cutInFancyHalf(subtitleView.getText(), subtitleView.getPaint())); + subtitleView.setGravity(Gravity.CENTER); + linearLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 6, 0, 22)); + + if (!TextUtils.isEmpty(chatInvite.about)) { + TextView aboutView = new TextView(context); + aboutView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + aboutView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + aboutView.setText(Emoji.replaceEmoji(chatInvite.about, aboutView.getPaint().getFontMetricsInt(), false)); + aboutView.setGravity(Gravity.CENTER); + linearLayout.addView(aboutView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 6, 0, 22)); + } + + ButtonWithCounterView button = new ButtonWithCounterView(context, resourcesProvider); + button.setText(getString(R.string.StarsSubscribeButton), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + + LinkSpanDrawable.LinksTextView infoTextView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + infoTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsSubscribeInfo), () -> { + Browser.openUrl(context, getString(R.string.StarsSubscribeInfoLink)); + })); + infoTextView.setGravity(Gravity.CENTER); + infoTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + infoTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + infoTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + linearLayout.addView(infoTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 14, 14, 14, 6)); + + b.setCustomView(linearLayout); + BottomSheet sheet = b.create(); + + button.setOnClickListener(v -> { + if (whenConfirmed != null) { + sheet.setCanDismissWithSwipe(false); + button.setLoading(true); + whenConfirmed.run(close -> { + if (close) { + sheet.dismiss(); + } else { + AndroidUtilities.runOnUIThread(() -> { + sheet.setCanDismissWithSwipe(false); + button.setLoading(false); + }, 400); + } + }); + } else { + sheet.dismiss(); + } + }); + sheet.setOnDismissListener(d -> { + if (whenDismissed != null) { + whenDismissed.run(); + } + }); + + sheet.fixNavigationBar(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (!AndroidUtilities.isTablet() && lastFragment != null && !AndroidUtilities.hasDialogOnTop(lastFragment)) { + sheet.makeAttached(lastFragment); + } + + sheet.show(); + return sheet; + } + public static class StarsNeededSheet extends BottomSheetWithRecyclerListView implements NotificationCenter.NotificationCenterDelegate { private final long starsNeeded; @@ -1599,6 +2035,14 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi @Override public void show() { + long balance = StarsController.getInstance(currentAccount).getBalance(); + if (balance >= starsNeeded) { + if (whenPurchased != null) { + whenPurchased.run(); + whenPurchased = null; + } + return; + } BaseFragment lastFragment = LaunchActivity.getLastFragment(); if (lastFragment instanceof ChatActivity) { ChatActivity chatActivity = (ChatActivity) lastFragment; @@ -1616,11 +2060,18 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starBalanceUpdated); } + public static final int TYPE_BOT = 0; + public static final int TYPE_SUBSCRIPTION_BUY = 1; + public static final int TYPE_SUBSCRIPTION_KEEP = 2; + public static final int TYPE_SUBSCRIPTION_REFULFIL = 3; + public static final int TYPE_LINK = 4; + public static final int TYPE_REACTIONS = 5; + public StarsNeededSheet( Context context, Theme.ResourcesProvider resourcesProvider, long starsNeeded, - String botName, + int type, String botName, Runnable whenPurchased ) { super(context, null, false, false, false, resourcesProvider); @@ -1651,9 +2102,34 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi headerView = new HeaderView(context, currentAccount, resourcesProvider); long balance = StarsController.getInstance(currentAccount).getBalance(); - headerView.titleView.setText(formatPluralString("StarsNeededTitle", (int) (starsNeeded - balance))); - headerView.subtitleView.setText(AndroidUtilities.replaceTags(formatString(R.string.StarsNeededText, botName))); - headerView.subtitleView.setMaxWidth(HintView2.cutInFancyHalf(headerView.subtitleView.getText(), headerView.subtitleView.getPaint())); + headerView.titleView.setText(formatPluralString("StarsNeededTitle", (int) Math.max(0, starsNeeded - balance))); + String stringRes; + if (type == TYPE_SUBSCRIPTION_BUY) { + stringRes = "StarsNeededTextBuySubscription"; + } else if (type == TYPE_SUBSCRIPTION_KEEP) { + stringRes = "StarsNeededTextKeepSubscription"; + } else if (type == TYPE_SUBSCRIPTION_REFULFIL) { + stringRes = "StarsNeededTextKeepSubscription"; + } else if (type == TYPE_LINK) { + stringRes = botName == null ? "StarsNeededTextLink" : "StarsNeededTextLink_" + botName.toLowerCase(); + if (LocaleController.nullable(LocaleController.getString(stringRes)) == null) { + stringRes = "StarsNeededTextLink"; + } + } else if (type == TYPE_REACTIONS) { + stringRes = "StarsNeededTextReactions"; + } else { + stringRes = "StarsNeededText"; + } + if (TextUtils.isEmpty(stringRes)) { + headerView.subtitleView.setText(""); + } else { + String str = LocaleController.nullable(formatString(stringRes, LocaleController.getStringResId(stringRes), botName)); + if (str == null) { + str = getString(stringRes); + } + headerView.subtitleView.setText(AndroidUtilities.replaceTags(str)); + headerView.subtitleView.setMaxWidth(HintView2.cutInFancyHalf(headerView.subtitleView.getText(), headerView.subtitleView.getPaint())); + } actionBar.setTitle(getTitle()); footerView = new FrameLayout(context); @@ -1707,7 +2183,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi if (option.stars < starsNeeded) { continue; } - if (option.collapsed && !expanded && shownNearest) { + if (option.extended && !expanded && shownNearest) { hidden++; continue; } @@ -1715,7 +2191,31 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi shownNearest = true; count++; } - if (count > 0) { + if (count < 3) { + items.clear(); + items.add(UItem.asCustom(headerView)); + items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + count = 0; + for (int id = 0; id < options.size(); ++id) { + TLRPC.TL_starsTopupOption option = options.get(id); + if (option.stars < starsNeeded) { + continue; + } + items.add(StarTierView.Factory.asStarTier(id, stars++, option)); + count++; + } + if (count == 0) { + for (int id = 0; id < options.size(); ++id) { + TLRPC.TL_starsTopupOption option = options.get(id); + items.add(StarTierView.Factory.asStarTier(id, stars++, option)); + count++; + } + if (!expanded) + items.add(ExpandView.Factory.asExpand(BUTTON_EXPAND, getString(expanded ? R.string.NotifyLessOptions : R.string.NotifyMoreOptions), !expanded).accent()); + } else { + expanded = true; + } + } else if (count > 0) { if (!expanded && hidden > 0) items.add(ExpandView.Factory.asExpand(BUTTON_EXPAND, getString(expanded ? R.string.NotifyLessOptions : R.string.NotifyMoreOptions), !expanded).accent()); } else { @@ -1748,8 +2248,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi StarsController.getInstance(currentAccount).buy(activity, (TLRPC.TL_starsTopupOption) item.object, (success, error) -> { if (getContext() == null) return; if (success) { - Drawable starDrawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); - BulletinFactory.of((FrameLayout) containerView, resourcesProvider).createSimpleBulletin(starDrawable, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); + BulletinFactory.of((FrameLayout) containerView, resourcesProvider).createSimpleBulletin(R.raw.stars_topup, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); fireworksOverlay.start(true); StarsController.getInstance(currentAccount).invalidateTransactions(true); } else if (error != null) { @@ -1827,6 +2326,261 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi } } + public static class GiftStarsSheet extends BottomSheetWithRecyclerListView implements NotificationCenter.NotificationCenterDelegate { + + private final HeaderView headerView; + private final FrameLayout footerView; + private final FireworksOverlay fireworksOverlay; + private final TLRPC.User user; + private final Runnable whenPurchased; + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.starGiftOptionsLoaded || id == NotificationCenter.starBalanceUpdated) { + if (adapter != null) { + adapter.update(true); + } + } + } + + @Override + public void show() { + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment instanceof ChatActivity) { + ChatActivity chatActivity = (ChatActivity) lastFragment; + if (chatActivity.isKeyboardVisible() && chatActivity.getChatActivityEnterView() != null) { + chatActivity.getChatActivityEnterView().closeKeyboard(); + } + } + super.show(); + } + + @Override + public void dismissInternal() { + super.dismissInternal(); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starGiftOptionsLoaded); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starBalanceUpdated); + } + + public GiftStarsSheet( + Context context, + Theme.ResourcesProvider resourcesProvider, + TLRPC.User user, + Runnable whenPurchased + ) { + super(context, null, false, false, false, resourcesProvider); + + this.user = user; + this.whenPurchased = whenPurchased; + topPadding = .2f; + + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starGiftOptionsLoaded); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starBalanceUpdated); + + fixNavigationBar(); + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + recyclerListView.setOnItemClickListener((view, position) -> { + if (adapter == null) return; + UItem item = adapter.getItem(position - 1); + if (item == null) return; + onItemClick(item, adapter); + }); + DefaultItemAnimator itemAnimator = new DefaultItemAnimator(); + itemAnimator.setSupportsChangeAnimations(false); + itemAnimator.setDelayAnimations(false); + itemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + itemAnimator.setDurations(350); + recyclerListView.setItemAnimator(itemAnimator); + setBackgroundColor(Theme.getColor(Theme.key_dialogBackgroundGray, resourcesProvider)); + + headerView = new HeaderView(context, currentAccount, resourcesProvider); + +// long balance = StarsController.getInstance(currentAccount).getBalance(); + headerView.titleView.setText(getString(R.string.GiftStarsTitle)); + headerView.subtitleView.setText( + TextUtils.concat( + AndroidUtilities.replaceTags(formatString(R.string.GiftStarsSubtitle, UserObject.getForcedFirstName(user))), + " ", + AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.GiftStarsSubtitleLinkName).replace(' ', ' '), () -> { + StarAppsSheet sheet = new StarAppsSheet(getContext()); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(attachedFragment) && attachedFragment != null) { + sheet.makeAttached(attachedFragment); + } + sheet.show(); + }), true) + ) + ); + headerView.subtitleView.setMaxWidth(HintView2.cutInFancyHalf(headerView.subtitleView.getText(), headerView.subtitleView.getPaint()) + 1); + actionBar.setTitle(getTitle()); + + AvatarDrawable avatarDrawable = new AvatarDrawable(); + avatarDrawable.setInfo(user); + headerView.avatarImageView.setForUserOrChat(user, avatarDrawable); + + footerView = new FrameLayout(context); + LinkSpanDrawable.LinksTextView footerTextView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + footerView.setPadding(0, dp(11), 0, dp(11)); + footerTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); + footerTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + footerTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + footerTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsTOS), () -> { + Browser.openUrl(getContext(), getString(R.string.StarsTOSLink)); + })); + footerTextView.setGravity(Gravity.CENTER); + footerTextView.setMaxWidth(HintView2.cutInFancyHalf(footerTextView.getText(), footerTextView.getPaint())); + footerView.addView(footerTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER)); + footerView.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); + + fireworksOverlay = new FireworksOverlay(getContext()); + containerView.addView(fireworksOverlay, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + if (adapter != null) { + adapter.update(false); + } + } + + @Override + protected CharSequence getTitle() { + if (headerView == null) return null; + return headerView.titleView.getText(); + } + + private UniversalAdapter adapter; + @Override + protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { + return adapter = new UniversalAdapter(recyclerListView, getContext(), currentAccount, 0, true, this::fillItems, resourcesProvider); + } + + private boolean expanded; + private final int BUTTON_EXPAND = -1; + + public void fillItems(ArrayList items, UniversalAdapter adapter) { + items.add(UItem.asCustom(headerView)); + items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + int stars = 1; + ArrayList options = StarsController.getInstance(currentAccount).getGiftOptions(); + if (options != null && !options.isEmpty()) { + int hidden = 0; + for (int id = 0; id < options.size(); ++id) { + TLRPC.TL_starsGiftOption option = options.get(id); + if (!expanded && option.extended) { + hidden++; + continue; + } + items.add(StarTierView.Factory.asStarTier(id, stars++, option)); + } + if (!expanded && hidden > 0) { + items.add(ExpandView.Factory.asExpand(BUTTON_EXPAND, getString(expanded ? R.string.NotifyLessOptions : R.string.NotifyMoreOptions), !expanded).accent()); + } + } else { + items.add(UItem.asFlicker(FlickerLoadingView.STAR_TIER)); + items.add(UItem.asFlicker(FlickerLoadingView.STAR_TIER)); + items.add(UItem.asFlicker(FlickerLoadingView.STAR_TIER)); + } + items.add(UItem.asCustom(footerView)); + } + + public void onItemClick(UItem item, UniversalAdapter adapter) { + if (item.id == BUTTON_EXPAND) { + expanded = !expanded; + adapter.update(true); + recyclerListView.smoothScrollBy(0, dp(200), CubicBezierInterpolator.EASE_OUT); + } else if (item.instanceOf(StarTierView.Factory.class)) { + if (item.object instanceof TLRPC.TL_starsGiftOption) { + Activity activity = AndroidUtilities.findActivity(getContext()); + if (activity == null) { + activity = LaunchActivity.instance; + } + if (activity == null) { + return; + } + final long userId = user.id; + StarsController.getInstance(currentAccount).buyGift(activity, (TLRPC.TL_starsGiftOption) item.object, userId, (success, error) -> { + if (getContext() == null) return; + if ((success || error != null) && whenPurchased != null) { + whenPurchased.run(); + } + dismiss(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + FireworksOverlay fireworksOverlay = LaunchActivity.instance.getFireworksOverlay(); + if (lastFragment == null) return; + if (success) { + BulletinFactory.of(lastFragment) + .createSimpleBulletin( + R.raw.stars_send, + getString(R.string.StarsGiftSentPopup), + AndroidUtilities.replaceTags(formatPluralString("StarsGiftSentPopupInfo", (int) item.longValue, UserObject.getForcedFirstName(user))), + getString(R.string.ViewInChat), + () -> { + BaseFragment lastFragment2 = LaunchActivity.getSafeLastFragment(); + if (lastFragment2 != null) { + lastFragment2.presentFragment(ChatActivity.of(userId)); + } + } + ) + .setDuration(Bulletin.DURATION_PROLONG) + .show(true); + if (fireworksOverlay != null) { + fireworksOverlay.start(true); + } + StarsController.getInstance(currentAccount).invalidateTransactions(true); + } else if (error != null) { + BulletinFactory.of(lastFragment).createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, error)).show(); + } + }); + } + } + } + + @Override + public void dismiss() { + super.dismiss(); +// if (headerView != null) { +// headerView.iconView.setPaused(true); +// } + } + + public static class HeaderView extends LinearLayout { + private final FrameLayout topView; + public final StarParticlesView particlesView; + public final BackupImageView avatarImageView; + public final TextView titleView; + public final LinkSpanDrawable.LinksTextView subtitleView; + + public HeaderView(Context context, int currentAccount, Theme.ResourcesProvider resourcesProvider) { + super(context); + + setOrientation(VERTICAL); + topView = new FrameLayout(context); + topView.setClipChildren(false); + topView.setClipToPadding(false); + + particlesView = makeParticlesView(context, 70, 0); + topView.addView(particlesView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + avatarImageView = new BackupImageView(context); + avatarImageView.setRoundRadius(dp(50)); + topView.addView(avatarImageView, LayoutHelper.createFrame(100, 100, Gravity.CENTER, 0, 32, 0, 24)); + + addView(topView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 150)); + + titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + titleView.setGravity(Gravity.CENTER); + addView(titleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 2, 0, 0)); + + subtitleView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + subtitleView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + subtitleView.setGravity(Gravity.CENTER); + addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 9, 0, 18)); + } + } + } + public static SpannableStringBuilder replaceStars(CharSequence cs) { return replaceStars(cs, 1.13f); } @@ -1851,7 +2605,6 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi return ssb; } - public static SpannableStringBuilder replaceStars(CharSequence cs, ColoredImageSpan[] spanRef) { if (cs == null) return null; SpannableStringBuilder ssb; @@ -1880,7 +2633,6 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi return ssb; } - public static SpannableStringBuilder replaceStarsWithPlain(CharSequence cs, float scale) { if (cs == null) return null; SpannableStringBuilder ssb; @@ -1902,10 +2654,28 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi return ssb; } - public static CharSequence getTransactionTitle(boolean bot, TLRPC.StarsTransaction t) { + public static CharSequence getTransactionTitle(int currentAccount, boolean bot, TLRPC.StarsTransaction t) { if (!t.extended_media.isEmpty()) { return getString(R.string.StarMediaPurchase); } + if (t.subscription) { + if (t.subscription_period == StarsController.PERIOD_MONTHLY) { + return getString(R.string.StarSubscriptionPurchase); + } + if (t.subscription_period == StarsController.PERIOD_5MINUTES) { + return "5-minute subscription fee"; + } + if (t.subscription_period == StarsController.PERIOD_MINUTE) { + return "Minute subscription fee"; + } + } + if (t.gift) { + if (t.sent_by != null) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(DialogObject.getPeerDialogId(t.sent_by)); + return getString(UserObject.isUserSelf(user) ? R.string.StarsGiftSent : R.string.StarsGiftReceived); + } + return getString(R.string.StarsGiftReceived); + } if (t.title != null) { return t.title; } @@ -1926,6 +2696,36 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi } } + public static BottomSheet showTransactionSheet(Context context, int currentAccount, int date, TLRPC.Peer sent_by, TLRPC.Peer received_by, TLRPC.TL_messageActionGiftStars action, Theme.ResourcesProvider resourcesProvider) { + TLRPC.StarsTransaction t = new TLRPC.StarsTransaction(); + t.title = null; + t.description = null; + t.photo = null; + t.peer = new TLRPC.TL_starsTransactionPeer(); + t.peer.peer = sent_by; + t.date = date; + t.stars = action.stars; + t.id = action.transaction_id; + t.gift = true; + t.sent_by = sent_by; + t.received_by = received_by; + return showTransactionSheet(context, false, 0, currentAccount, t, resourcesProvider); + } + + public static BottomSheet showTransactionSheet(Context context, int currentAccount, int date, TLRPC.TL_messageActionPaymentRefunded action, Theme.ResourcesProvider resourcesProvider) { + TLRPC.StarsTransaction t = new TLRPC.StarsTransaction(); + t.title = null; + t.description = null; + t.photo = null; + t.peer = new TLRPC.TL_starsTransactionPeer(); + t.peer.peer = action.peer; + t.date = date; + t.stars = action.total_amount; + t.id = action.charge.id; + t.refund = true; + return showTransactionSheet(context, false, 0, currentAccount, t, resourcesProvider); + } + public static BottomSheet showTransactionSheet(Context context, boolean bot, int currentAccount, TLRPC.TL_payments_paymentReceiptStars receipt, Theme.ResourcesProvider resourcesProvider) { TLRPC.StarsTransaction t = new TLRPC.StarsTransaction(); t.title = receipt.title; @@ -1934,7 +2734,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi t.peer = new TLRPC.TL_starsTransactionPeer(); t.peer.peer = MessagesController.getInstance(currentAccount).getPeer(receipt.bot_id); t.date = receipt.date; - t.stars = receipt.total_amount; + t.stars = -receipt.total_amount; t.id = receipt.transaction_id; return showTransactionSheet(context, bot, 0, currentAccount, t, resourcesProvider); } @@ -1948,10 +2748,82 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi LinearLayout linearLayout = new LinearLayout(context); linearLayout.setOrientation(LinearLayout.VERTICAL); - linearLayout.setPadding(dp(16), dp(16), dp(16), dp(8)); + linearLayout.setPadding(dp(16), dp(transaction.gift ? 0 : 20), dp(16), dp(8)); + linearLayout.setClipChildren(false); + linearLayout.setClipToPadding(false); BackupImageView imageView = new BackupImageView(context); - if (!transaction.extended_media.isEmpty()) { + if (transaction.gift) { + final boolean[] played = new boolean[1]; + Runnable setImage = () -> { + TLRPC.TL_messages_stickerSet set; + TLRPC.Document document = null; + + String packName = UserConfig.getInstance(currentAccount).premiumGiftsStickerPack; + if (packName == null) { + MediaDataController.getInstance(currentAccount).checkPremiumGiftStickers(); + return; + } + set = MediaDataController.getInstance(currentAccount).getStickerSetByName(packName); + if (set == null) { + set = MediaDataController.getInstance(currentAccount).getStickerSetByEmojiOrName(packName); + } + if (set != null) { + String emoji; + if (transaction.stars <= 1000) { + emoji = "2⃣"; + } else if (transaction.stars < 2500) { + emoji = "3⃣"; + } else { + emoji = "4⃣"; + } + for (int i = 0; i < set.packs.size(); ++i) { + TLRPC.TL_stickerPack pack = set.packs.get(i); + if (TextUtils.equals(pack.emoticon, emoji) && !pack.documents.isEmpty()) { + long documentId = pack.documents.get(0); + for (int j = 0; j < set.documents.size(); ++j) { + TLRPC.Document d = set.documents.get(j); + if (d != null && d.id == documentId) { + document = d; + break; + } + } + break; + } + } + if (document == null && !set.documents.isEmpty()) { + document = set.documents.get(0); + } + } + + final ImageReceiver imageReceiver = imageView.getImageReceiver(); + if (document != null) { + imageReceiver.setAllowStartLottieAnimation(true); + imageReceiver.setDelegate(new ImageReceiver.ImageReceiverDelegate() { + @Override + public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb, boolean memCache) { + if (set) { + RLottieDrawable drawable = imageReceiver.getLottieAnimation(); + if (drawable != null && !played[0]) { + drawable.setCurrentFrame(0, false); + AndroidUtilities.runOnUIThread(drawable::restart); + played[0] = true; + } + } + } + }); + SvgHelper.SvgDrawable svgThumb = DocumentObject.getSvgThumb(document, Theme.key_windowBackgroundGray, 0.3f); + imageReceiver.setAutoRepeat(0); + imageReceiver.setImage(ImageLocation.getForDocument(document), String.format(Locale.US, "%d_%d_nr", 160, 160), svgThumb, "tgs", set, 1); + } else { + MediaDataController.getInstance(currentAccount).loadStickersByEmojiOrName(packName, false, set == null); + } + }; + setImage.run(); + NotificationCenter.getInstance(currentAccount).listen(imageView, NotificationCenter.didUpdatePremiumGiftStickers, args -> setImage.run()); + NotificationCenter.getInstance(currentAccount).listen(imageView, NotificationCenter.diceStickersDidLoad, args -> setImage.run()); + linearLayout.addView(imageView, LayoutHelper.createLinear(160, 160, Gravity.CENTER, 0, -8, 0, 10)); + } else if (!transaction.extended_media.isEmpty()) { imageView.setRoundRadius(dp(30)); TLRPC.MessageMedia media = transaction.extended_media.get(0); ImageLocation location = null; @@ -2025,14 +2897,14 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi imageView.setImage(ImageLocation.getForWebFile(WebFile.createWithWebDocument(transaction.photo)), "100_100", null, 0, null); } else { imageView.setRoundRadius(dp(50)); - final long did = DialogObject.getPeerDialogId(transaction.peer.peer); + final long did = transaction.subscription && bot ? dialogId : DialogObject.getPeerDialogId(transaction.peer.peer); AvatarDrawable avatarDrawable = new AvatarDrawable(); if (did >= 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); avatarDrawable.setInfo(user); imageView.setForUserOrChat(user, avatarDrawable); } else { - TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(did); + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); avatarDrawable.setInfo(chat); imageView.setForUserOrChat(chat, avatarDrawable); } @@ -2062,15 +2934,15 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); textView.setTypeface(AndroidUtilities.bold()); textView.setGravity(Gravity.CENTER); - textView.setText(getTransactionTitle(bot, transaction)); + textView.setText(getTransactionTitle(currentAccount, bot, transaction)); linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); textView = new TextView(context); - textView.setTextColor(Theme.getColor(transaction.stars >= 0 ? Theme.key_color_green : Theme.key_color_red, resourcesProvider)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); textView.setTypeface(AndroidUtilities.bold()); textView.setGravity(Gravity.CENTER); - textView.setText(replaceStarsWithPlain((transaction.stars >= 0 ? "+" : "-") + LocaleController.formatNumber((int) Math.abs(transaction.stars), ' ') + " ⭐️", .8f)); + textView.setTextColor(Theme.getColor(transaction.stars >= 0 ? Theme.key_color_green : Theme.key_color_red, resourcesProvider)); + textView.setText(replaceStarsWithPlain((transaction.stars >= 0 ? "+" : "-") + LocaleController.formatNumber((int) Math.abs(transaction.stars), ' ') + " ⭐️", .8f)); SpannableStringBuilder s = new SpannableStringBuilder(textView.getText()); if (transaction.refund) { appendStatus(s, textView, getString(R.string.StarsRefunded)); @@ -2084,7 +2956,35 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi textView.setText(s); linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); - if (transaction.description != null && transaction.extended_media.isEmpty()) { + if (transaction.gift) { + final TLRPC.User user = transaction.sent_by == null ? null : MessagesController.getInstance(currentAccount).getUser(DialogObject.getPeerDialogId(transaction.sent_by)); + final TLRPC.User received = transaction.sent_by == null ? null : MessagesController.getInstance(currentAccount).getUser(DialogObject.getPeerDialogId(transaction.received_by)); + final boolean self = UserObject.isUserSelf(user); + + if (self) { + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + textView.setText(replaceStarsWithPlain(LocaleController.formatNumber((int) Math.abs(transaction.stars), ' ') + " ⭐️", .8f)); + } + + textView = new LinkSpanDrawable.LinksTextView(context); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + textView.setGravity(Gravity.CENTER); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + textView.setText(TextUtils.concat( + AndroidUtilities.replaceTags(self ? formatString(R.string.ActionGiftStarsSubtitle, UserObject.getForcedFirstName(received)) : getString(R.string.ActionGiftStarsSubtitleYou)), + " ", + AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.GiftStarsSubtitleLinkName).replace(' ', ' '), () -> { + StarAppsSheet sheet1 = new StarAppsSheet(context); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(sheet[0].attachedFragment) && sheet[0] != null && sheet[0].attachedFragment != null) { + sheet1.makeAttached(sheet[0].attachedFragment); + } + sheet1.show(); + }), true) + )); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + } else if (transaction.description != null && transaction.extended_media.isEmpty()) { textView = new TextView(context); textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); @@ -2102,16 +3002,27 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); CharSequence username; boolean deleted = false; - if (did >= 0) { + final boolean unknown; + if (UserObject.isService(did)) { + deleted = false; + unknown = true; + username = getString(R.string.StarsTransactionUnknown); + CombinedDrawable iconDrawable = getPlatformDrawable("fragment"); + iconDrawable.setIconSize(dp(16), dp(16)); + avatarSpan.setImageDrawable(iconDrawable); + } else if (did >= 0) { + unknown = false; TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); deleted = user == null; username = UserObject.getUserName(user); avatarSpan.setUser(user); } else { + unknown = false; TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); deleted = chat == null; username = chat == null ? "" : chat.title; @@ -2123,9 +3034,13 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi @Override public void onClick(@NonNull View widget) { sheet[0].dismiss(); - BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); - if (lastFragment != null) { - lastFragment.presentFragment(ChatActivity.of(did)); + if (unknown) { + Browser.openUrl(context, getString(R.string.StarsTransactionUnknownLink)); + } else { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.presentFragment(ChatActivity.of(did)); + } } } @@ -2136,10 +3051,42 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ssb); if (!deleted) { - tableView.addRowUnpadded(getString(R.string.StarsTransactionRecipient), textView); + tableView.addRowUnpadded(getString(transaction.subscription && !bot ? R.string.StarSubscriptionTo : R.string.StarsTransactionRecipient), textView); } } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerFragment) { - tableView.addRow(getString(R.string.StarsTransactionSource), getString(R.string.Fragment)); + if (transaction.gift) { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setPadding(dp(12.66f), dp(9.33f), dp(12.66f), dp(9.33f)); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); + CharSequence username = getString(R.string.StarsTransactionUnknown); + CombinedDrawable iconDrawable = getPlatformDrawable("fragment", 24); + iconDrawable.setIconSize(dp(16), dp(16)); + avatarSpan.setImageDrawable(iconDrawable); + SpannableStringBuilder ssb = new SpannableStringBuilder("x " + username); + ssb.setSpan(avatarSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + sheet[0].dismiss(); + Browser.openUrl(context, getString(R.string.StarsTransactionUnknownLink)); + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setUnderlineText(false); + } + }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(ssb); + tableView.addRowUnpadded(getString(R.string.StarsTransactionRecipient), textView); + } else { + tableView.addRow(getString(R.string.StarsTransactionSource), getString(R.string.Fragment)); + } } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerAppStore) { tableView.addRow(getString(R.string.StarsTransactionSource), getString(R.string.AppStore)); } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerPlayMarket) { @@ -2219,7 +3166,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi textView.setEllipsize(TextUtils.TruncateAt.END); textView.setText(ssb); textView.setOnClickListener(v -> open.run()); - tableView.addRowUnpadded(getString(R.string.StarsTransactionMedia), textView); + tableView.addRowUnpadded(getString(transaction.reaction ? R.string.StarsTransactionMessage : R.string.StarsTransactionMedia), textView); } } @@ -2276,6 +3223,7 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi b.setCustomView(linearLayout); sheet[0] = b.create(); + sheet[0].useBackgroundTopPadding = false; if ((transaction.flags & 32) != 0) { button.setOnClickListener(v -> { Browser.openUrl(context, transaction.transaction_url); @@ -2287,6 +3235,318 @@ public class StarsIntroActivity extends GradientHeaderActivity implements Notifi } sheet[0].fixNavigationBar(); + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(fragment)) { + sheet[0].makeAttached(fragment); + } + sheet[0].show(); + return sheet[0]; + } + + public static BottomSheet showSubscriptionSheet(Context context, int currentAccount, TLRPC.StarsSubscription subscription, Theme.ResourcesProvider resourcesProvider) { + if (subscription == null || context == null) + return null; + + BottomSheet.Builder b = new BottomSheet.Builder(context, false, resourcesProvider); + BottomSheet[] sheet = new BottomSheet[1]; + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(dp(16), dp(20), dp(16), dp(4)); + linearLayout.setClipChildren(false); + linearLayout.setClipToPadding(false); + + FrameLayout topView = new FrameLayout(context); + linearLayout.addView(topView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL, 0, 0, 0, 10)); + + BackupImageView imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(50)); + final long did = DialogObject.getPeerDialogId(subscription.peer); + AvatarDrawable avatarDrawable = new AvatarDrawable(); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + avatarDrawable.setInfo(user); + imageView.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + avatarDrawable.setInfo(chat); + imageView.setForUserOrChat(chat, avatarDrawable); + } + topView.addView(imageView, LayoutHelper.createFrame(100, 100, Gravity.CENTER)); + + Drawable starBg = context.getResources().getDrawable(R.drawable.star_small_outline); + starBg.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogBackground, resourcesProvider), PorterDuff.Mode.SRC_IN)); + Drawable starFg = context.getResources().getDrawable(R.drawable.star_small_inner); + + ImageView starBgView = new ImageView(context); + starBgView.setImageDrawable(starBg); + topView.addView(starBgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starBgView.setTranslationX(dp(34)); + starBgView.setTranslationY(dp(35)); + starBgView.setScaleX(1.1f); + starBgView.setScaleY(1.1f); + + ImageView starFgView = new ImageView(context); + starFgView.setImageDrawable(starFg); + topView.addView(starFgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starFgView.setTranslationX(dp(34)); + starFgView.setTranslationY(dp(35)); + + TextView textView = new TextView(context); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + textView.setTypeface(AndroidUtilities.bold()); + textView.setGravity(Gravity.CENTER); + textView.setText(getString(R.string.StarsSubscriptionTitle)); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + if (subscription.pricing.period == StarsController.PERIOD_MONTHLY) { + textView.setText(replaceStarsWithPlain(formatString(R.string.StarsSubscriptionPrice, subscription.pricing.amount), .8f)); + } else { + final String period = subscription.pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + textView.setText(replaceStarsWithPlain(formatString(R.string.StarsSubscriptionPrice, subscription.pricing.amount, period), .8f)); + } + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + TableView tableView = new TableView(context, resourcesProvider); + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setPadding(dp(12.66f), dp(9.33f), dp(12.66f), dp(9.33f)); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); + CharSequence username; + boolean deleted = false; + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + deleted = chat == null; + username = chat == null ? "" : chat.title; + avatarSpan.setChat(chat); + SpannableStringBuilder ssb = new SpannableStringBuilder("x " + username); + ssb.setSpan(avatarSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + sheet[0].dismiss(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.presentFragment(ChatActivity.of(did)); + } + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setUnderlineText(false); + } + }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(ssb); + if (!deleted) { + tableView.addRowUnpadded(getString(R.string.StarsSubscriptionChannel), textView); + } + + tableView.addRow( + getString(R.string.StarsSubscriptionSince), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date((subscription.until_date - subscription.pricing.period) * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date((subscription.until_date - subscription.pricing.period) * 1000L))) + ); + final long now = ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + tableView.addRow( + getString(subscription.canceled ? R.string.StarsSubscriptionUntilExpires : now > subscription.until_date ? R.string.StarsSubscriptionUntilExpired : R.string.StarsSubscriptionUntilRenews), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date(subscription.until_date * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date(subscription.until_date * 1000L))) + ); + linearLayout.addView(tableView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 17, 0, 0)); + + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsTransactionTOS), () -> { + Browser.openUrl(context, getString(R.string.StarsTOSLink)); + })); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 14, 15, 14, 7)); + + if (now < subscription.until_date) { + if (subscription.can_refulfill) { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(formatString(R.string.StarsSubscriptionRefulfillInfo, LocaleController.formatDateChat(subscription.until_date))); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionRefulfill), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + StarsController c = StarsController.getInstance(currentAccount); + final Runnable refulfil = () -> { + button.setLoading(true); + TLRPC.TL_fulfillStarsSubscription req = new TLRPC.TL_fulfillStarsSubscription(); + req.subscription_id = subscription.id; + req.peer = new TLRPC.TL_inputPeerSelf(); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (sheet[0] != null) { + sheet[0].dismiss(); + } + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); + + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + lastFragment.presentFragment(ChatActivity.of(did)); + })); + }; + if (c.balance < subscription.pricing.amount) { + new StarsNeededSheet(context, resourcesProvider, subscription.pricing.amount, StarsNeededSheet.TYPE_SUBSCRIPTION_KEEP, chat == null ? "" : chat.title, refulfil).show(); + } else { + refulfil.run(); + } + }); + } else if (subscription.canceled) { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(getString(R.string.StarsSubscriptionCancelledText)); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + if (subscription.chat_invite_hash != null) { + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionRenew), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + button.setLoading(true); + TLRPC.TL_changeStarsSubscription req = new TLRPC.TL_changeStarsSubscription(); + req.canceled = false; + req.peer = new TLRPC.TL_inputPeerSelf(); + req.subscription_id = subscription.id; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (sheet[0] != null) { + sheet[0].dismiss(); + } + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); + + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + BulletinFactory.of(fragment).createUsersBulletin(Collections.singletonList(chat), getString(R.string.StarsSubscriptionRenewedToast), AndroidUtilities.replaceTags(formatString(R.string.StarsSubscriptionRenewedToastText, chat == null ? "" : chat.title))).show(false); + } + })); + }); + } + } else { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(formatString(R.string.StarsSubscriptionCancelInfo, LocaleController.formatDateChat(subscription.until_date))); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + ButtonWithCounterView button = new ButtonWithCounterView(context, false, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionCancel), false); + button.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + button.setLoading(true); + TLRPC.TL_changeStarsSubscription req = new TLRPC.TL_changeStarsSubscription(); + req.canceled = true; + req.peer = new TLRPC.TL_inputPeerSelf(); + req.subscription_id = subscription.id; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (sheet[0] != null) { + sheet[0].dismiss(); + } + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); + + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + BulletinFactory.of(fragment).createUsersBulletin(Collections.singletonList(chat), getString(R.string.StarsSubscriptionCancelledToast), AndroidUtilities.replaceTags(formatString(R.string.StarsSubscriptionCancelledToastText, LocaleController.formatDateChat(subscription.until_date)))).show(false); + } + })); + }); + } + } else { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(formatString(R.string.StarsSubscriptionExpiredInfo, LocaleController.formatDateChat(subscription.until_date))); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + if (subscription.chat_invite_hash != null) { + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionAgain), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + button.setLoading(true); + TLRPC.TL_messages_checkChatInvite req = new TLRPC.TL_messages_checkChatInvite(); + req.hash = subscription.chat_invite_hash; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (res instanceof TLRPC.ChatInvite) { + TLRPC.ChatInvite invite = (TLRPC.ChatInvite) res; + if (invite.subscription_pricing == null) { // wtf + BulletinFactory.of(sheet[0].topBulletinContainer, resourcesProvider).createErrorBulletin(getString(R.string.UnknownError)).show(false); + return; + } + final long stars = invite.subscription_pricing.amount; + StarsController.getInstance(currentAccount).subscribeTo(req.hash, invite, (status, dialogId) -> { + if ("paid".equals(status) && dialogId != 0) { + AndroidUtilities.runOnUIThread(() -> { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + BaseFragment chatActivity = ChatActivity.of(dialogId); + lastFragment.presentFragment(chatActivity); + + TLRPC.Chat newChat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + if (newChat != null) { + AndroidUtilities.runOnUIThread(() -> { + BulletinFactory.of(chatActivity).createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsSubscriptionCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsSubscriptionCompletedText", (int) stars, newChat.title))).show(true); + }, 250); + } + }); + } + }); + } else { + BulletinFactory.of(sheet[0].topBulletinContainer, resourcesProvider).createErrorBulletin(LocaleController.getString(R.string.LinkHashExpired)).show(false); + } + })); + }); + } + } + + b.setCustomView(linearLayout); + sheet[0] = b.create(); + sheet[0].useBackgroundTopPadding = false; + + sheet[0].fixNavigationBar(); + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(fragment)) { + sheet[0].makeAttached(fragment); + } sheet[0].show(); return sheet[0]; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java new file mode 100644 index 000000000..fc76c1061 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java @@ -0,0 +1,1400 @@ +package org.telegram.ui.Stars; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.AndroidUtilities.rectTmp; +import static org.telegram.messenger.LocaleController.getString; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.LinearGradient; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.Log; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.animation.Interpolator; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.common.collect.Lists; +import com.google.zxing.common.detector.MathUtils; + +import org.checkerframework.checker.units.qual.A; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.DialogObject; +import org.telegram.messenger.ImageReceiver; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.MessagesStorage; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.browser.Browser; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheet; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.ChatMessageCell; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; +import org.telegram.ui.Components.AvatarDrawable; +import org.telegram.ui.Components.ButtonBounce; +import org.telegram.ui.Components.CheckBox2; +import org.telegram.ui.Components.ColoredImageSpan; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.LinkSpanDrawable; +import org.telegram.ui.Components.Premium.GLIcon.GLIconRenderer; +import org.telegram.ui.Components.Premium.GLIcon.GLIconTextureView; +import org.telegram.ui.Components.Premium.GLIcon.Icon3D; +import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; +import org.telegram.ui.Components.ScaleStateListAnimator; +import org.telegram.ui.Components.Text; +import org.telegram.ui.Components.WallpaperCheckBoxView; +import org.telegram.ui.LaunchActivity; +import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; + +public class StarsReactionsSheet extends BottomSheet { + + private final Theme.ResourcesProvider resourcesProvider; + private final int currentAccount; + + private final LinearLayout layout; + private final FrameLayout topLayout; + private final StarsSlider slider; + private final TextView titleView; + private final StarsIntroActivity.StarsBalanceView balanceView; + private final TextView statusView; + private final ButtonWithCounterView buttonView; + @Nullable + private final View separatorView; + @Nullable + private final TopSendersView topSendersView; + + public boolean anonymous; + private final View checkSeparatorView; + private final LinearLayout checkLayout; + private final CheckBox2 checkBox; + private final TextView checkTextView; + + private final GLIconTextureView icon3dView; + + private final MessageObject messageObject; + private final ArrayList reactors; + + public StarsReactionsSheet( + Context context, + int currentAccount, + long dialogId, + ChatActivity chatActivity, + MessageObject messageObject, + ArrayList reactors, + Theme.ResourcesProvider resourcesProvider + ) { + super(context, false, resourcesProvider); + + this.resourcesProvider = resourcesProvider; + this.currentAccount = currentAccount; + this.messageObject = messageObject; + this.reactors = reactors; + + TLRPC.MessageReactor me = null; + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + if (reactors != null) { + for (TLRPC.MessageReactor reactor : reactors) { + long reactorDialogId = DialogObject.getPeerDialogId(reactor.peer_id); + if (reactor.anonymous && reactor.my) { + reactorDialogId = selfId; + } + if (reactor.my || reactorDialogId == selfId) { + me = reactor; + } + } + } + final boolean withTopSenders = reactors != null && !reactors.isEmpty(); + anonymous = StarsController.getInstance(currentAccount).arePaidReactionsAnonymous(messageObject); + + fixNavigationBar(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); + + layout = new LinearLayout(context); + layout.setOrientation(LinearLayout.VERTICAL); + + topLayout = new FrameLayout(context); + layout.addView(topLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + slider = new StarsSlider(context) { + @Override + public void onValueChanged(int value) { + updateSenders(value); + if (buttonView != null) { + buttonView.setText(StarsIntroActivity.replaceStars(LocaleController.formatString(R.string.StarsReactionSend, LocaleController.formatNumber(value, ',')), starRef), true); + } + } + }; + int[] steps_arr = new int[] { 1, 50, 100, /*250,*/ 500, 1_000, 2_000, 5_000, 7_500, 10_000 }; + final long max = MessagesController.getInstance(currentAccount).starsPaidReactionAmountMax; + ArrayList steps = new ArrayList<>(); + for (int i = 0; i < steps_arr.length; ++i) { + if (steps_arr[i] > max) { + steps.add((int) max); + break; + } + steps.add(steps_arr[i]); + if (steps_arr[i] == max) break; + } + steps_arr = new int[ steps.size() ]; + for (int i = 0; i < steps.size(); ++i) steps_arr[i] = steps.get(i); + slider.setSteps(100, steps_arr); + topLayout.addView(slider, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + titleView = new TextView(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(ActionBar.getCurrentActionBarHeight(), MeasureSpec.EXACTLY)); + } + }; + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + titleView.setText(getString(R.string.StarsReactionTitle)); + titleView.setGravity(Gravity.CENTER_VERTICAL); + titleView.setTypeface(AndroidUtilities.bold()); + topLayout.addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 22, 0, 22,0)); + + balanceView = new StarsIntroActivity.StarsBalanceView(context, currentAccount); + ScaleStateListAnimator.apply(balanceView); + balanceView.setOnClickListener(v -> { + dismiss(); + chatActivity.presentFragment(new StarsIntroActivity() { + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + if (chatActivity.isFullyVisible) { + StarsReactionsSheet.this.show(); + } + } + }); + }); + topLayout.addView(balanceView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.RIGHT, 6, 0, 6, 0)); + + LinearLayout topLayoutTextLayout = new LinearLayout(context); + topLayoutTextLayout.setOrientation(LinearLayout.VERTICAL); + topLayout.addView(topLayoutTextLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 135 + 44, 0, 15)); + + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + statusView = new TextView(context); + statusView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + statusView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + statusView.setGravity(Gravity.CENTER); + statusView.setSingleLine(false); + statusView.setMaxLines(3); + statusView.setText(AndroidUtilities.replaceTags(me != null ? LocaleController.formatPluralStringComma("StarsReactionTextSent", me.count) : LocaleController.formatString(R.string.StarsReactionText, chat == null ? "" : chat.title))); + topLayoutTextLayout.addView(statusView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 40, 0, 40, 0)); + + if (withTopSenders) { + separatorView = new View(context) { + private final LinearGradient gradient = new LinearGradient(0, 0, 255, 0, new int[]{0xFFEEAC0D, 0xFFF9D316}, new float[]{0, 1}, Shader.TileMode.CLAMP); + private final Matrix gradientMatrix = new Matrix(); + private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint separatorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Text text = new Text(getString(R.string.StarsReactionTopSenders), 14.16f, AndroidUtilities.bold()); + + @Override + public void dispatchDraw(Canvas canvas) { + gradientMatrix.reset(); + gradientMatrix.postTranslate(dp(14), 0); + gradientMatrix.postScale((getWidth() - dp(14 * 2)) / 255f, 1f); + gradient.setLocalMatrix(gradientMatrix); + backgroundPaint.setShader(gradient); + + final float textWidth = text.getCurrentWidth() + dp(15 + 15); + + separatorPaint.setColor(Theme.getColor(Theme.key_divider, resourcesProvider)); + canvas.drawRect(dp(24), getHeight() / 2f - 1, (getWidth() - textWidth) / 2f - dp(8), getHeight() / 2f, separatorPaint); + canvas.drawRect((getWidth() + textWidth) / 2f + dp(8), getHeight() / 2f - 1, getWidth() - dp(24), getHeight() / 2f, separatorPaint); + + AndroidUtilities.rectTmp.set((getWidth() - textWidth) / 2f, 0, (getWidth() + textWidth) / 2f, getHeight()); + canvas.drawRoundRect(AndroidUtilities.rectTmp, getHeight() / 2f, getHeight() / 2f, backgroundPaint); + text.draw(canvas, (getWidth() - text.getCurrentWidth()) / 2f, getHeight() / 2f, 0xFFFFFFFF, 1f); + } + }; + topLayoutTextLayout.addView(separatorView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 30, Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 20, 0, 0)); + + topSendersView = new TopSendersView(context); + topSendersView.setOnSenderClickListener(senderDialogId -> { + Bundle args = new Bundle(); + args.putLong("user_id", senderDialogId); + if (senderDialogId == UserConfig.getInstance(currentAccount).getClientUserId()) { + args.putBoolean("my_profile", true); + } + chatActivity.presentFragment(new ProfileActivity(args) { + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + StarsReactionsSheet.this.show(); + } + }); + dismiss(); + }); + layout.addView(topSendersView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 110)); + + checkSeparatorView = new View(context); + checkSeparatorView.setBackgroundColor(Theme.getColor(Theme.key_divider, resourcesProvider)); + layout.addView(checkSeparatorView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 1.0f / AndroidUtilities.density, Gravity.FILL_HORIZONTAL, 24, 0, 24, 0)); + } else { + separatorView = null; + topSendersView = null; + checkSeparatorView = null; + } + + checkBox = new CheckBox2(context, 21, resourcesProvider); + checkBox.setColor(Theme.key_radioBackgroundChecked, Theme.key_checkboxDisabled, Theme.key_checkboxCheck); + checkBox.setDrawUnchecked(true); + checkBox.setChecked(!anonymous, false); + if (topSendersView != null) { + topSendersView.setMyselfAsAnonymous(anonymous); + } + checkBox.setDrawBackgroundAsArc(10); + + checkTextView = new TextView(context); + checkTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + checkTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + checkTextView.setText(LocaleController.getString(R.string.StarsReactionShowMeInTopSenders)); + + checkLayout = new LinearLayout(context); + checkLayout.setOrientation(LinearLayout.HORIZONTAL); + checkLayout.setPadding(dp(12), dp(8), dp(12), dp(8)); + checkLayout.addView(checkBox, LayoutHelper.createLinear(21, 21, Gravity.CENTER_VERTICAL, 0, 0, 9, 0)); + checkLayout.addView(checkTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL)); + checkLayout.setOnClickListener(v -> { + checkBox.setChecked(!checkBox.isChecked(), true); + anonymous = !checkBox.isChecked(); + if (topSendersView != null) { + topSendersView.setMyselfAsAnonymous(anonymous); + } + }); + ScaleStateListAnimator.apply(checkLayout, .05f, 1.2f); + checkLayout.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_listSelector, resourcesProvider), 6, 6)); + + layout.addView(checkLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, withTopSenders ? 10 : 4, 0, 10)); + + buttonView = new ButtonWithCounterView(context, resourcesProvider); + layout.addView(buttonView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 14, 0, 14, 0)); + updateSenders(0); + buttonView.setText(StarsIntroActivity.replaceStars(LocaleController.formatString(R.string.StarsReactionSend, LocaleController.formatNumber(50, ',')), starRef), true); + buttonView.setOnClickListener(v -> { + if (messageObject == null || chatActivity == null || iconAnimator != null) { + return; + } + final long totalStars = slider.getValue(); + final StarsController starsController = StarsController.getInstance(currentAccount); + + final Runnable send = () -> { + Boolean currentAnonymous = messageObject == null ? null : messageObject.isMyPaidReactionAnonymous(); + if (currentAnonymous == null && messageObject != null) { + StarsController.getInstance(currentAccount).saveAnonymous(messageObject, anonymous); + } + StarsController.PendingPaidReactions pending = starsController.sendPaidReaction(messageObject, chatActivity, totalStars, false, true, !checkBox.isChecked()); + if (pending == null) { + return; + } + AndroidUtilities.runOnUIThread(() -> { + sending = true; + animate3dIcon(pending::apply); + AndroidUtilities.runOnUIThread(this::dismiss, 240); + }); + }; + + if (starsController.balanceAvailable() && starsController.getBalance() < totalStars) { + new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, chat == null ? "" : chat.title, send).show(); + } else { + send.run(); + } + }); + + LinkSpanDrawable.LinksTextView termsView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + termsView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + termsView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + termsView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsReactionTerms), () -> { + Browser.openUrl(context, getString(R.string.StarsReactionTermsLink)); + })); + termsView.setGravity(Gravity.CENTER); + termsView.setLinkTextColor(getThemedColor(Theme.key_dialogTextLink)); + layout.addView(termsView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 14, 14, 14, 12)); + + setCustomView(layout); + + icon3dView = new GLIconTextureView(context, GLIconRenderer.DIALOG_STYLE, Icon3D.TYPE_GOLDEN_STAR) { + @Override + protected void startIdleAnimation() {} + }; + icon3dView.mRenderer.colorKey1 = Theme.key_starsGradient1; + icon3dView.mRenderer.colorKey2 = Theme.key_starsGradient2; + icon3dView.mRenderer.updateColors(); + icon3dView.mRenderer.white = 1f; + icon3dView.setVisibility(View.INVISIBLE); + icon3dView.setPaused(true); + container.addView(icon3dView, LayoutHelper.createFrame(150, 150)); + slider.setValue(50); + + if (reactors != null) { + long top = 0; + for (int i = 0; i < reactors.size(); ++i) { + final TLRPC.MessageReactor reactor = reactors.get(i); + long count = reactor.count; + if (count > top) top = count; + } + if (me != null) { + top -= me.count; + } + if (top > 0) { + slider.setStarsTop(1 + top); + } + } + } + + private final ColoredImageSpan[] starRef = new ColoredImageSpan[1]; + public void updateSenders(long my_stars) { + if (topSendersView != null) { + ArrayList array = new ArrayList<>(); + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + long existingStars = 0; + if (reactors != null) { + for (int i = 0; i < reactors.size(); ++i) { + final TLRPC.MessageReactor reactor = reactors.get(i); + long dialogId = DialogObject.getPeerDialogId(reactor.peer_id); + if (reactor.anonymous) { + if (reactor.my) { + dialogId = selfId; + } else { + dialogId = -i; + } + } + if (reactor.my || dialogId == selfId) { + existingStars = reactor.count; + continue; + } + array.add(SenderData.of(reactor.anonymous, dialogId, reactor.count)); + } + } + if (existingStars + my_stars > 0) { + array.add(SenderData.of(anonymous, selfId, existingStars + my_stars)); + } + Collections.sort(array, (a1, a2) -> (int) (a2.stars - a1.stars)); + topSendersView.setSenders(new ArrayList<>(array.subList(0, Math.min(3, array.size())))); + } + } + + private boolean sending; + private boolean checkedVisiblity = false; + private void checkVisibility() { + if (checkedVisiblity) return; + checkedVisiblity = true; + if (messageObject == null) return; + Boolean currentAnonymous = messageObject.isMyPaidReactionAnonymous(); + StarsController.getInstance(currentAccount).saveAnonymous(messageObject, anonymous); + if (currentAnonymous == null || currentAnonymous != anonymous) { + messageObject.setMyPaidReactionAnonymous(anonymous); + + final StarsController.MessageId key = StarsController.MessageId.from(messageObject); + TLRPC.TL_messages_togglePaidReactionPrivacy req = new TLRPC.TL_messages_togglePaidReactionPrivacy(); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(key.did); + req.msg_id = key.mid; + req.isPrivate = anonymous; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starReactionAnonymousUpdate, key.did, key.mid, anonymous); + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> { + if (res instanceof TLRPC.TL_boolTrue) { + MessagesStorage.getInstance(currentAccount).putMessages(new ArrayList<>(Arrays.asList(messageObject.messageOwner)), true, true, true, 0, 0, 0); + } + }); + } + } + + @Override + public void dismiss() { + if (!sending) checkVisibility(); + super.dismiss(); + } + + private ChatActivity chatActivity; + private int messageId; + private ChatMessageCell messageCell; + + public void setMessageCell(ChatActivity chatActivity, int id, ChatMessageCell cell) { + this.chatActivity = chatActivity; + this.messageId = id; + this.messageCell = cell; + } + + public void setValue(int value) { + slider.setValue(value); + updateSenders(value); + if (buttonView != null) { + buttonView.setText(StarsIntroActivity.replaceStars(LocaleController.formatString(R.string.StarsReactionSend, LocaleController.formatNumber(value, ',')), starRef), true); + } + } + + private ValueAnimator iconAnimator; + private void animate3dIcon(Runnable pushed) { + if (messageCell == null || !messageCell.isCellAttachedToWindow() || messageCell.getPrimaryMessageObject() == null || messageCell.getPrimaryMessageObject().getId() != messageId) return; + ChatMessageCell _cell = messageCell; + ReactionsLayoutInBubble.ReactionButton _button = _cell.reactionsLayoutInBubble.getReactionButton(ReactionsLayoutInBubble.VisibleReaction.asStar()); + if (_button == null) { + MessageObject.GroupedMessages group = chatActivity.getValidGroupedMessage(messageCell.getPrimaryMessageObject()); + if (group != null && !group.posArray.isEmpty()) { + MessageObject msg = null; + for (MessageObject m : group.messages) { + MessageObject.GroupedMessagePosition pos = group.getPosition(m); + if (pos != null && (pos.flags & MessageObject.POSITION_FLAG_LEFT) != 0 && (pos.flags & MessageObject.POSITION_FLAG_BOTTOM) != 0) { + msg = m; + break; + } + } + if (msg != null) { + _cell = chatActivity.findMessageCell(msg.getId(), false); + } + } + if (_cell == null) return; + _button = _cell.reactionsLayoutInBubble.getReactionButton(ReactionsLayoutInBubble.VisibleReaction.asStar()); + } + if (_button == null) { + return; + } + final ChatMessageCell cell = _cell; + final ReactionsLayoutInBubble.ReactionButton button = _button; + + final int[] loc = new int[2]; + + final RectF from = new RectF(); + slider.getLocationInWindow(loc); + from.set(slider.counterImage.getBounds()); + from.inset(-dp(3.5f), -dp(3.5f)); + from.offset(loc[0], loc[1]); + icon3dView.whenReady(() -> { + slider.drawCounterImage = false; + slider.invalidate(); + }); + button.drawImage = false; + cell.invalidate(); + + final RectF to = new RectF(); + final Runnable updateTo = () -> { + cell.getLocationInWindow(loc); + to.set( + loc[0] + cell.reactionsLayoutInBubble.x + button.x + dp(4), + loc[1] + cell.reactionsLayoutInBubble.y + button.y + (button.height - dp(22)) / 2f, + loc[0] + cell.reactionsLayoutInBubble.x + button.x + dp(4 + 22), + loc[1] + cell.reactionsLayoutInBubble.y + button.y + (button.height + dp(22)) / 2f + ); + }; + updateTo.run(); + + icon3dView.setPaused(false); + icon3dView.setVisibility(View.VISIBLE); + + final RectF rect = new RectF(); + rect.set(from); + icon3dView.setTranslationX(rect.centerX() - dp(150) / 2f); + icon3dView.setTranslationY(rect.centerY() - dp(150) / 2f); + icon3dView.setScaleX(rect.width() / dp(150)); + icon3dView.setScaleY(rect.height() / dp(150)); + + if (iconAnimator != null) { + iconAnimator.cancel(); + } + final boolean[] doneRipple = new boolean[1]; + iconAnimator = ValueAnimator.ofFloat(0, 1); + iconAnimator.addUpdateListener(anm -> { + float t = (float) anm.getAnimatedValue(); + updateTo.run(); + AndroidUtilities.lerp(from, to, t, rect); + icon3dView.setTranslationX(rect.centerX() - dp(150) / 2f); + icon3dView.setTranslationY(rect.centerY() - dp(150) / 2f); + float s = Math.max(rect.width() / dp(150), rect.height() / dp(150)); + s = lerp(s, 1f, (float) Math.sin(t * Math.PI)); + icon3dView.setScaleX(s); + icon3dView.setScaleY(s); + icon3dView.mRenderer.angleX = 360 * t; + icon3dView.mRenderer.white = Math.max(0, 1 - 4f * t); + + if (!doneRipple[0] && t > .95f) { + doneRipple[0] = true; + LaunchActivity.makeRipple(to.centerX(), to.centerY(), 1.5f); + try { + container.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + if (pushed != null) { + pushed.run(); + } + } + }); + iconAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + icon3dView.setVisibility(View.INVISIBLE); + icon3dView.setPaused(true); + button.drawImage = true; + messageCell.invalidate(); + + StarsReactionsSheet.super.dismissInternal(); + + if (!doneRipple[0]) { + doneRipple[0] = true; + LaunchActivity.makeRipple(to.centerX(), to.centerY(), 1.5f); + try { + container.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + if (pushed != null) { + pushed.run(); + } + } + if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { + LaunchActivity.instance.getFireworksOverlay().start(true); + } + } + }); + iconAnimator.setDuration(800); + iconAnimator.setInterpolator(new Interpolator() { + @Override + public float getInterpolation(float x) { + return (float) Math.pow(x, 2); + } + }); + iconAnimator.start(); + } + + @Override + public void dismissInternal() { + if (iconAnimator != null && iconAnimator.isRunning()) { + return; + } + super.dismissInternal(); + } + + @Override + protected boolean canDismissWithSwipe() { + if (slider.tracking) return false; + return super.canDismissWithSwipe(); + } + + public static class StarsSlider extends View { + + private final Paint sliderInnerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint sliderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint sliderCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint textBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + private final Particles sliderParticles = new Particles(Particles.TYPE_RIGHT, 300); + private final Particles textParticles = new Particles(Particles.TYPE_RADIAL, 30); + + private final LinearGradient gradient = new LinearGradient(0, 0, 255, 0, new int[] {0xFFEEAC0D, 0xFFF9D316}, new float[] {0, 1}, Shader.TileMode.CLAMP); + private final Matrix gradientMatrix = new Matrix(); + + public boolean drawCounterImage = true; + private final Drawable counterImage; + private final AnimatedTextView.AnimatedTextDrawable counterText = new AnimatedTextView.AnimatedTextDrawable(false, true, true); + + private final ColoredImageSpan[] starRef = new ColoredImageSpan[1]; + + private final Paint topPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Text topText = new Text(getString(R.string.StarsReactionTop), 14, AndroidUtilities.getTypeface("fonts/rcondensedbold.ttf")); + private final AnimatedFloat overTop = new AnimatedFloat(this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedFloat overTopText = new AnimatedFloat(this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + + public StarsSlider(Context context) { + super(context); + + counterImage = context.getResources().getDrawable(R.drawable.msg_premium_liststar).mutate(); + counterImage.setColorFilter(new PorterDuffColorFilter(0xFFFFFFFF, PorterDuff.Mode.SRC_IN)); + + counterText.setTextColor(0xFFFFFFFF); + counterText.setTypeface(AndroidUtilities.getTypeface("fonts/num.otf")); + counterText.setTextSize(AndroidUtilities.dp(21)); + counterText.setCallback(this); + counterText.setOverrideFullWidth(AndroidUtilities.displaySize.x); + counterText.setGravity(Gravity.CENTER); + + topPaint.setColor(Theme.getColor(Theme.key_dialogBackground)); + topPaint.setStyle(Paint.Style.STROKE); + topPaint.setStrokeWidth(dp(1)); + } + + private long currentTop = -1; + + public void setStarsTop(long top) { + currentTop = top; + invalidate(); + } + + @Override + protected boolean verifyDrawable(@NonNull Drawable who) { + return who == counterText || super.verifyDrawable(who); + } + + private final RectF sliderInnerRect = new RectF(); + private final RectF sliderRect = new RectF(); + private final RectF sliderCircleRect = new RectF(); + private final RectF arc = new RectF(); + + private final Path sliderInnerPath = new Path(); + private final Path sliderPath = new Path(); + + private final RectF textRect = new RectF(); + private final Path textPath = new Path(); + + public float progress = 0; + public float aprogress; + public int steps; + public int[] stops; + + public void setSteps(int steps, int... stops) { + this.steps = steps; + this.stops = stops; + } + + public void setValue(int value) { + setValue(value, false); + } + public void setValue(int value, boolean byScroll) { + this.progress = getProgress(value); + if (!byScroll) { + this.aprogress = this.progress; + } + updateText(true); + } + + public int getValue() { + return getValue(progress); + } + + public float getProgress() { + return progress; + } + + public int getValue(float progress) { + if (progress <= 0f) return stops[0]; + if (progress >= 1f) return stops[stops.length - 1]; + float scaledProgress = progress * (stops.length - 1); + int index = (int) scaledProgress; + float localProgress = scaledProgress - index; + return Math.round(stops[index] + localProgress * (stops[index + 1] - stops[index])); + } + + public float getProgress(int value) { + for (int i = 1; i < stops.length; ++i) { + if (value <= stops[i]) { + float local = (float) (value - stops[i - 1]) / (stops[i] - stops[i - 1]); + return (i - 1 + local) / (stops.length - 1); + } + } + return 1f; + } + + public void updateText(boolean animated) { + counterText.cancelAnimation(); + counterText.setText(StarsIntroActivity.replaceStars(LocaleController.formatNumber(getValue(), ','), starRef), animated); + } + + protected void onValueChanged(int value) {} + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), dp(220)); + final int w = getMeasuredWidth(); + final int h = getMeasuredHeight(); + + final int pad = dp(14); + final int top = dp(135); + + sliderInnerRect.set(pad, top, w - pad, top + dp(24)); + + sliderInnerPaint.setColor(0x26EFAD0D); + sliderPaint.setColor(0xFFEFAD0D); + sliderCirclePaint.setColor(0xFFFFFFFF); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + gradientMatrix.reset(); + gradientMatrix.postTranslate(sliderInnerRect.left, 0); + gradientMatrix.postScale(sliderInnerRect.width() / 255f, 1f); + gradient.setLocalMatrix(gradientMatrix); + sliderPaint.setShader(gradient); + + sliderInnerPath.rewind(); + sliderInnerPath.addRoundRect(sliderInnerRect, dp(12), dp(12), Path.Direction.CW); + canvas.drawPath(sliderInnerPath, sliderInnerPaint); + + sliderRect.set(sliderInnerRect); + final float roundedValue = getProgress(getValue()); + sliderRect.right = lerp(sliderRect.left + dp(24), sliderRect.right, roundedValue); + + sliderPath.rewind(); + sliderPath.addRoundRect(sliderRect, dp(12), dp(12), Path.Direction.CW); + + sliderParticles.setBounds(sliderInnerRect); + sliderParticles.setSpeed(1f + progress * 15f); + sliderParticles.setVisible(.15f + .85f * progress); + sliderParticles.process(); + canvas.save(); + canvas.clipPath(sliderInnerPath); + sliderParticles.draw(canvas, 0xFFF5B90E); + if (currentTop != -1 && getProgress((int) currentTop) < 1f && getProgress((int) currentTop) > 0) { + final float topX = sliderInnerRect.left + dp(12) + (sliderInnerRect.width() - dp(24)) * Utilities.clamp01(getProgress((int) currentTop)); + final float isOverTop = overTop.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(14)); + final float textPad = lerp(dp(9), dp(16), overTopText.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(12))); + final float topTextX = topX + topText.getCurrentWidth() + 2 * dp(16) > sliderInnerRect.right ? topX - textPad - topText.getCurrentWidth() : topX + textPad; + topPaint.setStrokeWidth(dp(1)); + topPaint.setColor(Theme.multAlpha(0xFFF5B90E, .6f)); + canvas.drawLine(topX, lerp(sliderInnerRect.top, sliderInnerRect.centerY(), isOverTop), topX, lerp(sliderInnerRect.bottom, sliderInnerRect.centerY(), isOverTop), topPaint); + topText.draw(canvas, topTextX, sliderInnerRect.centerY(), 0xFFF5B90E, .6f); + } + canvas.drawPath(sliderPath, sliderPaint); + canvas.clipPath(sliderPath); + sliderParticles.draw(canvas, Color.WHITE); + if (currentTop != -1 && getProgress((int) currentTop) < 1f && getProgress((int) currentTop) > 0) { + final float topX = sliderInnerRect.left + dp(12) + (sliderInnerRect.width() - dp(24)) * Utilities.clamp01(getProgress((int) currentTop)); + final float isOverTop = overTop.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(14)); + final float textPad = lerp(dp(9), dp(16), overTopText.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(12))); + final float topTextX = topX + topText.getCurrentWidth() + 2 * dp(16) > sliderInnerRect.right ? topX - textPad - topText.getCurrentWidth() : topX + textPad; + topPaint.setStrokeWidth(dp(1)); + topPaint.setColor(Theme.multAlpha(Theme.getColor(Theme.key_dialogBackground), .4f)); + canvas.drawLine(topX, lerp(sliderInnerRect.top, sliderInnerRect.centerY(), isOverTop), topX, lerp(sliderInnerRect.bottom, sliderInnerRect.centerY(), isOverTop), topPaint); + topText.draw(canvas, topTextX, sliderInnerRect.centerY(), Color.WHITE, .75f); + } + canvas.restore(); + invalidate(); + + sliderCircleRect.set( + sliderRect.right - dp(16) - dp(16 - 12), + (sliderRect.centerY() - dp(16) / 2f), + sliderRect.right - dp(16 - 12), + (sliderRect.centerY() + dp(16) / 2f) + ); + canvas.drawRoundRect(sliderCircleRect, dp(12), dp(12), sliderCirclePaint); + + final float slide = dp(9) / sliderInnerRect.width(); + final float pointerX = lerp( + lerp(sliderCircleRect.left, sliderCircleRect.right, roundedValue), + lerp(sliderCircleRect.left + dp(9), sliderCircleRect.right - dp(9), roundedValue), + Math.min(Utilities.clamp01(roundedValue / slide), Utilities.clamp01((1f - roundedValue) / slide)) + ); // slide < dp(12) ? sliderInnerRect.left + dp(12) : slide > (sliderInnerRect.width() - dp(12)) ? sliderInnerRect.right - dp(12) : sliderCircleRect.centerX(); + final float textWidth = counterText.getCurrentWidth() + dp(24 + 26); + final float textHeight = dp(44); + final float left = Utilities.clamp(pointerX - textWidth / 2f, sliderInnerRect.right - textWidth - dp(4), sliderInnerRect.left + dp(4)); + textRect.set(left, sliderInnerRect.top - dp(21) - textHeight, left + textWidth, sliderInnerRect.top - dp(21)); + + float d = textRect.height(), r = d / 2f; + + final float px = Utilities.clamp(pointerX, textRect.right, textRect.left); + final float lpx = Utilities.clamp(px - dp(9), textRect.right, textRect.left); + final float rpx = Utilities.clamp(px + dp(9), textRect.right, textRect.left); + + + final float rotate = Utilities.clamp(progress - aprogress, 1, -1) * 60; + final float rotateCx = px, rotateCy = textRect.bottom + dp(8); + + textPath.rewind(); + arc.set(textRect.left, textRect.top, textRect.left + d, textRect.top + d); + textPath.arcTo(arc, -180, 90); + arc.set(textRect.right - d, textRect.top, textRect.right, textRect.top + d); + textPath.arcTo(arc, -90, 90); + arc.set(textRect.right - d, textRect.bottom - d, textRect.right, textRect.bottom); + float rr = Utilities.clamp01((rpx - arc.centerX()) / r); + textPath.arcTo(arc, 0, (float) Utilities.clamp(.85f * Math.acos(rr) / Math.PI * 180, 90, 0)); + if (lpx < textRect.right - d * .7f) { + textPath.lineTo(rpx, textRect.bottom); + textPath.lineTo(px + 2, textRect.bottom + dp(8)); + } + textPath.lineTo(px, textRect.bottom + dp(8) + 1); + if (rpx > textRect.left + d * .7f) { + textPath.lineTo(px - 2, textRect.bottom + dp(8)); + textPath.lineTo(lpx, textRect.bottom); + } + arc.set(textRect.left, textRect.bottom - d, textRect.left + d, textRect.bottom); + float lr = Utilities.clamp01((lpx - arc.left) / r); + float a = 90 + (float) Utilities.clamp(.85f * Math.acos(lr) / Math.PI * 180, 90, 0); + textPath.arcTo(arc, a, 180 - a); + textPath.lineTo(textRect.left, textRect.bottom); + + textPath.close(); + + AndroidUtilities.rectTmp.set(textRect); + AndroidUtilities.rectTmp.inset(-dp(12), -dp(12)); + textParticles.setBounds(AndroidUtilities.rectTmp); + textParticles.setSpeed(1f + progress * 15f); + textParticles.process(); + canvas.save(); +// canvas.translate(textRect.centerX(), textRect.centerY()); + textParticles.draw(canvas, 0xFFF5B90E); + canvas.restore(); + + canvas.save(); + canvas.rotate(rotate, rotateCx, rotateCy); + if (Math.abs(progress - aprogress) > .001f) { + aprogress = AndroidUtilities.lerp(aprogress, progress, .1f); + invalidate(); + } + + textBackgroundPaint.setShader(gradient); + canvas.drawPath(textPath, textBackgroundPaint); + + canvas.save(); + canvas.clipPath(textPath); + canvas.rotate(-rotate, rotateCx, rotateCy); +// canvas.translate(textRect.centerX(), textRect.centerY()); + textParticles.draw(canvas, Color.WHITE); + canvas.restore(); + + counterImage.setBounds((int) (textRect.left + dp(13)), (int) (textRect.centerY() - dp(10)), (int) (textRect.left + dp(13 + 20)), (int) (textRect.centerY() + dp(10))); + if (drawCounterImage) { + counterImage.draw(canvas); + } + counterText.setBounds(textRect.left + dp(24), textRect.top, textRect.right, textRect.bottom); + counterText.draw(canvas); + + canvas.restore(); + + } + + private float lastX, lastY; + private long pressTime; + private int pointerId; + private boolean tracking; + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + lastX = event.getX(); + lastY = event.getY(); + pointerId = event.getPointerId(0); + pressTime = System.currentTimeMillis(); + tracking = false; + } else if (event.getAction() == MotionEvent.ACTION_MOVE && event.getPointerId(0) == pointerId) { + final float dx = event.getX() - lastX; + final float dy = event.getY() - lastY; + if (!tracking && Math.abs(dx) > Math.abs(1.5f * dy) && Math.abs(dx) > AndroidUtilities.touchSlop) { + getParent().requestDisallowInterceptTouchEvent(true); + tracking = true; + if (progressAnimator != null) { + progressAnimator.cancel(); + } + } + if (tracking) { + final int pastValue = getValue(); + progress = Utilities.clamp01(progress + dx / (1f * getWidth())); + if (getValue() != pastValue) { + onValueChanged(getValue()); + updateText(true); + } + lastX = event.getX(); + } + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + if (!tracking && event.getPointerId(0) == pointerId && MathUtils.distance(lastX, lastY, event.getX(), event.getY()) < AndroidUtilities.touchSlop && System.currentTimeMillis() - pressTime <= ViewConfiguration.getTapTimeout() * 1.5f) { + // tap + float newProgress = Utilities.clamp01((event.getX() - sliderInnerRect.left) / (float) sliderInnerRect.width()); + if (currentTop > 0 && Math.abs(getProgress((int) currentTop) - newProgress) < 0.035f) { + newProgress = Utilities.clamp01(getProgress((int) currentTop)); + } + animateProgressTo(newProgress); + } + tracking = false; + } + return true; + } + + private ValueAnimator progressAnimator; + private void animateProgressTo(float toProgress) { + if (progressAnimator != null) { + progressAnimator.cancel(); + } + progressAnimator = ValueAnimator.ofFloat(progress, toProgress); + progressAnimator.addUpdateListener(anm -> { + progress = (float) anm.getAnimatedValue(); + invalidate(); + }); + progressAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + final int pastValue = getValue(); + progress = toProgress; + if (getValue() != pastValue) { + onValueChanged(getValue()); + } + invalidate(); + } + }); + progressAnimator.setDuration(320); + progressAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + progressAnimator.start(); + + final int pastValue = getValue(); + if (getValue(toProgress) != pastValue) { + onValueChanged(getValue(toProgress)); + } + + counterText.cancelAnimation(); + counterText.setText(StarsIntroActivity.replaceStars(LocaleController.formatNumber(getValue(toProgress), ','), starRef), true); + } + } + + public static class Particles { + + public static final int TYPE_RIGHT = 0; + public static final int TYPE_RADIAL = 1; + + public final int type; + public final ArrayList particles; + public final RectF bounds = new RectF(); + + public final Bitmap b; + private int bPaintColor; + public final Paint bPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + public final Rect rect = new Rect(); + + private float speed = 1f; + private int visibleCount; + + private boolean firstDraw = true; + + public Particles(int type, int n) { + this.type = type; + this.visibleCount = n; + particles = new ArrayList<>(n); + for (int i = 0; i < n; ++i) { + particles.add(new Particle()); + } + + final int size = dp(10); + final float k = .85f; + b = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + Path path = new Path(); + int sizeHalf = size >> 1; + int mid = (int) (sizeHalf * k); + path.moveTo(0, sizeHalf); + path.lineTo(mid, mid); + path.lineTo(sizeHalf, 0); + path.lineTo(size - mid, mid); + path.lineTo(size, sizeHalf); + path.lineTo(size - mid, size - mid); + path.lineTo(sizeHalf, size); + path.lineTo(mid, size - mid); + path.lineTo(0, sizeHalf); + path.close(); + Canvas canvas = new Canvas(b); + Paint paint = new Paint(); + paint.setColor(Theme.multAlpha(Color.WHITE, .75f)); + canvas.drawPath(path, paint); + } + + public void setVisible(float x) { + this.visibleCount = (int) (particles.size() * x); + } + + public void setBounds(RectF bounds) { + this.bounds.set(bounds); + if (type == TYPE_RADIAL) { + final long now = System.currentTimeMillis(); + for (int i = 0; i < particles.size(); ++i) { + final Particle p = particles.get(i); + if (!bounds.contains(p.x, p.y)) gen(p, now, firstDraw); + } + } + } + + public void setSpeed(float speed) { + this.speed = speed; + } + + private long lastTime; + public void process() { + final long now = System.currentTimeMillis(); + final float deltaTime = Math.min(lastTime - now, 16) / 1000f * speed; + for (int i = 0; i < Math.min(visibleCount, particles.size()); ++i) { + final Particle p = particles.get(i); + float lifetime = p.lifetime <= 0 ? 2f : (now - p.start) / (float) p.lifetime; + if (lifetime > 1f) { + gen(p, now, firstDraw); + lifetime = 0f; + } + p.x += p.vx * deltaTime; + p.y += p.vy * deltaTime; + p.la = 4f * lifetime - 4f * lifetime * lifetime; + } + lastTime = now; + } + + public void draw(Canvas canvas, int color) { + if (bPaintColor != color) { + bPaint.setColorFilter(new PorterDuffColorFilter(bPaintColor = color, PorterDuff.Mode.SRC_IN)); + } + for (int i = 0; i < Math.min(visibleCount, particles.size()); ++i) { + final Particle p = particles.get(i); + p.draw(canvas, color, p.la); + } + firstDraw = false; + } + + public void gen(Particle p, final long now, boolean prefire) { + p.start = now; + p.lifetime = lerp(500, 2500, Utilities.fastRandom.nextFloat()); + if (prefire) { + p.start -= (long) (p.lifetime * Utilities.clamp01(Utilities.fastRandom.nextFloat())); + } + p.x = lerp(bounds.left, bounds.right, Utilities.fastRandom.nextFloat()); + p.y = lerp(bounds.top, bounds.bottom, Utilities.fastRandom.nextFloat()); + if (type == TYPE_RIGHT) { + p.vx = dp(lerp(-7f, -18f, Utilities.fastRandom.nextFloat())); + p.vy = dp(lerp(-2f, 2f, Utilities.fastRandom.nextFloat())); + } else { + p.vx = bounds.centerX() - p.x; + p.vy = bounds.centerY() - p.y; + final float d = dp(lerp(1f, 4f, Utilities.fastRandom.nextFloat())) / (float) Math.sqrt(p.vx * p.vx + p.vy * p.vy); + p.vx *= d; + p.vy *= d; + } + p.a = lerp(.4f, 1f, Utilities.fastRandom.nextFloat()); + p.s = .7f * lerp(.8f, 1.2f, Utilities.fastRandom.nextFloat()); + } + + public class Particle { + public float x, y; + public float vx, vy; + public float s; + public long start, lifetime; + public float la, a; + + public void draw(Canvas canvas, int color, float alpha) { + bPaint.setAlpha((int) (0xFF * alpha)); + rect.set( + (int) (x - b.getWidth() / 2f * a * s * alpha), + (int) (y - b.getHeight() / 2f * a * s * alpha), + (int) (x + b.getWidth() / 2f * a * s * alpha), + (int) (y + b.getHeight() / 2f * a * s * alpha) + ); + canvas.drawBitmap(b, null, rect, bPaint); + } + } + } + + public static class SenderData { + public boolean anonymous; + public long did; + public long stars; + public static SenderData of(boolean anonymous, long did, long stars) { + SenderData d = new SenderData(); + d.anonymous = anonymous; + d.did = did; + d.stars = stars; + return d; + } + } + + public class TopSendersView extends View { + + public final ArrayList senders = new ArrayList<>(); + public final ArrayList oldSenders = new ArrayList<>(); + + public final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint starsBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + public final AnimatedFloat animatedCount = new AnimatedFloat(TopSendersView.this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + public float count; + + public TopSendersView(Context context) { + super(context); + + backgroundPaint.setStyle(Paint.Style.FILL_AND_STROKE); + backgroundPaint.setStrokeWidth(dp(3)); + backgroundPaint.setColor(Theme.getColor(Theme.key_dialogBackground)); + starsBackgroundPaint.setColor(0xFFF0B302); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + sender.imageReceiver.onAttachedToWindow(); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + sender.imageReceiver.onDetachedFromWindow(); + } + } + + @Override + protected void dispatchDraw(Canvas canvas) { + count = animatedCount.set(senders.size()); + for (int i = 0; i < oldSenders.size(); ++i) { + oldSenders.get(i).draw(canvas); + } + for (int i = 0; i < senders.size(); ++i) { + senders.get(i).draw(canvas); + } + } + + private Sender pressedSender; + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (pressedSender != null) { + pressedSender.bounce.setPressed(false); + } + pressedSender = null; + for (int i = 0; i < senders.size(); ++i) { + if (senders.get(i).clickBounds.contains(event.getX(), event.getY())) { + pressedSender = senders.get(i); + break; + } + } + if (pressedSender != null) { + pressedSender.bounce.setPressed(true); + } + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + if (event.getAction() == MotionEvent.ACTION_UP) { + if (pressedSender != null && !pressedSender.anonymous && pressedSender.clickBounds.contains(event.getX(), event.getY()) && clickListener != null) { + clickListener.run(pressedSender.did); + } + } + if (pressedSender != null) { + pressedSender.bounce.setPressed(false); + } + pressedSender = null; + } + return pressedSender != null; + } + + public void setMyselfAsAnonymous(boolean anonymous) { + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + if (sender.did == selfId) { + sender.setAnonymous(anonymous); + return; + } + } + } + + public void setSenders(ArrayList senders) { + // remove old + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + SenderData senderData = null; + for (int j = 0; j < senders.size(); ++j) { + if (senders.get(j).did == sender.did) { + senderData = senders.get(j); + break; + } + } + if (senderData == null) { + sender.imageReceiver.onDetachedFromWindow(); + this.senders.remove(i); + i--; + sender.index = -1; + this.oldSenders.add(sender); + } + } + + // insert new, update existing + for (int i = 0; i < senders.size(); ++i) { + SenderData senderData = senders.get(i); + Sender sender = null; + for (int j = 0; j < this.senders.size(); ++j) { + if (this.senders.get(j).did == senderData.did) { + sender = this.senders.get(j); + break; + } + } + if (sender == null) { + for (int j = 0; j < oldSenders.size(); ++j) { + if (oldSenders.get(j).did == senderData.did) { + sender = oldSenders.get(j); + break; + } + } + if (sender != null) { + oldSenders.remove(sender); + sender.imageReceiver.onAttachedToWindow(); + this.senders.add(sender); + } + } + if (sender == null) { + sender = new Sender(senderData.did); + sender.animatedScale.set(0f, true); + this.senders.add(sender); + sender.animatedPosition.set(senders.size() - 1 - i, true); + } + sender.setStars(senderData.stars); + sender.setAnonymous(senderData.anonymous); + sender.index = senders.size() - 1 - i; + } + + invalidate(); + } + + private Utilities.Callback clickListener; + public void setOnSenderClickListener(Utilities.Callback listener) { + clickListener = listener; + } + + public class Sender { + + public int index; + public final RectF clickBounds = new RectF(); + public final AnimatedFloat animatedPosition = new AnimatedFloat(TopSendersView.this, 0, 600, CubicBezierInterpolator.EASE_OUT_QUINT); + public final AnimatedFloat animatedScale = new AnimatedFloat(TopSendersView.this, 0, 200, CubicBezierInterpolator.EASE_OUT_QUINT); + public final AnimatedFloat animatedAnonymous = new AnimatedFloat(TopSendersView.this, 0, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + + public final long did; + public final ImageReceiver imageReceiver = new ImageReceiver(TopSendersView.this); + public final AvatarDrawable avatarDrawable = new AvatarDrawable(); + public final AvatarDrawable anonymousAvatarDrawable = new AvatarDrawable(); + public Text text; + public Text starsText; + public boolean anonymous; + + public final ButtonBounce bounce = new ButtonBounce(TopSendersView.this); + + public Sender(long did) { + this.did = did; + + String name; + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + name = UserObject.getForcedFirstName(user); + + avatarDrawable.setInfo(user); + imageReceiver.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + name = chat == null ? "" : chat.title; + + avatarDrawable.setInfo(chat); + imageReceiver.setForUserOrChat(chat, avatarDrawable); + } + imageReceiver.setRoundRadius(dp(56)); + imageReceiver.onAttachedToWindow(); + + anonymousAvatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_ANONYMOUS); + anonymousAvatarDrawable.setColor(Theme.getColor(Theme.key_avatar_backgroundGray)); + + text = new Text(name, 12); + } + + public void detach() { + imageReceiver.onDetachedFromWindow(); + } + + public void setAnonymous(boolean anonymous) { + if (this.anonymous != anonymous) { + this.anonymous = anonymous; + + String name; + if (anonymous) { + name = LocaleController.getString(R.string.StarsReactionAnonymous); + } else if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + name = chat == null ? "" : chat.title; + } + + text = new Text(name, 12); + + TopSendersView.this.invalidate(); + } + } + + public void setStars(long stars) { + starsText = new Text(StarsIntroActivity.replaceStars("⭐️" + LocaleController.formatNumber(stars, ','), .85f), 12, AndroidUtilities.getTypeface("fonts/num.otf")); + } + + public void draw(Canvas canvas) { + final float position = animatedPosition.set(index); + final float alpha = animatedScale.set(index >= 0 && index < senders.size()); + + canvas.save(); + final float cx = dp(40) + (TopSendersView.this.getWidth() - dp(80)) / Math.max(1, count) * (count - (.5f + position)); + final float cy = dp(40); + + final float w = (TopSendersView.this.getWidth() - dp(80)) / Math.max(1, count); + clickBounds.set(cx - w / 2f, cy - dp(50), cx + w / 2f, cy + dp(50)); + + canvas.scale(.7f + .3f * alpha, .7f + .3f * alpha, cx, cy); + final float s = bounce.getScale(0.04f); + canvas.scale(s, s, cx, cy); + + if (alpha > 0) { + final float anonymous = animatedAnonymous.set(this.anonymous); + if (anonymous < 1) { + imageReceiver.setImageCoords(cx - dp(56) / 2f, cy - dp(56) / 2f, dp(56), dp(56)); + imageReceiver.setAlpha(alpha); + imageReceiver.draw(canvas); + imageReceiver.setAlpha(1f); + } + if (anonymous > 0) { + anonymousAvatarDrawable.setBounds((int) cx - dp(56) / 2, (int) cy - dp(56) / 2, (int) cx + dp(56) / 2, (int) cy + dp(56) / 2); + anonymousAvatarDrawable.setAlpha((int) (0xFF * alpha * anonymous)); + anonymousAvatarDrawable.draw(canvas); + anonymousAvatarDrawable.setAlpha(0xFF); + } + } + + rectTmp.set(cx - starsText.getCurrentWidth() / 2f - dp(5.66f), cy + dp(23) - dp(16) / 2f, cx + starsText.getCurrentWidth() / 2f + dp(5.66f), cy + dp(23) + dp(16) / 2f); + canvas.drawRoundRect(rectTmp, rectTmp.height() / 2f, rectTmp.height() / 2f, backgroundPaint); + starsBackgroundPaint.setAlpha((int) (0xFF * alpha)); + canvas.drawRoundRect(rectTmp, rectTmp.height() / 2f, rectTmp.height() / 2f, starsBackgroundPaint); + starsText.draw(canvas, cx - starsText.getCurrentWidth() / 2f, cy + dp(23), 0xFFFFFFFF, alpha); + + text.draw(canvas, cx - text.getCurrentWidth() / 2f, cy + dp(42), Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider), alpha); + + canvas.restore(); + } + + } + + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java new file mode 100644 index 000000000..e9333aeeb --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java @@ -0,0 +1,169 @@ +package org.telegram.ui.Stars; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.graphics.RenderEffect; +import android.graphics.RuntimeShader; +import android.os.Build; +import android.view.RoundedCorner; +import android.view.View; +import android.view.WindowInsets; + +import androidx.annotation.RequiresApi; + +import com.google.zxing.common.detector.MathUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.R; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.RLottieDrawable; + +import java.util.ArrayList; + +@RequiresApi(api = Build.VERSION_CODES.TIRAMISU) +public class SuperRipple extends ISuperRipple { + + public static boolean supports() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU; + } + + public static class Effect { + public final ValueAnimator animator; + public final float cx, cy; + public final float intensity; + public float t; + + private Effect( + float cx, float cy, + float intensity, + ValueAnimator animator + ) { + this.cx = cx; + this.cy = cy; + this.intensity = intensity; + this.animator = animator; + } + } + + public final ArrayList effects = new ArrayList<>(); + + public final RuntimeShader shader; + public RenderEffect effect; + + public final int MAX_COUNT = 7; + public int count; + public int width, height; + public float density; + public final float[] t = new float[MAX_COUNT]; + public final float[] centerX = new float[MAX_COUNT]; + public final float[] centerY = new float[MAX_COUNT]; + public final float[] intensity = new float[MAX_COUNT]; + + public SuperRipple(View view) { + super(view); + + final String code = RLottieDrawable.readRes(null, R.raw.superripple_effect); + shader = new RuntimeShader(code); + setupSizeUniforms(true); + + effect = RenderEffect.createRuntimeShaderEffect(shader, "img"); + } + + private void setupSizeUniforms(boolean force) { + if (force || width != view.getWidth() || height != view.getHeight() || Math.abs(density - AndroidUtilities.density) > 0.01f) { + shader.setFloatUniform("size", width = view.getWidth(), height = view.getHeight()); + shader.setFloatUniform("density", density = AndroidUtilities.density); + + final WindowInsets insets = view.getRootWindowInsets(); + final RoundedCorner topLeftCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_TOP_LEFT); + final RoundedCorner topRightCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_TOP_RIGHT); + final RoundedCorner bottomLeftCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT); + final RoundedCorner bottomRightCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_RIGHT); + + shader.setFloatUniform( + "radius", + bottomRightCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomRightCorner.getRadius(), + topRightCorner == null ? 0 : topRightCorner.getRadius(), + bottomLeftCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomLeftCorner.getRadius(), + topLeftCorner == null ? 0 : topLeftCorner.getRadius() + ); + } + } + + @Override + public void animate(float cx, float cy, float intensity) { + if (effects.size() >= MAX_COUNT) return; + + final float speed = 1200 * AndroidUtilities.density; + final float max_dist = Math.max( + Math.max( + MathUtils.distance(0, 0, cx, cy), + MathUtils.distance(view.getWidth(), 0, cx, cy) + ), Math.max( + MathUtils.distance(0, view.getHeight(), cx, cy), + MathUtils.distance(view.getWidth(), view.getHeight(), cx, cy) + ) + ); + final float duration = 2.0f * max_dist / speed; + + final ValueAnimator animator = ValueAnimator.ofFloat(0f, duration); + final Effect effect = new Effect(cx, cy, intensity, animator); + + animator.addUpdateListener(anm -> { + effect.t = (float) anm.getAnimatedValue(); + updateProperties(); + }); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + effects.remove(effect); + updateProperties(); + } + }); + animator.setInterpolator(CubicBezierInterpolator.EASE_OUT); + animator.setDuration((long) (duration * 1000L)); + + effects.add(effect); + updateProperties(); + + animator.start(); + } + + private void updateProperties() { + boolean changed = false; + if (!effects.isEmpty()) { + changed = changed || count != Math.min(MAX_COUNT, effects.size()); + + count = Math.min(MAX_COUNT, effects.size()); + for (int i = 0; i < count; ++i) { + Effect e = effects.get(i); + + changed = changed || Math.abs(t[i] - e.t) > 0.001f; + t[i] = e.t; + changed = changed || Math.abs(centerX[i] - e.cx) > 0.001f; + centerX[i] = e.cx; + changed = changed || Math.abs(centerY[i] - e.cy) > 0.001f; + centerY[i] = e.cy; + changed = changed || Math.abs(intensity[i] - e.intensity) > 0.001f; + intensity[i] = e.intensity; + } + + changed = changed || width != view.getWidth() || height != view.getHeight() || Math.abs(density - AndroidUtilities.density) > 0.01f; + if (changed) { + shader.setIntUniform("count", count); + shader.setFloatUniform("t", t); + shader.setFloatUniform("centerX", centerX); + shader.setFloatUniform("centerY", centerY); + shader.setFloatUniform("intensity", intensity); + setupSizeUniforms(false); + effect = RenderEffect.createRuntimeShaderEffect(shader, "img"); + } + } + view.setRenderEffect(effects.isEmpty() ? null : effect); + if (changed) { + view.invalidate(); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java new file mode 100644 index 000000000..7c2008604 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java @@ -0,0 +1,146 @@ +package org.telegram.ui.Stars; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.graphics.Outline; +import android.graphics.Path; +import android.graphics.RenderEffect; +import android.os.Build; +import android.view.RoundedCorner; +import android.view.View; +import android.view.ViewOutlineProvider; +import android.view.WindowInsets; +import android.widget.FrameLayout; + +import androidx.annotation.RequiresApi; + +import com.google.zxing.common.detector.MathUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.ui.Components.CubicBezierInterpolator; + +import java.util.ArrayList; + +// for Android that doesn't support AGSL +@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) +public class SuperRippleFallback extends ISuperRipple { + + public static class Effect { + public final ValueAnimator animator; + public final float cx, cy; + public final float intensity; + public float t; + public float duration; + + private Effect( + float cx, float cy, + float intensity, + ValueAnimator animator + ) { + this.cx = cx; + this.cy = cy; + this.intensity = intensity; + this.animator = animator; + } + } + + public final float[] radii = new float[8]; + private final Path outlineProviderPath = new Path(); + private final ViewOutlineProvider outlineProvider = new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radii[0]); + } + } + }; + + public final ArrayList effects = new ArrayList<>(); + public final int MAX_COUNT = 10; + + public SuperRippleFallback(View view) { + super(view); + +// radii[0] = radii[1] = // top left +// radii[2] = radii[3] = // top right +// radii[4] = radii[5] = // bottom right +// radii[6] = radii[7] = // bottom left + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + final WindowInsets insets = view.getRootWindowInsets(); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + final RoundedCorner topLeftCorner = insets.getRoundedCorner(RoundedCorner.POSITION_TOP_LEFT); + final RoundedCorner topRightCorner = insets.getRoundedCorner(RoundedCorner.POSITION_TOP_RIGHT); + final RoundedCorner bottomLeftCorner = insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT); + final RoundedCorner bottomRightCorner = insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_RIGHT); + + radii[0] = radii[1] = topLeftCorner == null ? 0 : topLeftCorner.getRadius(); + radii[2] = radii[3] = topRightCorner == null ? 0 : topRightCorner.getRadius(); + radii[4] = radii[5] = bottomRightCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomRightCorner.getRadius(); + radii[6] = radii[7] = bottomLeftCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomLeftCorner.getRadius(); + } else { + + } + } + + outlineProviderPath.rewind(); + outlineProviderPath.addRoundRect(0, 0, view.getWidth(), view.getHeight(), radii, Path.Direction.CW); + } + + @Override + public void animate(float cx, float cy, float intensity) { + if (effects.size() >= MAX_COUNT) return; + + final float duration = 0.5f; + + final ValueAnimator animator = ValueAnimator.ofFloat(0f, duration); + final Effect effect = new Effect(cx, cy, intensity, animator); + effect.duration = duration; + + animator.addUpdateListener(anm -> { + effect.t = (float) anm.getAnimatedValue(); + updateProperties(); + }); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + effects.remove(effect); + updateProperties(); + } + }); + animator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animator.setDuration((long) (duration * 1000L)); + + effects.add(effect); + updateProperties(); + + animator.start(); + } + + private void updateProperties() { + float s = 1f, px = 0, py = 0, ps = 0; + for (Effect effect : effects) { + float t = effect.t / effect.duration; + float x = (1f - (float) Math.sin(Math.PI * t)); + s *= (1f - .04f * effect.intensity) + .04f * effect.intensity * x; + px += effect.cx * 1f; + py += effect.cy * 1f; + ps += 1f; + } + if (ps < 1) { + px += view.getWidth() / 2f * (1f - ps); + py += view.getHeight() / 2f * (1f - ps); + ps = 1f; + } + view.setScaleX(s); + view.setScaleY(s); + view.setPivotX(px / ps); + view.setPivotY(py / ps); + if (view.getOutlineProvider() != (effects.isEmpty() ? null : outlineProvider)) { + view.setOutlineProvider(effects.isEmpty() ? null : outlineProvider); + view.invalidate(); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java index 9abad43c6..0c22ae065 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java @@ -119,7 +119,7 @@ public class StatisticActivity extends BaseFragment implements NotificationCente args.putBoolean("is_megagroup", chat.megagroup); args.putBoolean("start_from_boosts", startFromBoosts); TLRPC.ChatFull chatInfo = MessagesController.getInstance(UserConfig.selectedAccount).getChatFull(chat.id); - if (chatInfo == null || !chatInfo.can_view_stats) { + if (chatInfo == null || !chatInfo.can_view_stats && !chatInfo.can_view_stars_revenue) { return new BoostsActivity(-chat.id); } return new StatisticActivity(args); @@ -172,7 +172,7 @@ public class StatisticActivity extends BaseFragment implements NotificationCente private BaseChartView.SharedUiComponents sharedUi; private LinearLayout progressLayout; private final boolean isMegagroup; - private boolean startFromBoosts; + private boolean startFromBoosts, startFromMonetization; private long maxDateOverview; private long minDateOverview; @@ -187,6 +187,7 @@ public class StatisticActivity extends BaseFragment implements NotificationCente chatId = args.getLong("chat_id"); isMegagroup = args.getBoolean("is_megagroup", false); startFromBoosts = args.getBoolean("start_from_boosts", false); + startFromMonetization = args.getBoolean("start_from_monetization", false); onlyBoostsStat = args.getBoolean("only_boosts", false); this.chat = getMessagesController().getChatFull(chatId); } @@ -571,16 +572,20 @@ public class StatisticActivity extends BaseFragment implements NotificationCente sharedUi = new BaseChartView.SharedUiComponents(); TLRPC.Chat currentChat = MessagesController.getInstance(currentAccount).getChat(chatId); TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(chatId); + final boolean hasStats = chatFull != null && chatFull.can_view_stats; boolean isBoostSupported = ChatObject.isBoostSupported(currentChat); final boolean hasMonetization = ChatObject.isChannelAndNotMegaGroup(currentChat) && chatFull != null && (chatFull.can_view_revenue || chatFull.can_view_stars_revenue); BottomPagerTabs storiesTabsView = new BottomPagerTabs(context, getResourceProvider()) { @Override public Tab[] createTabs() { ArrayList tabs = new ArrayList<>(); - tabs.add(new Tab(0, R.raw.stats, 25, 49, getString(R.string.Statistics)).customFrameInvert()); - tabs.add(new Tab(1, R.raw.boosts, 25, 49, getString(R.string.Boosts))); + int i = 0; + if (hasStats) { + tabs.add(new Tab(i++, R.raw.stats, 25, 49, getString(R.string.Statistics)).customFrameInvert()); + } + tabs.add(new Tab(i++, R.raw.boosts, 25, 49, getString(R.string.Boosts))); if (hasMonetization) { - tabs.add(new Tab(2, R.raw.monetize, 19, 45, getString(R.string.Monetization))); + tabs.add(new Tab(i++, R.raw.monetize, 19, 45, getString(R.string.Monetization))); } return tabs.toArray(new Tab[0]); } @@ -611,37 +616,33 @@ public class StatisticActivity extends BaseFragment implements NotificationCente monetizationLayout = new ChannelMonetizationLayout(getContext(), StatisticActivity.this, currentAccount, -chatId, getResourceProvider(), chatFull.can_view_revenue, chatFull.can_view_stars_revenue); monetizationLayout.setActionBar(actionBar); } - boolean showTabs = isBoostSupported && !onlyBoostsStat; - if (showTabs && startFromBoosts) { - viewPagerFixed.setPosition(1); - } viewPagerFixed.setAdapter(new ViewPagerFixed.Adapter() { @Override public int getItemCount() { - int count = onlyBoostsStat ? 1 : 1 + (isBoostSupported ? 1 : 0); - if (hasMonetization) { - count++; - } - return count; + if (onlyBoostsStat) return 1; + return ( + (hasStats ? 1 : 0) + + (isBoostSupported ? 1 : 0) + + (hasMonetization ? 1 : 0) + ); } @Override public View createView(int viewType) { - if (viewType == 0) { - return statisticLayout; + if (onlyBoostsStat) { + return boostLayout; } - viewType--; - if (viewType == 0) { - if (!onlyBoostsStat && isBoostSupported) { - return boostLayout; - } else { - return monetizationLayout; - } - } else { + if (hasStats) { + if (viewType == 0) return statisticLayout; viewType--; } - if (viewType == 0) { - return monetizationLayout; + if (isBoostSupported) { + if (viewType == 0) return boostLayout; + viewType--; + } + if (hasMonetization) { + if (viewType == 0) return monetizationLayout; + viewType--; } return statisticLayout; } @@ -656,6 +657,13 @@ public class StatisticActivity extends BaseFragment implements NotificationCente } }); + boolean showTabs = isBoostSupported && !onlyBoostsStat; + if (showTabs && startFromBoosts) { + viewPagerFixed.setPosition(hasStats ? 1 : 0); + } else if (showTabs && startFromMonetization) { + storiesTabsView.setProgress((hasStats ? 1 : 0) + (!onlyBoostsStat && isBoostSupported ? 1 : 0)); + viewPagerFixed.setPosition((hasStats ? 1 : 0) + (!onlyBoostsStat && isBoostSupported ? 1 : 0)); + } FrameLayout contentLayout = new SizeNotifierFrameLayout(getContext()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java index 11a31bfb2..4587fcbdc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java @@ -827,14 +827,14 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica if (span instanceof URLSpanUserMention) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(Utilities.parseLong(((URLSpanUserMention) span).getURL())); if (user != null) { - MessagesController.openChatOrProfileWith(user, null, storyViewer.fragment, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, storyViewer.fragment, 0, false); } } else if (span instanceof URLSpanNoUnderline) { String str = ((URLSpanNoUnderline) span).getURL(); - if (str != null && str.startsWith("#")) { + if (str != null && (str.startsWith("#") || str.startsWith("$"))) { Bundle args = new Bundle(); args.putInt("type", MediaActivity.TYPE_STORIES_SEARCH); - args.putString("hashtag", str.substring(1)); + args.putString("hashtag", str); if (storyViewer != null) { storyViewer.presentFragment(new MediaActivity(args, null)); } @@ -891,7 +891,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica try { try { Uri uri = Uri.parse(formattedUrl); - formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); } @@ -1158,7 +1158,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica MessagesController.getInstance(currentAccount).getStoriesController().getDraftsController().load(); } final boolean userCanEditStory = isSelf || MessagesController.getInstance(currentAccount).getStoriesController().canEditStory(currentStory.storyItem); - final boolean canEditStory = isSelf || (isChannel && userCanEditStory); + final boolean canEditStory = isSelf || ((isChannel || isBotsPreview()) && userCanEditStory); final boolean speedControl = currentStory.isVideo; popupMenu = new CustomPopupMenu(getContext(), resourcesProvider, speedControl) { private boolean edit; @@ -1290,8 +1290,8 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica popupLayout.addView(gap, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); } - if (!unsupported && MessagesController.getInstance(currentAccount).storiesEnabled() && userCanEditStory) { - editStoryItem = ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_edit, LocaleController.getString("EditStory", R.string.EditStory), false, resourcesProvider); + if (!unsupported && (isBotsPreview() || MessagesController.getInstance(currentAccount).storiesEnabled()) && userCanEditStory) { + editStoryItem = ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_edit, LocaleController.getString(isBotsPreview() ? R.string.EditBotPreview : R.string.EditStory), false, resourcesProvider); editStoryItem.setOnClickListener(v -> { if (v.getAlpha() < 1) { AndroidUtilities.shakeViewSpring(v, shiftDp = -shiftDp); @@ -1320,6 +1320,14 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica if (entry != null) { entry = entry.copy(); } + if (isBotsPreview()) { + entry.botId = dialogId; + entry.editingBotPreview = MessagesController.toInputMedia(currentStory.storyItem.media); + if (storyViewer.storiesList instanceof StoriesController.BotPreviewsList) { + StoriesController.BotPreviewsList list = (StoriesController.BotPreviewsList) storyViewer.storiesList; + entry.botLang = list.lang_code; + } + } editor.openEdit(StoryRecorder.SourceView.fromStoryViewer(storyViewer), entry, time, true); editor.setOnFullyOpenListener(() -> { editOpened = true; @@ -1370,6 +1378,129 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } } + if (currentStory.storyItem != null && currentStory.isVideo && (currentStory.storyItem.pinned || isEditBotsPreview())) { + ActionBarMenuSubItem item = ActionBarMenuItem.addItem(popupLayout, R.drawable.menu_cover_stories, LocaleController.getString(R.string.StoryEditCoverMenu), false, resourcesProvider); + item.setOnClickListener(v -> { + File f = currentStory.getPath(); + if (f == null || !f.exists()) { + showDownloadAlert(); + return; + } + Activity activity = AndroidUtilities.findActivity(context); + if (activity == null) { + return; + } + edit = true; + if (popupMenu != null) { + popupMenu.dismiss(); + } + Runnable openEdit = () -> { + StoryRecorder editor = StoryRecorder.getInstance(activity, currentAccount); + long time = 0; + if (playerSharedScope != null && playerSharedScope.player != null) { + time = playerSharedScope.player.currentPosition; + } + StoryEntry entry = StoryEntry.fromStoryItem(currentStory.getPath(), currentStory.storyItem); + entry.editStoryPeerId = dialogId; + entry.cover = StoryEntry.getCoverTime(currentStory.storyItem); + if (entry != null) { + entry = entry.copy(); + } + entry.isEditingCover = true; + entry.editingCoverDocument = currentStory.storyItem.media.document; + final TL_stories.StoryItem finalStoryItem = currentStory.storyItem; + entry.updateDocumentRef = whenDone -> { + if (finalStoryItem instanceof StoriesController.BotPreview && ((StoriesController.BotPreview) finalStoryItem).list != null) { + StoriesController.BotPreviewsList list = ((StoriesController.BotPreview) finalStoryItem).list; + list.reload(() -> { + for (int i = 0; i < list.messageObjects.size(); ++i) { + MessageObject msg = list.messageObjects.get(i); + if (msg == null || msg.storyItem == null || msg.storyItem.media == null) continue; + if (storyItem.media.document != null) { + if (msg.storyItem.media.document == null) continue; + if (msg.storyItem.media.document.id == storyItem.media.document.id) { + whenDone.run(msg.storyItem.media.document); + return; + } + } + } + whenDone.run(null); + }); + } else { + TL_stories.TL_stories_getStoriesByID req = new TL_stories.TL_stories_getStoriesByID(); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(finalStoryItem.dialogId); + req.id.add(finalStoryItem.id); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_stories.TL_stories_stories) { + TL_stories.TL_stories_stories stories = (TL_stories.TL_stories_stories) res; + MessagesController.getInstance(currentAccount).putUsers(stories.users, false); + MessagesController.getInstance(currentAccount).putChats(stories.chats, false); + for (int i = 0; i < stories.stories.size(); ++i) { + if (stories.stories.get(i).id == finalStoryItem.id) { + whenDone.run(stories.stories.get(i).media.document); + return; + } + } + } + whenDone.run(null); + })); + } + }; + if (isBotsPreview()) { + entry.botId = dialogId; + entry.editingBotPreview = MessagesController.toInputMedia(currentStory.storyItem.media); + if (storyViewer.storiesList instanceof StoriesController.BotPreviewsList) { + StoriesController.BotPreviewsList list = (StoriesController.BotPreviewsList) storyViewer.storiesList; + entry.botLang = list.lang_code; + } + } + editor.openEdit(StoryRecorder.SourceView.fromStoryViewer(storyViewer), entry, time, true); + editor.setOnFullyOpenListener(() -> { + editOpened = true; + setActive(false); + }); + editor.setOnPrepareCloseListener((t, close, sent, did) -> { + final long start = System.currentTimeMillis(); + if (playerSharedScope.player == null) { + delegate.setPopupIsVisible(false); + setActive(true); + editOpened = false; + onImageReceiverThumbLoaded = () -> { + AndroidUtilities.cancelRunOnUIThread(close); + AndroidUtilities.runOnUIThread(close); + }; + if (sent) { + updatePosition(); + } + AndroidUtilities.runOnUIThread(close, 400); + return; + } + playerSharedScope.firstFrameRendered = playerSharedScope.player.firstFrameRendered = false; + playerSharedScope.player.setOnReadyListener(() -> { + AndroidUtilities.cancelRunOnUIThread(close); + AndroidUtilities.runOnUIThread(close, Math.max(0, 32L - (System.currentTimeMillis() - start))); + }); + delegate.setPopupIsVisible(false); + if (muteIconView != null) { + muteIconView.setAnimation(sharedResources.muteDrawable); + } + if (videoDuration > 0 && t > videoDuration - 1400) { + t = 0L; + } + setActive(t, true); + editOpened = false; + AndroidUtilities.runOnUIThread(close, 400); + if (sent) { + updatePosition(); + } + }); + }; + if (!delegate.releasePlayer(openEdit)) { + openEdit.run(); + } + }); + } + if (isSelf || (isChannel && MessagesController.getInstance(currentAccount).getStoriesController().canEditStories(storyItem.dialogId))) { final boolean pin = !storyItem.pinned; String title; @@ -1476,7 +1607,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica name = name.substring(0, index); } String finalName = name; - if (!UserObject.isService(dialogId)) { + if (!UserObject.isService(dialogId) && !isBotsPreview()) { if (!muted) { ActionBarMenuSubItem item = ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_mute, LocaleController.getString("NotificationsStoryMute2", R.string.NotificationsStoryMute2), false, resourcesProvider); item.setOnClickListener(v -> { @@ -1633,7 +1764,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica addViewStatistics(popupLayout, currentStory.storyItem); if (!unsupported) { - if (!UserObject.isService(dialogId)) { + if (!UserObject.isService(dialogId) && !isBotsPreview()) { ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_report, LocaleController.getString("ReportChat", R.string.ReportChat), false, resourcesProvider).setOnClickListener(v -> { AlertsCreator.createReportAlert(getContext(), dialogId, 0, currentStory.storyItem.id, storyViewer.fragment, resourcesProvider, null); if (popupMenu != null) { @@ -1792,6 +1923,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } private void createStealthModeItem(ActionBarPopupWindow.ActionBarPopupWindowLayout popupLayout) { + if (isBotsPreview()) return; if (UserConfig.getInstance(currentAccount).isPremium()) { ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_stories_stealth2, LocaleController.getString(R.string.StealthModeButton), false, resourcesProvider).setOnClickListener(v -> { if (stealthModeIsActive) { @@ -2721,6 +2853,10 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } checkStealthMode(false); + if (isBotsPreview()) { + chatActivityEnterView.setVisibility(View.GONE); + } + reactionsContainerIndex = getChildCount(); } @@ -2773,7 +2909,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica SendMessagesHelper.prepareSendingBotContextResult(storyViewer.fragment, getAccountInstance(), result, params, dialogId, null, null, currentStory.storyItem, null, notify, scheduleDate, null, 0); chatActivityEnterView.setFieldText(""); afterMessageSend(); - MediaDataController.getInstance(currentAccount).increaseInlineRaiting(uid); + MediaDataController.getInstance(currentAccount).increaseInlineRating(uid); } }); addView(mentionContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.BOTTOM)); @@ -3295,7 +3431,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } if (chatActivityEnterView != null) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); - chatActivityEnterView.setVisibility(isGroup && (ChatObject.canSendPlain(chat) || ChatObject.isPossibleRemoveChatRestrictionsByBoosts(chat)) ? View.VISIBLE : View.GONE); + chatActivityEnterView.setVisibility(!isBotsPreview() && isGroup && (ChatObject.canSendPlain(chat) || ChatObject.isPossibleRemoveChatRestrictionsByBoosts(chat)) ? View.VISIBLE : View.GONE); chatActivityEnterView.getEditField().setText(storyViewer.getDraft(dialogId, currentStory.storyItem)); chatActivityEnterView.setDialogId(dialogId, currentAccount); chatActivityEnterView.updateRecordButton(chat, null); @@ -3377,7 +3513,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } updatePosition(); if (chatActivityEnterView != null) { - chatActivityEnterView.setVisibility(UserObject.isService(dialogId) ? View.GONE : View.VISIBLE); + chatActivityEnterView.setVisibility(isBotsPreview() || UserObject.isService(dialogId) ? View.GONE : View.VISIBLE); chatActivityEnterView.getEditField().setText(storyViewer.getDraft(dialogId, currentStory.storyItem)); chatActivityEnterView.setDialogId(dialogId, currentAccount); TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(dialogId); @@ -3465,6 +3601,16 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica private void updateSelectedPosition() { if (day != null) { + int offset = 0; + if (uploadingStories != null && !uploadingStories.isEmpty()) { + offset = uploadingStories.size(); + for (int i = 0; i < uploadingStories.size(); ++i) { + if (Long.hashCode(uploadingStories.get(i).random_id) == storyViewer.dayStoryId) { + selectedPosition = i; + return; + } + } + } int index = day.indexOf(storyViewer.dayStoryId); if (index < 0) { if (!day.isEmpty()) { @@ -3475,7 +3621,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } } } - selectedPosition = index; + selectedPosition = offset + index; } else { selectedPosition = storyViewer.savedPositions.get(dialogId, -1); if (selectedPosition == -1) { @@ -3499,6 +3645,19 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica if (storyViewer.isSingleStory) { storyItems.add(storyViewer.singleStory); } else if (day != null && storyViewer.storiesList != null) { + if (storyViewer.storiesList instanceof StoriesController.BotPreviewsList) { + uploadingStories.clear(); + ArrayList list = MessagesController.getInstance(currentAccount).getStoriesController().getUploadingStories(dialogId); + final String lang_code = ((StoriesController.BotPreviewsList) storyViewer.storiesList).lang_code; + if (list != null) { + for (int i = 0; i < list.size(); ++i) { + StoriesController.UploadingStory story = list.get(i); + if (story.entry != null && !story.entry.isEdit && TextUtils.equals(story.entry.botLang, lang_code)) { + uploadingStories.add(story); + } + } + } + } for (int id : day) { MessageObject messageObject = storyViewer.storiesList.findMessageObject(id); if (messageObject != null && messageObject.storyItem != null) { @@ -3612,8 +3771,8 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica private void deleteStory() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); - builder.setTitle(LocaleController.getString("DeleteStoryTitle", R.string.DeleteStoryTitle)); - builder.setMessage(LocaleController.getString("DeleteStorySubtitle", R.string.DeleteStorySubtitle)); + builder.setTitle(LocaleController.getString(isBotsPreview() ? R.string.DeleteBotPreviewTitle : R.string.DeleteStoryTitle)); + builder.setMessage(LocaleController.getString(isBotsPreview() ? R.string.DeleteBotPreviewSubtitle : R.string.DeleteStorySubtitle)); builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialog, which) -> { currentStory.cancelOrDelete(); updateStoryItems(); @@ -3890,15 +4049,23 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica final boolean wasEditing = isEditing; final boolean wasFailed = isFailed; + final StoriesController.UploadingStory uploadingStory; + final TL_stories.StoryItem storyItem; + + if (storyViewer != null && storyViewer.storiesList != null && storyViewer.storiesList.type == StoriesController.StoriesList.TYPE_BOTS) { + uploadingStory = position >= 0 && position < uploadingStories.size() ? uploadingStories.get(position) : null; + int p = position - uploadingStories.size(); + storyItem = p >= 0 && p < storyItems.size() ? storyItems.get(p) : null; + } else { + storyItem = position >= 0 && position < storyItems.size() ? storyItems.get(position) : null; + int p = position - storyItems.size(); + uploadingStory = p >= 0 && p < uploadingStories.size() ? uploadingStories.get(p) : null; + } + currentStory.editingSourceItem = null; - if (!uploadingStories.isEmpty() && position >= storyItems.size()) { + if (uploadingStory != null) { isUploading = true; isEditing = false; - position -= storyItems.size(); - if (position < 0 || position >= uploadingStories.size()) { - return; - } - StoriesController.UploadingStory uploadingStory = uploadingStories.get(position); isFailed = uploadingStory.failed; isUploading = !isFailed; Drawable thumbDrawable = null; @@ -3921,11 +4088,10 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica isUploading = false; isEditing = false; isFailed = false; - if (position < 0 || position > storyItems.size() - 1) { + if (storyItem == null) { storyViewer.close(true); return; } - TL_stories.StoryItem storyItem = storyItems.get(position); StoriesController.UploadingStory editingStory = storiesController.findEditingStory(dialogId, storyItem); if (editingStory != null) { isEditing = true; @@ -4082,6 +4248,16 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } else { subtitle = StoriesUtilities.getUploadingStr(headerView.subtitleView[0], false, isEditing); } + } else if (isBotsPreview()) { + if (currentStory.storyItem == null || currentStory.storyItem.media == null) { + subtitle = ""; + } else if (currentStory.storyItem.media.document != null) { + subtitle = LocaleController.formatStoryDate(currentStory.storyItem.media.document.date); + } else if (currentStory.storyItem.media.photo != null) { + subtitle = LocaleController.formatStoryDate(currentStory.storyItem.media.photo.date); + } else { + subtitle = ""; + } } else if (currentStory.storyItem != null) { if (currentStory.storyItem.date == -1) { subtitle = LocaleController.getString("CachedStory", R.string.CachedStory); @@ -4242,7 +4418,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } } else { TLRPC.Chat chat = dialogId < 0 ? MessagesController.getInstance(currentAccount).getChat(-dialogId) : null; - if (UserObject.isService(dialogId) && chatActivityEnterView != null) { + if ((UserObject.isService(dialogId) || isBotsPreview()) && chatActivityEnterView != null) { chatActivityEnterView.setVisibility(View.GONE); } else if (!isSelf && (!isChannel || isGroup && (ChatObject.canSendPlain(chat) || ChatObject.isPossibleRemoveChatRestrictionsByBoosts(chat))) && chatActivityEnterView != null) { chatActivityEnterView.setVisibility(View.VISIBLE); @@ -4272,7 +4448,7 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica replyDisabledTextView.setVisibility(View.GONE); } if (bottomActionsLinearLayout != null) { - bottomActionsLinearLayout.setVisibility(View.VISIBLE); + bottomActionsLinearLayout.setVisibility(isBotsPreview() ? View.GONE : View.VISIBLE); } } @@ -4426,6 +4602,24 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica AndroidUtilities.cancelRunOnUIThread(showTapToSoundHint); AndroidUtilities.runOnUIThread(showTapToSoundHint, 250); } + + if (optionsIconView != null) { + optionsIconView.setVisibility(isBotsPreview() && !isEditBotsPreview() && (currentStory == null || !currentStory.isVideo) ? View.GONE : View.VISIBLE); + } + } + + private boolean isEditBotsPreview() { + if (!isBotsPreview()) return false; + TLRPC.User bot = MessagesController.getInstance(currentAccount).getUser(storyViewer.storiesList.dialogId); + return bot != null && bot.bot && bot.bot_can_edit; + } + + private boolean isBotsPreview() { + return ( + storyViewer != null && + storyViewer.storiesList != null && + storyViewer.storiesList.type == StoriesController.StoriesList.TYPE_BOTS + ); } private final Runnable showTapToSoundHint = () -> { @@ -5339,11 +5533,18 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica addView(backupImageView, LayoutHelper.createFrame(32, 32, 0, 12, 2, 0, 0)); setClipChildren(false); - titleView = new SimpleTextView(context); + titleView = new SimpleTextView(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setPivotY(getMeasuredHeight() / 2f); + } + }; titleView.setTextSize(14); titleView.setTypeface(AndroidUtilities.bold()); titleView.setMaxLines(1); titleView.setEllipsizeByGradient(dp(4)); + titleView.setPivotX(0); // titleView.setSingleLine(true); // titleView.setEllipsize(TextUtils.TruncateAt.END); NotificationCenter.listenEmojiLoading(titleView); @@ -5674,7 +5875,9 @@ public class PeerStoriesView extends SizeNotifierFrameLayout implements Notifica } void cancelOrDelete() { - if (storyItem != null) { + if (storyItem instanceof StoriesController.BotPreview) { + ((StoriesController.BotPreview) storyItem).list.delete(storyItem.media); + } else if (storyItem != null) { storiesController.deleteStory(dialogId, storyItem); } else if (uploadingStory != null) { uploadingStory.cancel(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java index 02dbd480a..5c8ffcbc0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java @@ -289,10 +289,11 @@ public class SelfStoryViewsPage extends FrameLayout implements NotificationCente return false; } - boolean isBlocked = messagesController.blockePeers.indexOfKey(user.id) >= 0; - boolean isContact = user != null && (user.contact || ContactsController.getInstance(currentAccount).contactsDict.get(user.id) != null); - boolean storiesShown = isStoryShownToUser(viewUser); - boolean storiesBlocked = messagesController.getStoriesController().isBlocked(viewUser); + final boolean isBlocked = messagesController.blockePeers.indexOfKey(user.id) >= 0; + final boolean isContact = user != null && (user.contact || ContactsController.getInstance(currentAccount).contactsDict.get(user.id) != null); + final boolean storiesShown = isStoryShownToUser(viewUser); + final boolean storiesBlocked = messagesController.getStoriesController().isBlocked(viewUser); + final boolean isSelf = UserObject.isUserSelf(user); String firstName = TextUtils.isEmpty(user.first_name) ? (TextUtils.isEmpty(user.last_name) ? "" : user.last_name) : user.first_name; int index; @@ -300,19 +301,22 @@ public class SelfStoryViewsPage extends FrameLayout implements NotificationCente firstName = firstName.substring(0, index); } final String firstNameFinal = firstName; + if (isSelf) { + return false; + } ItemOptions itemOptions = ItemOptions.makeOptions(storyViewer.containerView, resourcesProvider, view) .setGravity(Gravity.LEFT).ignoreX() .setScrimViewBackground(new ColorDrawable(Theme.getColor(Theme.key_dialogBackground, resourcesProvider))) .setDimAlpha(0x85) - .addIf(storiesShown && !storiesBlocked && !isBlocked, R.drawable.msg_stories_myhide, LocaleController.formatString(R.string.StoryHideFrom, firstNameFinal), () -> { + .addIf(storiesShown && !storiesBlocked && !isBlocked && !isSelf, R.drawable.msg_stories_myhide, LocaleController.formatString(R.string.StoryHideFrom, firstNameFinal), () -> { messagesController.getStoriesController().updateBlockUser(user.id, true); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider) .createSimpleBulletin(R.raw.ic_ban, LocaleController.formatString(R.string.StoryHidFromToast, firstNameFinal)) .show(); cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }).makeMultiline(false).cutTextInFancyHalf() - .addIf(storiesBlocked && !isBlocked, R.drawable.msg_menu_stories, LocaleController.formatString(R.string.StoryShowBackTo, firstNameFinal), () -> { + .addIf(storiesBlocked && !isBlocked && !isSelf, R.drawable.msg_menu_stories, LocaleController.formatString(R.string.StoryShowBackTo, firstNameFinal), () -> { messagesController.getStoriesController().updateBlockUser(user.id, false); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider) .createSimpleBulletin(R.raw.contact_check, LocaleController.formatString(R.string.StoryShownBackToToast, firstNameFinal)) @@ -328,18 +332,18 @@ public class SelfStoryViewsPage extends FrameLayout implements NotificationCente // .show(); // cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); // }) - .addIf(!isContact && !isBlocked, R.drawable.msg_user_remove, LocaleController.getString(R.string.BlockUser), true, () -> { + .addIf(!isContact && !isBlocked && !isSelf, R.drawable.msg_user_remove, LocaleController.getString(R.string.BlockUser), true, () -> { messagesController.blockPeer(user.id); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider).createBanBulletin(true).show(); cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }) - .addIf(!isContact && isBlocked, R.drawable.msg_block, LocaleController.getString(R.string.Unblock), () -> { + .addIf(!isContact && isBlocked && !isSelf, R.drawable.msg_block, LocaleController.getString(R.string.Unblock), () -> { messagesController.getStoriesController().updateBlockUser(user.id, false); messagesController.unblockPeer(user.id); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider).createBanBulletin(false).show(); cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }) - .addIf(isContact, R.drawable.msg_user_remove, LocaleController.getString(R.string.StoryDeleteContact), true, () -> { + .addIf(isContact && !isSelf, R.drawable.msg_user_remove, LocaleController.getString(R.string.StoryDeleteContact), true, () -> { ArrayList users = new ArrayList<>(); users.add(user); ContactsController.getInstance(currentAccount).deleteContact(users, false); @@ -349,6 +353,7 @@ public class SelfStoryViewsPage extends FrameLayout implements NotificationCente cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }); + boolean shownCustomEmoji = false; if (viewUser.reaction instanceof TLRPC.TL_reactionCustomEmoji) { TLRPC.TL_reactionCustomEmoji customEmoji = (TLRPC.TL_reactionCustomEmoji) viewUser.reaction; TLRPC.InputStickerSet inputStickerSet = AnimatedEmojiDrawable.getDocumentFetcher(currentAccount).findStickerSet(customEmoji.document_id); @@ -377,9 +382,14 @@ public class SelfStoryViewsPage extends FrameLayout implements NotificationCente itemOptions.dismiss(); }); itemOptions.addView(button); + shownCustomEmoji = true; } } + if (itemOptions.getItemsCount() <= 0 && !shownCustomEmoji) { + return false; + } + itemOptions.show(); try { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java index 9d10db607..3b34ccf27 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java @@ -2,6 +2,7 @@ package org.telegram.ui.Stories; import android.content.Intent; import android.content.SharedPreferences; +import android.nfc.tech.NfcA; import android.text.TextUtils; import android.util.SparseArray; import android.webkit.MimeTypeMap; @@ -24,6 +25,7 @@ import org.telegram.messenger.DialogObject; import org.telegram.messenger.DownloadController; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; +import org.telegram.messenger.FileRefController; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MediaController; @@ -35,6 +37,7 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.NotificationsController; import org.telegram.messenger.R; import org.telegram.messenger.SendMessagesHelper; +import org.telegram.messenger.Timer; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; @@ -46,6 +49,7 @@ import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; @@ -54,9 +58,9 @@ import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; import org.telegram.ui.Components.Reactions.ReactionImageHolder; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; -import org.telegram.ui.Components.Text; import org.telegram.ui.LaunchActivity; import org.telegram.ui.StatisticActivity; +import org.telegram.ui.Stories.bots.BotPreviewsEditContainer; import org.telegram.ui.Stories.recorder.DraftsController; import org.telegram.ui.Stories.recorder.StoryEntry; import org.telegram.ui.Stories.recorder.StoryPrivacyBottomSheet; @@ -1485,8 +1489,8 @@ public class StoriesController { } } - public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable callback, int classGuid) { - storiesStorage.fillMessagesWithStories(messagesWithUnknownStories, callback, classGuid); + public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable callback, int classGuid, Timer timer) { + storiesStorage.fillMessagesWithStories(messagesWithUnknownStories, callback, classGuid, timer); } LongSparseArray resolvedStories = new LongSparseArray<>(); @@ -1767,11 +1771,11 @@ public class StoriesController { public final long random_id; public final boolean edit; - final StoryEntry entry; + public final StoryEntry entry; private boolean entryDestroyed; String path; - String firstFramePath; - float progress; + public String firstFramePath; + public float progress; float convertingProgress, uploadProgress; boolean ready; boolean isVideo; @@ -1781,15 +1785,17 @@ public class StoriesController { private long firstSecondSize = -1; private long duration; - private MessageObject messageObject; - private VideoEditedInfo info; - private boolean putMessages; - private boolean isCloseFriends; + public MessageObject messageObject; + public VideoEditedInfo info; + public boolean putMessages; + public boolean isCloseFriends; public boolean hadFailed; public boolean failed; long dialogId; + public MessageObject sharedMessageObject; + public UploadingStory(StoryEntry entry) { this.entry = entry; random_id = Utilities.random.nextLong(); @@ -1799,7 +1805,9 @@ public class StoriesController { } failed = hadFailed = entry.isError; - if (entry.isEdit) { + if (entry.botId != 0) { + dialogId = entry.botId; + } else if (entry.isEdit) { dialogId = entry.editStoryPeerId; } else { if (entry.peer == null || entry.peer instanceof TLRPC.TL_inputPeerSelf) { @@ -1822,7 +1830,11 @@ public class StoriesController { } public void start() { - if ((entry.isEdit || entry.isRepost && entry.repostMedia != null) && (!entry.editedMedia && entry.round == null)) { + if (entry.isEditingCover) { + TLRPC.TL_inputFileStoryDocument inputFile = new TLRPC.TL_inputFileStoryDocument(); + inputFile.doc = MessagesController.toInputDocument(entry.editingCoverDocument); + sendUploadedRequest(inputFile); + } else if ((entry.isEdit || entry.isRepost && entry.repostMedia != null) && (!entry.editedMedia && entry.round == null)) { sendUploadedRequest(null); return; } @@ -1911,6 +1923,22 @@ public class StoriesController { map.remove(entry.editStoryId); } } + if (previewMedia != null) { + StoriesList storiesList = getStoriesList(dialogId, StoriesList.TYPE_BOTS, false); + if (entry != null && entry.isEdit) { + if (storiesList instanceof BotPreviewsList) { + ((BotPreviewsList) storiesList).edit(entry.editingBotPreview, previewMedia); + } + BotPreviewsEditContainer.edit(currentAccount, dialogId, entry.botLang, entry.editingBotPreview, previewMedia); + } else { + if (storiesList instanceof BotPreviewsList) { + ((BotPreviewsList) storiesList).push(previewMedia); + } + BotPreviewsEditContainer.push(currentAccount, dialogId, entry.botLang, previewMedia); + } + + previewMedia = null; + } NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.storiesUpdated); if (entry != null && !entry.isEditSaved && !entryDestroyed) { entry.destroy(false); @@ -2022,11 +2050,24 @@ public class StoriesController { TLRPC.TL_inputMediaUploadedDocument inputMediaVideo = new TLRPC.TL_inputMediaUploadedDocument(); inputMediaVideo.file = uploadedFile; TLRPC.TL_documentAttributeVideo attributeVideo = new TLRPC.TL_documentAttributeVideo(); - SendMessagesHelper.fillVideoAttribute(path, attributeVideo, null); + if (entry.editingCoverDocument != null) { + for (int i = 0; i < entry.editingCoverDocument.attributes.size(); ++i) { + if (entry.editingCoverDocument.attributes.get(i) instanceof TLRPC.TL_documentAttributeVideo) { + attributeVideo = (TLRPC.TL_documentAttributeVideo) entry.editingCoverDocument.attributes.get(i); + break; + } + } + } else { + SendMessagesHelper.fillVideoAttribute(path, attributeVideo, null); + } + inputMediaVideo.attributes.add(attributeVideo); attributeVideo.supports_streaming = true; attributeVideo.flags |= 4; attributeVideo.preload_prefix_size = (int) firstSecondSize; - inputMediaVideo.attributes.add(attributeVideo); + if (entry.cover >= 0) { + attributeVideo.flags |= 16; + attributeVideo.video_start_ts = (entry.cover - entry.left * entry.duration) / 1000.0; + } if (entry.stickers != null && (!entry.stickers.isEmpty() || entry.editStickers != null && !entry.editStickers.isEmpty())) { inputMediaVideo.flags |= 1; inputMediaVideo.stickers = new ArrayList<>(entry.stickers); @@ -2063,112 +2104,136 @@ public class StoriesController { final int captionLimit = UserConfig.getInstance(currentAccount).isPremium() ? MessagesController.getInstance(currentAccount).storyCaptionLengthLimitPremium : MessagesController.getInstance(currentAccount).storyCaptionLengthLimitDefault; if (edit) { - TL_stories.TL_stories_editStory editStory = new TL_stories.TL_stories_editStory(); - editStory.id = entry.editStoryId; - editStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); + if (entry.botId != 0) { + TL_bots.editPreviewMedia editPreviewMedia = new TL_bots.editPreviewMedia(); + editPreviewMedia.bot = MessagesController.getInstance(currentAccount).getInputUser(entry.botId); + editPreviewMedia.media = entry.editingBotPreview; + editPreviewMedia.new_media = media; + editPreviewMedia.lang_code = entry.botLang; - if (media != null && entry.editedMedia) { - editStory.flags |= 1; - editStory.media = media; - } - - if (entry.editedCaption && entry.caption != null) { - editStory.flags |= 2; - CharSequence[] caption = new CharSequence[]{ entry.caption }; - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); - } - if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { - editStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); - } else { - editStory.entities.clear(); - } - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); - } - editStory.caption = caption[0].toString(); - } - - if (entry.editedPrivacy) { - editStory.flags |= 4; - editStory.privacy_rules.addAll(entry.privacyRules); - } - - if (entry.editedMediaAreas != null) { - editStory.media_areas.addAll(entry.editedMediaAreas); - } - if (entry.mediaEntities != null) { - for (int i = 0; i < entry.mediaEntities.size(); ++i) { - VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); - if (mediaEntity.mediaArea != null) { - editStory.media_areas.add(mediaEntity.mediaArea); - } - } - } - if (!editStory.media_areas.isEmpty()) { - editStory.flags |= 8; - } - - req = editStory; - } else { - TL_stories.TL_stories_sendStory sendStory = new TL_stories.TL_stories_sendStory(); - sendStory.random_id = random_id; - sendStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); - sendStory.media = media; - sendStory.privacy_rules.addAll(entry.privacyRules); - sendStory.pinned = entry.pinned; - sendStory.noforwards = !entry.allowScreenshots; - - if (entry.caption != null) { - sendStory.flags |= 3; - CharSequence[] caption = new CharSequence[]{ entry.caption }; - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); - } - if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { - sendStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); - } else { - sendStory.entities.clear(); - } - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); - } - sendStory.caption = caption[0].toString(); - } - - if (entry.isRepost) { - sendStory.flags |= 64; - sendStory.fwd_from_id = MessagesController.getInstance(currentAccount).getInputPeer(entry.repostPeer); - sendStory.fwd_from_story = entry.repostStoryId; - sendStory.fwd_modified = !sendingSameInput; - } - - if (entry.period == Integer.MAX_VALUE) { - sendStory.pinned = true; + req = editPreviewMedia; } else { - sendStory.flags |= 8; - sendStory.period = entry.period; - } + TL_stories.TL_stories_editStory editStory = new TL_stories.TL_stories_editStory(); + editStory.id = entry.editStoryId; + editStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); - if (entry.mediaEntities != null) { - for (int i = 0; i < entry.mediaEntities.size(); ++i) { - VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); - if (mediaEntity.mediaArea != null) { - sendStory.media_areas.add(mediaEntity.mediaArea); + if (media != null && entry.editedMedia) { + editStory.flags |= 1; + editStory.media = media; + } + + if (entry.editedCaption && entry.caption != null) { + editStory.flags |= 2; + CharSequence[] caption = new CharSequence[]{entry.caption}; + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { + editStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); + } else { + editStory.entities.clear(); + } + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + editStory.caption = caption[0].toString(); + } + + if (entry.editedPrivacy) { + editStory.flags |= 4; + editStory.privacy_rules.addAll(entry.privacyRules); + } + + if (entry.editedMediaAreas != null) { + editStory.media_areas.addAll(entry.editedMediaAreas); + } + if (entry.mediaEntities != null) { + for (int i = 0; i < entry.mediaEntities.size(); ++i) { + VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); + if (mediaEntity.mediaArea != null) { + editStory.media_areas.add(mediaEntity.mediaArea); + } } } - if (!sendStory.media_areas.isEmpty()) { - sendStory.flags |= 32; + if (!editStory.media_areas.isEmpty()) { + editStory.flags |= 8; } - } - req = sendStory; + req = editStory; + } + } else { + if (entry.botId != 0) { + TL_bots.addPreviewMedia addPreviewMedia = new TL_bots.addPreviewMedia(); + addPreviewMedia.bot = MessagesController.getInstance(currentAccount).getInputUser(entry.botId); + addPreviewMedia.media = media; + addPreviewMedia.lang_code = entry.botLang; + + req = addPreviewMedia; + } else { + TL_stories.TL_stories_sendStory sendStory = new TL_stories.TL_stories_sendStory(); + sendStory.random_id = random_id; + sendStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); + sendStory.media = media; + sendStory.privacy_rules.addAll(entry.privacyRules); + sendStory.pinned = entry.pinned; + sendStory.noforwards = !entry.allowScreenshots; + + if (entry.caption != null) { + sendStory.flags |= 3; + CharSequence[] caption = new CharSequence[]{entry.caption}; + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { + sendStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); + } else { + sendStory.entities.clear(); + } + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + sendStory.caption = caption[0].toString(); + } + + if (entry.isRepost) { + sendStory.flags |= 64; + sendStory.fwd_from_id = MessagesController.getInstance(currentAccount).getInputPeer(entry.repostPeer); + sendStory.fwd_from_story = entry.repostStoryId; + sendStory.fwd_modified = !sendingSameInput; + } + + if (entry.period == Integer.MAX_VALUE) { + sendStory.pinned = true; + } else { + sendStory.flags |= 8; + sendStory.period = entry.period; + } + + if (entry.mediaEntities != null) { + for (int i = 0; i < entry.mediaEntities.size(); ++i) { + VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); + if (mediaEntity.mediaArea != null) { + sendStory.media_areas.add(mediaEntity.mediaArea); + } + } + if (!sendStory.media_areas.isEmpty()) { + sendStory.flags |= 32; + } + } + + req = sendStory; + } } final RequestDelegate requestDelegate = (response, error) -> { - if (response != null) { + if (response instanceof TLRPC.Updates) { failed = false; TLRPC.Updates updates = (TLRPC.Updates) response; + if (entry.isEditingCover) { + MessagesController.getInstance(currentAccount).processUpdates(updates, false); + AndroidUtilities.runOnUIThread(this::cleanup); + return; + } int storyId = 0; TL_stories.StoryItem storyItem = null; for (int i = 0; i < updates.updates.size(); i++) { @@ -2237,13 +2302,26 @@ public class StoriesController { } entry.isError = false; entry.error = null; - getDraftsController().saveForEdit(entry, did, storyItemFinal); + if (!entry.isEditingCover) { + getDraftsController().saveForEdit(entry, did, storyItemFinal); + } if (!edit) { invalidateStoryLimit(); } }); MessagesController.getInstance(currentAccount).processUpdateArray(updates.updates, updates.users, updates.chats, false, updates.date); } + } else if (response instanceof TL_bots.botPreviewMedia) { + previewMedia = (TL_bots.botPreviewMedia) response; + } else if (error != null && FileRefController.isFileRefError(error.text) && entry.editingCoverDocument != null && entry.updateDocumentRef != null) { + entry.updateDocumentRef.run(newDocument -> { + entry.editingCoverDocument = newDocument; + TLRPC.TL_inputFileStoryDocument inputFile = new TLRPC.TL_inputFileStoryDocument(); + inputFile.doc = MessagesController.toInputDocument(entry.editingCoverDocument); + sendUploadedRequest(inputFile); + }); + entry.updateDocumentRef = null; + return; } else if (error != null && !edit) { AndroidUtilities.runOnUIThread(() -> { entry.isError = true; @@ -2271,6 +2349,8 @@ public class StoriesController { } } + private TL_bots.botPreviewMedia previewMedia; + private void putMessages() { if (entry.shareUserIds == null || putMessages) { return; @@ -2310,9 +2390,9 @@ public class StoriesController { } } - private final HashMap[] storiesLists = new HashMap[3]; + private final HashMap[] storiesLists = new HashMap[5]; - @Nullable + @NonNull public StoriesList getStoriesList(long dialogId, int type) { return getStoriesList(dialogId, type, true); } @@ -2324,7 +2404,11 @@ public class StoriesController { } StoriesList list = storiesLists[type].get(dialogId); if (list == null && createIfNotExist) { - storiesLists[type].put(dialogId, list = new StoriesList(currentAccount, dialogId, type, this::destroyStoryList)); + if (type == StoriesList.TYPE_BOTS) { + storiesLists[type].put(dialogId, list = new BotPreviewsList(currentAccount, dialogId, null, this::destroyStoryList)); + } else { + storiesLists[type].put(dialogId, list = new StoriesList(currentAccount, dialogId, type, this::destroyStoryList)); + } } return list; } @@ -2395,6 +2479,321 @@ public class StoriesController { } } + public static class BotPreview extends TL_stories.StoryItem { + public final BotPreviewsList list; + public BotPreview(BotPreviewsList parentList, long dialogId, TL_bots.botPreviewMedia media) { + this.list = parentList; + this.dialogId = dialogId; + this.media = media.media; + if (this.media.document != null) { + this.media.document.date = media.date; + } else if (this.media.photo != null) { + this.media.photo.date = media.date; + } + } + } + + public static class BotPreviewsList extends StoriesList { + + public BotPreviewsList(int currentAccount, long botId, String lang_code, Utilities.Callback destroy) { + super(currentAccount, botId, TYPE_BOTS, destroy); + this.lang_code = lang_code; + } + + @Override + public boolean isOnlyCache() { + return false; + } + @Override + protected void invalidateCache() {} + @Override + protected void preloadCache() {} + @Override + protected void saveCache() {} + + @Override + protected boolean markAsRead(int storyId) { + return false; + } + + private boolean loading, loaded; + public final String lang_code; + private int reqId; + + public final ArrayList lang_codes = new ArrayList<>(); + private final ArrayList> fakeDays = new ArrayList<>(); + private int lastId = 0; + + @Override + public boolean load(boolean force, int count, List ids) { + return loadInternal(null); + } + + public boolean loadInternal(Runnable callback) { + if (loading || loaded) return false; + + TLObject reqObj; + if (lang_code != null) { + TL_bots.getPreviewInfo req = new TL_bots.getPreviewInfo(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + req.lang_code = lang_code; + reqObj = req; + } else { + TL_bots.getPreviewMedias req = new TL_bots.getPreviewMedias(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + reqObj = req; + } + + loading = true; + + this.reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(reqObj, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + this.reqId = 0; + this.loading = false; + this.loaded = true; + this.done = true; + + final ArrayList medias = new ArrayList<>(); + if (res instanceof TLRPC.Vector) { + ArrayList objects = ((TLRPC.Vector) res).objects; + for (Object o : objects) { + TL_bots.botPreviewMedia media = (TL_bots.botPreviewMedia) o; + medias.add(media); + } + } else if (res instanceof TL_bots.previewInfo) { + TL_bots.previewInfo info = (TL_bots.previewInfo) res; + + lang_codes.clear(); + lang_codes.addAll(info.lang_codes); + + medias.addAll(info.media); + } else { + return; + } + + ArrayList oldMessageObjects = new ArrayList<>(messageObjects); + messageObjects.clear(); + fakeDays.clear(); + + for (TL_bots.botPreviewMedia media : medias) { + MessageObject msg = new MessageObject(currentAccount, new BotPreview(this, dialogId, media)); + + MessageObject old = null; + for (int i = 0; i < oldMessageObjects.size(); ++i) { + if (MessagesController.equals(oldMessageObjects.get(i).storyItem.media, media.media)) { + old = oldMessageObjects.get(i); + break; + } + } + + msg.storyItem.id = msg.messageOwner.id = old == null ? lastId++ : old.getId(); + msg.parentStoriesList = this; + msg.generateThumbs(false); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).add(msg.getId()); + messageObjects.add(msg); + } + + AndroidUtilities.cancelRunOnUIThread(super.notify); + AndroidUtilities.runOnUIThread(super.notify); + + if (callback != null) { + AndroidUtilities.runOnUIThread(callback); + } + })); + + return true; + } + + public void push(TL_bots.botPreviewMedia media) { + MessageObject msg = new MessageObject(currentAccount, new BotPreview(this, dialogId, media)); + msg.storyItem.id = msg.messageOwner.id = lastId++; + msg.parentStoriesList = this; + msg.generateThumbs(false); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).add(0, msg.getId()); + messageObjects.add(0, msg); + notifyUpdate(); + } + + public void edit(TLRPC.InputMedia old_media, TL_bots.botPreviewMedia new_media) { + int index = 0; + MessageObject oldmsg = null; + for (int i = 0; i < messageObjects.size(); ++i) { + MessageObject m = messageObjects.get(i); + if (old_media != null && m.storyItem != null && m.storyItem.media != null) { + if (old_media instanceof TLRPC.TL_inputMediaPhoto) { + if (m.storyItem.media.photo == null) continue; + if (m.storyItem.media.photo.id == ((TLRPC.TL_inputMediaPhoto) old_media).id.id) { + index = i; + oldmsg = m; + break; + } + } else if (old_media instanceof TLRPC.TL_inputMediaDocument) { + if (m.storyItem.media.document == null) continue; + if (m.storyItem.media.document.id == ((TLRPC.TL_inputMediaDocument) old_media).id.id) { + index = i; + oldmsg = m; + break; + } + } + } + } + if (oldmsg != null) { + messageObjects.remove(oldmsg); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + if (index > 0 && index < fakeDays.get(0).size()) { + fakeDays.get(0).remove(index); + } + } + + MessageObject msg = new MessageObject(currentAccount, new BotPreview(this, dialogId, new_media)); + msg.storyItem.id = msg.messageOwner.id = oldmsg == null ? lastId++ : oldmsg.getId(); + msg.parentStoriesList = this; + msg.generateThumbs(false); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).add(index, msg.getId()); + messageObjects.add(index, msg); + notifyUpdate(); + } + + public void notifyUpdate() { + AndroidUtilities.cancelRunOnUIThread(super.notify); + AndroidUtilities.runOnUIThread(super.notify); + } + + public void reload(Runnable callback) { + if (this.reqId != 0) { + ConnectionsManager.getInstance(currentAccount).cancelRequest(this.reqId, true); + this.reqId = 0; + } + loading = false; + loaded = false; + loadInternal(callback); + } + + public void requestReference(BotPreview story, Utilities.Callback whenUpdated) { + reload(() -> { + for (int i = 0; i < messageObjects.size(); ++i) { + MessageObject msg = messageObjects.get(i); + if (msg == null || msg.storyItem == null || msg.storyItem.media == null) continue; + if (story.media.document != null) { + if (msg.storyItem.media.document == null) continue; + if (msg.storyItem.media.document.id == story.media.document.id) { + whenUpdated.run((BotPreview) msg.storyItem); + return; + } + } + if (story.media.photo != null) { + if (msg.storyItem.media.photo == null) continue; + if (msg.storyItem.media.photo.id == story.media.photo.id) { + whenUpdated.run((BotPreview) msg.storyItem); + return; + } + } + } + whenUpdated.run(null); + }); + } + + @Override + public int getCount() { + return messageObjects.size(); + } + + @Override + public int getLoadedCount() { + return messageObjects.size(); + } + + @Override + public boolean isLoading() { + return loading; + } + + @Override + protected ArrayList> getDays() { + return fakeDays; + } + + @Override + public MessageObject findMessageObject(int id) { + for (int i = 0; i < messageObjects.size(); ++i) { + if (messageObjects.get(i).getId() == id) { + return messageObjects.get(i); + } + } + return null; + } + + @Override + public void updatePinnedOrder(ArrayList ids, boolean apply) { + final ArrayList newOrder = new ArrayList<>(); + final ArrayList newOrderIds = new ArrayList<>(); + TL_bots.reorderPreviewMedias req = new TL_bots.reorderPreviewMedias(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + req.lang_code = lang_code; + for (int id : ids) { + MessageObject msg = findMessageObject(id); + if (msg == null) continue; + req.order.add(MessagesController.toInputMedia(msg.storyItem.media)); + newOrder.add(msg); + newOrderIds.add(id); + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, null); + + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).clear(); + fakeDays.get(0).addAll(newOrderIds); + messageObjects.clear(); + messageObjects.addAll(newOrder); + } + + public void delete(ArrayList medias) { + if (medias == null) return; + for (int i = 0; i < messageObjects.size(); ++i) { + MessageObject msg = messageObjects.get(i); + boolean contains = false; + for (int j = 0; j < medias.size(); ++j) { + if (MessagesController.equals(msg.storyItem.media, medias.get(j))) { + contains = true; + break; + } + } + if (contains) { + messageObjects.remove(i); + if (!fakeDays.isEmpty() && msg.getId() < fakeDays.get(0).size()) { + fakeDays.get(0).remove(msg.getId()); + } + i--; + } + } + TL_bots.deletePreviewMedia req = new TL_bots.deletePreviewMedia(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + for (int i = 0; i < medias.size(); ++i) { + req.media.add(MessagesController.toInputMedia(medias.get(i))); + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, null); + + AndroidUtilities.cancelRunOnUIThread(super.notify); + AndroidUtilities.runOnUIThread(super.notify); + } + + public void delete(TLRPC.MessageMedia media) { + delete(new ArrayList<>(Arrays.asList(media))); + } + + } + public static class SearchStoriesList extends StoriesList { public final String query; @@ -2435,7 +2834,7 @@ public class StoriesController { } } - private ArrayList> fakeDays = new ArrayList<>(); + private final ArrayList> fakeDays = new ArrayList<>(); private boolean loading; private String last_offset = ""; @@ -2545,6 +2944,7 @@ public class StoriesController { public static final int TYPE_ARCHIVE = 1; public static final int TYPE_STATISTICS = 2; public static final int TYPE_SEARCH = 3; + public static final int TYPE_BOTS = 4; public final int currentAccount; public final long dialogId; @@ -2587,7 +2987,7 @@ public class StoriesController { NotificationCenter.getInstance(StoriesList.this.currentAccount).postNotificationName(NotificationCenter.storiesListUpdated, StoriesList.this); }; - private void fill(boolean notify) { + public void fill(boolean notify) { fill(this.messageObjects, showPhotos, showVideos); if (notify) { AndroidUtilities.cancelRunOnUIThread(this.notify); @@ -2595,7 +2995,7 @@ public class StoriesController { } } - private void fill(ArrayList arrayList, boolean showPhotos, boolean showVideos) { + public void fill(ArrayList arrayList, boolean showPhotos, boolean showVideos) { tempArr.clear(); if (type == TYPE_PINNED) { for (int id : pinnedIds) { @@ -2639,14 +3039,15 @@ public class StoriesController { return msg != null && msg.isStory() && (photos && msg.isPhoto() || videos && msg.isVideo() || msg.storyItem.media instanceof TLRPC.TL_messageMediaUnsupported); } - private boolean done; + public boolean done; private int totalCount = -1; - private boolean preloading, loading; + protected boolean preloading; + private boolean loading; private boolean invalidateAfterPreload; private boolean error; private final Runnable destroyRunnable; - private Utilities.CallbackReturn toLoad; + protected Utilities.CallbackReturn toLoad; private StoriesList(int currentAccount, long dialogId, int type, Utilities.Callback destroy) { this.currentAccount = currentAccount; @@ -3808,6 +4209,11 @@ public class StoriesController { return false; } return chat.creator || chat.admin_rights != null && chat.admin_rights.post_stories; + } else if (dialogId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialogId); + if (user != null && user.bot && user.bot_can_edit) { + return true; + } } return false; } @@ -3819,6 +4225,12 @@ public class StoriesController { if (storyItem.dialogId == getSelfUserId()) { return false; } + if (storyItem.dialogId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(storyItem.dialogId); + if (user != null && user.bot && user.bot_can_edit) { + return true; + } + } if (storyItem.dialogId < 0) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-storyItem.dialogId); if (chat == null) { @@ -3844,6 +4256,12 @@ public class StoriesController { if (storyItem.dialogId == getSelfUserId()) { return false; } + if (storyItem.dialogId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(storyItem.dialogId); + if (user != null && user.bot && user.bot_can_edit) { + return true; + } + } if (storyItem.dialogId < 0) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-storyItem.dialogId); if (chat == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java index 8d397d365..0900ec99c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java @@ -17,6 +17,7 @@ import org.telegram.messenger.FileLog; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesStorage; +import org.telegram.messenger.Timer; import org.telegram.messenger.UserConfig; import org.telegram.messenger.support.LongSparseIntArray; import org.telegram.tgnet.ConnectionsManager; @@ -556,10 +557,10 @@ public class StoriesStorage { } //storage queue - public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid) { - fillMessagesWithStories(messagesWithUnknownStories, runnable, classGuid, true); + public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid, Timer timer) { + fillMessagesWithStories(messagesWithUnknownStories, runnable, classGuid, true, timer); } - public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid, boolean updateDatabase) { + public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid, boolean updateDatabase, Timer timer) { if (runnable == null) { return; } @@ -568,6 +569,7 @@ public class StoriesStorage { return; } ArrayList updatedMessages = new ArrayList<>(); + Timer.Task t1 = Timer.start(timer, "fillMessagesWithStories: applying stories for existing array"); for (int i = 0; i < messagesWithUnknownStories.size(); i++) { long dialogId = messagesWithUnknownStories.keyAt(i); ArrayList messageObjects = messagesWithUnknownStories.valueAt(i); @@ -588,6 +590,7 @@ public class StoriesStorage { } } } + Timer.done(t1); if (updateDatabase) { updateMessagesWithStories(updatedMessages); @@ -603,7 +606,9 @@ public class StoriesStorage { for (int j = 0; j < messageObjects.size(); j++) { request.id.add(getStoryId(messageObjects.get(j))); } + Timer.Task t2 = Timer.start(timer, "fillMessagesWithStories: getStoriesByID did=" + dialogId + " ids=" + TextUtils.join(",", request.id)); int reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(request, (response, error) -> { + Timer.done(t2); if (response != null) { TL_stories.TL_stories_stories stories = (TL_stories.TL_stories_stories) response; for (int j = 0; j < messageObjects.size(); j++) { @@ -627,6 +632,8 @@ public class StoriesStorage { }); } } + } else if (error != null) { + Timer.log(timer, "fillMessagesWithStories: getStoriesByID error " + error.code + " " + error.text); } requestsCount[0]--; if (requestsCount[0] == 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java index 72a2d09c5..16ee91026 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java @@ -260,6 +260,9 @@ public class StoriesViewPager extends ViewPager { } public void setDays(long dialogId, ArrayList> days, int currentAccount) { + if (this.daysDialogId == dialogId && eqA(this.days, days) && this.currentAccount == currentAccount) { + return; + } this.daysDialogId = dialogId; this.days = days; this.currentAccount = currentAccount; @@ -278,6 +281,27 @@ public class StoriesViewPager extends ViewPager { updateDelegate = true; } + private static boolean eqA(ArrayList> a, ArrayList> b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (a.size() != b.size()) return false; + for (int i = 0; i < a.size(); ++i) { + if (!eq(a.get(i), b.get(i))) + return false; + } + return true; + } + private static boolean eq(ArrayList a, ArrayList b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (a.size() != b.size()) return false; + for (int i = 0; i < a.size(); ++i) { + if (a.get(i) != b.get(i)) + return false; + } + return true; + } + @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java index 261e465dd..c000ac556 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java @@ -49,11 +49,14 @@ import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Paint.Views.LocationMarker; +import org.telegram.ui.Components.Paint.Views.WeatherView; import org.telegram.ui.Components.ScaleStateListAnimator; import org.telegram.ui.EmojiAnimationsOverlay; import org.telegram.ui.LocationActivity; import org.telegram.ui.Stories.recorder.HintView2; import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.Weather; import java.util.ArrayList; @@ -156,6 +159,21 @@ public class StoryMediaAreasView extends FrameLayout implements View.OnClickList storyReactionWidgetView.setViews(storyItem.views, false); } ScaleStateListAnimator.apply(areaView); + } else if (mediaArea instanceof TL_stories.TL_mediaAreaWeather) { + TL_stories.TL_mediaAreaWeather weather = (TL_stories.TL_mediaAreaWeather) mediaArea; + + Weather.State state = new Weather.State(); + state.emoji = weather.emoji; + state.temperature = (float) weather.temperature_c; + + LocationMarker marker = new LocationMarker(getContext(), LocationMarker.VARIANT_WEATHER, AndroidUtilities.density, 0); + marker.setMaxWidth(AndroidUtilities.displaySize.x); + marker.setIsVideo(true); + marker.setCodeEmoji(UserConfig.selectedAccount, state.getEmoji()); + marker.setText(state.getTemperature()); + marker.setType(3, weather.color); + + areaView = new FitViewWidget(getContext(), marker, mediaArea); } else { areaView = new AreaView(getContext(), parentView, mediaArea); } @@ -170,6 +188,15 @@ public class StoryMediaAreasView extends FrameLayout implements View.OnClickList hintsContainer.bringToFront(); } + public static int rgbaToArgb(int rgba) { + int red = (rgba >>> 24) & 0xFF; + int green = (rgba >>> 16) & 0xFF; + int blue = (rgba >>> 8) & 0xFF; + int alpha = rgba & 0xFF; + + return (alpha << 24) | (red << 16) | (green << 8) | blue; + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int w = MeasureSpec.getSize(widthMeasureSpec); @@ -187,6 +214,12 @@ public class StoryMediaAreasView extends FrameLayout implements View.OnClickList MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.w / 100 * w), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.h / 100 * h), MeasureSpec.EXACTLY) ); + } else if (view instanceof FitViewWidget) { + FitViewWidget child = (FitViewWidget) getChildAt(i); + child.measure( + MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.w / 100 * w), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.h / 100 * h), MeasureSpec.EXACTLY) + ); } } setMeasuredDimension(w, h); @@ -409,6 +442,13 @@ public class StoryMediaAreasView extends FrameLayout implements View.OnClickList child.setTranslationX((float) (child.mediaArea.coordinates.x / 100 * getMeasuredWidth())); child.setTranslationY((float) (child.mediaArea.coordinates.y / 100 * getMeasuredHeight())); child.setRotation((float) child.mediaArea.coordinates.rotation); + } else if (view instanceof FitViewWidget) { + FitViewWidget child = (FitViewWidget) view; + int w = child.getMeasuredWidth(), h = child.getMeasuredHeight(); + child.layout(-w / 2, -h / 2, w / 2, h / 2); + child.setTranslationX((float) (child.mediaArea.coordinates.x / 100 * getMeasuredWidth())); + child.setTranslationY((float) (child.mediaArea.coordinates.y / 100 * getMeasuredHeight())); + child.setRotation((float) child.mediaArea.coordinates.rotation); } } } @@ -750,4 +790,40 @@ public class StoryMediaAreasView extends FrameLayout implements View.OnClickList invalidate(); } } + + public static class FitViewWidget extends FrameLayout { + + public final TL_stories.MediaArea mediaArea; + public final View child; + + public FitViewWidget(Context context, View widget, TL_stories.MediaArea mediaArea) { + super(context); + this.mediaArea = mediaArea; + addView(this.child = widget); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + this.child.measure(widthMeasureSpec, heightMeasureSpec); + + final int childw = this.child.getMeasuredWidth() - this.child.getPaddingLeft() - this.child.getPaddingRight(); + final int childh = this.child.getMeasuredHeight() - this.child.getPaddingTop() - this.child.getPaddingBottom(); + this.child.setPivotX(this.child.getPaddingLeft() + childw / 2f); + this.child.setPivotY(this.child.getPaddingTop() + childh / 2f); + + final int w = MeasureSpec.getSize(widthMeasureSpec); + final int h = MeasureSpec.getSize(heightMeasureSpec); + setMeasuredDimension(w, h); + + float scale = Math.min( + (float) w / childw, + (float) h / childh + ); + this.child.setTranslationX(w / 2f - (childw / 2f + this.child.getPaddingLeft())); + this.child.setTranslationY(h / 2f - (childh / 2f + this.child.getPaddingTop())); + this.child.setScaleX(scale); + this.child.setScaleY(scale); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java index e40df11ae..034037b35 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java @@ -21,7 +21,6 @@ import android.graphics.RectF; import android.media.AudioManager; import android.net.Uri; import android.os.Build; -import android.util.Log; import android.util.LongSparseArray; import android.util.SparseArray; import android.view.GestureDetector; @@ -50,7 +49,6 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.AnimationNotificationsLocker; import org.telegram.messenger.BotWebViewVibrationEffect; import org.telegram.messenger.BuildVars; -import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; @@ -726,7 +724,7 @@ public class StoryViewer implements NotificationCenter.NotificationCenterDelegat if (isClosed && animateAvatar) { rect2.set(outFromRectAvatar); } else { - while (child != this) { + while (child != this && child != null) { if (child.getParent() == this) { toX += child.getLeft(); toY += child.getTop(); @@ -734,6 +732,9 @@ public class StoryViewer implements NotificationCenter.NotificationCenterDelegat toX += child.getX(); toY += child.getY(); } + if (!(child.getParent() instanceof View)) { + break; + } child = (View) child.getParent(); } rect2.set(toX, toY, toX + headerView.backupImageView.getMeasuredWidth(), toY + headerView.backupImageView.getMeasuredHeight()); @@ -1058,7 +1059,7 @@ public class StoryViewer implements NotificationCenter.NotificationCenterDelegat } if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { - onBackPressed(); + onAttachedBackPressed(); return true; } return super.dispatchKeyEventPreIme(event); @@ -2444,8 +2445,8 @@ public class StoryViewer implements NotificationCenter.NotificationCenterDelegat MessagesController.getInstance(currentAccount).getStoriesController().stopAllPollers(); if (ATTACH_TO_FRAGMENT) { lockOrientation(false); - if (fragment != null && fragment.sheetsStack != null) { - fragment.sheetsStack.remove(this); + if (fragment != null) { + fragment.removeSheet(this); } } @@ -2482,12 +2483,17 @@ public class StoryViewer implements NotificationCenter.NotificationCenterDelegat return ColorUtils.blendARGB(currentColor, Color.BLACK, getBlackoutAlpha()); } + @Override + public boolean isAttachedLightStatusBar() { + return false; + } + private float getBlackoutAlpha() { return progressToOpen * (0.5f + 0.5f * (1f - progressToDismiss)); } @Override - public boolean onBackPressed() { + public boolean onAttachedBackPressed() { if (selfStoriesViewsOffset != 0) { if (selfStoryViewsView.onBackPressed()) { return true; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java index ec47812df..4b296f510 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java @@ -1,14 +1,20 @@ package org.telegram.ui.Stories; +import static org.telegram.ui.Stories.StoryMediaAreasView.rgbaToArgb; + import android.graphics.Canvas; import android.graphics.Color; import android.view.View; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ImageReceiver; +import org.telegram.messenger.UserConfig; import org.telegram.tgnet.tl.TL_stories; +import org.telegram.ui.Components.Paint.Views.LocationMarker; import org.telegram.ui.Components.Reactions.ReactionImageHolder; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; +import org.telegram.ui.Stories.recorder.Weather; import java.util.ArrayList; @@ -22,6 +28,11 @@ public class StoryWidgetsImageDecorator extends ImageReceiver.Decorator { drawingObjects = new ArrayList<>(); } drawingObjects.add(new ReactionWidget((TL_stories.TL_mediaAreaSuggestedReaction) storyItem.media_areas.get(i))); + } else if (storyItem.media_areas.get(i) instanceof TL_stories.TL_mediaAreaWeather) { + if (drawingObjects == null) { + drawingObjects = new ArrayList<>(); + } + drawingObjects.add(new WeatherWidget((TL_stories.TL_mediaAreaWeather) storyItem.media_areas.get(i))); } } } @@ -82,10 +93,10 @@ public class StoryWidgetsImageDecorator extends ImageReceiver.Decorator { public class ReactionWidget extends DrawingObject { - StoryReactionWidgetBackground storyReactionWidgetBackground = new StoryReactionWidgetBackground(null); + private final StoryReactionWidgetBackground storyReactionWidgetBackground = new StoryReactionWidgetBackground(null); - TL_stories.TL_mediaAreaSuggestedReaction mediaArea; - ReactionImageHolder imageHolder = new ReactionImageHolder(null); + private final TL_stories.TL_mediaAreaSuggestedReaction mediaArea; + private final ReactionImageHolder imageHolder = new ReactionImageHolder(null); public ReactionWidget(TL_stories.TL_mediaAreaSuggestedReaction mediaArea) { this.mediaArea = mediaArea; @@ -147,4 +158,70 @@ public class StoryWidgetsImageDecorator extends ImageReceiver.Decorator { imageHolder.setParent(parentView); } } + + public class WeatherWidget extends DrawingObject { + + private final LocationMarker marker; + private final TL_stories.TL_mediaAreaWeather mediaArea; + private View parentView; + + public WeatherWidget(TL_stories.TL_mediaAreaWeather mediaArea) { + this.mediaArea = mediaArea; + + final Weather.State state = new Weather.State(); + state.emoji = mediaArea.emoji; + state.temperature = (float) mediaArea.temperature_c; + + this.marker = new LocationMarker(ApplicationLoader.applicationContext, LocationMarker.VARIANT_WEATHER, AndroidUtilities.density, 0) { + @Override + public void invalidate() { + if (parentView != null) { + parentView.invalidate(); + } + } + }; + marker.setMaxWidth(AndroidUtilities.displaySize.x); + marker.setIsVideo(false); + marker.setCodeEmoji(UserConfig.selectedAccount, state.getEmoji()); + marker.setText(state.getTemperature()); + marker.setType(0, mediaArea.color); + + marker.setupLayout(); + } + + @Override + public void draw(Canvas canvas, ImageReceiver imageReceiver, float alpha) { + float x = (float) (imageX + imageW * mediaArea.coordinates.x / 100); + float y = (float) (imageY + imageH * mediaArea.coordinates.y / 100); + float w = (float) (imageW * mediaArea.coordinates.w / 100); + float h = (float) (imageH * mediaArea.coordinates.h / 100); + + canvas.save(); + canvas.translate(x, y); + final int markerWidth = marker.getWidthInternal() - marker.getPaddingLeft() - marker.getPaddingRight(); + final int markerHeight = marker.getHeightInternal() - marker.getPaddingTop() - marker.getPaddingBottom(); + float scale = Math.min(w / markerWidth, h / markerHeight); + canvas.scale(scale, scale); + if (mediaArea.coordinates.rotation != 0) { + canvas.rotate((float) mediaArea.coordinates.rotation); + } + canvas.translate(-markerWidth / 2f - marker.getPaddingLeft(), -markerHeight / 2f - marker.getPaddingTop()); + marker.drawInternal(canvas); + canvas.restore(); + } + + @Override + public void onAttachedToWindow(boolean attached) { + if (attached) { + marker.attachInternal(); + } else { + marker.detachInternal(); + } + } + + @Override + public void setParent(View parentView) { + this.parentView = parentView; + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java new file mode 100644 index 000000000..70b675eda --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java @@ -0,0 +1,2001 @@ +package org.telegram.ui.Stories.bots; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.os.Build; +import android.text.Layout; +import android.text.SpannableString; +import android.text.SpannedString; +import android.text.TextUtils; +import android.text.style.ImageSpan; +import android.util.Log; +import android.util.LongSparseArray; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MediaController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.TranslateController; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; +import org.telegram.tgnet.tl.TL_stories; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheet; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.SharedAudioCell; +import org.telegram.ui.Cells.SharedDocumentCell; +import org.telegram.ui.Cells.SharedPhotoVideoCell; +import org.telegram.ui.Cells.SharedPhotoVideoCell2; +import org.telegram.ui.Components.BottomSheetWithRecyclerListView; +import org.telegram.ui.Components.ChatAttachAlert; +import org.telegram.ui.Components.ColoredImageSpan; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ExtendedGridLayoutManager; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.RecyclerAnimationScrollHelper; +import org.telegram.ui.Components.RecyclerListView; +import org.telegram.ui.Components.SharedMediaLayout; +import org.telegram.ui.Components.Size; +import org.telegram.ui.Components.StickerEmptyView; +import org.telegram.ui.Components.TranslateAlert2; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.ViewPagerFixed; +import org.telegram.ui.LaunchActivity; +import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stories.StoriesController; +import org.telegram.ui.Stories.StoriesListPlaceProvider; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; +import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.StoryRecorder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Locale; + +public class BotPreviewsEditContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { + + private final BaseFragment fragment; + private final int currentAccount; + private final Theme.ResourcesProvider resourcesProvider; + private final long bot_id; + + private static LongSparseArray> attachedContainers; + private static LongSparseArray> cachedLists; + private final StoriesController.BotPreviewsList mainList; + private final ArrayList langLists = new ArrayList<>(); + private final ArrayList localLangs = new ArrayList<>(); + + private final ViewPagerFixed viewPager; + private final ViewPagerFixed.TabsView tabsView; + private Boolean shownTabs = null; + + public static void push(int currentAccount, long did, String lang_code, TL_bots.botPreviewMedia media) { + if (cachedLists != null) { + LongSparseArray arr = cachedLists.get(currentAccount); + if (arr != null) { + StoriesController.BotPreviewsList list = arr.get(did); + if (list.currentAccount == currentAccount) { + if (TextUtils.equals(list.lang_code, lang_code)) { + list.push(media); + } else if (!TextUtils.isEmpty(lang_code) && !list.lang_codes.contains(lang_code)) { + list.lang_codes.add(lang_code); + list.notifyUpdate(); + } + } + } + } + if (attachedContainers != null) { + LongSparseArray arr = attachedContainers.get(currentAccount); + if (arr != null) { + BotPreviewsEditContainer container = arr.get(did); + if (container != null) { + for (int i = 0; i < container.langLists.size(); ++i) { + StoriesController.BotPreviewsList list = container.langLists.get(i); + if (list.currentAccount == currentAccount && TextUtils.equals(list.lang_code, lang_code)) { + list.push(media); + } + } + } + } + } + } + public static void edit(int currentAccount, long did, String lang_code, TLRPC.InputMedia old_media, TL_bots.botPreviewMedia media) { + if (cachedLists != null) { + LongSparseArray arr = cachedLists.get(currentAccount); + if (arr != null) { + StoriesController.BotPreviewsList list = arr.get(did); + if (list.currentAccount == currentAccount) { + if (TextUtils.equals(list.lang_code, lang_code)) { + list.edit(old_media, media); + } else if (!TextUtils.isEmpty(lang_code) && !list.lang_codes.contains(lang_code)) { + list.lang_codes.add(lang_code); + list.notifyUpdate(); + } + } + } + } + if (attachedContainers != null) { + LongSparseArray arr = attachedContainers.get(currentAccount); + if (arr != null) { + BotPreviewsEditContainer container = arr.get(did); + if (container != null) { + for (int i = 0; i < container.langLists.size(); ++i) { + StoriesController.BotPreviewsList list = container.langLists.get(i); + if (list.currentAccount == currentAccount && TextUtils.equals(list.lang_code, lang_code)) { + list.edit(old_media, media); + } + } + } + } + } + } + + public BotPreviewsEditContainer( + Context context, + BaseFragment fragment, + long bot_id + ) { + super(context); + + this.fragment = fragment; + this.currentAccount = fragment.getCurrentAccount(); + this.resourcesProvider = fragment.getResourceProvider(); + this.bot_id = bot_id; + + setBackgroundColor(Theme.blendOver( + Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider), + Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider), 0.04f) + )); + + if (cachedLists == null) { + cachedLists = new LongSparseArray<>(); + } + LongSparseArray arr = cachedLists.get(currentAccount); + if (arr == null) cachedLists.put(currentAccount, arr = new LongSparseArray<>()); + StoriesController.BotPreviewsList list = arr.get(bot_id); + if (list == null) { + arr.put(bot_id, list = new StoriesController.BotPreviewsList(currentAccount, bot_id, "", null)); + } + mainList = list; + + viewPager = new ViewPagerFixed(context) { + @Override + protected boolean canScroll(MotionEvent e) { + if (isActionModeShowed()) return false; + return super.canScroll(e); + } + private String lastLang; + @Override + protected void onTabAnimationUpdate(boolean manual) { + String lang = getCurrentLang(); + if (!TextUtils.equals(lastLang, lang)) { + lastLang = lang; + onSelectedTabChanged(); + } + } + @Override + protected void onTabPageSelected(int position) { + String lang = getCurrentLang(); + if (!TextUtils.equals(lastLang, lang)) { + lastLang = lang; + onSelectedTabChanged(); + } + } + @Override + protected void onTabScrollEnd(int position) { + super.onTabScrollEnd(position); + String lang = getCurrentLang(); + if (!TextUtils.equals(lastLang, lang)) { + lastLang = lang; + onSelectedTabChanged(); + } + } + }; + viewPager.setAllowDisallowInterceptTouch(true); + viewPager.setAdapter(new ViewPagerFixed.Adapter() { + @Override + public int getItemCount() { + return 1 + langLists.size(); + } + + @Override + public View createView(int viewType) { + return new BotPreviewsEditLangContainer(context); + } + @Override + public int getItemId(int position) { + if (position == 0) return 0; + return langLists.get(position - 1).lang_code.hashCode(); + } + @Override + public void bindView(View view, int position, int viewType) { + BotPreviewsEditLangContainer container = (BotPreviewsEditLangContainer) view; + StoriesController.BotPreviewsList list = position == 0 ? mainList : langLists.get(position - 1); + list.load(true, 0, null); + container.setList(list); + container.setVisibleHeight(visibleHeight); + } + @Override + public String getItemTitle(int position) { + if (position == 0) { + return getString(R.string.ProfileBotLanguageGeneral); + } + return TranslateAlert2.languageNameCapital(langLists.get(position - 1).lang_code); + } + }); + addView(viewPager, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + + tabsView = viewPager.createTabsView(true, 9); + tabsView.tabMarginDp = 12; + tabsView.setPreTabClick((id, pos) -> { + if (id == -1) { + addTranslation(); + return true; + } + return false; + }); + addView(tabsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 42, Gravity.TOP)); + + updateLangs(false); + } + + public void addTranslation() { + ChooseLanguageSheet sheet = new ChooseLanguageSheet(fragment, getString(R.string.ProfileBotPreviewLanguageChoose), lng -> { + if (!localLangs.contains(lng)) { + localLangs.add(lng); + updateLangs(true); + } + AndroidUtilities.runOnUIThread(() -> { + int index = -1; + for (int i = 0; i < langLists.size(); ++i) { + if (TextUtils.equals(langLists.get(i).lang_code, lng)) { + index = i; + break; + } + } + if (index >= 0) { + tabsView.scrollToTab(lng.hashCode(), 1 + index); + } + }, 120); + }); +// sheet.makeAttached(fragment); + sheet.show(); + } + + public void onSelectedTabChanged() {} + + public RecyclerListView getCurrentListView() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + return ((BotPreviewsEditLangContainer) view).listView; + } + return null; + } + + public String getCurrentLang() { + View[] views = viewPager.getViewPages(); + View view = Math.abs(viewPager.getCurrentPosition() - viewPager.getPositionAnimated()) < .5f && views[1] != null ? views[1] : views[0]; + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list != null) { + return ((BotPreviewsEditLangContainer) view).list.lang_code; + } + return null; + } + + public StoriesController.BotPreviewsList getCurrentList() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list != null) { + return ((BotPreviewsEditLangContainer) view).list; + } + return null; + } + + public int getItemsCount() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list != null) { + return ((BotPreviewsEditLangContainer) view).list.getCount(); + } + return 0; + } + + public boolean canScroll(boolean forward) { + if (forward) + return viewPager.getCurrentPosition() == (1 + langLists.size()) - 1; + return viewPager.getCurrentPosition() == 0; + } + + public boolean isSelectedAll() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + if (!isSelected(list.messageObjects.get(i))) { + return false; + } + } + return true; + } + } + return true; + } + + public void selectAll() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + if (!isSelected(list.messageObjects.get(i))) { + select(list.messageObjects.get(i)); + } + } + } + } + } + + public void unselectAll() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + if (isSelected(list.messageObjects.get(i))) { + unselect(list.messageObjects.get(i)); + } + } + } + } + } + + public boolean checkPinchToZoom(MotionEvent ev) { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + return ((BotPreviewsEditLangContainer) view).checkPinchToZoom(ev); + } + return false; + } + + private int visibleHeight = AndroidUtilities.displaySize.y; + public void setVisibleHeight(int height) { + visibleHeight = height; + View[] views = viewPager.getViewPages(); + if (views != null) { + for (int i = 0; i < views.length; ++i) { + if (views[i] instanceof BotPreviewsEditLangContainer) { + ((BotPreviewsEditLangContainer) views[i]).setVisibleHeight(height); + } + } + } + } + + public String getBotPreviewsSubtitle() { + StringBuilder sb = new StringBuilder(); + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + int images = 0, videos = 0; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + MessageObject msg = list.messageObjects.get(i); + if (msg.storyItem != null && msg.storyItem.media != null) { + if (MessageObject.isVideoDocument(msg.storyItem.media.document)) { + videos++; + } else if (msg.storyItem.media.photo != null) { + images++; + } + } + } + } + if (images == 0 && videos == 0) return getString(R.string.BotPreviewEmpty); + if (images > 0) sb.append(formatPluralString("Images", images)); + if (videos > 0) { + if (sb.length() > 0) sb.append(", "); + sb.append(formatPluralString("Videos", videos)); + } + } + return sb.toString(); + } + + public int getStartedTrackingX() { + return 0; + } + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.storiesListUpdated) { + if (args[0] == mainList) { + updateLangs(true); + View[] views = viewPager.getViewPages(); + for (View view : views) { + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list == mainList) { + ((BotPreviewsEditLangContainer) view).adapter.notifyDataSetChanged(); + } + } + } else if (langLists.indexOf(args[0]) >= 0) { + View[] views = viewPager.getViewPages(); + for (View view : views) { + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list == args[0]) { + ((BotPreviewsEditLangContainer) view).adapter.notifyDataSetChanged(); + } + } + } + } else if (id == NotificationCenter.storiesUpdated) { + updateLangs(true); + View[] views = viewPager.getViewPages(); + for (View view : views) { + if (view instanceof BotPreviewsEditLangContainer && view instanceof BotPreviewsEditLangContainer) { + ((BotPreviewsEditLangContainer) view).adapter.notifyDataSetChanged(); + } + } + } + } + + private void updateLangs(boolean animated) { + ArrayList langs = new ArrayList<>(mainList.lang_codes); + for (String l : localLangs) { + if (!langs.contains(l)) { + langs.add(l); + } + } + ArrayList uploadingStories = MessagesController.getInstance(currentAccount).getStoriesController().getUploadingStories(bot_id); + if (uploadingStories != null) { + for (StoriesController.UploadingStory story : uploadingStories) { + if (story != null && story.entry != null && story.entry.botId == bot_id && !TextUtils.isEmpty(story.entry.botLang) && !langs.contains(story.entry.botLang)) { + langs.add(story.entry.botLang); + } + } + } + + ArrayList oldLangLists = new ArrayList<>(langLists); + langLists.clear(); + for (String lang_code : langs) { + StoriesController.BotPreviewsList list = null; + for (int i = 0; i < oldLangLists.size(); ++i) { + if (TextUtils.equals(oldLangLists.get(i).lang_code, lang_code)) { + list = oldLangLists.get(i); + break; + } + } + if (list == null) { + list = new StoriesController.BotPreviewsList(currentAccount, bot_id, lang_code, null); + list.load(true, 0, null); + } + langLists.add(list); + } + + viewPager.fillTabs(true); + SpannableString tab = new SpannableString("+ " + getString(R.string.ProfileBotLanguageAdd)); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.msg_filled_plus); + span.setScale(.9f, .9f); + span.spaceScaleX = .85f; + tab.setSpan(span, 0, 1, SpannedString.SPAN_EXCLUSIVE_EXCLUSIVE); + tabsView.addTab(-1, tab); + tabsView.finishAddingTabs(); + + final boolean showTabs = (1 + langLists.size()) > 1; + updateTabs(showTabs, animated); + } + + public void deleteLang(String lang) { + if (TextUtils.isEmpty(lang)) return; + mainList.lang_codes.remove(lang); + localLangs.remove(lang); + StoriesController.BotPreviewsList list = null; + for (int i = 0; i < langLists.size(); ++i) { + StoriesController.BotPreviewsList l = langLists.get(i); + if (l != null && TextUtils.equals(l.lang_code, lang)) { + list = l; + break; + } + } + if (list != null) { + TL_bots.deletePreviewMedia req = new TL_bots.deletePreviewMedia(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(bot_id); + req.lang_code = lang; + for (int i = 0; i < list.messageObjects.size(); ++i) { + MessageObject msg = list.messageObjects.get(i); + if (msg.storyItem != null && msg.storyItem.media != null) { + req.media.add(MessagesController.toInputMedia(msg.storyItem.media)); + } + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, null); + } + updateLangs(true); + tabsView.scrollToTab(-1, 0); + } + + private float tabsAlpha; + private ValueAnimator tabsAnimator; + private void updateTabs(boolean show, boolean animated) { + if (shownTabs != null && shownTabs == show) { + return; + } + if (tabsAnimator != null) { + tabsAnimator.cancel(); + } + shownTabs = show; + if (!animated) { + tabsAlpha = show ? 1f : 0f; + tabsView.setTranslationY(dp(show ? 0 : -42)); + viewPager.setTranslationY(dp(show ? 42 : 0)); + } else { + tabsAnimator = ValueAnimator.ofFloat(tabsAlpha, show ? 1f : 0f); + tabsAnimator.addUpdateListener(anm -> { + tabsAlpha = (float) anm.getAnimatedValue(); + tabsView.setTranslationY(lerp(-dp(42), 0, tabsAlpha)); + viewPager.setTranslationY(lerp(0, dp(42), tabsAlpha)); + }); + tabsAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + tabsAlpha = show ? 1f : 0f; + tabsView.setTranslationY(dp(show ? 0 : -42)); + viewPager.setTranslationY(dp(show ? 42 : 0)); + } + }); + tabsAnimator.setDuration(320); + tabsAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + tabsAnimator.start(); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (attachedContainers == null) attachedContainers = new LongSparseArray<>(); + LongSparseArray arr = attachedContainers.get(currentAccount); + if (arr == null) attachedContainers.put(currentAccount, arr = new LongSparseArray<>()); + arr.put(bot_id, this); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.storiesListUpdated); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.storiesUpdated); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (attachedContainers == null) attachedContainers = new LongSparseArray<>(); + LongSparseArray arr = attachedContainers.get(currentAccount); + if (arr != null) arr.remove(bot_id); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.storiesListUpdated); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.storiesUpdated); + } + + protected boolean isActionModeShowed() { + return false; + } + + protected boolean isSelected(MessageObject messageObject) { return false; } + protected boolean select(MessageObject messageObject) { return false; } + protected boolean unselect(MessageObject messageObject) { return false; } + + public void updateSelection(boolean animated) { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + ((BotPreviewsEditLangContainer) view).updateSelection(animated); + } + } + + public void createStory(final String lang_code) { + if (fragment == null || fragment.getParentActivity() == null) return; + + ChatAttachAlert chatAttachAlert = new ChatAttachAlert(fragment.getParentActivity(), fragment, false, false, false, resourcesProvider); + chatAttachAlert.setMaxSelectedPhotos(1, false); + chatAttachAlert.setStoryMediaPicker(); + chatAttachAlert.getPhotoLayout().loadGalleryPhotos(); + if (Build.VERSION.SDK_INT == 21 || Build.VERSION.SDK_INT == 22) { + AndroidUtilities.hideKeyboard(fragment.getFragmentView().findFocus()); + } + chatAttachAlert.setDelegate(new ChatAttachAlert.ChatAttachViewDelegate() { + @Override + public void didPressedButton(int button, boolean arg, boolean notify, int scheduleDate, long effectId, boolean invertMedia, boolean forceDocument) { + if (!chatAttachAlert.getPhotoLayout().getSelectedPhotos().isEmpty()) { + HashMap selectedPhotos = chatAttachAlert.getPhotoLayout().getSelectedPhotos(); + ArrayList selectedPhotosOrder = chatAttachAlert.getPhotoLayout().getSelectedPhotosOrder(); + + if (selectedPhotos.size() != 1) { + return; + } + Object value = selectedPhotos.values().iterator().next(); + if (!(value instanceof MediaController.PhotoEntry)) { + return; + } + + MediaController.PhotoEntry entry = (MediaController.PhotoEntry) value; + StoryEntry storyEntry = StoryEntry.fromPhotoEntry(entry); + storyEntry.botId = bot_id; + storyEntry.botLang = lang_code; + storyEntry.setupMatrix(); + StoryRecorder.getInstance(fragment.getParentActivity(), currentAccount).openBotEntry(bot_id, lang_code, storyEntry, null); + AndroidUtilities.runOnUIThread(chatAttachAlert::hide, 400); + } + } + @Override + public boolean selectItemOnClicking() { + return true; + } + }); + chatAttachAlert.init(); + chatAttachAlert.show(); + } + + private int setColumnsCount = Utilities.clamp(SharedConfig.storiesColumnsCount, 6, 2); + public class BotPreviewsEditLangContainer extends FrameLayout { + + private StoriesController.BotPreviewsList list; + + private boolean columnsAnimation; + private float columnsAnimationProgress; + + private int columnsCount = Utilities.clamp(SharedConfig.storiesColumnsCount, 6, 2); + private int animateToColumnsCount = Utilities.clamp(SharedConfig.storiesColumnsCount, 6, 2); + + private final SharedMediaLayout.SharedMediaListView listView; + private final ExtendedGridLayoutManager layoutManager; + private final DefaultItemAnimator itemAnimator; + + private final SharedMediaLayout.InternalListView supportingListView; + private final GridLayoutManager supportingLayoutManager; + + private final StoriesAdapter adapter; + private final StoriesAdapter supportingAdapter; + + private final FlickerLoadingView progressView; + private final StickerEmptyView emptyView; + private final TextView emptyViewOr; + private final ButtonWithCounterView emptyViewButton2; + + private final RecyclerAnimationScrollHelper scrollHelper; + private ItemTouchHelper reorder; + + private boolean allowStoriesSingleColumn = false; + private boolean storiesColumnsCountSet = false; + + private final FooterView footer; + + public void setList(StoriesController.BotPreviewsList list) { + if (this.list != list) { + allowStoriesSingleColumn = false; + storiesColumnsCountSet = false; + columnsCount = setColumnsCount; + } + this.list = list; + adapter.setList(list); + supportingAdapter.setList(list); + updateFooter(); + } + + private void updateFooter() { + final int count = list == null ? 0 : list.getCount(); + final boolean isGeneral = list == null || TextUtils.isEmpty(list.lang_code); + footer.setVisibility(count > 0 ? View.VISIBLE : View.GONE); + footer.set( + isGeneral ? + LocaleController.getString(R.string.ProfileBotPreviewFooterGeneral) : + LocaleController.formatString(R.string.ProfileBotPreviewFooterLanguage, TranslateAlert2.languageName(list.lang_code)), + LocaleController.getString(R.string.ProfileBotAddPreview), () -> createStory(list == null ? "" : list.lang_code), + !isGeneral && count > 0 ? null : LocaleController.getString(isGeneral ? + R.string.ProfileBotPreviewFooterCreateTranslation : + R.string.ProfileBotPreviewFooterDeleteTranslation + ), + !isGeneral && count > 0 ? null : () -> { + if (isGeneral) { + addTranslation(); + } else { + deleteLang(list.lang_code); + } + } + ); + + if (isGeneral) { + this.emptyView.title.setVisibility(View.VISIBLE); + this.emptyView.title.setText(getString(R.string.ProfileBotPreviewEmptyTitle)); + this.emptyView.subtitle.setText(formatPluralString("ProfileBotPreviewEmptyText", MessagesController.getInstance(currentAccount).botPreviewMediasMax)); + this.emptyView.button.setText(getString(R.string.ProfileBotPreviewEmptyButton), false); + this.emptyViewOr.setVisibility(View.GONE); + this.emptyViewButton2.setVisibility(View.GONE); + } else { + this.emptyView.title.setVisibility(View.GONE); + this.emptyView.subtitle.setText(LocaleController.formatString(R.string.ProfileBotPreviewFooterLanguage, TranslateAlert2.languageName(list.lang_code))); + this.emptyView.button.setText(getString(R.string.ProfileBotPreviewEmptyButton), false); + this.emptyViewOr.setVisibility(View.VISIBLE); + this.emptyViewButton2.setVisibility(View.VISIBLE); + this.emptyViewButton2.setText(getString(R.string.ProfileBotPreviewFooterDeleteTranslation), false); + this.emptyViewButton2.setOnClickListener(v -> deleteLang(list.lang_code)); + } + this.emptyView.button.setVisibility(adapter.getItemCount() >= MessagesController.getInstance(currentAccount).botPreviewMediasMax ? View.GONE : View.VISIBLE); + } + + public void setVisibleHeight(int height) { + float t = -(getMeasuredHeight() - Math.max(height, dp(280))) / 2f; + emptyView.setTranslationY(t); + progressView.setTranslationY(-t); + } + + public BotPreviewsEditLangContainer(Context context) { + super(context); + + this.layoutManager = new ExtendedGridLayoutManager(context, 100) { + @Override + public boolean supportsPredictiveItemAnimations() { + return false; + } + + @Override + protected void calculateExtraLayoutSpace(RecyclerView.State state, int[] extraLayoutSpace) { + super.calculateExtraLayoutSpace(state, extraLayoutSpace); + extraLayoutSpace[1] = Math.max(extraLayoutSpace[1], SharedPhotoVideoCell.getItemSize(1) * 2); + } + + private final Size size = new Size(); + @Override + protected Size getSizeForItem(int i) { + size.width = size.height = 100; + return size; + } + + @Override + protected int getFlowItemCount() { + return 0; + } + + @Override + public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler, RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) { + super.onInitializeAccessibilityNodeInfoForItem(recycler, state, host, info); + final AccessibilityNodeInfoCompat.CollectionItemInfoCompat itemInfo = info.getCollectionItemInfo(); + if (itemInfo != null && itemInfo.isHeading()) { + info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(itemInfo.getRowIndex(), itemInfo.getRowSpan(), itemInfo.getColumnIndex(), itemInfo.getColumnSpan(), false)); + } + } + + @Override + public void setSpanCount(int spanCount) { + super.setSpanCount(spanCount); + } + }; + layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + if (adapter.getItemViewType(position) == 2) { + return columnsCount; + } + return 1; + } + }); + layoutManager.setSpanCount(columnsCount); + this.itemAnimator = new DefaultItemAnimator(); + this.itemAnimator.setDurations(280); + this.itemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + this.itemAnimator.setSupportsChangeAnimations(false); + + this.listView = new SharedMediaLayout.SharedMediaListView(context) { + @Override + public boolean isStories() { + return true; + } + @Override + public int getColumnsCount() { + return columnsCount; + } + @Override + public int getAnimateToColumnsCount() { + return animateToColumnsCount; + } + @Override + public boolean isChangeColumnsAnimation() { + return columnsAnimation; + } + @Override + public float getChangeColumnsProgress() { + return columnsAnimationProgress; + } + @Override + public SharedMediaLayout.InternalListView getSupportingListView() { + return supportingListView; + } + @Override + public RecyclerListView.FastScrollAdapter getMovingAdapter() { + if (!reorder.isIdle() || isActionModeShowed()) return null; + return adapter; + } + @Override + public RecyclerListView.FastScrollAdapter getSupportingAdapter() { + return supportingAdapter; + } + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + float bottom = getListBottom(this); + if (columnsAnimation) { + bottom = lerp(bottom, getListBottom(supportingListView), columnsAnimationProgress); + } + footer.setVisibility(adapter.getItemCount() > 0 ? View.VISIBLE : View.GONE); + footer.setTranslationY(bottom); + } + private int getListBottom(ViewGroup listView) { + int bottom = 0; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + int childBottom = child.getBottom() - listView.getPaddingTop(); + if (childBottom > bottom) { + bottom = childBottom; + } + } + return bottom; + } + }; + this.listView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING); + this.listView.setPinnedSectionOffsetY(-dp(2)); + this.listView.setPadding(0, 0, 0, 0); + this.listView.setItemAnimator(null); + this.listView.setClipToPadding(false); + this.listView.setSectionsType(RecyclerListView.SECTIONS_TYPE_DATE); + this.listView.setLayoutManager(layoutManager); + addView(this.listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + this.listView.addItemDecoration(new RecyclerView.ItemDecoration() { + @Override + public void getItemOffsets(android.graphics.Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + final int position = listView.getChildAdapterPosition(cell), spanCount = layoutManager.getSpanCount(); + cell.isFirst = position % spanCount == 0; + cell.isLast = position % spanCount == spanCount - 1; + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } else { + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } + } + }); + this.listView.setOnItemClickListener((view, position) -> { + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + MessageObject obj = cell.getMessageObject(); + + if (isActionModeShowed()) { + if (BotPreviewsEditContainer.this.isSelected(obj)) { + BotPreviewsEditContainer.this.unselect(obj); + } else { + BotPreviewsEditContainer.this.select(obj); + } + } else { + fragment.getOrCreateStoryViewer().open( + getContext(), + obj.getId(), + list, + StoriesListPlaceProvider.of(listView) + .addBottomClip(fragment instanceof ProfileActivity && ((ProfileActivity) fragment).myProfile ? dp(68) : 0) + ); + } + } + }); + this.listView.setOnItemLongClickListener((view, position) -> { + if (isActionModeShowed()) return false; + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + MessageObject obj = cell.getMessageObject(); + if (BotPreviewsEditContainer.this.isSelected(obj)) { + BotPreviewsEditContainer.this.unselect(obj); + } else { + BotPreviewsEditContainer.this.select(obj); + } + return true; + } + return false; + }); + + this.supportingListView = new SharedMediaLayout.InternalListView(context); + this.supportingListView.setLayoutManager(supportingLayoutManager = new GridLayoutManager(context, 3) { + @Override + public boolean supportsPredictiveItemAnimations() { + return false; + } + @Override + public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { + if (columnsAnimation) { + dy = 0; + } + return super.scrollVerticallyBy(dy, recycler, state); + } + }); + this.supportingListView.addItemDecoration(new RecyclerView.ItemDecoration() { + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + final int position = supportingListView.getChildAdapterPosition(cell), spanCount = supportingLayoutManager.getSpanCount(); + cell.isFirst = position % spanCount == 0; + cell.isLast = position % spanCount == spanCount - 1; + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } else { + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } + } + }); + supportingLayoutManager.setSpanCount(animateToColumnsCount); + this.supportingListView.setVisibility(View.GONE); + addView(this.supportingListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + this.adapter = new StoriesAdapter(context) { + @Override + public void notifyDataSetChanged() { + super.notifyDataSetChanged(); + if (supportingListView.getVisibility() == View.VISIBLE) { + supportingAdapter.notifyDataSetChanged(); + } + if (emptyView != null) { + emptyView.showProgress(storiesList != null && storiesList.isLoading()); + } + } + }; + this.listView.setAdapter(adapter); + this.supportingListView.setAdapter(this.supportingAdapter = adapter.makeSupporting()); + + this.progressView = new FlickerLoadingView(context) { + + @Override + public int getColumnsCount() { + return columnsCount; + } + + @Override + public int getViewType() { + setIsSingleCell(false); + return FlickerLoadingView.STORIES_TYPE; + } + + private final Paint backgroundPaint = new Paint(); + @Override + protected void onDraw(Canvas canvas) { + backgroundPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); + canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), backgroundPaint); + super.onDraw(canvas); + } + }; + this.progressView.showDate(false); + + this.emptyView = new StickerEmptyView(context, this.progressView, StickerEmptyView.STICKER_TYPE_SEARCH); + this.emptyView.setVisibility(View.GONE); + this.emptyView.setAnimateLayoutChange(true); + addView(this.emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + this.emptyView.setOnTouchListener((v, event) -> true); + this.emptyView.showProgress(true, false); + this.emptyView.stickerView.setVisibility(View.GONE); + this.emptyView.title.setText(getString(R.string.ProfileBotPreviewEmptyTitle)); + this.emptyView.subtitle.setText(formatPluralString("ProfileBotPreviewEmptyText", MessagesController.getInstance(currentAccount).botPreviewMediasMax)); + this.emptyView.button.setText(getString(R.string.ProfileBotPreviewEmptyButton), false); + this.emptyView.button.setVisibility(View.VISIBLE); + this.emptyView.button.setOnClickListener(v -> { + createStory(list == null ? "" : list.lang_code); + }); + this.emptyViewOr = new TextView(context) { + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + @Override + protected void dispatchDraw(Canvas canvas) { + final int cy = getHeight() / 2 + dp(1); + final int h = Math.max(1, dp(.66f)); + Layout layout = getLayout(); + if (layout != null) { + paint.setColor(Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider), .45f)); + canvas.drawRect(0, cy - h / 2f, (getWidth() - (layout.getLineWidth(0) + dp(16))) / 2f, cy + h / 2f, paint); + canvas.drawRect((getWidth() + layout.getLineWidth(0) + dp(16)) / 2f, cy - h / 2f, getWidth(), cy + h / 2f, paint); + } + super.dispatchDraw(canvas); + } + }; + this.emptyViewOr.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider)); + this.emptyViewOr.setText(LocaleController.getString(R.string.ProfileBotOr)); + this.emptyViewOr.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + this.emptyViewOr.setTextAlignment(TEXT_ALIGNMENT_CENTER); + this.emptyViewOr.setGravity(Gravity.CENTER); + this.emptyViewOr.setTypeface(AndroidUtilities.bold()); + this.emptyView.linearLayout.addView(this.emptyViewOr, LayoutHelper.createLinear(165, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 17, 0, 12)); + this.emptyViewButton2 = new ButtonWithCounterView(context, false, resourcesProvider); + this.emptyViewButton2.setMinWidth(dp(200)); + this.emptyView.linearLayout.addView(this.emptyViewButton2, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44, Gravity.CENTER)); + + this.emptyView.addView(this.progressView, 0, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + this.listView.setEmptyView(this.emptyView); + this.listView.setAnimateEmptyView(true, RecyclerListView.EMPTY_VIEW_ANIMATION_TYPE_ALPHA); + + this.scrollHelper = new RecyclerAnimationScrollHelper(this.listView, this.layoutManager); + this.reorder = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public boolean isLongPressDragEnabled() { + return isActionModeShowed(); + } + + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + if (isActionModeShowed() && adapter.canReorder(viewHolder.getAdapterPosition())) { + listView.setItemAnimator(itemAnimator); + return makeMovementFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT, 0); + } else { + return makeMovementFlags(0, 0); + } + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { + if (!adapter.canReorder(viewHolder.getAdapterPosition()) || !adapter.canReorder(target.getAdapterPosition())) { + return false; + } + adapter.swapElements(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + + } + + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { + if (viewHolder != null) { + listView.hideSelector(false); + } + if (actionState == ItemTouchHelper.ACTION_STATE_IDLE) { + adapter.reorderDone(); + listView.setItemAnimator(null); + } else { + listView.cancelClickRunnables(false); + if (viewHolder != null) { + viewHolder.itemView.setPressed(true); + } + } + super.onSelectedChanged(viewHolder, actionState); + } + + @Override + public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + super.clearView(recyclerView, viewHolder); + viewHolder.itemView.setPressed(false); + } + }); + this.reorder.attachToRecyclerView(listView); + + this.footer = new FooterView(context, resourcesProvider); + addView(this.footer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + listView.setPadding(listView.getPaddingLeft(), listView.topPadding, listView.getPaddingRight(), dp(42) + footer.getMeasuredHeight()); + } + + public void updateSelection(boolean animated) { + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + if (child instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) child; + cell.setChecked(BotPreviewsEditContainer.this.isSelected(cell.getMessageObject()), animated); + } + } + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + if (child == supportingListView) return true; + return super.drawChild(canvas, child, drawingTime); + } + + public class StoriesAdapter extends RecyclerListView.FastScrollAdapter { + + private final Context context; + private final ArrayList uploadingStories = new ArrayList<>(); + @Nullable + public StoriesController.StoriesList storiesList; + private StoriesAdapter supportingAdapter; + + public StoriesAdapter(Context context) { + this.context = context; + checkColumns(); + } + + public void setList(StoriesController.StoriesList list) { + this.storiesList = list; + if (this != BotPreviewsEditLangContainer.this.supportingAdapter) { + checkColumns(); + } + notifyDataSetChanged(); + } + + public StoriesAdapter makeSupporting() { + StoriesAdapter adapter = new StoriesAdapter(getContext()); + this.supportingAdapter = adapter; + return adapter; + } + + private void checkColumns() { + if (storiesList == null) { + return; + } + if ((!storiesColumnsCountSet || allowStoriesSingleColumn && getItemCount() > 1) && getItemCount() > 0) { + if (getItemCount() < 5) { + columnsCount = Math.max(1, getItemCount()); + allowStoriesSingleColumn = columnsCount == 1; + } else if (allowStoriesSingleColumn || columnsCount == 1) { + allowStoriesSingleColumn = false; + columnsCount = Math.max(2, SharedConfig.storiesColumnsCount); + } + layoutManager.setSpanCount(columnsCount); + storiesColumnsCountSet = true; + } + } + + @Override + public void notifyDataSetChanged() { + if (storiesList instanceof StoriesController.BotPreviewsList) { + StoriesController.BotPreviewsList botList = (StoriesController.BotPreviewsList) storiesList; + uploadingStories.clear(); + ArrayList list = MessagesController.getInstance(storiesList.currentAccount).getStoriesController().getUploadingStories(bot_id); + if (list != null) { + for (int i = 0; i < list.size(); ++i) { + StoriesController.UploadingStory story = list.get(i); + if (story.entry != null && !story.entry.isEdit && TextUtils.equals(story.entry.botLang, botList.lang_code)) { + uploadingStories.add(story); + } + } + } + } + super.notifyDataSetChanged(); + if (supportingAdapter != null) { + supportingAdapter.notifyDataSetChanged(); + } + if (this != BotPreviewsEditLangContainer.this.supportingAdapter) { + checkColumns(); + updateFooter(); + } + } + + @Override + public int getItemCount() { + if (storiesList == null) { + return 0; + } + return uploadingStories.size() + storiesList.getCount(); + } + + @Override + public int getTotalItemsCount() { + return getItemCount(); + } + + @Override + public boolean isEnabled(RecyclerView.ViewHolder holder) { + return false; + } + + private SharedPhotoVideoCell2.SharedResources sharedResources; + + FlickerLoadingView globalGradientView; + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (sharedResources == null) { + sharedResources = new SharedPhotoVideoCell2.SharedResources(parent.getContext(), resourcesProvider); + } + SharedPhotoVideoCell2 cell = new SharedPhotoVideoCell2(context, sharedResources, currentAccount); + cell.setCheck2(); + cell.setGradientView(globalGradientView); + cell.isStory = true; + return new RecyclerListView.Holder(cell); + } + + + private int columnsCount() { + if (this == supportingAdapter) return animateToColumnsCount; + return columnsCount; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (storiesList == null) { + return; + } + int viewType = holder.getItemViewType(); + if (!(holder.itemView instanceof SharedPhotoVideoCell2)) return; + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) holder.itemView; + cell.isStory = true; + if (position >= 0 && position < uploadingStories.size()) { + StoriesController.UploadingStory uploadingStory = uploadingStories.get(position); + cell.isStoryPinned = false; + if (uploadingStory.sharedMessageObject == null) { + final TL_stories.TL_storyItem storyItem = new TL_stories.TL_storyItem(); + storyItem.id = storyItem.messageId = Long.hashCode(uploadingStory.random_id); + storyItem.attachPath = uploadingStory.firstFramePath; + uploadingStory.sharedMessageObject = new MessageObject(storiesList.currentAccount, storyItem) { + @Override + public float getProgress() { + return uploadingStory.progress; + } + }; + uploadingStory.sharedMessageObject.uploadingStory = uploadingStory; + } + cell.setMessageObject(uploadingStory.sharedMessageObject, columnsCount()); + cell.isStory = true; + cell.setReorder(false); + cell.setChecked(false, false); + return; + } + position -= uploadingStories.size(); + if (position < 0 || position >= storiesList.messageObjects.size()) { + cell.isStoryPinned = false; + cell.setMessageObject(null, columnsCount()); + cell.isStory = true; + return; + } + MessageObject messageObject = storiesList.messageObjects.get(position); + cell.isStoryPinned = messageObject != null && storiesList.isPinned(messageObject.getId()); + cell.setReorder(true); + cell.setMessageObject(messageObject, columnsCount()); + if (isActionModeShowed() && messageObject != null) { + cell.setChecked(BotPreviewsEditContainer.this.isSelected(messageObject), true); + } else { + cell.setChecked(false, false); + } + } + + public void load(boolean force) { + if (storiesList == null) { + return; + } + + final int columnCount = columnsCount(); + final int count = Math.min(100, Math.max(1, columnCount / 2) * columnCount * columnCount); + storiesList.load(force, count); + } + + @Override + public int getItemViewType(int i) { + return 19; + } + + @Override + public String getLetter(int position) { + if (storiesList == null) { + return null; + } + if (position < 0 || position >= storiesList.messageObjects.size()) { + return null; + } + MessageObject messageObject = storiesList.messageObjects.get(position); + if (messageObject == null || messageObject.storyItem == null) { + return null; + } + return LocaleController.formatYearMont(messageObject.storyItem.date, true); + } + + @Override + public void onFastScrollSingleTap() { + + } + + public boolean canReorder(int position) { + if (storiesList == null) return false; + if (storiesList instanceof StoriesController.BotPreviewsList) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(bot_id); + return user != null && user.bot && user.bot_has_main_app && user.bot_can_edit; + } + if (position < 0 || position >= storiesList.messageObjects.size()) return false; + MessageObject messageObject = storiesList.messageObjects.get(position); + return storiesList.isPinned(messageObject.getId()); + } + + public ArrayList lastPinnedIds = new ArrayList<>(); + public boolean applyingReorder; + + public boolean swapElements(int fromPosition, int toPosition) { + if (storiesList == null) return false; + if (fromPosition < 0 || fromPosition >= storiesList.messageObjects.size()) return false; + if (toPosition < 0 || toPosition >= storiesList.messageObjects.size()) return false; + + ArrayList pinnedIds; + if (storiesList instanceof StoriesController.BotPreviewsList) { + pinnedIds = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + pinnedIds.add(storiesList.messageObjects.get(i).getId()); + } + } else { + pinnedIds = new ArrayList<>(storiesList.pinnedIds); + } + + if (!applyingReorder) { + lastPinnedIds.clear(); + lastPinnedIds.addAll(pinnedIds); + applyingReorder = true; + } + + MessageObject from = storiesList.messageObjects.get(fromPosition); + MessageObject to = storiesList.messageObjects.get(toPosition); + + pinnedIds.remove((Object) from.getId()); + pinnedIds.add(Utilities.clamp(toPosition, pinnedIds.size(), 0), from.getId()); + + storiesList.updatePinnedOrder(pinnedIds, false); + + notifyItemMoved(fromPosition, toPosition); + + return true; + } + + public void reorderDone() { + if (storiesList == null) return; + if (!applyingReorder) return; + + ArrayList ids; + if (storiesList instanceof StoriesController.BotPreviewsList) { + ids = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + ids.add(storiesList.messageObjects.get(i).getId()); + } + } else { + ids = storiesList.pinnedIds; + } + + boolean changed = lastPinnedIds.size() != ids.size(); + if (!changed) { + for (int i = 0; i < lastPinnedIds.size(); ++i) { + if (lastPinnedIds.get(i) != ids.get(i)) { + changed = true; + break; + } + } + } + + if (changed) { + storiesList.updatePinnedOrder(ids, true); + } + + applyingReorder = false; + } + + @Override + public void getPositionForScrollProgress(RecyclerListView listView, float progress, int[] position) { + int viewHeight = listView.getChildAt(0).getMeasuredHeight(); + int columnsCount = columnsCount(); + int totalHeight = (int) (Math.ceil(getTotalItemsCount() / (float) columnsCount) * viewHeight); + int listHeight = listView.getMeasuredHeight() - listView.getPaddingTop(); + if (viewHeight == 0) { + position[0] = position[1] = 0; + return; + } + position[0] = (int) ((progress * (totalHeight - listHeight)) / viewHeight) * columnsCount; + position[1] = (int) (progress * (totalHeight - listHeight)) % viewHeight; + } + } + + boolean isInPinchToZoomTouchMode; + boolean maybePinchToZoomTouchMode; + boolean maybePinchToZoomTouchMode2; + boolean isPinnedToTop; + + private int pointerId1, pointerId2; + + float pinchStartDistance; + float pinchScale; + boolean pinchScaleUp; + int pinchCenterPosition; + int pinchCenterOffset; + int pinchCenterX; + int pinchCenterY; + Rect rect = new Rect(); +// +// private int startedTrackingPointerId; +// private boolean startedTracking; +// private boolean maybeStartTracking; +// private int startedTrackingX; +// private int startedTrackingY; +// private VelocityTracker velocityTracker; + + public boolean checkPinchToZoom(MotionEvent ev) { + if (list == null || getParent() == null) { + return false; + } + if (columnsAnimation && !isInPinchToZoomTouchMode) { + return true; + } + + if (ev.getActionMasked() == MotionEvent.ACTION_DOWN || ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) { + if (maybePinchToZoomTouchMode && !isInPinchToZoomTouchMode && ev.getPointerCount() == 2 /*&& finishZoomTransition == null*/) { + pinchStartDistance = (float) Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)); + + pinchScale = 1f; + + pointerId1 = ev.getPointerId(0); + pointerId2 = ev.getPointerId(1); + + listView.cancelClickRunnables(false); + listView.cancelLongPress(); + listView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); + + View view = (View) getParent(); + pinchCenterX = (int) ((int) ((ev.getX(0) + ev.getX(1)) / 2.0f) - view.getX() - getX()); + pinchCenterY = (int) ((int) ((ev.getY(0) + ev.getY(1)) / 2.0f) - view.getY() - getY()); + + selectPinchPosition(pinchCenterX, pinchCenterY); + maybePinchToZoomTouchMode2 = true; + } + if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { + View view = (View) getParent(); + float y = ev.getY() - view.getY() - getY(); + if (y > 0) { + maybePinchToZoomTouchMode = true; + } + } + + } else if (ev.getActionMasked() == MotionEvent.ACTION_MOVE && (isInPinchToZoomTouchMode || maybePinchToZoomTouchMode2)) { + int index1 = -1; + int index2 = -1; + for (int i = 0; i < ev.getPointerCount(); i++) { + if (pointerId1 == ev.getPointerId(i)) { + index1 = i; + } + if (pointerId2 == ev.getPointerId(i)) { + index2 = i; + } + } + if (index1 == -1 || index2 == -1) { + maybePinchToZoomTouchMode = false; + maybePinchToZoomTouchMode2 = false; + isInPinchToZoomTouchMode = false; + finishPinchToMediaColumnsCount(); + return false; + } + pinchScale = (float) Math.hypot(ev.getX(index2) - ev.getX(index1), ev.getY(index2) - ev.getY(index1)) / pinchStartDistance; + if (!isInPinchToZoomTouchMode && (pinchScale > 1.01f || pinchScale < 0.99f)) { + isInPinchToZoomTouchMode = true; + pinchScaleUp = pinchScale > 1f; + + startPinchToMediaColumnsCount(pinchScaleUp); + } + if (isInPinchToZoomTouchMode) { + if ((pinchScaleUp && pinchScale < 1f) || (!pinchScaleUp && pinchScale > 1f)) { + columnsAnimationProgress = 0; + } else { + columnsAnimationProgress = Math.max(0, Math.min(1, pinchScaleUp ? (1f - (2f - pinchScale) / 1f) : ((1f - pinchScale) / 0.5f))); + } + if (columnsAnimationProgress == 1f || columnsAnimationProgress == 0f) { + if (columnsAnimationProgress == 1f) { + int newRow = (int) Math.ceil(pinchCenterPosition / (float) animateToColumnsCount); + int columnWidth = (int) (listView.getMeasuredWidth() / (float) animateToColumnsCount); + int newColumn = (int) ((getStartedTrackingX() / (float) (listView.getMeasuredWidth() - columnWidth)) * (animateToColumnsCount - 1)); + int newPosition = newRow * animateToColumnsCount + newColumn; + if (newPosition >= adapter.getItemCount()) { + newPosition = adapter.getItemCount() - 1; + } + pinchCenterPosition = newPosition; + } + + finishPinchToMediaColumnsCount(); + if (columnsAnimationProgress == 0) { + pinchScaleUp = !pinchScaleUp; + } + + startPinchToMediaColumnsCount(pinchScaleUp); + pinchStartDistance = (float) Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)); + } + + listView.invalidate(); +// if (mediaPages[0].fastScrollHintView != null) { +// mediaPages[0].invalidate(); +// } + } + } else if ((ev.getActionMasked() == MotionEvent.ACTION_UP || (ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP && checkPointerIds(ev)) || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) && isInPinchToZoomTouchMode) { + maybePinchToZoomTouchMode2 = false; + maybePinchToZoomTouchMode = false; + isInPinchToZoomTouchMode = false; + finishPinchToMediaColumnsCount(); + } + + return isInPinchToZoomTouchMode; + } + + private void selectPinchPosition(int pinchCenterX, int pinchCenterY) { + pinchCenterPosition = -1; + int y = pinchCenterY + listView.blurTopPadding; +// if (getY() != 0 && viewType == VIEW_TYPE_PROFILE_ACTIVITY) { +// y = 0; +// } + for (int i = 0; i < listView.getChildCount(); i++) { + View child = listView.getChildAt(i); + child.getHitRect(rect); + if (rect.contains(pinchCenterX, y)) { + pinchCenterPosition = listView.getChildLayoutPosition(child); + pinchCenterOffset = child.getTop(); + } + } +// if (delegate.canSearchMembers()) { +// if (pinchCenterPosition == -1) { +// float x = Math.min(1, Math.max(pinchCenterX / (float) mediaPages[0].listView.getMeasuredWidth(), 0)); +// final int ci = mediaPages[0].selectedType == TAB_STORIES || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES ? 1 : 0; +// pinchCenterPosition = (int) (mediaPages[0].layoutManager.findFirstVisibleItemPosition() + (columnsCount - 1) * x); +// pinchCenterOffset = 0; +// } +// } + } + + private boolean checkPointerIds(MotionEvent ev) { + if (ev.getPointerCount() < 2) { + return false; + } + if (pointerId1 == ev.getPointerId(0) && pointerId2 == ev.getPointerId(1)) { + return true; + } + if (pointerId1 == ev.getPointerId(1) && pointerId2 == ev.getPointerId(0)) { + return true; + } + return false; + } + + + public int getNextMediaColumnsCount(int mediaColumnsCount, boolean up) { + int newColumnsCount = mediaColumnsCount + (!up ? 1 : -1); + if (newColumnsCount > 6) { + newColumnsCount = !up ? 9 : 6; + } + return Utilities.clamp(newColumnsCount, 6, allowStoriesSingleColumn ? 1 : 2); + } + + private void startPinchToMediaColumnsCount(boolean pinchScaleUp) { + if (columnsAnimation) { + return; + } + if (isActionModeShowed()) { + return; + } + int newColumnsCount = getNextMediaColumnsCount(columnsCount, pinchScaleUp); + animateToColumnsCount = newColumnsCount; + if (animateToColumnsCount == columnsCount || allowStoriesSingleColumn) { + return; + } + supportingListView.setVisibility(View.VISIBLE); + supportingListView.setAdapter(supportingAdapter); + supportingListView.setPadding( + supportingListView.getPaddingLeft(), + 0, // changeColumnsTab == TAB_ARCHIVED_STORIES ? dp(64) : 0, + supportingListView.getPaddingRight(), + dp(42) + footer.getMeasuredHeight() // isStoriesView() ? dp(72) : 0 + ); +// mediaPage.buttonView.setVisibility(changeColumnsTab == TAB_STORIES && isStoriesView() ? View.VISIBLE : View.GONE); + + supportingLayoutManager.setSpanCount(newColumnsCount); + supportingListView.invalidateItemDecorations(); + supportingLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + if (adapter.getItemViewType(position) == 2) { + return columnsCount; + } + return 1; + } + }); + AndroidUtilities.updateVisibleRows(listView); + + columnsAnimation = true; +// if (changeColumnsTab == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(true); +// } + columnsAnimationProgress = 0; + if (pinchCenterPosition >= 0) { + supportingLayoutManager.scrollToPositionWithOffset(pinchCenterPosition, pinchCenterOffset - supportingListView.getPaddingTop()); + } else { + saveScrollPosition(); + } + } + + private void finishPinchToMediaColumnsCount() { + if (columnsAnimation) { + if (columnsAnimationProgress == 1f) { + columnsAnimation = false; + setColumnsCount = columnsCount = animateToColumnsCount; + SharedConfig.setStoriesColumnsCount(animateToColumnsCount); + + int oldItemCount = adapter.getItemCount(); +// if (i == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(false); +// } + supportingListView.setVisibility(View.GONE); + layoutManager.setSpanCount(columnsCount); + listView.invalidateItemDecorations(); + listView.invalidate(); + if (adapter.getItemCount() == oldItemCount) { + AndroidUtilities.updateVisibleRows(listView); + } else { + adapter.notifyDataSetChanged(); + } + if (pinchCenterPosition >= 0) { + View view = supportingLayoutManager.findViewByPosition(pinchCenterPosition); + if (view != null) { + pinchCenterOffset = view.getTop(); + } + layoutManager.scrollToPositionWithOffset(pinchCenterPosition, -listView.getPaddingTop() + pinchCenterOffset); + } else { + saveScrollPosition(); + } + return; + } + if (columnsAnimationProgress == 0) { + columnsAnimation = false; +// if (changeColumnsTab == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(false); +// } + supportingListView.setVisibility(View.GONE); + listView.invalidate(); + return; + } + boolean forward = columnsAnimationProgress > 0.2f; + ValueAnimator animator = ValueAnimator.ofFloat(columnsAnimationProgress, forward ? 1f : 0); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + columnsAnimationProgress = (float) valueAnimator.getAnimatedValue(); + listView.invalidate(); + } + }); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + columnsAnimation = false; + if (forward) { + columnsCount = animateToColumnsCount; + setColumnsCount = columnsCount; + SharedConfig.setStoriesColumnsCount(animateToColumnsCount); + } + int oldItemCount = adapter.getItemCount(); +// if (i == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(false); +// } + if (forward) { + layoutManager.setSpanCount(columnsCount); + listView.invalidateItemDecorations(); + if (adapter.getItemCount() == oldItemCount) { + AndroidUtilities.updateVisibleRows(listView); + } else { + adapter.notifyDataSetChanged(); + } + } + supportingListView.setVisibility(View.GONE); + if (pinchCenterPosition >= 0) { + if (forward) { + View view = supportingLayoutManager.findViewByPosition(pinchCenterPosition); + if (view != null) { + pinchCenterOffset = view.getTop(); + } + } + layoutManager.scrollToPositionWithOffset(pinchCenterPosition, -listView.getPaddingTop() + pinchCenterOffset); + } else { + saveScrollPosition(); + } + super.onAnimationEnd(animation); + } + }); + animator.setInterpolator(CubicBezierInterpolator.DEFAULT); + animator.setDuration(200); + animator.start(); + } + } + + private void saveScrollPosition() { +// for (int k = 0; k < mediaPages.length; k++) { +// RecyclerListView listView = mediaPages[k].listView; +// if (listView != null) { +// int messageId = 0; +// int offset = 0; +// for (int i = 0; i < listView.getChildCount(); i++) { +// View child = listView.getChildAt(i); +// if (child instanceof SharedPhotoVideoCell2) { +// SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) child; +// messageId = cell.getMessageId(); +// offset = cell.getTop(); +// } +// if (child instanceof SharedDocumentCell) { +// SharedDocumentCell cell = (SharedDocumentCell) child; +// messageId = cell.getMessage().getId(); +// offset = cell.getTop(); +// } +// if (child instanceof SharedAudioCell) { +// SharedAudioCell cell = (SharedAudioCell) child; +// messageId = cell.getMessage().getId(); +// offset = cell.getTop(); +// } +// if (messageId != 0) { +// break; +// } +// } +// if (messageId != 0) { +// int index = -1, position = -1; +// final int type = mediaPages[k].selectedType; +// if (type == TAB_STORIES || type == TAB_ARCHIVED_STORIES) { +// SharedMediaLayout.StoriesAdapter adapter = type == TAB_STORIES ? storiesAdapter : archivedStoriesAdapter; +// if (adapter.storiesList != null) { +// for (int i = 0; i < adapter.storiesList.messageObjects.size(); ++i) { +// if (messageId == adapter.storiesList.messageObjects.get(i).getId()) { +// index = i; +// break; +// } +// } +// } +// position = index; +// } else if (type >= 0 && type < sharedMediaData.length) { +// for (int i = 0; i < sharedMediaData[type].messages.size(); i++) { +// if (messageId == sharedMediaData[type].messages.get(i).getId()) { +// index = i; +// break; +// } +// } +// position = sharedMediaData[type].startOffset + index; +// } else { +// continue; +// } +// if (index >= 0) { +// ((LinearLayoutManager) listView.getLayoutManager()).scrollToPositionWithOffset(position, -mediaPages[k].listView.getPaddingTop() + offset); +// if (photoVideoChangeColumnsAnimation) { +// mediaPages[k].animationSupportingLayoutManager.scrollToPositionWithOffset(position, -mediaPages[k].listView.getPaddingTop() + offset); +// } +// } +// } +// } +// } + } + + public class FooterView extends LinearLayout { + + private final TextView textView; + private final ButtonWithCounterView buttonView; + private final TextView orTextView; + private final ButtonWithCounterView button2View; + + public FooterView(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + + setPadding(dp(24), dp(21), dp(24), dp(21)); + setOrientation(VERTICAL); + + textView = new TextView(context); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextAlignment(TEXT_ALIGNMENT_CENTER); + addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 19)); + + buttonView = new ButtonWithCounterView(context, resourcesProvider) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + }; + buttonView.setMinWidth(dp(200)); + buttonView.setText(LocaleController.getString(R.string.ProfileBotAddPreview), false); + addView(buttonView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44, Gravity.CENTER)); + + orTextView = new TextView(context) { + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + @Override + protected void dispatchDraw(Canvas canvas) { + final int cy = getHeight() / 2 + dp(1); + final int h = Math.max(1, dp(.66f)); + Layout layout = getLayout(); + if (layout != null) { + paint.setColor(Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider), .45f)); + canvas.drawRect(0, cy - h / 2f, (getWidth() - (layout.getLineWidth(0) + dp(16))) / 2f, cy + h / 2f, paint); + canvas.drawRect((getWidth() + layout.getLineWidth(0) + dp(16)) / 2f, cy - h / 2f, getWidth(), cy + h / 2f, paint); + } + super.dispatchDraw(canvas); + } + }; + orTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider)); + orTextView.setText(LocaleController.getString(R.string.ProfileBotOr)); + orTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + orTextView.setTextAlignment(TEXT_ALIGNMENT_CENTER); + orTextView.setGravity(Gravity.CENTER); + orTextView.setTypeface(AndroidUtilities.bold()); + addView(orTextView, LayoutHelper.createLinear(165, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 17, 0, 12)); + + button2View = new ButtonWithCounterView(context, false, resourcesProvider); + button2View.setMinWidth(dp(200)); + addView(button2View, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44, Gravity.CENTER)); + } + + public void set( + CharSequence text, + CharSequence buttonText, Runnable buttonListener + ) { + set(text, buttonText, buttonListener, null, null); + } + + public void set( + CharSequence text, + CharSequence buttonText, Runnable buttonListener, + CharSequence button2Text, Runnable button2Listener + ) { + textView.setText(text); + buttonView.setText(buttonText, false); + buttonView.setOnClickListener(v -> buttonListener.run()); + if (button2Text == null) { + orTextView.setVisibility(View.GONE); + button2View.setVisibility(View.GONE); + } else { + orTextView.setVisibility(View.VISIBLE); + button2View.setVisibility(View.VISIBLE); + button2View.setText(button2Text, false); + button2View.setOnClickListener(v -> button2Listener.run()); + } + } + } + + } + + private static class ChooseLanguageSheet extends BottomSheetWithRecyclerListView { + + private final int currentAccount; + private final CharSequence title; + private UniversalAdapter adapter; + + private FrameLayout searchContainer; + private ImageView searchImageView; + private EditTextBoldCursor searchEditText; + + public ChooseLanguageSheet(BaseFragment fragment, CharSequence title, Utilities.Callback whenSelected) { + super(fragment, true, false, false, fragment.getResourceProvider()); + + searchContainer = new FrameLayout(getContext()); + searchImageView = new ImageView(getContext()); + + this.currentAccount = fragment.getCurrentAccount(); + this.title = title; + updateTitle(); + topPadding = .6f; + setShowHandle(true); + handleOffset = true; + fixNavigationBar(); + setSlidingActionBar(); + + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + recyclerListView.setOnItemClickListener((view, position) -> { + if (adapter == null) return; + position -= 1; + UItem item = adapter.getItem(position); + if (item != null && item.object instanceof TranslateController.Language) { + whenSelected.run(((TranslateController.Language) item.object).code); + dismiss(); + } + }); + } + + @Override + protected CharSequence getTitle() { + return title; + } + + @Override + protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { + adapter = new UniversalAdapter(listView, getContext(), currentAccount, 0, this::fillItems, resourcesProvider); + adapter.setApplyBackground(false); + return adapter; + } + + private void fillItems(ArrayList items, UniversalAdapter adapter) { + ArrayList languages = TranslateController.getLanguages(); + for (TranslateController.Language lng : languages) { + items.add(LanguageView.Factory.of(lng)); + } + } + + public static class LanguageView extends LinearLayout { + + private final TextView title; + private final TextView subtitle; + + public LanguageView(Context context) { + super(context); + + setPadding(dp(22), 0, dp(22), 0); + setOrientation(VERTICAL); + + title = new TextView(context); + title.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + title.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + title.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + addView(title, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 7, 0, 0)); + + subtitle = new TextView(context); + subtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtitle.setTextColor(Theme.getColor(Theme.key_dialogTextGray2)); + subtitle.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + addView(subtitle, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 4, 0, 0)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(56), MeasureSpec.EXACTLY) + ); + } + + private boolean needDivider; + public void set(TranslateController.Language lng, boolean divider) { + title.setText(lng.displayName); + subtitle.setText(lng.ownDisplayName); + + if (needDivider != divider) invalidate(); + setWillNotDraw(!(needDivider = divider)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(getPaddingLeft(), getHeight() - 1, getWidth(), getHeight(), Theme.dividerPaint); + } + } + + public static class Factory extends UItem.UItemFactory { + @Override + public LanguageView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new LanguageView(context); + } + @Override + public void bindView(View view, UItem item, boolean divider) { + ((LanguageView) view).set((TranslateController.Language) item.object, divider); + } + public static UItem of(TranslateController.Language l) { + UItem item = UItem.ofFactory(LanguageView.Factory.class); + item.object = l; + return item; + } + } + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java index 5b1e96367..b4e84349f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java @@ -44,7 +44,7 @@ public class ButtonWithCounterView extends FrameLayout implements Loadable { private final AnimatedTextView.AnimatedTextDrawable countText; private float countAlpha; private final AnimatedFloat countAlphaAnimated = new AnimatedFloat(350, CubicBezierInterpolator.EASE_OUT_QUINT); - private final View rippleView; + public final View rippleView; private final boolean filled; public ButtonWithCounterView(Context context, Theme.ResourcesProvider resourcesProvider) { @@ -111,12 +111,12 @@ public class ButtonWithCounterView extends FrameLayout implements Loadable { } public void updateColors() { + text.setTextColor(Theme.getColor(filled ? Theme.key_featuredStickers_buttonText : Theme.key_featuredStickers_addButton, resourcesProvider)); if (filled) { rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_listSelector, resourcesProvider), 8, 8)); } else { - rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.multAlpha(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider), .10f), 8, 8)); + rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.multAlpha(text.getTextColor(), .10f), 8, 8)); } - text.setTextColor(Theme.getColor(filled ? Theme.key_featuredStickers_buttonText : Theme.key_featuredStickers_addButton, resourcesProvider)); subText.setTextColor(Theme.getColor(filled ? Theme.key_featuredStickers_buttonText : Theme.key_featuredStickers_addButton, resourcesProvider)); countText.setTextColor(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider)); } @@ -128,6 +128,9 @@ public class ButtonWithCounterView extends FrameLayout implements Loadable { public void setTextColor(int color) { text.setTextColor(color); + if (!filled) { + rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.multAlpha(text.getTextColor(), .10f), 8, 8)); + } } private boolean countFilled = true; @@ -537,4 +540,21 @@ public class ButtonWithCounterView extends FrameLayout implements Loadable { public void wrapContentDynamic() { wrapContentDynamic = true; } + + private int minWidth; + private boolean wrapWidth; + + public void setMinWidth(int px) { + this.wrapWidth = true; + this.minWidth = px; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (wrapWidth) { + super.onMeasure(MeasureSpec.makeMeasureSpec((int) Math.min(Math.max(getPaddingLeft() + text.getCurrentWidth() + getPaddingRight(), minWidth), MeasureSpec.getSize(widthMeasureSpec)), MeasureSpec.EXACTLY), heightMeasureSpec); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java index dffeafb73..ef56eac07 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java @@ -516,6 +516,10 @@ public class DraftsController { public TLRPC.InputPeer peer; + public long botId; + public String botLang; + public TLRPC.InputMedia botEdit; + public StoryDraft(@NonNull StoryEntry entry) { this.id = entry.draftId; this.date = entry.draftDate; @@ -572,6 +576,9 @@ public class DraftsController { this.videoVolume = entry.videoVolume; this.peer = entry.peer; + this.botId = entry.botId; + this.botLang = entry.botLang; + this.botEdit = entry.editingBotPreview; } public StoryEntry toEntry() { @@ -666,6 +673,10 @@ public class DraftsController { entry.videoVolume = videoVolume; entry.peer = peer; + entry.botId = botId; + entry.botLang = botLang; + entry.editingBotPreview = botEdit; + return entry; } @@ -791,6 +802,15 @@ public class DraftsController { } stream.writeFloat(videoVolume); + + stream.writeInt64(botId); + stream.writeString(botLang == null ? "" : botLang); + if (botEdit == null) { + stream.writeInt32(TLRPC.TL_null.constructor); + } else { + botEdit.serializeToStream(stream); + } + } public int getObjectSize() { @@ -976,6 +996,14 @@ public class DraftsController { if (stream.remaining() > 0) { videoVolume = stream.readFloat(exception); } + if (stream.remaining() > 0) { + botId = stream.readInt64(exception); + botLang = stream.readString(exception); + magic = stream.readInt32(exception); + if (magic != TLRPC.TL_null.constructor) { + botEdit = TLRPC.InputMedia.TLdeserialize(stream, magic, exception); + } + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java index 9bb84625a..2d6c7a364 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java @@ -26,6 +26,8 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.text.Editable; import android.text.Layout; +import android.text.SpannableStringBuilder; +import android.text.Spanned; import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; @@ -53,6 +55,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearSmoothScrollerCustom; import androidx.recyclerview.widget.RecyclerView; +import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; @@ -97,6 +100,7 @@ import org.telegram.ui.Components.EmojiTabsStrip; import org.telegram.ui.Components.EmojiView; import org.telegram.ui.Components.ExtendedGridLayoutManager; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.LoadingSpan; import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.Reactions.ReactionImageHolder; @@ -2783,6 +2787,7 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. public static final int WIDGET_PHOTO = 2; public static final int WIDGET_REACTION = 3; public static final int WIDGET_LINK = 4; + public static final int WIDGET_WEATHER = 5; private class StoryWidgetsCell extends View { @@ -2800,14 +2805,30 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. public StoryWidgetsCell(Context context) { super(context); setPadding(0, 0, 0, 0); + if (canShowWidget(WIDGET_LINK)) + widgets.add(new Button(WIDGET_LINK, R.drawable.msg_limit_links, LocaleController.getString(R.string.StoryWidgetLink)).needsPremium()); if (canShowWidget(WIDGET_LOCATION)) widgets.add(new Button(WIDGET_LOCATION, R.drawable.map_pin3, LocaleController.getString(R.string.StoryWidgetLocation))); + if (canShowWidget(WIDGET_WEATHER)) { + Weather.State weather = Weather.getCached(); + Button[] btn = new Button[] { null }; + CharSequence text = Emoji.replaceEmoji((weather == null ? "🌤" : weather.getEmoji()) + " " + (weather == null ? (Weather.isDefaultCelsius() ? "24°C" : "72°F") : weather.getTemperature()), textPaint.getFontMetricsInt(), false); + if (MessagesController.getInstance(currentAccount).storyWeatherPreload && Weather.hasLocationPermission() && weather == null) { + text = new SpannableStringBuilder("___"); + ((SpannableStringBuilder) text).setSpan(new LoadingSpan(this, dp(68)), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + btn[0] = new Button(this, WIDGET_WEATHER, text); + Weather.fetch(false, state -> { + btn[0].setText(Emoji.replaceEmoji((state == null ? "🌤" : state.getEmoji()) + " " + (state == null ? (Weather.isDefaultCelsius() ? "24°C" : "72°F") : state.getTemperature()), textPaint.getFontMetricsInt(), false)); + invalidate(); + requestLayout(); + }); + } + widgets.add(btn[0] == null ? new Button(this, WIDGET_WEATHER, text) : btn[0]); + } if (canShowWidget(WIDGET_AUDIO)) widgets.add(new Button(WIDGET_AUDIO, R.drawable.filled_widget_music, LocaleController.getString(R.string.StoryWidgetAudio))); if (canShowWidget(WIDGET_PHOTO)) widgets.add(new Button(WIDGET_PHOTO, R.drawable.filled_premium_camera, LocaleController.getString(R.string.StoryWidgetPhoto))); - if (canShowWidget(WIDGET_LINK)) - widgets.add(new Button(WIDGET_LINK, R.drawable.msg_limit_links, LocaleController.getString(R.string.StoryWidgetLink)).needsPremium()); if (canShowWidget(WIDGET_REACTION)) widgets.add(new ReactionWidget()); } @@ -2819,6 +2840,7 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. int layoutLine = 0; RectF bounds = new RectF(); ButtonBounce bounce = new ButtonBounce(StoryWidgetsCell.this); + public AnimatedFloat animatedWidth = new AnimatedFloat(StoryWidgetsCell.this, 350, CubicBezierInterpolator.EASE_OUT_QUINT); abstract void draw(Canvas canvas, float left, float top); @@ -2829,6 +2851,8 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. } private class Button extends BaseWidget { + + String emojiDrawable; Drawable drawable; Drawable lockDrawable; StaticLayout layout; @@ -2836,6 +2860,7 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. float textLeft; Paint lockPaint; + public Button(int id, int iconId, String string) { this.id = id; this.drawable = getContext().getResources().getDrawable(iconId).mutate(); @@ -2849,6 +2874,25 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. this.height = dpf2(36); } + public Button(View view, int id, CharSequence text) { + this.id = id; + text = TextUtils.ellipsize(text, textPaint, AndroidUtilities.displaySize.x * .8f, TextUtils.TruncateAt.END); + this.layout = new StaticLayout(text, textPaint, 99999, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); + this.textWidth = this.layout.getLineCount() > 0 ? this.layout.getLineWidth(0) : 0; + this.textLeft = this.layout.getLineCount() > 0 ? this.layout.getLineLeft(0) : 0; + this.width = dpf2(6 + 6) + this.textWidth; + this.height = dpf2(36); + } + + public void setText(CharSequence text) { + text = TextUtils.ellipsize(text, textPaint, AndroidUtilities.displaySize.x * .8f, TextUtils.TruncateAt.END); + this.layout = new StaticLayout(text, textPaint, 99999, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); + this.textWidth = this.layout.getLineCount() > 0 ? this.layout.getLineWidth(0) : 0; + this.textLeft = this.layout.getLineCount() > 0 ? this.layout.getLineLeft(0) : 0; + this.width = dpf2(6 + 11.6f) + this.textWidth; + this.height = dpf2(36); + } + public Button needsPremium() { if (!UserConfig.getInstance(currentAccount).isPremium()) { lockDrawable = getContext().getResources().getDrawable(R.drawable.msg_mini_lock3).mutate(); @@ -2868,13 +2912,22 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. if (lockDrawable != null) { canvas.saveLayerAlpha(bounds, 0xFF, Canvas.ALL_SAVE_FLAG); } - drawable.setBounds( - (int) (bounds.left + dp(6)), - (int) (bounds.top + height / 2 - dp(24) / 2), - (int) (bounds.left + dp(6 + 24)), - (int) (bounds.top + height / 2 + dp(24) / 2) - ); - drawable.draw(canvas); + if (drawable == null) { + drawable = Emoji.getEmojiBigDrawable(emojiDrawable); + if (this.drawable instanceof Emoji.EmojiDrawable) { + ((Emoji.EmojiDrawable) this.drawable).fullSize = false; + } + } + if (drawable != null) { + int sz = dp(emojiDrawable == null ? 24 : 22); + drawable.setBounds( + (int) (bounds.left + dp(6 + 12) - sz / 2), + (int) (bounds.top + height / 2 - sz / 2), + (int) (bounds.left + dp(6 + 12) + sz / 2), + (int) (bounds.top + height / 2 + sz / 2) + ); + drawable.draw(canvas); + } if (lockDrawable != null) { AndroidUtilities.rectTmp.set( bounds.left + dp(6 + 24 - 12 + .55f), @@ -2896,7 +2949,7 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. lockDrawable.draw(canvas); canvas.restore(); } - canvas.translate(bounds.left + dp(6 + 24 + 4) - textLeft, bounds.top + height / 2 - layout.getHeight() / 2f); + canvas.translate(bounds.left + dp(6 + (drawable == null && emojiDrawable == null ? 0 : 24 + 4)) - textLeft, bounds.top + height / 2 - layout.getHeight() / 2f); layout.draw(canvas); canvas.restore(); } @@ -3013,7 +3066,7 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. float x = 0; final int width = MeasureSpec.getSize(widthMeasureSpec); - final int availableWidth = (int) ((width - getPaddingLeft() - getPaddingRight()) * 0.8f); + final int availableWidth = (int) (width - getPaddingLeft() - getPaddingRight()); for (final BaseWidget widget : widgets) { widget.layoutX = x; @@ -3045,6 +3098,19 @@ public class EmojiBottomSheet extends BottomSheet implements NotificationCenter. @Override protected void dispatchDraw(Canvas canvas) { + try { + for (int i = 0; i < lineWidths.length; ++i) { + lineWidths[i] = 0; + } + for (final BaseWidget widget : widgets) { + final int i = widget.layoutLine - 1; + if (lineWidths[i] > 0) + lineWidths[i] += dp(10); + lineWidths[i] += widget.animatedWidth.set(widget.width); + } + } catch (Exception e) { + FileLog.e(e); + } for (final BaseWidget widget : widgets) { final float left = getPaddingLeft() + ((getMeasuredWidth() - getPaddingLeft() - getPaddingRight() - lineWidths[widget.layoutLine - 1]) / 2f) + widget.layoutX; final float top = dp(12) + (widget.layoutLine - 1) * dp(36 + 12); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java index 0f10e11c4..77c2626f7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java @@ -5,6 +5,7 @@ import static org.telegram.messenger.AndroidUtilities.dp; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; +import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.graphics.Canvas; @@ -27,6 +28,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ViewAnimator; +import androidx.annotation.Nullable; import androidx.core.graphics.ColorUtils; import com.google.android.gms.vision.Frame; @@ -38,6 +40,7 @@ import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.LaunchActivity; import java.util.ArrayList; @@ -57,11 +60,13 @@ public class FlashViews { private final ArrayList invertableViews = new ArrayList<>(); + @Nullable private final WindowManager windowManager; private final View windowView; + @Nullable private final WindowManager.LayoutParams windowViewParams; - public FlashViews(Context context, WindowManager windowManager, View windowView, WindowManager.LayoutParams windowViewParams) { + public FlashViews(Context context, @Nullable WindowManager windowManager, View windowView, @Nullable WindowManager.LayoutParams windowViewParams) { this.context = context; this.windowManager = windowManager; this.windowView = windowView; @@ -84,7 +89,7 @@ public class FlashViews { @Override protected void dispatchDraw(Canvas canvas) { gradientMatrix.reset(); - gradientMatrix.postTranslate(-getX(), -getY()); + gradientMatrix.postTranslate(-getX(), -getY() + AndroidUtilities.statusBarHeight); gradientMatrix.postScale(1f / getScaleX(), 1f / getScaleY(), getPivotX(), getPivotY()); drawGradient(canvas, false); } @@ -94,13 +99,11 @@ public class FlashViews { } public void flash(Utilities.Callback> takePicture) { - windowViewParams.screenBrightness = intensityValue(); - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(intensityValue()); flashTo(1f, 320, () -> { AndroidUtilities.runOnUIThread(() -> { takePicture.run(done -> { - windowViewParams.screenBrightness = -1f; - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(-1f); AndroidUtilities.runOnUIThread(() -> { flashTo(0f, 240, done); }, 80); @@ -109,6 +112,24 @@ public class FlashViews { }); } + private void setScreenBrightness(float value) { + if (windowViewParams != null) { + windowViewParams.screenBrightness = value; + if (windowManager != null) { + windowManager.updateViewLayout(windowView, windowViewParams); + } + } else { + Activity activity = AndroidUtilities.findActivity(context); + if (activity == null) activity = LaunchActivity.instance; + if (activity == null || activity.isFinishing()) return; + final Window window = activity.getWindow(); + if (window == null) return; + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.screenBrightness = value; + window.setAttributes(layoutParams); + } + } + public void previewStart() { flashTo(.85f, 240, null); } @@ -118,14 +139,12 @@ public class FlashViews { } public void flashIn(Runnable done) { - windowViewParams.screenBrightness = intensityValue(); - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(intensityValue()); flashTo(1f, 320, done); } public void flashOut() { - windowViewParams.screenBrightness = -1f; - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(-1f); flashTo(0f, 240, null); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java index 3e13cdbac..631e48627 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java @@ -58,6 +58,7 @@ import org.telegram.ui.Components.AnimatedEmojiSpan; import org.telegram.ui.Components.AnimatedFloat; import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.ButtonBounce; +import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; @@ -274,7 +275,7 @@ public class HintView2 extends View { return this; } - private static float measureCorrectly(CharSequence text, TextPaint paint) { + public static float measureCorrectly(CharSequence text, TextPaint paint) { if (text == null) { return 0; } @@ -285,10 +286,14 @@ public class HintView2 extends View { TypefaceSpan[] spans = spanned.getSpans(0, text.length(), TypefaceSpan.class); AnimatedEmojiSpan[] animatedSpans = spanned.getSpans(0, text.length(), AnimatedEmojiSpan.class); Emoji.EmojiSpan[] emojiSpans = spanned.getSpans(0, text.length(), Emoji.EmojiSpan.class); + ColoredImageSpan[] imageSpans = spanned.getSpans(0, text.length(), ColoredImageSpan.class); int add = 0; for (int i = 0; i < emojiSpans.length; ++i) { add += emojiSpans[i].size; } + for (int i = 0; i < imageSpans.length; ++i) { + add += imageSpans[i].getSize(paint, text, spanned.getSpanStart(imageSpans[i]), spanned.getSpanEnd(imageSpans[i]), paint.getFontMetricsInt()); + } for (int i = 0; i < animatedSpans.length; ++i) { add += animatedSpans[i].size; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java index 178964bba..faec1f8d7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java @@ -16,6 +16,7 @@ import org.telegram.ui.Components.SizeNotifierFrameLayout; public class KeyboardNotifier { private final View rootView; + private View realRootView; private final Utilities.Callback listener; public boolean ignoring; private boolean awaitingKeyboard; @@ -23,8 +24,13 @@ public class KeyboardNotifier { private final Rect rect = new Rect(); public KeyboardNotifier(@NonNull View rootView, Utilities.Callback listener) { + this(rootView, false, listener); + } + + public KeyboardNotifier(@NonNull View rootView, boolean getRootView, Utilities.Callback listener) { this.rootView = rootView; this.listener = listener; + realRootView = rootView; if (this.rootView.isAttachedToWindow()) { rootView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); @@ -33,6 +39,9 @@ public class KeyboardNotifier { this.rootView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(@NonNull View v) { + if (getRootView) { + realRootView = v.getRootView(); + } rootView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); rootView.addOnLayoutChangeListener(onLayoutChangeListener); } @@ -57,7 +66,7 @@ public class KeyboardNotifier { } rootView.getWindowVisibleDisplayFrame(rect); - final int screenHeight = rootView.getHeight(); + final int screenHeight = (realRootView == null ? rootView : realRootView).getHeight(); keyboardHeight = screenHeight - rect.bottom; final boolean unique = lastKeyboardHeight != keyboardHeight; lastKeyboardHeight = keyboardHeight; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java index 7ca22d37e..9d65ba9e4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java @@ -95,6 +95,7 @@ import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.AnimatedEmojiSpan; +import org.telegram.ui.Components.AnimatedFileDrawable; import org.telegram.ui.Components.BlurringShader; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.ButtonBounce; @@ -132,6 +133,7 @@ import org.telegram.ui.Components.Paint.Views.ReactionWidgetEntityView; import org.telegram.ui.Components.Paint.Views.RoundView; import org.telegram.ui.Components.Paint.Views.StickerView; import org.telegram.ui.Components.Paint.Views.TextPaintView; +import org.telegram.ui.Components.Paint.Views.WeatherView; import org.telegram.ui.Components.Point; import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; import org.telegram.ui.Components.RLottieDrawable; @@ -277,6 +279,8 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai private boolean fileFromGallery; private File file; private boolean isVideo; + private boolean isBot; + private boolean hasAudio; public ReactionsContainerLayout reactionLayout; ReactionWidgetEntityView reactionForEntity; private float reactionShowProgress; @@ -286,8 +290,15 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai private PreviewView.TextureViewHolder videoTextureHolder; private PreviewView previewView; + public void setHasAudio(boolean audio) { + if (audio != hasAudio) { + hasAudio = audio; + checkEntitiesIsVideo(); + } + } + @SuppressLint("NotifyDataSetChanged") - public PaintView(Context context, boolean fileFromGallery, File file, boolean isVideo, StoryRecorder.WindowView parent, Activity activity, int currentAccount, Bitmap bitmap, Bitmap blurBitmap, Bitmap originalBitmap, int originalRotation, ArrayList entities, StoryEntry entry, int viewWidth, int viewHeight, MediaController.CropState cropState, Runnable onInit, BlurringShader.BlurManager blurManager, Theme.ResourcesProvider resourcesProvider, PreviewView.TextureViewHolder videoTextureHolder, PreviewView previewView) { + public PaintView(Context context, boolean fileFromGallery, File file, boolean isVideo, boolean isBot, StoryRecorder.WindowView parent, Activity activity, int currentAccount, Bitmap bitmap, Bitmap blurBitmap, Bitmap originalBitmap, int originalRotation, ArrayList entities, StoryEntry entry, int viewWidth, int viewHeight, MediaController.CropState cropState, Runnable onInit, BlurringShader.BlurManager blurManager, Theme.ResourcesProvider resourcesProvider, PreviewView.TextureViewHolder videoTextureHolder, PreviewView previewView) { super(context, activity, true); setDelegate(this); this.blurManager = blurManager; @@ -295,6 +306,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai this.fileFromGallery = fileFromGallery; this.file = file; this.isVideo = isVideo; + this.isBot = isBot; this.parent = parent; this.w = viewWidth; this.h = viewHeight; @@ -586,6 +598,14 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } setupEntities(); } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (isCoverPreview) { + return false; + } + return super.dispatchTouchEvent(ev); + } }; // addView(entitiesView); @@ -603,6 +623,11 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai public boolean onTouchEvent(MotionEvent event) { return false; } + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (isCoverPreview) return false; + return super.dispatchTouchEvent(ev); + } }; // addView(selectionContainerView); @@ -1082,6 +1107,11 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai if (!keyboardVisible) { showTypefaceMenu(false); } + + if (wasKeyboardVisible != keyboardVisible) { + checkEntitiesIsVideo(); + } + wasKeyboardVisible = keyboardVisible; }) { @Override public void ignore(boolean ignore) { @@ -1095,6 +1125,8 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai EmojiBottomSheet.savedPosition = 1; } + private boolean wasKeyboardVisible; + private ObjectAnimator previewViewTranslationAnimator; private void updatePreviewViewTranslationY() { if (previewViewTranslationAnimator != null) { @@ -1133,7 +1165,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai private void setNewColor(int color) { int wasColor = colorSwatch.color; colorSwatch.color = color; - setCurrentSwatch(colorSwatch, true); + setCurrentSwatch(colorSwatch, true, null, true); ValueAnimator animator = ValueAnimator.ofFloat(0, 1).setDuration(150); animator.addUpdateListener(animation -> { @@ -1154,7 +1186,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai Point position = startPositionRelativeToEntity(null); float w = entitiesView.getMeasuredWidth() <= 0 ? this.w : entitiesView.getMeasuredWidth(); int maxWidth = (int) w - dp(14 + 26 + 18); - LocationView view = new LocationView(getContext(), position, currentAccount, location, mediaArea, w / 240f, maxWidth, 3, colorSwatch == null ? 0xFFFFFFFF : colorSwatch.color); + LocationView view = new LocationView(getContext(), position, currentAccount, location, mediaArea, w / 240f, maxWidth); if (position.x == entitiesView.getMeasuredWidth() / 2f) { view.setStickyX(EntityView.STICKY_CENTER); } @@ -1164,6 +1196,39 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai view.setDelegate(this); view.setMaxWidth(maxWidth); entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); + if (currentCropState != null) { + view.scale(1.0f / currentCropState.cropScale); + view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); + } + + if (select) { + registerRemovalUndo(view); + selectEntity(view, false); + } + return view; + } + + private WeatherView createWeatherView(Weather.State weather, boolean select) { + onTextAdd(); + + forceChanges = true; + + Size paintingSize = getPaintingSize(); + Point position = startPositionRelativeToEntity(null); + float w = entitiesView.getMeasuredWidth() <= 0 ? this.w : entitiesView.getMeasuredWidth(); + int maxWidth = (int) w - dp(14 + 26 + 18); + WeatherView view = new WeatherView(getContext(), position, currentAccount, weather, w / 240f, maxWidth); + if (position.x == entitiesView.getMeasuredWidth() / 2f) { + view.setStickyX(EntityView.STICKY_CENTER); + } + if (position.y == entitiesView.getMeasuredHeight() / 2f) { + view.setStickyY(EntityView.STICKY_CENTER); + } + view.setDelegate(this); + view.setMaxWidth(maxWidth); + entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); if (currentCropState != null) { view.scale(1.0f / currentCropState.cropScale); view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); @@ -1185,7 +1250,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai Point position = startPositionRelativeToEntity(null); float w = entitiesView.getMeasuredWidth() <= 0 ? this.w : entitiesView.getMeasuredWidth(); int maxWidth = (int) w - dp(14 + 26 + 18); - LinkView view = new LinkView(getContext(), position, currentAccount, link, mediaArea, w / 360f, maxWidth, 3, colorSwatch == null ? 0xFFFFFFFF : colorSwatch.color); + LinkView view = new LinkView(getContext(), position, currentAccount, link, mediaArea, w / 360f, maxWidth, 3); if (position.x == entitiesView.getMeasuredWidth() / 2f) { view.setStickyX(EntityView.STICKY_CENTER); } @@ -1195,6 +1260,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai view.setDelegate(this); view.setMaxWidth(maxWidth); entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); if (currentCropState != null) { view.scale(1.0f / currentCropState.cropScale); view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); @@ -1229,6 +1295,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai view.setTypeface(PersistColorPalette.getInstance(currentAccount).getCurrentTypeface()); view.setType(PersistColorPalette.getInstance(currentAccount).getCurrentTextType()); entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); if (currentCropState != null) { view.scale(1.0f / currentCropState.cropScale); view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); @@ -1348,9 +1415,14 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai if (currentEntityView == entityView) { if (!entityView.hadMultitouch()) { if (entityView instanceof LocationView) { - ((LocationView) entityView).setType((((LocationView) entityView).getType() + 1) % 4); + LocationView view = (LocationView) entityView; + view.setType((view.getType() + 1) % view.getTypesCount()); + } else if (entityView instanceof WeatherView) { + WeatherView view = (WeatherView) entityView; + view.setType((view.getType() + 1) % view.getTypesCount()); } else if (entityView instanceof LinkView) { - ((LinkView) entityView).setType((((LinkView) entityView).getType() + 1) % 4); + LinkView view = (LinkView) entityView; + view.setType(view.getNextType()); } else if (!editingText) { if (entityView instanceof TextPaintView) { enteredThroughText = true; @@ -1807,6 +1879,19 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai @Override public boolean canShowWidget(Integer widgetId) { + if (isBot) { + return widgetId == WIDGET_PHOTO; + } + if (widgetId == WIDGET_WEATHER) { + boolean hasWeather = false; + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + if (entitiesView.getChildAt(i) instanceof WeatherView) { + hasWeather = true; + break; + } + } + return !hasWeather; + } return true; } @@ -1864,6 +1949,15 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai closing[0] = false; showLocationAlert(null, (location, area) -> appearAnimation(createLocationSticker(location, area, false))); return true; + } else if (widgetId == EmojiBottomSheet.WIDGET_WEATHER) { + closing[0] = false; + Weather.fetch(true, weather -> { + if (weather != null) { + alert.dismiss(); + appearAnimation(createWeatherView(weather, false)); + } + }); + return false; } else if (widgetId == EmojiBottomSheet.WIDGET_PHOTO) { alert.dismiss(); onGalleryClick(); @@ -2302,11 +2396,36 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_LOCATION) { LocationView locationView = createLocationSticker(entity.media, entity.mediaArea, false); - locationView.setType(entity.subType, entity.color); + if (entity.color != 0) { + locationView.setColor(entity.color); + } + locationView.setType(entity.subType); view = locationView; + } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_WEATHER) { + if (entity.weather == null) continue; + WeatherView weatherView = createWeatherView(entity.weather, false); + if (entity.color != 0) { + weatherView.setColor(entity.color); + } + weatherView.setType(entity.subType); + view = weatherView; } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_LINK) { LinkView linkView = createLinkSticker(entity.linkSettings, entity.mediaArea, false); - linkView.setType(entity.subType, entity.color); + if (entity.color != 0) { + linkView.setColor(entity.color); + } + if (entity.subType == -1) { + linkView.setType(3); + linkView.marker.setupLayout(); + entity.viewWidth = linkView.marker.padx + (int) Math.ceil(linkView.marker.w) + linkView.marker.padx; + entity.viewHeight = linkView.marker.pady + (int) Math.ceil(linkView.marker.h) + linkView.marker.pady; + Point p = linkView.getPosition(); + p.y += .3f * h; + linkView.setPosition(p); + continue; + } else { + linkView.setType(entity.subType); + } view = linkView; } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_REACTION) { ReactionWidgetEntityView entityView = createReactionWidget(false); @@ -2494,6 +2613,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } EntityView entity = (EntityView) v; Point position = entity.getPosition(); + boolean drawThisEntity = true; VideoEditedInfo.MediaEntity mediaEntity = new VideoEditedInfo.MediaEntity(); if (entities != null) { if (entity instanceof TextPaintView) { @@ -2608,12 +2728,12 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai mediaEntity.width = locationView.marker.getWidth(); mediaEntity.height = locationView.marker.getHeight(); mediaEntity.text = locationView.marker.getText(); - mediaEntity.color = locationView.getColor(); + mediaEntity.color = locationView.hasColor() ? locationView.getColor() : 0; mediaEntity.density = locationView.marker.density; mediaEntity.media = locationView.location; mediaEntity.mediaArea = locationView.mediaArea; mediaEntity.mediaArea.coordinates = new TL_stories.TL_mediaAreaCoordinates(); - TLRPC.Document emojiDocument = locationView.marker.getCountryCodeEmojiDocument(); + TLRPC.Document emojiDocument = locationView.marker.getCodeEmojiDocument(); if (emojiDocument != null) { VideoEditedInfo.EmojiEntity tlentity = new VideoEditedInfo.EmojiEntity(); tlentity.document_id = emojiDocument.id; @@ -2625,13 +2745,42 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } mediaEntity.entities.add(tlentity); } + } else if (entity instanceof WeatherView) { + WeatherView weatherView = (WeatherView) entity; + mediaEntity.type = VideoEditedInfo.MediaEntity.TYPE_WEATHER; + mediaEntity.subType = (byte) weatherView.getType(); + mediaEntity.width = weatherView.marker.getWidth(); + mediaEntity.height = weatherView.marker.getHeight(); + mediaEntity.text = weatherView.marker.getText(); + mediaEntity.color = weatherView.hasColor() ? weatherView.getColor() : 0; + mediaEntity.density = weatherView.marker.density; + mediaEntity.weather = weatherView.weather; + TL_stories.TL_mediaAreaWeather area = new TL_stories.TL_mediaAreaWeather(); + area.emoji = weatherView.weather.emoji; + area.temperature_c = (int) Math.round(weatherView.weather.temperature); + area.color = weatherView.marker.outlinePaint.getColor(); + mediaEntity.mediaArea = area; + mediaEntity.mediaArea.coordinates = new TL_stories.TL_mediaAreaCoordinates(); + TLRPC.Document emojiDocument = weatherView.marker.getCodeEmojiDocument(); + if (emojiDocument != null) { + VideoEditedInfo.EmojiEntity tlentity = new VideoEditedInfo.EmojiEntity(); + tlentity.document_id = emojiDocument.id; + tlentity.document = emojiDocument; + tlentity.documentAbsolutePath = FileLoader.getInstance(currentAccount).getPathToAttach(emojiDocument, true).getAbsolutePath(); + boolean isAnimatedSticker = MessageObject.isAnimatedStickerDocument(tlentity.document, true); + if (isAnimatedSticker || isVideoStickerDocument(tlentity.document)) { + tlentity.subType |= isAnimatedSticker ? 1 : 4; + } + mediaEntity.entities.add(tlentity); + } + drawThisEntity = false; } else if (entity instanceof LinkView) { LinkView linkView = (LinkView) entity; mediaEntity.type = VideoEditedInfo.MediaEntity.TYPE_LINK; mediaEntity.subType = (byte) linkView.getType(); mediaEntity.width = linkView.marker.getWidth(); mediaEntity.height = linkView.marker.getHeight(); - mediaEntity.color = linkView.getColor(); + mediaEntity.color = linkView.hasColor() ? linkView.getColor() : 0; mediaEntity.density = linkView.marker.density; mediaEntity.linkSettings = linkView.link; if (linkView.marker.hasPhoto) { @@ -2758,12 +2907,15 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai mediaEntity.viewWidth = (int) (mediaEntity.viewHeight * a); mediaEntity.x = cx - mediaEntity.width / 2f; } - } else if (entity instanceof LocationView || entity instanceof LinkView || entity instanceof ReactionWidgetEntityView) { + } else if (mediaEntity.mediaArea != null && (entity instanceof LocationView || entity instanceof WeatherView || entity instanceof LinkView || entity instanceof ReactionWidgetEntityView)) { mediaEntity.mediaArea.coordinates.x = (mediaEntity.x + mediaEntity.width / 2f) * 100; mediaEntity.mediaArea.coordinates.y = (mediaEntity.y + mediaEntity.height / 2f) * 100; if (entity instanceof LocationView) { mediaEntity.mediaArea.coordinates.w = (mediaEntity.width - 2 * ((LocationView) entity).marker.padx * scaleX / (float) entitiesView.getMeasuredWidth()) * 100; mediaEntity.mediaArea.coordinates.h = (mediaEntity.height - 2 * ((LocationView) entity).marker.pady * scaleY / (float) entitiesView.getMeasuredHeight()) * 100; + } else if (entity instanceof WeatherView) { + mediaEntity.mediaArea.coordinates.w = (mediaEntity.width - 2 * ((WeatherView) entity).marker.padx * scaleX / (float) entitiesView.getMeasuredWidth()) * 100; + mediaEntity.mediaArea.coordinates.h = (mediaEntity.height - 2 * ((WeatherView) entity).marker.pady * scaleY / (float) entitiesView.getMeasuredHeight()) * 100; } else if (entity instanceof LinkView) { mediaEntity.mediaArea.coordinates.w = (mediaEntity.width - 2 * ((LinkView) entity).marker.padx * scaleX / (float) entitiesView.getMeasuredWidth()) * 100; mediaEntity.mediaArea.coordinates.h = (mediaEntity.height - 2 * ((LinkView) entity).marker.pady * scaleY / (float) entitiesView.getMeasuredHeight()) * 100; @@ -2776,6 +2928,8 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai mediaEntity.mediaArea.coordinates.rotation = -mediaEntity.rotation / Math.PI * 180; if (entity instanceof LocationView) { radius = ((LocationView) entity).marker.getRadius(); + } else if (entity instanceof WeatherView) { + radius = ((WeatherView) entity).marker.getRadius(); } else if (entity instanceof LinkView) { radius = ((LinkView) entity).marker.getRadius(); } @@ -2785,7 +2939,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai mediaEntity.mediaArea.coordinates.radius = (scaleX * radius / (float) entitiesView.getMeasuredWidth()) * 100; } } - if ((drawEntities || drawMessage && mediaEntity.type == VideoEditedInfo.MediaEntity.TYPE_MESSAGE) && bitmap != null) { + if (drawThisEntity && (drawEntities || drawMessage && mediaEntity.type == VideoEditedInfo.MediaEntity.TYPE_MESSAGE) && bitmap != null) { canvas = new Canvas(bitmap); final float s = bitmap.getWidth() / (float) entitiesView.getMeasuredWidth(); for (int k = 0; k < 2; k++) { @@ -2922,8 +3076,76 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } } + public boolean isCoverPreview = false; + public void setCoverPreview(boolean isCoverPreview) { + if (this.isCoverPreview != isCoverPreview) { + this.isCoverPreview = isCoverPreview; + if (isCoverPreview) { + selectEntity(null); + } + setCoverPause(isCoverPreview); + } + } + + private void setCoverPause(boolean pause) { + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof StickerView) { + ImageReceiver imageReceiver = ((StickerView) child).centerImage; + + RLottieDrawable rLottieDrawable = imageReceiver.getLottieAnimation(); + AnimatedFileDrawable animatedFileDrawable = imageReceiver.getAnimation(); + imageReceiver.setAllowStartLottieAnimation(!pause); + imageReceiver.setAllowStartAnimation(!pause); + if (rLottieDrawable != null) { + if (pause) { + rLottieDrawable.stop(); + } else { + rLottieDrawable.start(); + } + } else if (animatedFileDrawable != null) { + animatedFileDrawable.setAllowDecodeSingleFrame(pause); + if (pause) { + animatedFileDrawable.stop(); + } else { + animatedFileDrawable.start(); + } + } + } + } + } + + public void setCoverTime(long time) { + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof StickerView) { + ImageReceiver imageReceiver = ((StickerView) child).centerImage; + + RLottieDrawable rLottieDrawable = imageReceiver.getLottieAnimation(); + AnimatedFileDrawable animatedFileDrawable = imageReceiver.getAnimation(); + if (rLottieDrawable != null) { + rLottieDrawable.setCurrentFrame(Math.round(((float) time % rLottieDrawable.getDuration()) / rLottieDrawable.getDuration() * rLottieDrawable.getFramesCount()), true, false); + } else if (animatedFileDrawable != null) { +// animatedFileDrawable.seekToSync(time); + } + } + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (isCoverPreview) { + return false; + } + return super.dispatchTouchEvent(ev); + } + @Override public boolean onTouch(MotionEvent ev) { + if (isCoverPreview) { + return false; + } + if (currentEntityView != null) { selectEntity(null); } @@ -2940,6 +3162,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai event.setLocation(x, y); renderView.onTouch(event); event.recycle(); + return true; } @@ -3146,7 +3369,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai int wasColor = colorSwatch.color; colorSwatch.color = PersistColorPalette.getInstance(currentAccount).getCurrentColor(); colorSwatch.brushWeight = weightDefaultValueOverride.get(); - setCurrentSwatch(colorSwatch, true, wasColor); + setCurrentSwatch(colorSwatch, true, wasColor, false); renderInputView.invalidate(); } @@ -3267,10 +3490,10 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } private void setCurrentSwatch(Swatch swatch, boolean updateInterface) { - setCurrentSwatch(swatch, updateInterface, null); + setCurrentSwatch(swatch, updateInterface, null, false); } - private void setCurrentSwatch(Swatch swatch, boolean updateInterface, Integer prevColor) { + private void setCurrentSwatch(Swatch swatch, boolean updateInterface, Integer prevColor, boolean updatedColor) { if (colorSwatch != swatch) { colorSwatch.color = swatch.color; colorSwatch.colorLocation = swatch.colorLocation; @@ -3302,10 +3525,15 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai if (currentEntityView instanceof TextPaintView) { ((TextPaintView) currentEntityView).setSwatch(new Swatch(swatch.color, swatch.colorLocation, swatch.brushWeight)); - } else if (currentEntityView instanceof LocationView) { + } else if (updatedColor && currentEntityView instanceof LocationView) { ((LocationView) currentEntityView).setColor(swatch.color); - } else if (currentEntityView instanceof LinkView) { + ((LocationView) currentEntityView).setType(3); + } else if (updatedColor && currentEntityView instanceof WeatherView) { + ((WeatherView) currentEntityView).setColor(swatch.color); + ((WeatherView) currentEntityView).setType(3); + } else if (updatedColor && currentEntityView instanceof LinkView) { ((LinkView) currentEntityView).setColor(swatch.color); + ((LinkView) currentEntityView).setType(0); } } @@ -3800,7 +4028,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } }); parent.addView(bringToFrontView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44)); - } else if (!(entityView instanceof PhotoView) && !(entityView instanceof MessageEntityView) && !(entityView instanceof RoundView) && !(entityView instanceof LocationView) && !(entityView instanceof LinkView) && !(entityView instanceof ReactionWidgetEntityView)) { + } else if (!(entityView instanceof PhotoView) && !(entityView instanceof MessageEntityView) && !(entityView instanceof RoundView) && !(entityView instanceof LocationView) && !(entityView instanceof WeatherView) && !(entityView instanceof LinkView) && !(entityView instanceof ReactionWidgetEntityView)) { TextView duplicateView = new TextView(getContext()); duplicateView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); duplicateView.setLines(1); @@ -3868,12 +4096,14 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai StickerView newStickerView = new StickerView(getContext(), (StickerView) thisEntityView, position); newStickerView.setDelegate(this); entitiesView.addView(newStickerView); + checkEntitiesIsVideo(); entityView = newStickerView; } else if (thisEntityView instanceof TextPaintView) { TextPaintView newTextPaintView = new TextPaintView(getContext(), (TextPaintView) thisEntityView, position); newTextPaintView.setDelegate(this); newTextPaintView.setMaxWidth(w - dp(7 + 7 + 18)); entitiesView.addView(newTextPaintView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); entityView = newTextPaintView; } else { return; @@ -4225,6 +4455,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai // view.setHasStickyY(true); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4285,6 +4516,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai RoundView view = new RoundView(getContext(), new Point(x, y), 0, 1f, size, thumbPath); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); post(() -> selectEntity(view)); @@ -4303,6 +4535,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai }; view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4329,6 +4562,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai // view.setHasStickyY(true); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4356,6 +4590,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai // } view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4389,6 +4624,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai ReactionWidgetEntityView view = new ReactionWidgetEntityView(getContext(), position, size); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4415,6 +4651,7 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } } entitiesView.removeView(entityView); + checkEntitiesIsVideo(); if (entityView != null) { undoStore.unregisterUndo(entityView.getUUID()); } @@ -4432,6 +4669,54 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai } } + private void checkEntitiesIsVideo() { + final boolean isVideo = wouldBeVideo(); + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof EntityView) { + ((EntityView) child).setIsVideo(isVideo); + } + } + } + + public boolean wouldBeVideo() { + if (isVideo || hasAudio) { + return true; + } + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof TextPaintView) { + TextPaintView view = (TextPaintView) child; + CharSequence text = view.getText(); + if (text instanceof Spanned) { + Spanned spanned = (Spanned) text; + AnimatedEmojiSpan[] spans = spanned.getSpans(0, text.length(), AnimatedEmojiSpan.class); + for (int j = 0; j < spans.length; ++j) { + AnimatedEmojiSpan span = spans[j]; + TLRPC.Document document = span.document; + if (document == null) { + document = AnimatedEmojiDrawable.findDocument(currentAccount, span.getDocumentId()); + } + if (document != null) { + AnimatedEmojiDrawable.getDocumentFetcher(currentAccount).putDocument(document); + } + if (StoryEntry.isAnimated(document, FileLoader.getInstance(currentAccount).getPathToAttach(document, true).getAbsolutePath())) { + return true; + } + } + } + } else if (child instanceof StickerView) { + TLRPC.Document document = ((StickerView) child).getSticker(); + if (StoryEntry.isAnimated(document, FileLoader.getInstance(currentAccount).getPathToAttach(document, true).getAbsolutePath())) { + return true; + } + } else if (child instanceof RoundView) { + return true; + } + } + return false; + } + private void registerRemovalUndo(final EntityView entityView) { if (entityView == null) { return; @@ -4990,4 +5275,12 @@ public class PaintView extends SizeNotifierFrameLayoutPhoto implements IPhotoPai return null; } + public static int argb2Rgba(int argb) { + int alpha = (argb >>> 24) & 0xFF; + int red = (argb >>> 16) & 0xFF; + int green = (argb >>> 8) & 0xFF; + int blue = argb & 0xFF; + + return (red << 24) | (green << 16) | (blue << 8) | alpha; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java index 8fb1a37f1..81395d49f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java @@ -53,6 +53,7 @@ public class PreviewButtons extends FrameLayout { public ShareButtonView shareButton; private String shareText; + private boolean shareArrow = true; public PreviewButtons(Context context) { super(context); @@ -66,7 +67,7 @@ public class PreviewButtons extends FrameLayout { addButton(BUTTON_TEXT, R.drawable.msg_photo_text2, LocaleController.getString(R.string.AccDescrPlaceText)); addButton(BUTTON_ADJUST, R.drawable.msg_photo_settings, LocaleController.getString(R.string.AccDescrPhotoAdjust)); - shareButton = new ShareButtonView(context, shareText = LocaleController.getString("Send", R.string.Send)); + shareButton = new ShareButtonView(context, shareText = LocaleController.getString(R.string.Send), shareArrow = true); shareButton.setContentDescription(LocaleController.getString(R.string.Send)); addView(shareButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); @@ -92,12 +93,12 @@ public class PreviewButtons extends FrameLayout { return false; } - public void setShareText(String text) { - if (TextUtils.equals(text, shareText)) { + public void setShareText(String text, boolean arrow) { + if (TextUtils.equals(text, shareText) && arrow == shareArrow) { return; } removeView(shareButton); - shareButton = new ShareButtonView(getContext(), text); + shareButton = new ShareButtonView(getContext(), shareText = text, shareArrow = arrow); shareButton.setContentDescription(text); addView(shareButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); updateAppearT(); @@ -217,13 +218,15 @@ public class PreviewButtons extends FrameLayout { private final StaticLayout staticLayout; private float left, width; - private final int w, h; + private int w, h; + private boolean arrow; private AnimatedFloat enabledT = new AnimatedFloat(this, 0, 220, CubicBezierInterpolator.EASE_OUT_QUINT); public boolean enabled = true; - public ShareButtonView(Context context, String text) { + public ShareButtonView(Context context, String text, boolean withArrow) { super(context); + this.arrow = withArrow; // buttonPaint.setColor(0xffffffff); buttonPaint.setColor(0xff199cff); @@ -234,17 +237,21 @@ public class PreviewButtons extends FrameLayout { textPaint.setTypeface(AndroidUtilities.bold()); // textPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); - SpannableString arrow = new SpannableString(">"); - Drawable arrowDrawable = getResources().getDrawable(R.drawable.attach_arrow_right).mutate(); - arrowDrawable.setColorFilter(new PorterDuffColorFilter(0xffffffff, PorterDuff.Mode.SRC_IN)); - arrowDrawable.setBounds(0, 0, dp(12), dp(12)); - arrow.setSpan(new ImageSpan(arrowDrawable, ImageSpan.ALIGN_CENTER), 0, arrow.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - CharSequence text2; - if (LocaleController.isRTL) { - text2 = new SpannableStringBuilder(arrow).append(" ").append(text.toUpperCase()); + if (withArrow) { + SpannableString arrow = new SpannableString(">"); + Drawable arrowDrawable = getResources().getDrawable(R.drawable.attach_arrow_right).mutate(); + arrowDrawable.setColorFilter(new PorterDuffColorFilter(0xffffffff, PorterDuff.Mode.SRC_IN)); + arrowDrawable.setBounds(0, 0, dp(12), dp(12)); + arrow.setSpan(new ImageSpan(arrowDrawable, ImageSpan.ALIGN_CENTER), 0, arrow.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + if (LocaleController.isRTL) { + text2 = new SpannableStringBuilder(arrow).append(" ").append(text.toUpperCase()); + } else { + text2 = new SpannableStringBuilder(text.toUpperCase()).append(" ").append(arrow); + } } else { - text2 = new SpannableStringBuilder(text.toUpperCase()).append(" ").append(arrow); + text2 = text.toUpperCase(); } staticLayout = new StaticLayout(text2, textPaint, AndroidUtilities.dp(180), Layout.Alignment.ALIGN_NORMAL, 1, 0, false); @@ -252,6 +259,9 @@ public class PreviewButtons extends FrameLayout { width = staticLayout.getLineCount() > 0 ? staticLayout.getLineWidth(0) : 0; w = (int) width + AndroidUtilities.dp(16 + 16 + 16); + if (!withArrow) { + w = Math.max(dp(80), w); + } h = AndroidUtilities.dp(32 + 8); setOnClickListener(e -> { @@ -291,7 +301,7 @@ public class PreviewButtons extends FrameLayout { canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(20), dp(20), buttonPaint); canvas.save(); - canvas.translate(dp(10 + 16) - left, (getHeight() - staticLayout.getHeight()) / 2f); + canvas.translate((w - width) / 2f + dp(arrow ? 3 : 0) - left, (getHeight() - staticLayout.getHeight()) / 2f); staticLayout.draw(canvas); canvas.restore(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java index 8ec3aa8af..b6bdc1b35 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java @@ -1,8 +1,8 @@ package org.telegram.ui.Stories.recorder; import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.getBitmapFromSurface; -import android.animation.ValueAnimator; import android.app.Activity; import android.content.ContentUris; import android.content.Context; @@ -16,6 +16,7 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; +import android.graphics.RectF; import android.graphics.Shader; import android.graphics.SurfaceTexture; import android.graphics.drawable.BitmapDrawable; @@ -25,12 +26,10 @@ import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.text.TextUtils; -import android.util.Log; import android.util.Pair; import android.util.Size; import android.util.SparseIntArray; import android.view.Gravity; -import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.TextureView; import android.view.View; @@ -49,7 +48,6 @@ import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ChatThemeController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; -import org.telegram.messenger.SharedConfig; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.EmojiThemes; @@ -57,21 +55,16 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatBackgroundDrawable; import org.telegram.ui.Components.AnimatedFloat; import org.telegram.ui.Components.BlurringShader; -import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.MotionBackgroundDrawable; -import org.telegram.ui.Components.Paint.Texture; import org.telegram.ui.Components.Paint.Views.RoundView; import org.telegram.ui.Components.PhotoFilterView; import org.telegram.ui.Components.VideoEditTextureView; import org.telegram.ui.Components.VideoPlayer; import java.io.File; -import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; public class PreviewView extends FrameLayout { @@ -248,6 +241,7 @@ public class PreviewView extends FrameLayout { } updateAudioPlayer(true); } + onAudioChanged(); } public void setupAudio(MessageObject messageObject, boolean animated) { @@ -291,16 +285,99 @@ public class PreviewView extends FrameLayout { setupAudio(entry, animated); } + public void onAudioChanged() {} + + private long finalSeekPosition; + private boolean slowerSeekScheduled; + private Runnable slowerSeek = () -> { + seekTo(finalSeekPosition); + slowerSeekScheduled = false; + }; private void seekTo(long position) { + seekTo(position, false); + } + + public void seekTo(long position, boolean fast) { if (videoPlayer != null) { - videoPlayer.seekTo(position, false); + videoPlayer.seekTo(position, fast); } else if (roundPlayer != null) { - roundPlayer.seekTo(position, false); + roundPlayer.seekTo(position, fast); } else if (audioPlayer != null) { - audioPlayer.seekTo(position, false); + audioPlayer.seekTo(position, fast); } updateAudioPlayer(true); updateRoundPlayer(true); + if (fast) { + if (!slowerSeekScheduled || Math.abs(finalSeekPosition - position) > 450) { + slowerSeekScheduled = true; + AndroidUtilities.cancelRunOnUIThread(this.slowerSeek); + AndroidUtilities.runOnUIThread(this.slowerSeek, 60); + } + finalSeekPosition = position; + } + } + + public long getCurrentPosition() { + if (videoPlayer != null) { + return videoPlayer.getCurrentPosition(); + } else if (roundPlayer != null) { + return roundPlayer.getCurrentPosition(); + } else if (audioPlayer != null) { + return audioPlayer.getCurrentPosition(); + } + return 0; + } + + public void getCoverBitmap(Utilities.Callback whenBitmapDone, View ...views) { + int w = (int) (dp(26) * AndroidUtilities.density); + int h = (int) (dp(30.33f) * AndroidUtilities.density); + int r = (int) (dp(4) * AndroidUtilities.density); + + Bitmap[] bitmaps = new Bitmap[ views.length ]; + for (int i = 0; i < views.length; ++i) { + if (views[i] == null || views[i].getWidth() < 0 || views[i].getHeight() <= 0) continue; + if (views[i] == this && textureView != null) { + bitmaps[i] = textureView.getBitmap(); + } else if (views[i] instanceof TextureView) { + bitmaps[i] = ((TextureView) views[i]).getBitmap(); + } else if (views[i] instanceof ViewGroup && ((ViewGroup) views[i]).getChildCount() > 0) { + bitmaps[i] = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmaps[i]); + canvas.save(); + final float s = Math.max((float) w / views[i].getWidth(), (float) h / views[i].getHeight()); + canvas.scale(s, s); + views[i].draw(canvas); + canvas.restore(); + } + } + + Utilities.globalQueue.postRunnable(() -> { + Bitmap cover = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(cover); + Path clipPath = new Path(); + RectF clipRect = new RectF(); + clipRect.set(0, 0, cover.getWidth(), cover.getHeight()); + clipPath.addRoundRect(clipRect, r, r, Path.Direction.CW); + canvas.clipPath(clipPath); + + for (int i = 0; i < bitmaps.length; ++i) { + if (bitmaps[i] == null) continue; + canvas.save(); + canvas.translate(cover.getWidth() / 2f, cover.getHeight() / 2f); + final float s = Math.max((float) cover.getWidth() / bitmaps[i].getWidth(), (float) cover.getHeight() / bitmaps[i].getHeight()); + canvas.scale(s, s); + canvas.translate(-bitmaps[i].getWidth() / 2f, -bitmaps[i].getHeight() / 2f); + canvas.drawBitmap(bitmaps[i], 0, 0, null); + canvas.restore(); + AndroidUtilities.recycleBitmap(bitmaps[i]); + } + + Utilities.stackBlurBitmap(cover, 1); + + AndroidUtilities.runOnUIThread(() -> { + whenBitmapDone.run(cover); + }); + }); } public void seek(long position) { @@ -527,7 +604,7 @@ public class PreviewView extends FrameLayout { } else { return BitmapFactory.decodeFile(path, opts); } - }, rw, rh, false); + }, rw, rh, false, true); if (entry != null && blurManager != null && bitmap != null) { blurManager.resetBitmap(); blurManager.setFallbackBlur(entry.buildBitmap(0.2f, bitmap), 0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java index 18ee7b6cb..456fc313c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java @@ -22,7 +22,6 @@ import androidx.annotation.NonNull; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; -import org.telegram.messenger.BuildVars; import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; import org.telegram.messenger.Emoji; @@ -38,7 +37,6 @@ import org.telegram.messenger.UserConfig; import org.telegram.messenger.Utilities; import org.telegram.messenger.VideoEditedInfo; import org.telegram.messenger.video.MediaCodecVideoConvertor; -import org.telegram.tgnet.AbstractSerializedData; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; @@ -105,6 +103,13 @@ public class StoryEntry { public boolean muted; public float left, right = 1; + public boolean isEditingCover; + public TLRPC.Document editingCoverDocument; + public Utilities.Callback> updateDocumentRef; + public long cover = -1; + public boolean coverSet; + public Bitmap coverBitmap; + // public int width, height; public long duration; @@ -140,6 +145,10 @@ public class StoryEntry { public int period = 86400; + public long botId; + public String botLang = ""; + public TLRPC.InputMedia editingBotPreview; + // share as message (postponed) public ArrayList shareUserIds; public boolean silent; @@ -202,7 +211,7 @@ public class StoryEntry { return false; } - private boolean isAnimated(TLRPC.Document document, String path) { + public static boolean isAnimated(TLRPC.Document document, String path) { return document != null && ( "video/webm".equals(document.mime_type) || "video/mp4".equals(document.mime_type) || MessageObject.isAnimatedStickerDocument(document, true) && RLottieDrawable.getFramesCount(path, null) > 1 @@ -241,7 +250,7 @@ public class StoryEntry { if (backgroundFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(backgroundFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(backgroundFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -280,7 +289,7 @@ public class StoryEntry { File file = filterFile != null ? filterFile : this.file; if (file != null) { try { - Bitmap fileBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(file.getPath(), opts), w, h, true); + Bitmap fileBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(file.getPath(), opts), w, h, true, true); final float s = (float) width / fileBitmap.getWidth(); tempMatrix.preScale(s, s); tempMatrix.postScale(scale, scale); @@ -293,7 +302,7 @@ public class StoryEntry { if (paintFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -308,7 +317,7 @@ public class StoryEntry { if (messageFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(messageFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(messageFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -323,7 +332,7 @@ public class StoryEntry { if (paintEntitiesFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintEntitiesFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintEntitiesFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -361,7 +370,7 @@ public class StoryEntry { public Bitmap decode(BitmapFactory.Options options); } - public static Bitmap getScaledBitmap(DecodeBitmap decode, int maxWidth, int maxHeight, boolean allowBlur) { + public static Bitmap getScaledBitmap(DecodeBitmap decode, int maxWidth, int maxHeight, boolean allowBlur, boolean scale) { BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; decode.decode(opts); @@ -377,15 +386,15 @@ public class StoryEntry { return decode.decode(opts); } - if (enoughMemory && SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_AVERAGE) { + if (scale && enoughMemory && SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_AVERAGE) { Bitmap bitmap = decode.decode(opts); final float scaleX = maxWidth / (float) bitmap.getWidth(), scaleY = maxHeight / (float) bitmap.getHeight(); - float scale = Math.max(scaleX, scaleY); + float s = Math.max(scaleX, scaleY); // if (SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_HIGH) { // scale = Math.min(scale * 2, 1); // } - final int w = (int) (bitmap.getWidth() * scale), h = (int) (bitmap.getHeight() * scale); + final int w = (int) (bitmap.getWidth() * s), h = (int) (bitmap.getHeight() * s); Bitmap scaledBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(scaledBitmap); @@ -395,10 +404,10 @@ public class StoryEntry { final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); paint.setShader(shader); - int blurRadius = Utilities.clamp(Math.round(1f / scale), 8, 0); + int blurRadius = Utilities.clamp(Math.round(1f / s), 8, 0); matrix.reset(); - matrix.postScale(scale, scale); + matrix.postScale(s, s); shader.setLocalMatrix(matrix); canvas.drawRect(0, 0, w, h, paint); @@ -892,7 +901,9 @@ public class StoryEntry { matrix.postTranslate(width / 2f, height / 2f); } float scale = (float) resultWidth / width; - if ((float) height / (float) width > 1.29f) { + if (botId != 0) { + scale = Math.min(scale, (float) resultHeight / height); + } else if ((float) height / (float) width > 1.29f) { scale = Math.max(scale, (float) resultHeight / height); } matrix.postScale(scale, scale); @@ -1384,6 +1395,26 @@ public class StoryEntry { newEntry.roundThumb = roundThumb; newEntry.roundOffset = roundOffset; newEntry.roundVolume = roundVolume; + newEntry.isEditingCover = isEditingCover; + newEntry.botId = botId; + newEntry.botLang = botLang; + newEntry.editingBotPreview = editingBotPreview; + newEntry.cover = cover; return newEntry; } + + public static long getCoverTime(TL_stories.StoryItem storyItem) { + if (storyItem == null) return 0; + if (storyItem.media == null || storyItem.media.document == null) return 0; + TLRPC.Document doc = storyItem.media.document; + TLRPC.TL_documentAttributeVideo attr = null; + for (int i = 0; i < doc.attributes.size(); ++i) { + if (doc.attributes.get(i) instanceof TLRPC.TL_documentAttributeVideo) { + attr = (TLRPC.TL_documentAttributeVideo) doc.attributes.get(i); + break; + } + } + if (attr == null) return 0; + return (long) (attr.video_start_ts * 1000L); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java index 66db8814c..921aa5e0e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java @@ -14,7 +14,6 @@ import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.TextWatcher; -import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.View; @@ -61,6 +60,7 @@ public class StoryLinkSheet extends BottomSheetWithRecyclerListView implements N private ButtonWithCounterView button; private boolean ignoreUrlEdit; + private boolean needRemoveDefPrefix; private Utilities.Callback whenDone; @@ -122,14 +122,37 @@ public class StoryLinkSheet extends BottomSheetWithRecyclerListView implements N urlEditText.editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override - public void onTextChanged(CharSequence s, int start, int before, int count) {} + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (ignoreUrlEdit) { + return; + } + needRemoveDefPrefix = s != null + && start == def.length() + && s.subSequence(0, start).toString().equals(def) + && s.length() >= start + count + && s.subSequence(start, start + count).toString().startsWith(def); + } + @Override public void afterTextChanged(Editable s) { checkPaste.run(); - if (!ignoreUrlEdit) { - checkEditURL(s == null ? null : s.toString()); + if (ignoreUrlEdit) { + return; } + if (needRemoveDefPrefix && s != null) { + String text = s.toString(); + String fixedLink = text.substring(def.length()); + ignoreUrlEdit = true; + urlEditText.editText.setText(fixedLink); + urlEditText.editText.setSelection(0, urlEditText.editText.getText().length()); + ignoreUrlEdit = false; + needRemoveDefPrefix = false; + checkEditURL(fixedLink); + return; + } + checkEditURL(s == null ? null : s.toString()); } }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java index 7e6ff0551..f577fa5f2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java @@ -3,6 +3,7 @@ package org.telegram.ui.Stories.recorder; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.dpf2; import static org.telegram.messenger.AndroidUtilities.translitSafe; +import static org.telegram.messenger.LocaleController.getString; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -10,6 +11,7 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; @@ -19,6 +21,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.text.Editable; @@ -264,6 +267,10 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification if (newState == RecyclerView.SCROLL_STATE_DRAGGING && keyboardVisible && searchField != null) { closeKeyboard(); } + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + wasAtTop = atTop(); + wasAtBottom = atBottom(); + } scrolling = newState != RecyclerView.SCROLL_STATE_IDLE; } }); @@ -331,9 +338,9 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); } catch (Throwable ignore) {} new AlertDialog.Builder(getContext(), resourcesProvider) - .setTitle(LocaleController.getString("GroupTooLarge", R.string.GroupTooLarge)) - .setMessage(LocaleController.getString("GroupTooLargeMessage", R.string.GroupTooLargeMessage)) - .setPositiveButton(LocaleController.getString("OK", R.string.OK), null) + .setTitle(getString("GroupTooLarge", R.string.GroupTooLarge)) + .setMessage(getString("GroupTooLargeMessage", R.string.GroupTooLargeMessage)) + .setPositiveButton(getString("OK", R.string.OK), null) .show(); } else if (selectedUsersByGroup.containsKey(id)) { ArrayList userIds = selectedUsersByGroup.get(id); @@ -459,12 +466,12 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification boolean allowShare = selectedType == TYPE_EVERYONE; if (allowScreenshots) { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.ic_save_to_gallery, LocaleController.getString(allowShare ? R.string.StoryEnabledScreenshotsShare : R.string.StoryEnabledScreenshots), 4) + .createSimpleBulletin(R.raw.ic_save_to_gallery, getString(allowShare ? R.string.StoryEnabledScreenshotsShare : R.string.StoryEnabledScreenshots), 4) .setDuration(5000) .show(true); } else { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.passcode_lock_close, LocaleController.getString(allowShare ? R.string.StoryDisabledScreenshotsShare : R.string.StoryDisabledScreenshots), 4) + .createSimpleBulletin(R.raw.passcode_lock_close, getString(allowShare ? R.string.StoryDisabledScreenshotsShare : R.string.StoryDisabledScreenshots), 4) .setDuration(5000) .show(true); } @@ -473,15 +480,22 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification final boolean isChannel = selectedPeer instanceof TLRPC.TL_inputPeerChannel; if (keepOnMyPage) { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.msg_story_keep, LocaleController.getString(isChannel ? R.string.StoryChannelEnableKeep : R.string.StoryEnableKeep), 4) + .createSimpleBulletin(R.raw.msg_story_keep, getString(isChannel ? R.string.StoryChannelEnableKeep : R.string.StoryEnableKeep), 4) .setDuration(5000) .show(true); } else { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.fire_on, LocaleController.getString(isChannel ? R.string.StoryChannelDisableKeep : R.string.StoryDisableKeep), 4) + .createSimpleBulletin(R.raw.fire_on, getString(isChannel ? R.string.StoryChannelDisableKeep : R.string.StoryDisableKeep), 4) .setDuration(5000) .show(true); } + if (whenCoverClicked != null) { + updateItems(true); + } + } + } else if (item.viewType == VIEW_TYPE_BUTTON) { + if (whenCoverClicked != null) { + whenCoverClicked.run(); } } }); @@ -877,7 +891,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } public float top() { - float top = layoutManager.getReverseLayout() ? AndroidUtilities.displaySize.y : 0; + float top = layoutManager.getReverseLayout() || pageType == PAGE_TYPE_SHARE ? AndroidUtilities.displaySize.y : 0; for (int i = 0; i < listView.getChildCount(); ++i) { View child = listView.getChildAt(i); if (layoutManager.getReverseLayout()) { @@ -886,6 +900,10 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification if (childTop < top) { top = AndroidUtilities.lerp(top, childTop, a); } + } else if (pageType == PAGE_TYPE_SHARE) { + if (!(child instanceof PadView)) { + top = Math.min(contentView.getPaddingTop() + child.getY(), top); + } } else if (child.getTag() instanceof Integer && (int) child.getTag() == 33) { return contentView.getPaddingTop() + child.getBottom() + child.getTranslationY(); } else if (child.getTag() instanceof Integer && (int) child.getTag() == 35) { @@ -918,7 +936,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (pageType == PAGE_TYPE_BLOCKLIST) { applyBlocklist(false); } - layoutManager.setReverseLayout(adapter.reversedLayout = pageType == PAGE_TYPE_SHARE); + layoutManager.setReverseLayout(adapter.reversedLayout = false); updateSpans(false); searchField.setText(""); searchField.setVisibility(pageType == PAGE_TYPE_SHARE ? View.GONE : View.VISIBLE); @@ -979,46 +997,55 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification ItemInner item; containsHeader = false; sectionCell.setVisibility(View.GONE); -// items.add(ItemInner.asPad(dp(84) + 4 * dp(56) + (sendAsMessageEnabled ? dp(120) : dp(64)))); List sendAs = MessagesController.getInstance(currentAccount).getStoriesController().sendAs; - boolean containsPrivacy = true; - boolean isChannel = false; + boolean containsPrivacy = true, isChannel = false; + ItemInner pad = ItemInner.asPad(24); + items.add(pad); if (canChangePeer && (isEdit || sendAs == null || sendAs.size() <= 1)) { items.add(ItemInner.asHeader2( isEdit ? - LocaleController.getString("StoryPrivacyAlertEditTitle", R.string.StoryPrivacyAlertEditTitle) : - LocaleController.getString("StoryPrivacyAlertTitle", R.string.StoryPrivacyAlertTitle), + getString("StoryPrivacyAlertEditTitle", R.string.StoryPrivacyAlertEditTitle) : + getString("StoryPrivacyAlertTitle", R.string.StoryPrivacyAlertTitle), storyPeriod != Integer.MAX_VALUE ? LocaleController.formatPluralString("StoryPrivacyAlertSubtitle", storyPeriod / 3600) : - LocaleController.getString("StoryPrivacyAlertSubtitleProfile", R.string.StoryPrivacyAlertSubtitleProfile) + getString("StoryPrivacyAlertSubtitleProfile", R.string.StoryPrivacyAlertSubtitleProfile) )); + pad.subtractHeight += dp(72); } else { - items.add(ItemInner.asHeaderCell(LocaleController.getString(R.string.StoryPrivacyPublishAs))); + items.add(ItemInner.asHeaderCell(getString(R.string.StoryPrivacyPublishAs))); + pad.subtractHeight += dp(50); if (selectedPeer == null || selectedPeer instanceof TLRPC.TL_inputPeerSelf) { TLRPC.User me = UserConfig.getInstance(currentAccount).getCurrentUser(); items.add(ItemInner.asUser(me, false, false).asSendAs()); + pad.subtractHeight += dp(62); } else if (selectedPeer instanceof TLRPC.TL_inputPeerUser) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(selectedPeer.user_id); items.add(ItemInner.asUser(user, false, false).asSendAs()); + pad.subtractHeight += dp(62); } else if (selectedPeer instanceof TLRPC.TL_inputPeerChannel) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(selectedPeer.channel_id); items.add(ItemInner.asChat(chat, false).asSendAs()); containsPrivacy = false; isChannel = ChatObject.isChannelAndNotMegaGroup(chat); + pad.subtractHeight += dp(62 + 42); } else if (selectedPeer instanceof TLRPC.TL_inputPeerChat) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(selectedPeer.chat_id); items.add(ItemInner.asChat(chat, false).asSendAs()); containsPrivacy = false; + pad.subtractHeight += dp(62 + 42); } ItemInner section = ItemInner.asShadow(null); section.resId = containsPrivacy ? 1 : 2; items.add(section); + pad.subtractHeight += dp(12); if (containsPrivacy) { - items.add(ItemInner.asHeaderCell(LocaleController.getString(R.string.StoryPrivacyWhoCanView))); + items.add(ItemInner.asHeaderCell(getString(R.string.StoryPrivacyWhoCanView))); + pad.subtractHeight += dp(40); } } if (containsPrivacy) { items.add(item = ItemInner.asType(TYPE_EVERYONE, selectedType == TYPE_EVERYONE, excludedEveryoneCount)); + pad.subtractHeight += dp(56); if (excludedEveryoneCount == 1) { if (excludedEveryone.size() == 1) { item.user = MessagesController.getInstance(currentAccount).getUser(excludedEveryone.get(0)); @@ -1032,15 +1059,18 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } } items.add(item = ItemInner.asType(TYPE_CONTACTS, selectedType == TYPE_CONTACTS, excludedContacts.size())); + pad.subtractHeight += dp(56); if (excludedContacts.size() == 1) { item.user = MessagesController.getInstance(currentAccount).getUser(excludedContacts.get(0)); } ArrayList closeFriends = getCloseFriends(); items.add(item = ItemInner.asType(TYPE_CLOSE_FRIENDS, selectedType == TYPE_CLOSE_FRIENDS, closeFriends.size())); + pad.subtractHeight += dp(56); if (closeFriends.size() == 1 && closeFriends.get(0) instanceof TLRPC.User) { item.user = (TLRPC.User) closeFriends.get(0); } items.add(item = ItemInner.asType(TYPE_SELECTED_CONTACTS, selectedType == TYPE_SELECTED_CONTACTS, selectedContactsCount)); + pad.subtractHeight += dp(56); if (selectedContactsCount == 1) { if (selectedContacts.size() == 1) { item.user = MessagesController.getInstance(currentAccount).getUser(selectedContacts.get(0)); @@ -1056,7 +1086,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification int blocklistCount = MessagesController.getInstance(currentAccount).getStoriesController().getBlocklistCount(); items.add(ItemInner.asShadow(AndroidUtilities.replaceSingleTag( blocklistCount <= 0 ? - LocaleController.getString("StoryBlockListEmpty") : + getString("StoryBlockListEmpty") : LocaleController.formatPluralString("StoryBlockList", blocklistCount), Theme.key_chat_messageLinkIn, 0, () -> { @@ -1065,14 +1095,24 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification }, resourcesProvider ))); + pad.subtractHeight += dp(80); } if (!isEdit) { - items.add(ItemInner.asCheck(LocaleController.getString(R.string.StoryAllowScreenshots), 0, allowScreenshots)); - items.add(ItemInner.asCheck(LocaleController.getString(containsPrivacy ? R.string.StoryKeep : (isChannel ? R.string.StoryKeepChannel : R.string.StoryKeepGroup)), 1, keepOnMyPage)); + items.add(ItemInner.asCheck(getString(R.string.StoryAllowScreenshots), 0, allowScreenshots)); + pad.subtractHeight += dp(50); + items.add(ItemInner.asCheck(getString(containsPrivacy ? R.string.StoryKeep : (isChannel ? R.string.StoryKeepChannel : R.string.StoryKeepGroup)), 1, keepOnMyPage)); + pad.subtractHeight += dp(50); items.add(ItemInner.asShadow(LocaleController.formatPluralString(containsPrivacy ? "StoryKeepInfo" : (isChannel ? "StoryKeepChannelInfo" : "StoryKeepGroupInfo"), (storyPeriod == Integer.MAX_VALUE ? 86400 : storyPeriod) / 3600))); + pad.subtractHeight += dp(80); + } + if (keepOnMyPage && whenCoverClicked != null) { + items.add(ItemInner.asButton(getString(R.string.StoryEditCover), coverDrawable)); + pad.subtractHeight += dp(50); + items.add(ItemInner.asShadow(getString(R.string.StoryEditCoverInfo))); + pad.subtractHeight += dp(72); } } else if (pageType == PAGE_TYPE_CLOSE_FRIENDS) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertCloseFriendsTitle", R.string.StoryPrivacyAlertCloseFriendsTitle)); + headerView.setText(getString("StoryPrivacyAlertCloseFriendsTitle", R.string.StoryPrivacyAlertCloseFriendsTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1083,11 +1123,11 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertCloseFriendsSubtitle", R.string.StoryPrivacyAlertCloseFriendsSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertCloseFriendsSubtitle", R.string.StoryPrivacyAlertCloseFriendsSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_EXCLUDE_CONTACTS) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertExcludedContactsTitle", R.string.StoryPrivacyAlertExcludedContactsTitle)); + headerView.setText(getString("StoryPrivacyAlertExcludedContactsTitle", R.string.StoryPrivacyAlertExcludedContactsTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1098,11 +1138,11 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertExcludedContactsSubtitle", R.string.StoryPrivacyAlertExcludedContactsSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertExcludedContactsSubtitle", R.string.StoryPrivacyAlertExcludedContactsSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_SELECT_CONTACTS) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertSelectContactsTitle", R.string.StoryPrivacyAlertSelectContactsTitle)); + headerView.setText(getString("StoryPrivacyAlertSelectContactsTitle", R.string.StoryPrivacyAlertSelectContactsTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1113,11 +1153,11 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertSelectContactsSubtitle", R.string.StoryPrivacyAlertSelectContactsSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertSelectContactsSubtitle", R.string.StoryPrivacyAlertSelectContactsSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_SEND_AS_MESSAGE) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertAsMessageTitle", R.string.StoryPrivacyAlertAsMessageTitle)); + headerView.setText(getString("StoryPrivacyAlertAsMessageTitle", R.string.StoryPrivacyAlertAsMessageTitle)); headerView.setCloseImageVisible(startedFromSendAsMessage); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1128,11 +1168,11 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertAsMessageSubtitle", R.string.StoryPrivacyAlertAsMessageSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertAsMessageSubtitle", R.string.StoryPrivacyAlertAsMessageSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_BLOCKLIST) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertBlocklistTitle", R.string.StoryPrivacyAlertBlocklistTitle)); + headerView.setText(getString("StoryPrivacyAlertBlocklistTitle", R.string.StoryPrivacyAlertBlocklistTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1143,11 +1183,11 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertBlocklistSubtitle", R.string.StoryPrivacyAlertBlocklistSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertBlocklistSubtitle", R.string.StoryPrivacyAlertBlocklistSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_EXCLUDE_EVERYONE) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertExcludeFromEveryoneTitle", R.string.StoryPrivacyAlertExcludeFromEveryoneTitle)); + headerView.setText(getString("StoryPrivacyAlertExcludeFromEveryoneTitle", R.string.StoryPrivacyAlertExcludeFromEveryoneTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1158,7 +1198,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertExcludeFromEveryoneSubtitle", R.string.StoryPrivacyAlertExcludeFromEveryoneSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertExcludeFromEveryoneSubtitle", R.string.StoryPrivacyAlertExcludeFromEveryoneSubtitle)); updateSectionCell(animated); containsHeader = true; } @@ -1405,9 +1445,9 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification button.setEnabled(true); button.setCount(0, animated); if (isEdit) { - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); } else { - button.setText(LocaleController.getString("StoryPrivacyButtonPost", R.string.StoryPrivacyButtonPost), animated); + button.setText(getString("StoryPrivacyButtonPost", R.string.StoryPrivacyButtonPost), animated); // if (selectedType == TYPE_CLOSE_FRIENDS) { // button.setText(LocaleController.getString("StoryPrivacyButtonCloseFriends", R.string.StoryPrivacyButtonCloseFriends), animated); // button.setCount(getCloseFriends().size(), animated); @@ -1435,13 +1475,13 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (pageType == PAGE_TYPE_CLOSE_FRIENDS) { button.setShowZero(false); button.setEnabled(true); // button.setEnabled(!selectedUsers.isEmpty()); - button.setText(LocaleController.getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); + button.setText(getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); button.setCount(selectedUsers.size(), animated); button2.setVisibility(View.GONE); } else if (pageType == PAGE_TYPE_SELECT_CONTACTS) { int count = selectedContactsCount = mergeUsers(selectedUsers, selectedUsersByGroup).size(); // button.setText(LocaleController.formatPluralString("StoryPrivacyButtonContacts", count), animated); - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); button.setShowZero(false); buttonContainer.hide(count <= 0, animated); button.setCount(count, animated); @@ -1451,10 +1491,10 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification button.setShowZero(false); button.setEnabled(true); if (selectedUsers.isEmpty()) { - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); button.setCount(0, animated); } else { - button.setText(LocaleController.getString("StoryPrivacyButtonExcludeContacts", R.string.StoryPrivacyButtonExcludeContacts), animated); + button.setText(getString("StoryPrivacyButtonExcludeContacts", R.string.StoryPrivacyButtonExcludeContacts), animated); button.setCount(selectedUsers.size(), animated); } button2.setVisibility(View.GONE); @@ -1467,7 +1507,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (pageType == PAGE_TYPE_BLOCKLIST) { button.setShowZero(false); button.setEnabled(true); // button.setEnabled(!selectedUsers.isEmpty()); - button.setText(LocaleController.getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); + button.setText(getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); StoriesController storiesController = MessagesController.getInstance(currentAccount).getStoriesController(); if (storiesController.blocklistFull) { button.setCount(selectedUsers.size(), animated); @@ -1493,7 +1533,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (pageType == PAGE_TYPE_EXCLUDE_EVERYONE) { int count = excludedEveryoneCount = mergeUsers(excludedEveryone, excludedEveryoneByGroup).size(); // button.setText(LocaleController.formatPluralString("StoryPrivacyButtonContacts", count), animated); - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); button.setShowZero(false); buttonContainer.hide(false, animated); button.setCount(count, animated); @@ -1507,7 +1547,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification return; } if (mergeUsers(selectedUsers, selectedUsersByGroup).size() > 0) { - sectionCell.setRightText(LocaleController.getString(R.string.UsersDeselectAll), true, v -> { + sectionCell.setRightText(getString(R.string.UsersDeselectAll), true, v -> { for (long userId : selectedUsers) { changelog.put(userId, false); } @@ -1600,7 +1640,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification updateSectionCell(animated); } - + public void updateLastSeen() { for (int i = 0; i < listView.getChildCount(); ++i) { View child = listView.getChildAt(i); @@ -1655,9 +1695,14 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification return -1; } + public boolean wasAtTop; public boolean atTop() { return !listView.canScrollVertically(-1); } + public boolean wasAtBottom; + public boolean atBottom() { + return !listView.canScrollVertically(1); + } private int keyboardHeight; private boolean keyboardMoving; @@ -1741,6 +1786,12 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.chatInfoDidLoad); } + private class PadView extends View { + public PadView(Context context) { + super(context); + } + } + private class Adapter extends AdapterWithDiffUtils { private Context context; @@ -1760,7 +1811,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification @Override public boolean isEnabled(RecyclerView.ViewHolder holder) { - return (holder.getItemViewType() == VIEW_TYPE_USER && canChangePeer) || holder.getItemViewType() == VIEW_TYPE_CHECK; + return (holder.getItemViewType() == VIEW_TYPE_USER && canChangePeer) || holder.getItemViewType() == VIEW_TYPE_CHECK || holder.getItemViewType() == VIEW_TYPE_BUTTON; } @NonNull @@ -1768,7 +1819,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view; if (viewType == VIEW_TYPE_PAD) { - view = new View(context); + view = new PadView(context); } else if (viewType == VIEW_TYPE_HEADER) { view = new View(context); view.setTag(35); @@ -1784,8 +1835,8 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification view.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); } else if (viewType == VIEW_TYPE_NO_USERS) { StickerEmptyView searchEmptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH, resourcesProvider); - searchEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); - searchEmptyView.subtitle.setText(LocaleController.getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); + searchEmptyView.title.setText(getString("NoResult", R.string.NoResult)); + searchEmptyView.subtitle.setText(getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); searchEmptyView.linearLayout.setTranslationY(AndroidUtilities.dp(24)); view = searchEmptyView; } else if (viewType == VIEW_TYPE_SHADOW) { @@ -1793,6 +1844,8 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification view.setBackgroundColor(0xFF0D0D0D); } else if (viewType == VIEW_TYPE_CHECK) { view = new TextCell(context, 23, true, true, resourcesProvider); + } else if (viewType == VIEW_TYPE_BUTTON) { + view = new TextCell(context, 23, true, false, resourcesProvider); } else { view = new View(context) { @Override @@ -1866,6 +1919,12 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } } else if (viewType == VIEW_TYPE_CHECK) { ((TextCell) holder.itemView).setTextAndCheck(item.text, item.resId == 0 ? allowScreenshots : keepOnMyPage, divider); + } else if (viewType == VIEW_TYPE_BUTTON) { + if (item.drawable != null) { + ((TextCell) holder.itemView).setTextAndValueDrawable(item.text, item.drawable, divider); + } else { + ((TextCell) holder.itemView).setTextAndValue(item.text, item.text2, divider); + } } else if (viewType == VIEW_TYPE_HEADER_CELL) { ((org.telegram.ui.Cells.HeaderCell) holder.itemView).setText(item.text); } @@ -2082,12 +2141,12 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification usersString.append(username); } new AlertDialog.Builder(getContext(), resourcesProvider) - .setTitle(LocaleController.getString(R.string.StoryRestrictions)) - .setMessage(AndroidUtilities.replaceCharSequence("%s", LocaleController.getString(R.string.StoryRestrictionsInfo), usersString)) - .setPositiveButton(LocaleController.getString(R.string.Proceed), (di, i) -> { + .setTitle(getString(R.string.StoryRestrictions)) + .setMessage(AndroidUtilities.replaceCharSequence("%s", getString(R.string.StoryRestrictionsInfo), usersString)) + .setPositiveButton(getString(R.string.Proceed), (di, i) -> { done(privacy, loaded, true); }) - .setNegativeButton(LocaleController.getString(R.string.Cancel), null) + .setNegativeButton(getString(R.string.Cancel), null) .show(); return; } @@ -2214,11 +2273,16 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification protected boolean canDismissWithSwipe() { View currentView = viewPager.getCurrentView(); if (currentView instanceof Page) { - return ((Page) currentView).atTop(); + return ((Page) currentView).wasAtTop; } return true; } + @Override + protected boolean canSwipeToBack(MotionEvent event) { + return false; + } + public interface DoneCallback { public void done(StoryPrivacy privacy, boolean allowScreenshots, boolean keepInProfile, TLRPC.InputPeer peer, Runnable loaded); } @@ -2345,10 +2409,12 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification public static final int VIEW_TYPE_SHADOW = 6; public static final int VIEW_TYPE_CHECK = 7; public static final int VIEW_TYPE_HEADER_CELL = 8; + public static final int VIEW_TYPE_BUTTON = 9; private static class ItemInner extends AdapterWithDiffUtils.Item { public int resId; + public Drawable drawable; public CharSequence text, text2; public TLRPC.User user; public TLRPC.Chat chat; @@ -2432,6 +2498,18 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification item.checked = checked; return item; } + public static ItemInner asButton(CharSequence text, CharSequence text2) { + ItemInner item = new ItemInner(VIEW_TYPE_BUTTON, false); + item.text = text; + item.text2 = text2; + return item; + } + public static ItemInner asButton(CharSequence text, Drawable drawable) { + ItemInner item = new ItemInner(VIEW_TYPE_BUTTON, false); + item.text = text; + item.drawable = drawable; + return item; + } public static ItemInner asNoUsers() { return new ItemInner(VIEW_TYPE_NO_USERS, false); @@ -2466,6 +2544,8 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification return false; } else if (viewType == VIEW_TYPE_CHECK && (resId != i.resId || !TextUtils.equals(text, i.text) || checked != i.checked)) { return false; + } else if (viewType == VIEW_TYPE_BUTTON && (drawable != i.drawable || !TextUtils.equals(text, i.text) || !TextUtils.equals(text2, i.text2))) { + return false; } return true; } @@ -2753,7 +2833,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification titleTextView.setText(text); isOnline[0] = false; if (sendAs) { - setSubtitle(LocaleController.getString(R.string.VoipGroupPersonalAccount)); + setSubtitle(getString(R.string.VoipGroupPersonalAccount)); subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextGray3, resourcesProvider)); } else { setSubtitle(LocaleController.formatUserStatus(UserConfig.selectedAccount, user, isOnline)); @@ -2786,16 +2866,16 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification if (participants_count >= 1) { subtitle = LocaleController.formatPluralString(isChannel ? "Subscribers" : "Members", participants_count); } else { - subtitle = LocaleController.getString(isChannel ? R.string.DiscussChannel : R.string.AccDescrGroup); + subtitle = getString(isChannel ? R.string.DiscussChannel : R.string.AccDescrGroup); } } else if (ChatObject.isChannel(chat) && !chat.megagroup) { if (participants_count >= 1) { subtitle = LocaleController.formatPluralStringComma("Subscribers", participants_count - 1); } else { if (!ChatObject.isPublic(chat)) { - subtitle = LocaleController.getString("ChannelPrivate", R.string.ChannelPrivate).toLowerCase(); + subtitle = getString("ChannelPrivate", R.string.ChannelPrivate).toLowerCase(); } else { - subtitle = LocaleController.getString("ChannelPublic", R.string.ChannelPublic).toLowerCase(); + subtitle = getString("ChannelPublic", R.string.ChannelPublic).toLowerCase(); } } } else { @@ -2803,11 +2883,11 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification subtitle = LocaleController.formatPluralStringComma("Members", participants_count - 1); } else { if (chat.has_geo) { - subtitle = LocaleController.getString("MegaLocation", R.string.MegaLocation); + subtitle = getString("MegaLocation", R.string.MegaLocation); } else if (!ChatObject.isPublic(chat)) { - subtitle = LocaleController.getString("MegaPrivate", R.string.MegaPrivate).toLowerCase(); + subtitle = getString("MegaPrivate", R.string.MegaPrivate).toLowerCase(); } else { - subtitle = LocaleController.getString("MegaPublic", R.string.MegaPublic).toLowerCase(); + subtitle = getString("MegaPublic", R.string.MegaPublic).toLowerCase(); } } } @@ -2832,7 +2912,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification public void setType(int type, int count, TLRPC.User singleUser) { if (type == TYPE_EVERYONE) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionEveryone", R.string.StoryPrivacyOptionEveryone)); + titleTextView.setText(getString("StoryPrivacyOptionEveryone", R.string.StoryPrivacyOptionEveryone)); if (count == 1 && singleUser != null) { CharSequence text = LocaleController.formatString(R.string.StoryPrivacyOptionExcludePerson, UserObject.getUserName(singleUser)); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2840,13 +2920,13 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionExcludePeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_FILTER_CHANNELS); avatarDrawable.setColor(0xFF16A5F2, 0xFF1180F7); } else if (type == TYPE_CONTACTS) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionContacts", R.string.StoryPrivacyOptionContacts)); + titleTextView.setText(getString("StoryPrivacyOptionContacts", R.string.StoryPrivacyOptionContacts)); if (count == 1 && singleUser != null) { CharSequence text = LocaleController.formatString(R.string.StoryPrivacyOptionExcludePerson, UserObject.getUserName(singleUser)); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2854,13 +2934,13 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionExcludePeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_FILTER_CONTACTS); avatarDrawable.setColor(0xFFC468F2, 0xFF965CFA); } else if (type == TYPE_CLOSE_FRIENDS) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionCloseFriends", R.string.StoryPrivacyOptionCloseFriends)); + titleTextView.setText(getString("StoryPrivacyOptionCloseFriends", R.string.StoryPrivacyOptionCloseFriends)); if (count == 1 && singleUser != null) { CharSequence text = UserObject.getUserName(singleUser); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2868,13 +2948,13 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionPeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionCloseFriendsDetail", R.string.StoryPrivacyOptionCloseFriendsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionCloseFriendsDetail", R.string.StoryPrivacyOptionCloseFriendsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_CLOSE_FRIENDS); avatarDrawable.setColor(0xFF88D93A, 0xFF2DB63B); } else if (type == TYPE_SELECTED_CONTACTS) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionSelectedContacts", R.string.StoryPrivacyOptionSelectedContacts)); + titleTextView.setText(getString("StoryPrivacyOptionSelectedContacts", R.string.StoryPrivacyOptionSelectedContacts)); if (count == 1 && singleUser != null) { CharSequence text = UserObject.getUserName(singleUser); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2882,7 +2962,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionPeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionSelectedContactsDetail", R.string.StoryPrivacyOptionSelectedContactsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionSelectedContactsDetail", R.string.StoryPrivacyOptionSelectedContactsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_FILTER_GROUPS); @@ -3127,8 +3207,8 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI); editText.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); spansContainer.addView(editText); - editText.setHintText(LocaleController.getString("Search", R.string.Search)); - hintTextWidth = (int) editText.getPaint().measureText(LocaleController.getString("Search", R.string.Search)); + editText.setHintText(getString("Search", R.string.Search)); + hintTextWidth = (int) editText.getPaint().measureText(getString("Search", R.string.Search)); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -3885,7 +3965,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification return LocaleController.formatPluralString("StoryPrivacyRecipients", sendToUsers.size()); } if (rules.isEmpty()) { - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } TLRPC.InputPrivacyRule rule1 = rules.get(0); if (type == TYPE_EVERYONE) { @@ -3896,9 +3976,9 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification return LocaleController.formatPluralString("StoryPrivacyEveryoneExclude", usersCount); } } - return LocaleController.getString("StoryPrivacyEveryone", R.string.StoryPrivacyEveryone); + return getString("StoryPrivacyEveryone", R.string.StoryPrivacyEveryone); } else if (type == TYPE_CLOSE_FRIENDS) { - return LocaleController.getString("StoryPrivacyCloseFriends", R.string.StoryPrivacyCloseFriends); + return getString("StoryPrivacyCloseFriends", R.string.StoryPrivacyCloseFriends); } else if (type == TYPE_SELECTED_CONTACTS && rule1 instanceof TLRPC.TL_inputPrivacyValueAllowUsers) { final int usersCount = ((TLRPC.TL_inputPrivacyValueAllowUsers) rule1).users.size(); return LocaleController.formatPluralString("StoryPrivacyContacts", usersCount); @@ -3909,24 +3989,24 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification if (usersCount > 0) { return LocaleController.formatPluralString("StoryPrivacyContactsExclude", usersCount); } else { - return LocaleController.getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); + return getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); } } else { - return LocaleController.getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); + return getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); } } else if (type == 0) { if (rule1 instanceof TLRPC.TL_inputPrivacyValueAllowUsers) { final int usersCount = ((TLRPC.TL_inputPrivacyValueAllowUsers) rule1).users.size(); if (usersCount <= 0) { - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } else { return LocaleController.formatPluralString("StoryPrivacyContacts", usersCount); } } else { - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } } - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } public ArrayList toValue() { @@ -4216,6 +4296,40 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification return this; } + private Drawable coverDrawable; + private Runnable whenCoverClicked; + + public StoryPrivacyBottomSheet setCover(Bitmap cover, Runnable whenClicked) { + coverDrawable = cover == null ? null : new BitmapDrawable(cover); + whenCoverClicked = whenClicked; + if (viewPager != null) { + View[] viewPages = viewPager.getViewPages(); + for (int i = 0; i < viewPages.length; ++i) { + View view = viewPages[i]; + if (view instanceof Page) { + ((Page) view).updateItems(false); + ((Page) view).updateButton(false); + } + } + } + return this; + } + + public StoryPrivacyBottomSheet setCover(Bitmap cover) { + coverDrawable = cover == null ? null : new BitmapDrawable(cover); + if (viewPager != null) { + View[] viewPages = viewPager.getViewPages(); + for (int i = 0; i < viewPages.length; ++i) { + View view = viewPages[i]; + if (view instanceof Page) { + ((Page) view).updateItems(false); + ((Page) view).updateButton(false); + } + } + } + return this; + } + public static class ChoosePeerSheet extends BottomSheet { private final int currentAccount; @@ -4304,7 +4418,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification headerView.setPadding(backgroundPaddingLeft + dp(22), dp(2), backgroundPaddingLeft + dp(22), dp(14)); headerView.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); headerView.setTypeface(AndroidUtilities.bold()); - headerView.setText(LocaleController.getString(R.string.StoryPrivacyPublishAs)); + headerView.setText(getString(R.string.StoryPrivacyPublishAs)); containerView.addView(headerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); } @@ -4316,7 +4430,7 @@ public class StoryPrivacyBottomSheet extends BottomSheet implements Notification int position = listView.getChildAdapterPosition(child); if (position == RecyclerView.NO_POSITION) continue; if (position > 0) { - top = Math.min(child.getY(), top); + top = Math.min(AndroidUtilities.lerp(top, child.getY(), child.getAlpha()), top); } } return top; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java index 112bbe2f5..4e4ee4a63 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java @@ -3,6 +3,7 @@ package org.telegram.ui.Stories.recorder; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.dpf2; import static org.telegram.messenger.AndroidUtilities.touchSlop; +import static org.telegram.messenger.LocaleController.getString; import android.Manifest; import android.animation.Animator; @@ -106,6 +107,7 @@ import org.telegram.messenger.camera.CameraController; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.SimpleTextView; @@ -258,7 +260,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg int iconSize; View view; - protected void show() {} + protected void show(boolean sent) {} protected void hide() {} protected void drawAbove(Canvas canvas, float alpha) {} @@ -271,7 +273,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg final float rounding = isForum ? size * 0.32f : size; SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { avatarImage.drawAvatar = true; avatarImage.invalidate(); } @@ -301,7 +303,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { final PeerStoriesView peerView = storyViewer.getCurrentPeerView(); if (peerView != null) { peerView.animateOut(false); @@ -338,7 +340,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { floatingButton.setVisibility(View.VISIBLE); } @Override @@ -368,7 +370,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg BackupImageView imageView = shareDialogCell.getImageView(); SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { imageView.setVisibility(View.VISIBLE); } @Override @@ -399,9 +401,14 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg final float radius = size / 2f; SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { storyCell.drawAvatar = true; storyCell.invalidate(); + if (sent) { + final int[] loc = new int[2]; + storyCell.getLocationInWindow(loc); + LaunchActivity.makeRipple(loc[0] + storyCell.getWidth() / 2f, loc[1] + storyCell.getHeight() / 2f, 1f); + } } @Override @@ -456,6 +463,73 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg previewContainer.setBackgroundColor(openType == 1 || openType == 0 ? 0 : 0xff1f1f1f); } + public void openBot(long botId, String lang_code, SourceView sourceView) { + this.botId = botId; + this.botLang = lang_code; + this.botEdit = null; + open(sourceView, true); + this.botId = botId; + this.botLang = lang_code; + } + + public void openBotEntry(long botId, String lang_code, StoryEntry entry, SourceView sourceView) { + if (isShown || entry == null) { + return; + } + + this.botId = botId; + this.botLang = lang_code; + + isReposting = false; + prepareClosing = false; + forceBackgroundVisible = false; + + if (windowManager != null && windowView != null && windowView.getParent() == null) { + windowManager.addView(windowView, windowLayoutParams); + } + + outputEntry = entry; + outputEntry.botId = botId; + outputEntry.botLang = lang_code; + isVideo = outputEntry != null && outputEntry.isVideo; + videoTextureHolder.active = false; + + if (sourceView != null) { + fromSourceView = sourceView; + openType = sourceView.type; + fromRect.set(sourceView.screenRect); + fromRounding = sourceView.rounding; + fromSourceView.hide(); + } else { + openType = 0; + fromRect.set(0, dp(100), AndroidUtilities.displaySize.x, dp(100) + AndroidUtilities.displaySize.y); + fromRounding = dp(8); + } + containerView.updateBackground(); + previewContainer.setBackgroundColor(openType == 1 || openType == 0 ? 0 : 0xff1f1f1f); + + containerView.setTranslationX(0); + containerView.setTranslationY(0); + containerView.setTranslationY2(0); + containerView.setScaleX(1f); + containerView.setScaleY(1f); + dismissProgress = 0; + + AndroidUtilities.lockOrientation(activity, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + + if (outputEntry != null) { + captionEdit.setText(outputEntry.caption); + } + + navigateTo(PAGE_PREVIEW, false); + switchToEditMode(EDIT_MODE_NONE, false); + previewButtons.appear(false, false); + + previewButtons.appear(true, true); + animateOpenTo(1, true, this::onOpenDone); + addNotificationObservers(); + } + public void open(SourceView sourceView) { open(sourceView, true); } @@ -465,6 +539,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg return; } + isReposting = false; prepareClosing = false; // privacySelectorHintOpened = false; forceBackgroundVisible = false; @@ -476,9 +551,11 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg cameraViewThumb.setImageDrawable(getCameraThumb()); - StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); - if (storyLimit != null && storyLimit.active(currentAccount)) { - showLimitReachedSheet(storyLimit, true); + if (botId == 0) { + StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); + if (storyLimit != null && storyLimit.active(currentAccount)) { + showLimitReachedSheet(storyLimit, true); + } } navigateTo(PAGE_CAMERA, false); @@ -510,6 +587,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg animateOpenTo(1, animated, this::onOpenDone); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } public void openEdit(SourceView sourceView, StoryEntry entry, long time, boolean animated) { @@ -517,6 +598,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg return; } + isReposting = false; prepareClosing = false; forceBackgroundVisible = false; @@ -559,11 +641,15 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg animateOpenTo(1, animated, this::onOpenDone); previewButtons.appear(true, true); }, time); - navigateTo(PAGE_PREVIEW, false); + navigateTo(outputEntry.isEditingCover ? PAGE_COVER : PAGE_PREVIEW, false); switchToEditMode(EDIT_MODE_NONE, false); previewButtons.appear(false, false); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } public void openForward(SourceView sourceView, StoryEntry entry, long time, boolean animated) { @@ -571,6 +657,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg return; } + isReposting = false; prepareClosing = false; forceBackgroundVisible = false; @@ -618,6 +705,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg switchToEditMode(EDIT_MODE_NONE, false); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } private static boolean firstOpen = true; @@ -626,6 +717,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg return; } + isReposting = true; prepareClosing = false; forceBackgroundVisible = false; @@ -636,7 +728,14 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg outputEntry = entry; StoryPrivacySelector.applySaved(currentAccount, outputEntry); isVideo = outputEntry != null && outputEntry.isVideo; - videoTextureHolder.active = isVideo; + videoTextureHolder.active = outputEntry != null && outputEntry.isRepostMessage && isVideo; + + if (botId == 0) { + StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); + if (storyLimit != null && storyLimit.active(currentAccount)) { + showLimitReachedSheet(storyLimit, true); + } + } if (sourceView != null) { fromSourceView = sourceView; @@ -672,6 +771,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg animateOpenTo(1, true, this::onOpenDone); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } public void close(boolean animated) { @@ -810,6 +913,9 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg actionBarContainer.setAlpha(1f); controlContainer.setAlpha(1f); windowView.setBackgroundColor(0xff000000); + if (currentPage == PAGE_COVER) { + coverButton.setAlpha(1f); + } } if (whenOpenDone != null) { @@ -857,7 +963,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } }, 16); if (fromSourceView != null) { - fromSourceView.show(); + fromSourceView.show(false); } if (whenOpenDone != null) { whenOpenDone = null; @@ -922,6 +1028,9 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg actionBarContainer.setAlpha(openProgress); controlContainer.setAlpha(openProgress); captionContainer.setAlpha(openProgress); + if (currentPage == PAGE_COVER) { + coverButton.setAlpha(openProgress); + } } public class WindowView extends SizeNotifierFrameLayout { @@ -1659,6 +1768,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg public static final int PAGE_CAMERA = 0; public static final int PAGE_PREVIEW = 1; + public static final int PAGE_COVER = 2; private int currentPage = PAGE_CAMERA; public static final int EDIT_MODE_NONE = -1; @@ -1680,6 +1790,11 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg private PreviewView.TextureViewHolder videoTextureHolder; private View captionEditOverlay; + private boolean isReposting; + private long botId; + private String botLang; + private TLRPC.InputMedia botEdit; + /* PAGE_CAMERA */ private ImageView cameraViewThumb; private DualCameraView cameraView; @@ -1722,6 +1837,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg private TrashView trash; private RoundVideoRecorder currentRoundRecorder; + /* PAGE_COVER */ + private TimelineView coverTimelineView; + private ButtonWithCounterView coverButton; + /* EDIT_MODE_PAINT */ private PaintView paintView; private RenderView paintViewRenderView; @@ -1740,6 +1859,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg private File outputFile; private StoryEntry outputEntry; private boolean fromGallery; + private long coverValue; private boolean videoError; @@ -2014,6 +2134,13 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } } } + + @Override + public void onAudioChanged() { + if (paintView != null) { + paintView.setHasAudio(outputEntry != null && outputEntry.audioPath != null); + } + } }; previewView.invalidateBlur = this::invalidateBlur; previewView.setOnTapListener(() -> { @@ -2063,6 +2190,11 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg return false; } + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + } + @Override protected void drawBlurBitmap(Bitmap bitmap, float amount) { windowView.drawBlurBitmap(bitmap, amount); @@ -2101,7 +2233,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg }, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } - Bulletin bulletin = BulletinFactory.of(captionContainer, resourcesProvider).createSimpleBulletin(R.raw.caption_limit, LocaleController.getString("CaptionPremiumTitle"), text); + Bulletin bulletin = BulletinFactory.of(captionContainer, resourcesProvider).createSimpleBulletin(R.raw.caption_limit, getString("CaptionPremiumTitle"), text); bulletin.tag = 2; bulletin.setDuration(5000); bulletin.show(false); @@ -2270,8 +2402,14 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg captionContainer.addView(videoTimelineContainerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, TimelineView.heightDp() + 25, Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0, 0, 68)); captionContainer.addView(captionEdit, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 200, 0, 0)); + coverTimelineView = new TimelineView(context, containerView, previewContainer, resourcesProvider, blurManager); + coverTimelineView.setCover(); + coverTimelineView.setVisibility(View.GONE); + coverTimelineView.setAlpha(0f); + captionContainer.addView(coverTimelineView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, TimelineView.heightDp(), Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0, 0, 6)); + backButton = new FlashViews.ImageViewInvertable(context); - backButton.setContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack)); + backButton.setContentDescription(getString("AccDescrGoBack", R.string.AccDescrGoBack)); backButton.setScaleType(ImageView.ScaleType.CENTER); backButton.setImageResource(R.drawable.msg_photo_back); backButton.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY)); @@ -2290,7 +2428,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg titleTextView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); titleTextView.setTextColor(0xffffffff); titleTextView.setTypeface(AndroidUtilities.bold()); - titleTextView.setText(LocaleController.getString("RecorderNewStory", R.string.RecorderNewStory)); + titleTextView.setText(getString(R.string.RecorderNewStory)); titleTextView.getPaint().setShadowLayer(dpf2(1), 0, 1, 0x40000000); titleTextView.setAlpha(0f); titleTextView.setVisibility(View.GONE); @@ -2331,8 +2469,8 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg final boolean hasRound = outputEntry.round != null; muteHint.setText( outputEntry.muted ? - LocaleController.getString(hasMusic || hasRound ? R.string.StoryOriginalSoundMuted : R.string.StorySoundMuted) : - LocaleController.getString(hasMusic || hasRound ? R.string.StoryOriginalSoundNotMuted : R.string.StorySoundNotMuted), + getString(hasMusic || hasRound ? R.string.StoryOriginalSoundMuted : R.string.StorySoundMuted) : + getString(hasMusic || hasRound ? R.string.StoryOriginalSoundNotMuted : R.string.StorySoundNotMuted), muteHint.shown() ); muteHint.show(); @@ -2435,7 +2573,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg .setJoint(1, -20) .setDuration(5000) .setCloseButton(true) - .setText(LocaleController.getString(R.string.StoryCameraDualHint)) + .setText(getString(R.string.StoryCameraDualHint)) .setOnHiddenListener(() -> MessagesController.getGlobalMainSettings().edit().putInt("storydualhint", MessagesController.getGlobalMainSettings().getInt("storydualhint", 0) + 1).apply()); dualHint.setPadding(dp(8), 0, dp(8), 0); actionBarContainer.addView(dualHint, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP, 0, 52, 0, 0)); @@ -2463,7 +2601,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg cameraHint = new HintView2(activity, HintView2.DIRECTION_BOTTOM) .setMultilineText(true) - .setText(LocaleController.getString(R.string.StoryCameraHint2)) + .setText(getString(R.string.StoryCameraHint2)) .setMaxWidth(320) .setDuration(5000L) .setTextAlign(Layout.Alignment.ALIGN_CENTER); @@ -2502,6 +2640,33 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg navbarContainer.addView(hintTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 32, Gravity.CENTER, 8, 0, 8, 8)); flashViews.add(hintTextView); + coverButton = new ButtonWithCounterView(context, resourcesProvider); + coverButton.setVisibility(View.GONE); + coverButton.setAlpha(0f); + coverButton.setText(LocaleController.getString(R.string.StoryCoverSave), false); + coverButton.setOnClickListener(v -> { + if (outputEntry == null) { + return; + } + outputEntry.coverSet = true; + outputEntry.cover = coverValue; + processDone(); + if (outputEntry != null && !outputEntry.isEditingCover) { + AndroidUtilities.runOnUIThread(() -> { + if (!outputEntry.isEditingCover && privacySheet != null && previewView != null) { + previewView.getCoverBitmap(bitmap -> { + AndroidUtilities.recycleBitmap(outputEntry.coverBitmap); + outputEntry.coverBitmap = bitmap; + if (privacySheet == null) return; + privacySheet.setCover(outputEntry.coverBitmap); + }, previewView, paintViewRenderView, paintViewEntitiesView); + } + navigateTo(PAGE_PREVIEW, true); + }, 400); + } + }); + navbarContainer.addView(coverButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.FILL, 10, 10, 10, 10)); + previewButtons = new PreviewButtons(context); previewButtons.setVisibility(View.GONE); previewButtons.setOnClickListener((Integer btn) -> { @@ -2510,91 +2675,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } captionEdit.clearFocus(); if (btn == PreviewButtons.BUTTON_SHARE) { - if (privacySheet != null) { - privacySheet.dismiss(); - privacySheet = null; - } - if (videoError) { - downloadButton.showFailedVideo(); - BotWebViewVibrationEffect.APP_ERROR.vibrate(); - AndroidUtilities.shakeViewSpring(previewButtons.shareButton, shiftDp = -shiftDp); - return; - } - if (captionEdit != null && captionEdit.isCaptionOverLimit()) { - BotWebViewVibrationEffect.APP_ERROR.vibrate(); - AndroidUtilities.shakeViewSpring(captionEdit.limitTextView, shiftDp = -shiftDp); - captionEdit.captionLimitToast(); - return; - } - if (!outputEntry.isEdit) { - StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).storiesController.checkStoryLimit(); - if (storyLimit != null && storyLimit.active(currentAccount)) { - showLimitReachedSheet(storyLimit, false); - return; - } - } - outputEntry.captionEntitiesAllowed = MessagesController.getInstance(currentAccount).storyEntitiesAllowed(); - if (captionEdit != null && !outputEntry.captionEntitiesAllowed) { - CharSequence text = captionEdit.getText(); - if (text instanceof Spannable && ( - ((Spannable) text).getSpans(0, text.length(), TextStyleSpan.class).length > 0 || - ((Spannable) text).getSpans(0, text.length(), URLSpan.class).length > 0 - )) { - BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(LocaleController.getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); - AndroidUtilities.shakeViewSpring(captionEdit, shiftDp = -shiftDp); - return; - } - } - if (outputEntry.isEdit) { - outputEntry.editedPrivacy = false; - applyFilter(null); - upload(true); - } else { - if (selectedDialogId != 0) { - outputEntry.peer = MessagesController.getInstance(currentAccount).getInputPeer(selectedDialogId); - } - previewView.updatePauseReason(3, true); - privacySheet = new StoryPrivacyBottomSheet(activity, outputEntry.period, resourcesProvider) - .setValue(outputEntry.privacy) - .setPeer(outputEntry.peer) - .setCanChangePeer(canChangePeer) - .whenDismiss(privacy -> { - if (outputEntry != null) { - outputEntry.privacy = privacy; - } - }) - .isEdit(false) - .setWarnUsers(getUsersFrom(captionEdit.getText())) - .whenSelectedPeer(peer -> { - if (outputEntry == null) { - return; - } - outputEntry.peer = peer == null ? new TLRPC.TL_inputPeerSelf() : peer; - }) - .whenSelectedRules((privacy, allowScreenshots, keepInProfile, sendAs, whenDone) -> { - if (outputEntry == null) { - return; - } - previewView.updatePauseReason(5, true); - outputEntry.privacy = privacy; - StoryPrivacySelector.save(currentAccount, outputEntry.privacy); - outputEntry.pinned = keepInProfile; - outputEntry.allowScreenshots = allowScreenshots; - outputEntry.privacyRules.clear(); - outputEntry.privacyRules.addAll(privacy.rules); - outputEntry.editedPrivacy = true; - outputEntry.peer = sendAs; - applyFilter(() -> { - whenDone.run(); - upload(true); - }); - }, false); - privacySheet.setOnDismissListener(di -> { - previewView.updatePauseReason(3, false); - privacySheet = null; - }); - privacySheet.show(); - } + processDone(); } else if (btn == PreviewButtons.BUTTON_PAINT) { switchToEditMode(EDIT_MODE_PAINT, true); if (paintView != null) { @@ -2628,6 +2709,113 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg previewContainer.addView(previewHighlight, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); } + private void processDone() { + if (privacySheet != null) { + privacySheet.dismiss(); + privacySheet = null; + } + if (videoError) { + downloadButton.showFailedVideo(); + BotWebViewVibrationEffect.APP_ERROR.vibrate(); + AndroidUtilities.shakeViewSpring(previewButtons.shareButton, shiftDp = -shiftDp); + return; + } + if (captionEdit != null && captionEdit.isCaptionOverLimit()) { + BotWebViewVibrationEffect.APP_ERROR.vibrate(); + AndroidUtilities.shakeViewSpring(captionEdit.limitTextView, shiftDp = -shiftDp); + captionEdit.captionLimitToast(); + return; + } + if (outputEntry == null || !outputEntry.isEdit && outputEntry.botId == 0) { + StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).storiesController.checkStoryLimit(); + if (storyLimit != null && storyLimit.active(currentAccount)) { + showLimitReachedSheet(storyLimit, false); + return; + } + } + outputEntry.captionEntitiesAllowed = MessagesController.getInstance(currentAccount).storyEntitiesAllowed(); + if (captionEdit != null && !outputEntry.captionEntitiesAllowed) { + CharSequence text = captionEdit.getText(); + if (text instanceof Spannable && ( + ((Spannable) text).getSpans(0, text.length(), TextStyleSpan.class).length > 0 || + ((Spannable) text).getSpans(0, text.length(), URLSpan.class).length > 0 + )) { + BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); + AndroidUtilities.shakeViewSpring(captionEdit, shiftDp = -shiftDp); + return; + } + } + if (outputEntry.isEdit || outputEntry.botId != 0) { + outputEntry.editedPrivacy = false; + applyFilter(null); + upload(true); + } else { + if (selectedDialogId != 0) { + outputEntry.peer = MessagesController.getInstance(currentAccount).getInputPeer(selectedDialogId); + } + previewView.updatePauseReason(3, true); + privacySheet = new StoryPrivacyBottomSheet(activity, outputEntry.period, resourcesProvider) + .setValue(outputEntry.privacy) + .setPeer(outputEntry.peer) + .setCanChangePeer(canChangePeer) + .whenDismiss(privacy -> { + if (outputEntry != null) { + outputEntry.privacy = privacy; + } + }) + .isEdit(false) + .setWarnUsers(getUsersFrom(captionEdit.getText())) + .whenSelectedPeer(peer -> { + if (outputEntry == null) { + return; + } + outputEntry.peer = peer == null ? new TLRPC.TL_inputPeerSelf() : peer; + }) + .whenSelectedRules((privacy, allowScreenshots, keepInProfile, sendAs, whenDone) -> { + if (outputEntry == null) { + return; + } + previewView.updatePauseReason(5, true); + outputEntry.privacy = privacy; + StoryPrivacySelector.save(currentAccount, outputEntry.privacy); + outputEntry.pinned = keepInProfile; + outputEntry.allowScreenshots = allowScreenshots; + outputEntry.privacyRules.clear(); + outputEntry.privacyRules.addAll(privacy.rules); + outputEntry.editedPrivacy = true; + outputEntry.peer = sendAs; + applyFilter(() -> { + whenDone.run(); + upload(true); + }); + }, false); + if (outputEntry.isVideo) { + if (previewView != null && !outputEntry.coverSet && currentPage != PAGE_COVER) { + outputEntry.cover = previewView.getCurrentPosition(); + previewView.getCoverBitmap(bitmap -> { + if (outputEntry.coverBitmap != null) { + outputEntry.coverBitmap.recycle(); + } + outputEntry.coverBitmap = bitmap; + if (privacySheet == null) return; + privacySheet.setCover(outputEntry.coverBitmap); + }, previewView, paintViewRenderView, paintViewEntitiesView); + } + privacySheet.setCover(outputEntry.coverBitmap, () -> { + if (privacySheet != null) { + privacySheet.dismiss(); + } + navigateTo(PAGE_COVER, true); + }); + } + privacySheet.setOnDismissListener(di -> { + previewView.updatePauseReason(3, false); + privacySheet = null; + }); + privacySheet.show(); + } + } + private Bitmap getUiBlurBitmap() { Bitmap blur = null; if (photoFilterView != null) { @@ -2739,7 +2927,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg Runnable runnable = () -> { if (asStory) { if (fromSourceView != null) { - fromSourceView.show(); + fromSourceView.show(true); fromSourceView = null; } if (closeListener != null) { @@ -2900,16 +3088,16 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg switch (mode) { case Camera.Parameters.FLASH_MODE_ON: resId = R.drawable.media_photo_flash_on2; - flashButton.setContentDescription(LocaleController.getString("AccDescrCameraFlashOn", R.string.AccDescrCameraFlashOn)); + flashButton.setContentDescription(getString("AccDescrCameraFlashOn", R.string.AccDescrCameraFlashOn)); break; case Camera.Parameters.FLASH_MODE_AUTO: resId = R.drawable.media_photo_flash_auto2; - flashButton.setContentDescription(LocaleController.getString("AccDescrCameraFlashAuto", R.string.AccDescrCameraFlashAuto)); + flashButton.setContentDescription(getString("AccDescrCameraFlashAuto", R.string.AccDescrCameraFlashAuto)); break; default: case Camera.Parameters.FLASH_MODE_OFF: resId = R.drawable.media_photo_flash_off2; - flashButton.setContentDescription(LocaleController.getString("AccDescrCameraFlashOff", R.string.AccDescrCameraFlashOff)); + flashButton.setContentDescription(getString("AccDescrCameraFlashOff", R.string.AccDescrCameraFlashOff)); break; } flashButton.setIcon(flashButtonResId = resId, animated && flashButtonResId != resId); @@ -2998,6 +3186,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg rotate = 0; } outputEntry = StoryEntry.fromPhotoShoot(outputFile, rotate); + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + } StoryPrivacySelector.applySaved(currentAccount, outputEntry); fromGallery = false; @@ -3010,6 +3202,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } else { takingPhoto = false; outputEntry = StoryEntry.fromPhotoShoot(outputFile, 0); + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + } StoryPrivacySelector.applySaved(currentAccount, outputEntry); fromGallery = false; @@ -3097,6 +3293,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg showVideoTimer(false, true); outputEntry = StoryEntry.fromVideoShoot(outputFile, thumbPath, duration); + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + } StoryPrivacySelector.applySaved(currentAccount, outputEntry); fromGallery = false; int width = cameraView.getVideoWidth(), height = cameraView.getVideoHeight(); @@ -3111,7 +3311,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg }, () /* onVideoStart */ -> { whenStarted.run(); - hintTextView.setText(byLongPress ? LocaleController.getString("StoryHintSwipeToZoom", R.string.StoryHintSwipeToZoom) : LocaleController.getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), false); + hintTextView.setText(byLongPress ? getString("StoryHintSwipeToZoom", R.string.StoryHintSwipeToZoom) : getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), false); animateRecording(true, true); setAwakeLock(true); @@ -3129,7 +3329,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg @Override public void onVideoRecordLocked() { - hintTextView.setText(LocaleController.getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), true); + hintTextView.setText(getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), true); } @Override @@ -3411,15 +3611,23 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } else if (currentEditMode > EDIT_MODE_NONE) { switchToEditMode(EDIT_MODE_NONE, true); return false; - } else if (currentPage == PAGE_PREVIEW && (outputEntry == null || !outputEntry.isRepost && !outputEntry.isRepostMessage) && (outputEntry == null || !outputEntry.isEdit || (paintView != null && paintView.hasChanges()) || outputEntry.editedMedia || outputEntry.editedCaption)) { + } else if (currentPage == PAGE_PREVIEW && (outputEntry == null || !outputEntry.isRepost && !outputEntry.isRepostMessage) && !isReposting && (outputEntry == null || !outputEntry.isEdit || (paintView != null && paintView.hasChanges()) || outputEntry.editedMedia || outputEntry.editedCaption)) { if (paintView != null && paintView.onBackPressed()) { return false; - } else if ((fromGallery && (paintView == null || !paintView.hasChanges()) && (outputEntry == null || outputEntry.filterFile == null) || !previewButtons.isShareEnabled()) && (outputEntry == null || !outputEntry.isEdit || !outputEntry.isRepost && !outputEntry.isRepostMessage)) { + } else if (botId == 0 && (fromGallery && (paintView == null || !paintView.hasChanges()) && (outputEntry == null || outputEntry.filterFile == null) || !previewButtons.isShareEnabled()) && (outputEntry == null || !outputEntry.isEdit || !outputEntry.isRepost && !outputEntry.isRepostMessage) && !isReposting) { navigateTo(PAGE_CAMERA, true); } else { - showDismissEntry(); + if (botId != 0) { + close(true); + } else { + showDismissEntry(); + } } return false; + } else if (currentPage == PAGE_COVER && !(outputEntry == null || outputEntry.isEditingCover)) { + processDone(); + navigateTo(PAGE_PREVIEW, true); + return false; } else { close(true); return true; @@ -3444,7 +3652,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } CharSequence repostCaption = outputEntry.repostCaption; if (TextUtils.isEmpty(repostCaption)) { - SpannableString s = new SpannableString(LocaleController.getString(R.string.Story)); + SpannableString s = new SpannableString(getString(R.string.Story)); s.setSpan(new CharacterStyle() { @Override public void updateDrawState(TextPaint tp) { @@ -3516,7 +3724,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } cameraViewThumb.setVisibility(View.VISIBLE); animators.add(ObjectAnimator.ofFloat(cameraViewThumb, View.ALPHA, page == PAGE_CAMERA ? 1 : 0)); - animators.add(ObjectAnimator.ofFloat(previewView, View.ALPHA, page == PAGE_PREVIEW ? 1 : 0)); + animators.add(ObjectAnimator.ofFloat(previewView, View.ALPHA, page == PAGE_PREVIEW || page == PAGE_COVER ? 1 : 0)); animators.add(ObjectAnimator.ofFloat(recordControl, View.ALPHA, page == PAGE_CAMERA ? 1 : 0)); animators.add(ObjectAnimator.ofFloat(flashButton, View.ALPHA, page == PAGE_CAMERA ? 1 : 0)); @@ -3527,11 +3735,14 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg backButton.setVisibility(View.VISIBLE); animators.add(ObjectAnimator.ofFloat(backButton, View.ALPHA, 1)); animators.add(ObjectAnimator.ofFloat(hintTextView, View.ALPHA, page == PAGE_CAMERA && animatedRecording ? 1 : 0)); - animators.add(ObjectAnimator.ofFloat(captionContainer, View.ALPHA, page == PAGE_PREVIEW ? 1f : 0)); - animators.add(ObjectAnimator.ofFloat(captionContainer, View.TRANSLATION_Y, page == PAGE_PREVIEW ? 0 : dp(12))); - animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, page == PAGE_PREVIEW ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(captionContainer, View.ALPHA, page == PAGE_PREVIEW && (outputEntry == null || outputEntry.botId == 0) || page == PAGE_COVER ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(captionContainer, View.TRANSLATION_Y, page == PAGE_PREVIEW && (outputEntry == null || outputEntry.botId == 0) || page == PAGE_COVER ? 0 : dp(12))); + animators.add(ObjectAnimator.ofFloat(captionEdit, View.ALPHA, page == PAGE_COVER ? 0f : 1f)); + animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(coverButton, View.ALPHA, page == PAGE_COVER ? 1f : 0f)); animators.add(ObjectAnimator.ofFloat(timelineView, View.ALPHA, page == PAGE_PREVIEW ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(coverTimelineView, View.ALPHA, page == PAGE_COVER ? 1f : 0)); animators.add(ObjectAnimator.ofFloat(muteButton, View.ALPHA, page == PAGE_PREVIEW && isVideo ? 1f : 0)); animators.add(ObjectAnimator.ofFloat(playButton, View.ALPHA, page == PAGE_PREVIEW && (isVideo || outputEntry != null && !TextUtils.isEmpty(outputEntry.audioPath)) ? 1f : 0)); @@ -3559,7 +3770,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } cameraViewThumb.setAlpha(page == PAGE_CAMERA ? 1f : 0); cameraViewThumb.setVisibility(page == PAGE_CAMERA ? View.VISIBLE : View.GONE); - previewView.setAlpha(page == PAGE_PREVIEW ? 1f : 0); + previewView.setAlpha(page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0); flashButton.setAlpha(page == PAGE_CAMERA ? 1f : 0); dualButton.setAlpha(page == PAGE_CAMERA && cameraView != null && cameraView.dualAvailable() ? 1f : 0); recordControl.setAlpha(page == PAGE_CAMERA ? 1f : 0); @@ -3569,8 +3780,9 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg backButton.setVisibility(View.VISIBLE); backButton.setAlpha(1f); hintTextView.setAlpha(page == PAGE_CAMERA && animatedRecording ? 1f : 0); - captionContainer.setAlpha(page == PAGE_PREVIEW ? 1f : 0); - captionContainer.setTranslationY(page == PAGE_PREVIEW ? 0 : dp(12)); + captionContainer.setAlpha(page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0); + captionContainer.setTranslationY(page == PAGE_PREVIEW || page == PAGE_COVER ? 0 : dp(12)); + captionEdit.setAlpha(page == PAGE_COVER ? 0f : 1f); muteButton.setAlpha(page == PAGE_PREVIEW && isVideo ? 1f : 0); playButton.setAlpha(page == PAGE_PREVIEW && (isVideo || outputEntry != null && !TextUtils.isEmpty(outputEntry.audioPath)) ? 1f : 0); downloadButton.setAlpha(page == PAGE_PREVIEW ? 1f : 0); @@ -3579,7 +3791,9 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } // privacySelector.setAlpha(page == PAGE_PREVIEW ? 1f : 0); timelineView.setAlpha(page == PAGE_PREVIEW ? 1f : 0); - titleTextView.setAlpha(page == PAGE_PREVIEW ? 1f : 0f); + coverTimelineView.setAlpha(page == PAGE_COVER ? 1f : 0f); + titleTextView.setAlpha(page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0f); + coverButton.setAlpha(page == PAGE_COVER ? 1f : 0f); onNavigateEnd(oldPage, page); } } @@ -3728,6 +3942,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg MediaController.PhotoEntry photoEntry = (MediaController.PhotoEntry) entry; isVideo = photoEntry.isVideo; outputEntry = StoryEntry.fromPhotoEntry(photoEntry); + StoryPrivacySelector.applySaved(currentAccount, outputEntry); outputEntry.blurredVideoThumb = blurredBitmap; fromGallery = true; @@ -3745,6 +3960,12 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg fromGallery = false; } + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + outputEntry.setupMatrix(); + } + showVideoTimer(false, true); modeSwitcherView.switchMode(isVideo); recordControl.startAsVideo(isVideo); @@ -3925,6 +4146,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg // privacySelector.setVisibility(View.VISIBLE); previewButtons.setVisibility(View.VISIBLE); previewView.setVisibility(View.VISIBLE); + captionEdit.setVisibility(isBot() ? View.GONE : View.VISIBLE); + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) videoTimelineContainerView.getLayoutParams(); + lp.bottomMargin = isBot() ? dp(12) : dp(68); + videoTimelineContainerView.setLayoutParams(lp); captionContainer.setVisibility(View.VISIBLE); captionContainer.clearFocus(); @@ -3934,9 +4159,25 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg captionEdit.setHasRoundVideo(outputEntry != null && outputEntry.round != null); setReply(); } + if (toPage == PAGE_COVER || fromPage == PAGE_COVER) { + titleTextView.setVisibility(View.VISIBLE); + coverTimelineView.setVisibility(View.VISIBLE); + if (outputEntry != null && outputEntry.isEditingCover) { + titleTextView.setText(getString(R.string.RecorderEditCover)); + } + captionContainer.setVisibility(View.VISIBLE); + coverButton.setVisibility(View.VISIBLE); + } + if (toPage == PAGE_COVER) { + titleTextView.setText(getString(R.string.RecorderEditCover)); + } if (toPage == PAGE_PREVIEW) { videoError = false; - previewButtons.setShareText(outputEntry != null && outputEntry.isEdit ? LocaleController.getString("Done", R.string.Done) : LocaleController.getString("Next", R.string.Next)); + final boolean isBot = outputEntry != null && outputEntry.botId != 0; + final boolean isEdit = outputEntry != null && outputEntry.isEdit; + previewButtons.setShareText(getString(isEdit ? R.string.Done : isBot ? R.string.UploadBotPreview : R.string.Next), !isBot); + coverTimelineView.setVisibility(View.GONE); + coverButton.setVisibility(View.GONE); // privacySelector.set(outputEntry, false); if (!previewAlreadySet) { if (outputEntry != null && outputEntry.isRepostMessage) { @@ -3947,9 +4188,9 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } previewAlreadySet = false; captionEdit.editText.getEditText().setOnPremiumMenuLockClickListener(MessagesController.getInstance(currentAccount).storyEntitiesAllowed() ? null : () -> { - BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(LocaleController.getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); + BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); }); - if (outputEntry != null && (outputEntry.isDraft || outputEntry.isEdit)) { + if (outputEntry != null && (outputEntry.isDraft || outputEntry.isEdit || isReposting)) { if (outputEntry.paintFile != null) { destroyPhotoPaintView(); createPhotoPaintView(); @@ -3974,16 +4215,18 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg captionEdit.clear(); } previewButtons.setFiltersVisible(outputEntry == null || !outputEntry.isRepostMessage || outputEntry.isVideo); - previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && outputEntry.isEdit))); + previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && (outputEntry.isEdit || outputEntry.botId != 0)))); muteButton.setImageResource(outputEntry != null && outputEntry.muted ? R.drawable.media_unmute : R.drawable.media_mute); previewView.setVisibility(View.VISIBLE); timelineView.setVisibility(View.VISIBLE); titleTextView.setVisibility(View.VISIBLE); titleTextView.setTranslationX(0); - if (outputEntry != null && outputEntry.isEdit) { - titleTextView.setText(LocaleController.getString(R.string.RecorderEditStory)); + if (outputEntry != null && outputEntry.botId != 0) { + titleTextView.setText(""); + } else if (outputEntry != null && outputEntry.isEdit) { + titleTextView.setText(getString(R.string.RecorderEditStory)); } else if (outputEntry != null && outputEntry.isRepostMessage) { - titleTextView.setText(LocaleController.getString(R.string.RecorderRepost)); + titleTextView.setText(getString(R.string.RecorderRepost)); } else if (outputEntry != null && outputEntry.isRepost) { SpannableStringBuilder title = new SpannableStringBuilder(); AvatarSpan span = new AvatarSpan(titleTextView, currentAccount, 32); @@ -4003,7 +4246,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } titleTextView.setText(title); } else { - titleTextView.setText(LocaleController.getString(R.string.RecorderNewStory)); + titleTextView.setText(getString(R.string.RecorderNewStory)); } // MediaDataController.getInstance(currentAccount).checkStickers(MediaDataController.TYPE_EMOJIPACKS); @@ -4014,6 +4257,41 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg captionEdit.hidePeriodPopup(); muteHint.hide(); } + if (toPage == PAGE_COVER) { + if (outputEntry != null) { + if (outputEntry.cover < 0) { + outputEntry.cover = 0; + } + coverValue = outputEntry.cover; + long duration = previewView.getDuration() < 100 ? outputEntry.duration : previewView.getDuration(); + if (outputEntry.duration <= 0) { + outputEntry.duration = duration; + } + coverTimelineView.setVideo(false, outputEntry.getOriginalFile().getAbsolutePath(), outputEntry.duration, outputEntry.videoVolume); + coverTimelineView.setCoverVideo((long) (outputEntry.left * duration), (long) (outputEntry.right * duration)); + final Utilities.Callback2 videoLeftSet = (start, left) -> { + final long _duration = previewView.getDuration() < 100 ? outputEntry.duration : previewView.getDuration(); + coverValue = (long) ((left + 0.04f * (left / (1f - 0.04f))) * (outputEntry.right - outputEntry.left) * _duration); + previewView.seekTo(coverValue = (long) (outputEntry.left * _duration + coverValue), false); + if (paintView != null) { + paintView.setCoverTime(coverValue); + } + if (outputEntry != null && outputEntry.isEdit) { + outputEntry.editedMedia = true; + } + }; + coverTimelineView.setDelegate(new TimelineView.TimelineDelegate() { + @Override + public void onVideoLeftChange(float left) { + videoLeftSet.run(false, left); + } + }); + float left = (float) coverValue / Math.max(1, duration) * (1f - 0.04f); + coverTimelineView.setVideoLeft(left); + coverTimelineView.setVideoRight(left + 0.04f); + videoLeftSet.run(true, left); + } + } if (photoFilterEnhanceView != null) { photoFilterEnhanceView.setAllowTouch(false); } @@ -4030,6 +4308,9 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg if (previewView != null) { previewView.updatePauseReason(8, toPage != PAGE_PREVIEW); } + if (paintView != null) { + paintView.setCoverPreview(toPage != PAGE_PREVIEW); + } } private void onNavigateEnd(int fromPage, int toPage) { @@ -4043,10 +4324,15 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg setAwakeLock(false); } cameraViewThumb.setClickable(toPage == PAGE_CAMERA); + if (fromPage == PAGE_COVER) { + coverTimelineView.setVisibility(View.GONE); + captionContainer.setVisibility(toPage == PAGE_PREVIEW ? View.VISIBLE : View.GONE); + captionEdit.setVisibility(View.GONE); + coverButton.setVisibility(View.GONE); + } if (fromPage == PAGE_PREVIEW) { previewButtons.setVisibility(View.GONE); - previewView.setVisibility(View.GONE); - captionContainer.setVisibility(View.GONE); + captionContainer.setVisibility(toPage == PAGE_COVER ? View.VISIBLE : View.GONE); muteButton.setVisibility(View.GONE); playButton.setVisibility(View.GONE); downloadButton.setVisibility(View.GONE); @@ -4054,11 +4340,13 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg themeButton.setVisibility(View.GONE); } // privacySelector.setVisibility(View.GONE); - previewView.setVisibility(View.GONE); + previewView.setVisibility(toPage == PAGE_COVER ? View.VISIBLE : View.GONE); timelineView.setVisibility(View.GONE); - destroyPhotoPaintView(); - destroyPhotoFilterView(); - titleTextView.setVisibility(View.GONE); + if (toPage != PAGE_COVER) { + destroyPhotoPaintView(); + destroyPhotoFilterView(); + } + titleTextView.setVisibility(toPage == PAGE_COVER ? View.VISIBLE : View.GONE); destroyGalleryListView(); trash.setAlpha(0f); trash.setVisibility(View.GONE); @@ -4083,6 +4371,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg videoTimeView.setVisibility(outputEntry != null && outputEntry.duration >= 30_000 ? View.VISIBLE : View.GONE); captionContainer.setAlpha(1f); captionContainer.setTranslationY(0); + captionEdit.setVisibility(outputEntry != null && outputEntry.botId != 0 ? View.GONE : View.VISIBLE); } if (toPage == PAGE_CAMERA && showSavedDraftHint) { getDraftSavedHint().setVisibility(View.VISIBLE); @@ -4179,7 +4468,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg // animators.add(ObjectAnimator.ofFloat(privacySelector, View.ALPHA, editMode == EDIT_MODE_NONE ? 1 : 0)); // animators.add(ObjectAnimator.ofFloat(videoTimelineView, View.ALPHA, currentPage == PAGE_PREVIEW && isVideo && editMode == EDIT_MODE_NONE ? 1f : 0f)); - animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, currentPage == PAGE_PREVIEW && editMode == EDIT_MODE_NONE ? 1f : 0f)); + animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, (currentPage == PAGE_PREVIEW || currentPage == PAGE_COVER) && editMode == EDIT_MODE_NONE ? 1f : 0f)); int bottomMargin = 0; if (editMode == EDIT_MODE_FILTER) { @@ -4283,6 +4572,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg outputEntry != null && !outputEntry.fileDeletable, outputEntry == null ? null : outputEntry.file, outputEntry != null && outputEntry.isVideo, + outputEntry != null && outputEntry.botId != 0, windowView, activity, currentAccount, @@ -4548,6 +4838,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } } }; + paintView.setHasAudio(outputEntry != null && outputEntry.audioPath != null); paintView.setBlurManager(blurManager); containerView.addView(paintView); paintViewRenderView = paintView.getRenderView(); @@ -4648,6 +4939,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } } + private boolean isBot() { + return outputEntry != null && outputEntry.botId != 0 || botId != 0; + } + private void onSwitchEditModeStart(int fromMode, int toMode) { if (toMode == EDIT_MODE_NONE) { backButton.setVisibility(View.VISIBLE); @@ -4726,6 +5021,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg final PaintView paintView = this.paintView; final StoryEntry outputEntry = this.outputEntry; if (paintView == null || outputEntry == null) { + whenDone.run(); return; } @@ -5130,7 +5426,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg if (outputEntry.filterFile == null) { photoBitmap = previewView.getPhotoBitmap(); } else { - photoBitmap = StoryEntry.getScaledBitmap(opts -> BitmapFactory.decodeFile(outputEntry.file.getAbsolutePath(), opts), AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y, true); + photoBitmap = StoryEntry.getScaledBitmap(opts -> BitmapFactory.decodeFile(outputEntry.file.getAbsolutePath(), opts), AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y, true, true); } } if (photoBitmap == null && !outputEntry.isVideo) { @@ -5273,7 +5569,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg return; } if (savedDualHint != null) { - CharSequence text = isFrontface() ? LocaleController.getString(R.string.StoryCameraSavedDualBackHint) : LocaleController.getString(R.string.StoryCameraSavedDualFrontHint); + CharSequence text = isFrontface() ? getString(R.string.StoryCameraSavedDualBackHint) : getString(R.string.StoryCameraSavedDualFrontHint); savedDualHint.setMaxWidthPx(HintView2.cutInFancyHalf(text, savedDualHint.getTextPaint())); savedDualHint.setText(text); savedDualHint.show(); @@ -5429,10 +5725,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg private void showDismissEntry() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); - builder.setTitle(LocaleController.getString("DiscardChanges", R.string.DiscardChanges)); - builder.setMessage(LocaleController.getString("PhotoEditorDiscardAlert", R.string.PhotoEditorDiscardAlert)); + builder.setTitle(getString("DiscardChanges", R.string.DiscardChanges)); + builder.setMessage(getString("PhotoEditorDiscardAlert", R.string.PhotoEditorDiscardAlert)); if (outputEntry != null && !outputEntry.isEdit) { - builder.setNeutralButton(outputEntry.isDraft ? LocaleController.getString("StoryKeepDraft") : LocaleController.getString("StorySaveDraft"), (di, i) -> { + builder.setNeutralButton(outputEntry.isDraft ? getString("StoryKeepDraft") : getString("StorySaveDraft"), (di, i) -> { if (outputEntry == null) { return; } @@ -5456,7 +5752,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg navigateTo(PAGE_CAMERA, true); }); } - builder.setPositiveButton(outputEntry != null && outputEntry.isDraft && !outputEntry.isEdit ? LocaleController.getString("StoryDeleteDraft") : LocaleController.getString("Discard", R.string.Discard), (dialogInterface, i) -> { + builder.setPositiveButton(outputEntry != null && outputEntry.isDraft && !outputEntry.isEdit ? getString("StoryDeleteDraft") : getString("Discard", R.string.Discard), (dialogInterface, i) -> { if (outputEntry != null && !(outputEntry.isEdit || outputEntry.isRepost && !outputEntry.isRepostMessage) && outputEntry.isDraft) { MessagesController.getInstance(currentAccount).getStoriesController().getDraftsController().delete(outputEntry); outputEntry = null; @@ -5467,7 +5763,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg navigateTo(PAGE_CAMERA, true); } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); AlertDialog dialog = builder.create(); dialog.show(); View positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); @@ -5523,8 +5819,8 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg if (activity.shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_camera, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PermissionNoCameraWithHint", R.string.PermissionNoCameraWithHint))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString("PermissionNoCameraWithHint", R.string.PermissionNoCameraWithHint))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5533,7 +5829,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); return; @@ -5661,8 +5957,8 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } else { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_folder, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PermissionStorageWithHint))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString(R.string.PermissionStorageWithHint))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5671,7 +5967,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); } @@ -5679,8 +5975,8 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg if (!granted) { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_camera, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PermissionNoCameraMicVideo", R.string.PermissionNoCameraMicVideo))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString("PermissionNoCameraMicVideo", R.string.PermissionNoCameraMicVideo))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5689,7 +5985,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); } @@ -5697,8 +5993,8 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg if (!granted) { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_folder, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PermissionNoAudioStorageStory", R.string.PermissionNoAudioStorageStory))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString("PermissionNoAudioStorageStory", R.string.PermissionNoAudioStorageStory))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5707,7 +6003,7 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); } @@ -5747,10 +6043,10 @@ public class StoryRecorder implements NotificationCenter.NotificationCenterDeleg } } else if (id == NotificationCenter.storiesLimitUpdate) { if (currentPage == PAGE_PREVIEW) { - previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && outputEntry.isEdit))); + previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && (outputEntry.isEdit || outputEntry.botId != 0)))); } else if (currentPage == PAGE_CAMERA) { StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); - if (storyLimit != null && storyLimit.active(currentAccount)) { + if (storyLimit != null && storyLimit.active(currentAccount) && (outputEntry == null || outputEntry.botId == 0)) { showLimitReachedSheet(storyLimit, true); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java index b8ca15463..ba255c7c3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java @@ -61,26 +61,26 @@ public class TimelineView extends View { public static final long MAX_SELECT_DURATION = (long) (59 * 1000L); interface TimelineDelegate { - void onProgressDragChange(boolean dragging); - void onProgressChange(long progress, boolean fast); + default void onProgressDragChange(boolean dragging) {}; + default void onProgressChange(long progress, boolean fast) {}; - void onVideoLeftChange(float left); - void onVideoRightChange(float right); - void onVideoVolumeChange(float volume); + default void onVideoLeftChange(float left) {}; + default void onVideoRightChange(float right) {}; + default void onVideoVolumeChange(float volume) {}; - void onAudioOffsetChange(long offset); - void onAudioLeftChange(float left); - void onAudioRightChange(float right); - void onAudioVolumeChange(float volume); - void onAudioRemove(); + default void onAudioOffsetChange(long offset) {}; + default void onAudioLeftChange(float left) {}; + default void onAudioRightChange(float right) {}; + default void onAudioVolumeChange(float volume) {}; + default void onAudioRemove() {}; - void onRoundOffsetChange(long offset); - void onRoundLeftChange(float left); - void onRoundRightChange(float right); - void onRoundVolumeChange(float volume); - void onRoundRemove(); + default void onRoundOffsetChange(long offset) {}; + default void onRoundLeftChange(float left) {}; + default void onRoundRightChange(float right) {}; + default void onRoundVolumeChange(float volume) {}; + default void onRoundRemove() {}; - void onRoundSelectChange(boolean selected); + default void onRoundSelectChange(boolean selected) {}; } private TimelineDelegate delegate; @@ -186,6 +186,11 @@ public class TimelineView extends View { private final View previewContainer; private final Theme.ResourcesProvider resourcesProvider; + private boolean isCover; + public void setCover() { + isCover = true; + } + private final Runnable onLongPress; public TimelineView(Context context, ViewGroup container, View previewContainer, Theme.ResourcesProvider resourcesProvider, BlurringShader.BlurManager blurManager) { @@ -314,6 +319,13 @@ public class TimelineView extends View { this.delegate = delegate; } + private long coverStart = -1, coverEnd = -1; + public void setCoverVideo(long videoStart, long videoEnd) { + coverStart = videoStart; + coverEnd = videoEnd; + setupVideoThumbs(true); + } + public void setVideo(boolean isRound, String videoPath, long videoDuration, float videoVolume) { if (TextUtils.equals(this.videoPath, videoPath)) { return; @@ -328,7 +340,7 @@ public class TimelineView extends View { this.videoPath = videoPath; this.videoDuration = videoDuration; this.videoVolume = videoVolume; - setupVideoThumbs(); + setupVideoThumbs(false); } else { this.videoPath = null; this.videoDuration = 1; @@ -400,11 +412,15 @@ public class TimelineView extends View { invalidate(); } - private void setupVideoThumbs() { - if (getMeasuredWidth() <= 0 || this.thumbs != null) { + private void setupVideoThumbs(boolean force) { + if (getMeasuredWidth() <= 0 || this.thumbs != null && !force) { return; } - this.thumbs = new VideoThumbsLoader(isMainVideoRound, videoPath, w - px - px, dp(38), videoDuration > 2 ? videoDuration : null); + if (thumbs != null) { + thumbs.destroy(); + thumbs = null; + } + this.thumbs = new VideoThumbsLoader(isMainVideoRound, videoPath, w - px - px, dp(38), videoDuration > 2 ? videoDuration : null, MAX_SCROLL_DURATION, coverStart, coverEnd); if (this.thumbs.getDuration() > 0) { videoDuration = this.thumbs.getDuration(); } @@ -415,7 +431,7 @@ public class TimelineView extends View { if (getMeasuredWidth() <= 0 || this.roundThumbs != null || hasVideo && videoDuration < 1) { return; } - this.roundThumbs = new VideoThumbsLoader(false, roundPath, w - px - px, dp(38), roundDuration > 2 ? roundDuration : null, hasVideo ? videoDuration : MAX_SCROLL_DURATION); + this.roundThumbs = new VideoThumbsLoader(false, roundPath, w - px - px, dp(38), roundDuration > 2 ? roundDuration : null, hasVideo ? videoDuration : MAX_SCROLL_DURATION, -1, -1); if (this.roundThumbs.getDuration() > 0) { roundDuration = this.roundThumbs.getDuration(); } @@ -533,7 +549,7 @@ public class TimelineView extends View { final long scrollWidth = Math.min(getBaseDuration(), MAX_SCROLL_DURATION); final float progressT = (Utilities.clamp(progress, getBaseDuration(), 0) + (!hasVideo ? audioOffset : 0) - scroll) / (float) scrollWidth; final float progressX = px + ph + sw * progressT; - if (x >= progressX - dp(12) && x <= progressX + dp(12)) { + if (!isCover && x >= progressX - dp(12) && x <= progressX + dp(12)) { return HANDLE_PROGRESS; } @@ -541,6 +557,10 @@ public class TimelineView extends View { final boolean isInRound = hasRound && y > h - py - getVideoHeight() - dp(4) - getRoundHeight() - dp(4) - dp(2) && y < h - py - getVideoHeight() - dp(2); if (isInVideo) { + if (isCover) { + return HANDLE_VIDEO_REGION; + } + final float leftX = px + ph + (videoLeft * videoDuration - scroll) / (float) scrollWidth * sw; final float rightX = px + ph + (videoRight * videoDuration - scroll) / (float) scrollWidth * sw; @@ -734,8 +754,10 @@ public class TimelineView extends View { } dragged = false; lastX = event.getX(); - AndroidUtilities.cancelRunOnUIThread(this.onLongPress); - AndroidUtilities.runOnUIThread(this.onLongPress, ViewConfiguration.getLongPressTimeout()); + if (!isCover) { + AndroidUtilities.cancelRunOnUIThread(this.onLongPress); + AndroidUtilities.runOnUIThread(this.onLongPress, ViewConfiguration.getLongPressTimeout()); + } } else if (event.getAction() == MotionEvent.ACTION_MOVE) { final float Δx = event.getX() - lastX; final boolean allowDrag = dragged || Math.abs(Δx) > AndroidUtilities.touchSlop; @@ -975,7 +997,16 @@ public class TimelineView extends View { boolean scrollStopped = true; if (event.getAction() == MotionEvent.ACTION_UP) { if (System.currentTimeMillis() - pressTime <= ViewConfiguration.getTapTimeout() && !dragged) { - if (pressType == 2 && !audioSelected) { + if (isCover) { + float d = videoRight - videoLeft; + videoLeft = (event.getX() - px - ph) / sw * (1 - d); + videoRight = videoLeft + d; + if (delegate != null) { + delegate.onVideoLeftChange(videoLeft); + delegate.onVideoRightChange(videoRight); + } + invalidate(); + } else if (pressType == 2 && !audioSelected) { audioSelected = true; roundSelected = false; if (delegate != null) { @@ -1440,19 +1471,21 @@ public class TimelineView extends View { } selectedVideoClipPath.rewind(); - AndroidUtilities.rectTmp.set( - px + ph + (videoLeft * videoDuration - scroll) / (float) scrollDuration * sw - (videoLeft <= 0 ? ph : 0), - h - py - videoHeight, - px + ph + (videoRight * videoDuration - scroll) / (float) scrollDuration * sw + (videoRight >= 1 ? ph : 0), - h - py - ); - selectedVideoClipPath.addRoundRect( - AndroidUtilities.rectTmp, - selectedVideoRadii, - Path.Direction.CW - ); - canvas.clipPath(selectedVideoClipPath, Region.Op.DIFFERENCE); - canvas.drawColor(0x50000000); + if (!isCover) { + AndroidUtilities.rectTmp.set( + px + ph + (videoLeft * videoDuration - scroll) / (float) scrollDuration * sw - (videoLeft <= 0 ? ph : 0), + h - py - videoHeight, + px + ph + (videoRight * videoDuration - scroll) / (float) scrollDuration * sw + (videoRight >= 1 ? ph : 0), + h - py + ); + selectedVideoClipPath.addRoundRect( + AndroidUtilities.rectTmp, + selectedVideoRadii, + Path.Direction.CW + ); + canvas.clipPath(selectedVideoClipPath, Region.Op.DIFFERENCE); + canvas.drawColor(0x50000000); + } canvas.restore(); } @@ -1770,40 +1803,50 @@ public class TimelineView extends View { canvas.saveLayerAlpha(0, 0, w, h, 0xFF, Canvas.ALL_SAVE_FLAG); regionPaint.setAlpha((int) (0xFF * alpha)); canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(6), dp(6), regionPaint); - AndroidUtilities.rectTmp.inset(dp(10), dp(2)); - canvas.drawRect(AndroidUtilities.rectTmp, regionCutPaint); + AndroidUtilities.rectTmp.inset(dp(isCover ? 2.5f : 10), dp(2)); + if (isCover) { + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(3), dp(3), regionCutPaint); + } else { + canvas.drawRect(AndroidUtilities.rectTmp, regionCutPaint); + } final float hw = dp(2), hh = dp(10); Paint handlePaint = blurPaint != null ? blurPaint : regionHandlePaint; regionHandlePaint.setAlpha(0xFF); handlePaint.setAlpha((int) (0xFF * alpha)); AndroidUtilities.rectTmp.set( - left - (dp(10) - hw) / 2f, + left - (dp(isCover ? 2 : 10) - hw) / 2f, (top + bottom - hh) / 2f, - left - (dp(10) + hw) / 2f, + left - (dp(isCover ? 2 : 10) + hw) / 2f, (top + bottom + hh) / 2f ); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); - if (blurPaint != null) { - regionHandlePaint.setAlpha((int) (0x30 * alpha)); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + if (!isCover) { + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); + if (blurPaint != null && !isCover) { + regionHandlePaint.setAlpha((int) (0x30 * alpha)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + } } AndroidUtilities.rectTmp.set( - right + (dp(10) - hw) / 2f, + right + (dp(isCover ? 2.5f : 10) - hw) / 2f, (top + bottom - hh) / 2f, - right + (dp(10) + hw) / 2f, + right + (dp(isCover ? 2.5f : 10) + hw) / 2f, (top + bottom + hh) / 2f ); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); - if (blurPaint != null) { - regionHandlePaint.setAlpha((int) (0x30 * alpha)); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + if (!isCover) { + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); + if (blurPaint != null) { + regionHandlePaint.setAlpha((int) (0x30 * alpha)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + } } canvas.restore(); } private void drawProgress(Canvas canvas, float y1, float y2, long progress, float scale) { + if (isCover) return; + final long scrollDuration = Math.min(getBaseDuration(), MAX_SCROLL_DURATION); final float progressT = (Utilities.clamp(progress, getBaseDuration(), 0) + (!hasVideo ? audioOffset : 0) - scroll) / (float) scrollDuration; @@ -1840,7 +1883,7 @@ public class TimelineView extends View { ph = dp(10); sw = w - 2 * ph - 2 * px; if (videoPath != null && this.thumbs == null) { - setupVideoThumbs(); + setupVideoThumbs(false); } if (audioPath != null && this.waveform == null) { setupAudioWaveform(); @@ -1867,6 +1910,10 @@ public class TimelineView extends View { } public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight, Long overrideDuration, long maxDuration) { + this(isRound, path, uiWidth, uiHeight, overrideDuration, maxDuration, -1, -1); + } + + public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight, Long overrideDuration, long maxDuration, long startFrom, long endTo) { this.isRound = isRound; metadataRetriever = new MediaMetadataRetriever(); long duration = MAX_SCROLL_DURATION; @@ -1903,6 +1950,9 @@ public class TimelineView extends View { if (overrideDuration != null) { this.duration = duration = overrideDuration; } + if (startFrom != -1 && endTo != -1) { + duration = endTo - startFrom; + } float aspectRatio = 1; if (width != 0 && height != 0) { aspectRatio = width / (float) height; @@ -1914,6 +1964,9 @@ public class TimelineView extends View { count = (int) Math.ceil(uiScrollWidth / frameWidth); frameIterator = (long) (duration / (float) count); nextFrame = -frameIterator; + if (startFrom != -1) { + nextFrame = startFrom - frameIterator; + } load(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java new file mode 100644 index 000000000..c169b58b5 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java @@ -0,0 +1,617 @@ +package org.telegram.ui.Stories.recorder; + +import static org.telegram.messenger.LocaleController.getString; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.DialogObject; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Components.AlertsCreator; +import org.telegram.ui.LaunchActivity; +import org.telegram.ui.Stories.DarkThemeResourceProvider; + + +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +public class Weather { + +// public static String[] emojis = new String[] { +// "☀", // Clear sky +// "🌤", // Mainly clear +// "⛅", // Partly cloudy +// "☁", // Overcast +// "😶‍🌫", // Fog +// "😶‍🌫", // Depositing rime fog +// "🌦", // Light drizzle +// "🌧", // Moderate drizzle +// "🌧", // Dense drizzle +// "❄", // Light freezing drizzle +// "❄", // Dense freezing drizzle +// "🌦", // Slight rain +// "🌧", // Moderate rain +// "🌧", // Heavy rain +// "❄", // Light freezing rain +// "❄", // Heavy freezing rain +// "🌨", // Slight snow fall +// "🌨", // Moderate snow fall +// "❄", // Heavy snow fall +// "🌨", // Snow grains +// "🌦", // Slight rain showers +// "🌧", // Moderate rain showers +// "⛈", // Violent rain showers +// "🌨", // Slight snow showers +// "❄", // Heavy snow showers +// "⚡", // Thunderstorm +// "⚡" // Thunderstorm with slight hail +// }; +// public static int[] emojiKeys = new int[] { +// 0, // Clear sky +// 1, // Mainly clear +// 2, // Partly cloudy +// 3, // Overcast +// 45, // Fog +// 48, // Depositing rime fog +// 51, // Light drizzle +// 53, // Moderate drizzle +// 55, // Dense drizzle +// 56, // Light freezing drizzle +// 57, // Dense freezing drizzle +// 61, // Slight rain +// 63, // Moderate rain +// 65, // Heavy rain +// 66, // Light freezing rain +// 67, // Heavy freezing rain +// 71, // Slight snow fall +// 73, // Moderate snow fall +// 75, // Heavy snow fall +// 77, // Snow grains +// 80, // Slight rain showers +// 81, // Moderate rain showers +// 82, // Violent rain showers +// 85, // Slight snow showers +// 86, // Heavy snow showers +// 95, // Thunderstorm +// 96, // Thunderstorm with slight hail +// }; +// public static String[] moonEmojis = new String[] { +// "🌚", // New Moon +// "🌛", // Waxing Crescent +// "🌓", // First Quarter +// "🌔", // Waxing Gibbous +// "🌝", // Full Moon +// "🌖", // Waning Gibbous +// "🌗", // Last Quarter +// "🌜", // Waning Crescent +// "🌚" // New Moon +// }; + +// public static String getEmoji(int type, double lat, double lng) { +// if (type == 0 || type == 1 || type == 2) { +// final Date now = new Date(); +// if (!isDay(lat, lng, LocalDateTime.now(ZoneOffset.UTC))) { +// return getMoonPhaseEmoji(now); +// } +// } +// for (int i = emojiKeys.length - 1; i >= 0; --i) { +// if (type >= emojiKeys[i]) { +// return emojis[i]; +// } +// } +// return emojis[0]; +// } +// +// private static final double J1970 = 2440588; +// +// public static String getMoonPhaseEmoji(Date date) { +// double julianDate = toJulianDate(date); +// +// double referenceNewMoon = 2451550.1; // January 6, 2000 +// double synodicMonth = 29.53058867; // Average length of a synodic month +// +// double daysSinceNewMoon = julianDate - referenceNewMoon; +// double newMoons = daysSinceNewMoon / synodicMonth; +// double currentMoonPhase = (newMoons - Math.floor(newMoons)) * synodicMonth; +// +// if (currentMoonPhase < 1.84566) { +// return moonEmojis[0]; // New Moon +// } else if (currentMoonPhase < 5.53699) { +// return moonEmojis[1]; // Waxing Crescent +// } else if (currentMoonPhase < 9.22831) { +// return moonEmojis[2]; // First Quarter +// } else if (currentMoonPhase < 12.91963) { +// return moonEmojis[3]; // Waxing Gibbous +// } else if (currentMoonPhase < 16.61096) { +// return moonEmojis[4]; // Full Moon +// } else if (currentMoonPhase < 20.30228) { +// return moonEmojis[5]; // Waning Gibbous +// } else if (currentMoonPhase < 23.99361) { +// return moonEmojis[6]; // Last Quarter +// } else if (currentMoonPhase < 27.68493) { +// return moonEmojis[7]; // Waning Crescent +// } else { +// return moonEmojis[8]; // New Moon +// } +// } +// +// public static boolean isDay(double latitude, double longitude, LocalDateTime dateTime) { +// LocalDate date = dateTime.toLocalDate(); +// LocalTime time = dateTime.toLocalTime(); +// +// double sunrise = calculateSunrise(latitude, longitude, date); +// double sunset = calculateSunset(latitude, longitude, date); +// +// return time.isAfter(LocalTime.ofSecondOfDay((long) (sunrise * 3600))) && +// time.isBefore(LocalTime.ofSecondOfDay((long) (sunset * 3600))); +// } +// +// public static double calculateSunrise(double latitude, double longitude, LocalDate date) { +// return calculateSunTime(latitude, longitude, date, true); +// } +// +// public static double calculateSunset(double latitude, double longitude, LocalDate date) { +// return calculateSunTime(latitude, longitude, date, false); +// } +// +// public static double calculateSunTime(double latitude, double longitude, LocalDate date, boolean isSunrise) { +// int dayOfYear = date.getDayOfYear(); +// double zenith = 90.833; // Official zenith for sunrise/sunset +// +// double D2R = Math.PI / 180.0; +// double R2D = 180.0 / Math.PI; +// +// double lngHour = longitude / 15.0; +// double t = dayOfYear + ((isSunrise ? 6 : 18) - lngHour) / 24.0; +// +// double M = (0.9856 * t) - 3.289; +// double L = M + (1.916 * Math.sin(M * D2R)) + (0.020 * Math.sin(2 * M * D2R)) + 282.634; +// +// if (L > 360.0) { +// L -= 360.0; +// } else if (L < 0.0) { +// L += 360.0; +// } +// +// double RA = R2D * Math.atan(0.91764 * Math.tan(L * D2R)); +// if (RA > 360.0) { +// RA -= 360.0; +// } else if (RA < 0.0) { +// RA += 360.0; +// } +// +// double Lquadrant = (Math.floor(L / 90.0)) * 90.0; +// double RAquadrant = (Math.floor(RA / 90.0)) * 90.0; +// RA += (Lquadrant - RAquadrant); +// RA /= 15.0; +// +// double sinDec = 0.39782 * Math.sin(L * D2R); +// double cosDec = Math.cos(Math.asin(sinDec)); +// +// double cosH = (Math.cos(zenith * D2R) - (sinDec * Math.sin(latitude * D2R))) / (cosDec * Math.cos(latitude * D2R)); +// if (cosH > 1.0) { +// return -1; +// } else if (cosH < -1.0) { +// return -1; +// } +// +// double H = isSunrise ? (360.0 - R2D * Math.acos(cosH)) : R2D * Math.acos(cosH); +// H /= 15.0; +// +// double T = H + RA - (0.06571 * t) - 6.622; +// double UT = T - lngHour; +// +// if (UT > 24.0) { +// UT -= 24.0; +// } else if (UT < 0.0) { +// UT += 24.0; +// } +// return UT; +// } +// +// private static double toJulianDate(Date date) { +// Calendar calendar = new GregorianCalendar(); +// calendar.setTime(date); +// return toJulianDate(calendar); +// } +// +// private static double toJulianDate(Calendar calendar) { +// return calendar.getTimeInMillis() / 86400000.0 + J1970 - 0.5; +// } + + public static boolean isDefaultCelsius() { + final String timezone = TimeZone.getDefault().getID(); + return !( + timezone.startsWith("US/") || + "America/Nassau".equals(timezone) || + "America/Belize".equals(timezone) || + "America/Cayman".equals(timezone) || + "Pacific/Palau".equals(timezone) + ); + } + + public static class State extends TLObject { + public double lat, lng; + +// public int type; + public String emoji; + public float temperature; // in celsius + + public String getEmoji() { +// return Weather.getEmoji(type, lat, lng); + return emoji; + } + + public String getTemperature() { + return getTemperature(isDefaultCelsius()); + } + + public String getTemperature(boolean celsius) { + if (celsius) { + return (int) Math.round(temperature) + "°C"; + } else { + return (int) Math.round((this.temperature * 9.0 / 5.0) + 32) + "°F"; + } + } + + public static Weather.State TLdeserialize(AbstractSerializedData stream) { + Weather.State state = new Weather.State(); + state.lat = stream.readDouble(false); + state.lng = stream.readDouble(false); +// state.type = stream.readInt32(false); + state.emoji = stream.readString(false); + state.temperature = stream.readFloat(false); + return state; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeDouble(lat); + stream.writeDouble(lng); +// stream.writeInt32(type); + stream.writeString(emoji); + stream.writeFloat(temperature); + } + } + + public static void fetch(boolean withProgress, Utilities.Callback whenFetched) { + if (whenFetched == null) return; + getUserLocation(withProgress, location -> { + if (location == null) { + whenFetched.run(null); + return; + } + + Activity activity = LaunchActivity.instance; + if (activity == null) activity = AndroidUtilities.findActivity(ApplicationLoader.applicationContext); + if (activity == null || activity.isFinishing()) { + whenFetched.run(null); + return; + } + + final AlertDialog progressDialog = withProgress ? new AlertDialog(activity, AlertDialog.ALERT_TYPE_SPINNER, new DarkThemeResourceProvider()) : null; + if (withProgress) progressDialog.showDelayed(200); + Runnable cancel = fetch(location.getLatitude(), location.getLongitude(), weather -> { + if (withProgress) { + progressDialog.dismissUnless(350); + } + whenFetched.run(weather); + }); + if (withProgress && cancel != null) { + progressDialog.setOnCancelListener(di -> cancel.run()); + } + }); + } + + private static String cacheKey; + private static State cacheValue; + + public static State getCached() { + return cacheValue; + } + +// public static Runnable fetch(double lat, double lng, Utilities.Callback whenFetched) { +// if (whenFetched == null) return null; +// +// final Date date = new Date(); +// final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); +// calendar.setTime(date); +// final long hours = calendar.getTimeInMillis() / 1_000L / 60L / 60L; +// final String key = Math.round(lat * 1000) + ":" + Math.round(lng * 1000) + "at" + hours; +// if (cacheValue != null && TextUtils.equals(cacheKey, key)) { +// whenFetched.run(cacheValue); +// return null; +// } +// +// AsyncTask task = new HttpGetTask(result -> { +// try { +// final JSONObject obj = new JSONObject(result); +// final JSONObject current_weather = obj.getJSONObject("current_weather"); +// final int type = current_weather.getInt("weathercode"); +// int temperature = current_weather.getInt("temperature"); +// final JSONObject current_weather_units = obj.getJSONObject("current_weather_units"); +// if (current_weather_units.getString("temperature").equals("°F")) { +// temperature = (int) Math.round((temperature - 32) * 5.0 / 9.0); +// } +// +// final State state = new State(); +// state.lat = lat; +// state.lng = lng; +// state.type = type; +// state.temperature = temperature; +// +// cacheKey = key; +// cacheValue = state; +// +// whenFetched.run(state); +// +// } catch (Exception e) { +// FileLog.e(e); +// } +// }).execute( +// "https://api.open-meteo.com/v1/forecast?latitude="+lat+"&longitude="+lng+"¤t_weather=true" +// ); +// +// return () -> task.cancel(true); +// } + + public static Runnable fetch(double lat, double lng, Utilities.Callback whenFetched) { + if (whenFetched == null) return null; + + final Date date = new Date(); + final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + calendar.setTime(date); + final long hours = calendar.getTimeInMillis() / 1_000L / 60L / 60L; + final String key = Math.round(lat * 1000) + ":" + Math.round(lng * 1000) + "at" + hours; + if (cacheValue != null && TextUtils.equals(cacheKey, key)) { + whenFetched.run(cacheValue); + return null; + } + + final int[] currentReqId = new int[1]; + + final MessagesController messagesController = MessagesController.getInstance(UserConfig.selectedAccount); + final ConnectionsManager connectionsManager = ConnectionsManager.getInstance(UserConfig.selectedAccount); + final String username = messagesController.weatherSearchUsername; + + final TLRPC.User[] bot = new TLRPC.User[] { messagesController.getUser(username) }; + Runnable request = () -> { + TLRPC.TL_messages_getInlineBotResults req2 = new TLRPC.TL_messages_getInlineBotResults(); + req2.bot = messagesController.getInputUser(bot[0]); + req2.query = ""; + req2.offset = ""; + req2.flags |= 1; + req2.geo_point = new TLRPC.TL_inputGeoPoint(); + req2.geo_point.lat = lat; + req2.geo_point._long = lng; + req2.peer = new TLRPC.TL_inputPeerEmpty(); + + currentReqId[0] = connectionsManager.sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { + currentReqId[0] = 0; + if (res2 instanceof TLRPC.messages_BotResults) { + TLRPC.messages_BotResults r = (TLRPC.messages_BotResults) res2; + if (!r.results.isEmpty()) { + TLRPC.BotInlineResult rr = r.results.get(0); + final String emoji = rr.title; + final float temp; + try { + temp = Float.parseFloat(rr.description); + } catch (Exception e) { + whenFetched.run(null); + return; + } + final State state = new State(); + state.lat = lat; + state.lng = lng; + state.emoji = emoji; + state.temperature = temp; + + cacheKey = key; + cacheValue = state; + + whenFetched.run(state); + return; + } + } + whenFetched.run(null); + })); + }; + + if (bot[0] == null) { + TLRPC.TL_contacts_resolveUsername req = new TLRPC.TL_contacts_resolveUsername(); + req.username = username; + currentReqId[0] = connectionsManager.sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + currentReqId[0] = 0; + if (res instanceof TLRPC.TL_contacts_resolvedPeer) { + TLRPC.TL_contacts_resolvedPeer r = (TLRPC.TL_contacts_resolvedPeer) res; + messagesController.putUsers(r.users, false); + messagesController.putChats(r.chats, false); + long uid = DialogObject.getPeerDialogId(r.peer); + bot[0] = messagesController.getUser(uid); + if (bot[0] != null) { + request.run(); + return; + } + } + whenFetched.run(null); + })); + } else { + request.run(); + } + + return () -> { + if (currentReqId[0] != 0) { + connectionsManager.cancelRequest(currentReqId[0], true); + currentReqId[0] = 0; + } + }; + } + + public static int LOCATION_REQUEST = 3332; + private static Utilities.Callback latestPermissionCallback; + + public static boolean hasLocationPermission() { + Activity _activity = LaunchActivity.instance; + if (_activity == null) _activity = AndroidUtilities.findActivity(ApplicationLoader.applicationContext); + if (_activity == null) return false; + final Activity activity = _activity; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (activity.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + return true; + } + return false; + } else { + return true; + } + } + + public static void ensureLocationPermission(Utilities.Callback ensured) { + if (ensured == null) return; + Activity _activity = LaunchActivity.instance; + if (_activity == null) _activity = AndroidUtilities.findActivity(ApplicationLoader.applicationContext); + if (_activity == null) return; + final Activity activity = _activity; + + latestPermissionCallback = ensured; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if ( + ApplicationLoader.applicationContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED || + ApplicationLoader.applicationContext.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + ) { + ensured.run(true); + return; + } + if (activity.shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION) || activity.shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) { + new AlertDialog.Builder(activity, null) + .setTopAnimation(R.raw.permission_request_location, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) + .setMessage(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PermissionNoLocationStory))) + .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + try { + Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); + activity.startActivity(intent); + } catch (Exception e) { + FileLog.e(e); + } + }) + .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .create() + .show(); + ensured.run(false); + return; + } + activity.requestPermissions(new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION }, LOCATION_REQUEST); + } else { + ensured.run(true); + } + } + + public static void receivePermissionIntent(String[] permissions, int[] grantResults) { + boolean granted = false; + for (int i = 0; i < permissions.length; ++i) { + if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permissions[i]) || Manifest.permission.ACCESS_FINE_LOCATION.equals(permissions[i])) { + granted = grantResults[i] == PackageManager.PERMISSION_GRANTED; + break; + } + } + if (latestPermissionCallback != null) { + Utilities.Callback callback = latestPermissionCallback; + latestPermissionCallback = null; + callback.run(granted); + } + } + + @SuppressLint("MissingPermission") + public static void getUserLocation(boolean withProgress, Utilities.Callback whenGot) { + if (whenGot == null) return; + + ensureLocationPermission(granted -> { + if (!granted) { + whenGot.run(null); + return; + } + + LocationManager lm = (LocationManager) ApplicationLoader.applicationContext.getSystemService(Context.LOCATION_SERVICE); + List providers = lm.getProviders(true); + Location l = null; + for (int i = providers.size() - 1; i >= 0; i--) { + l = lm.getLastKnownLocation(providers.get(i)); + if (l != null) { + break; + } + } + if (l == null && withProgress) { + if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { + Context context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + if (context != null) { + try { + final Context finalContext = context; + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTopAnimation(R.raw.permission_request_location, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)); + builder.setMessage(getString(R.string.GpsDisabledAlertText)); + builder.setPositiveButton(getString(R.string.Enable), (dialog, id) -> { + try { + finalContext.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); + } catch (Exception ignore) { + } + }); + builder.setNegativeButton(getString(R.string.Cancel), null); + builder.show(); + } catch (Exception e) { + FileLog.e(e); + } + } + } else { + try { + final Utilities.Callback[] callback = new Utilities.Callback[] { whenGot }; + final LocationListener[] listenerArr = new LocationListener[] { null }; + final LocationListener listener = location -> { + if (listenerArr[0] != null) { + lm.removeUpdates(listenerArr[0]); + listenerArr[0] = null; + } + if (callback[0] != null) { + callback[0].run(location); + callback[0] = null; + } + }; + listenerArr[0] = listener; + lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 0, listener); + } catch (Exception e) { + FileLog.e(e); + whenGot.run(null); + } + return; + } + } + whenGot.run(l); + }); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java index 0300a5cc2..3b865ecdb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java @@ -24,7 +24,6 @@ import android.text.SpannableString; import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.view.animation.LinearInterpolator; @@ -526,7 +525,7 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain messageView.drawNamesLayout(canvas, alphaProgress); messageView.drawCommentButton(canvas, alphaProgress); messageView.drawCaptionLayout(canvas, false, alphaProgress); - messageView.drawReactionsLayout(canvas, alphaProgress); + messageView.drawReactionsLayout(canvas, alphaProgress, null); messageView.drawLinkPreview(canvas, alphaProgress); canvas.restore(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java index edb26ba96..994ea55a9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java @@ -23,8 +23,6 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.Canvas; import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.location.Address; import android.location.Geocoder; @@ -55,7 +53,6 @@ import androidx.recyclerview.widget.RecyclerView; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; -import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; @@ -64,10 +61,9 @@ import org.telegram.messenger.MessagesController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; -import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.time.SunDate; -import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_account; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.ActionBar.ActionBarMenuItem; @@ -94,7 +90,6 @@ import org.telegram.ui.Cells.ThemePreviewMessagesCell; import org.telegram.ui.Cells.ThemeTypeCell; import org.telegram.ui.Cells.ThemesHorizontalListCell; import org.telegram.ui.Components.AlertsCreator; -import org.telegram.ui.Components.AvatarDrawable; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RLottieDrawable; @@ -103,8 +98,9 @@ import org.telegram.ui.Components.SeekBarView; import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.SimpleThemeDescription; import org.telegram.ui.Components.SwipeGestureSettingsView; -import org.telegram.ui.Components.Text; import org.telegram.ui.Components.ThemeEditorView; +import org.telegram.ui.web.SearchEngine; +import org.telegram.ui.web.WebBrowserSettings; import java.io.File; import java.io.FileOutputStream; @@ -143,8 +139,8 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private int textSizeHeaderRow; private int textSizeRow; private int settingsRow; - private int customTabsRow; private int directShareRow; + private int sensitiveContentRow; private int raiseToSpeakRow; private int raiseToListenRow; private int nextMediaTapRow; @@ -153,6 +149,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private int saveToGalleryOption2Row; private int saveToGallerySectionRow; private int distanceRow; + private int searchEngineRow; private int bluetoothScoRow; private int enableAnimationsRow; private int settings2Row; @@ -162,6 +159,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private int contactsSortRow; private int nightThemeRow; + private int browserRow; private int nightDisabledRow; private int nightScheduledRow; private int nightAutomaticRow; @@ -223,6 +221,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private boolean updateRecordViaSco; private boolean updateDistance; + private boolean updateSearchEngine; private GpsLocationListener gpsLocationListener = new GpsLocationListener(); private GpsLocationListener networkLocationListener = new GpsLocationListener(); @@ -235,6 +234,12 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private RLottieDrawable sunDrawable; + private boolean highlightSensitiveRow; + public ThemeActivity highlightSensitiveRow() { + this.highlightSensitiveRow = true; + return this; + } + private class GpsLocationListener implements LocationListener { @Override @@ -515,6 +520,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No nightTypeInfoRow = -1; scheduleHeaderRow = -1; nightThemeRow = -1; + browserRow = -1; newThemeInfoRow = -1; scheduleFromRow = -1; scheduleToRow = -1; @@ -552,8 +558,8 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No backgroundRow = -1; changeUserColor = -1; settingsRow = -1; - customTabsRow = -1; directShareRow = -1; + sensitiveContentRow = -1; enableAnimationsRow = -1; raiseToSpeakRow = -1; raiseToListenRow = -1; @@ -563,6 +569,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No saveToGalleryOption2Row = -1; saveToGallerySectionRow = -1; distanceRow = -1; + searchEngineRow = -1; bluetoothScoRow = -1; settings2Row = -1; @@ -649,6 +656,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No swipeGestureInfoRow = rowCount++; nightThemeRow = rowCount++; + browserRow = rowCount++; liteModeRow = rowCount++; stickersRow = rowCount++; stickersSectionRow = rowCount++; @@ -665,8 +673,11 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No mediaSoundSectionRow = rowCount++; otherHeaderRow = rowCount++; - customTabsRow = rowCount++; directShareRow = rowCount++; + TL_account.contentSettings contentSettings = getMessagesController().getContentSettings(); + if (contentSettings != null && contentSettings.sensitive_can_change) { + sensitiveContentRow = rowCount++; + } sendByEnterRow = rowCount++; distanceRow = rowCount++; otherSectionRow = rowCount++; @@ -914,6 +925,18 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No menuItem.addSubItem(edit_theme, R.drawable.msg_edit, getString("EditThemeColors", R.string.EditThemeColors)); menuItem.addSubItem(create_theme, R.drawable.msg_palette, getString("CreateNewThemeMenu", R.string.CreateNewThemeMenu)); menuItem.addSubItem(reset_settings, R.drawable.msg_reset, getString("ThemeResetToDefaults", R.string.ThemeResetToDefaults)); + + if (getMessagesController().getContentSettings() == null) { + getMessagesController().getContentSettings(settings -> { + if (listView != null && listView.isAttachedToWindow() && listAdapter != null) { + if ((sensitiveContentRow >= 0) == (settings != null && settings.sensitive_can_change)) { + listAdapter.notifyItemChanged(sensitiveContentRow); + } else { + updateRows(true); + } + } + }); + } } else { actionBar.setTitle(getString("AutoNightTheme", R.string.AutoNightTheme)); } @@ -1138,6 +1161,47 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No .create(); dialogRef.set(dialog); showDialog(dialog); + } else if (position == searchEngineRow) { + if (getParentActivity() == null) { + return; + } + AtomicReference dialogRef = new AtomicReference<>(); + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + ArrayList searchEngines = SearchEngine.getSearchEngines(); + CharSequence[] items = new CharSequence[ searchEngines.size() ]; + + for (int i = 0; i < items.length; ++i) { + final SearchEngine engine = searchEngines.get(i); + items[i] = engine.name; + + final int index = i; + RadioColorCell cell = new RadioColorCell(getParentActivity()); + cell.setPadding(dp(4), 0, dp(4), 0); + cell.setCheckColor(Theme.getColor(Theme.key_radioBackground), Theme.getColor(Theme.key_dialogRadioBackgroundChecked)); + cell.setTextAndValue(items[index], index == SharedConfig.searchEngineType); + cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.RIPPLE_MASK_ALL)); + linearLayout.addView(cell); + cell.setOnClickListener(v -> { + SharedConfig.setSearchEngineType(index); + updateSearchEngine = true; + RecyclerView.ViewHolder holder = listView.findViewHolderForAdapterPosition(searchEngineRow); + if (holder != null) { + listAdapter.onBindViewHolder(holder, searchEngineRow); + } + dialogRef.get().dismiss(); + }); + } + + Dialog dialog = new AlertDialog.Builder(getParentActivity()) + .setTitle(getString(R.string.SearchEngine)) + .setView(linearLayout) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .create(); + dialogRef.set(dialog); + showDialog(dialog); } else if (position == bluetoothScoRow) { if (getParentActivity() == null) { return; @@ -1190,16 +1254,32 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No .create(); dialogRef.set(dialog); showDialog(dialog); - } else if (position == customTabsRow) { - SharedConfig.toggleCustomTabs(); - if (view instanceof TextCheckCell) { - ((TextCheckCell) view).setChecked(SharedConfig.customTabs); - } } else if (position == directShareRow) { SharedConfig.toggleDirectShare(); if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(SharedConfig.directShare); } + } else if (position == sensitiveContentRow) { + if (!getMessagesController().showSensitiveContent()) { + showDialog( + new AlertDialog.Builder(context, resourceProvider) + .setTitle(getString(R.string.ConfirmSensitiveContentTitle)) + .setMessage(getString(R.string.ConfirmSensitiveContentText)) + .setPositiveButton(getString(R.string.Confirm), (di, w) -> { + getMessagesController().setContentSettings(true); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(getMessagesController().showSensitiveContent()); + } + }) + .setNegativeButton(getString(R.string.Cancel), null) + .create() + ); + } else { + getMessagesController().setContentSettings(false); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(getMessagesController().showSensitiveContent()); + } + } } else if (position == contactsReimportRow) { //not implemented } else if (position == contactsSortRow) { @@ -1257,6 +1337,14 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No } else { presentFragment(new ThemeActivity(THEME_TYPE_NIGHT)); } + } else if (position == browserRow) { + if (LocaleController.isRTL && x <= dp(76) || !LocaleController.isRTL && x >= view.getMeasuredWidth() - dp(76)) { + NotificationsCheckCell checkCell = (NotificationsCheckCell) view; + SharedConfig.toggleInappBrowser(); + checkCell.setChecked(SharedConfig.inappBrowser); + } else { + presentFragment(new WebBrowserSettings(null)); + } } else if (position == nightDisabledRow) { if (Theme.selectedAutoNightType == Theme.AUTO_NIGHT_TYPE_NONE) { return; @@ -1343,6 +1431,15 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No listView.setItemAnimator(itemAnimator); } + if (highlightSensitiveRow) { + updateRows(false); + highlightSensitiveRow = false; + listView.scrollToPosition(listAdapter.getItemCount() - 1); + AndroidUtilities.runOnUIThread(() -> { + listView.highlightRow(() -> sensitiveContentRow); + }, 200); + } + return fragmentView; } @@ -2206,9 +2303,9 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No TextSettingsCell cell = (TextSettingsCell) holder.itemView; if (position == nightThemeRow) { if (Theme.selectedAutoNightType == Theme.AUTO_NIGHT_TYPE_NONE || Theme.getCurrentNightTheme() == null) { - cell.setTextAndValue(getString("AutoNightTheme", R.string.AutoNightTheme), getString("AutoNightThemeOff", R.string.AutoNightThemeOff), false); + cell.setTextAndValue(getString(R.string.AutoNightTheme), getString(R.string.AutoNightThemeOff), false); } else { - cell.setTextAndValue(getString("AutoNightTheme", R.string.AutoNightTheme), Theme.getCurrentNightThemeName(), false); + cell.setTextAndValue(getString(R.string.AutoNightTheme), Theme.getCurrentNightThemeName(), false); } } else if (position == scheduleFromRow) { int currentHour = Theme.autoNightDayStartTime / 60; @@ -2243,8 +2340,10 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No } else { value = getString("DistanceUnitsMiles", R.string.DistanceUnitsMiles); } - cell.setTextAndValue(getString("DistanceUnits", R.string.DistanceUnits), value, updateDistance, false); + cell.setTextAndValue(getString("DistanceUnits", R.string.DistanceUnits), value, updateDistance, true); updateDistance = false; + } else if (position == searchEngineRow) { + cell.setTextAndValue(getString(R.string.SearchEngine), SearchEngine.getCurrent().name, updateSearchEngine, false); } else if (position == bluetoothScoRow) { cell.setTextAndValue(getString(R.string.MicrophoneForVoiceMessages), getString(SharedConfig.recordViaSco ? R.string.MicrophoneForVoiceMessagesSco : R.string.MicrophoneForVoiceMessagesBuiltIn), updateRecordViaSco, false); updateRecordViaSco = false; @@ -2349,10 +2448,10 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No textCheckCell.setTextAndValueAndCheck(getString(R.string.PauseMusicOnRecord), getString("PauseMusicOnRecordInfo", R.string.PauseMusicOnRecordInfo), SharedConfig.pauseMusicOnRecord, true, true); } else if (position == pauseOnMediaRow) { textCheckCell.setTextAndCheck(getString(R.string.PauseMusicOnMedia), SharedConfig.pauseMusicOnMedia, true); - } else if (position == customTabsRow) { - textCheckCell.setTextAndValueAndCheck(getString("ChromeCustomTabs", R.string.ChromeCustomTabs), getString("ChromeCustomTabsInfo", R.string.ChromeCustomTabsInfo), SharedConfig.customTabs, false, true); } else if (position == directShareRow) { textCheckCell.setTextAndValueAndCheck(getString("DirectShare", R.string.DirectShare), getString("DirectShareInfo", R.string.DirectShareInfo), SharedConfig.directShare, false, true); + } else if (position == sensitiveContentRow) { + textCheckCell.setTextAndValueAndCheck(getString(R.string.ShowSensitiveContent), getString(R.string.ShowSensitiveContentInfo), getMessagesController().showSensitiveContent(), true, true); } else if (position == chatBlurRow) { textCheckCell.setTextAndCheck(getString("BlurInChat", R.string.BlurInChat), SharedConfig.chatBlurEnabled(), true); } @@ -2375,6 +2474,8 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No value = type + " " + value; } checkCell.setTextAndValueAndIconAndCheck(getString("AutoNightTheme", R.string.AutoNightTheme), value, R.drawable.msg2_night_auto, enabled, 0, false, true); + } else if (position == browserRow) { + checkCell.setTextAndValueAndIconAndCheck(getString(R.string.InappBrowser), getString(R.string.InappBrowserInfo), R.drawable.msg2_language, SharedConfig.inappBrowser, 0, false, true); } break; } @@ -2468,7 +2569,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No if (position == scheduleFromRow || position == distanceRow || position == scheduleToRow || position == scheduleUpdateLocationRow || position == contactsReimportRow || position == contactsSortRow || - position == bluetoothScoRow) { + position == bluetoothScoRow || position == searchEngineRow) { return TYPE_TEXT_SETTING; } else if (position == automaticBrightnessInfoRow || position == scheduleLocationInfoRow || position == swipeGestureInfoRow || position == stickersInfoRow || position == liteModeInfoRow) { return TYPE_TEXT_INFO_PRIVACY; @@ -2488,14 +2589,14 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No } else if (position == automaticBrightnessRow) { return TYPE_BRIGHTNESS; } else if (position == scheduleLocationRow || position == sendByEnterRow || - position == raiseToSpeakRow || position == raiseToListenRow || position == pauseOnRecordRow || position == customTabsRow || - position == directShareRow || position == chatBlurRow || position == pauseOnMediaRow || position == nextMediaTapRow) { + position == raiseToSpeakRow || position == raiseToListenRow || position == pauseOnRecordRow || + position == directShareRow || position == chatBlurRow || position == pauseOnMediaRow || position == nextMediaTapRow || position == sensitiveContentRow) { return TYPE_TEXT_CHECK; } else if (position == textSizeRow) { return TYPE_TEXT_SIZE; } else if (position == chatListRow) { return TYPE_CHAT_LIST; - } else if (position == nightThemeRow) { + } else if (position == nightThemeRow || position == browserRow) { return TYPE_NIGHT_THEME; } else if (position == themeListRow) { return TYPE_THEME_LIST; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java index cd9e75675..8f958c6f7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java @@ -51,6 +51,7 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; +import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; @@ -327,7 +328,7 @@ public class TwoStepVerificationSetupActivity extends BaseFragment { Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground)); if (Build.VERSION.SDK_INT < 21) { - Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate(); + Drawable shadowDrawable = ContextCompat.getDrawable(context, R.drawable.floating_shadow).mutate(); shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY)); CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0); combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java index aa8e24daf..a1265cb02 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java @@ -438,6 +438,7 @@ public class UserInfoActivity extends UniversalFragment implements NotificationC userFull.birthday = null; } requests.add(req); + getMessagesController().invalidateContentSettings(); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.premiumPromoUpdated); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java index 86de3b362..1051f5257 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java @@ -1088,9 +1088,9 @@ public class UsersSelectActivity extends BaseFragment implements NotificationCen } else { animatedAvatarContainer.getTitle().setText(LocaleController.formatPluralString("Chats", selectedCount, selectedCount)); if (ttlPeriod > 0) { - animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getPluralString("SelectChatsForAutoDelete2", selectedCount)); + animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getString(R.string.SelectChatsForAutoDelete2)); } else { - animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getPluralString("SelectChatsForDisableAutoDelete2", selectedCount)); + animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getString(R.string.SelectChatsForDisableAutoDelete2)); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java index 04ed92bc3..9bdda36ff 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java @@ -16,6 +16,7 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.LocaleController; import org.telegram.messenger.R; import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.AlertDialog; @@ -31,11 +32,12 @@ public class WebAppDisclaimerAlert { private AlertDialog alert; private TextView positiveButton; - public static void show(Context context, Consumer consumer, TLRPC.User withSendMessage) { + public static void show(Context context, Consumer consumer, TLRPC.User withSendMessage, Runnable dismissed) { WebAppDisclaimerAlert alert = new WebAppDisclaimerAlert(); AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); alertDialog.setTitle(LocaleController.getString("TermsOfUse", R.string.TermsOfUse)); + LinearLayout linearLayout = new LinearLayout(context); linearLayout.setOrientation(LinearLayout.VERTICAL); TextView textView = new TextView(context); @@ -61,6 +63,7 @@ public class WebAppDisclaimerAlert { // }); // } + final boolean[] dismissing = new boolean[1]; textView.setText(AndroidUtilities.replaceTags(LocaleController.getString("BotWebAppDisclaimerSubtitle", R.string.BotWebAppDisclaimerSubtitle))); alert.cell.setText(AndroidUtilities.replaceSingleTag(LocaleController.getString("BotWebAppDisclaimerCheck", R.string.BotWebAppDisclaimerCheck), () -> { Browser.openUrl(context, LocaleController.getString("WebAppDisclaimerUrl", R.string.WebAppDisclaimerUrl)); @@ -68,6 +71,7 @@ public class WebAppDisclaimerAlert { alertDialog.setView(linearLayout); alertDialog.setPositiveButton(LocaleController.getString("Continue", R.string.Continue), (dialog, which) -> { consumer.accept(true); + dismissing[0] = true; dialog.dismiss(); }); alertDialog.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> { @@ -84,5 +88,13 @@ public class WebAppDisclaimerAlert { alert.positiveButton.animate().alpha(alert.cell.isChecked() ? 1f : 0.5f).start(); }); alert.cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.RIPPLE_MASK_ROUNDRECT_6DP)); + alert.alert.setOnDismissListener(d -> { + if (!dismissing[0]) { + dismissing[0] = true; + if (dismissed != null) { + dismissed.run(); + } + } + }); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java b/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java index cc522fea8..36245cc0d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java @@ -27,46 +27,71 @@ public class WrappedResourceProvider implements Theme.ResourcesProvider { if (index >= 0) { return sparseIntArray.valueAt(index); } + if (resourcesProvider == null) { + return Theme.getColor(key); + } return resourcesProvider.getColor(key); } @Override public int getColorOrDefault(int key) { + if (resourcesProvider == null) { + return Theme.getColor(key); + } return resourcesProvider.getColorOrDefault(key); } @Override public int getCurrentColor(int key) { + if (resourcesProvider == null) return Theme.getColor(key); return resourcesProvider.getCurrentColor(key); } @Override public void setAnimatedColor(int key, int color) { - resourcesProvider.setAnimatedColor(key, color); + if (resourcesProvider != null) { + resourcesProvider.setAnimatedColor(key, color); + } } @Override public Drawable getDrawable(String drawableKey) { + if (resourcesProvider == null) { + return Theme.getThemeDrawable(drawableKey); + } return resourcesProvider.getDrawable(drawableKey); } @Override public Paint getPaint(String paintKey) { + if (resourcesProvider == null) { + return Theme.getThemePaint(paintKey); + } return resourcesProvider.getPaint(paintKey); } @Override public boolean hasGradientService() { + if (resourcesProvider == null) { + return Theme.hasGradientService(); + } return resourcesProvider.hasGradientService(); } @Override public void applyServiceShaderMatrix(int w, int h, float translationX, float translationY) { - resourcesProvider.applyServiceShaderMatrix(w, h, translationX, translationY); + if (resourcesProvider == null) { + Theme.applyServiceShaderMatrix(w, h, translationX, translationY); + } else { + resourcesProvider.applyServiceShaderMatrix(w, h, translationX, translationY); + } } @Override public ColorFilter getAnimatedEmojiColorFilter() { + if (resourcesProvider == null) { + return Theme.getAnimatedEmojiColorFilter(null); + } return resourcesProvider.getAnimatedEmojiColorFilter(); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java index 718b24085..3b6a9306e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java @@ -45,6 +45,7 @@ import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; import java.util.ArrayList; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executor; @@ -102,7 +103,7 @@ public class BotBiometry { private BiometricPrompt prompt; public void requestToken(String reason, Utilities.Callback2 whenDecrypted) { - prompt(reason, true, null, result -> { + prompt(reason, true, null, (success, result) -> { String token = null; if (result != null) { try { @@ -130,15 +131,15 @@ public class BotBiometry { } catch (Exception e) { FileLog.e(e); result = null; + success = false; } } - whenDecrypted.run(result != null, token); + whenDecrypted.run(success, token); }); } public void updateToken(String reason, String token, Utilities.Callback whenDone) { - prompt(reason, false, token, result -> { - boolean success = result != null; + prompt(reason, false, token, (success, result) -> { if (result != null) { try { BiometricPrompt.CryptoObject cryptoObject = result.getCryptoObject(); @@ -179,9 +180,9 @@ public class BotBiometry { public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { FileLog.d("BotBiometry onAuthenticationError " + errorCode + " \"" + errString + "\""); if (callback != null) { - Utilities.Callback thisCallback = callback; + Utilities.Callback2 thisCallback = callback; callback = null; - thisCallback.run(null); + thisCallback.run(false, null); } } @@ -189,9 +190,9 @@ public class BotBiometry { public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) { FileLog.d("BotBiometry onAuthenticationSucceeded"); if (callback != null) { - Utilities.Callback thisCallback = callback; + Utilities.Callback2 thisCallback = callback; callback = null; - thisCallback.run(result); + thisCallback.run(true, result); } } @@ -225,19 +226,19 @@ public class BotBiometry { return null; } - private Utilities.Callback callback; + private Utilities.Callback2 callback; private void prompt( String text, boolean decrypt, String token, - Utilities.Callback whenDone + Utilities.Callback2 whenDone ) { this.callback = whenDone; try { initPrompt(); } catch (Exception e) { FileLog.e(e); - whenDone.run(null); + whenDone.run(false, null); return; } BiometricPrompt.CryptoObject cryptoObject = makeCryptoObject(decrypt); @@ -262,7 +263,7 @@ public class BotBiometry { } save(); this.callback = null; - whenDone.run(null); + whenDone.run(true, null); return; } catch (Exception e) { FileLog.e(e); @@ -386,22 +387,25 @@ public class BotBiometry { final SharedPreferences prefs = context.getSharedPreferences(PREF + currentAccount, Activity.MODE_PRIVATE); final ArrayList botIds = new ArrayList<>(); - final ArrayList botDisabled = new ArrayList<>(); final Map values = prefs.getAll(); for (Map.Entry entry : values.entrySet()) { - if (!entry.getKey().startsWith("device_id") || !(entry.getValue() instanceof String)) continue; + final String key = entry.getKey(); + if (!key.endsWith("_requested")) continue; long botId; - boolean disabled; try { - botId = Long.parseLong(entry.getKey().substring("device_id".length())); - Boolean disabledValue = (Boolean) values.get(botId + "_disabled"); - disabled = disabledValue != null && disabledValue; + botId = Long.parseLong(key.substring(0, key.length() - "_requested".length())); } catch (Exception e) { FileLog.e(e); continue; } botIds.add(botId); - botDisabled.add(disabled); + } + + final HashMap botEnabled = new HashMap<>(); + for (long botId : botIds) { + final BotBiometry biometry = new BotBiometry(context, currentAccount, botId); + if (!biometry.access_granted || !biometry.access_requested) continue; + botEnabled.put(botId, !biometry.disabled); } if (botIds.isEmpty()) { @@ -414,7 +418,9 @@ public class BotBiometry { AndroidUtilities.runOnUIThread(() -> { ArrayList result = new ArrayList<>(); for (int i = 0; i < bots.size(); ++i) { - result.add(new Bot(bots.get(i), i < botDisabled.size() && botDisabled.get(i))); + final TLRPC.User user = bots.get(i); + final Boolean bool = botEnabled.get(user.id); + result.add(new Bot(user, bool == null || !bool)); } whenDone.run(result); }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java index 6f549bd0c..e8f3843c0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java @@ -29,6 +29,7 @@ import org.telegram.messenger.LocaleController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.MenuDrawable; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.CubicBezierInterpolator; @@ -284,11 +285,11 @@ public class BotCommandsMenuView extends View { return newResult.size(); } - public void setBotInfo(LongSparseArray botInfo) { + public void setBotInfo(LongSparseArray botInfo) { newResult.clear(); newResultHelp.clear(); for (int b = 0; b < botInfo.size(); b++) { - TLRPC.BotInfo info = botInfo.valueAt(b); + TL_bots.BotInfo info = botInfo.valueAt(b); for (int a = 0; a < info.commands.size(); a++) { TLRPC.TL_botCommand botCommand = info.commands.get(a); if (botCommand != null && botCommand.command != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java index c53e40562..c02086d66 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java @@ -13,11 +13,14 @@ import android.app.Dialog; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.text.TextPaint; @@ -41,6 +44,7 @@ import androidx.dynamicanimation.animation.SpringForce; import org.json.JSONObject; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.AnimationNotificationsLocker; +import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ContactsController; import org.telegram.messenger.DialogObject; import org.telegram.messenger.Emoji; @@ -66,7 +70,9 @@ import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BackDrawable; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.INavigationLayout; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatActivity; @@ -76,6 +82,7 @@ import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.OverlayActionBarLayoutDialog; import org.telegram.ui.Components.RadialProgressView; +import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.SimpleFloatPropertyCompat; import org.telegram.ui.Components.SizeNotifierFrameLayout; import org.telegram.ui.Components.VerticalPositionAutoAnimator; @@ -83,6 +90,8 @@ import org.telegram.ui.DialogsActivity; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stories.DarkThemeResourceProvider; +import org.telegram.ui.web.BotWebViewContainer; import java.io.File; import java.lang.annotation.Retention; @@ -90,8 +99,8 @@ import java.lang.annotation.RetentionPolicy; import java.util.List; import java.util.Locale; -public class BotWebViewAttachedSheet implements NotificationCenter.NotificationCenterDelegate, BaseFragment.AttachedSheet { - public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3; +public class BotWebViewAttachedSheet implements NotificationCenter.NotificationCenterDelegate, BaseFragment.AttachedSheet, BottomSheetTabsOverlay.Sheet { + public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3, TYPE_WEB_VIEW_BOT_MAIN = 4; public final static int FLAG_FROM_INLINE_SWITCH = 1; public final static int FLAG_FROM_SIDE_MENU = 2; @@ -125,12 +134,20 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC }, 200); } + @Override + public void setLastVisible(boolean lastVisible) { + if (webViewContainer != null) { + webViewContainer.setKeyboardFocusable(lastVisible); + } + } + @Retention(RetentionPolicy.SOURCE) @IntDef(value = { TYPE_WEB_VIEW_BUTTON, TYPE_SIMPLE_WEB_VIEW_BUTTON, TYPE_BOT_MENU_BUTTON, - TYPE_WEB_VIEW_BOT_APP + TYPE_WEB_VIEW_BOT_APP, + TYPE_WEB_VIEW_BOT_MAIN }) public @interface WebViewType {} @@ -144,6 +161,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC }).setMultiplier(100f); private float actionBarTransitionProgress = 0f; private SpringAnimation springAnimation; + private boolean actionBarAttached; private Boolean wasLightStatusBar; @@ -211,22 +229,23 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC tab.ready = webViewContainer != null && webViewContainer.isPageLoaded(); tab.themeIsDark = Theme.isCurrentThemeDark(); tab.lastUrl = webViewContainer != null ? webViewContainer.getUrlLoaded() : null; - tab.expanded = swipeContainer != null && ((1f - Math.min(swipeContainer.getTopActionBarOffsetY(), swipeContainer.getTranslationY() - swipeContainer.getTopActionBarOffsetY()) / swipeContainer.getTopActionBarOffsetY()) > .5f) || forceExpnaded || getFullSize(); - tab.fullsize = getFullSize(); + tab.expanded = swipeContainer != null && ((1f - Math.min(swipeContainer.getTopActionBarOffsetY(), swipeContainer.getTranslationY() - swipeContainer.getTopActionBarOffsetY()) / swipeContainer.getTopActionBarOffsetY()) > .5f) || forceExpnaded || isFullSize(); + tab.fullsize = isFullSize(); tab.expandedOffset = swipeContainer != null ? swipeContainer.getOffsetY() : Float.MAX_VALUE; tab.backButton = backButtonShown; tab.settings = settingsItem != null && settingsItem.getVisibility() == View.VISIBLE; tab.main = mainButtonSettings; tab.confirmDismiss = needCloseConfirmation; tab.needsContext = needsContext; + tab.allowSwipes = swipeContainer == null || swipeContainer.isAllowedSwipes(); BotWebViewContainer.MyWebView webView = webViewContainer == null ? null : webViewContainer.getWebView(); if (webView != null) { webViewContainer.preserveWebView(); tab.webView = webView; - tab.webViewProxy = webViewContainer == null ? null : webViewContainer.getProxy(); - tab.webViewWidth = webView.getWidth(); - tab.webViewHeight = webView.getHeight(); - tab.webViewScroll = webView.getScrollY(); + tab.proxy = webViewContainer == null ? null : webViewContainer.getBotProxy(); + tab.viewWidth = webView.getWidth(); + tab.viewHeight = webView.getHeight(); + tab.viewScroll = webView.getScrollY(); webView.onPause(); // webView.pauseTimers(); } @@ -241,12 +260,12 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC if (tab.overrideActionBarColor) { setBackgroundColor(tab.backgroundColor, false); } - setActionBarColor(!tab.overrideActionBarColor ? Theme.getColor(tab.actionBarColorKey < 0 ? Theme.key_windowBackgroundWhite : tab.actionBarColorKey, resourcesProvider) : tab.actionBarColor, tab.overrideActionBarColor, false); showExpanded = tab.expanded; showOffsetY = tab.expandedOffset; fullsize = tab.fullsize; needsContext = tab.needsContext; webViewContainer.setIsBackButtonVisible(backButtonShown = tab.backButton); + swipeContainer.setAllowSwipes(tab.allowSwipes); if (backDrawable != null) { backDrawable.setRotation(backButtonShown ? 0f : 1f, false); } @@ -257,7 +276,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC if (tab.webView != null) { // tab.webView.resumeTimers(); tab.webView.onResume(); - webViewContainer.replaceWebView(tab.webView, tab.webViewProxy); + webViewContainer.replaceWebView(tab.webView, tab.proxy); webViewContainer.setState(tab.ready || tab.webView.isPageLoaded(), tab.lastUrl); if (Theme.isCurrentThemeDark() != tab.themeIsDark) { // webViewContainer.notifyThemeChanged(); @@ -288,6 +307,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC if (settingsItem != null) { settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE); } + setActionBarColor(!tab.overrideActionBarColor ? Theme.getColor(tab.actionBarColorKey < 0 ? Theme.key_windowBackgroundWhite : tab.actionBarColorKey, resourcesProvider) : tab.actionBarColor, tab.overrideActionBarColor, false); return true; } @@ -306,6 +326,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC private BackDrawable backDrawable; private ActionBar actionBar; private Drawable actionBarShadow; + private ActionBarMenuItem optionsItem; private ActionBarMenuSubItem settingsItem; private TLRPC.BotApp currentWebApp; @@ -391,7 +412,9 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC super.requestLayout(); } }; - webViewContainer = new BotWebViewContainer(getContext(), resourcesProvider, getColor(Theme.key_windowBackgroundWhite)) { + swipeContainer.setAllowFullSizeSwipe(true); + swipeContainer.setShouldWaitWebViewScroll(true); + webViewContainer = new BotWebViewContainer(getContext(), resourcesProvider, getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { super.onWebViewCreated(); @@ -406,11 +429,21 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC dismiss(false, callback); } + @Override + public void onCloseToTabs() { + dismiss(true, null); + } + @Override public void onWebAppSetupClosingBehavior(boolean needConfirmation) { BotWebViewAttachedSheet.this.needCloseConfirmation = needConfirmation; } + @Override + public void onWebAppSwipingBehavior(boolean allowSwiping) { + swipeContainer.setAllowSwipes(allowSwiping); + } + @Override public void onSendWebViewData(String data) { if (queryId != 0 || sentWebViewData) { @@ -701,10 +734,12 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC if (springAnimation != null) { float progress = (1f - Math.min(swipeContainer.getTopActionBarOffsetY(), swipeContainer.getTranslationY() - swipeContainer.getTopActionBarOffsetY()) / swipeContainer.getTopActionBarOffsetY()); - float newPos = (progress > 0.5f ? 1 : 0) * 100f; + float newPos = ((actionBarAttached = progress > 0.5f) ? 1 : 0) * 100f; if (springAnimation.getSpring().getFinalPosition() != newPos) { springAnimation.getSpring().setFinalPosition(newPos); springAnimation.start(); + + checkNavBarColor(); } } float offsetY = Math.max(0, swipeContainer.getSwipeOffsetY()); @@ -735,7 +770,9 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC public void attachInternal() { NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didSetNewTheme); - if (fragment.getLayoutContainer() != null) { + if (dialog != null) { + dialog.attach(); + } else if (fragment.getLayoutContainer() != null) { fragment.getLayoutContainer().addView(windowView); } } @@ -745,11 +782,13 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC if (webViewContainer != null) { webViewContainer.destroyWebView(); } - if (fragment.sheetsStack != null) { - fragment.sheetsStack.remove(this); - } - if (windowView != null && windowView.getParent() instanceof ViewGroup) { - ((ViewGroup) windowView.getParent()).removeView(windowView); + if (dialog != null) { + dialog.detach(); + } else { + fragment.removeSheet(this); + if (windowView != null && windowView.getParent() instanceof ViewGroup) { + ((ViewGroup) windowView.getParent()).removeView(windowView); + } } } @@ -815,14 +854,15 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } wasLightStatusBar = lightStatusBar; + View view = dialog != null ? dialog.windowView : windowView; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - int flags = windowView.getSystemUiVisibility(); + int flags = view.getSystemUiVisibility(); if (lightStatusBar) { flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } else { flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } - windowView.setSystemUiVisibility(flags); + view.setSystemUiVisibility(flags); } } @@ -856,7 +896,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC this.defaultFullsize = fullsize; if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } } @@ -871,99 +911,20 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC this.needsContext = needsContext; } - public boolean getFullSize() { + public boolean isFullSize() { return fullsize == null ? defaultFullsize : fullsize; } - public static class WebViewRequestProps { + private BottomSheetTabDialog dialog; - public int currentAccount; - public long peerId; - public long botId; - public String buttonText; - public String buttonUrl; - public @WebViewType int type; - public int replyToMsgId; - public boolean silent; - public TLRPC.BotApp app; - public boolean allowWrite; - public String startParam; - public TLRPC.User botUser; - public int flags; - public boolean compact; - - public TLObject response; - public long responseTime; - - public static WebViewRequestProps of( - int currentAccount, - long peerId, - long botId, - String buttonText, - String buttonUrl, - @WebViewType int type, - int replyToMsgId, - boolean silent, - TLRPC.BotApp app, - boolean allowWrite, - String startParam, - TLRPC.User botUser, - int flags, - boolean compact - ) { - WebViewRequestProps p = new WebViewRequestProps(); - p.currentAccount = currentAccount; - p.peerId = peerId; - p.botId = botId; - p.buttonText = buttonText; - p.buttonUrl = buttonUrl; - p.type = type; - p.replyToMsgId = replyToMsgId; - p.silent = silent; - p.app = app; - p.allowWrite = allowWrite; - p.startParam = startParam; - p.botUser = botUser; - p.flags = flags; - p.compact = compact; - if (!compact && !TextUtils.isEmpty(buttonUrl)) { - try { - Uri uri = Uri.parse(buttonUrl); - p.compact = TextUtils.equals(uri.getQueryParameter("mode"), "compact"); - } catch (Exception e) { - FileLog.e(e); - } - } - return p; - } - - public void applyResponse(TLObject response) { - this.response = response; - this.responseTime = System.currentTimeMillis(); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (!(obj instanceof WebViewRequestProps)) - return false; - final WebViewRequestProps p = (WebViewRequestProps) obj; - return ( - currentAccount == p.currentAccount && - peerId == p.peerId && - botId == p.botId && - TextUtils.equals(buttonUrl, p.buttonUrl) && - type == p.type && - replyToMsgId == p.replyToMsgId && - silent == p.silent && - (app == null ? 0 : app.id) == (p.app == null ? 0 : p.app.id) && - allowWrite == p.allowWrite && - TextUtils.equals(startParam, p.startParam) && - (botUser == null ? 0 : botUser.id) == (p.botUser == null ? 0 : p.botUser.id) && - flags == p.flags - ); - } + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + this.dialog = dialog; + return true; } + Drawable verifiedDrawable; + public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { this.requestProps = props; this.currentAccount = props.currentAccount; @@ -974,13 +935,52 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC this.buttonText = props.buttonText; this.currentWebApp = props.app; - CharSequence title = UserObject.getUserName(MessagesController.getInstance(currentAccount).getUser(botId)); + TLRPC.User userbot = MessagesController.getInstance(currentAccount).getUser(botId); + CharSequence title = UserObject.getUserName(userbot); try { TextPaint tp = new TextPaint(); tp.setTextSize(dp(20)); title = Emoji.replaceEmoji(title, tp.getFontMetricsInt(), false); } catch (Exception ignore) {} actionBar.setTitle(title); + TLRPC.UserFull userInfo = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userbot != null && userbot.verified || userInfo != null && userInfo.user != null && userInfo.user.verified) { + verifiedDrawable = getContext().getResources().getDrawable(R.drawable.verified_profile).mutate(); + verifiedDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_featuredStickers_addButton), PorterDuff.Mode.SRC_IN)); + actionBar.getTitleTextView().setDrawablePadding(dp(2)); + actionBar.getTitleTextView().setRightDrawable(new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + canvas.save(); + canvas.translate(0, dp(1)); + verifiedDrawable.setBounds(getBounds()); + verifiedDrawable.draw(canvas); + canvas.restore(); + } + @Override + public void setAlpha(int alpha) { + verifiedDrawable.setAlpha(alpha); + } + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + verifiedDrawable.setColorFilter(colorFilter); + } + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + + @Override + public int getIntrinsicHeight() { + return dp(20); + } + + @Override + public int getIntrinsicWidth() { + return dp(20); + } + }); + } ActionBarMenu menu = actionBar.createMenu(); menu.removeAllViews(); @@ -993,7 +993,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } menu.addItem(R.id.menu_collapse_bot, R.drawable.arrow_more); - ActionBarMenuItem otherItem = menu.addItem(0, R.drawable.ic_ab_other); + ActionBarMenuItem otherItem = optionsItem = menu.addItem(0, R.drawable.ic_ab_other); otherItem.addSubItem(R.id.menu_open_bot, R.drawable.msg_bot, LocaleController.getString(R.string.BotWebViewOpenBot)); settingsItem = otherItem.addSubItem(R.id.menu_settings, R.drawable.msg_settings, LocaleController.getString(R.string.BotWebViewSettings)); settingsItem.setVisibility(View.GONE); @@ -1001,10 +1001,20 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC if (currentBot != null && MediaDataController.getInstance(currentAccount).canCreateAttachedMenuBotShortcut(currentBot.bot_id)) { otherItem.addSubItem(R.id.menu_add_to_home_screen_bot, R.drawable.msg_home, LocaleController.getString(R.string.AddShortcut)); } + otherItem.addSubItem(R.id.menu_share_bot, R.drawable.msg_share, LocaleController.getString(R.string.BotShare)); otherItem.addSubItem(R.id.menu_tos_bot, R.drawable.menu_intro, LocaleController.getString(R.string.BotWebViewToS)); + otherItem.addSubItem(R.id.menu_privacy, R.drawable.menu_privacy_policy, LocaleController.getString(R.string.BotPrivacyPolicy)); + otherItem.hideSubItem(R.id.menu_privacy); if (currentBot != null && (currentBot.show_in_side_menu || currentBot.show_in_attach_menu)) { otherItem.addSubItem(R.id.menu_delete_bot, R.drawable.msg_delete, LocaleController.getString(R.string.BotWebViewDeleteBot)); } + hasPrivacy(currentAccount, botId, has -> { + if (has) { + otherItem.showSubItem(R.id.menu_privacy); + } else { + otherItem.hideSubItem(R.id.menu_privacy); + } + }); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override @@ -1022,6 +1032,10 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC dismiss(); } else if (id == R.id.menu_tos_bot) { Browser.openUrl(getContext(), LocaleController.getString(R.string.BotWebViewToSLink)); + } else if (id == R.id.menu_privacy) { + if (openPrivacy(currentAccount, botId)) { + dismiss(true); + } } else if (id == R.id.menu_reload_page) { if (webViewContainer.getWebView() != null) { webViewContainer.getWebView().animate().cancel(); @@ -1044,6 +1058,12 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } else if (id == R.id.menu_collapse_bot) { forceExpnaded = true; dismiss(true, null); + } else if (id == R.id.menu_share_bot) { + final TLRPC.User bot = MessagesController.getInstance(currentAccount).getUser(botId); + if (bot == null) return; + final String username = UserObject.getPublicUsername(bot); + final String link = "https://"+MessagesController.getInstance(currentAccount).linkPrefix+"/"+username+"?profile"; + new ShareAlert(getContext(), null, link, false, link, false, AndroidUtilities.computePerceivedBrightness(actionBarColor) > .721f ? null : new DarkThemeResourceProvider()).show(); } } }); @@ -1181,6 +1201,37 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC loadFromResponse(false); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; + } + case TYPE_WEB_VIEW_BOT_MAIN: { + TLRPC.TL_messages_requestMainWebView req = new TLRPC.TL_messages_requestMainWebView(); + + req.platform = "android"; + req.bot = MessagesController.getInstance(currentAccount).getInputUser(props.botId); + req.peer = fragment instanceof ChatActivity ? ((ChatActivity) fragment).getCurrentUser() != null ? MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentUser()) : MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentChat()) + : MessagesController.getInputPeer(props.botUser); + req.compact = props.compact; + + if (!TextUtils.isEmpty(props.startParam)) { + req.start_param = props.startParam; + req.flags |= 2; + } + + if (themeParams != null) { + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = themeParams.toString(); + req.flags |= 1; + } + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response2, error2) -> AndroidUtilities.runOnUIThread(() -> { + if (error2 != null) { + + } else if (requestProps != null) { + requestProps.applyResponse(response2); + loadFromResponse(false); + } + }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; } } } @@ -1206,11 +1257,12 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC url = resultUrl.url; } if (url != null && !fromTab) { + MediaDataController.getInstance(currentAccount).increaseWebappRating(requestProps.botId); webViewContainer.loadUrl(currentAccount, url); } AndroidUtilities.runOnUIThread(pollRunnable, pollTimeout); if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } @@ -1297,7 +1349,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC swipeContainer.setSwipeOffsetAnimationDisallowed(false); } - if (showExpanded || getFullSize()) { + if (showExpanded || isFullSize()) { if (instant) { swipeContainer.setSwipeOffsetY(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()); locker.unlock(); @@ -1373,15 +1425,21 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } @Override - public boolean onBackPressed() { + public boolean isAttachedLightStatusBar() { + if (overrideBackgroundColor) { + return !actionBarIsLight && actionBarAttached; + } else { + int color = Theme.getColor(Theme.key_windowBackgroundWhite, null, true); + return !AndroidUtilities.isTablet() && ColorUtils.calculateLuminance(color) >= 0.721f && actionBarAttached; + } + } + + @Override + public boolean onAttachedBackPressed() { if (webViewContainer.onBackPressed()) { return true; } -// if (can_minimize) { - dismiss(true, null); -// } else { -// onCheckDismissByUser(); -// } + dismiss(true, null); return true; } @@ -1447,7 +1505,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } else { webViewContainer.destroyWebView(); swipeContainer.setFullSize(false); - swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (getFullSize() ? dp(200) : 0), () -> { + swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (isFullSize() ? dp(200) : 0), () -> { release(); if (callback != null) { callback.run(); @@ -1458,6 +1516,8 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } }); } + + checkNavBarColor(); } @Override @@ -1485,7 +1545,9 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } public void checkNavBarColor() { - if (attachedToParent() && LaunchActivity.instance != null) { + if (dialog != null) { + dialog.updateNavigationBarColor(); + } else if (attachedToParent() && LaunchActivity.instance != null) { LaunchActivity.instance.checkSystemBarColors(true, true, true, false); //LaunchActivity.instance.setNavigationBarColor(fragment.getNavigationBarColor(), false); } @@ -1496,7 +1558,7 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC return false; } - public class WindowView extends SizeNotifierFrameLayout implements BaseFragment.AttachedSheetWindow { + public class WindowView extends SizeNotifierFrameLayout implements BaseFragment.AttachedSheetWindow, BottomSheetTabsOverlay.SheetView { public WindowView(Context context) { super(context); setWillNotDraw(false); @@ -1746,6 +1808,16 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC windowView.invalidate(); } updateLightStatusBar(); + + if (optionsItem != null) { + final int backgroundColor = to; + final boolean dark = ColorUtils.calculateLuminance(backgroundColor) < 0.721f; + final int textColor = dark ? Color.WHITE : Color.BLACK; + optionsItem.setPopupItemsSelectorColor(Theme.multAlpha(textColor, dark ? .22f : .12f)); + optionsItem.setPopupItemsColor(Theme.multAlpha(textColor, .55f), true); + optionsItem.setPopupItemsColor(textColor, false); + optionsItem.redrawPopup(backgroundColor); + } } private MainButtonSettings mainButtonSettings; @@ -1797,4 +1869,62 @@ public class BotWebViewAttachedSheet implements NotificationCenter.NotificationC } } + public static void hasPrivacy(int currentAccount, long botId, Utilities.Callback whenDone) { + if (whenDone == null) return; + TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userFull != null) { + whenDone.run(hasPrivacy(userFull)); + return; + } + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(botId); + if (user == null) { + whenDone.run(false); + return; + } + MessagesController.getInstance(currentAccount).loadFullUser(user, 0, true, (userFull2) -> { + whenDone.run(hasPrivacy(userFull2)); + }); + } + + public static boolean hasPrivacy(TLRPC.UserFull userFull) { + if (userFull == null) return false; + if (userFull.bot_info == null) return false; + return true; + } + + public static boolean hasPrivacyCommand(TLRPC.UserFull userFull) { + if (userFull == null) return false; + if (userFull.bot_info == null) return false; + if (userFull.bot_info.privacy_policy_url != null) return true; + for (TLRPC.TL_botCommand command : userFull.bot_info.commands) { + if ("privacy".equals(command.command)) { + return true; + } + } + return false; + } + + public static boolean openPrivacy(int currentAccount, long botId) { + TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userFull == null) return false; + if (userFull.bot_info == null) return false; + String url = userFull.bot_info.privacy_policy_url; + if (url == null && !hasPrivacyCommand(userFull)) { + url = LocaleController.getString(R.string.BotDefaultPrivacyPolicy); + } + if (url != null) { + Browser.openUrl(ApplicationLoader.applicationContext, url); + return false; + } + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return false; + if (!(lastFragment instanceof ChatActivity && ((ChatActivity) lastFragment).getDialogId() == botId)) { + lastFragment.presentFragment(ChatActivity.of(botId)); + } + AndroidUtilities.runOnUIThread(() -> { + SendMessagesHelper.getInstance(currentAccount).sendMessage(SendMessagesHelper.SendMessageParams.of("/privacy", botId, null, null, null, false, null, null, null, true, 0, null, false)); + }, 150); + return true; + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java index 1e77f3413..3c4de5288 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java @@ -8,7 +8,6 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; -import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -16,11 +15,9 @@ import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; -import android.graphics.RenderNode; import android.os.Build; import android.os.Bundle; import android.text.Editable; -import android.util.Log; import android.util.SparseIntArray; import android.view.Gravity; import android.view.MotionEvent; @@ -55,26 +52,28 @@ import org.telegram.ui.ActionBar.ActionBarMenuItem; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.INavigationLayout; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.ChatActivityEnterView; import org.telegram.ui.Components.ChatAvatarContainer; import org.telegram.ui.Components.CubicBezierInterpolator; -import org.telegram.ui.Components.HideViewAfterAnimation; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.SimpleFloatPropertyCompat; import org.telegram.ui.DialogsActivity; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.web.BotWebViewContainer; import java.util.List; import java.util.Locale; import java.util.Objects; -public class BotWebViewMenuContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { +public class BotWebViewMenuContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate, BottomSheetTabsOverlay.Sheet, BottomSheetTabsOverlay.SheetView { private final static int POLL_PERIOD = 60000; private final static SimpleFloatPropertyCompat ACTION_BAR_TRANSITION_PROGRESS_VALUE = new SimpleFloatPropertyCompat("actionBarTransitionProgress", obj -> obj.actionBarTransitionProgress, (obj, value) -> { @@ -163,6 +162,15 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification private int lineColor; private boolean preserving; + public boolean isFullSize() { + return false; + } + + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + return false; + } + public BottomSheetTabs.WebTabData saveState() { preserving = true; BottomSheetTabs.WebTabData tab = new BottomSheetTabs.WebTabData(); @@ -172,7 +180,7 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification tab.overrideActionBarColor = overrideBackgroundColor; tab.backgroundColor = backgroundPaint.getColor(); - tab.props = new BotWebViewAttachedSheet.WebViewRequestProps(); + tab.props = new WebViewRequestProps(); tab.props.currentAccount = currentAccount; tab.props.botId = botId; tab.props.peerId = botId; @@ -194,10 +202,10 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification if (webView != null) { webViewContainer.preserveWebView(); tab.webView = webView; - tab.webViewProxy = webViewContainer == null ? null : webViewContainer.getProxy(); - tab.webViewWidth = webView.getWidth(); - tab.webViewScroll = webView.getScrollY(); - tab.webViewHeight = webView.getHeight(); + tab.proxy = webViewContainer == null ? null : webViewContainer.getBotProxy(); + tab.viewWidth = webView.getWidth(); + tab.viewScroll = webView.getScrollY(); + tab.viewHeight = webView.getHeight(); webView.onPause(); // webView.pauseTimers(); webView.setContainers(null, null); @@ -213,7 +221,7 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification if (tab.webView != null) { // tab.webView.resumeTimers(); tab.webView.onResume(); - webViewContainer.replaceWebView(tab.webView, tab.webViewProxy); + webViewContainer.replaceWebView(tab.webView, tab.proxy); } else { tab.props.response = null; tab.props.responseTime = 0; @@ -268,7 +276,7 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification ActionBar actionBar = chatActivity.getActionBar(); actionBarOnItemClick = actionBar.getActionBarMenuOnItemClick(); - webViewContainer = new BotWebViewContainer(context, parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite)) { + webViewContainer = new BotWebViewContainer(context, parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { swipeContainer.setWebView(webViewContainer.getWebView()); @@ -286,6 +294,11 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification BotWebViewMenuContainer.this.needCloseConfirmation = needConfirmation; } + @Override + public void onWebAppSwipingBehavior(boolean allowSwiping) { + swipeContainer.setAllowSwipes(allowSwiping); + } + @Override public void onWebAppSetActionBarColor(int colorKey, int color, boolean isOverrideColor) { int from = overrideActionBarBackground; @@ -1036,6 +1049,10 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification } } + public void release() { + onDismiss(); + } + /** * Called when menu is fully dismissed */ @@ -1057,7 +1074,7 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification webViewContainer.destroyWebView(); swipeContainer.removeView(webViewContainer); - webViewContainer = new BotWebViewContainer(getContext(), parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite)) { + webViewContainer = new BotWebViewContainer(getContext(), parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { swipeContainer.setWebView(webViewContainer.getWebView()); @@ -1188,15 +1205,16 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification public void updateActionBar(ActionBar actionBar, float progress) { this.progress = progress; actionBar.setTitleColor(getColor(Theme.key_windowBackgroundWhiteBlackText)); + actionBar.setSubtitleColor(Theme.multAlpha(getColor(Theme.key_windowBackgroundWhiteBlackText), .45f)); actionBar.setItemsColor(getColor(Theme.key_windowBackgroundWhiteBlackText), false); if (actionBar.backButtonImageView != null) { actionBar.backButtonImageView.setColorFilter(new PorterDuffColorFilter(getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.SRC_IN)); } actionBar.setItemsBackgroundColor(getColor(Theme.key_actionBarWhiteSelector), false); - actionBar.setPopupBackgroundColor(getColor(Theme.key_actionBarDefaultSubmenuBackground), false); - actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItem), false, false); - actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItemIcon), true, false); - actionBar.setPopupItemsSelectorColor(getColor(Theme.key_dialogButtonSelector), false); +// actionBar.setPopupBackgroundColor(getColor(Theme.key_actionBarDefaultSubmenuBackground), false); +// actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItem), false, false); +// actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItemIcon), true, false); +// actionBar.setPopupItemsSelectorColor(getColor(Theme.key_dialogButtonSelector), false); } } @@ -1209,6 +1227,15 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification } } + public BottomSheetTabsOverlay.SheetView getWindowView() { + return this; + } + + @Override + public void show() { + show(currentAccount, botId, botUrl); + } + @Override protected void dispatchDraw(Canvas canvas) { if (drawingFromOverlay) return; @@ -1218,7 +1245,13 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification private final RectF rect = new RectF(); private final Path clipPath = new Path(); - public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect) { + @Override + public RectF getRect() { + rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); + return rect; + } + + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); AndroidUtilities.lerpCentered(rect, finalRect, progress, clipRect); @@ -1255,4 +1288,10 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification animateBotButton(s.isVisible); } } + + @Override + public int getNavigationBarColor(int color) { + return 0; + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java index 6132a7b38..c799fd1e3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java @@ -13,8 +13,12 @@ import android.content.Context; import android.content.ContextWrapper; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Build; @@ -33,6 +37,7 @@ import android.widget.TextView; import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.math.MathUtils; @@ -66,7 +71,9 @@ import org.telegram.ui.ActionBar.ActionBarMenuItem; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.INavigationLayout; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatActivity; @@ -84,6 +91,7 @@ import org.telegram.ui.DialogsActivity; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.web.BotWebViewContainer; import java.io.File; import java.lang.annotation.Retention; @@ -91,8 +99,8 @@ import java.lang.annotation.RetentionPolicy; import java.util.List; import java.util.Locale; -public class BotWebViewSheet extends Dialog implements NotificationCenter.NotificationCenterDelegate { - public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3; +public class BotWebViewSheet extends Dialog implements NotificationCenter.NotificationCenterDelegate, BottomSheetTabsOverlay.Sheet { + public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3, TYPE_WEB_VIEW_BOT_MAIN = 4; public final static int FLAG_FROM_INLINE_SWITCH = 1; public final static int FLAG_FROM_SIDE_MENU = 2; @@ -131,7 +139,8 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi TYPE_WEB_VIEW_BUTTON, TYPE_SIMPLE_WEB_VIEW_BUTTON, TYPE_BOT_MENU_BUTTON, - TYPE_WEB_VIEW_BOT_APP + TYPE_WEB_VIEW_BOT_APP, + TYPE_WEB_VIEW_BOT_MAIN }) public @interface WebViewType {} @@ -224,7 +233,7 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi }; private int actionBarColorKey = -1; - private BotWebViewAttachedSheet.WebViewRequestProps requestProps; + private WebViewRequestProps requestProps; private boolean backButtonShown; private boolean forceExpnaded; @@ -242,21 +251,22 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi tab.ready = webViewContainer != null && webViewContainer.isPageLoaded(); tab.themeIsDark = Theme.isCurrentThemeDark(); tab.lastUrl = webViewContainer != null ? webViewContainer.getUrlLoaded() : null; - tab.expanded = swipeContainer != null && swipeContainer.getSwipeOffsetY() < 0 || forceExpnaded || getFullSize(); - tab.fullsize = getFullSize(); + tab.expanded = swipeContainer != null && swipeContainer.getSwipeOffsetY() < 0 || forceExpnaded || isFullSize(); + tab.fullsize = isFullSize(); tab.expandedOffset = swipeContainer != null ? swipeContainer.getOffsetY() : Float.MAX_VALUE; tab.needsContext = needsContext; tab.backButton = backButtonShown; tab.main = mainButtonSettings; tab.confirmDismiss = needCloseConfirmation; tab.settings = settingsItem != null && settingsItem.getVisibility() == View.VISIBLE; + tab.allowSwipes = swipeContainer == null || swipeContainer.isAllowedSwipes(); BotWebViewContainer.MyWebView webView = webViewContainer == null ? null : webViewContainer.getWebView(); if (webView != null) { webViewContainer.preserveWebView(); tab.webView = webView; - tab.webViewProxy = webViewContainer == null ? null : webViewContainer.getProxy(); - tab.webViewWidth = webView.getWidth(); - tab.webViewHeight = webView.getHeight(); + tab.proxy = webViewContainer == null ? null : webViewContainer.getBotProxy(); + tab.viewWidth = webView.getWidth(); + tab.viewHeight = webView.getHeight(); webView.onPause(); // webView.pauseTimers(); } @@ -275,6 +285,7 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi showExpanded = tab.expanded; showOffsetY = tab.expandedOffset; webViewContainer.setIsBackButtonVisible(backButtonShown = tab.backButton); + swipeContainer.setAllowSwipes(tab.allowSwipes); AndroidUtilities.updateImageViewImageAnimated(actionBar.getBackButton(), backButtonShown ? R.drawable.ic_ab_back : R.drawable.ic_close_white); needCloseConfirmation = tab.confirmDismiss; fullsize = tab.fullsize; @@ -285,7 +296,7 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi if (tab.webView != null) { // tab.webView.resumeTimers(); tab.webView.onResume(); - webViewContainer.replaceWebView(tab.webView, tab.webViewProxy); + webViewContainer.replaceWebView(tab.webView, tab.proxy); webViewContainer.setState(tab.ready || tab.webView.isPageLoaded(), tab.lastUrl); if (Theme.isCurrentThemeDark() != tab.themeIsDark) { // webViewContainer.notifyThemeChanged(); @@ -359,7 +370,9 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi super.requestLayout(); } }; - webViewContainer = new BotWebViewContainer(context, resourcesProvider, getColor(Theme.key_windowBackgroundWhite)) { + swipeContainer.setAllowFullSizeSwipe(true); + swipeContainer.setShouldWaitWebViewScroll(true); + webViewContainer = new BotWebViewContainer(context, resourcesProvider, getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { super.onWebViewCreated(); @@ -379,6 +392,11 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi BotWebViewSheet.this.needCloseConfirmation = needConfirmation; } + @Override + public void onWebAppSwipingBehavior(boolean allowSwiping) { + swipeContainer.setAllowSwipes(allowSwiping); + } + @Override public void onSendWebViewData(String data) { if (queryId != 0 || sentWebViewData) { @@ -868,7 +886,7 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi this.defaultFullsize = fullsize; if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } } @@ -883,11 +901,18 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi this.needsContext = needsContext; } - public boolean getFullSize() { + public boolean isFullSize() { return fullsize == null ? defaultFullsize : fullsize; } - public void requestWebView(BaseFragment fragment, BotWebViewAttachedSheet.WebViewRequestProps props) { + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + return false; + } + + Drawable verifiedDrawable; + + public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { this.requestProps = props; this.currentAccount = props.currentAccount; this.peerId = props.peerId; @@ -897,13 +922,52 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi this.buttonText = props.buttonText; this.currentWebApp = props.app; - CharSequence title = UserObject.getUserName(MessagesController.getInstance(currentAccount).getUser(botId)); + TLRPC.User userbot = MessagesController.getInstance(currentAccount).getUser(botId); + CharSequence title = UserObject.getUserName(userbot); try { TextPaint tp = new TextPaint(); tp.setTextSize(dp(20)); title = Emoji.replaceEmoji(title, tp.getFontMetricsInt(), false); } catch (Exception ignore) {} actionBar.setTitle(title); + TLRPC.UserFull userInfo = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userbot != null && userbot.verified || userInfo != null && userInfo.user != null && userInfo.user.verified) { + verifiedDrawable = getContext().getResources().getDrawable(R.drawable.verified_profile).mutate(); + verifiedDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_featuredStickers_addButton), PorterDuff.Mode.SRC_IN)); + actionBar.getTitleTextView().setDrawablePadding(dp(2)); + actionBar.getTitleTextView().setRightDrawable(new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + canvas.save(); + canvas.translate(0, dp(1)); + verifiedDrawable.setBounds(getBounds()); + verifiedDrawable.draw(canvas); + canvas.restore(); + } + @Override + public void setAlpha(int alpha) { + verifiedDrawable.setAlpha(alpha); + } + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + verifiedDrawable.setColorFilter(colorFilter); + } + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + + @Override + public int getIntrinsicHeight() { + return dp(20); + } + + @Override + public int getIntrinsicWidth() { + return dp(20); + } + }); + } ActionBarMenu menu = actionBar.createMenu(); menu.removeAllViews(); @@ -1104,6 +1168,37 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi loadFromResponse(false); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; + } + case TYPE_WEB_VIEW_BOT_MAIN: { + TLRPC.TL_messages_requestMainWebView req = new TLRPC.TL_messages_requestMainWebView(); + + req.bot = MessagesController.getInstance(currentAccount).getInputUser(props.botId); + req.platform = "android"; + req.peer = fragment instanceof ChatActivity ? ((ChatActivity) fragment).getCurrentUser() != null ? MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentUser()) : MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentChat()) + : MessagesController.getInputPeer(props.botUser); + req.compact = props.compact; + + if (!TextUtils.isEmpty(props.startParam)) { + req.start_param = props.startParam; + req.flags |= 2; + } + + if (themeParams != null) { + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = themeParams.toString(); + req.flags |= 1; + } + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response2, error2) -> AndroidUtilities.runOnUIThread(() -> { + if (error2 != null) { + + } else if (requestProps != null) { + requestProps.applyResponse(response2); + loadFromResponse(false); + } + }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; } } } @@ -1129,11 +1224,12 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi url = resultUrl.url; } if (url != null && !fromTab) { + MediaDataController.getInstance(currentAccount).increaseWebappRating(requestProps.botId); webViewContainer.loadUrl(currentAccount, url); } AndroidUtilities.runOnUIThread(pollRunnable, pollTimeout); if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } @@ -1213,7 +1309,7 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi swipeContainer.setSwipeOffsetAnimationDisallowed(false); } - if (showExpanded || getFullSize()) { + if (showExpanded || isFullSize()) { swipeContainer.stickTo(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY(), locker::unlock); } else { new SpringAnimation(swipeContainer, ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer.SWIPE_OFFSET_Y, 0) @@ -1230,6 +1326,11 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi super.show(); } + @Override + public void dismiss(boolean tabs) { + dismiss(tabs, null); + } + public long getBotId() { return botId; } @@ -1306,7 +1407,7 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi LaunchActivity.instance.getBottomSheetTabsOverlay().dismissSheet(this); } else { webViewContainer.destroyWebView(); - swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (getFullSize() ? dp(200) : 0), () -> { + swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (isFullSize() ? dp(200) : 0), () -> { super.dismiss(); if (callback != null) { callback.run(); @@ -1430,11 +1531,16 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi } } + @Override + public int getNavigationBarColor(int color) { + return navBarColor; + } + public WindowView getWindowView() { return windowView; } - public class WindowView extends SizeNotifierFrameLayout { + public class WindowView extends SizeNotifierFrameLayout implements BottomSheetTabsOverlay.SheetView { public WindowView(Context context) { super(context); } @@ -1545,8 +1651,11 @@ public class BotWebViewSheet extends Dialog implements NotificationCenter.Notifi private final RectF rect = new RectF(); private final Path clipPath = new Path(); - - public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect) { + public RectF getRect() { + rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); + return rect; + } + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); AndroidUtilities.lerpCentered(rect, finalRect, progress, clipRect); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java index 83e66d215..0596dd524 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java @@ -18,6 +18,7 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RadialProgressView; import org.telegram.ui.Components.SimpleFloatPropertyCompat; +import org.telegram.ui.web.BotWebViewContainer; public class ChatActivityBotWebViewButton extends FrameLayout { public final static SimpleFloatPropertyCompat PROGRESS_PROPERTY = new SimpleFloatPropertyCompat<>("progress", obj -> obj.progress, ChatActivityBotWebViewButton::setProgress) diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java index 0e42f8403..4df5c85cd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java @@ -18,7 +18,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; -import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.TextView; @@ -42,7 +41,6 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.UserObject; -import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; @@ -60,6 +58,7 @@ import org.telegram.ui.Components.ChatAttachAlert; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.SimpleFloatPropertyCompat; +import org.telegram.ui.web.BotWebViewContainer; public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlertLayout implements NotificationCenter.NotificationCenterDelegate { private final static int POLL_PERIOD = 60000; @@ -189,7 +188,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert otherItem.addSubItem(R.id.menu_tos_bot, R.drawable.menu_intro, LocaleController.getString(R.string.BotWebViewToS)); otherItem.addSubItem(R.id.menu_delete_bot, R.drawable.msg_delete, LocaleController.getString(R.string.BotWebViewDeleteBot)); - webViewContainer = new BotWebViewContainer(context, resourcesProvider, getThemedColor(Theme.key_dialogBackground)) { + webViewContainer = new BotWebViewContainer(context, resourcesProvider, getThemedColor(Theme.key_dialogBackground), true) { @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { @@ -254,6 +253,10 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert this.needCloseConfirmation = needCloseConfirmation; } + public void setAllowSwipes(boolean allowSwipes) { + swipeContainer.setAllowSwipes(allowSwipes); + } + @Override public boolean onDismissWithTouchOutside() { onCheckDismissByUser(); @@ -698,11 +701,11 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert public final static SimpleFloatPropertyCompat SWIPE_OFFSET_Y = new SimpleFloatPropertyCompat<>("swipeOffsetY", WebViewSwipeContainer::getSwipeOffsetY, WebViewSwipeContainer::setSwipeOffsetY); private final GestureDetectorCompat gestureDetector; - private boolean isScrolling; + public boolean isScrolling; private boolean isSwipeDisallowed; - private float topActionBarOffsetY = ActionBar.getCurrentActionBarHeight(); - private float offsetY = 0; + public float topActionBarOffsetY = ActionBar.getCurrentActionBarHeight(); + public float offsetY = 0; private float pendingOffsetY = -1; private float pendingSwipeOffsetY = Integer.MIN_VALUE; private float swipeOffsetY; @@ -712,7 +715,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert private boolean flingInProgress; - private WebView webView; + private BotWebViewContainer.MyWebView webView; private Runnable scrollListener; private Runnable scrollEndListener; @@ -739,6 +742,35 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert } } + private boolean allowFullSizeSwipe; + public void setAllowFullSizeSwipe(boolean value) { + allowFullSizeSwipe = value; + } + + private boolean allowSwipes = true; + public void setAllowSwipes(boolean allowSwipes) { + if (this.allowSwipes != allowSwipes) { + this.allowSwipes = allowSwipes; + } + } + public boolean isAllowedSwipes() { + return allowSwipes; + } + + public boolean shouldWaitWebViewScroll; + public boolean allowedScrollX, allowedScrollY; + public void setShouldWaitWebViewScroll(boolean value) { + shouldWaitWebViewScroll = value; + } + public void allowThisScroll(boolean x, boolean y) { + allowedScrollX = x; + allowedScrollY = y; + } + + public boolean allowingScroll(boolean x) { + return webView == null || !webView.injectedJS || (x ? allowedScrollX : allowedScrollY); + } + public WebViewSwipeContainer(@NonNull Context context) { super(context); @@ -746,14 +778,16 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert gestureDetector = new GestureDetectorCompat(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if (isSwipeDisallowed || fullsize) { + if (isSwipeDisallowed || !allowSwipes || fullsize && !allowFullSizeSwipe || (shouldWaitWebViewScroll && !allowingScroll(false))) { return false; } if (velocityY >= 700 && (webView == null || webView.getScrollY() == 0)) { flingInProgress = true; - if (swipeOffsetY >= swipeStickyRange) { - if (delegate != null) { + if (swipeOffsetY >= swipeStickyRange || fullsize) { + if (fullsize && allowFullSizeSwipe && drawnSwipeOffsetY == -offsetY + topActionBarOffsetY) { + stickTo(-offsetY + topActionBarOffsetY); + } else if (delegate != null) { delegate.onDismiss(); } } else { @@ -770,7 +804,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - if (!isScrolling && !isSwipeDisallowed) { + if (!isScrolling && !isSwipeDisallowed && allowSwipes && (!shouldWaitWebViewScroll || swipeOffsetY != -offsetY + topActionBarOffsetY || allowingScroll(false))) { if (isKeyboardVisible.provide(null) && swipeOffsetY == -offsetY + topActionBarOffsetY) { isSwipeDisallowed = true; } else if (Math.abs(distanceY) >= touchSlop && Math.abs(distanceY) * 1.5f >= Math.abs(distanceX) && (swipeOffsetY != -offsetY + topActionBarOffsetY || webView == null || distanceY < 0 && webView.getScrollY() == 0)) { @@ -811,7 +845,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert } swipeOffsetY = MathUtils.clamp(swipeOffsetY, -offsetY + topActionBarOffsetY, getHeight() - offsetY + topActionBarOffsetY); - if (fullsize) { + if (fullsize && !allowFullSizeSwipe) { swipeOffsetY = Math.min(swipeOffsetY, -offsetY + topActionBarOffsetY); } invalidateTranslation(); @@ -824,6 +858,8 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert updateStickyRange(); } + private float drawnSwipeOffsetY; + public void setIsKeyboardVisible(GenericProvider isKeyboardVisible) { this.isKeyboardVisible = isKeyboardVisible; } @@ -860,7 +896,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert this.scrollEndListener = scrollEndListener; } - public void setWebView(WebView webView) { + public void setWebView(BotWebViewContainer.MyWebView webView) { this.webView = webView; } @@ -898,7 +934,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert .addUpdateListener((animation, value, velocity) -> { this.offsetY = value; - float progress = (value - wasOffsetY) / deltaOffsetY; + float progress = deltaOffsetY == 0 ? 1f : (value - wasOffsetY) / deltaOffsetY; if (wasOnTop) { swipeOffsetY = MathUtils.clamp( @@ -937,8 +973,14 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert } } + private void updateDrawn() { + drawnSwipeOffsetY = swipeOffsetY; + } + private void invalidateTranslation() { setTranslationY(Math.max(topActionBarOffsetY, offsetY + swipeOffsetY)); + AndroidUtilities.cancelRunOnUIThread(this::updateDrawn); + AndroidUtilities.runOnUIThread(this::updateDrawn); if (scrollListener != null) { scrollListener.run(); } @@ -965,11 +1007,19 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert this.delegate = delegate; } + public boolean stickToEdges = true; + @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (isScrolling && ev.getActionIndex() != 0) { return false; } + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + if (shouldWaitWebViewScroll) { + allowedScrollX = false; + allowedScrollY = false; + } + } MotionEvent rawEvent = MotionEvent.obtain(ev); int index = ev.getActionIndex(); @@ -986,15 +1036,19 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert isSwipeDisallowed = false; isScrolling = false; - if (fullsize) { + if (fullsize && !allowFullSizeSwipe) { } else if (flingInProgress) { flingInProgress = false; - } else { + } else if (allowSwipes && (!shouldWaitWebViewScroll || swipeOffsetY != -offsetY + topActionBarOffsetY || allowingScroll(false))) { if (swipeOffsetY <= -swipeStickyRange) { - stickTo(-offsetY + topActionBarOffsetY); - } else if (swipeOffsetY > -swipeStickyRange && swipeOffsetY <= swipeStickyRange) { - stickTo(0); + if (stickToEdges) { + stickTo(-offsetY + topActionBarOffsetY); + } + } else if (swipeOffsetY > -swipeStickyRange && swipeOffsetY <= swipeStickyRange && !fullsize) { + if (stickToEdges) { + stickTo(0); + } } else { if (delegate != null) { delegate.onDismiss(); @@ -1007,6 +1061,7 @@ public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlert if (!superTouch && !detector && ev.getAction() == MotionEvent.ACTION_DOWN) { return true; } + return superTouch || detector; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java new file mode 100644 index 000000000..11edd8c71 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java @@ -0,0 +1,101 @@ +package org.telegram.ui.bots; + + +import android.net.Uri; +import android.text.TextUtils; + +import androidx.annotation.Nullable; + +import org.telegram.messenger.FileLog; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; + +public class WebViewRequestProps { + + public int currentAccount; + public long peerId; + public long botId; + public String buttonText; + public String buttonUrl; + public @BotWebViewAttachedSheet.WebViewType int type; + public int replyToMsgId; + public boolean silent; + public TLRPC.BotApp app; + public boolean allowWrite; + public String startParam; + public TLRPC.User botUser; + public int flags; + public boolean compact; + + public TLObject response; + public long responseTime; + + + public static WebViewRequestProps of( + int currentAccount, + long peerId, + long botId, + String buttonText, + String buttonUrl, + @BotWebViewAttachedSheet.WebViewType int type, + int replyToMsgId, + boolean silent, + TLRPC.BotApp app, + boolean allowWrite, + String startParam, + TLRPC.User botUser, + int flags, + boolean compact + ) { + WebViewRequestProps p = new WebViewRequestProps(); + p.currentAccount = currentAccount; + p.peerId = peerId; + p.botId = botId; + p.buttonText = buttonText; + p.buttonUrl = buttonUrl; + p.type = type; + p.replyToMsgId = replyToMsgId; + p.silent = silent; + p.app = app; + p.allowWrite = allowWrite; + p.startParam = startParam; + p.botUser = botUser; + p.flags = flags; + p.compact = compact; + if (!compact && !TextUtils.isEmpty(buttonUrl)) { + try { + Uri uri = Uri.parse(buttonUrl); + p.compact = TextUtils.equals(uri.getQueryParameter("mode"), "compact"); + } catch (Exception e) { + FileLog.e(e); + } + } + return p; + } + + public void applyResponse(TLObject response) { + this.response = response; + this.responseTime = System.currentTimeMillis(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (!(obj instanceof WebViewRequestProps)) + return false; + final WebViewRequestProps p = (WebViewRequestProps) obj; + return ( + currentAccount == p.currentAccount && + peerId == p.peerId && + botId == p.botId && + TextUtils.equals(buttonUrl, p.buttonUrl) && + type == p.type && + replyToMsgId == p.replyToMsgId && + silent == p.silent && + (app == null ? 0 : app.id) == (p.app == null ? 0 : p.app.id) && + allowWrite == p.allowWrite && + TextUtils.equals(startParam, p.startParam) && + (botUser == null ? 0 : botUser.id) == (p.botUser == null ? 0 : p.botUser.id) && + flags == p.flags + ); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java b/TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java new file mode 100644 index 000000000..90b0b3a98 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java @@ -0,0 +1,1156 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.URLSpan; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.ColorUtils; + +import com.google.android.gms.safetynet.SafeBrowsingThreat; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.Emoji; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.ImageLocation; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MediaDataController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.browser.Browser; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.CheckBox2; +import org.telegram.ui.Components.CombinedDrawable; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.ScaleStateListAnimator; +import org.telegram.ui.Components.Text; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalRecyclerView; +import org.telegram.ui.WrappedResourceProvider; + +import java.net.IDN; +import java.net.URLDecoder; +import java.text.BreakIterator; +import java.util.ArrayList; +import java.util.Collections; + +public class AddressBarList extends FrameLayout { + + public static final int MAX_RECENTS = 20; + public final int currentAccount = UserConfig.selectedAccount; + + public final WrappedResourceProvider resourceProvider; + + public boolean hideCurrent; + private final Drawable currentViewBackground; + public final FrameLayout currentContainer; + public final FrameLayout currentView; + public final ImageView currentIconView; + public final Drawable currentCopyBackground; + public final ImageView currentCopyView; + public final LinearLayout currentTextContainer; + public final TextView currentTitleView, currentLinkView; + + public final View space; + + public UniversalRecyclerView listView; + + public final ArrayList suggestions = new ArrayList<>(); + + private final BookmarksList bookmarksList; + + public AddressBarList(Context context) { + super(context); + + setWillNotDraw(false); + + listView = new UniversalRecyclerView(context, UserConfig.selectedAccount, 0, this::fillItems, this::itemClick, null, resourceProvider = new WrappedResourceProvider(null)) { + @Override + public void onScrolled(int dx, int dy) { + super.onScrolled(dx, dy); + if (!canScrollVertically(1) && bookmarksList != null && bookmarksList.attached) { + bookmarksList.load(); + } + } + }; + listView.adapter.setApplyBackground(false); + listView.setOverScrollMode(OVER_SCROLL_NEVER); + listView.setPadding(0, 0, 0, 0); + addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + + currentContainer = new FrameLayout(context); + + currentView = new FrameLayout(context); + currentView.setBackground(currentViewBackground = Theme.createRadSelectorDrawable(grayBackgroundColor, rippleColor, 15, 15)); + ScaleStateListAnimator.apply(currentView, .04f, 1.25f); + currentContainer.addView(currentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL, 12, 0, 12, 15)); + + currentIconView = new ImageView(context); + currentView.addView(currentIconView, LayoutHelper.createFrame(24, 24, Gravity.LEFT | Gravity.CENTER_VERTICAL, 16, 16, 16, 16)); + + currentCopyView = new ImageView(context); + ScaleStateListAnimator.apply(currentCopyView); + currentCopyView.setScaleType(ImageView.ScaleType.CENTER); + currentCopyView.setImageResource(R.drawable.msg_copy); + currentCopyView.setBackground(currentCopyBackground = Theme.createRadSelectorDrawable(0, 0, 6, 6)); + currentView.addView(currentCopyView, LayoutHelper.createFrame(32, 32, Gravity.TOP | Gravity.RIGHT, 14, 14, 14, 14)); + + currentTextContainer = new LinearLayout(context); + currentTextContainer.setOrientation(LinearLayout.VERTICAL); + currentView.addView(currentTextContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 54, 9, 54, 9)); + + currentTitleView = new TextView(context); + currentTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + currentTitleView.setTypeface(AndroidUtilities.bold()); + currentTitleView.setMaxLines(4); + currentTitleView.setEllipsize(TextUtils.TruncateAt.END); + currentTextContainer.addView(currentTitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL | Gravity.TOP, 0, 0, 0, 2)); + + currentLinkView = new TextView(context); + currentLinkView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + currentLinkView.setMaxLines(3); + currentLinkView.setEllipsize(TextUtils.TruncateAt.MIDDLE); + currentTextContainer.addView(currentLinkView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL | Gravity.TOP, 0, 0, 0, 0)); + + bookmarksList = new BookmarksList(currentAccount, () -> listView.adapter.update(true)); + + space = new View(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(6), MeasureSpec.EXACTLY)); + } + }; + + setColors(Theme.getColor(Theme.key_iv_background), AndroidUtilities.computePerceivedBrightness(Theme.getColor(Theme.key_iv_background)) >= .721f ? Color.BLACK : Color.WHITE); + setOpenProgress(0f); + } + + private void clearRecentSearches(View view) { + new AlertDialog.Builder(getContext()) + .setTitle(getString(R.string.WebRecentClearTitle)) + .setMessage(getString(R.string.WebRecentClearText)) + .setPositiveButton(getString(R.string.OK), (di, w) -> { + AddressBarList.clearRecentSearches(getContext()); + listView.adapter.update(true); + }).setNegativeButton(getString(R.string.Cancel), null) + .show(); + } + + public void fillItems(ArrayList items, UniversalAdapter adapter) { + if (!hideCurrent && suggestions.isEmpty()) { + items.add(UItem.asCustom(currentContainer)); + } + + final ArrayList queries = getRecentSearches(getContext()); + final int count = suggestions.size() + queries.size(); + if (!suggestions.isEmpty()) { + items.add(UItem.asCustom(space)); + } + for (int i = 0; i < suggestions.size(); ++i) { + final String query = suggestions.get(i); + final boolean top = i == 0; + final boolean bottom = i == suggestions.size() - 1; + items.add(Address2View.Factory.as(1, query, v -> { + if (onQueryInsertClick != null) { + onQueryInsertClick.run(query); + } + }, top, bottom, this)); + } + if (!queries.isEmpty()) { + items.add(UItem.asGraySection(getString(R.string.WebSectionRecent), getString(R.string.WebRecentClear), this::clearRecentSearches)); + for (int i = 0; i < queries.size(); ++i) { + final String query = queries.get(i); + final boolean top = i == 0 ; + final boolean bottom = i == queries.size() - 1; + items.add(Address2View.Factory.as(0, query, v -> { + if (onQueryInsertClick != null) { + onQueryInsertClick.run(query); + } + }, top, bottom, this)); + } + } + if (bookmarksList != null && !bookmarksList.links.isEmpty()) { + items.add(UItem.asGraySection(getString(R.string.WebSectionBookmarks))); + for (int i = 0; i < bookmarksList.links.size(); ++i) { + final MessageObject msg = bookmarksList.links.get(i); + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + items.add(BookmarkView.Factory.as(msg, true)); + } + if (!bookmarksList.endReached) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + } + } +// items.add(UItem.asCustom(footer)); +// if (clearView != null) { +// clearView.setVisibility(count > 0 && !queries.isEmpty() ? View.VISIBLE : View.GONE); +// } +// if (poweredView != null) { +// poweredView.setVisibility(View.VISIBLE); +// poweredView.setText(formatString(R.string.WebPoweredBy, SearchEngine.getCurrent().name)); +// } + } + + public static String getLink(MessageObject msg) { + String url = null; + if (msg.messageOwner != null && msg.messageOwner.media instanceof TLRPC.TL_messageMediaWebPage) { + url = msg.messageOwner.media.webpage.url; + } else if (msg.messageText != null && msg.messageText.length() > 0) { + SpannableStringBuilder ssb = new SpannableStringBuilder(msg.messageText); + URLSpan[] links = ssb.getSpans(0, ssb.length(), URLSpan.class); + for (int i = 0; i < links.length; ++i) { + String this_url = links[i].getURL(); + if (this_url != null && !(this_url.startsWith("@") || this_url.startsWith("#") || this_url.startsWith("$"))) { + return this_url; + } + } + } + return url; + } + + public void itemClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(Address2View.Factory.class)) { + String query = item.text.toString(); + if (onQueryClick != null) { + onQueryClick.run(query); + } + } else if (item.instanceOf(BookmarkView.Factory.class)) { + if (onURLClick != null) { + try { + onURLClick.run(getLink((MessageObject) item.object2)); + } catch (Exception e) { + FileLog.e(e); + } + } + } + } + + private int backgroundColor, listBackgroundColor, grayBackgroundColor, textColor, rippleColor; + + @Override + protected void dispatchDraw(Canvas canvas) { + canvas.save(); + canvas.clipRect(0, 0, getWidth(), getHeight() * openProgress); + canvas.drawColor(listBackgroundColor); + super.dispatchDraw(canvas); + canvas.restore(); + } + + private float openProgress = 0f; + public void setOpenProgress(float progress) { + if (Math.abs(openProgress - progress) > 0.0001f) { + this.openProgress = progress; +// for (int i = 0; i < listView.getChildCount(); ++i) { +// View child = listView.getChildAt(i); +// final float alpha = AndroidUtilities.cascade(openProgress, i, listView.getChildCount(), 3); +// child.setAlpha(alpha); +// child.setTranslationY(-dp(Math.min(48, 8 + 6 * i)) * (1 - alpha)); +// } + invalidate(); + } + } + + public boolean opened; + public void setOpened(boolean value) { + if (opened = value && bookmarksList != null) { + bookmarksList.attach(); + } + } + + private float[] hsv = new float[3]; + + public void setColors(int backgroundColor, int textColor) { + if (this.backgroundColor != backgroundColor) { + this.backgroundColor = backgroundColor; + invalidate(); + } + this.textColor = textColor; + + final float dark = AndroidUtilities.computePerceivedBrightness(backgroundColor) >= .721f ? 0f : 1f; + grayBackgroundColor = ColorUtils.blendARGB(backgroundColor, textColor, lerp(.05f, .12f, dark)); + listBackgroundColor = backgroundColor; + rippleColor = ColorUtils.blendARGB(backgroundColor, textColor, lerp(.12f, .22f, dark)); + + Theme.setSelectorDrawableColor(currentViewBackground, grayBackgroundColor, false); + Theme.setSelectorDrawableColor(currentViewBackground, rippleColor, true); + currentView.invalidate(); + currentTitleView.setTextColor(textColor); + currentLinkView.setTextColor(Theme.multAlpha(textColor, .6f)); + if (currentIconView.getColorFilter() != null) { + currentIconView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + } + currentCopyView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + Theme.setSelectorDrawableColor(currentCopyBackground, Theme.multAlpha(rippleColor, 1.5f), true); + + final int greySectionBackground = Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, 0.05f)); + final int greySectionText = Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, 0.55f)); + resourceProvider.sparseIntArray.put(Theme.key_windowBackgroundWhite, listBackgroundColor); + resourceProvider.sparseIntArray.put(Theme.key_windowBackgroundWhiteBlackText, textColor); + resourceProvider.sparseIntArray.put(Theme.key_graySection, greySectionBackground); + resourceProvider.sparseIntArray.put(Theme.key_graySectionText, greySectionText); + resourceProvider.sparseIntArray.put(Theme.key_actionBarDefaultSubmenuBackground, Theme.multAlpha(textColor, .2f)); + resourceProvider.sparseIntArray.put(Theme.key_listSelector, Theme.multAlpha(textColor, lerp(0.05f, 0.12f, dark))); + listView.invalidateViews(); + } + + private Runnable onCurrentClick; + private Utilities.Callback onQueryClick; + private Utilities.Callback onQueryInsertClick; + private Utilities.Callback onURLClick; + + public void setCurrent( + Bitmap favicon, + String title, + String url, + Runnable onCurrentClick, + Utilities.Callback onQueryClick, + Utilities.Callback onQueryInsertClick, + Utilities.Callback onURLClick, + View.OnClickListener onCopyClick + ) { + if (favicon == null) { + currentIconView.setImageResource(R.drawable.msg_language); + currentIconView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + } else { + currentIconView.setImageDrawable(new BitmapDrawable(getContext().getResources(), favicon)); + currentIconView.setColorFilter(null); + } + currentTitleView.setText(Emoji.replaceEmoji(title, currentTitleView.getPaint().getFontMetricsInt(), false)); + + String formattedUrl = url; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + currentLinkView.setText(Emoji.replaceEmoji(formattedUrl, currentLinkView.getPaint().getFontMetricsInt(), false)); + + this.onCurrentClick = onCurrentClick; + this.onQueryClick = onQueryClick; + this.onQueryInsertClick = onQueryInsertClick; + this.onURLClick = onURLClick; + currentView.setOnClickListener(v -> { + hideCurrent = true; + if (onCurrentClick != null) { + onCurrentClick.run(); + } + listView.adapter.update(true); + }); + currentCopyView.setOnClickListener(onCopyClick); + + hideCurrent = false; + setInput(null); + listView.adapter.update(true); + listView.scrollToPosition(0); + } + + private AsyncTask lastTask; + public void setInput(String input) { + if (lastTask != null) { + lastTask.cancel(true); + lastTask = null; + } + + final boolean hadSuggestions = !suggestions.isEmpty(); + + if (TextUtils.isEmpty(input)) { + suggestions.clear(); + listView.adapter.update(true); + if (hadSuggestions != !suggestions.isEmpty()) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + return; + } + + lastTask = new HttpGetTask(result -> AndroidUtilities.runOnUIThread(() -> { + suggestions.clear(); + suggestions.addAll(SearchEngine.getCurrent().extractSuggestions(result)); + listView.adapter.update(true); + if (hadSuggestions != !suggestions.isEmpty()) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + })).execute(SearchEngine.getCurrent().getAutocompleteURL(input)); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (openProgress < .3f) { + return false; + } + return super.dispatchTouchEvent(ev); + } + +// public static class AddressView extends FrameLayout { +// +// public final ImageView iconView; +// public final BackupImageView iconView2; +// public final TextView textView; +// public final ImageView insertView; +// +// public AddressView(Context context) { +// super(context); +// +// ScaleStateListAnimator.apply(this, .04f, 1.25f); +// +// iconView = new ImageView(context); +// iconView.setScaleType(ImageView.ScaleType.CENTER); +// iconView.setImageResource(R.drawable.msg_clear_recent); +// addView(iconView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); +// +// iconView2 = new BackupImageView(context); +// iconView2.setVisibility(View.GONE); +// addView(iconView2, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); +// +// textView = new TextView(context); +// textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); +// addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 59, 8, 54, 8)); +// +// insertView = new ImageView(context); +// insertView.setScaleType(ImageView.ScaleType.CENTER); +// insertView.setImageResource(R.drawable.menu_browser_arrowup); +// addView(insertView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 8, 8, 8)); +// } +// +// public void setTopBottom(int grayBackgroundColor, int rippleColor, boolean top, boolean bottom) { +// setBackground(Theme.createRadSelectorDrawable(grayBackgroundColor, rippleColor, top ? 15 : 1, bottom ? 15 : 1)); +// } +// +// public void setColors(int backgroundColor, int textColor) { +// textView.setTextColor(textColor); +// iconView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); +// insertView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); +// insertView.setBackground(Theme.createRadSelectorDrawable(0, Theme.multAlpha(textColor, .15f), dp(4), dp(4))); +// } +// +// public void set(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent, boolean divider) { +// iconView.setVisibility(View.VISIBLE); +// iconView2.setVisibility(View.GONE); +// setColors(parent.listBackgroundColor, parent.textColor); +// iconView.setImageResource(type == 0 ? R.drawable.msg_clear_recent : R.drawable.msg_search); +// textView.setText(query); +// insertView.setOnClickListener(onInsertClick); +// setTopBottom(parent.grayBackgroundColor, parent.rippleColor, top, bottom); +// dividerPaint.setColor(parent.listBackgroundColor); +// setWillNotDraw(!(needDivider = divider)); +// } +// +// private final Paint dividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); +// private boolean needDivider; +// +// @Override +// protected void onDraw(Canvas canvas) { +// super.onDraw(canvas); +// if (needDivider) { +// canvas.drawRect(dp(59), getHeight() - Math.max(dp(.66f), 1), getWidth(), getHeight(), dividerPaint); +// } +// } +// +// @Override +// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), heightMeasureSpec); +// } +// +// public static class Factory extends UItem.UItemFactory { +// @Override +// public AddressView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { +// return new AddressView(context); +// } +// +// @Override +// public void bindView(View view, UItem item, boolean divider) { +// ((AddressView) view).set(item.intValue, item.text.toString(), item.clickCallback, item.accent, item.red, (AddressBarList) item.object, divider); +// } +// +// public static UItem as(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent) { +// UItem item = UItem.ofFactory(AddressView.Factory.class); +// item.intValue = type; +// item.text = query; +// item.clickCallback = onInsertClick; +// item.accent = top; +// item.red = bottom; +// item.object = parent; +// return item; +// } +// } +// +// } + + + public static class Address2View extends FrameLayout { + + public final ImageView iconView; + public final TextView textView; + public final ImageView insertView; + + public Address2View(Context context) { + super(context); + +// ScaleStateListAnimator.apply(this, .04f, 1.25f); + + iconView = new ImageView(context); + iconView.setScaleType(ImageView.ScaleType.CENTER); + iconView.setImageResource(R.drawable.menu_clear_recent); + addView(iconView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 64, 8, 64, 8)); + + insertView = new ImageView(context); + insertView.setScaleType(ImageView.ScaleType.CENTER); + insertView.setImageResource(R.drawable.menu_browser_arrowup); + addView(insertView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 8, 10, 8)); + } + + public void setTopBottom(int grayBackgroundColor, int rippleColor, boolean top, boolean bottom) { +// setBackground(Theme.createRadSelectorDrawable(grayBackgroundColor, rippleColor, top ? 15 : 1, bottom ? 15 : 1)); + } + + public void setColors(int backgroundColor, int textColor) { + textView.setTextColor(textColor); + iconView.setColorFilter(new PorterDuffColorFilter(Theme.multAlpha(textColor, .6f), PorterDuff.Mode.SRC_IN)); + insertView.setColorFilter(new PorterDuffColorFilter(Theme.multAlpha(textColor, .6f), PorterDuff.Mode.SRC_IN)); + insertView.setBackground(Theme.createRadSelectorDrawable(0, Theme.multAlpha(textColor, .15f), dp(4), dp(4))); + } + + public void set(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent, boolean divider) { + iconView.setVisibility(View.VISIBLE); + setColors(parent.listBackgroundColor, parent.textColor); + iconView.setImageResource(type == 0 ? R.drawable.msg_clear_recent : R.drawable.msg_search); + textView.setText(query); + insertView.setOnClickListener(onInsertClick); + setTopBottom(parent.grayBackgroundColor, parent.rippleColor, top, bottom); + dividerPaint.setColor(Theme.multAlpha(parent.textColor, .1f)); + setWillNotDraw(!(needDivider = divider)); + } + + public void setAsShowMore(AddressBarList parent) { + iconView.setImageResource(R.drawable.arrow_more); + iconView.setColorFilter(new PorterDuffColorFilter(parent.textColor, PorterDuff.Mode.SRC_IN)); + } + + private final Paint dividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private boolean needDivider; + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(dp(64), getHeight() - Math.max(dp(.66f), 1), getWidth(), getHeight(), dividerPaint); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), heightMeasureSpec); + } + + public static class Factory extends UItem.UItemFactory { + @Override + public Address2View createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new Address2View(context); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + Address2View cell = (Address2View) view; + if (item.object == null) { + cell.setAsShowMore((AddressBarList) item.object2); + } else { + cell.set(item.intValue, item.text.toString(), item.clickCallback, item.accent, item.red, (AddressBarList) item.object2, divider); + } + } + + public static UItem as(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent) { + UItem item = UItem.ofFactory(Address2View.Factory.class); + item.intValue = type; + item.text = query; + item.clickCallback = onInsertClick; + item.accent = top; + item.red = bottom; + item.object = true; + item.object2 = parent; + return item; + } + + public static UItem asMore() { + UItem item = UItem.ofFactory(Address2View.Factory.class); + item.object = null; + return item; + } + } + + } + + + public static class BookmarkView extends FrameLayout implements Theme.Colorable { + + private final Theme.ResourcesProvider resourcesProvider; + + public final BackupImageView iconView; + public final LinearLayout textLayout; + public final FrameLayout.LayoutParams textLayoutParams; + public final TextView textView, subtextView, timeView; + public final ImageView insertView; + + public final CheckBox2 checkBox; + + public BookmarkView(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + + this.resourcesProvider = resourcesProvider; + ScaleStateListAnimator.apply(this, .03f, 1.25f); + + iconView = new BackupImageView(context); + iconView.setRoundRadius(dp(6)); + addView(iconView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); + + textLayout = new LinearLayout(context); + textLayout.setOrientation(LinearLayout.VERTICAL); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + textView.setMaxLines(1); + textView.setEllipsize(TextUtils.TruncateAt.END); + textLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT)); + + subtextView = new TextView(context); + subtextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtextView.setMaxLines(1); + subtextView.setEllipsize(TextUtils.TruncateAt.END); + textLayout.addView(subtextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 0, 3, 0, 0)); + + addView(textLayout, textLayoutParams = LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 64, 0, 70, 0)); + + timeView = new TextView(context); + timeView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + timeView.setMaxLines(1); + timeView.setEllipsize(TextUtils.TruncateAt.END); + timeView.setGravity(Gravity.RIGHT); + timeView.setTextAlignment(TEXT_ALIGNMENT_VIEW_END); + addView(timeView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 64, -10, 12, 0)); + + insertView = new ImageView(context); + insertView.setScaleType(ImageView.ScaleType.CENTER); + insertView.setImageResource(R.drawable.attach_arrow_right); + addView(insertView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 8, 8, 8)); + + checkBox = new CheckBox2(getContext(), 21, resourcesProvider) { + @Override + public void invalidate() { + super.invalidate(); + BookmarkView.this.invalidate(); + } + }; + checkBox.setColor(-1, Theme.key_windowBackgroundWhite, Theme.key_checkboxCheck); + checkBox.setDrawUnchecked(false); + checkBox.setDrawBackgroundAsArc(3); + addView(checkBox, LayoutHelper.createFrame(24, 24, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10 + 16, 12, 0, 0)); + } + + @Override + public void updateColors() { + final int backgroundColor = Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider); + final int textColor = Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider); + + setColors(backgroundColor, textColor); + dividerPaint.setColor(Theme.multAlpha(textColor, .1f)); + iconView.invalidate(); + } + + private int textColor; + public void setColors(int backgroundColor, int textColor) { + this.textColor = textColor; + textView.setTextColor(textColor); + subtextView.setTextColor(Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, .55f))); + timeView.setTextColor(Theme.multAlpha(textColor, .55f)); + insertView.setColorFilter(new PorterDuffColorFilter(Theme.multAlpha(textColor, .6f), PorterDuff.Mode.SRC_IN)); + } + + public void set(MessageObject messageObject, boolean withArrow, String query, boolean checked, boolean divider) { + updateColors(); + TLRPC.WebPage webPage = MessageObject.getMedia(messageObject) != null ? MessageObject.getMedia(messageObject).webpage : null; + final String url = webPage != null ? webPage.url : getLink(messageObject); + final String domain = AndroidUtilities.getHostAuthority(url, true); + final WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + if (webPage != null && webPage.title != null) { + textView.setText(webPage.title); + } else if (webPage != null && webPage.site_name != null) { + textView.setText(webPage.site_name); + } else if (meta != null && !TextUtils.isEmpty(meta.title)) { + textView.setText(meta.title); + } else if (meta != null && !TextUtils.isEmpty(meta.sitename)) { + textView.setText(meta.sitename); + } else { + try { + String[] segments = Uri.parse(url).getHost().split("\\."); + String host = segments[segments.length - 2]; + textView.setText(host.substring(0, 1).toUpperCase() + host.substring(1)); + } catch (Exception e) { + textView.setText(""); + } + } + iconView.clearImage(); + if (meta != null && meta.favicon != null) { + iconView.setImageBitmap(meta.favicon); + } else if (webPage != null && webPage.photo != null) { + iconView.setImage( + ImageLocation.getForPhoto(FileLoader.getClosestPhotoSizeWithSize(webPage.photo.sizes, dp(32), true, null, true), webPage.photo), dp(32)+"_"+dp(32), + ImageLocation.getForPhoto(FileLoader.getClosestPhotoSizeWithSize(webPage.photo.sizes, dp(32), true, null, false), webPage.photo), dp(32)+"_"+dp(32), 0, messageObject); + } else { + final String s = textView.getText() == null ? "" : textView.getText().toString(); + final BreakIterator bi = BreakIterator.getCharacterInstance(); + bi.setText(s); + final String firstLetter = s.isEmpty() ? "" : s.substring(bi.first(), bi.next()); + CombinedDrawable drawable = new CombinedDrawable( + Theme.createRoundRectDrawable(dp(6), Theme.multAlpha(textColor, .1f)), + new Drawable() { + private final Text text = new Text(firstLetter, 14, AndroidUtilities.bold()); + @Override + public void draw(@NonNull Canvas canvas) { + text.draw(canvas, getBounds().centerX() - text.getCurrentWidth() / 2f, getBounds().centerY(), textColor, 1f); + } + @Override + public void setAlpha(int alpha) {} + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) {} + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + } + ); + drawable.setCustomSize(dp(28), dp(28)); + iconView.setImageDrawable(drawable); + } + timeView.setVisibility(View.GONE); + insertView.setVisibility(withArrow ? View.VISIBLE : View.GONE); + final String link = webPage != null ? webPage.url : getLink(messageObject); + String formattedUrl = link; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + formattedUrl = BottomSheetTabs.urlWithoutFragment(formattedUrl); + } catch (Exception e) { + FileLog.e(e); + } + subtextView.setText(formattedUrl); + if (!TextUtils.isEmpty(query)) { + textView.setText(AndroidUtilities.highlightText(textView.getText(), query, resourcesProvider)); + subtextView.setText(AndroidUtilities.highlightText(subtextView.getText(), query, resourcesProvider)); + } + textView.setText(Emoji.replaceEmoji(textView.getText(), textView.getPaint().getFontMetricsInt(), false)); + subtextView.setText(Emoji.replaceEmoji(subtextView.getText(), subtextView.getPaint().getFontMetricsInt(), false)); + checkBox.setChecked(checked, false); + textLayoutParams.rightMargin = dp(52); + textLayout.setLayoutParams(textLayoutParams); + setWillNotDraw(!(needDivider = divider)); + } + + + public void set(BrowserHistory.Entry entry, String query, boolean divider) { + updateColors(); + if (entry == null) return; + final String url = entry.url; + final WebMetadataCache.WebMetadata meta = entry.meta; + if (meta != null && !TextUtils.isEmpty(meta.title)) { + textView.setText(meta.title); + } else if (meta != null && !TextUtils.isEmpty(meta.sitename)) { + textView.setText(meta.sitename); + } else { + try { + String[] segments = Uri.parse(url).getHost().split("\\."); + String host = segments[segments.length - 2]; + textView.setText(host.substring(0, 1).toUpperCase() + host.substring(1)); + } catch (Exception e) { + textView.setText(""); + } + } + if (meta != null && meta.favicon != null) { + iconView.setImageBitmap(meta.favicon); + } else { + final String s = textView.getText() == null ? "" : textView.getText().toString(); + final BreakIterator bi = BreakIterator.getCharacterInstance(); + bi.setText(s); + final String firstLetter = s.isEmpty() ? "" : s.substring(bi.first(), bi.next()); + CombinedDrawable drawable = new CombinedDrawable( + Theme.createRoundRectDrawable(dp(6), Theme.multAlpha(textColor, .1f)), + new Drawable() { + private final Text text = new Text(firstLetter, 14, AndroidUtilities.bold()); + @Override + public void draw(@NonNull Canvas canvas) { + text.draw(canvas, getBounds().centerX() - text.getCurrentWidth() / 2f, getBounds().centerY(), textColor, 1f); + } + @Override + public void setAlpha(int alpha) {} + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) {} + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + } + ); + drawable.setCustomSize(dp(28), dp(28)); + iconView.setImageDrawable(drawable); + } + insertView.setVisibility(View.GONE); + String formattedUrl = url; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + subtextView.setText(formattedUrl); + if (!TextUtils.isEmpty(query)) { + textView.setText(AndroidUtilities.highlightText(textView.getText(), query, resourcesProvider)); + subtextView.setText(AndroidUtilities.highlightText(subtextView.getText(), query, resourcesProvider)); + } + textView.setText(Emoji.replaceEmoji(textView.getText(), textView.getPaint().getFontMetricsInt(), false)); + subtextView.setText(Emoji.replaceEmoji(subtextView.getText(), subtextView.getPaint().getFontMetricsInt(), false)); + timeView.setText(LocaleController.getInstance().getFormatterDay().format(entry.time)); + checkBox.setChecked(false, false); + textLayoutParams.rightMargin = dp(70); + textLayout.setLayoutParams(textLayoutParams); + setWillNotDraw(!(needDivider = divider)); + } + + public void setChecked(boolean checked) { + checkBox.setChecked(checked, true); + } + + private final Paint dividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private boolean needDivider; + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(dp(59), getHeight() - Math.max(dp(.66f), 1), getWidth(), getHeight(), dividerPaint); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(56), MeasureSpec.EXACTLY) + ); + } + + public static class Factory extends UItem.UItemFactory { + @Override + public BookmarkView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new BookmarkView(context, resourcesProvider); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + BookmarkView cell = (BookmarkView) view; + if (item.object2 instanceof MessageObject) { + cell.set((MessageObject) (item.object2), item.accent, item.subtext == null ? null : item.subtext.toString(), item.checked, divider); + } else if (item.object2 instanceof BrowserHistory.Entry) { + cell.set((BrowserHistory.Entry) (item.object2), item.subtext == null ? null : item.subtext.toString(), divider); + } + } + + public static UItem as(int type, String query, boolean withArrow) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = type; + item.accent = withArrow; + item.subtext = query; + return item; + } + + public static UItem as(MessageObject msg, boolean withArrow) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = 3; + item.accent = withArrow; + item.object2 = msg; + return item; + } + + public static UItem as(MessageObject msg, boolean withArrow, String query) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = 3; + item.accent = withArrow; + item.object2 = msg; + item.subtext = query; + return item; + } + + public static UItem as(BrowserHistory.Entry historyEntry, String query) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = 3; + item.accent = false; + item.object2 = historyEntry; + item.subtext = query; + return item; + } + + + @Override + public boolean equals(UItem a, UItem b) { + return a.object2 == b.object2 && TextUtils.isEmpty(a.subtext) == TextUtils.isEmpty(b.subtext); + } + + @Override + public boolean contentsEquals(UItem a, UItem b) { + return a.object2 == b.object2 && TextUtils.equals(a.subtext, b.subtext); + } + } + + } + + private static class QueryEntry { + public final String query; + public long lastUsage; + public double rank; + public QueryEntry(String query, long time) { + this.query = query; + this.lastUsage = time; + } + } + + public static ArrayList getRecentSearches(Context context) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + final ArrayList queries = new ArrayList<>(); + final String json = pref.getString("queries_json", null); + if (json != null) { + try { + final ArrayList entries = new ArrayList<>(); + final JSONArray arr = new JSONArray(json); + for (int i = 0; i < arr.length(); ++i) { + final JSONObject obj = arr.getJSONObject(i); + final QueryEntry entry = new QueryEntry( + obj.optString("name"), + obj.optLong("usage", System.currentTimeMillis()) + ); + entry.rank = obj.optDouble("rank", 0.0); + entries.add(entry); + } + Collections.sort(entries, (a, b) -> (int) (b.rank - a.rank)); + for (QueryEntry e : entries) { + if (queries.size() >= MAX_RECENTS) break; + queries.add(e.query); + } + } catch (Exception e) {} + } + return queries; + } + + public static void pushRecentSearch(Context context, String query) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + final String json = pref.getString("queries_json", null); + final ArrayList entries = new ArrayList<>(); + if (json != null) { + try { + final JSONArray arr = new JSONArray(json); + for (int i = 0; i < arr.length(); ++i) { + final JSONObject obj = arr.getJSONObject(i); + final QueryEntry entry = new QueryEntry( + obj.optString("name"), + obj.optLong("usage", System.currentTimeMillis()) + ); + entry.rank = obj.optDouble("rank", 0.0); + entries.add(entry); + } + Collections.sort(entries, (a, b) -> (int) (b.rank - a.rank)); + } catch (Exception e) { + FileLog.e(e); + } + } + try { + QueryEntry entry = null; + for (int j = 0; j < entries.size(); ++j) { + QueryEntry e = entries.get(j); + if (TextUtils.equals(e.query, query)) { + entry = e; + break; + } + } + final long now = System.currentTimeMillis(); + if (entry != null) { + entry.rank += Math.exp((now - entry.lastUsage) / 2419200.0); + } else { + entry = new QueryEntry(query, now); + entries.add(entry); + } + entry.lastUsage = now; + + JSONArray finalArray = new JSONArray(); + for (int i = 0; i < Math.min(entries.size(), MAX_RECENTS); ++i) { + QueryEntry e = entries.get(i); + JSONObject obj = new JSONObject(); + obj.put("name", e.query); + obj.put("rank", e.rank); + obj.put("usage", e.lastUsage); + finalArray.put(obj); + } + pref.edit().putString("queries_json", finalArray.toString()).apply(); + } catch (Exception e) { + FileLog.e(e); + } + } + + public static void clearRecentSearches(Context context) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + pref.edit().remove("queries_json").apply(); + } + + public static class BookmarksList implements NotificationCenter.NotificationCenterDelegate { + + public final ArrayList links = new ArrayList(); + + private final int currentAccount; + private final Runnable whenUpdated; + private final String query; + private int guid = ConnectionsManager.generateClassGuid(); + + public BookmarksList(int currentAccount, Runnable whenUpdated) { + this(currentAccount, null, whenUpdated); + } + + public BookmarksList(int currentAccount, String query, Runnable whenUpdated) { + this.currentAccount = currentAccount; + this.query = query; + this.whenUpdated = whenUpdated; + } + + public boolean endReached; + private boolean attached; + public void attach() { + if (attached) return; + attached = true; + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.mediaDidLoad); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.bookmarkAdded); + if (TextUtils.isEmpty(query)) { + load(); + } + } + + public void detach() { + if (!attached) return; + attached = false; + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.mediaDidLoad); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.bookmarkAdded); + ConnectionsManager.getInstance(currentAccount).cancelRequestsForGuid(guid); + loading = false; + } + + public void delete(ArrayList ids) { + for (int i = 0; i < links.size(); ++i) { + if (ids.contains(links.get(i).getId())) { + links.remove(i); + i--; + } + } + } + + private boolean loading; + public void load() { + if (loading || endReached) return; + loading = true; + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + int min_id = Integer.MAX_VALUE; + for (int i = 0; i < links.size(); ++i) { + min_id = Math.min(min_id, links.get(i).getId()); + } + MediaDataController.getInstance(currentAccount).loadMedia(selfId, links.isEmpty() ? 30 : 50, min_id == Integer.MAX_VALUE ? 0 : min_id, 0, MediaDataController.MEDIA_URL, 0, 1, guid, 0, null, query); + } + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.mediaDidLoad) { + int guid = (Integer) args[3]; + if (guid == this.guid) { + loading = false; + final ArrayList msgs = (ArrayList) args[2]; + endReached = ((Boolean) args[5]); + links.addAll(msgs); + whenUpdated.run(); + } + } else if (id == NotificationCenter.bookmarkAdded) { + MessageObject msg = (MessageObject) args[0]; + links.add(0, msg); + } + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (bookmarksList != null && opened) { + bookmarksList.attach(); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (bookmarksList != null) { + bookmarksList.detach(); + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java new file mode 100644 index 000000000..c496befc1 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java @@ -0,0 +1,436 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; +import static org.telegram.ui.web.AddressBarList.getLink; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.FrameLayout; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.exoplayer2.util.Util; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarMenu; +import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarMenuSubItem; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.NumberTextView; +import org.telegram.ui.Components.StickerEmptyView; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalFragment; +import org.telegram.ui.LaunchActivity; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +public class BookmarksFragment extends UniversalFragment { + + private static HashMap cachedLists; + public AddressBarList.BookmarksList list = new AddressBarList.BookmarksList(currentAccount, this::updateWithOffset); + public AddressBarList.BookmarksList searchList; + + private final Runnable closeToTabs; + private final Utilities.Callback whenClicked; + + private ActionBarMenuItem searchItem; + private ActionBarMenuItem gotoItem; + private String query; + + private NumberTextView selectedCount; + public HashSet selected = new HashSet<>(); + + public boolean isSelected(MessageObject msg) { + return msg != null && selected.contains(msg.getId()); + } + + public void setSelected(MessageObject msg, boolean select) { + if (msg == null) return; + if (select) { + selected.add(msg.getId()); + } else { + selected.remove(msg.getId()); + } + } + + public void deleteSelectedMessages() { + final HashSet selectedLinks = new HashSet<>(); + final ArrayList messageObjects = new ArrayList(); + final HashSet ids = new HashSet<>(); + for (int id : selected) { + MessageObject msg = null; + for (MessageObject m : list.links) { + if (m != null && m.getId() == id) { + msg = m; + break; + } + } + if (searchList != null && msg == null) { + for (MessageObject m : searchList.links) { + if (m != null && m.getId() == id) { + msg = m; + break; + } + } + } + if (msg != null) { + messageObjects.add(msg); + ids.add(msg.getId()); + selectedLinks.add(getLink(msg)); + } + } +// for (String link : selectedLinks) { +// for (MessageObject m : list.links) { +// if (m != null && !selected.contains(m.getId()) && TextUtils.equals(getLink(m), link)) { +// messageObjects.add(m); +// ids.add(m.getId()); +// } +// } +// if (searchList != null) { +// for (MessageObject m : searchList.links) { +// if (m != null && !selected.contains(m.getId()) && TextUtils.equals(getLink(m), link)) { +// messageObjects.add(m); +// ids.add(m.getId()); +// } +// } +// } +// } + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(formatPluralString("DeleteOptionsTitle", ids.size())) + .setMessage(getString(ids.size() == 1 ? "AreYouSureUnsaveSingleMessage" : "AreYouSureUnsaveFewMessages")) + .setPositiveButton(getString(R.string.Delete), (di, w) -> { + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + MessagesController.getInstance(currentAccount).deleteMessages(new ArrayList<>(ids), null, null, selfId, 0, true, 0); + list.delete(new ArrayList<>(ids)); + if (searchList != null) { + searchList.delete(new ArrayList<>(ids)); + } + selected.clear(); + actionBar.hideActionMode(); + listView.adapter.update(true); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } + + public void gotoMessage() { + if (selected.size() != 1) return; + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + final int id = selected.iterator().next(); + finishFragment(); + if (closeToTabs != null) { + closeToTabs.run(); + } + AndroidUtilities.runOnUIThread(() -> { + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + fragment.presentFragment(ChatActivity.of(selfId, id)); + } + }, 80); + } + + public BookmarksFragment(Runnable closeToTabs, Utilities.Callback whenClicked) { + super(); + this.closeToTabs = closeToTabs; + this.whenClicked = whenClicked; + } + + @Override + public View createView(Context context) { + fragmentView = super.createView(context); + + actionBar.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + actionBar.setActionModeColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setTitleColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + actionBar.setItemsBackgroundColor(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), true); + actionBar.setCastShadows(true); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + if (actionBar.isActionModeShowed()) { + actionBar.hideActionMode(); + selected.clear(); + AndroidUtilities.forEachViews(listView, child -> { + if (child instanceof AddressBarList.BookmarkView) { + ((AddressBarList.BookmarkView) child).setChecked(false); + } + }); + } else { + finishFragment(); + } + } else if (id == R.id.menu_delete) { + deleteSelectedMessages(); + } else if (id == R.id.menu_link) { + gotoMessage(); + } + } + }); + + final ActionBarMenu actionMode = actionBar.createActionMode(); + + selectedCount = new NumberTextView(actionMode.getContext()); + selectedCount.setTextSize(18); + selectedCount.setTypeface(AndroidUtilities.bold()); + selectedCount.setTextColor(getThemedColor(Theme.key_actionBarActionModeDefaultIcon)); + selectedCount.setOnTouchListener((v, event) -> true); + actionMode.addView(selectedCount, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 65, 0, 0, 0)); + + gotoItem = actionMode.addItemWithWidth(R.id.menu_link, R.drawable.msg_message, AndroidUtilities.dp(54), getString(R.string.AccDescrGoToMessage)); + actionMode.addItemWithWidth(R.id.menu_delete, R.drawable.msg_delete, AndroidUtilities.dp(54), getString(R.string.Delete)); + + searchItem = actionBar.createMenu().addItem(0, R.drawable.ic_ab_search, getResourceProvider()).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() { + @Override + public void onSearchExpand() {} + + @Override + public void onSearchCollapse() { + query = null; + AndroidUtilities.cancelRunOnUIThread(applySearch); + if (searchList != null) { + searchList.detach(); + searchList = null; + } + if (listView != null) { + listView.adapter.update(true); + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + + @Override + public void onTextChanged(EditText editText) { + final boolean hadQuery = !TextUtils.isEmpty(query); + final String query = editText.getText().toString(); + if (!TextUtils.equals(BookmarksFragment.this.query, query)) { + BookmarksFragment.this.query = query; + if (searchList != null) { + searchList.detach(); + } + searchList = new AddressBarList.BookmarksList(currentAccount, query, BookmarksFragment.this::updateWithOffset); + searchList.attach(); + scheduleSearch(); + } + if (listView != null) { + listView.adapter.update(true); + if (hadQuery != !TextUtils.isEmpty(query)) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + } + + private void scheduleSearch() { + AndroidUtilities.cancelRunOnUIThread(applySearch); + AndroidUtilities.runOnUIThread(applySearch, 500); + } + + private Runnable applySearch = () -> { + if (searchList != null) { + searchList.load(); + } + }; + }); + searchItem.setSearchFieldHint(getString(R.string.Search)); + searchItem.setContentDescription(getString(R.string.Search)); + EditTextBoldCursor editText = searchItem.getSearchField(); + editText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + editText.setHintTextColor(getThemedColor(Theme.key_player_time)); + editText.setCursorColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + + listView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (!listView.canScrollVertically(1)) { + if (TextUtils.isEmpty(query)) { + list.load(); + } else if (searchList != null) { + searchList.load(); + } + } + if (listView.scrollingByUser) { + AndroidUtilities.hideKeyboard(fragmentView); + } + } + }); + + StickerEmptyView emptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH); + emptyView.title.setText(getString(R.string.WebNoBookmarks)); + emptyView.subtitle.setVisibility(View.GONE); + emptyView.showProgress(false, false); + emptyView.setAnimateLayoutChange(true); + ((FrameLayout) fragmentView).addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + listView.setEmptyView(emptyView); + + return fragmentView; + } + + @Override + public boolean onFragmentCreate() { + list.attach(); + return super.onFragmentCreate(); + } + + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + list.detach(); + } + + @Override + protected CharSequence getTitle() { + return getString(R.string.WebBookmarks); + } + + private final HashSet addedUrls = new HashSet<>(); + private int lastId; + + @Override + protected void fillItems(ArrayList items, UniversalAdapter adapter) { + addedUrls.clear(); + if (TextUtils.isEmpty(query)) { + for (MessageObject msg : list.links) { + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + if (url.startsWith("#") || url.startsWith("$") || url.startsWith("@")) continue; +// if (addedUrls.contains(url)) continue; + addedUrls.add(url); + items.add(AddressBarList.BookmarkView.Factory.as(msg, false).setChecked(isSelected(msg))); + } + if (!list.endReached) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + } + } else { + for (MessageObject msg : list.links) { + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + if (url.startsWith("#") || url.startsWith("$") || url.startsWith("@")) continue; +// if (addedUrls.contains(url)) continue; + addedUrls.add(url); + final String domain = AndroidUtilities.getHostAuthority(url, true); + final WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + final TLRPC.WebPage webpage = msg != null && msg.messageOwner != null && msg.messageOwner.media != null ? msg.messageOwner.media.webpage : null; + final String sitename = webpage != null && !TextUtils.isEmpty(webpage.site_name) ? webpage.site_name : (meta == null || TextUtils.isEmpty(meta.sitename) ? null : meta.sitename); + final String title = webpage != null && !TextUtils.isEmpty(webpage.title) ? webpage.title : null; + if (!matches(domain, query) && !matches(sitename, query) && !matches(title, query)) { + continue; + } + items.add(AddressBarList.BookmarkView.Factory.as(msg, false, query).setChecked(isSelected(msg))); + } + for (MessageObject msg : searchList.links) { + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + if (url.startsWith("#") || url.startsWith("$") || url.startsWith("@")) continue; +// if (addedUrls.contains(url)) continue; + addedUrls.add(url); + items.add(AddressBarList.BookmarkView.Factory.as(msg, false, query).setChecked(isSelected(msg))); + } + if (!searchList.endReached) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + } + } + if (!items.isEmpty()) { + items.add(UItem.asShadow(null)); + } + } + + public static boolean matches(String src, String q) { + if (src == null || q == null) return false; + final String lsrc = src.toLowerCase(); + final String lq = q.toLowerCase(); + if (lsrc.startsWith(lq) || lsrc.contains(" " + lq) || lsrc.contains("." + lq)) return true; + final String tsrc = AndroidUtilities.translitSafe(lsrc); + final String tq = AndroidUtilities.translitSafe(lq); + return (tsrc.startsWith(tq) || tsrc.contains(" " + tq) || tsrc.contains("." + tq)); + } + + @Override + protected void onClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { + if (actionBar.isActionModeShowed()) { + clickSelect(item, view); + } else { + finishFragment(); + whenClicked.run(getLink((MessageObject) item.object2)); + } + } + } + + public void clickSelect(UItem item, View view) { + AddressBarList.BookmarkView cell = (AddressBarList.BookmarkView) view; + MessageObject msg = (MessageObject) item.object2; + if (isSelected(msg)) { + setSelected(msg, false); + cell.setChecked(false); + } else { + setSelected(msg, true); + cell.setChecked(true); + } + selectedCount.setNumber(selected.size(), true); + if (selected.isEmpty()) { + actionBar.hideActionMode(); + } else { + actionBar.showActionMode(); + } + AndroidUtilities.updateViewShow(gotoItem, selected.size() == 1, true, true); + } + + @Override + protected boolean onLongClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { + clickSelect(item, view); + return true; + } + return false; + } + + @Override + public boolean isLightStatusBar() { + return AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_windowBackgroundWhite)) > .721f; + } + + private void updateWithOffset() { + int position = -1, offset = 0; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + position = listView.getChildAdapterPosition(child); + if (position < 0) continue; + offset = child.getTop(); + break; + } + listView.adapter.update(true); + if (position >= 0) { + listView.layoutManager.scrollToPositionWithOffset(position, offset); + } else { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/web/BotWebViewContainer.java similarity index 53% rename from TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewContainer.java rename to TMessagesProj/src/main/java/org/telegram/ui/web/BotWebViewContainer.java index 4cf055d8d..6b112a5ed 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/BotWebViewContainer.java @@ -1,5 +1,6 @@ -package org.telegram.ui.bots; +package org.telegram.ui.web; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import android.Manifest; @@ -11,8 +12,10 @@ import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; +import android.app.DownloadManager; import android.content.ClipboardManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; @@ -24,19 +27,24 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.net.http.SslError; import android.os.Build; +import android.os.Environment; import android.os.Message; import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.util.Pair; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; -import android.view.inputmethod.InputMethodManager; +import android.webkit.CookieManager; +import android.webkit.DownloadListener; import android.webkit.GeolocationPermissions; import android.webkit.JavascriptInterface; import android.webkit.PermissionRequest; import android.webkit.RenderProcessGoneDetail; +import android.webkit.SafeBrowsingResponse; import android.webkit.SslErrorHandler; +import android.webkit.URLUtil; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebResourceError; @@ -51,9 +59,12 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.core.content.FileProvider; import androidx.core.graphics.ColorUtils; import androidx.core.util.Consumer; +import com.google.android.gms.safetynet.SafetyNet; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -61,6 +72,9 @@ import org.json.JSONTokener; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.BotWebViewVibrationEffect; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.DownloadController; +import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; @@ -70,32 +84,57 @@ import org.telegram.messenger.MessagesController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.SendMessagesHelper; +import org.telegram.messenger.SharedConfig; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.VideoEditedInfo; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ArticleViewer; import org.telegram.ui.CameraScanActivity; import org.telegram.ui.Components.AlertsCreator; +import org.telegram.ui.Components.AnimatedFileDrawable; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Paint.Views.LinkPreview; +import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; +import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.voip.CellFlickerDrawable; import org.telegram.ui.LaunchActivity; +import org.telegram.ui.PremiumPreviewFragment; +import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.StoryRecorder; +import org.telegram.ui.WrappedResourceProvider; +import org.telegram.ui.bots.BotBiometry; +import org.telegram.ui.bots.BotBiometrySettings; +import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout; import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.IDN; +import java.net.URL; +import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -133,6 +172,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific private boolean lastExpanded; private boolean isRequestingPageOpen; private long lastClickMs; + private long lastPostStoryMs; private boolean isBackButtonVisible; private boolean isSettingsButtonVisible; @@ -157,8 +197,20 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific private String lastQrText; private BotBiometry biometry; - public BotWebViewContainer(@NonNull Context context, Theme.ResourcesProvider resourcesProvider, int backgroundColor) { + public final boolean bot; + + public void showLinkCopiedBulletin() { + BulletinFactory.of(this, resourcesProvider).createCopyLinkBulletin().show(true); + } + + public BotWebViewContainer( + @NonNull Context context, + Theme.ResourcesProvider resourcesProvider, + int backgroundColor, + boolean isBot + ) { super(context); + this.bot = isBot; this.resourcesProvider = resourcesProvider; d("created new webview container"); @@ -215,12 +267,11 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific setFocusable(false); } - public void setViewPortByMeasureSuppressed(boolean viewPortByMeasureSuppressed) { isViewPortByMeasureSuppressed = viewPortByMeasureSuppressed; } - private void checkCreateWebView() { + public void checkCreateWebView() { if (webView == null && !webViewNotAvailable) { try { setupWebView(null); @@ -237,7 +288,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } } - public void replaceWebView(MyWebView webView, WebViewProxy proxy) { + public void replaceWebView(MyWebView webView, Object proxy) { setupWebView(webView, proxy); } @@ -245,13 +296,27 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific setupWebView(replaceWith, null); } + private BotWebViewProxy botWebViewProxy; + public BotWebViewProxy getBotProxy() { + return botWebViewProxy; + } private WebViewProxy webViewProxy; public WebViewProxy getProxy() { return webViewProxy; } + public static boolean firstWebView = true; + + private MyWebView opener; + public void setOpener(MyWebView webView) { + this.opener = webView; + if (!bot && this.webView != null) { + this.webView.opener = webView; + } + } + @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"}) - private void setupWebView(MyWebView replaceWith, WebViewProxy proxy) { + private void setupWebView(MyWebView replaceWith, Object proxy) { if (webView != null) { webView.destroy(); removeView(webView); @@ -259,15 +324,55 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific if (replaceWith != null) { AndroidUtilities.removeFromParent(replaceWith); } - webView = replaceWith == null ? new MyWebView(getContext()) : replaceWith; + webView = replaceWith == null ? new MyWebView(getContext(), bot) : replaceWith; + if (!bot) { + CookieManager cookieManager = CookieManager.getInstance(); + cookieManager.setAcceptCookie(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.setAcceptThirdPartyCookies(webView, true); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager.getInstance().flush(); + } + webView.opener = opener; + } else { + webView.setBackgroundColor(getColor(Theme.key_windowBackgroundWhite)); + } webView.setContainers(this, webViewScrollListener); - webView.setBackgroundColor(getColor(Theme.key_windowBackgroundWhite)); + webView.setCloseListener(onCloseListener); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setGeolocationEnabled(true); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setSupportMultipleWindows(true); + settings.setAllowFileAccess(false); + settings.setAllowContentAccess(false); + settings.setAllowFileAccessFromFileURLs(false); + settings.setAllowUniversalAccessFromFileURLs(false); + if (!bot) { + settings.setRenderPriority(WebSettings.RenderPriority.HIGH); + settings.setCacheMode(WebSettings.LOAD_DEFAULT); + settings.setSaveFormData(true); + settings.setSavePassword(true); + settings.setSupportZoom(true); + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + settings.setUseWideViewPort(true); + settings.setLoadWithOverviewMode(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + settings.setSafeBrowsingEnabled(true); + } + } + + try { + String useragent = settings.getUserAgentString(); + useragent = useragent.replace("; wv)", ")"); + useragent = useragent.replaceAll("\\(Linux; Android.+;[^)]+\\)", "(Linux; Android " + Build.VERSION.RELEASE + "; K)"); + settings.setUserAgentString(useragent); + } catch (Exception e) { + FileLog.e(e); + } // Hackfix text on some Xiaomi devices settings.setTextSize(WebSettings.TextSize.NORMAL); @@ -279,28 +384,44 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific GeolocationPermissions.getInstance().clearAll(); webView.setVerticalScrollBarEnabled(false); - if (replaceWith == null) { + if (replaceWith == null && bot) { webView.setAlpha(0f); } addView(webView); // We can't use javascript interface because of minSDK 16, it can be exploited because of reflection access if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - if (proxy != null) { - webViewProxy = proxy; + if (bot) { + if (proxy instanceof BotWebViewProxy) { + botWebViewProxy = (BotWebViewProxy) proxy; + } + if (botWebViewProxy == null) { + botWebViewProxy = new BotWebViewProxy(this); + webView.addJavascriptInterface(botWebViewProxy, "TelegramWebviewProxy"); + } else if (replaceWith == null) { + webView.addJavascriptInterface(botWebViewProxy, "TelegramWebviewProxy"); + } + botWebViewProxy.setContainer(this); + } else { + if (proxy instanceof WebViewProxy) { + webViewProxy = (WebViewProxy) proxy; + } + if (webViewProxy == null) { + webViewProxy = new WebViewProxy(webView, this); + webView.addJavascriptInterface(webViewProxy, "TelegramWebview"); + } else if (replaceWith == null) { + webView.addJavascriptInterface(webViewProxy, "TelegramWebview"); + } + webViewProxy.setContainer(this); } - if (webViewProxy == null) { - webViewProxy = new WebViewProxy(this); - webView.addJavascriptInterface(webViewProxy, "TelegramWebviewProxy"); - } - webViewProxy.setContainer(this); } onWebViewCreated(); + firstWebView = false; } private void onOpenUri(Uri uri) { - onOpenUri(uri, null, false, false); + onOpenUri(uri, null, !bot, false); } private void onOpenUri(Uri uri, String browser, boolean tryInstantView, boolean suppressPopup) { @@ -313,16 +434,41 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific boolean internal = Browser.isInternalUri(uri, forceBrowser); if (internal && !forceBrowser[0] && delegate != null) { - setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); - BotWebViewContainer.this.setFocusable(false); - webView.setFocusable(false); - webView.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); - webView.clearFocus(); - InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + setKeyboardFocusable(false); } - Browser.openUrl(getContext(), uri, true, tryInstantView, false, null, browser); + Browser.openUrl(getContext(), uri, true, tryInstantView, false, null, browser, false); + } + + private boolean keyboardFocusable; + private boolean wasFocusable; + private void updateKeyboardFocusable() { + final boolean focusable = keyboardFocusable && isPageLoaded && false; + if (wasFocusable != focusable) { + if (!focusable) { + setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); + BotWebViewContainer.this.setFocusable(false); +// webView.setFocusable(false); + if (webView != null) { + webView.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); + webView.clearFocus(); + } + AndroidUtilities.hideKeyboard(this); + } else { + setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS); + BotWebViewContainer.this.setFocusable(true); +// webView.setFocusable(true); + if (webView != null) { + webView.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS); + } + } + } + wasFocusable = focusable; + } + + public void setKeyboardFocusable(boolean focusable) { + keyboardFocusable = focusable; + updateKeyboardFocusable(); } public static int getMainButtonRippleColor(int buttonColor) { @@ -337,6 +483,16 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific flickerDrawable.setColors(backgroundColor, 0x99, 0xCC); } + protected void onTitleChanged(String title) { + + } + protected void onFaviconChanged(Bitmap favicon) { + + } + protected void onURLChanged(String url, boolean first, boolean last) { + + } + /** * @return If this press was consumed */ @@ -351,9 +507,12 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific return false; } - private void setPageLoaded(String url) { + private void setPageLoaded(String url, boolean animated) { + onURLChanged(webView != null && webView.dangerousUrl ? webView.urlFallback : url, !(webView != null && webView.canGoBack()), !(webView != null && webView.canGoForward())); + if (webView != null) { webView.isPageLoaded = true; + updateKeyboardFocusable(); } if (isPageLoaded) { @@ -361,29 +520,48 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific return; } - AnimatorSet set = new AnimatorSet(); - set.playTogether( - ObjectAnimator.ofFloat(webView, View.ALPHA, 1f), - ObjectAnimator.ofFloat(flickerView, View.ALPHA, 0f) - ); - set.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { + if (animated && webView != null && flickerView != null) { + AnimatorSet set = new AnimatorSet(); + set.playTogether( + ObjectAnimator.ofFloat(webView, View.ALPHA, 1f), + ObjectAnimator.ofFloat(flickerView, View.ALPHA, 0f) + ); + set.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + flickerView.setVisibility(GONE); + } + }); + set.start(); + } else { + if (webView != null) { + webView.setAlpha(1f); + } + if (flickerView != null) { + flickerView.setAlpha(0f); flickerView.setVisibility(GONE); } - }); - set.start(); + } mUrl = url; d("setPageLoaded: isPageLoaded = true!"); isPageLoaded = true; - BotWebViewContainer.this.setFocusable(true); + updateKeyboardFocusable(); delegate.onWebAppReady(); } + protected void onErrorShown(boolean shown, int errorCode, String description) { + + } + + protected void onDangerousTriggered(DangerousWebWarning warning) { + + } + public void setState(boolean loaded, String url) { d("setState(" + loaded + ", " + url + ")"); isPageLoaded = loaded; mUrl = url; + updateKeyboardFocusable(); } public void setIsBackButtonVisible(boolean visible) { @@ -514,7 +692,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific public void invalidateViewPortHeight(boolean isStable, boolean force) { invalidate(); - if (!isPageLoaded && !force) { + if (!isPageLoaded && !force || !bot) { return; } @@ -564,6 +742,9 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific canvas.restore(); return draw; } + if (child == webView && (AndroidUtilities.makingGlobalBlurBitmap || getLayerType() == LAYER_TYPE_HARDWARE && !canvas.isHardwareAccelerated())) { + return true; + } return super.drawChild(canvas, child, drawingTime); } @@ -669,6 +850,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific webView.onResume(); webView.reload(); } + updateKeyboardFocusable(); }); } @@ -684,6 +866,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific webView.onResume(); webView.loadUrl(url); } + updateKeyboardFocusable(); }); } @@ -727,7 +910,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } public void destroyWebView() { - d("destroyWebView"); + d("destroyWebView preserving=" + preserving); if (webView != null) { if (webView.getParent() != null) { removeView(webView); @@ -736,9 +919,14 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific webView.destroy(); } isPageLoaded = false; + updateKeyboardFocusable(); } } + public void resetWebView() { + webView = null; + } + public boolean isBackButtonVisible() { return isBackButtonVisible; } @@ -801,6 +989,14 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } } + private Runnable onCloseListener; + public void setOnCloseRequestedListener(Runnable listener) { + onCloseListener = listener; + if (webView != null) { + webView.setCloseListener(listener); + } + } + private boolean wasOpenedByLinkIntent; public void setWasOpenedByLinkIntent(boolean value) { wasOpenedByLinkIntent = value; @@ -810,13 +1006,85 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific this.delegate = delegate; } + private void onWebEventReceived(String type, String data) { + if (bot) return; + if (delegate == null) return; + d("onWebEventReceived " + type + " " + data); + switch (type) { + case "actionBarColor": + case "navigationBarColor": { + try { + final JSONArray jsonArray = new JSONArray(data); + final boolean isActionBarColor = TextUtils.equals(type, "actionBarColor"); + final int color = Color.argb( + (int) (Math.round(jsonArray.optDouble(3, 1) * 255)), + (int) (Math.round(jsonArray.optDouble(0))), + (int) (Math.round(jsonArray.optDouble(1))), + (int) (Math.round(jsonArray.optDouble(2))) + ); + if (webView != null) { + if (isActionBarColor) { + webView.lastActionBarColorGot = true; + webView.lastActionBarColor = color; + } else { + webView.lastBackgroundColorGot = true; + webView.lastBackgroundColor = color; + } + webView.saveHistory(); + } + delegate.onWebAppBackgroundChanged(isActionBarColor, color); + } catch (Exception e) {} + break; + } + case "allowScroll": { + boolean x = true, y = true; + try { + JSONArray jsonArray = new JSONArray(data); + x = jsonArray.optBoolean(0, true); + y = jsonArray.optBoolean(1, true); + } catch (Exception e) {} + d("allowScroll " + x + " " + y); + if (getParent() instanceof ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) { + ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer swipeContainer = (ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) getParent(); + swipeContainer.allowThisScroll(x, y); + } + break; + } + case "siteName": { + d("siteName " + data); + if (webView != null) { + webView.lastSiteName = data; + webView.saveHistory(); + } + break; + } + } + } + private void onEventReceived(String eventType, String eventData) { + if (!bot) { + return; + } if (webView == null || delegate == null) { d("onEventReceived " + eventType + ": no webview or delegate!"); return; } d("onEventReceived " + eventType); switch (eventType) { + case "web_app_allow_scroll": { + boolean x = true, y = true; + try { + JSONArray jsonArray = new JSONArray(eventData); + x = jsonArray.optBoolean(0, true); + y = jsonArray.optBoolean(1, true); + } catch (Exception e) {} + d("allowScroll " + x + " " + y); + if (getParent() instanceof ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) { + ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer swipeContainer = (ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) getParent(); + swipeContainer.allowThisScroll(x, y); + } + break; + } case "web_app_close": { boolean return_back = false; try { @@ -870,7 +1138,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific break; } case "web_app_close_scan_qr_popup": { - if (hasQRPending) { + if (hasQRPending && cameraBottomSheet != null) { cameraBottomSheet.dismiss(); } break; @@ -1039,6 +1307,15 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } break; } + case "web_app_setup_swipe_behavior": { + try { + JSONObject jsonObject = new JSONObject(eventData); + delegate.onWebAppSwipingBehavior(jsonObject.optBoolean("allow_vertical_swipe")); + } catch (JSONException e) { + FileLog.e(e); + } + break; + } case "web_app_set_background_color": { try { JSONObject jsonObject = new JSONObject(eventData); @@ -1248,7 +1525,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific break; } case "web_app_ready": { - setPageLoaded(webView.getUrl()); + setPageLoaded(webView.getUrl(), true); break; } case "web_app_setup_main_button": { @@ -1283,7 +1560,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } return; } - TLRPC.TL_bots_canSendMessage req = new TLRPC.TL_bots_canSendMessage(); + TL_bots.canSendMessage req = new TL_bots.canSendMessage(); req.bot = MessagesController.getInstance(currentAccount).getInputUser(botUser); ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { @@ -1305,7 +1582,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific .setTitle(getString(R.string.BotWebViewRequestWriteTitle)) .setMessage(getString(R.string.BotWebViewRequestWriteMessage)) .setPositiveButton(getString(R.string.BotWebViewRequestAllow), (di, w) -> { - TLRPC.TL_bots_allowSendMessage req2 = new TLRPC.TL_bots_allowSendMessage(); + TL_bots.allowSendMessage req2 = new TL_bots.allowSendMessage(); req2.bot = MessagesController.getInstance(currentAccount).getInputUser(botUser); ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { if (res2 != null) { @@ -1355,7 +1632,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific return; } - TLRPC.TL_bots_invokeWebViewCustomMethod req = new TLRPC.TL_bots_invokeWebViewCustomMethod(); + TL_bots.invokeWebViewCustomMethod req = new TL_bots.invokeWebViewCustomMethod(); req.bot = MessagesController.getInstance(currentAccount).getInputUser(botUser); req.custom_method = method; req.params = new TLRPC.TL_dataJSON(); @@ -1396,7 +1673,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific SpannableStringBuilder message = new SpannableStringBuilder(); String botName = UserObject.getUserName(botUser); if (!TextUtils.isEmpty(botName)) { - message.append(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.AreYouSureShareMyContactInfoWebapp, botName))); + message.append(AndroidUtilities.replaceTags(formatString(R.string.AreYouSureShareMyContactInfoWebapp, botName))); } else { message.append(AndroidUtilities.replaceTags(getString(R.string.AreYouSureShareMyContactInfoBot))); } @@ -1466,7 +1743,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific if (biometry == null) { return; } - if (biometry.access_requested && biometry.disabled) { + if (biometry.access_requested) { notifyBiometryReceived(); return; } @@ -1479,9 +1756,9 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific AlertDialog.Builder alert = new AlertDialog.Builder(getContext(), resourcesProvider); if (TextUtils.isEmpty(reason)) { alert.setTitle(getString(R.string.BotAllowBiometryTitle)); - alert.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); + alert.setMessage(AndroidUtilities.replaceTags(formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); } else { - alert.setTitle(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); + alert.setTitle(AndroidUtilities.replaceTags(formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); alert.setMessage(reason); } alert.setPositiveButton(getString(R.string.Allow), (di, w) -> { @@ -1617,6 +1894,139 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific break; } + case "web_app_share_to_story": { + if (isRequestingPageOpen || System.currentTimeMillis() - lastClickMs > 1000 || System.currentTimeMillis() - lastPostStoryMs < 2000) { + return; + } + lastClickMs = 0; + lastPostStoryMs = System.currentTimeMillis(); + String media_url = null; + String text = null; + String widget_link = null; + String widget_link_name = null; + try { + JSONObject jsonObject = new JSONObject(eventData); + media_url = jsonObject.optString("media_url"); + text = jsonObject.optString("text"); + JSONObject link = jsonObject.optJSONObject("widget_link"); + if (link != null) { + widget_link = link.optString("url"); + widget_link_name = link.optString("name"); + } + } catch (Exception e) { + FileLog.e(e); + } + if (media_url == null) return; + final String finalText = text; + final String finalLink = widget_link; + final String finalLinkName = widget_link_name; + + if (!MessagesController.getInstance(currentAccount).storiesEnabled()) { + new PremiumFeatureBottomSheet(new BaseFragment() { + { this.currentAccount = BotWebViewContainer.this.currentAccount; } + @Override + public Dialog showDialog(Dialog dialog) { + dialog.show(); + return dialog; + } + @Override + public Activity getParentActivity() { + return BotWebViewContainer.this.parentActivity; + } + @Override + public Theme.ResourcesProvider getResourceProvider() { + return new WrappedResourceProvider(resourcesProvider) { + @Override + public void appendColors() { + sparseIntArray.append(Theme.key_dialogBackground, 0xFF1E1E1E); + sparseIntArray.append(Theme.key_windowBackgroundGray, 0xFF000000); + } + }; + } + @Override + public boolean isLightStatusBar() { + return false; + } + }, PremiumPreviewFragment.PREMIUM_FEATURE_STORIES, true).show(); + return; + } + + AlertDialog progressDialog = new AlertDialog(parentActivity, AlertDialog.ALERT_TYPE_SPINNER); + new HttpGetFileTask(file -> { + AndroidUtilities.runOnUIThread(() -> { + if (file == null) { + progressDialog.dismissUnless(500); + return; + } + final int[] params = new int[AnimatedFileDrawable.PARAM_NUM_COUNT]; + Runnable open = () -> { + StoryEntry entry; + final boolean isVideo = params[AnimatedFileDrawable.PARAM_NUM_DURATION] > 0; + if (isVideo) { + final int width = params[AnimatedFileDrawable.PARAM_NUM_WIDTH]; + final int height = params[AnimatedFileDrawable.PARAM_NUM_HEIGHT]; + int twidth = width, theight = height; + if (twidth > AndroidUtilities.getPhotoSize()) { + twidth = AndroidUtilities.getPhotoSize(); + } + if (theight > AndroidUtilities.getPhotoSize()) { + theight = AndroidUtilities.getPhotoSize(); + } + File thumb = StoryEntry.makeCacheFile(UserConfig.selectedAccount, "jpg"); + AnimatedFileDrawable drawable = new AnimatedFileDrawable(file, true, 0, 0, null, null, null, 0, UserConfig.selectedAccount, true, twidth, theight, null); + Bitmap thumbBitmap = drawable.getFirstFrame(null); + drawable.recycle(); + if (thumbBitmap != null) { + try { + thumbBitmap.compress(Bitmap.CompressFormat.JPEG, 80, new FileOutputStream(thumb)); + } catch (Exception e) { + FileLog.e(e); + thumb = null; + } + } + entry = StoryEntry.fromVideoShoot(file, thumb == null ? null : thumb.getAbsolutePath(), params[AnimatedFileDrawable.PARAM_NUM_DURATION]); + entry.width = width; + entry.height = height; + entry.setupMatrix(); + } else { + Pair orientation = AndroidUtilities.getImageOrientation(file); + entry = StoryEntry.fromPhotoShoot(file, orientation.first); + } + if (entry.width <= 0 || entry.height <= 0) { + progressDialog.dismissUnless(500); + return; + } + if (finalText != null) { + entry.caption = finalText; + } + if (!TextUtils.isEmpty(finalLink) && UserConfig.getInstance(currentAccount).isPremium()) { + if (entry.mediaEntities == null) entry.mediaEntities = new ArrayList<>(); + VideoEditedInfo.MediaEntity entity = new VideoEditedInfo.MediaEntity(); + entity.type = VideoEditedInfo.MediaEntity.TYPE_LINK; + entity.subType = -1; + entity.color = 0xFFFFFFFF; + entity.linkSettings = new LinkPreview.WebPagePreview(); + entity.linkSettings.url = finalLink; + if (finalLinkName != null) { + entity.linkSettings.flags |= 2; + entity.linkSettings.name = finalLinkName; + } + entry.mediaEntities.add(entity); + } + StoryRecorder.getInstance(parentActivity, UserConfig.selectedAccount) + .openRepost(null, entry); + progressDialog.dismissUnless(500); + }; + Utilities.globalQueue.postRunnable(() -> { + AnimatedFileDrawable.getVideoInfo(file.getAbsolutePath(), params); + AndroidUtilities.runOnUIThread(open); + }); + }); + }).execute(media_url); + progressDialog.showDelayed(250); + + break; + } default: { FileLog.d("unknown webapp event " + eventType); break; @@ -1769,9 +2179,9 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } - public static class WebViewProxy { + public static class BotWebViewProxy { public BotWebViewContainer container; - public WebViewProxy(BotWebViewContainer container) { + public BotWebViewProxy(BotWebViewContainer container) { this.container = container; } public void setContainer(BotWebViewContainer container) { @@ -1783,7 +2193,123 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific FileLog.d("webviewproxy.postEvent: no container"); return; } - AndroidUtilities.runOnUIThread(() -> container.onEventReceived(eventType, eventData)); + AndroidUtilities.runOnUIThread(() -> { + if (container == null) return; + container.onEventReceived(eventType, eventData); + }); + } + } + + public static class WebViewProxy { + + public BotWebViewContainer container; + public final MyWebView webView; + + public WebViewProxy(MyWebView webView, BotWebViewContainer container) { + this.webView = webView; + this.container = container; + } + public void setContainer(BotWebViewContainer container) { + this.container = container; + } + + @JavascriptInterface + public void post(String type, String data) { + if (container == null) return; + AndroidUtilities.runOnUIThread(() -> { + if (container == null) return; + container.onWebEventReceived(type, data); + }); + } + + @JavascriptInterface + public void resolveShare(String json, byte[] file, String fileName, String fileMimeType) { + AndroidUtilities.runOnUIThread(() -> { + if (container == null) return; + if (System.currentTimeMillis() - container.lastClickMs > 1000) { + webView.evaluateJS("window.navigator.__share__receive(\"security\")"); + return; + } + container.lastClickMs = 0; + final Context context = webView.getContext(); + Activity activity = AndroidUtilities.findActivity(context); + if (activity == null && LaunchActivity.instance != null) { + activity = LaunchActivity.instance; + } + if (context == null || activity == null || !(activity instanceof LaunchActivity) || activity.isFinishing() || !webView.isAttachedToWindow()) { + webView.evaluateJS("window.navigator.__share__receive(\"security\")"); + return; + } + final LaunchActivity launchActivity = (LaunchActivity) activity; + String url = null, title = null, text = null; + try { + JSONObject object = new JSONObject(json); + url = object.optString("url", null); + text = object.optString("text", null); + title = object.optString("title", null); + } catch (Exception e) { + FileLog.e(e); + } + StringBuilder totalText = new StringBuilder(); + if (title != null) { + totalText.append(title); + } + if (text != null) { + if (totalText.length() > 0) + totalText.append("\n"); + totalText.append(text); + } + if (url != null) { + if (totalText.length() > 0) + totalText.append("\n"); + totalText.append(url); + } + Intent intent = new Intent(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_TEXT, totalText.toString()); + if (file != null) { + File finalFile = null; + int i = 0; + while (finalFile == null || finalFile.exists()) { + finalFile = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), FileLoader.fixFileName(fileName == null ? "file" : fileName) + (i > 0 ? " (" + i + ")" : "")); + i++; + } + try { + FileOutputStream fos = new FileOutputStream(finalFile); + fos.write(file); + fos.close(); + } catch (Exception e) { + FileLog.e(e); + } + try { + if (fileMimeType == null) { + intent.setType("text/plain"); + } else { + intent.setType(fileMimeType); + } + if (fileName != null) { + intent.putExtra(Intent.EXTRA_TITLE, fileName); + } + if (Build.VERSION.SDK_INT >= 24) { + try { + intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(launchActivity, ApplicationLoader.getApplicationId() + ".provider", finalFile)); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } catch (Exception ignore) { + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(finalFile)); + } + } else { + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(finalFile)); + } + } catch (Exception e) { + FileLog.e(e); + } + } else { + intent.setType("text/plain"); + } + launchActivity.whenWebviewShareAPIDone(success -> { + webView.evaluateJS("window.navigator.__share__receive("+(success?"":"'abort'")+")"); + }); + launchActivity.startActivityForResult(Intent.createChooser(intent, getString(R.string.ShareFile)), LaunchActivity.WEBVIEW_SHARE_API_REQUEST_CODE); + }); } } @@ -1804,6 +2330,9 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific */ void onCloseRequested(@Nullable Runnable callback); + default void onInstantClose() { onCloseRequested(null); }; + default void onCloseToTabs() { onCloseRequested(null); }; + /** * Called when WebView requests to change closing behavior * @@ -1811,6 +2340,8 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific */ void onWebAppSetupClosingBehavior(boolean needConfirmation); + void onWebAppSwipingBehavior(boolean allowSwiping); + /** * Called when WebView requests to send custom data * @@ -1827,6 +2358,8 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific */ void onWebAppSetActionBarColor(int colorKey, int color, boolean isOverrideColor); + default void onWebAppBackgroundChanged(boolean actionBarColor, int color) {}; + /** * Called when WebView requests to set background color * @@ -1929,41 +2462,380 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific private static int tags = 0; + public static boolean isTonsite(String url) { + return url != null && isTonsite(Uri.parse(url)); + } + + public static boolean isTonsite(Uri uri) { + if ("tonsite".equals(uri.getScheme())) { + return true; + } + String host = uri.getAuthority(); + if (host == null && uri.getScheme() == null) { + host = Uri.parse("http://" + uri.toString()).getAuthority(); + } + return host != null && (host.endsWith(".ton") || host.endsWith(".adnl")); + } + + public static WebResourceResponse proxyTON(WebResourceRequest req) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return proxyTON(req.getMethod(), req.getUrl().toString(), req.getRequestHeaders()); + } + return null; + } + + public static String rotateTONHost(String hostname) { + try { + hostname = IDN.toASCII(hostname, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) { + FileLog.e(e); + } + final String[] parts = hostname.split("\\."); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; ++i) { + if (i > 0) { + sb.append("-d"); + } + sb.append(parts[i].replaceAll("\\-", "-h")); + } + sb.append(".").append(MessagesController.getInstance(UserConfig.selectedAccount).tonProxyAddress); + return sb.toString(); + } + + public static WebResourceResponse proxyTON(String method, String url, Map headers) { + try { + url = Browser.replaceHostname(Uri.parse(url), rotateTONHost(AndroidUtilities.getHostAuthority(url)), "https"); + URL urlObj = new URL(url); + HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection(); + urlConnection.setRequestMethod(method); + if (headers != null) { + for (Map.Entry e : headers.entrySet()) { + urlConnection.addRequestProperty(e.getKey(), e.getValue()); + } + } + urlConnection.connect(); + InputStream inputStream = urlConnection.getInputStream(); + final String contentType = urlConnection.getContentType(); + final String mimeType = contentType.split(";", 2)[0]; + return new WebResourceResponse(mimeType, urlConnection.getContentEncoding(), inputStream); + } catch (Exception e) { + FileLog.e(e); + } + return null; + } + + public static class DangerousWebWarning { + public final String url; + public final String threatType; + public final Runnable back, proceed; + public DangerousWebWarning( + String url, + String type, + Runnable back, + Runnable proceed + ) { + this.url = url; + this.threatType = type; + this.back = back; + this.proceed = proceed; + } + } + public static class MyWebView extends WebView { private final int tag = tags++; private boolean isPageLoaded; + private Runnable whenPageLoaded; + public final boolean bot; + private String openedByUrl; + private String currentUrl; + private BrowserHistory.Entry currentHistoryEntry; + + public MyWebView opener; + public boolean errorShown; + public String errorShownAt; + + public String lastSiteName; + public boolean lastActionBarColorGot, lastBackgroundColorGot; + public int lastActionBarColor, lastBackgroundColor; + + public String urlFallback = "about:blank"; + public boolean dangerousUrl; + + public DangerousWebWarning currentWarning; public boolean isPageLoaded() { return isPageLoaded; } + public void whenPageLoaded(Runnable runnable, long maxDelay) { + this.whenPageLoaded = runnable; + AndroidUtilities.runOnUIThread(() -> { + if (this.whenPageLoaded != null) { + Runnable callback = this.whenPageLoaded; + this.whenPageLoaded = null; + callback.run(); + } + }, maxDelay); + } + public void d(String s) { FileLog.d("[webview] #" + tag + " " + s); } - public MyWebView(Context context) { + public MyWebView(Context context, boolean bot) { super(context); - d("created new webview"); + this.bot = bot; + d("created new webview " + this); + + setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + WebView.HitTestResult result = getHitTestResult(); + if (result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) { + String url = result.getExtra(); + + BottomSheet.Builder builder = new BottomSheet.Builder(getContext(), false, null); + String formattedUrl = url; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + builder.setTitleMultipleLines(true); + builder.setTitle(formattedUrl); + builder.setItems(new CharSequence[]{ + LocaleController.getString(R.string.OpenInTelegramBrowser), + LocaleController.getString(R.string.OpenInSystemBrowser), + LocaleController.getString(R.string.Copy) + }, (dialog, which) -> { + if (which == 0) { + loadUrl(url); + } else if (which == 1) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, getContext().getPackageName()); + getContext().startActivity(intent); + } else if (which == 2) { + AndroidUtilities.addToClipboard(url); + if (botWebViewContainer != null) { + botWebViewContainer.showLinkCopiedBulletin(); + } + } + }); + builder.show(); + + return true; + } else if (result.getType() == HitTestResult.IMAGE_TYPE) { + String imageUrl = result.getExtra(); + + BottomSheet.Builder builder = new BottomSheet.Builder(getContext(), false, null); + String formattedUrl = imageUrl; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + builder.setTitleMultipleLines(true); + builder.setTitle(formattedUrl); + builder.setItems(new CharSequence[]{ + LocaleController.getString(R.string.OpenInSystemBrowser), + LocaleController.getString(R.string.AccActionDownload), + LocaleController.getString(R.string.CopyLink) + }, (dialog, which) -> { + if (which == 0) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(imageUrl)); + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, getContext().getPackageName()); + getContext().startActivity(intent); + } else if (which == 1) { + try { + String filename = URLUtil.guessFileName(imageUrl, null, "image/*"); + if (filename == null) { + filename = "image.png"; + } + + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(imageUrl)); + request.setMimeType("image/*"); + request.setDescription(getString(R.string.WebDownloading)); + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); + DownloadManager downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); + if (downloadManager != null) { + downloadManager.enqueue(request); + } + + if (botWebViewContainer != null) { + BulletinFactory.of(botWebViewContainer, botWebViewContainer.resourcesProvider) + .createSimpleBulletin(R.raw.ic_download, AndroidUtilities.replaceTags(formatString(R.string.WebDownloadingFile, filename))) + .show(true); + } + } catch (Exception e2) { + FileLog.e(e2); + } + } else if (which == 2) { + AndroidUtilities.addToClipboard(imageUrl); + if (botWebViewContainer != null) { + botWebViewContainer.showLinkCopiedBulletin(); + } + } + }); + builder.show(); + + return true; + } + return false; + } + }); setWebViewClient(new WebViewClient() { + private boolean firstRequest = true; @Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { - d("shouldInterceptRequest " + (request == null ? null : request.getUrl())); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + d("shouldInterceptRequest " + (request == null ? null : request.getUrl())); + if (request != null && isTonsite(request.getUrl())) { + d("proxying ton"); + firstRequest = false; + return proxyTON(request); + } + if (!bot && opener != null && firstRequest) { + HttpURLConnection connection = null; + try { + URL connectionUrl = new URL(request.getUrl().toString()); + connection = (HttpURLConnection) connectionUrl.openConnection(); + connection.setRequestMethod(request.getMethod()); + if (request.getRequestHeaders() != null) { + for (Map.Entry e: request.getRequestHeaders().entrySet()) { + connection.setRequestProperty(e.getKey(), e.getValue()); + } + } + connection.connect(); + HashMap headers = new HashMap<>(); + for (Map.Entry> e: connection.getHeaderFields().entrySet()) { + final String key = e.getKey(); + if (key == null) continue; + headers.put(key, TextUtils.join(", ", e.getValue())); + if (!dangerousUrl && ( + "cross-origin-resource-policy".equals(key.toLowerCase()) || + "cross-origin-embedder-policy".equals(key.toLowerCase()) + )) { + for (String val : e.getValue()) { + if (val == null) continue; + if (!("unsafe-none".equals(val.toLowerCase()) || "same-site".equals(val.toLowerCase()))) { + d(" dangerous header CORS policy: " + key + ": " + val + " from " + request.getMethod() + " " + request.getUrl()); + dangerousUrl = true; + AndroidUtilities.runOnUIThread(() -> { + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(urlFallback, !canGoBack(), !canGoForward()); + } + }); + break; + } + } + } + } + String contentType = connection.getContentType(); + String encoding = connection.getContentEncoding(); + if (contentType.indexOf("; ") >= 0) { + String[] parts = contentType.split("; "); + if (!TextUtils.isEmpty(parts[0])) { + contentType = parts[0]; + } + for (int i = 1; i < parts.length; ++i) { + if (parts[i].startsWith("charset=")) { + encoding = parts[i].substring(8); + } + } + } + firstRequest = false; + return new WebResourceResponse( + contentType, + encoding, + connection.getResponseCode(), + connection.getResponseMessage(), + headers, + connection.getInputStream() + ); + } catch (Exception e) { + FileLog.e(e); + if (connection != null) { + connection.disconnect(); + } + } + } + } + firstRequest = false; return super.shouldInterceptRequest(view, request); } + @Override + public void onPageCommitVisible(WebView view, String url) { + if (MyWebView.this.whenPageLoaded != null) { + Runnable callback = MyWebView.this.whenPageLoaded; + MyWebView.this.whenPageLoaded = null; + callback.run(); + } + d("onPageCommitVisible " + url); + if (!bot) { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_share)); + } else { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_app_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + } + super.onPageCommitVisible(view, url); + } + + @Override + public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { + if (!bot && (currentHistoryEntry == null || !TextUtils.equals(currentHistoryEntry.url, url))) { + currentHistoryEntry = new BrowserHistory.Entry(); + currentHistoryEntry.id = Utilities.fastRandom.nextLong(); + currentHistoryEntry.time = System.currentTimeMillis(); + currentHistoryEntry.url = magic2tonsite(getUrl()); + currentHistoryEntry.meta = WebMetadataCache.WebMetadata.from(MyWebView.this); + BrowserHistory.pushHistory(currentHistoryEntry); + } + d("doUpdateVisitedHistory " + url + " " + isReload); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } + super.doUpdateVisitedHistory(view, url, isReload); + } + @Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { d("shouldInterceptRequest " + url); + if (isTonsite(url)) { + d("proxying ton"); + return proxyTON("GET", url, null); + } return super.shouldInterceptRequest(view, url); } @Override public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { - d("onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + d("onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); + } else { + d("onRenderProcessGone"); + } if (!AndroidUtilities.isSafeToShow(getContext())) { return true; } @@ -1982,99 +2854,302 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (url == null) return false; Uri uriNew = Uri.parse(url); + if (!bot && Browser.openInExternalApp(context, url, true)) { + d("shouldOverrideUrlLoading("+url+") = true (openInExternalBrowser)"); + if (!isPageLoaded && !canGoBack()) { + if (botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onInstantClose(); + } else if (onCloseListener != null) { + onCloseListener.run(); + onCloseListener = null; + } + } + return true; + } + if (!bot && uriNew != null && uriNew.getScheme() != null && !("https".equals(uriNew.getScheme()) || "http".equals(uriNew.getScheme()) || "tonsite".equals(uriNew.getScheme()))) { + d("shouldOverrideUrlLoading("+url+") = true (browser open)"); + Browser.openUrl(getContext(), uriNew); + return true; + } if (botWebViewContainer != null && Browser.isInternalUri(uriNew, null)) { + if (!bot && "1".equals(uriNew.getQueryParameter("embed")) && "t.me".equals(uriNew.getAuthority())) { + return false; + } if (MessagesController.getInstance(botWebViewContainer.currentAccount).webAppAllowedProtocols != null && MessagesController.getInstance(botWebViewContainer.currentAccount).webAppAllowedProtocols.contains(uriNew.getScheme())) { + if (opener != null) { + if (botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onInstantClose(); + } else if (onCloseListener != null) { + onCloseListener.run(); + onCloseListener = null; + } + if (opener.botWebViewContainer != null && opener.botWebViewContainer.delegate != null) { + opener.botWebViewContainer.delegate.onCloseToTabs(); + } + } botWebViewContainer.onOpenUri(uriNew); } d("shouldOverrideUrlLoading("+url+") = true"); return true; } + if (uriNew != null) { + currentUrl = uriNew.toString(); + } d("shouldOverrideUrlLoading("+url+") = false"); return false; } + private final Runnable resetErrorRunnable = () -> { + if (botWebViewContainer != null) { + botWebViewContainer.onErrorShown(errorShown = false, 0, null); + } + }; + @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { + currentHistoryEntry = null; + currentUrl = url; + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; d("onPageStarted " + url); + if (botWebViewContainer != null && errorShown && (errorShownAt == null || !TextUtils.equals(errorShownAt, url))) { + AndroidUtilities.runOnUIThread(resetErrorRunnable, 40); + } + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } super.onPageStarted(view, url, favicon); + injectedJS = false; } @Override public void onPageFinished(WebView view, String url) { isPageLoaded = true; + boolean animated = true; + if (MyWebView.this.whenPageLoaded != null) { + Runnable callback = MyWebView.this.whenPageLoaded; + MyWebView.this.whenPageLoaded = null; + callback.run(); + animated = false; + } d("onPageFinished"); if (botWebViewContainer != null) { - botWebViewContainer.setPageLoaded(url); + botWebViewContainer.setPageLoaded(url, animated); } else { d("onPageFinished: no container"); } + if (!bot) { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_share)); + } else { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_app_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + } + saveHistory(); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : getUrl(), !canGoBack(), !canGoForward()); + } +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// CookieManager.getInstance().flush(); +// } } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { - d("onReceivedError: " + error.getErrorCode() + " " + error.getDescription()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + d("onReceivedError: " + error.getErrorCode() + " " + error.getDescription()); + if (botWebViewContainer != null && (request == null || request.isForMainFrame())) { + AndroidUtilities.cancelRunOnUIThread(resetErrorRunnable); + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; + lastTitleGot = false; + errorShownAt = request == null || request.getUrl() == null ? getUrl() : request.getUrl().toString(); + botWebViewContainer.onTitleChanged(lastTitle = null); + botWebViewContainer.onFaviconChanged(lastFavicon = null); + botWebViewContainer.onErrorShown(errorShown = true, error.getErrorCode(), error.getDescription() == null ? null : error.getDescription().toString()); + } + } super.onReceivedError(view, request, error); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { d("onReceivedError: " + errorCode + " " + description + " url=" + failingUrl); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + if (botWebViewContainer != null) { + AndroidUtilities.cancelRunOnUIThread(resetErrorRunnable); + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; + lastTitleGot = false; + errorShownAt = getUrl(); + botWebViewContainer.onTitleChanged(lastTitle = null); + botWebViewContainer.onFaviconChanged(lastFavicon = null); + botWebViewContainer.onErrorShown(errorShown = true, errorCode, description); + } + } super.onReceivedError(view, errorCode, description, failingUrl); } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { - d("onReceivedHttpError: statusCode=" + (errorResponse == null ? null : errorResponse.getStatusCode()) + " request=" + (request == null ? null : request.getUrl())); super.onReceivedHttpError(view, request, errorResponse); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + d("onReceivedHttpError: statusCode=" + (errorResponse == null ? null : errorResponse.getStatusCode()) + " request=" + (request == null ? null : request.getUrl())); + if (botWebViewContainer != null && (request == null || request.isForMainFrame()) && errorResponse != null && TextUtils.isEmpty(errorResponse.getMimeType())) { + AndroidUtilities.cancelRunOnUIThread(resetErrorRunnable); + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; + lastTitleGot = false; + errorShownAt = request == null || request.getUrl() == null ? getUrl() : request.getUrl().toString(); + botWebViewContainer.onTitleChanged(lastTitle = null); + botWebViewContainer.onFaviconChanged(lastFavicon = null); + botWebViewContainer.onErrorShown(errorShown = true, errorResponse.getStatusCode(), errorResponse.getReasonPhrase()); + } + } } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { d("onReceivedSslError: error="+error+" url=" + (error == null ? null : error.getUrl())); + handler.cancel(); super.onReceivedSslError(view, handler, error); } }); setWebChromeClient(new WebChromeClient() { private Dialog lastPermissionsDialog; + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + d("onReceivedIcon favicon=" + (icon == null ? "null" : icon.getWidth() + "x" + icon.getHeight())); + if (icon != null && (!TextUtils.equals(getUrl(), lastFaviconUrl) || lastFavicon == null || icon.getWidth() > lastFavicon.getWidth())) { + lastFavicon = icon; + lastFaviconUrl = getUrl(); + lastFaviconGot = true; + saveHistory(); + } + Bitmap lastFav = lastFavicons.get(getUrl()); + if (icon != null && (lastFav == null || lastFav.getWidth() < icon.getWidth())) { + lastFavicons.put(getUrl(), icon); + } + if (botWebViewContainer != null) { + botWebViewContainer.onFaviconChanged(icon); + } + super.onReceivedIcon(view, icon); + } + + @Override + public void onReceivedTitle(WebView view, String title) { + d("onReceivedTitle title=" + title); + if (!errorShown) { + lastTitleGot = true; + lastTitle = title; + } + if (botWebViewContainer != null) { + botWebViewContainer.onTitleChanged(title); + } + super.onReceivedTitle(view, title); + } + + @Override + public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) { + d("onReceivedTouchIconUrl url=" + url + " precomposed=" + precomposed); + super.onReceivedTouchIconUrl(view, url, precomposed); + } + @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { d("onCreateWindow isDialog=" + isDialog + " isUserGesture=" + isUserGesture + " resultMsg=" + resultMsg); - WebView newWebView = new WebView(view.getContext()); - newWebView.setWebViewClient(new WebViewClient() { - @Override - public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { - d("newWebView.onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); - if (!AndroidUtilities.isSafeToShow(getContext())) { + final String fromUrl = getUrl(); + if (SharedConfig.inappBrowser) { + if (botWebViewContainer == null) return false; + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return false; + if (lastFragment.getParentLayout() instanceof ActionBarLayout) { + lastFragment = ((ActionBarLayout) lastFragment.getParentLayout()).getSheetFragment(); + } + ArticleViewer articleViewer = lastFragment.createArticleViewer(true); + articleViewer.setOpener(MyWebView.this); + articleViewer.open((String) null); + + MyWebView newWebView = articleViewer.getLastWebView(); + if (!TextUtils.isEmpty(fromUrl)) { + newWebView.urlFallback = fromUrl; + } + d("onCreateWindow: newWebView=" + newWebView); + if (newWebView != null) { + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(newWebView); + resultMsg.sendToTarget(); + + return true; + } else { + articleViewer.close(true, true); + return false; + } + } else { + WebView newWebView = new WebView(view.getContext()); + newWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + d("newWebView.onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); + } else { + d("newWebView.onRenderProcessGone"); + } + if (!AndroidUtilities.isSafeToShow(getContext())) { + return true; + } + new AlertDialog.Builder(getContext(), botWebViewContainer == null ? null : botWebViewContainer.resourcesProvider) + .setTitle(getString(R.string.ChromeCrashTitle)) + .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) + .setPositiveButton(getString(R.string.OK), null) + .setOnDismissListener(d -> { + if (botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onCloseRequested(null); + } + }) + .show(); return true; } - new AlertDialog.Builder(getContext(), botWebViewContainer == null ? null : botWebViewContainer.resourcesProvider) - .setTitle(getString(R.string.ChromeCrashTitle)) - .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) - .setPositiveButton(getString(R.string.OK), null) - .setOnDismissListener(d -> { - if (botWebViewContainer.delegate != null) { - botWebViewContainer.delegate.onCloseRequested(null); - } - }) - .show(); - return true; - } - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (botWebViewContainer != null) { - botWebViewContainer.onOpenUri(Uri.parse(url)); + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (botWebViewContainer != null) { + botWebViewContainer.onOpenUri(Uri.parse(url)); + newWebView.destroy(); + } + return true; } - return true; - } - }); - WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; - transport.setWebView(newWebView); - resultMsg.sendToTarget(); - return true; + }); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(newWebView); + resultMsg.sendToTarget(); + return true; + } + } + + @Override + public void onCloseWindow(WebView window) { + d("onCloseWindow " + window); + if (botWebViewContainer != null && botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onCloseRequested(null); + } else if (onCloseListener != null) { + onCloseListener.run(); + onCloseListener = null; + } + super.onCloseWindow(window); } @Override @@ -2125,22 +3200,31 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific return; } d("onGeolocationPermissionsShowPrompt " + origin); - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, R.raw.permission_request_location, LocaleController.formatString(R.string.BotWebViewRequestGeolocationPermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestGeolocationPermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; + final String name = bot ? UserObject.getUserName(botWebViewContainer.botUser) : AndroidUtilities.getHostAuthority(getUrl()); + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, + R.raw.permission_request_location, + formatString(bot ? R.string.BotWebViewRequestGeolocationPermission : R.string.WebViewRequestGeolocationPermission, name), + formatString(bot ? R.string.BotWebViewRequestGeolocationPermissionWithHint : R.string.BotWebViewRequestGeolocationPermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, allowSystem -> { - callback.invoke(origin, allowSystem, false); - if (allowSystem) { - botWebViewContainer.hasUserPermissions = true; - } - }); - } else { - callback.invoke(origin, false, false); + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, allowSystem -> { + callback.invoke(origin, allowSystem, false); + if (allowSystem) { + botWebViewContainer.hasUserPermissions = true; + } + }); + } else { + callback.invoke(origin, false, false); + } } } - }); + ); lastPermissionsDialog.show(); } @@ -2169,6 +3253,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific } d("onPermissionRequest " + request); + final String name = bot ? UserObject.getUserName(botWebViewContainer.botUser) : AndroidUtilities.getHostAuthority(getUrl()); String[] resources = request.getResources(); if (resources.length == 1) { String resource = resources[0]; @@ -2180,46 +3265,62 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific switch (resource) { case PermissionRequest.RESOURCE_AUDIO_CAPTURE: { - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.RECORD_AUDIO}, R.raw.permission_request_microphone, LocaleController.formatString(R.string.BotWebViewRequestMicrophonePermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestMicrophonePermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.RECORD_AUDIO}, + R.raw.permission_request_microphone, + formatString(bot ? R.string.BotWebViewRequestMicrophonePermission : R.string.WebViewRequestMicrophonePermission, name), + formatString(bot ? R.string.BotWebViewRequestMicrophonePermissionWithHint : R.string.WebViewRequestMicrophonePermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.RECORD_AUDIO}, allowSystem -> { - if (allowSystem) { - request.grant(new String[] {resource}); - botWebViewContainer.hasUserPermissions = true; - } else { - request.deny(); - } - }); - } else { - request.deny(); + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.RECORD_AUDIO}, allowSystem -> { + if (allowSystem) { + request.grant(new String[] {resource}); + botWebViewContainer.hasUserPermissions = true; + } else { + request.deny(); + } + }); + } else { + request.deny(); + } } } - }); + ); lastPermissionsDialog.show(); break; } case PermissionRequest.RESOURCE_VIDEO_CAPTURE: { - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.CAMERA}, R.raw.permission_request_camera, LocaleController.formatString(R.string.BotWebViewRequestCameraPermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestCameraPermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.CAMERA}, + R.raw.permission_request_camera, + formatString(bot ? R.string.BotWebViewRequestCameraPermission : R.string.WebViewRequestCameraPermission, name), + formatString(bot ? R.string.BotWebViewRequestCameraPermissionWithHint : R.string.WebViewRequestCameraPermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA}, allowSystem -> { - if (allowSystem) { - request.grant(new String[] {resource}); - botWebViewContainer.hasUserPermissions = true; - } else { - request.deny(); - } - }); - } else { - request.deny(); + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA}, allowSystem -> { + if (allowSystem) { + request.grant(new String[] {resource}); + botWebViewContainer.hasUserPermissions = true; + } else { + request.deny(); + } + }); + } else { + request.deny(); + } } } - }); + ); lastPermissionsDialog.show(); break; } @@ -2229,24 +3330,32 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific (PermissionRequest.RESOURCE_AUDIO_CAPTURE.equals(resources[0]) || PermissionRequest.RESOURCE_VIDEO_CAPTURE.equals(resources[0])) && (PermissionRequest.RESOURCE_AUDIO_CAPTURE.equals(resources[1]) || PermissionRequest.RESOURCE_VIDEO_CAPTURE.equals(resources[1])) ) { - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, R.raw.permission_request_camera, LocaleController.formatString(R.string.BotWebViewRequestCameraMicPermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestCameraMicPermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, + R.raw.permission_request_camera, + formatString(bot ? R.string.BotWebViewRequestCameraMicPermission : R.string.WebViewRequestCameraMicPermission, name), + formatString(bot ? R.string.BotWebViewRequestCameraMicPermissionWithHint : R.string.WebViewRequestCameraMicPermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, allowSystem -> { - if (allowSystem) { - request.grant(new String[] {resources[0], resources[1]}); - botWebViewContainer.hasUserPermissions = true; - } else { - request.deny(); - } - }); - } else { - request.deny(); + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, allowSystem -> { + if (allowSystem) { + request.grant(new String[] {resources[0], resources[1]}); + botWebViewContainer.hasUserPermissions = true; + } else { + request.deny(); + } + }); + } else { + request.deny(); + } } } - }); + ); lastPermissionsDialog.show(); } } @@ -2262,16 +3371,197 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific d("onPermissionRequestCanceled: no dialog"); } } + + @Nullable + @Override + public Bitmap getDefaultVideoPoster() { + return Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); + } }); + setFindListener(new FindListener() { + @Override + public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) { + searchIndex = activeMatchOrdinal; + searchCount = numberOfMatches; + searchLoading = !isDoneCounting; + if (searchListener != null) { + searchListener.run(); + } + } + }); + if (!bot) { + setDownloadListener(new DownloadListener() { + private String getFilename(String url, String contentDisposition, String mimeType) { + try { + List segments = Uri.parse(url).getPathSegments(); + String lastSegment = segments.get(segments.size() - 1); + int index = lastSegment.lastIndexOf("."); + if (index > 0) { + String ext = lastSegment.substring(index + 1); + if (!TextUtils.isEmpty(ext)) + return lastSegment; + } + } catch (Exception e) {} + return URLUtil.guessFileName(url, contentDisposition, mimeType); + } + + @Override + public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { + d("onDownloadStart " + url + " " + userAgent + " " + contentDisposition + " " + mimeType + " " + contentLength); + try { + if (url.startsWith("blob:")) { + // we can't get blob binary from webview :( + return; + } else { + final String filename = getFilename(url, contentDisposition, mimeType); + + final Runnable download = () -> { + try { + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); + request.setMimeType(mimeType); + request.addRequestHeader("User-Agent", userAgent); + request.setDescription(getString(R.string.WebDownloading)); + request.setTitle(filename); + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); + DownloadManager downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); + if (downloadManager != null) { + downloadManager.enqueue(request); + } + + if (botWebViewContainer != null) { + BulletinFactory.of(botWebViewContainer, botWebViewContainer.resourcesProvider) + .createSimpleBulletin(R.raw.ic_download, AndroidUtilities.replaceTags(formatString(R.string.WebDownloadingFile, filename))) + .show(true); + } + } catch (Exception e2) { + FileLog.e(e2); + } + }; + if (!DownloadController.getInstance(UserConfig.selectedAccount).canDownloadMedia(DownloadController.AUTODOWNLOAD_TYPE_DOCUMENT, contentLength)) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle(getString(R.string.WebDownloadAlertTitle)); + builder.setMessage(AndroidUtilities.replaceTags(contentLength > 0 ? formatString(R.string.WebDownloadAlertInfoWithSize, filename, AndroidUtilities.formatFileSize(contentLength)) : formatString(R.string.WebDownloadAlertInfo, filename))); + builder.setPositiveButton(getString(R.string.WebDownloadAlertYes), (di, w) -> download.run()); + builder.setNegativeButton(getString(R.string.Cancel), null); + AlertDialog alertDialog = builder.show(); + TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); + if (button != null) { + button.setTextColor(Theme.getColor(Theme.key_text_RedBold)); + } + } else { + download.run(); + } + } + } catch(Exception e){ + FileLog.e(e); + } + } + }); + } + } + + private void saveHistory() { + if (bot) return; + WebMetadataCache.WebMetadata meta = WebMetadataCache.WebMetadata.from(MyWebView.this); + WebMetadataCache.getInstance().save(meta); + if (currentHistoryEntry != null && meta != null) { + currentHistoryEntry.meta = meta; + BrowserHistory.pushHistory(currentHistoryEntry); + } + } + + private int searchIndex; + private int searchCount; + private boolean searchLoading; + private Runnable searchListener; + + public void search(String text, Runnable listener) { + searchLoading = true; + this.searchListener = listener; + findAllAsync(text); + } + + public int getSearchIndex() { + return searchIndex; + } + + public int getSearchCount() { + return searchCount; + } + + public boolean lastTitleGot; + public String lastTitle; + private String lastFaviconUrl; + public boolean lastFaviconGot; + public boolean injectedJS; + public Bitmap lastFavicon; + private String lastUrl; + private HashMap lastFavicons = new HashMap<>(); + private boolean loading; + + public String getTitle() { + if (currentWarning != null) return ""; + return lastTitle; + } + public void setTitle(String title) { + lastTitle = title; + } + + public String getOpenURL() { + return openedByUrl; + } + + @Nullable + @Override + public String getUrl() { + if (currentWarning != null) return currentWarning.url; + if (dangerousUrl) return urlFallback; +// if (errorShown) return lastUrl; + return lastUrl = super.getUrl(); + } + + public boolean isUrlDangerous() { + return dangerousUrl || currentWarning != null; + } + + public Bitmap getFavicon() { + if (errorShown) return null; + return lastFavicon; + } + + public Bitmap getFavicon(String url) { + return lastFavicons.get(url); } private BotWebViewContainer botWebViewContainer; private WebViewScrollListener webViewScrollListener; + private Runnable onCloseListener; public void setContainers(BotWebViewContainer botWebViewContainer, WebViewScrollListener webViewScrollListener) { d("setContainers(" + botWebViewContainer + ", " + webViewScrollListener + ")"); + final boolean attachedAgain = this.botWebViewContainer == null && botWebViewContainer != null; this.botWebViewContainer = botWebViewContainer; this.webViewScrollListener = webViewScrollListener; + if (attachedAgain) { + evaluateJS("window.__tg__postBackgroundChange()"); + } + } + + public void setCloseListener(Runnable closeListener) { + onCloseListener = closeListener; + } + + public void evaluateJS(String script) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + evaluateJavascript(script, value -> {}); + } else { + try { + loadUrl("javascript:" + URLEncoder.encode(script, "UTF-8")); + } catch (UnsupportedEncodingException e) { + loadUrl("javascript:" + URLEncoder.encode(script)); + } + } } private int prevScrollX, prevScrollY; @@ -2288,6 +3578,18 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific prevScrollY = getScrollY(); } + public float getScrollProgress() { + final float scrollHeight = Math.max(1, computeVerticalScrollRange() - computeVerticalScrollExtent()); + if (scrollHeight <= getHeight()) { + return 0f; + } + return Utilities.clamp01((float) getScrollY() / scrollHeight); + } + + public void setScrollProgress(float progress) { + setScrollY((int) (progress * Math.max(1, computeVerticalScrollRange() - computeVerticalScrollExtent()))); + } + @Override public void setScrollX(int value) { super.setScrollX(value); @@ -2347,30 +3649,110 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific @Override public void loadUrl(@NonNull String url) { + final String ourl = url; + checkCachedMetaProperties(url); + openedByUrl = url; +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// CookieManager.getInstance().flush(); +// } + url = tonsite2magic(url); + currentUrl = url; d("loadUrl " + url); super.loadUrl(url); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } } @Override public void loadUrl(@NonNull String url, @NonNull Map additionalHttpHeaders) { + final String ourl = url; + checkCachedMetaProperties(url); + openedByUrl = url; + url = tonsite2magic(url); + currentUrl = url; d("loadUrl " + url + " " + additionalHttpHeaders); super.loadUrl(url, additionalHttpHeaders); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } + } + + public void loadUrl(String url, WebMetadataCache.WebMetadata meta) { + final String ourl = url; + applyCachedMeta(meta); + openedByUrl = url; + url = tonsite2magic(url); + currentUrl = url; + d("loadUrl " + url + " with cached meta"); + super.loadUrl(url); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } + } + + public void checkCachedMetaProperties(String url) { + if (bot) return; + String domain = AndroidUtilities.getHostAuthority(url, true); + WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + applyCachedMeta(meta); + } + + public boolean applyCachedMeta(WebMetadataCache.WebMetadata meta) { + if (meta == null) return false; + boolean foundTitle = false; + int backgroundColor = 0xFFFFFFFF; + if (botWebViewContainer != null && botWebViewContainer.delegate != null) { + if (meta.actionBarColor != 0) { + botWebViewContainer.delegate.onWebAppBackgroundChanged(true, meta.actionBarColor); + lastActionBarColorGot = true; + } + if (meta.backgroundColor != 0) { + backgroundColor = meta.backgroundColor; + botWebViewContainer.delegate.onWebAppBackgroundChanged(false, meta.backgroundColor); + lastBackgroundColorGot = true; + } + if (meta.favicon != null) { + botWebViewContainer.onFaviconChanged(lastFavicon = meta.favicon); + lastFaviconGot = true; + } + if (!TextUtils.isEmpty(meta.sitename)) { + foundTitle = true; + lastSiteName = meta.sitename; + botWebViewContainer.onTitleChanged(lastTitle = meta.sitename); + } + if (SharedConfig.adaptableColorInBrowser) { + setBackgroundColor(backgroundColor); + } + } + if (!foundTitle) { + setTitle(null); + if (botWebViewContainer != null) { + botWebViewContainer.onTitleChanged(null); + } + } + return true; } @Override public void reload() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager.getInstance().flush(); + } d("reload"); super.reload(); } @Override public void loadData(@NonNull String data, @Nullable String mimeType, @Nullable String encoding) { + openedByUrl = null; d("loadData " + data + " " + mimeType + " " + encoding); super.loadData(data, mimeType, encoding); } @Override public void loadDataWithBaseURL(@Nullable String baseUrl, @NonNull String data, @Nullable String mimeType, @Nullable String encoding, @Nullable String historyUrl) { + openedByUrl = null; d("loadDataWithBaseURL " + baseUrl + " " + data + " " + mimeType + " " + encoding + " " + historyUrl); super.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl); } @@ -2416,10 +3798,111 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific d("resumeTimers"); super.resumeTimers(); } + + @Override + public boolean canGoBack() { + return currentWarning != null || super.canGoBack(); + } + + @Override + public void goBack() { + d("goBack"); + if (currentWarning != null) { + currentWarning.back.run(); + return; + } + super.goBack(); + } + + @Override + public void goForward() { + d("goForward"); + super.goForward(); + } + + @Override + public void clearHistory() { + d("clearHistory"); + super.clearHistory(); + } + + @Override + public void setFocusable(int focusable) { + d("setFocusable " + focusable); + super.setFocusable(focusable); + } + + @Override + public void setFocusable(boolean focusable) { + d("setFocusable " + focusable); + super.setFocusable(focusable); + } + + @Override + public void setFocusableInTouchMode(boolean focusableInTouchMode) { + d("setFocusableInTouchMode " + focusableInTouchMode); + super.setFocusableInTouchMode(focusableInTouchMode); + } + + @Override + public void setFocusedByDefault(boolean isFocusedByDefault) { + d("setFocusedByDefault " + isFocusedByDefault); + super.setFocusedByDefault(isFocusedByDefault); + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + return super.drawChild(canvas, child, drawingTime); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + } } private final int tag = tags++; public void d(String s) { FileLog.d("[webviewcontainer] #" + tag + " " + s); } + + private static HashMap rotatedTONHosts; + + private static String tonsite2magic(String url) { + if (url == null) return url; + final Uri uri = Uri.parse(url); + if (isTonsite(uri)) { + String tonsite_host = AndroidUtilities.getHostAuthority(url); + try { + tonsite_host = IDN.toASCII(tonsite_host, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) {} + String magic_host = rotateTONHost(tonsite_host); + if (rotatedTONHosts == null) rotatedTONHosts = new HashMap<>(); + rotatedTONHosts.put(magic_host, tonsite_host); + url = Browser.replaceHostname(Uri.parse(url), magic_host, "https"); + } + return url; + } + + public static String magic2tonsite(String url) { + if (rotatedTONHosts == null) return url; + if (url == null) return url; + String host = AndroidUtilities.getHostAuthority(url); + if (host == null || !host.endsWith("." + MessagesController.getInstance(UserConfig.selectedAccount).tonProxyAddress)) { + return url; + } + String tonsite_host = rotatedTONHosts.get(host); + if (tonsite_host == null) return url; + return Browser.replace(Uri.parse(url), "tonsite", tonsite_host, null); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java b/TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java new file mode 100644 index 000000000..8b2a3ba41 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java @@ -0,0 +1,181 @@ +package org.telegram.ui.web; + +import android.util.LongSparseArray; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; + +public class BrowserHistory { + + public static class Entry extends TLObject { + public long id; + public long time; + public String url; + public WebMetadataCache.WebMetadata meta; + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt64(id); + stream.writeInt64(time); + stream.writeString(url == null ? "" : url); + meta.serializeToStream(stream); + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + id = stream.readInt64(exception); + time = stream.readInt64(exception); + url = stream.readString(exception); + meta = new WebMetadataCache.WebMetadata(); + meta.readParams(stream, exception); + } + } + + public static boolean historyLoading, historyLoaded; + private static ArrayList history; + private static LongSparseArray historyById; + private static ArrayList>> callbacks; + + public static File getHistoryFile() { + return new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), "webhistory.dat"); + } + + public static void preloadHistory() { + if (historyLoading || historyLoaded) { + return; + } + historyLoading = true; + history = new ArrayList<>(); + historyById = new LongSparseArray<>(); + Utilities.globalQueue.postRunnable(() -> { + final ArrayList history = new ArrayList<>(); + final LongSparseArray historyById = new LongSparseArray<>(); + + try { + final File file = getHistoryFile(); + if (file.exists()) { + final SerializedData stream = new SerializedData(file); + final long count = stream.readInt64(true); + for (long i = 0; i < count; ++i) { + final BrowserHistory.Entry entry = new BrowserHistory.Entry(); + entry.readParams(stream, true); + history.add(entry); + historyById.put(entry.id, entry); + } + } + } catch (Exception e) { + FileLog.e(e); + } + + AndroidUtilities.runOnUIThread(() -> { + BrowserHistory.history.addAll(0, history); + for (int i = 0; i < historyById.size(); ++i) { + BrowserHistory.historyById.put(historyById.keyAt(i), historyById.valueAt(i)); + } + historyLoaded = true; + historyLoading = false; + if (callbacks != null) { + for (Utilities.Callback> callback : callbacks) { + callback.run(history); + } + callbacks = null; + } + }); + }); + } + + public static ArrayList getHistory() { + return getHistory(null); + } + + public static ArrayList getHistory(Utilities.Callback> loaded) { + boolean addedCallback = false; + if (loaded != null && !historyLoaded) { + if (callbacks == null) { + callbacks = new ArrayList<>(); + } + callbacks.add(loaded); + addedCallback = true; + } + preloadHistory(); + if (addedCallback) { + return null; + } + return history; + } + + public static void pushHistory(BrowserHistory.Entry entry) { + if (entry == null || entry.meta == null) return; + preloadHistory(); + BrowserHistory.Entry existingEntry = historyById.get(entry.id); + if (existingEntry != null) { + existingEntry.meta = entry.meta; + } else { + history.add(entry); + historyById.put(entry.id, entry); + } + scheduleHistorySave(); + } + + private static void scheduleHistorySave() { + AndroidUtilities.cancelRunOnUIThread(BrowserHistory::saveHistory); + AndroidUtilities.runOnUIThread(BrowserHistory::saveHistory, 1_000); + } + + private static void saveHistory() { + Utilities.globalQueue.postRunnable(() -> { + try { + final File file = getHistoryFile(); + if (!file.exists()) { + file.createNewFile(); + } + + final long count = history.size(); + SerializedData astream = new SerializedData(true); + astream.writeInt64(count); + for (BrowserHistory.Entry e : history) { + e.serializeToStream(astream); + } + + final SerializedData stream = new SerializedData(astream.length()); + stream.writeInt64(count); + for (BrowserHistory.Entry e : history) { + e.serializeToStream(stream); + } + + try { + FileOutputStream os = new FileOutputStream(file); + os.write(stream.toByteArray()); + os.close(); + } catch (Exception e) { + FileLog.e(e); + } + } catch (Exception e) { + FileLog.e(e); + } + }); + } + + public static void clearHistory() { + try { + history.clear(); + historyById.clear(); + final File file = getHistoryFile(); + if (file.exists()) { + file.delete(); + } + } catch (Exception e) { + FileLog.e(e); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java new file mode 100644 index 000000000..4002200d3 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java @@ -0,0 +1,360 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; +import static org.telegram.ui.web.AddressBarList.getLink; + +import android.content.Context; +import android.text.TextUtils; +import android.util.LongSparseArray; +import android.view.View; +import android.widget.EditText; +import android.widget.FrameLayout; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.exoplayer2.util.Util; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarMenu; +import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarMenuSubItem; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.NumberTextView; +import org.telegram.ui.Components.StickerEmptyView; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalFragment; +import org.telegram.ui.LaunchActivity; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.TimeZone; + +public class HistoryFragment extends UniversalFragment { + + private final Runnable closeToTabs; + private final Utilities.Callback whenClicked; + + private ArrayList history = BrowserHistory.getHistory(loadedHistory -> { + history = loadedHistory; + if (listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + private final ArrayList searchResults = new ArrayList<>(); + private boolean searchLoading; + + private String query; + + private NumberTextView selectedCount; + public HashSet selected = new HashSet<>(); + + private ActionBarMenuItem searchItem; + private StickerEmptyView emptyView; + + public boolean isSelected(MessageObject msg) { + return msg != null && selected.contains(msg.getId()); + } + + public void setSelected(MessageObject msg, boolean select) { + if (msg == null) return; + if (select) { + selected.add(msg.getId()); + } else { + selected.remove(msg.getId()); + } + } + + public HistoryFragment(Runnable closeToTabs, Utilities.Callback whenClicked) { + super(); + this.closeToTabs = closeToTabs; + this.whenClicked = whenClicked; + } + + @Override + public View createView(Context context) { + fragmentView = super.createView(context); + + actionBar.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + actionBar.setActionModeColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setTitleColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + actionBar.setItemsBackgroundColor(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), true); + actionBar.setCastShadows(true); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + if (actionBar.isActionModeShowed()) { + actionBar.hideActionMode(); + selected.clear(); + AndroidUtilities.forEachViews(listView, child -> { + if (child instanceof AddressBarList.BookmarkView) { + ((AddressBarList.BookmarkView) child).setChecked(false); + } + }); + } else { + finishFragment(); + } + } + } + }); + + final ActionBarMenu actionMode = actionBar.createActionMode(); + + selectedCount = new NumberTextView(actionMode.getContext()); + selectedCount.setTextSize(18); + selectedCount.setTypeface(AndroidUtilities.bold()); + selectedCount.setTextColor(getThemedColor(Theme.key_actionBarActionModeDefaultIcon)); + selectedCount.setOnTouchListener((v, event) -> true); + actionMode.addView(selectedCount, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 65, 0, 0, 0)); + + searchItem = actionBar.createMenu().addItem(0, R.drawable.ic_ab_search, getResourceProvider()).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() { + @Override + public void onSearchExpand() {} + + @Override + public void onSearchCollapse() { + query = null; + searchLoading = false; + AndroidUtilities.cancelRunOnUIThread(applySearch); + + if (listView != null) { + listView.adapter.update(true); + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + + emptyView.title.setText(getString(TextUtils.isEmpty(query) ? R.string.WebNoHistory : R.string.WebNoSearchedHistory)); + } + + @Override + public void onTextChanged(EditText editText) { + final boolean hadQuery = !TextUtils.isEmpty(query); + final String query = editText.getText().toString(); + if (!TextUtils.equals(HistoryFragment.this.query, query)) { + HistoryFragment.this.query = query; + scheduleSearch(); + emptyView.title.setText(getString(TextUtils.isEmpty(query) ? R.string.WebNoHistory : R.string.WebNoSearchedHistory)); + } + if (listView != null) { + listView.adapter.update(true); + if (hadQuery != !TextUtils.isEmpty(query)) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + } + + private void scheduleSearch() { + searchLoading = true; + AndroidUtilities.cancelRunOnUIThread(applySearch); + AndroidUtilities.runOnUIThread(applySearch, 500); + } + + private Runnable applySearch = () -> { + final ArrayList history = new ArrayList<>(HistoryFragment.this.history); + final String query = HistoryFragment.this.query; + Utilities.searchQueue.postRunnable(() -> { + final ArrayList entries = new ArrayList<>(); + + for (int i = 0; i < history.size(); ++i) { + BrowserHistory.Entry e = history.get(i); + if (matches(e.url, query) || e.meta != null && (matches(e.meta.title, query) || matches(e.meta.sitename, query))) { + entries.add(e); + } + } + + AndroidUtilities.runOnUIThread(() -> { + searchResults.clear(); + searchResults.addAll(entries); + searchLoading = false; + + if (listView != null) { + listView.adapter.update(true); + } + }); + }); + }; + + public boolean matches(String src, String q) { + if (src == null || q == null) return false; + final String lsrc = src.toLowerCase(); + final String lq = q.toLowerCase(); + if (lsrc.startsWith(lq) || lsrc.contains(" " + lq) || lsrc.contains("." + lq)) return true; + final String tsrc = AndroidUtilities.translitSafe(lsrc); + final String tq = AndroidUtilities.translitSafe(lq); + return (tsrc.startsWith(tq) || tsrc.contains(" " + tq) || tsrc.contains("." + tq)); + } + }); + searchItem.setSearchFieldHint(getString(R.string.Search)); + searchItem.setContentDescription(getString(R.string.Search)); + EditTextBoldCursor editText = searchItem.getSearchField(); + editText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + editText.setHintTextColor(getThemedColor(Theme.key_player_time)); + editText.setCursorColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + + emptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH); + emptyView.title.setText(getString(TextUtils.isEmpty(query) ? R.string.WebNoHistory : R.string.WebNoSearchedHistory)); + emptyView.subtitle.setVisibility(View.GONE); + emptyView.showProgress(false, false); + emptyView.setAnimateLayoutChange(true); + ((FrameLayout) fragmentView).addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + listView.setEmptyView(emptyView); + + listView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (listView.scrollingByUser) { + AndroidUtilities.hideKeyboard(fragmentView); + } + } + }); + + return fragmentView; + } + + @Override + protected CharSequence getTitle() { + return getString(R.string.WebHistory); + } + + + @Override + protected void fillItems(ArrayList items, UniversalAdapter adapter) { + + int lastDateKey = 0; + Calendar calendar = Calendar.getInstance(); + calendar.setTimeZone(TimeZone.getDefault()); + if (TextUtils.isEmpty(query)) { + if (history != null) { + for (int i = history.size() - 1; i >= 0; --i) { + BrowserHistory.Entry entry = history.get(i); + calendar.setTimeInMillis(entry.time); + int dateKey = calendar.get(Calendar.YEAR) * 1_00_00 + calendar.get(Calendar.MONTH) * 1_00 + calendar.get(Calendar.DAY_OF_MONTH); + if (lastDateKey != dateKey) { + lastDateKey = dateKey; + items.add(UItem.asGraySection(LocaleController.formatDateChat(entry.time / 1000L))); + } + items.add(AddressBarList.BookmarkView.Factory.as(entry, query)); + } + } + } else { + for (int i = searchResults.size() - 1; i >= 0; --i) { + BrowserHistory.Entry entry = searchResults.get(i); + calendar.setTimeInMillis(entry.time); + int dateKey = calendar.get(Calendar.YEAR) * 1_00_00 + calendar.get(Calendar.MONTH) * 1_00 + calendar.get(Calendar.DAY_OF_MONTH); + if (lastDateKey != dateKey) { + lastDateKey = dateKey; + items.add(UItem.asGraySection(LocaleController.formatDateChat(entry.time / 1000L))); + } + items.add(AddressBarList.BookmarkView.Factory.as(entry, query)); + } + if (searchLoading) { + items.add(UItem.asFlicker(FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(FlickerLoadingView.BROWSER_BOOKMARK)); + } + } + if (!items.isEmpty()) { + items.add(UItem.asShadow(null)); + } + } + + public static boolean matches(String src, String q) { + if (src == null || q == null) return false; + final String lsrc = src.toLowerCase(); + final String lq = q.toLowerCase(); + if (lsrc.startsWith(lq) || lsrc.contains(" " + lq) || lsrc.contains("." + lq)) return true; + final String tsrc = AndroidUtilities.translitSafe(lsrc); + final String tq = AndroidUtilities.translitSafe(lq); + return (tsrc.startsWith(tq) || tsrc.contains(" " + tq) || tsrc.contains("." + tq)); + } + + @Override + protected void onClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { + if (actionBar.isActionModeShowed()) { + clickSelect(item, view); + } else { + finishFragment(); + whenClicked.run((BrowserHistory.Entry) item.object2); + } + } + } + + public void clickSelect(UItem item, View view) { +// AddressBarList.BookmarkView cell = (AddressBarList.BookmarkView) view; +// MessageObject msg = (MessageObject) item.object2; +// if (isSelected(msg)) { +// setSelected(msg, false); +// cell.setChecked(false); +// } else { +// setSelected(msg, true); +// cell.setChecked(true); +// } +// selectedCount.setNumber(selected.size(), true); +// if (selected.isEmpty()) { +// actionBar.hideActionMode(); +// } else { +// actionBar.showActionMode(); +// } + } + + @Override + protected boolean onLongClick(UItem item, View view, int position, float x, float y) { +// if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { +// clickSelect(item, view); +// return true; +// } + return false; + } + + @Override + public boolean isLightStatusBar() { + return AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_windowBackgroundWhite)) > .721f; + } + + private void updateWithOffset() { + int position = -1, offset = 0; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + position = listView.getChildAdapterPosition(child); + if (position < 0) continue; + offset = child.getTop(); + break; + } + listView.adapter.update(true); + if (position >= 0) { + listView.layoutManager.scrollToPositionWithOffset(position, offset); + } else { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java new file mode 100644 index 000000000..36dcae69a --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java @@ -0,0 +1,83 @@ +package org.telegram.ui.web; + + +import android.content.ContentResolver; +import android.os.AsyncTask; +import android.webkit.MimeTypeMap; +import android.webkit.URLUtil; + +import com.google.android.exoplayer2.util.MimeTypes; + +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.ui.Stories.recorder.StoryEntry; + +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class HttpGetFileTask extends AsyncTask { + + private Utilities.Callback callback; + private Exception exception; + + public HttpGetFileTask(Utilities.Callback callback) { + this.callback = callback; + } + + @Override + protected File doInBackground(String... params) { + String urlString = params[0]; + + try { + URL url = new URL(urlString); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection.setRequestMethod("GET"); + urlConnection.setDoInput(true); + + int statusCode = urlConnection.getResponseCode(); + InputStream in; + if (statusCode >= 200 && statusCode < 300) { + in = urlConnection.getInputStream(); + } else { + in = urlConnection.getErrorStream(); + } + + String ext = MimeTypeMap.getSingleton().getExtensionFromMimeType(urlConnection.getContentType()); + File file = StoryEntry.makeCacheFile(UserConfig.selectedAccount, ext); + + BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file)); + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = in.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + outputStream.flush(); + outputStream.close(); + in.close(); + + return file; + + } catch (Exception e) { + this.exception = e; + return null; + } + } + + @Override + protected void onPostExecute(File file) { + if (callback != null) { + if (exception == null) { + callback.run(file); + } else { + callback.run(null); + } + } + } +} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java new file mode 100644 index 000000000..dfe5154c5 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java @@ -0,0 +1,77 @@ +package org.telegram.ui.web; + + +import android.os.AsyncTask; + +import org.telegram.messenger.Utilities; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +public class HttpGetTask extends AsyncTask { + + private final HashMap headers = new HashMap<>(); + private final Utilities.Callback callback; + private Exception exception; + + public HttpGetTask(Utilities.Callback callback) { + this.callback = callback; + } + + public HttpGetTask setHeader(String key, String value) { + headers.put(key, value); + return this; + } + + @Override + protected String doInBackground(String... params) { + String urlString = params[0]; + + try { + URL url = new URL(urlString); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + for (Map.Entry e : headers.entrySet()) { + if (e.getKey() == null || e.getValue() == null) continue; + urlConnection.setRequestProperty(e.getKey(), e.getValue()); + } + urlConnection.setRequestMethod("GET"); + urlConnection.setDoInput(true); + + int statusCode = urlConnection.getResponseCode(); + BufferedReader in; + if (statusCode >= 200 && statusCode < 300) { + in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + } else { + in = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream())); + } + + StringBuilder response = new StringBuilder(); + String line; + while ((line = in.readLine()) != null) { + response.append(line); + } + in.close(); + + return response.toString(); + + } catch (Exception e) { + this.exception = e; + return null; + } + } + + @Override + protected void onPostExecute(String result) { + if (callback != null) { + if (exception == null) { + callback.run(result); + } else { + callback.run(null); + } + } + } +} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java new file mode 100644 index 000000000..e01ec11b7 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java @@ -0,0 +1,92 @@ +package org.telegram.ui.web; + + +import android.os.AsyncTask; + +import org.telegram.messenger.Utilities; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +public class HttpPostTask extends AsyncTask { + + private final String dataMime; + private final String data; + private final Utilities.Callback callback; + private final HashMap headers = new HashMap<>(); + + private Exception exception; + + public HttpPostTask( + String mime, String data, + Utilities.Callback callback + ) { + this.dataMime = mime; + this.data = data; + this.callback = callback; + } + + public HttpPostTask setHeader(String key, String value) { + headers.put(key, value); + return this; + } + + @Override + protected String doInBackground(String... params) { + String urlString = params[0]; + + try { + URL url = new URL(urlString); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection.setRequestMethod("POST"); + for (Map.Entry e : headers.entrySet()) { + if (e.getKey() == null || e.getValue() == null) continue; + urlConnection.setRequestProperty(e.getKey(), e.getValue()); + } + urlConnection.setDoOutput(true); + + urlConnection.setRequestProperty("Content-Type", dataMime); + try (OutputStream os = urlConnection.getOutputStream()) { + byte[] input = data.getBytes("utf-8"); + os.write(input, 0, input.length); + } + + int statusCode = urlConnection.getResponseCode(); + BufferedReader in; + if (statusCode >= 200 && statusCode < 300) { + in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + } else { + in = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream())); + } + + StringBuilder response = new StringBuilder(); + String line; + while ((line = in.readLine()) != null) { + response.append(line); + } + in.close(); + + return response.toString(); + + } catch (Exception e) { + this.exception = e; + return null; + } + } + + @Override + protected void onPostExecute(String result) { + if (callback != null) { + if (exception == null) { + callback.run(result); + } else { + callback.run(null); + } + } + } +} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java b/TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java new file mode 100644 index 000000000..19733471b --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java @@ -0,0 +1,154 @@ +package org.telegram.ui.web; + +import android.content.SharedPreferences; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.MessagesController; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; + +public class RestrictedDomainsList { + + private static RestrictedDomainsList instance; + public static RestrictedDomainsList getInstance() { + if (instance == null) { + instance = new RestrictedDomainsList(); + } + return instance; + } + + public final HashMap openedDomains = new HashMap<>(); + public final HashSet restrictedDomainsSet = new HashSet<>(); + public final ArrayList> restrictedDomains = new ArrayList<>(); + + private boolean loaded; + public void load() { + if (loaded) { + return; + } + SharedPreferences prefs = MessagesController.getGlobalMainSettings(); + try { + JSONObject o = new JSONObject(prefs.getString("web_opened_domains", "{}")); + Iterator i = o.keys(); + while (i.hasNext()) { + String key = i.next(); + openedDomains.put(key, o.getInt(key)); + } + } catch (Exception e) { + FileLog.e(e); + } + try { + JSONArray o = new JSONArray(prefs.getString("web_restricted_domains2", "[]")); + for (int i = 0; i < o.length(); ++i) { + final JSONArray array = o.getJSONArray(i); + final ArrayList domains = new ArrayList<>(); + for (int j = 0; j < array.length(); ++j) { + final String domain = array.getString(j); + restrictedDomainsSet.add(domain); + domains.add(domain); + } + restrictedDomains.add(domains); + } + } catch (Exception e) { + FileLog.e(e); + } + loaded = true; + } + + public int incrementOpen(String domain) { + load(); + Integer count = openedDomains.get(domain); + if (count == null) count = 0; + count++; + openedDomains.put(domain, count); + scheduleSave(); + return count; + } + + public boolean isRestricted(String ...domains) { + load(); + for (String domain : domains) { + if (restrictedDomainsSet.contains(domain)) + return true; + } + return false; + } + + public boolean isRestricted(String domain) { + load(); + return restrictedDomainsSet.contains(domain); + } + + public void setRestricted(boolean restricted, String ...domains) { + load(); + int index = -1; + for (int i = 0; i < restrictedDomains.size(); ++i) { + for (int j = 0; j < domains.length; ++j) { + if (domains[j] != null && restrictedDomains.get(i).contains(domains[j])) { + index = i; + break; + } + } + if (index >= 0) break; + } + final boolean wasRestricted = isRestricted(domains); + if (restricted != wasRestricted) { + if (restricted) { + final ArrayList newList = new ArrayList<>(); + for (int j = 0; j < domains.length; ++j) { + if (domains[j] != null) { + newList.add(domains[j]); + } + } + restrictedDomainsSet.addAll(newList); + restrictedDomains.add(newList); + } else { + restrictedDomainsSet.removeAll( + restrictedDomains.remove(index) + ); + } + scheduleSave(); + } + } + + public void scheduleSave() { + AndroidUtilities.cancelRunOnUIThread(this::save); + AndroidUtilities.runOnUIThread(this::save, 1_000); + } + + public void save() { + SharedPreferences prefs = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor edit = prefs.edit(); + try { + JSONObject o = new JSONObject(); + for (Map.Entry e : openedDomains.entrySet()) { + o.put(e.getKey(), e.getValue()); + } + edit.putString("web_opened_domains", o.toString()); + } catch (Exception e) { + FileLog.e(e); + } + try { + JSONArray o = new JSONArray(); + for (ArrayList domains : restrictedDomains) { + JSONArray array = new JSONArray(); + for (String domain : domains) { + array.put(domain); + } + o.put(array); + } + edit.putString("web_restricted_domains2", o.toString()); + } catch (Exception e) { + FileLog.e(e); + } + edit.apply(); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java b/TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java new file mode 100644 index 000000000..39315e484 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java @@ -0,0 +1,124 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.LocaleController.getString; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.Utilities; + +import java.net.URLEncoder; +import java.util.ArrayList; + +/* + * You can add your own search engines of preference with extending custom langpack with such keys: + * - SearchEngine6Name — name of your search engine + * - SearchEngine6SearchURL — url of search, query would be put at the end of the url + * - SearchEngine6AutocompleteURL — url of autocomplete, query would be put at the end of the url + * - SearchEngine6PrivacyPolicyURL — privacy policy url to show in a dialog + * */ +public class SearchEngine { + + @NonNull + public final String name; + @Nullable + public final String search_url; + @Nullable + public final String autocomplete_url; + @Nullable + public final String privacy_policy_url; + + public SearchEngine( + @NonNull String name, + @Nullable String search_url, + @Nullable String autocomplete_url, + @Nullable String privacy_policy_url + ) { + this.name = name; + this.search_url = search_url; + this.autocomplete_url = autocomplete_url; + this.privacy_policy_url = privacy_policy_url; + } + + public String getSearchURL(String query) { + if (search_url == null) return null; + return search_url + URLEncoder.encode(query); + } + + public String getAutocompleteURL(String query) { + if (autocomplete_url == null) return null; + return autocomplete_url + URLEncoder.encode(query); + } + + public String getPrivacyPolicyURL() { + return privacy_policy_url; + } + + public ArrayList extractSuggestions(String json) { + final ArrayList array = new ArrayList<>(); + try { + JSONArray arr = new JSONArray(json); + JSONArray suggs = arr.getJSONArray(1); + for (int i = 0; i < suggs.length(); ++i) { + array.add(suggs.getString(i)); + } + } catch (Exception e) { + FileLog.e(e, false); + try { + JSONObject obj = new JSONObject(json); + JSONArray arr = obj.getJSONObject("gossip").getJSONArray("results"); + for (int i = 0; i < arr.length(); ++i) { + array.add(arr.getJSONObject(i).getString("key")); + } + } catch (Exception e2) { + FileLog.e(e2, false); + try { + JSONArray arr = new JSONArray(json); + for (int i = 0; i < arr.length(); ++i) { + String phrase = arr.getJSONObject(i).getString("phrase"); + if (!TextUtils.isEmpty(phrase)) { + array.add(phrase); + } + } + } catch (Exception e3) { + FileLog.e(e3, false); + } + } + } + return array; + } + + private static ArrayList searchEngines; + public static ArrayList getSearchEngines() { + if (searchEngines == null) { + searchEngines = new ArrayList<>(); + for (int i = 1; true; ++i) { + final String name = nullable(getString("SearchEngine" + i + "Name")); + if (name == null) break; + final String search_url = nullable(getString("SearchEngine" + i + "SearchURL")); + final String autocomplete_url = nullable(getString("SearchEngine" + i + "AutocompleteURL")); + final String privacy_policy_url = nullable(getString("SearchEngine" + i + "PrivacyPolicyURL")); + searchEngines.add(new SearchEngine(name, search_url, autocomplete_url, privacy_policy_url)); + } + } + return searchEngines; + } + + private static String nullable(String s) { + if (s == null || s.startsWith("LOC_ERR") || "reserved".equals(s)) return null; + return s; + } + + public static SearchEngine getCurrent() { + final ArrayList searchEngines = getSearchEngines(); + final int index = Utilities.clamp(SharedConfig.searchEngineType, searchEngines.size() - 1, 0); + return searchEngines.get(index); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java b/TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java new file mode 100644 index 000000000..437ebdd56 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java @@ -0,0 +1,1067 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.ColorUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.Emoji; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.R; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.Utilities; +import org.telegram.ui.ActionBar.BackDrawable; +import org.telegram.ui.ActionBar.OKLCH; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ArticleViewer; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ItemOptions; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.LineProgressView; +import org.telegram.ui.GradientClip; + +public class WebActionBar extends FrameLayout { + + private final Theme.ResourcesProvider resourcesProvider; + + public final RectF rect = new RectF(); + + public final Title[] titles = new Title[2]; + public float titleProgress = 0f; + public final float[] progress = new float[2]; + + public boolean[] colorSet = new boolean[3]; + public final Paint[] backgroundPaint = new Paint[2]; + public final Paint[] progressBackgroundPaint = new Paint[2]; + public final Paint[] shadowPaint = new Paint[2]; + public final Paint scrimPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint addressBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint addressRoundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public int textColor, iconColor; + public int addressBackgroundColor, addressTextColor; + + public int height = dp(56); + public float scale = 1f; + + public final LinearLayout leftmenu; + public final LinearLayout rightmenu; + + public final ImageView clearButton; + public final Drawable clearButtonSelector; + + public final ImageView backButton; + public final BackDrawable backButtonDrawable; + public final Drawable backButtonSelector; + + public final ImageView forwardButton; + public final ForwardDrawable forwardButtonDrawable; + public final Drawable forwardButtonSelector; + + public final ImageView menuButton; + public final Drawable menuButtonSelector; + + public boolean searching; + public float searchingProgress = 0f; + public final FrameLayout searchContainer; + public final EditTextBoldCursor searchEditText; + + public boolean addressing; + public float addressingProgress = 0f; + public final FrameLayout addressContainer; + public final EditTextBoldCursor addressEditText; + private int searchEngineIndex; + + public final LineProgressView lineProgressView; + + public static final int search_item = 1; + public static final int share_item = 2; + public static final int open_item = 3; + public static final int settings_item = 4; + public static final int reload_item = 5; + public static final int bookmark_item = 6; + public static final int bookmarks_item = 7; + public static final int history_item = 8; + public static final int forward_item = 9; + + public WebActionBar(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + this.resourcesProvider = resourcesProvider; + + for (int i = 0; i < 2; ++i) { + backgroundPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG); + progressBackgroundPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG); + shadowPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG); + } + + searchContainer = new FrameLayout(context); + addView(searchContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL)); + + addressContainer = new FrameLayout(context); + addView(addressContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL)); + + leftmenu = new LinearLayout(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setPivotY(ArticleViewer.BOTTOM_ACTION_BAR ? getMeasuredHeight() : 0); + setPivotX(0); + } + }; + leftmenu.setOrientation(LinearLayout.HORIZONTAL); + addView(leftmenu, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 56, Gravity.LEFT | Gravity.BOTTOM)); + + backButton = new ImageView(context); + backButton.setScaleType(ImageView.ScaleType.CENTER); + backButtonDrawable = new BackDrawable(false); + backButtonDrawable.setAnimationTime(200.0f); + backButtonDrawable.setRotation(1.0f, false); + backButton.setImageDrawable(backButtonDrawable); + backButton.setBackground(backButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + leftmenu.addView(backButton, LayoutHelper.createLinear(54, 56)); + + rightmenu = new LinearLayout(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setPivotY(ArticleViewer.BOTTOM_ACTION_BAR ? getMeasuredHeight() : 0); + setPivotX(getMeasuredWidth()); + } + }; + rightmenu.setOrientation(LinearLayout.HORIZONTAL); + addView(rightmenu, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 56, Gravity.RIGHT | Gravity.BOTTOM)); + + forwardButton = new ImageView(context); + forwardButton.setScaleType(ImageView.ScaleType.CENTER); + forwardButton.setImageDrawable(forwardButtonDrawable = new ForwardDrawable()); + forwardButtonDrawable.setState(false); + forwardButton.setBackground(forwardButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + rightmenu.addView(forwardButton, LayoutHelper.createLinear(54, 56)); + + menuButton = new ImageView(context); + menuButton.setScaleType(ImageView.ScaleType.CENTER); + menuButton.setImageResource(R.drawable.ic_ab_other); + menuButton.setColorFilter(new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_IN)); + menuButton.setOnClickListener(v -> { + if (!(getParent() instanceof ViewGroup)) return; + Utilities.CallbackReturn click = id -> () -> menuListener.run(id); + ItemOptions o = ItemOptions.makeOptions((ViewGroup) getParent(), menuButton); + o.setDimAlpha(0); + o.setColors(menuTextColor, menuIconColor); + o.translate(0, -dp(52)); + o.setMinWidth(200); + o.setSelectorColor(Theme.blendOver(menuBackgroundColor, Theme.multAlpha(menuTextColor, .1f))); + if (AndroidUtilities.computePerceivedBrightness(menuBackgroundColor) > .721f) { + o.setBackgroundColor(0xFFFFFFFF); + o.setGapBackgroundColor(0xFFF0F0F0); + } else { + o.setBackgroundColor(0xFF1F1F1F); + o.setGapBackgroundColor(0xFF121212); + } + if (menuType == ArticleViewer.PageLayout.TYPE_ARTICLE) { + o.add(R.drawable.msg_openin, getString(R.string.OpenInExternalApp), click.run(open_item)); + o.add(R.drawable.msg_search, getString(R.string.Search), click.run(search_item)); + o.add(R.drawable.msg_share, getString(R.string.ShareFile), click.run(share_item)); + o.add(R.drawable.msg_settings_old, getString(R.string.Settings), click.run(settings_item)); + } else if (menuType == ArticleViewer.PageLayout.TYPE_WEB) { + if (!isTonsite) { + o.add(R.drawable.msg_openin, getString(R.string.OpenInExternalApp), click.run(open_item)); + o.addGap(); + } + if (hasForward) { + o.add(R.drawable.msg_arrow_forward, getString(R.string.WebForward), click.run(forward_item)); + } + o.add(R.drawable.msg_reset, getString(R.string.Refresh), click.run(reload_item)); + o.add(R.drawable.msg_search, getString(R.string.Search), click.run(search_item)); + o.add(R.drawable.msg_saved, getString(R.string.WebBookmark), click.run(bookmark_item)); + o.add(R.drawable.msg_share, getString(R.string.ShareFile), click.run(share_item)); + o.addGap(); + if (!BrowserHistory.getHistory().isEmpty()) { + o.add(R.drawable.menu_views_recent, getString(R.string.WebHistory), click.run(history_item)); + } + o.add(R.drawable.menu_browser_bookmarks, getString(R.string.WebBookmarks), click.run(bookmarks_item)); + o.add(R.drawable.msg_settings_old, getString(R.string.Settings), click.run(settings_item)); + } + o.show(); + }); + menuButton.setBackground(menuButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + menuButton.setContentDescription(getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); + rightmenu.addView(menuButton, LayoutHelper.createLinear(54, 56)); + + searchEditText = new EditTextBoldCursor(context) { + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (!AndroidUtilities.showKeyboard(this)) { + clearFocus(); + requestFocus(); + } + } + return super.onTouchEvent(event); + } + }; + searchEditText.setVisibility(GONE); + searchEditText.setAlpha(0f); + searchEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); + searchEditText.setSingleLine(true); + searchEditText.setHint(getString(R.string.Search)); + searchEditText.setBackgroundResource(0); + searchEditText.setCursorWidth(1.5f); + searchEditText.setGravity(Gravity.FILL_VERTICAL); + searchEditText.setClipToPadding(true); + searchEditText.setPadding(dp(54 + 4), 0, dp(54 + 54 + 4), 0); + searchEditText.setTranslationY(-dp(.66f)); + searchEditText.setInputType(searchEditText.getInputType() | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS); + searchEditText.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_SEARCH); + searchEditText.setTextIsSelectable(false); + searchEditText.setOnEditorActionListener((v, actionId, event) -> { + if (event != null && (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == KeyEvent.KEYCODE_SEARCH || event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + AndroidUtilities.hideKeyboard(searchEditText); + } + return false; + }); + searchEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + @Override + public void afterTextChanged(Editable s) { + AndroidUtilities.updateViewShow(clearButton, s.length() > 0 && searching, true, true); + onSearchUpdated(s.toString()); + } + }); + searchContainer.addView(searchEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + + addressEditText = new EditTextBoldCursor(context) { + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (!AndroidUtilities.showKeyboard(this)) { + clearFocus(); + requestFocus(); + } + } + return super.onTouchEvent(event); + } + }; + addressEditText.setVisibility(GONE); + addressEditText.setAlpha(0f); + addressEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15.66f); + addressEditText.setSingleLine(true); + searchEngineIndex = SharedConfig.searchEngineType; + addressEditText.setHint(LocaleController.formatString(R.string.AddressPlaceholder, SearchEngine.getCurrent().name)); + addressEditText.setBackgroundResource(0); + addressEditText.setCursorWidth(1.5f); + addressEditText.setGravity(Gravity.FILL_VERTICAL); + addressEditText.setInputType(addressEditText.getInputType() | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS); + addressEditText.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_GO); + addressEditText.setTextIsSelectable(false); + addressEditText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_GO) { + if (urlCallback != null) { + urlCallback.run(addressEditText.getText().toString()); + } + showAddress(false, true); + } + return false; + }); + addressContainer.addView(addressEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL, 48, 0, 12, 0)); + + clearButton = new ImageView(context); + clearButton.setScaleType(ImageView.ScaleType.CENTER); + clearButton.setImageResource(R.drawable.ic_close_white); + clearButton.setBackground(clearButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + clearButton.setVisibility(GONE); + clearButton.setAlpha(0f); + clearButton.setOnClickListener(v -> { + searchEditText.setText(""); + }); + addView(clearButton, LayoutHelper.createFrame(54, 56, Gravity.BOTTOM | Gravity.RIGHT)); + + lineProgressView = new LineProgressView(context); + lineProgressView.setPivotX(0.0f); + lineProgressView.setPivotY(ArticleViewer.BOTTOM_ACTION_BAR ? 0 : dp(2)); + addView(lineProgressView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 2, (ArticleViewer.BOTTOM_ACTION_BAR ? Gravity.TOP : Gravity.BOTTOM) | Gravity.FILL_HORIZONTAL)); + + setWillNotDraw(false); + + titles[0] = new Title(); + titles[1] = new Title(); + + setColors(Theme.getColor(Theme.key_iv_background, resourcesProvider), false); + setMenuColors(Theme.getColor(Theme.key_iv_background, resourcesProvider)); + } + + private boolean occupyStatusBar; + public void occupyStatusBar(boolean occupyStatusBar) { + this.occupyStatusBar = occupyStatusBar; + } + + protected void onOpenedMenu() {} + protected void onSearchUpdated(String s) {} + protected void onColorsUpdated() {} + protected void onScrolledProgress(float delta) {} + + public void setTitle(String title, boolean animated) { + setTitle(0, title, animated); + } + + public void setTitle(int i, String title, boolean animated) { + CharSequence prevText = titles[i].title.getText(); + if (prevText == null || !TextUtils.equals(prevText.toString(), title)) { + CharSequence cs = title; + cs = Emoji.replaceEmoji(cs, titles[i].title.getPaint().getFontMetricsInt(), false); + titles[i].title.setText(cs, animated); + } + } + + public void setSubtitle(String subtitle, boolean animated) { + setSubtitle(0, subtitle, animated); + } + public void setSubtitle(int i, String subtitle, boolean animated) { + CharSequence prevText = titles[i].subtitle.getText(); + if (prevText == null || !TextUtils.equals(prevText.toString(), subtitle)) { + CharSequence cs = subtitle; + cs = Emoji.replaceEmoji(cs, titles[i].subtitle.getPaint().getFontMetricsInt(), false); + titles[i].subtitle.setText(cs, animated); + } + } + + public void setIsDangerous(int i, boolean isDangerous, boolean animated) { + if (titles[i].isDangerous != isDangerous) { + titles[i].isDangerous = isDangerous; + if (!animated) { + titles[i].animatedDangerous.set(isDangerous ? 1f : 0f, true); + } + invalidate(); + } + } + + public String getTitle() { + final CharSequence text = titles[0].title.getText(); + if (text == null) return ""; + return text.toString(); + } + + public void swap() { + Title t = titles[0]; + titles[0] = titles[1]; + titles[1] = t; + + float p = progress[0]; + progress[0] = progress[1]; + progress[1] = p; + + int c = getBackgroundColor(0); + setBackgroundColor(0, getBackgroundColor(1)); + setBackgroundColor(1, c); + + invalidate(); + } + + private Utilities.Callback menuListener; + public void setMenuListener(Utilities.Callback menuListener) { + this.menuListener = menuListener; + } + + private int menuType = -1; + public void setMenuType(int type) { + if (menuType != type) { + menuType = type; + } + } + + public void setTransitionProgress(float progress) { + titleProgress = progress; + invalidate(); + } + + public void setProgress(float progress) { + setProgress(0, progress); + } + public void setProgress(int i, float progress) { + this.progress[i] = progress; + invalidate(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(topPadding() + dp(56), MeasureSpec.EXACTLY)); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + } + + private int fromBackgroundColor, fromIconColor; + private int toBackgroundColor; + private int backgroundColor; + private int rippleColor; + private ValueAnimator colorAnimator; + + public void setBackgroundColor(int i, int backgroundColor) { + if (colorSet[i] && backgroundPaint[i].getColor() == backgroundColor) + return; + colorSet[i] = true; + backgroundPaint[i].setColor(backgroundColor); + final float dark = AndroidUtilities.computePerceivedBrightness(backgroundColor) <= .721f ? 1f : 0f; + final int iconColor = ColorUtils.blendARGB(Color.BLACK, Color.WHITE, dark); + progressBackgroundPaint[i].setColor(Theme.blendOver(backgroundColor, Theme.multAlpha(iconColor, lerp(.07f, .2f, dark)))); + shadowPaint[i].setColor(Theme.blendOver(backgroundColor, Theme.multAlpha(iconColor, lerp(.14f, .24f, dark)))); + titles[i].title.setTextColor(iconColor); + titles[i].subtitleColor = Theme.blendOver(backgroundColor, Theme.multAlpha(iconColor, .6f)); + titles[i].subtitle.setTextColor(ColorUtils.blendARGB(titles[i].subtitleColor, Theme.getColor(Theme.key_text_RedBold), titles[i].animatedDangerous.get())); + invalidate(); + } + + public int getBackgroundColor(int i) { + return backgroundPaint[i].getColor(); + } + + public int menuBackgroundColor; + public int menuTextColor; + public int menuIconColor; + public boolean hasForward; + public boolean isTonsite; + + public void setHasForward(boolean value) { + this.hasForward = value; + } + + public void setMenuColors(int backgroundColor) { + double[] lch = OKLCH.rgb2oklch(OKLCH.rgb(backgroundColor)); + final boolean isDark = lch[0] < .5f; + menuBackgroundColor = isDark ? Color.BLACK : Color.WHITE; + menuTextColor = isDark ? Color.WHITE : Color.BLACK; + menuIconColor = Theme.multAlpha(menuTextColor, .6f); + } + + public void setIsTonsite(boolean value) { + this.isTonsite = value; + } + + public void setColors(int backgroundColor, boolean animated) { + setColors(backgroundColor, -1f, animated); + } + + public void setColors(int backgroundColor, float dark, boolean animated) { + if (colorSet[2] && this.backgroundColor == backgroundColor) { + return; + } + + if (!animated) { + colorSet[2] = true; + if (dark < 0) { + dark = AndroidUtilities.computePerceivedBrightness(backgroundColor) <= .721f ? 1f : 0f; + } + + this.textColor = ColorUtils.blendARGB(Color.BLACK, Color.WHITE, dark); + this.iconColor = Theme.multAlpha(textColor, .55f); + + this.backgroundColor = backgroundColor; + +// double[] lch = OKLCH.rgb2oklch(OKLCH.rgb(backgroundColor)); +// final boolean isDark = lch[0] < .5f; +// if (isDark) { +// lch[0] = Utilities.clamp(lch[0], 0.025, 0); +// } else { +// lch[0] = Utilities.clamp(lch[0], 1, 0.975); +// } +// lch[1] = Utilities.clamp(lch[1], 0.01, 0); +// addressBackgroundColor = OKLCH.rgb(OKLCH.oklch2rgb(lch)); +// addressTextColor = isDark ? Color.WHITE : Color.BLACK; + addressBackgroundColor = ColorUtils.blendARGB(Color.WHITE, Color.BLACK, dark); + addressTextColor = ColorUtils.blendARGB(Color.WHITE, Color.BLACK, 1f - dark); + onAddressColorsChanged(addressBackgroundColor, addressTextColor); + addressBackgroundPaint.setColor(addressBackgroundColor); + addressRoundPaint.setColor(Theme.blendOver(addressBackgroundColor, Theme.multAlpha(textColor, lerp(.07f, .2f, dark)))); + addressEditText.setHintTextColor(Theme.multAlpha(addressTextColor, .6f)); + addressEditText.setTextColor(addressTextColor); + addressEditText.setCursorColor(addressTextColor); + addressEditText.setHandlesColor(addressTextColor); + + lineProgressView.setProgressColor(Theme.getColor(Theme.key_iv_ab_progress, resourcesProvider)); + + backButtonDrawable.setColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + backButtonDrawable.setRotatedColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + forwardButtonDrawable.setColor(textColor); + menuButton.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + forwardButton.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + clearButton.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + + rippleColor = Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, .22f)); + Theme.setSelectorDrawableColor(backButtonSelector, rippleColor, true); + Theme.setSelectorDrawableColor(forwardButtonSelector, rippleColor, true); + Theme.setSelectorDrawableColor(menuButtonSelector, rippleColor, true); + Theme.setSelectorDrawableColor(clearButtonSelector, rippleColor, true); + + searchEditText.setHintTextColor(Theme.multAlpha(textColor, .6f)); + searchEditText.setTextColor(textColor); + searchEditText.setCursorColor(textColor); + searchEditText.setHandlesColor(textColor); + + onColorsUpdated(); + + invalidate(); + + return; + } + + if (colorAnimator != null) { + colorAnimator.cancel(); + } + fromBackgroundColor = this.backgroundColor; + final float fromDark = AndroidUtilities.computePerceivedBrightness(fromBackgroundColor) <= .721f ? 1f : 0f; + final float toDark = AndroidUtilities.computePerceivedBrightness(backgroundColor) <= .721f ? 1f : 0f; + colorAnimator = ValueAnimator.ofFloat(0, 1); + colorAnimator.addUpdateListener(anm -> { + final float t = (float) anm.getAnimatedValue(); + setColors(ColorUtils.blendARGB(fromBackgroundColor, backgroundColor, t), lerp(fromDark, toDark, t), false); + }); + colorAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + setColors(backgroundColor, toDark, false); + } + }); + colorAnimator.start(); + } + + protected void onAddressColorsChanged(int backgroundColor, int textColor) { + + } + + public int getBackgroundColor() { + return this.backgroundColor; + } + + public int getTextColor() { + return textColor; + } + + public void setHeight(int h) { + if (this.height != h) { + this.height = h; + + scale = (float) Math.pow(h / (float) dp(56), 0.5f); + leftmenu.setScaleX(scale); + leftmenu.setScaleY(scale); + leftmenu.setTranslationX(dp(42) * (1f - scale)); + leftmenu.setTranslationY(dp(ArticleViewer.BOTTOM_ACTION_BAR ? 16 : -12) * (1f - scale)); + rightmenu.setScaleX(scale); + rightmenu.setScaleY(scale); + rightmenu.setTranslationX(-dp(42) * (1f - scale)); + rightmenu.setTranslationY(dp(ArticleViewer.BOTTOM_ACTION_BAR ? 16 : -12) * (1f - scale)); + + lineProgressView.setTranslationY(height - dp(56)); + + invalidate(); + } + } + + public final GradientClip clip = new GradientClip(); + + public class Title { + + public final AnimatedTextView.AnimatedTextDrawable title = new AnimatedTextView.AnimatedTextDrawable(true, true, true); + public final AnimatedTextView.AnimatedTextDrawable subtitle = new AnimatedTextView.AnimatedTextDrawable(true, true, true); + public final AnimatedFloat animatedDangerous = new AnimatedFloat(WebActionBar.this, 0, 300, CubicBezierInterpolator.EASE_OUT_QUINT); + public int subtitleColor; + + public boolean isDangerous = false; + public int warningDrawableColor; + public final Drawable warningDrawable; + + public Title() { + title.ignoreRTL = true; + title.setTextSize(dp(18.33f)); + title.setScaleProperty(.6f); + title.setTypeface(AndroidUtilities.bold()); + title.setEllipsizeByGradient(false); + title.setCallback(WebActionBar.this); + title.setOverrideFullWidth(9999999); + + subtitle.ignoreRTL = true; + subtitle.setTextSize(dp(14)); + subtitle.setEllipsizeByGradient(false); + subtitle.setCallback(WebActionBar.this); + subtitle.setOverrideFullWidth(9999999); + + warningDrawable = getContext().getResources().getDrawable(R.drawable.warning_sign).mutate(); + } + + public void draw(Canvas canvas, float w, float h, float alpha) { + rect.set(0, 0, w, h); + canvas.saveLayerAlpha(rect, (int) (0xFF * alpha), Canvas.ALL_SAVE_FLAG); + + final float both = title.isNotEmpty() * subtitle.isNotEmpty(); + + canvas.save(); + canvas.translate(0, -dp(1) + h * (ArticleViewer.BOTTOM_ACTION_BAR ? .41f : .82f) * (1f - scale)); + canvas.translate(0, -dp(4) * both); + float s = scale * lerp(1f, .86f, both); + canvas.scale(s, s, 0, 0); + title.setBounds(0, 0, w, h); + title.draw(canvas); + canvas.restore(); + + final float dangerous = animatedDangerous.set(isDangerous); + + canvas.save(); + canvas.translate(0, -dp(1) + h * (ArticleViewer.BOTTOM_ACTION_BAR ? .41f : .82f) * (1f - scale) * both + dp(14) * both - dp(4) * (1f - both)); + s = scale * lerp(1.15f, .9f, both); + canvas.scale(s, s, 0, 0); + subtitle.setTextColor(ColorUtils.blendARGB(subtitleColor, Theme.getColor(Theme.key_text_RedBold), dangerous)); + if (dangerous > 0) { + if (warningDrawableColor != subtitle.getTextColor()) { + warningDrawable.setColorFilter(new PorterDuffColorFilter(warningDrawableColor = subtitle.getTextColor(), PorterDuff.Mode.SRC_IN)); + } + warningDrawable.setAlpha((int) (0xFF * dangerous)); + warningDrawable.setBounds(0, (int) (h - dp(16)) / 2, dp(16), (int) (h + dp(16)) / 2); + warningDrawable.draw(canvas); + } + subtitle.setBounds(dp(20) * dangerous, 0, w, h); + subtitle.draw(canvas); + canvas.restore(); + + rect.set(w - dp(12), 0, w, h); + clip.draw(canvas, rect, GradientClip.RIGHT, 1f); + canvas.restore(); + } + + } + + public int topPadding() { + return occupyStatusBar ? AndroidUtilities.statusBarHeight : 0; + } + + public void drawBackground(Canvas canvas, float h, float alpha, float shadowalpha, boolean withShadow) { + final float shadowh = Math.max(dp(0.66f), 1); + float t = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() - h : 0; + float b = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() : h; + float shadowt = ArticleViewer.BOTTOM_ACTION_BAR ? t : b - shadowh; + + float l = getWidth() * titleProgress; + int wasAlpha; + + rect.set(0, t, getWidth(), b); + wasAlpha = backgroundPaint[1].getAlpha(); + backgroundPaint[1].setAlpha((int) (wasAlpha * alpha)); + canvas.drawRect(rect, backgroundPaint[1]); + backgroundPaint[1].setAlpha(wasAlpha); + + if (titleProgress > 0f) { + rect.set(0, t, progress[1] * getWidth(), b); + wasAlpha = progressBackgroundPaint[1].getAlpha(); + progressBackgroundPaint[1].setAlpha((int) (wasAlpha * alpha * (1f - searchingProgress) * (1f - addressingProgress))); + canvas.drawRect(rect, progressBackgroundPaint[1]); + progressBackgroundPaint[1].setAlpha(wasAlpha); + + if (withShadow) { + rect.set(0, shadowt, l, shadowt + shadowh); + wasAlpha = shadowPaint[1].getAlpha(); + shadowPaint[1].setAlpha((int) (wasAlpha * alpha * shadowalpha * (1f - addressingProgress))); + canvas.drawRect(rect, shadowPaint[1]); + shadowPaint[1].setAlpha(wasAlpha); + } + } + + if (titleProgress < 1f) { + scrimPaint.setColor(Theme.multAlpha(0x60000000, (1f - titleProgress) * alpha)); + rect.set(0, t, l, b); + canvas.drawRect(rect, scrimPaint); + + rect.set(l, t, getWidth(), b); + wasAlpha = backgroundPaint[0].getAlpha(); + backgroundPaint[0].setAlpha((int) (wasAlpha * alpha)); + canvas.drawRect(rect, backgroundPaint[0]); + backgroundPaint[0].setAlpha(wasAlpha); + } + + rect.set(l, t, l + progress[0] * getWidth(), b); + wasAlpha = progressBackgroundPaint[0].getAlpha(); + progressBackgroundPaint[0].setAlpha((int) ((1f - Utilities.clamp01(titleProgress * 4)) * wasAlpha * alpha * (1f - searchingProgress) * (1f - addressingProgress))); + canvas.drawRect(rect, progressBackgroundPaint[0]); + progressBackgroundPaint[0].setAlpha(wasAlpha); + + if (withShadow) { + rect.set(l, shadowt, l + getWidth(), shadowt + shadowh); + wasAlpha = shadowPaint[0].getAlpha(); + shadowPaint[0].setAlpha((int) (wasAlpha * alpha * shadowalpha * (1f - addressingProgress))); + canvas.drawRect(rect, shadowPaint[0]); + shadowPaint[0].setAlpha(wasAlpha); + } + } + + public boolean drawShadow; + @Override + protected void dispatchDraw(Canvas canvas) { + drawBackground(canvas, topPadding() + height, 1f, 1f, drawShadow); + + float left = leftmenu.getRight(); + float right = rightmenu.getLeft(); + float top = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() - height : topPadding(); + float bottom = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() : topPadding() + height; + + if (titleProgress < 1) { + canvas.save(); + final float leftpadding = getWidth() * titleProgress - dp(54 - 24) * Utilities.clamp01(2 * titleProgress); + canvas.translate(left + leftpadding, top); + final float s = lerp(1f, .5f, titleProgress); + titles[0].draw(canvas, right - left - leftpadding, bottom - top, (1f - titleProgress) * (1f - searchingProgress)); + canvas.restore(); + } + if (titleProgress > 0) { + float l = getWidth() * titleProgress; + canvas.save(); + canvas.clipRect(0, 0, l, getHeight()); + canvas.translate(left, top); + canvas.translate(dp(-12) * (1f - titleProgress), 0); + final float s = lerp(1f, .5f, 1f - titleProgress); + canvas.scale(s, s, 0, (bottom - top) / 2f); + titles[1].draw(canvas, right - left, bottom - top, titleProgress * (1f - searchingProgress) * (1f - addressingProgress)); + canvas.restore(); + } + + if (addressingProgress > 0) { + int wasAlpha = addressBackgroundPaint.getAlpha(); + addressBackgroundPaint.setAlpha((int) (wasAlpha * addressingProgress)); + canvas.drawRect(0, 0, getWidth(), topPadding() + height, addressBackgroundPaint); + addressBackgroundPaint.setAlpha(wasAlpha); + + final float h = dp(42), cx = (top + bottom) / 2f; + rect.set(dp(6), cx - h / 2f, lerp(right, getWidth() - dp(6), addressingProgress), cx + h / 2f); + wasAlpha = addressRoundPaint.getAlpha(); + addressRoundPaint.setAlpha((int) (wasAlpha * addressingProgress)); + canvas.drawRoundRect(rect, dp(50), dp(50), addressRoundPaint); + addressRoundPaint.setAlpha(wasAlpha); + } + + rect.set(0, top, getWidth(), bottom); + canvas.save(); + canvas.clipRect(rect); + + super.dispatchDraw(canvas); + canvas.restore(); + } + + private ValueAnimator searchAnimator; + public void showSearch(boolean show, boolean animated) { + if (searching == show) return; + if (searchAnimator != null) { + searchAnimator.cancel(); + } + searching = show; + if (animated) { + searchEditText.setVisibility(VISIBLE); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + searchAnimator = ValueAnimator.ofFloat(searchingProgress, show ? 1 : 0); + searchAnimator.addUpdateListener(anm -> { + searchingProgress = (float) anm.getAnimatedValue(); + searchEditText.setAlpha(searchingProgress); + invalidate(); + }); + searchAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!searching) { + searchEditText.setVisibility(GONE); + searchEditText.setText(""); + } + searchEditText.setAlpha(searchingProgress = show ? 1 : 0f); + invalidate(); + + if (searching) { + searchEditText.requestFocus(); + AndroidUtilities.showKeyboard(searchEditText); + } else { + searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(searchEditText); + } + } + }); + searchAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + searchAnimator.setDuration(320); + searchAnimator.start(); + } else { + searchingProgress = show ? 1f : 0f; + invalidate(); + searchEditText.setAlpha(show ? 1 : 0f); + searchEditText.setVisibility(show ? VISIBLE : GONE); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + if (searching) { + searchEditText.requestFocus(); + AndroidUtilities.showKeyboard(searchEditText); + } else { + searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(searchEditText); + } + } + AndroidUtilities.updateViewShow(forwardButton, !show, true, animated); + AndroidUtilities.updateViewShow(menuButton, !show, true, animated); + AndroidUtilities.updateViewShow(clearButton, searchEditText.length() > 0 && searching, true, animated); + } + + private boolean backButtonShown; + + public void setBackButton(boolean show) { + backButtonShown = show; + if (!isSearching() && !isAddressing()) { + backButtonDrawable.setRotation(backButtonShown ? 0f : 1f, true); + } + } + public void setBackButtonCached(boolean show) { + backButtonShown = show; + } + + public boolean isBackButton() { + return backButtonShown; + } + + public boolean isSearching() { + return searching; + } + + private Utilities.Callback urlCallback; + public void showAddress(String currentUrl, Utilities.Callback urlCallback) { + addressEditText.setText(currentUrl); + addressEditText.setSelection(0, addressEditText.getText().length()); + addressEditText.setScrollX(0); + this.urlCallback = urlCallback; + showAddress(true, true); + } + + private ValueAnimator addressAnimator; + private void showAddressKeyboard() { + if (addressing) { + addressEditText.requestFocus(); + AndroidUtilities.showKeyboard(addressEditText); + } else { + addressEditText.clearFocus(); + AndroidUtilities.hideKeyboard(addressEditText); + } + }; + + public void showAddress(boolean show, boolean animated) { + if (addressing == show) return; + if (addressAnimator != null) { + addressAnimator.cancel(); + } + addressing = show; + if (show) { + if (searchEngineIndex != SharedConfig.searchEngineType) { + searchEngineIndex = SharedConfig.searchEngineType; + addressEditText.setHint(LocaleController.formatString(R.string.AddressPlaceholder, SearchEngine.getCurrent().name)); + } + } + if (animated) { + addressEditText.setVisibility(VISIBLE); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + addressAnimator = ValueAnimator.ofFloat(addressingProgress, show ? 1 : 0); + addressAnimator.addUpdateListener(anm -> { + onAddressingProgress(addressingProgress = (float) anm.getAnimatedValue()); + addressEditText.setAlpha(addressingProgress); + menuButton.setTranslationX(dp(56) * addressingProgress); + forwardButton.setTranslationX(dp(56 + 56) * addressingProgress); + invalidate(); + }); + addressAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!addressing) { + addressEditText.setVisibility(GONE); + } + addressEditText.setAlpha(addressingProgress = show ? 1 : 0f); + onAddressingProgress(addressingProgress); + menuButton.setTranslationX(dp(56) * addressingProgress); + forwardButton.setTranslationX(dp(56 + 56) * addressingProgress); + invalidate(); + } + }); + addressAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + addressAnimator.setDuration(360); + addressAnimator.start(); + } else { + onAddressingProgress(addressingProgress = show ? 1f : 0f); + invalidate(); + addressEditText.setAlpha(show ? 1 : 0f); + addressEditText.setVisibility(show ? VISIBLE : GONE); + menuButton.setTranslationX(dp(56) * addressingProgress); + forwardButton.setTranslationX(dp(56 + 56) * addressingProgress); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + } + AndroidUtilities.cancelRunOnUIThread(this::showAddressKeyboard); + AndroidUtilities.runOnUIThread(this::showAddressKeyboard, addressing ? 100 : 0); + } + + protected void onAddressingProgress(float progress) { + backButtonDrawable.setColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + backButtonDrawable.setRotatedColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + backButton.invalidate(); + } + + public void hideKeyboard() { + if (searching) { + searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(searchEditText); + } + if (addressing) { + addressEditText.clearFocus(); + AndroidUtilities.hideKeyboard(addressEditText); + } + } + + public boolean isAddressing() { + return addressing; + } + + @SuppressLint("MissingSuperCall") + @Override + protected boolean verifyDrawable(@NonNull Drawable who) { + return true; + } + + private float pressX, pressY; + private long pressTime; + private Runnable longPressRunnable = () -> { + longClicked = true; + if (getParent() != null) { + getParent().requestDisallowInterceptTouchEvent(true); + } + performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + }; + + public boolean longClicked = false; + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + longClicked = false; + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + if (ev.getX() > leftmenu.getRight() && ev.getX() < rightmenu.getLeft() && !isSearching() && !isAddressing()) { + pressX = ev.getX(); + pressY = ev.getY(); + pressTime = System.currentTimeMillis(); + AndroidUtilities.runOnUIThread(longPressRunnable, (long) (ViewConfiguration.getLongPressTimeout() * .8f)); + } + } else if (ev.getAction() == MotionEvent.ACTION_MOVE && System.currentTimeMillis() - pressTime > ViewConfiguration.getLongPressTimeout() * .8f) { + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + longClicked = true; + onScrolledProgress((float) (ev.getX() - pressX) / (.8f * getWidth())); + getParent().requestDisallowInterceptTouchEvent(true); + } else if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + pressTime = 0; + } + pressX = ev.getX(); + return super.dispatchTouchEvent(ev); + } + + public class ForwardDrawable extends Drawable { + + private final Path path = new Path(); + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); { + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeJoin(Paint.Join.ROUND); + paint.setStrokeCap(Paint.Cap.ROUND); + } + private AnimatedFloat animatedState = new AnimatedFloat(this::invalidateSelf, 0, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + private boolean state; + + public void setState(boolean state) { // false = collapse, true = forward + this.state = state; + invalidateSelf(); + } + + @Override + public void draw(@NonNull Canvas canvas) { + final float state = this.animatedState.set(!this.state); + + final float cx = getBounds().centerX(), cy = getBounds().centerY(); + final float w = getBounds().width(), aw = w * 0.57f; + + path.rewind(); + path.moveTo(cx - lerp(aw / 2f, -aw / 2f, state), cy); + path.lineTo(cx + aw / 2f, cy); + path.moveTo(cx + aw / 2f - w * .27f, cy - w * .54f / 2f); + path.lineTo(cx + aw / 2f, cy); + path.lineTo(cx + aw / 2f - w * .27f, cy + w * .54f / 2f); + + canvas.save(); + paint.setStrokeWidth(dp(2)); + canvas.translate(0, -w * 0.10f * state); + canvas.rotate(90 * state, cx, cy); + canvas.drawPath(path, paint); + canvas.restore(); + } + + public void setColor(int color) { + paint.setColor(color); + invalidateSelf(); + } + + @Override + public void setAlpha(int alpha) { + + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + + @Override + public int getIntrinsicHeight() { + return dp(24); + } + + @Override + public int getIntrinsicWidth() { + return dp(24); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java b/TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java new file mode 100644 index 000000000..1b2e705f7 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java @@ -0,0 +1,691 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatPluralStringComma; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.text.InputType; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.webkit.CookieManager; +import android.webkit.WebStorage; +import android.webkit.WebView; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.browser.Browser; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.RadioColorCell; +import org.telegram.ui.Cells.TextCell; +import org.telegram.ui.Cells.TextCheckCell; +import org.telegram.ui.Components.CombinedDrawable; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ItemOptions; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Text; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalFragment; + +import java.io.File; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicReference; + +public class WebBrowserSettings extends UniversalFragment implements NotificationCenter.NotificationCenterDelegate { + + private Drawable addIcon; + + private Utilities.Callback whenHistoryClicked; + public WebBrowserSettings(Utilities.Callback whenHistoryClicked) { + this.whenHistoryClicked = whenHistoryClicked; + } + + private long cacheSize, cookiesSize, historySize; + + @Override + public boolean onFragmentCreate() { + loadSizes(); + NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.webViewResolved); + return super.onFragmentCreate(); + } + + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.webViewResolved); + } + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.webViewResolved) { + if (listView != null) { + listView.adapter.update(true); + } + } + } + + private void loadSizes() { + ArrayList history = BrowserHistory.getHistory(loadedHistory -> { + this.historySize = loadedHistory.size(); + if (listView != null && listView.adapter != null && listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + if (history != null) { + this.historySize = history.size(); + if (listView != null && listView.adapter != null && listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + } + + Utilities.globalQueue.postRunnable(() -> { + long cacheSize = 0; + File cache1 = ApplicationLoader.applicationContext.getDatabasePath("webview.db"); + if (cache1 != null && cache1.exists()) { + cacheSize += cache1.length(); + } + File cache2 = ApplicationLoader.applicationContext.getDatabasePath("webviewCache.db"); + if (cache2 != null && cache2.exists()) { + cacheSize += cache2.length(); + } + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir.exists()) { + cacheSize += getDirectorySize(dir, false); + } + File dir2 = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "cache/WebView"); + if (dir2.exists()) { + cacheSize += getDirectorySize(dir2, null); + } + + long cookieSize = 0; + File dir3 = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir3.exists()) { + cookieSize += getDirectorySize(dir3, true); + } + + final long finalCacheSize = cacheSize; + final long finalCookiesSize = cookieSize; + + AndroidUtilities.runOnUIThread(() -> { + this.cacheSize = finalCacheSize; + this.cookiesSize = finalCookiesSize; + if (listView != null && listView.adapter != null && listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + }); + } + + @Override + public View createView(Context context) { + +// if (parentLayout != null && parentLayout.isSheet()) { +// actionBar.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); +// actionBar.setActionModeColor(Theme.getColor(Theme.key_windowBackgroundWhite)); +// actionBar.setBackButtonImage(R.drawable.ic_ab_back); +// actionBar.setTitleColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); +// actionBar.setItemsBackgroundColor(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), false); +// actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), false); +// actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), true); +// actionBar.setCastShadows(true); +// } + + Drawable drawable1 = context.getResources().getDrawable(R.drawable.poll_add_circle).mutate(); + Drawable drawable2 = context.getResources().getDrawable(R.drawable.poll_add_plus).mutate(); + drawable1.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_switchTrackChecked), PorterDuff.Mode.MULTIPLY)); + drawable2.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_checkboxCheck), PorterDuff.Mode.MULTIPLY)); + addIcon = new CombinedDrawable(drawable1, drawable2) { + { translateX = dp(2); } + @Override + public void setColorFilter(ColorFilter colorFilter) { + + } + }; + + return super.createView(context); + } + + @Override + public boolean isLightStatusBar() { +// if (parentLayout != null && parentLayout.isSheet()) { +// return AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_windowBackgroundWhite)) > .721f; +// } + return super.isLightStatusBar(); + } + + @Override + protected CharSequence getTitle() { + return LocaleController.getString(R.string.BrowserSettingsTitle); + } + + public static final int BUTTON_TOGGLE = 1; + public static final int BUTTON_CLEAR_CACHE = 2; + public static final int BUTTON_CLEAR_COOKIES = 3; + public static final int BUTTON_ADD = 4; + public static final int BUTTON_CLEAR_LIST = 5; + public static final int BUTTON_SEARCH_ENGINE = 6; + public static final int BUTTON_CLEAR_HISTORY = 7; + public static final int BUTTON_OPEN_HISTORY = 9; + public static final int BUTTON_CUSTOMTABS_ON = 10; + public static final int BUTTON_CUSTOMTABS_OFF = 11; + + @Override + protected void fillItems(ArrayList items, UniversalAdapter adapter) { + items.add(UItem.asRippleCheck(BUTTON_TOGGLE, getString(R.string.BrowserSettingsEnable)).setChecked(SharedConfig.inappBrowser)); + items.add(UItem.asShadow(LocaleController.getString(R.string.BrowserSettingsEnableInfo))); + items.add(UItem.asButton(BUTTON_CLEAR_COOKIES, R.drawable.menu_clear_cookies, LocaleController.getString(R.string.BrowserSettingsCookiesClear), cookiesSize > 0 ? AndroidUtilities.formatFileSize(cookiesSize) : "")); + items.add(UItem.asButton(BUTTON_CLEAR_CACHE, R.drawable.menu_clear_cache, LocaleController.getString(R.string.BrowserSettingsCacheClear), cacheSize > 0 ? AndroidUtilities.formatFileSize(cacheSize) : "")); + items.add(UItem.asShadow(getString(R.string.BrowserSettingsCookiesInfo))); + if (historySize > 0) { + items.add(UItem.asButton(BUTTON_OPEN_HISTORY, R.drawable.menu_clear_recent, getString(R.string.BrowserSettingsHistoryShow))); + items.add(UItem.asButton(BUTTON_CLEAR_HISTORY, R.drawable.menu_clear_cache, getString(R.string.BrowserSettingsHistoryClear), formatPluralStringComma("BrowserSettingsHistoryPages", (int) historySize, ','))); + items.add(UItem.asShadow(null)); + } + items.add(UItem.asHeader(LocaleController.getString(R.string.BrowserSettingsNeverOpenInTitle))); + items.add(UItem.asButton(BUTTON_ADD, addIcon, LocaleController.getString(R.string.BrowserSettingsNeverOpenInAdd)).accent()); + RestrictedDomainsList.getInstance().load(); + ArrayList> allDomains = RestrictedDomainsList.getInstance().restrictedDomains; + for (ArrayList domains : allDomains) { + WebMetadataCache.WebMetadata meta = null; + for (String domain : domains) { + meta = WebMetadataCache.getInstance().get(domain); + if (meta != null) break; + } + items.add(WebsiteView.Factory.as(domains, meta == null ? "" : (TextUtils.isEmpty(meta.sitename) ? (TextUtils.isEmpty(meta.title) ? "" : meta.title) : meta.sitename), meta == null ? null : meta.favicon)); + } + if (!allDomains.isEmpty()) { + items.add(UItem.asButton(BUTTON_CLEAR_LIST, R.drawable.msg_clearcache, LocaleController.getString(R.string.BrowserSettingsNeverOpenInClearList)).red()); + } + items.add(UItem.asShadow(LocaleController.getString(R.string.BrowserSettingsNeverOpenInInfo))); + items.add(UItem.asButton(BUTTON_SEARCH_ENGINE, R.drawable.msg_search, LocaleController.getString(R.string.SearchEngine), SearchEngine.getCurrent().name)); + items.add(UItem.asShadow(LocaleController.getString(R.string.BrowserSettingsSearchEngineInfo))); + if (!SharedConfig.inappBrowser) { + items.add(UItem.asHeader(getString(R.string.BrowserSettingsCustomTabsTitle))); + items.add(UItem.asRadio(BUTTON_CUSTOMTABS_ON, getString(R.string.BrowserSettingsCustomTabs)).setChecked(SharedConfig.customTabs)); + items.add(UItem.asRadio(BUTTON_CUSTOMTABS_OFF, getString(R.string.BrowserSettingsNoCustomTabs)).setChecked(!SharedConfig.customTabs)); + items.add(UItem.asShadow(getString(R.string.BrowserSettingsNoCustomTabsInfo))); + } + if (BuildVars.DEBUG_PRIVATE_VERSION) { + items.add(UItem.asCheck(12, "adaptable colors").setChecked(SharedConfig.adaptableColorInBrowser)); + } + } + + @Override + protected void onClick(UItem item, View view, int position, float x, float y) { + if (item.id == 12) { + SharedConfig.toggleBrowserAdaptableColors(); + ((TextCheckCell) view).setChecked(SharedConfig.adaptableColorInBrowser); + } else if (item.id == BUTTON_TOGGLE) { + SharedConfig.toggleInappBrowser(); + ((TextCheckCell) view).setChecked(SharedConfig.inappBrowser); + ((TextCheckCell) view).setBackgroundColorAnimated(SharedConfig.inappBrowser, Theme.getColor(SharedConfig.inappBrowser ? Theme.key_windowBackgroundChecked : Theme.key_windowBackgroundUnchecked)); + listView.adapter.update(true); + } else if (item.id == BUTTON_CUSTOMTABS_ON) { + SharedConfig.toggleCustomTabs(true); + listView.adapter.update(true); + } else if (item.id == BUTTON_CUSTOMTABS_OFF) { + SharedConfig.toggleCustomTabs(false); + listView.adapter.update(true); + } else if (item.id == BUTTON_CLEAR_CACHE) { + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.BrowserSettingsCacheClear)) + .setMessage(formatString(R.string.BrowserSettingsCacheClearText, cacheSize == 0 ? "" : " (" + AndroidUtilities.formatFileSize(cacheSize)+")")) + .setPositiveButton(getString(R.string.Clear), (di, w) -> { + ApplicationLoader.applicationContext.deleteDatabase("webview.db"); + ApplicationLoader.applicationContext.deleteDatabase("webviewCache.db"); + WebStorage.getInstance().deleteAllData(); + try { + WebView webView = new WebView(getContext()); + webView.clearCache(true); + webView.clearHistory(); + webView.destroy(); + } catch (Exception e) {} + try { + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir.exists()) { + deleteDirectory(dir, false); + } + } catch (Exception e) { + FileLog.e(e); + } + try { + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "cache/WebView"); + if (dir.exists()) { + deleteDirectory(dir, null); + } + } catch (Exception e) { + FileLog.e(e); + } + WebMetadataCache.getInstance().clear(); + loadSizes(); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } else if (item.id == BUTTON_CLEAR_COOKIES) { + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.BrowserSettingsCookiesClear)) + .setMessage(formatString(R.string.BrowserSettingsCookiesClearText, cookiesSize == 0 ? "" : " (" + AndroidUtilities.formatFileSize(cookiesSize)+")")) + .setPositiveButton(getString(R.string.Clear), (di, w) -> { + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeAllCookies(null); + cookieManager.flush(); + } + try { + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir.exists()) { + deleteDirectory(dir, true); + } + } catch (Exception e) { + FileLog.e(e); + } + loadSizes(); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } else if (item.id == BUTTON_CLEAR_HISTORY) { + long firstDate = Long.MAX_VALUE; + ArrayList entries = BrowserHistory.getHistory(); + for (BrowserHistory.Entry e : entries) { + firstDate = Math.min(firstDate, e.time); + } + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.BrowserSettingsHistoryClear)) + .setMessage(formatString(R.string.BrowserSettingsHistoryClearText, LocaleController.formatDateChat(firstDate / 1000L))) + .setPositiveButton(getString(R.string.Clear), (di, w) -> { + BrowserHistory.clearHistory(); + historySize = 0; + listView.adapter.update(true); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } else if (item.id == BUTTON_OPEN_HISTORY) { + final HistoryFragment[] fragment = new HistoryFragment[] { null }; + fragment[0] = new HistoryFragment(null, e -> { + fragment[0].finishFragment(); + if (whenHistoryClicked != null) { + finishFragment(); + whenHistoryClicked.run(e); + } else { + Browser.openUrl(getContext(), e.url); + } + }); + presentFragment(fragment[0]); + } else if (item.id == BUTTON_CLEAR_LIST) { + RestrictedDomainsList.getInstance().restrictedDomains.clear(); + RestrictedDomainsList.getInstance().scheduleSave(); + listView.adapter.update(true); + } else if (item.instanceOf(WebsiteView.Factory.class)) { + final WebsiteView websiteView = (WebsiteView) view; + final ArrayList domains = websiteView.domains; + ItemOptions.makeOptions((ViewGroup) fragmentView, websiteView) + .add(R.drawable.menu_delete_old, LocaleController.getString(R.string.Remove), () -> { + RestrictedDomainsList.getInstance().setRestricted(false, domains.toArray(new String[0])); + listView.adapter.update(true); + }) + .show(); + } else if (item.id == BUTTON_SEARCH_ENGINE) { + if (getParentActivity() == null) { + return; + } + AtomicReference dialogRef = new AtomicReference<>(); + + LinearLayout linearLayout = new LinearLayout(getContext()); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + ArrayList searchEngines = SearchEngine.getSearchEngines(); + CharSequence[] items = new CharSequence[ searchEngines.size() ]; + + for (int i = 0; i < items.length; ++i) { + final SearchEngine engine = searchEngines.get(i); + items[i] = engine.name; + + final int index = i; + RadioColorCell cell = new RadioColorCell(getParentActivity()); + cell.setPadding(dp(4), 0, dp(4), 0); + cell.setCheckColor(Theme.getColor(Theme.key_radioBackground), Theme.getColor(Theme.key_dialogRadioBackgroundChecked)); + cell.setTextAndValue(items[index], index == SharedConfig.searchEngineType); + cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.RIPPLE_MASK_ALL)); + linearLayout.addView(cell); + cell.setOnClickListener(v -> { + SharedConfig.setSearchEngineType(index); + ((TextCell) view).setValue(SearchEngine.getCurrent().name, true); + dialogRef.get().dismiss(); + }); + } + + Dialog dialog = new AlertDialog.Builder(getParentActivity()) + .setTitle(getString(R.string.SearchEngine)) + .setView(linearLayout) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .create(); + dialogRef.set(dialog); + showDialog(dialog); + } else if (item.id == BUTTON_ADD) { + final AlertDialog[] dialog = new AlertDialog[1]; + final AlertDialog.Builder b = new AlertDialog.Builder(getContext(), getResourceProvider()); + b.setTitle(getString(R.string.BrowserSettingsAddTitle)); + + LinearLayout container = new LinearLayout(getContext()); + container.setOrientation(LinearLayout.VERTICAL); + + TextView textView = new TextView(getContext()); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, getResourceProvider())); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + textView.setText(getString(R.string.BrowserSettingsAddText)); + container.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 24, 5, 24, 12)); + + EditTextBoldCursor editText = new EditTextBoldCursor(getContext()) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(36), MeasureSpec.EXACTLY)); + } + }; + final Runnable done = () -> { + final String text = editText.getText().toString(); + Uri uri = Uri.parse(text); + if (uri == null || uri.getHost() == null) { + uri = Uri.parse("https://" + text); + } + if (uri == null || uri.getHost() == null) { + AndroidUtilities.shakeView(editText); + return; + } + String _domain = uri.getHost().toLowerCase(); + if (_domain.startsWith("www.")) _domain = _domain.substring(4); + final String domain = _domain; + RestrictedDomainsList.getInstance().setRestricted(true, domain); + final WebMetadataCache.WebMetadata cached_meta = WebMetadataCache.getInstance().get(domain); + if (cached_meta != null && !TextUtils.isEmpty(cached_meta.sitename) && cached_meta.favicon != null) { + if (dialog[0] != null) { + dialog[0].dismiss(); + } + listView.adapter.update(true); + } else { + final AlertDialog progressDialog = new AlertDialog(getContext(), AlertDialog.ALERT_TYPE_SPINNER); + final Runnable dismiss = () -> { + dialog[0].dismiss(); + progressDialog.dismissUnless(800); + listView.adapter.update(true); + }; + AndroidUtilities.runOnUIThread(dismiss, 5_000); + progressDialog.showDelayed(300); + WebMetadataCache.retrieveFaviconAndSitename("https://" + text + "/", (sitename, favicon) -> { + AndroidUtilities.cancelRunOnUIThread(dismiss); + progressDialog.dismissUnless(800); + WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + if (meta != null) { + listView.adapter.update(true); + } + }); + } + }; + editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + done.run(); + return true; + } + return false; + } + }); + editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); + editText.setText(""); + editText.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, getResourceProvider())); + editText.setHintColor(Theme.getColor(Theme.key_groupcreate_hintText, getResourceProvider())); + editText.setHintText(LocaleController.getString(R.string.BrowserSettingsAddHint)); + editText.setSingleLine(true); + editText.setFocusable(true); + editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + editText.setLineColors(Theme.getColor(Theme.key_windowBackgroundWhiteInputField, getResourceProvider()), Theme.getColor(Theme.key_windowBackgroundWhiteInputFieldActivated, getResourceProvider()), Theme.getColor(Theme.key_text_RedRegular, getResourceProvider())); + editText.setImeOptions(EditorInfo.IME_ACTION_DONE); + editText.setBackgroundDrawable(null); + editText.setPadding(0, 0, dp(42), 0); + container.addView(editText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 24, 0, 24, 10)); + b.setView(container); + b.setWidth(dp(292)); + + + b.setPositiveButton(LocaleController.getString(R.string.Done), (dialogInterface, i) -> { + done.run(); + }); + b.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialogInterface, i) -> { + dialogInterface.dismiss(); + }); + + dialog[0] = b.create(); + dialog[0].setOnDismissListener(d -> { + AndroidUtilities.hideKeyboard(editText); + }); + dialog[0].setOnShowListener(d -> { + editText.requestFocus(); + AndroidUtilities.showKeyboard(editText); + }); + dialog[0].setDismissDialogByButtons(false); + dialog[0].show(); + } + } + + @Override + protected boolean onLongClick(UItem item, View view, int position, float x, float y) { + return false; + } + + public static class WebsiteView extends FrameLayout { + public final ImageView imageView; + public final TextView titleView; + public final TextView subtitleView; + public final ImageView optionsView; + + public WebsiteView(Context context) { + super(context); + + imageView = new ImageView(context); + addView(imageView, LayoutHelper.createFrame(28, 28, Gravity.CENTER_VERTICAL | Gravity.LEFT, 18, 0, 0, 0)); + + titleView = new TextView(context); + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setMaxLines(1); + titleView.setEllipsize(TextUtils.TruncateAt.END); + addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 64 + 4, 7, 54, 0)); + + subtitleView = new TextView(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + subtitleView.setPivotY(getMeasuredHeight() / 2f); + } + }; + subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtitleView.setMaxLines(1); + subtitleView.setEllipsize(TextUtils.TruncateAt.END); + subtitleView.setPivotX(0); + addView(subtitleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 64 + 4, 30, 54, 0)); + + optionsView = new ImageView(context); + optionsView.setScaleType(ImageView.ScaleType.CENTER); + optionsView.setImageResource(R.drawable.ic_ab_other); + optionsView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteGrayIcon), PorterDuff.Mode.SRC_IN)); + addView(optionsView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 18, 0)); + } + + private ArrayList domains; + private boolean needDivider; + public void set( + CharSequence title, + ArrayList domains, + Bitmap favicon, + boolean divider + ) { + titleView.setText(title); + StringBuilder subtitle = new StringBuilder(); + for (String domain : domains) { + if (subtitle.length() > 0) { + subtitle.append(", "); + } + subtitle.append(domain); + } + subtitleView.setText(subtitle); + if (TextUtils.isEmpty(title)) { + subtitleView.setTranslationY(-dp(14)); + subtitleView.setScaleX(1.3f); + subtitleView.setScaleY(1.3f); + } else { + subtitleView.setTranslationY(0); + subtitleView.setScaleX(1f); + subtitleView.setScaleY(1f); + } + this.domains = domains; + String s = (TextUtils.isEmpty(title) ? domains.isEmpty() || TextUtils.isEmpty(domains.get(0)) ? "" : domains.get(0) : title).toString(); + if (favicon != null) { + imageView.setImageBitmap(favicon); + } else { + CombinedDrawable drawable = new CombinedDrawable( + Theme.createRoundRectDrawable(dp(6), Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), .1f)), + new Drawable() { + private final Text text = new Text(s.substring(0, !s.isEmpty() ? 1 : 0), 14, AndroidUtilities.bold()); + @Override + public void draw(@NonNull Canvas canvas) { + text.draw(canvas, getBounds().centerX() - text.getCurrentWidth() / 2f, getBounds().centerY(), Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), 1f); + } + @Override + public void setAlpha(int alpha) {} + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) {} + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + } + ); + drawable.setCustomSize(dp(28), dp(28)); + imageView.setImageDrawable(drawable); + } + if (needDivider != divider) invalidate(); + setWillNotDraw(!(needDivider = divider)); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + canvas.drawRect(dp(64), getHeight() - 1, getWidth(), getHeight(), Theme.dividerPaint); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(56), MeasureSpec.EXACTLY) + ); + } + + public static class Factory extends UItem.UItemFactory { + @Override + public WebsiteView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new WebsiteView(context); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + ((WebsiteView) view).set(item.text, (ArrayList) item.object2, item.object instanceof Bitmap ? ((Bitmap) item.object) : null, divider); + } + + public static UItem as(ArrayList domains, String sitename, Bitmap favicon) { + UItem i = UItem.ofFactory(WebsiteView.Factory.class); + i.text = sitename; + i.object = favicon; + i.object2 = domains; + return i; + } + } + } + + private static long getDirectorySize(File dir, Boolean cookies) { + if (dir == null || !dir.exists()) { + return 0; + } + long size = 0; + if (dir.isDirectory()) { + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + size += getDirectorySize(file, cookies); + } + } + } else { + if (cookies != null && (cookies != dir.getName().startsWith("Cookies"))) { + return size; + } + size += dir.length(); + } + return size; + } + + private static boolean deleteDirectory(File dir, Boolean cookies) { + if (dir == null || !dir.exists()) { + return false; + } + if (dir.isDirectory()) { + boolean allDeleted = true; + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + if (cookies != null && (cookies != file.getName().startsWith("Cookies"))) { + continue; + } + if (!deleteDirectory(file, cookies)) { + allDeleted = false; + } + } + } + if (allDeleted) { + dir.delete(); + } + } else { + if (cookies != null && (cookies != dir.getName().startsWith("Cookies"))) { + return false; + } + dir.delete(); + } + return true; + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java b/TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java new file mode 100644 index 000000000..4848223b3 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java @@ -0,0 +1,445 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.os.Build; +import android.text.TextUtils; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.JavascriptInterface; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.LaunchActivity; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; + +public class WebMetadataCache { + + private static WebMetadataCache instance; + public static WebMetadataCache getInstance() { + if (instance == null) { + instance = new WebMetadataCache(); + } + return instance; + } + + public static final int MAX_COUNT = 100; + public static final int EXPIRATION = 1000 * 60 * 60 * 24 * 7; + + private HashMap cache; + + public static class WebMetadata extends TLObject { + + public long time = System.currentTimeMillis(); + public String domain; + public String title; + public String sitename; + public int actionBarColor; + public int backgroundColor; + public Bitmap favicon; + + public byte[] faviconBytes; + + public static WebMetadata from(BotWebViewContainer.MyWebView webView) { + WebMetadata metadata = new WebMetadata(); + metadata.domain = AndroidUtilities.getHostAuthority(webView.getUrl(), true); + if (TextUtils.isEmpty(metadata.domain)) return null; + if (webView.lastTitleGot) { + metadata.title = webView.lastTitle; + } + metadata.sitename = webView.lastSiteName; + if (webView.lastActionBarColorGot) { + metadata.actionBarColor = webView.lastActionBarColor; + } + if (webView.lastBackgroundColorGot) { + metadata.backgroundColor = webView.lastBackgroundColor; + } + if (webView.lastFaviconGot) { + metadata.favicon = webView.lastFavicon; + } + return metadata; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt64(time); + stream.writeString(domain == null ? "" : domain); + stream.writeString(title == null ? "" : title); + stream.writeString(sitename == null ? "" : sitename); + stream.writeInt32(actionBarColor); + stream.writeInt32(backgroundColor); + if (favicon == null) { + stream.writeInt32(TLRPC.TL_null.constructor); + } else { + stream.writeInt32(0x38da9893); + if (faviconBytes != null) { + stream.writeByteArray(faviconBytes); + } else { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + favicon.compress(Bitmap.CompressFormat.WEBP_LOSSY, 80, byteArrayOutputStream); + } else { + favicon.compress(Bitmap.CompressFormat.WEBP, 80, byteArrayOutputStream); + } + stream.writeByteArray(faviconBytes = byteArrayOutputStream.toByteArray()); + try { + byteArrayOutputStream.close(); + } catch (Exception e) { + FileLog.e(e); + } + } + } + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + time = stream.readInt64(exception); + domain = stream.readString(exception); + title = stream.readString(exception); + sitename = stream.readString(exception); + actionBarColor = stream.readInt32(exception); + backgroundColor = stream.readInt32(exception); + int magic = stream.readInt32(exception); + if (magic == TLRPC.TL_null.constructor) { + favicon = null; + } else { + faviconBytes = stream.readByteArray(exception); + favicon = BitmapFactory.decodeStream(new ByteArrayInputStream(faviconBytes)); + } + } + } + + private final static class MetadataFile extends TLObject { + public final ArrayList array = new ArrayList<>(); + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(array.size()); + for (int i = 0; i < array.size(); ++i) { + array.get(i).serializeToStream(stream); + } + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + final int count = stream.readInt32(exception); + for (int i = 0; i < count; ++i) { + WebMetadata metadata = new WebMetadata(); + metadata.readParams(stream, exception); + if (TextUtils.isEmpty(metadata.domain)) return; + array.add(metadata); + } + } + } + + public File getCacheFile() { + return new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), "webmetacache.dat"); + } + + public WebMetadata get(String domain) { + load(); + WebMetadata meta = cache.get(domain); + if (meta == null) return null; + meta.time = Math.max(meta.time, System.currentTimeMillis()); + scheduleSave(); + return meta; + } + + public void save(WebMetadata meta) { + if (meta == null) return; + if (cache == null) { + cache = new HashMap<>(); + } + if (TextUtils.isEmpty(meta.domain)) return; + cache.put(meta.domain, meta); + load(); + scheduleSave(); + } + + private boolean loaded; + private boolean loading; + private boolean saving; + + public void load() { + if (loaded || loading) return; + loading = true; + if (cache == null) { + cache = new HashMap<>(); + } + Utilities.globalQueue.postRunnable(() -> { + final File file = getCacheFile(); + if (!file.exists()) { + loaded = true; + return; + } + + final ArrayList result = new ArrayList<>(); + + try { + SerializedData stream = new SerializedData(file); + MetadataFile data = new MetadataFile(); + data.readParams(stream, true); + result.addAll(data.array); + } catch (Exception e) { + FileLog.e(e); + } + + AndroidUtilities.runOnUIThread(() -> { + for (int i = 0; i < result.size(); ++i) { + final WebMetadata meta = result.get(i); + cache.put(meta.domain, meta); + } + loaded = true; + loading = false; + }); + }); + } + + public void scheduleSave() { + AndroidUtilities.cancelRunOnUIThread(this::save); + if (saving) return; + AndroidUtilities.runOnUIThread(this::save, BuildVars.DEBUG_PRIVATE_VERSION ? 1 : 1_000); + } + + public void save() { + if (saving) return; + saving = true; + + final long now = System.currentTimeMillis(); + final ArrayList toBeSaved = new ArrayList<>(); + for (WebMetadata meta : cache.values()) { + if (TextUtils.isEmpty(meta.domain) || now - meta.time > EXPIRATION) + continue; + toBeSaved.add(0, meta); + if (toBeSaved.size() >= MAX_COUNT) + break; + } + + Utilities.globalQueue.postRunnable(() -> { + final File file = getCacheFile(); + if (!file.exists()) { + try { + file.createNewFile(); + } catch (Exception e) { + FileLog.e(e); + saving = false; + return; + } + } + + MetadataFile data = new MetadataFile(); + data.array.addAll(toBeSaved); + final int size = data.getObjectSize(); + SerializedData stream = new SerializedData(size); + data.serializeToStream(stream); + + try { + FileOutputStream os = new FileOutputStream(file); + os.write(stream.toByteArray()); + os.close(); + } catch (Exception e) { + FileLog.e(e); + } + + AndroidUtilities.runOnUIThread(() -> { + saving = false; + }); + }); + } + + public void clear() { + if (cache == null) { + loading = false; + loaded = true; + cache = new HashMap<>(); + } else { + cache.clear(); + } + scheduleSave(); + } + + private static class SitenameProxy { + private final Utilities.Callback whenReceived; + public SitenameProxy(Utilities.Callback whenReceived) { + this.whenReceived = whenReceived; + } + @JavascriptInterface + public void post(String type, String data) { + AndroidUtilities.runOnUIThread(() -> { + switch (type) { + case "siteName": { + whenReceived.run(data); + break; + } + case "siteNameEmpty": { + whenReceived.run(null); + break; + } + } + }); + } + } + + public static void retrieveFaviconAndSitename(String url, Utilities.Callback2 whenDone) { + if (whenDone == null) return; + + Context context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + + final Activity activity = AndroidUtilities.findActivity(context); + if (activity == null) { + whenDone.run(null, null); + return; + } + final View rootView = activity.findViewById(android.R.id.content).getRootView(); + if (!(rootView instanceof ViewGroup)) { + whenDone.run(null, null); + return; + } + final ViewGroup container = (ViewGroup) rootView; + final FrameLayout webViewContainer = new FrameLayout(context) { + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + return false; + } + @Override + public boolean onTouchEvent(MotionEvent event) { + return false; + } + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return false; + } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(MeasureSpec.makeMeasureSpec(dp(500), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(500), MeasureSpec.EXACTLY)); + } + }; + container.addView(webViewContainer); + + final WebView webView = new WebView(context); + final WebSettings settings = webView.getSettings(); + settings.setJavaScriptEnabled(true); + settings.setGeolocationEnabled(false); + settings.setDomStorageEnabled(true); + settings.setDatabaseEnabled(false); + settings.setSupportMultipleWindows(false); + settings.setAllowFileAccess(false); + settings.setAllowContentAccess(false); + settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); + settings.setSaveFormData(false); + settings.setSavePassword(false); + webView.setVerticalScrollBarEnabled(false); + + try { + settings.setUserAgentString(settings.getUserAgentString().replace("; wv)", ")")); + } catch (Exception e) { + FileLog.e(e); + } + + final boolean[] done = new boolean[] { false }; + final String[] sitename = new String[] { null }; + final Bitmap[] favicon = new Bitmap[] { null }; + + final Utilities.Callback checkDone = force -> { + if (done[0]) return; + + if ( + force || + !TextUtils.isEmpty(sitename[0]) && + (favicon[0] != null && favicon[0].getWidth() > dp(28) && favicon[0].getHeight() > dp(28)) + ) { + done[0] = true; + + WebMetadataCache.WebMetadata meta = new WebMetadata(); + meta.domain = AndroidUtilities.getHostAuthority(url, true); + meta.sitename = sitename[0]; + if (favicon[0] != null) { + meta.favicon = Bitmap.createBitmap(favicon[0]); + } + getInstance().save(meta); + + webView.destroy(); + AndroidUtilities.removeFromParent(webView); + AndroidUtilities.removeFromParent(webViewContainer); + + whenDone.run(sitename[0], favicon[0]); + + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.webViewResolved, url); + } + }; + + webView.setWebChromeClient(new WebChromeClient() { + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + if (icon == null) return; + if (favicon[0] == null || favicon[0].getWidth() < icon.getWidth() && favicon[0].getHeight() < icon.getHeight()) { + favicon[0] = icon; + checkDone.run(false); + } + } + }); + Runnable putJS = () -> { + final String js = RLottieDrawable.readRes(null, R.raw.webview_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + webView.evaluateJavascript(js, value -> {}); + } else { + try { + webView.loadUrl("javascript:" + URLEncoder.encode(js, "UTF-8")); + } catch (UnsupportedEncodingException e) { + webView.loadUrl("javascript:" + URLEncoder.encode(js)); + } + } + }; + webView.setWebViewClient(new WebViewClient() { + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + putJS.run(); + } + }); + webView.addJavascriptInterface(new SitenameProxy(name -> { + sitename[0] = name; + checkDone.run(false); + }), "TelegramWebview"); + + webViewContainer.addView(webView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + webView.loadUrl(url); + putJS.run(); + + AndroidUtilities.runOnUIThread(() -> { + checkDone.run(true); + }, 10_000); + } +} diff --git a/TMessagesProj/src/main/res/drawable-hdpi/large_income.png b/TMessagesProj/src/main/res/drawable-hdpi/large_income.png new file mode 100644 index 000000000..a4119d1db Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/large_income.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png new file mode 100644 index 000000000..699954b16 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png new file mode 100644 index 000000000..51cb0e7cb Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png new file mode 100644 index 000000000..ef1394f5c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png new file mode 100644 index 000000000..0ed008b3f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png new file mode 100644 index 000000000..7066fb356 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png new file mode 100644 index 000000000..e57e3fa6c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png new file mode 100644 index 000000000..d6fc958e2 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png new file mode 100644 index 000000000..8aee059c2 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png new file mode 100644 index 000000000..38be7b9b7 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png new file mode 100644 index 000000000..dc88f3bae Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png new file mode 100644 index 000000000..66dfa4704 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png new file mode 100644 index 000000000..9a7830f91 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png new file mode 100644 index 000000000..dd1fff2e0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png new file mode 100644 index 000000000..ac47c72e2 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/large_income.png b/TMessagesProj/src/main/res/drawable-mdpi/large_income.png new file mode 100644 index 000000000..e94c34caa Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/large_income.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png new file mode 100644 index 000000000..d59fbee96 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png new file mode 100644 index 000000000..c3c5cc552 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png new file mode 100644 index 000000000..c736d1576 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png new file mode 100644 index 000000000..6dfdfb7b6 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png new file mode 100644 index 000000000..9fc5a3e13 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png new file mode 100644 index 000000000..a288790a9 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png new file mode 100644 index 000000000..eea1499b6 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png new file mode 100644 index 000000000..30af26e26 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png new file mode 100644 index 000000000..da26d1e52 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png new file mode 100644 index 000000000..b0fc83454 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png new file mode 100644 index 000000000..2499f8ec0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png new file mode 100644 index 000000000..7fb66d111 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png new file mode 100644 index 000000000..231a7a401 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png new file mode 100644 index 000000000..2d4a5a857 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/large_income.png b/TMessagesProj/src/main/res/drawable-xhdpi/large_income.png new file mode 100644 index 000000000..f30849ec2 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/large_income.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png new file mode 100644 index 000000000..ad3b42ff0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png new file mode 100644 index 000000000..fba8edcce Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png new file mode 100644 index 000000000..9787545a4 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png new file mode 100644 index 000000000..26d167380 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png new file mode 100644 index 000000000..54b1c4c79 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png new file mode 100644 index 000000000..86a04122b Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png new file mode 100644 index 000000000..8835d629a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png new file mode 100644 index 000000000..d45a2b97a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png new file mode 100644 index 000000000..f2861d95a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png new file mode 100644 index 000000000..e10ccef53 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png new file mode 100644 index 000000000..f3c08dbba Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png new file mode 100644 index 000000000..ce83e1a0b Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png new file mode 100644 index 000000000..aef39cac6 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png new file mode 100644 index 000000000..8dea765a3 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png b/TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png new file mode 100644 index 000000000..224c13cb0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png new file mode 100644 index 000000000..9f53699ca Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png new file mode 100644 index 000000000..741d7412d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png new file mode 100644 index 000000000..45fa1af12 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png new file mode 100644 index 000000000..838ae0974 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png new file mode 100644 index 000000000..cc9a96c6e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png new file mode 100644 index 000000000..0d2fadc3e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png new file mode 100644 index 000000000..9e82debbe Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png new file mode 100644 index 000000000..9fd59feb6 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png new file mode 100644 index 000000000..148c63ac6 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png new file mode 100644 index 000000000..02de4b41e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png new file mode 100644 index 000000000..521275fb0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png new file mode 100644 index 000000000..a28b961d9 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png new file mode 100644 index 000000000..dcc084a7f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png new file mode 100644 index 000000000..b4076029e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png differ diff --git a/TMessagesProj/src/main/res/drawable/star_reaction.xml b/TMessagesProj/src/main/res/drawable/star_reaction.xml new file mode 100644 index 000000000..039a05db9 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/star_reaction.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/star_small_inner.xml b/TMessagesProj/src/main/res/drawable/star_small_inner.xml index 6a0ed0c30..b79b31b7c 100644 --- a/TMessagesProj/src/main/res/drawable/star_small_inner.xml +++ b/TMessagesProj/src/main/res/drawable/star_small_inner.xml @@ -1,39 +1,20 @@ - - - - - - - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/drawable/star_small_outline.xml b/TMessagesProj/src/main/res/drawable/star_small_outline.xml index 128391549..48c1af5fb 100644 --- a/TMessagesProj/src/main/res/drawable/star_small_outline.xml +++ b/TMessagesProj/src/main/res/drawable/star_small_outline.xml @@ -1,5 +1,3 @@ - - diff --git a/TMessagesProj/src/main/res/drawable/warning_sign.xml b/TMessagesProj/src/main/res/drawable/warning_sign.xml new file mode 100644 index 000000000..9b1ea10d4 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/warning_sign.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/roundcamera_flash_off.json b/TMessagesProj/src/main/res/raw/roundcamera_flash_off.json new file mode 100644 index 000000000..a87128fc4 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/roundcamera_flash_off.json @@ -0,0 +1 @@ +{"v":"5.12.1","fr":60,"ip":0,"op":30,"w":240,"h":240,"nm":"flash_slash","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.732]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.868]},"o":{"x":[0.167],"y":[0.121]},"t":1,"s":[-0.645]},{"i":{"x":[0.833],"y":[0.749]},"o":{"x":[0.167],"y":[0.227]},"t":2,"s":[-2.076]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.125]},"t":3,"s":[-2.909]},{"i":{"x":[0.833],"y":[0.848]},"o":{"x":[0.167],"y":[0.175]},"t":4,"s":[-4.583]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":5,"s":[-6.097]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.284]},"t":6,"s":[-7.351]},{"i":{"x":[0.833],"y":[1.023]},"o":{"x":[0.167],"y":[0.175]},"t":7,"s":[-7.871]},{"i":{"x":[0.833],"y":[0.591]},"o":{"x":[0.167],"y":[0.018]},"t":8,"s":[-8.346]},{"i":{"x":[0.833],"y":[0.81]},"o":{"x":[0.167],"y":[0.105]},"t":9,"s":[-7.738]},{"i":{"x":[0.833],"y":[0.874]},"o":{"x":[0.167],"y":[0.148]},"t":10,"s":[-5.362]},{"i":{"x":[0.833],"y":[0.761]},"o":{"x":[0.167],"y":[0.247]},"t":11,"s":[-2.317]},{"i":{"x":[0.833],"y":[0.846]},"o":{"x":[0.167],"y":[0.128]},"t":12,"s":[-0.768]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.182]},"t":13,"s":[2.125]},{"i":{"x":[0.833],"y":[0.796]},"o":{"x":[0.167],"y":[0.282]},"t":14,"s":[4.568]},{"i":{"x":[0.833],"y":[0.912]},"o":{"x":[0.167],"y":[0.141]},"t":15,"s":[5.595]},{"i":{"x":[0.833],"y":[1.278]},"o":{"x":[0.167],"y":[1.732]},"t":16,"s":[7.081]},{"i":{"x":[0.833],"y":[0.654]},"o":{"x":[0.167],"y":[0.064]},"t":17,"s":[7.156]},{"i":{"x":[0.833],"y":[0.818]},"o":{"x":[0.167],"y":[0.11]},"t":18,"s":[6.83]},{"i":{"x":[0.833],"y":[0.875]},"o":{"x":[0.167],"y":[0.154]},"t":19,"s":[5.803]},{"i":{"x":[0.833],"y":[0.764]},"o":{"x":[0.167],"y":[0.252]},"t":20,"s":[4.585]},{"i":{"x":[0.833],"y":[0.847]},"o":{"x":[0.167],"y":[0.129]},"t":21,"s":[3.981]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":22,"s":[2.874]},{"i":{"x":[0.833],"y":[0.783]},"o":{"x":[0.167],"y":[0.284]},"t":23,"s":[1.956]},{"i":{"x":[0.833],"y":[0.858]},"o":{"x":[0.167],"y":[0.135]},"t":24,"s":[1.574]},{"i":{"x":[0.833],"y":[0.886]},"o":{"x":[0.167],"y":[0.201]},"t":25,"s":[0.96]},{"i":{"x":[0.833],"y":[0.797]},"o":{"x":[0.167],"y":[0.308]},"t":26,"s":[0.525]},{"i":{"x":[0.833],"y":[0.869]},"o":{"x":[0.167],"y":[0.141]},"t":27,"s":[0.364]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.23]},"t":28,"s":[0.132]},{"t":29,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.732},"o":{"x":0.167,"y":0.167},"t":0,"s":[120,120,0],"to":[-0.065,-0.172,0],"ti":[0.208,0.554,0]},{"i":{"x":0.833,"y":0.868},"o":{"x":0.167,"y":0.121},"t":1,"s":[119.613,118.968,0],"to":[-0.208,-0.554,0],"ti":[0.226,0.604,0]},{"i":{"x":0.833,"y":0.749},"o":{"x":0.167,"y":0.227},"t":2,"s":[118.754,116.678,0],"to":[-0.226,-0.604,0],"ti":[0.251,0.668,0]},{"i":{"x":0.833,"y":0.841},"o":{"x":0.167,"y":0.125},"t":3,"s":[118.255,115.346,0],"to":[-0.251,-0.668,0],"ti":[0.319,0.85,0]},{"i":{"x":0.833,"y":0.848},"o":{"x":0.167,"y":0.175},"t":4,"s":[117.25,112.668,0],"to":[-0.319,-0.85,0],"ti":[0.277,0.738,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.184},"t":5,"s":[116.342,110.245,0],"to":[-0.277,-0.738,0],"ti":[0.177,0.473,0]},{"i":{"x":0.833,"y":0.85},"o":{"x":0.167,"y":0.284},"t":6,"s":[115.589,108.239,0],"to":[-0.177,-0.473,0],"ti":[0.028,0.226,0]},{"i":{"x":0.833,"y":0.664},"o":{"x":0.167,"y":0.187},"t":7,"s":[115.278,107.407,0],"to":[-0.028,-0.226,0],"ti":[-0.271,-0.175,0]},{"i":{"x":0.833,"y":0.63},"o":{"x":0.167,"y":0.111},"t":8,"s":[115.424,106.881,0],"to":[0.271,0.175,0],"ti":[-1.057,-1.207,0]},{"i":{"x":0.833,"y":0.814},"o":{"x":0.167,"y":0.108},"t":9,"s":[116.906,108.458,0],"to":[1.057,1.207,0],"ti":[-1.786,-2.119,0]},{"i":{"x":0.833,"y":0.875},"o":{"x":0.167,"y":0.151},"t":10,"s":[121.766,114.121,0],"to":[1.786,2.119,0],"ti":[-1.462,-1.768,0]},{"i":{"x":0.833,"y":0.762},"o":{"x":0.167,"y":0.249},"t":11,"s":[127.622,121.174,0],"to":[1.462,1.768,0],"ti":[-1.381,-1.692,0]},{"i":{"x":0.833,"y":0.847},"o":{"x":0.167,"y":0.128},"t":12,"s":[130.538,124.729,0],"to":[1.381,1.692,0],"ti":[-1.641,-2.023,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.183},"t":13,"s":[135.908,131.326,0],"to":[1.641,2.023,0],"ti":[-1.056,-1.31,0]},{"i":{"x":0.833,"y":0.803},"o":{"x":0.167,"y":0.283},"t":14,"s":[140.383,136.865,0],"to":[1.056,1.31,0],"ti":[-0.721,-0.924,0]},{"i":{"x":0.833,"y":0.884},"o":{"x":0.167,"y":0.144},"t":15,"s":[142.247,139.183,0],"to":[0.721,0.924,0],"ti":[-0.205,-0.443,0]},{"i":{"x":0.833,"y":0.813},"o":{"x":0.167,"y":0.297},"t":16,"s":[144.709,142.412,0],"to":[0.205,0.443,0],"ti":[0.46,0.302,0]},{"i":{"x":0.833,"y":0.698},"o":{"x":0.167,"y":0.15},"t":17,"s":[143.478,141.841,0],"to":[-0.46,-0.302,0],"ti":[0.904,0.777,0]},{"i":{"x":0.833,"y":0.826},"o":{"x":0.167,"y":0.115},"t":18,"s":[141.95,140.598,0],"to":[-0.904,-0.777,0],"ti":[1.342,1.204,0]},{"i":{"x":0.833,"y":0.877},"o":{"x":0.167,"y":0.16},"t":19,"s":[138.056,137.179,0],"to":[-1.342,-1.204,0],"ti":[1.022,0.941,0]},{"i":{"x":0.833,"y":0.767},"o":{"x":0.167,"y":0.258},"t":20,"s":[133.897,133.373,0],"to":[-1.022,-0.941,0],"ti":[0.916,0.859,0]},{"i":{"x":0.833,"y":0.849},"o":{"x":0.167,"y":0.13},"t":21,"s":[131.923,131.534,0],"to":[-0.916,-0.859,0],"ti":[1.059,1.004,0]},{"i":{"x":0.833,"y":0.883},"o":{"x":0.167,"y":0.186},"t":22,"s":[128.403,128.217,0],"to":[-1.059,-1.004,0],"ti":[0.665,0.637,0]},{"i":{"x":0.833,"y":0.785},"o":{"x":0.167,"y":0.287},"t":23,"s":[125.567,125.509,0],"to":[-0.665,-0.637,0],"ti":[0.497,0.481,0]},{"i":{"x":0.833,"y":0.859},"o":{"x":0.167,"y":0.136},"t":24,"s":[124.412,124.396,0],"to":[-0.497,-0.481,0],"ti":[0.515,0.502,0]},{"i":{"x":0.833,"y":0.886},"o":{"x":0.167,"y":0.203},"t":25,"s":[122.587,122.626,0],"to":[-0.515,-0.502,0],"ti":[0.287,0.282,0]},{"i":{"x":0.833,"y":0.799},"o":{"x":0.167,"y":0.312},"t":26,"s":[121.323,121.386,0],"to":[-0.287,-0.282,0],"ti":[0.183,0.183,0]},{"i":{"x":0.833,"y":0.883},"o":{"x":0.167,"y":0.142},"t":27,"s":[120.865,120.932,0],"to":[-0.183,-0.183,0],"ti":[0.144,0.155,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.291},"t":28,"s":[120.222,120.289,0],"to":[-0.144,-0.155,0],"ti":[0.037,0.048,0]},{"t":29,"s":[120,120,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.732,0.732,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.868,0.868,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.121,0.121,0]},"t":1,"s":[100.323,100.323,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.749,0.749,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.227,0.227,0]},"t":2,"s":[101.038,101.038,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.841,0.841,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.125,0.125,0]},"t":3,"s":[101.454,101.454,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.175,0.175,0]},"t":4,"s":[102.291,102.291,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[103.049,103.049,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.869,0.869,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.284,0.284,0]},"t":6,"s":[103.675,103.675,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.22,1.22,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.23,0.23,0]},"t":7,"s":[103.935,103.935,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.621,0.621,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.06,0.06,0]},"t":8,"s":[104.083,104.083,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.813,0.813,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.107,0.107,0]},"t":9,"s":[103.546,103.546,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.875,0.875,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.151,0.151,0]},"t":10,"s":[101.643,101.643,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.762,0.762,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.249,0.249,0]},"t":11,"s":[99.281,99.281,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.847,0.847,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.128,0.128,0]},"t":12,"s":[98.093,98.093,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.183,0.183,0]},"t":13,"s":[95.889,95.889,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.801,0.801,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.283,0.283,0]},"t":14,"s":[94.04,94.04,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.934,0.934,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.144,0.144,0]},"t":15,"s":[93.267,93.267,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.756,0.756,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.307,-0.307,0]},"t":16,"s":[92.197,92.197,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.69,0.69,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.127,0.127,0]},"t":17,"s":[92.425,92.425,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.824,0.824,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.114,0.114,0]},"t":18,"s":[92.866,92.866,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.877,0.877,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.159,0.159,0]},"t":19,"s":[94.062,94.062,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.767,0.767,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.256,0.256,0]},"t":20,"s":[95.386,95.386,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.849,0.849,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.13,0.13,0]},"t":21,"s":[96.023,96.023,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.186,0.186,0]},"t":22,"s":[97.171,97.171,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.784,0.784,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.286,0.286,0]},"t":23,"s":[98.107,98.107,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.858,0.858,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.136,0.136,0]},"t":24,"s":[98.491,98.491,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.886,0.886,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.203,0.203,0]},"t":25,"s":[99.101,99.101,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.799,0.799,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.311,0.311,0]},"t":26,"s":[99.527,99.527,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.88,0.88,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.142,0.142,0]},"t":27,"s":[99.683,99.683,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.275,0.275,0]},"t":28,"s":[99.904,99.904,100]},{"t":29,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Subtract","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0]},{"t":10,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.387,5,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.173,0.329],[-0.211,0.306],[0,0]],"o":[[0,0],[0,0],[-0.372,0],[-0.173,-0.329],[0,0],[0,0]],"v":[[2.954,0.997],[1.131,2.5],[-1.954,2.5],[-2.839,1.965],[-2.777,0.932],[-0.409,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,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":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Subtract","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector 177 (Stroke)","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"t":11,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-8.114,56.905,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.828,0.987],[0,0],[0,0],[0,0]],"o":[[-0.183,1.275],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.974,2.727],[-0.727,3.732],[2.989,-0.696],[-0.374,-4.193],[-2.196,-2.69]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,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":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector 177 (Stroke)","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Vector 176","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-14,14,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.5,7.5],[-7.5,-7.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":1,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":0,"s":[100]},{"t":19,"s":[0]}],"ix":1},"e":{"a":0,"k":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":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector 176","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Vector 177","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.948,-0.008,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.22,"y":0},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[-57.071,-35.926],[-42.929,-35.926],[-42.929,-50.068],[-56.43,-63.57]],"c":true}]},{"t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[60.429,81.573],[74.571,81.573],[74.571,67.431],[-56.43,-63.57]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.181,0.216],[0,0],[0,0],[0,0],[0.167,-0.242],[0,0]],"o":[[0,0],[-0.04,0.279],[0,0],[0,0],[0,0],[0.038,-0.291],[0,0],[0,0]],"v":[[-1.759,2.001],[-2.701,8.56],[-2.21,8.78],[5.997,-0.999],[0.945,-0.999],[1.933,-8.564],[1.425,-8.759],[-5.997,2.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","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":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector 177","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/roundcamera_flash_on.json b/TMessagesProj/src/main/res/raw/roundcamera_flash_on.json new file mode 100644 index 000000000..0db9ca132 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/roundcamera_flash_on.json @@ -0,0 +1 @@ +{"v":"5.12.1","fr":60,"ip":0,"op":30,"w":240,"h":240,"nm":"slash_flash","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.732]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.868]},"o":{"x":[0.167],"y":[0.121]},"t":1,"s":[0.645]},{"i":{"x":[0.833],"y":[0.749]},"o":{"x":[0.167],"y":[0.227]},"t":2,"s":[2.076]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.125]},"t":3,"s":[2.909]},{"i":{"x":[0.833],"y":[0.848]},"o":{"x":[0.167],"y":[0.175]},"t":4,"s":[4.583]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":5,"s":[6.097]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.284]},"t":6,"s":[7.351]},{"i":{"x":[0.833],"y":[1.023]},"o":{"x":[0.167],"y":[0.175]},"t":7,"s":[7.871]},{"i":{"x":[0.833],"y":[0.591]},"o":{"x":[0.167],"y":[0.018]},"t":8,"s":[8.346]},{"i":{"x":[0.833],"y":[0.81]},"o":{"x":[0.167],"y":[0.105]},"t":9,"s":[7.738]},{"i":{"x":[0.833],"y":[0.874]},"o":{"x":[0.167],"y":[0.148]},"t":10,"s":[5.362]},{"i":{"x":[0.833],"y":[0.761]},"o":{"x":[0.167],"y":[0.247]},"t":11,"s":[2.317]},{"i":{"x":[0.833],"y":[0.846]},"o":{"x":[0.167],"y":[0.128]},"t":12,"s":[0.768]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.182]},"t":13,"s":[-2.125]},{"i":{"x":[0.833],"y":[0.796]},"o":{"x":[0.167],"y":[0.282]},"t":14,"s":[-4.568]},{"i":{"x":[0.833],"y":[0.912]},"o":{"x":[0.167],"y":[0.141]},"t":15,"s":[-5.595]},{"i":{"x":[0.833],"y":[1.278]},"o":{"x":[0.167],"y":[1.732]},"t":16,"s":[-7.081]},{"i":{"x":[0.833],"y":[0.654]},"o":{"x":[0.167],"y":[0.064]},"t":17,"s":[-7.156]},{"i":{"x":[0.833],"y":[0.818]},"o":{"x":[0.167],"y":[0.11]},"t":18,"s":[-6.83]},{"i":{"x":[0.833],"y":[0.875]},"o":{"x":[0.167],"y":[0.154]},"t":19,"s":[-5.803]},{"i":{"x":[0.833],"y":[0.764]},"o":{"x":[0.167],"y":[0.252]},"t":20,"s":[-4.585]},{"i":{"x":[0.833],"y":[0.847]},"o":{"x":[0.167],"y":[0.129]},"t":21,"s":[-3.981]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":22,"s":[-2.874]},{"i":{"x":[0.833],"y":[0.783]},"o":{"x":[0.167],"y":[0.284]},"t":23,"s":[-1.956]},{"i":{"x":[0.833],"y":[0.858]},"o":{"x":[0.167],"y":[0.135]},"t":24,"s":[-1.574]},{"i":{"x":[0.833],"y":[0.886]},"o":{"x":[0.167],"y":[0.201]},"t":25,"s":[-0.96]},{"i":{"x":[0.833],"y":[0.797]},"o":{"x":[0.167],"y":[0.308]},"t":26,"s":[-0.525]},{"i":{"x":[0.833],"y":[0.869]},"o":{"x":[0.167],"y":[0.141]},"t":27,"s":[-0.364]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.23]},"t":28,"s":[-0.132]},{"t":29,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.732},"o":{"x":0.167,"y":0.167},"t":0,"s":[120,120,0],"to":[0.215,0.204,0],"ti":[-0.692,-0.658,0]},{"i":{"x":0.833,"y":0.868},"o":{"x":0.167,"y":0.121},"t":1,"s":[121.29,121.226,0],"to":[0.692,0.658,0],"ti":[-0.755,-0.717,0]},{"i":{"x":0.833,"y":0.749},"o":{"x":0.167,"y":0.227},"t":2,"s":[124.153,123.945,0],"to":[0.755,0.717,0],"ti":[-0.835,-0.794,0]},{"i":{"x":0.833,"y":0.841},"o":{"x":0.167,"y":0.125},"t":3,"s":[125.817,125.527,0],"to":[0.835,0.794,0],"ti":[-1.063,-1.01,0]},{"i":{"x":0.833,"y":0.848},"o":{"x":0.167,"y":0.175},"t":4,"s":[129.165,128.707,0],"to":[1.063,1.01,0],"ti":[-0.923,-0.877,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.184},"t":5,"s":[132.194,131.585,0],"to":[0.923,0.877,0],"ti":[-0.591,-0.562,0]},{"i":{"x":0.833,"y":0.827},"o":{"x":0.167,"y":0.284},"t":6,"s":[134.702,133.967,0],"to":[0.591,0.562,0],"ti":[-0.374,-0.324,0]},{"i":{"x":0.833,"y":0.851},"o":{"x":0.167,"y":0.161},"t":7,"s":[135.741,134.954,0],"to":[0.374,0.324,0],"ti":[-0.106,0.01,0]},{"i":{"x":0.833,"y":0.577},"o":{"x":0.167,"y":0.19},"t":8,"s":[136.943,135.911,0],"to":[0.106,-0.01,0],"ti":[0.552,0.85,0]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.104},"t":9,"s":[136.379,134.895,0],"to":[-0.552,-0.85,0],"ti":[1.081,1.561,0]},{"i":{"x":0.833,"y":0.874},"o":{"x":0.167,"y":0.147},"t":10,"s":[133.63,130.81,0],"to":[-1.081,-1.561,0],"ti":[0.946,1.329,0]},{"i":{"x":0.833,"y":0.76},"o":{"x":0.167,"y":0.246},"t":11,"s":[129.892,125.529,0],"to":[-0.946,-1.329,0],"ti":[0.934,1.289,0]},{"i":{"x":0.833,"y":0.846},"o":{"x":0.167,"y":0.128},"t":12,"s":[127.952,122.834,0],"to":[-0.934,-1.289,0],"ti":[1.133,1.551,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.181},"t":13,"s":[124.287,117.793,0],"to":[-1.133,-1.551,0],"ti":[0.743,1.01,0]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.281},"t":14,"s":[121.155,113.526,0],"to":[-0.743,-1.01,0],"ti":[0.563,0.737,0]},{"i":{"x":0.833,"y":0.892},"o":{"x":0.167,"y":0.139},"t":15,"s":[119.83,111.731,0],"to":[-0.563,-0.737,0],"ti":[0.492,0.488,0]},{"i":{"x":0.833,"y":0.873},"o":{"x":0.167,"y":0.36},"t":16,"s":[117.774,109.104,0],"to":[-0.492,-0.488,0],"ti":[0.17,-0.025,0]},{"i":{"x":0.833,"y":0.672},"o":{"x":0.167,"y":0.242},"t":17,"s":[116.88,108.802,0],"to":[-0.17,0.025,0],"ti":[-0.003,-0.332,0]},{"i":{"x":0.833,"y":0.813},"o":{"x":0.167,"y":0.112},"t":18,"s":[116.753,109.254,0],"to":[0.003,0.332,0],"ti":[-0.097,-0.571,0]},{"i":{"x":0.833,"y":0.874},"o":{"x":0.167,"y":0.15},"t":19,"s":[116.896,110.796,0],"to":[0.097,0.571,0],"ti":[-0.117,-0.472,0]},{"i":{"x":0.833,"y":0.761},"o":{"x":0.167,"y":0.248},"t":20,"s":[117.333,112.683,0],"to":[0.117,0.472,0],"ti":[-0.136,-0.448,0]},{"i":{"x":0.833,"y":0.846},"o":{"x":0.167,"y":0.128},"t":21,"s":[117.599,113.627,0],"to":[0.136,0.448,0],"ti":[-0.175,-0.534,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.182},"t":22,"s":[118.147,115.373,0],"to":[0.175,0.534,0],"ti":[-0.121,-0.345,0]},{"i":{"x":0.833,"y":0.781},"o":{"x":0.167,"y":0.282},"t":23,"s":[118.652,116.834,0],"to":[0.121,0.345,0],"ti":[-0.1,-0.266,0]},{"i":{"x":0.833,"y":0.857},"o":{"x":0.167,"y":0.135},"t":24,"s":[118.875,117.443,0],"to":[0.1,0.266,0],"ti":[-0.111,-0.281,0]},{"i":{"x":0.833,"y":0.885},"o":{"x":0.167,"y":0.199},"t":25,"s":[119.252,118.427,0],"to":[0.111,0.281,0],"ti":[-0.066,-0.161,0]},{"i":{"x":0.833,"y":0.795},"o":{"x":0.167,"y":0.306},"t":26,"s":[119.539,119.129,0],"to":[0.066,0.161,0],"ti":[-0.047,-0.106,0]},{"i":{"x":0.833,"y":0.857},"o":{"x":0.167,"y":0.141},"t":27,"s":[119.65,119.39,0],"to":[0.047,0.106,0],"ti":[-0.058,-0.102,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.2},"t":28,"s":[119.82,119.767,0],"to":[0.058,0.102,0],"ti":[-0.03,-0.039,0]},{"t":29,"s":[120,120,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.732,0.732,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.868,0.868,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.121,0.121,0]},"t":1,"s":[99.355,99.355,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.749,0.749,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.227,0.227,0]},"t":2,"s":[97.924,97.924,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.841,0.841,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.125,0.125,0]},"t":3,"s":[97.091,97.091,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.175,0.175,0]},"t":4,"s":[95.417,95.417,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[93.903,93.903,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.826,0.826,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.284,0.284,0]},"t":6,"s":[92.649,92.649,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.972,0.972,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.16,0.16,0]},"t":7,"s":[92.129,92.129,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.548,0.548,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.042,-0.042,0]},"t":8,"s":[91.564,91.564,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.806,0.806,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.102,0.102,0]},"t":9,"s":[91.94,91.94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.874,0.874,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.146,0.146,0]},"t":10,"s":[93.6,93.6,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.76,0.76,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.245,0.245,0]},"t":11,"s":[95.805,95.805,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.846,0.846,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.128,0.128,0]},"t":12,"s":[96.941,96.941,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.181,0.181,0]},"t":13,"s":[99.076,99.076,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.791,0.791,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.281,0.281,0]},"t":14,"s":[100.893,100.893,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.892,0.892,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.138,0.138,0]},"t":15,"s":[101.659,101.659,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.928,0.928,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.367,0.367,0]},"t":16,"s":[102.818,102.818,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.316,0.316,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.512,-0.512,0]},"t":17,"s":[103.159,103.159,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.795,0.795,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.095,0.095,0]},"t":18,"s":[103.111,103.111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.872,0.872,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.14,0.14,0]},"t":19,"s":[102.767,102.767,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.757,0.757,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.24,0.24,0]},"t":20,"s":[102.262,102.262,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.845,0.845,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.127,0.127,0]},"t":21,"s":[101.995,101.995,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.881,0.881,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.18,0.18,0]},"t":22,"s":[101.483,101.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.78,0.78,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.279,0.279,0]},"t":23,"s":[101.04,101.04,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.856,0.856,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.134,0.134,0]},"t":24,"s":[100.852,100.852,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.885,0.885,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.197,0.197,0]},"t":25,"s":[100.541,100.541,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.794,0.794,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.303,0.303,0]},"t":26,"s":[100.315,100.315,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.849,0.849,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.14,0.14,0]},"t":27,"s":[100.229,100.229,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.187,0.187,0]},"t":28,"s":[100.102,100.102,100]},{"t":29,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Subtract","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"t":12,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.387,5,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.173,0.329],[-0.211,0.306],[0,0]],"o":[[0,0],[0,0],[-0.372,0],[-0.173,-0.329],[0,0],[0,0]],"v":[[2.954,0.997],[1.131,2.5],[-1.954,2.5],[-2.839,1.965],[-2.777,0.932],[-0.409,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,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":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Subtract","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector 177 (Stroke)","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[100]},{"t":10,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-8.114,56.905,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.828,0.987],[0,0],[0,0],[0,0]],"o":[[-0.183,1.275],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.974,2.727],[-0.727,3.732],[2.989,-0.696],[-0.374,-4.193],[-2.196,-2.69]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,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":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector 177 (Stroke)","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Vector 176","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.5,7.5],[-7.5,-7.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":1,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"t":19,"s":[100]}],"ix":1},"e":{"a":0,"k":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":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector 176","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Vector 177","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.948,-0.008,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[60.429,81.573],[74.571,81.573],[74.571,67.431],[-56.43,-63.57]],"c":true}]},{"t":15,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[-57.071,-35.926],[-42.929,-35.926],[-42.929,-50.068],[-56.43,-63.57]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.181,0.216],[0,0],[0,0],[0,0],[0.167,-0.242],[0,0]],"o":[[0,0],[-0.04,0.279],[0,0],[0,0],[0,0],[0.038,-0.291],[0,0],[0,0]],"v":[[-1.759,2.001],[-2.701,8.56],[-2.21,8.78],[5.997,-0.999],[0.945,-0.999],[1.933,-8.564],[1.425,-8.759],[-5.997,2.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","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":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector 177","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/roundcamera_flip.json b/TMessagesProj/src/main/res/raw/roundcamera_flip.json new file mode 100644 index 000000000..4005960a9 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/roundcamera_flip.json @@ -0,0 +1 @@ +{"v":"5.12.1","fr":60,"ip":0,"op":30,"w":240,"h":240,"nm":"Flip","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Vector","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.919,0],[-1.236,3.496]],"o":[[1.236,3.496],[3.919,0],[0,0]],"v":[[-8.488,3],[0,9],[8.488,3]],"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],[3.919,0],[1.236,-3.496]],"o":[[-1.236,-3.496],[-3.919,0],[0,0]],"v":[[8.488,-3],[0,-9],[-8.488,-3]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5,-3],[-9,-3],[-9,-7]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[5,3],[9,3],[9,7]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","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":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"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":"Vector","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.727]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.867]},"o":{"x":[0.167],"y":[0.12]},"t":1,"s":[-8.843]},{"i":{"x":[0.833],"y":[0.743]},"o":{"x":[0.167],"y":[0.223]},"t":2,"s":[-28.989]},{"i":{"x":[0.833],"y":[0.837]},"o":{"x":[0.167],"y":[0.123]},"t":3,"s":[-41.026]},{"i":{"x":[0.833],"y":[0.843]},"o":{"x":[0.167],"y":[0.171]},"t":4,"s":[-66.074]},{"i":{"x":[0.833],"y":[0.88]},"o":{"x":[0.167],"y":[0.178]},"t":5,"s":[-89.999]},{"i":{"x":[0.833],"y":[0.773]},"o":{"x":[0.167],"y":[0.273]},"t":6,"s":[-111.171]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.132]},"t":7,"s":[-120.494]},{"i":{"x":[0.833],"y":[0.779]},"o":{"x":[0.167],"y":[0.282]},"t":8,"s":[-136.516]},{"i":{"x":[0.833],"y":[0.854]},"o":{"x":[0.167],"y":[0.134]},"t":9,"s":[-143.253]},{"i":{"x":[0.833],"y":[0.884]},"o":{"x":[0.167],"y":[0.194]},"t":10,"s":[-154.392]},{"i":{"x":[0.833],"y":[0.786]},"o":{"x":[0.167],"y":[0.294]},"t":11,"s":[-162.793]},{"i":{"x":[0.833],"y":[0.858]},"o":{"x":[0.167],"y":[0.137]},"t":12,"s":[-166.118]},{"i":{"x":[0.833],"y":[0.886]},"o":{"x":[0.167],"y":[0.203]},"t":13,"s":[-171.317]},{"i":{"x":[0.833],"y":[0.795]},"o":{"x":[0.167],"y":[0.308]},"t":14,"s":[-174.947]},{"i":{"x":[0.833],"y":[0.864]},"o":{"x":[0.167],"y":[0.14]},"t":15,"s":[-176.295]},{"i":{"x":[0.833],"y":[0.889]},"o":{"x":[0.167],"y":[0.216]},"t":16,"s":[-178.268]},{"i":{"x":[0.833],"y":[0.81]},"o":{"x":[0.167],"y":[0.332]},"t":17,"s":[-179.506]},{"i":{"x":[0.833],"y":[0.877]},"o":{"x":[0.167],"y":[0.148]},"t":18,"s":[-179.92]},{"i":{"x":[0.833],"y":[0.899]},"o":{"x":[0.167],"y":[0.26]},"t":19,"s":[-180.452]},{"i":{"x":[0.833],"y":[0.892]},"o":{"x":[0.167],"y":[0.468]},"t":20,"s":[-180.704]},{"i":{"x":[0.833],"y":[1.233]},"o":{"x":[0.167],"y":[0.368]},"t":21,"s":[-180.758]},{"i":{"x":[0.833],"y":[0.854]},"o":{"x":[0.167],"y":[0.061]},"t":22,"s":[-180.774]},{"i":{"x":[0.833],"y":[0.725]},"o":{"x":[0.167],"y":[0.193]},"t":23,"s":[-180.714]},{"i":{"x":[0.833],"y":[0.831]},"o":{"x":[0.167],"y":[0.12]},"t":24,"s":[-180.668]},{"i":{"x":[0.833],"y":[0.877]},"o":{"x":[0.167],"y":[0.164]},"t":25,"s":[-180.563]},{"i":{"x":[0.833],"y":[0.765]},"o":{"x":[0.167],"y":[0.258]},"t":26,"s":[-180.455]},{"i":{"x":[0.833],"y":[-159.556]},"o":{"x":[0.167],"y":[0.129]},"t":27,"s":[-180.404]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.083]},"t":28,"s":[-180.31]},{"t":29,"s":[0]}],"ix":10},"p":{"a":0,"k":[120,120,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.715,0.715,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.118,0.118,0]},"t":1,"s":[99.306,99.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.742,0.742,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.219,0.219,0]},"t":2,"s":[97.63,97.63,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.839,0.839,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.123,0.123,0]},"t":3,"s":[96.597,96.597,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,0]},"t":4,"s":[94.427,94.427,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.883,0.883,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[92.396,92.396,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.818,0.818,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.292,0.292,0]},"t":6,"s":[90.723,90.723,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.936,0.936,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.153,0.153,0]},"t":7,"s":[90.055,90.055,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.325,0.325,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.268,-0.268,0]},"t":8,"s":[89.263,89.263,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.786,0.786,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.095,0.095,0]},"t":9,"s":[89.451,89.451,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.87,0.87,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.136,0.136,0]},"t":10,"s":[90.785,90.785,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.752,0.752,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.233,0.233,0]},"t":11,"s":[92.879,92.879,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.844,0.844,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.126,0.126,0]},"t":12,"s":[94.042,94.042,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.178,0.178,0]},"t":13,"s":[96.338,96.338,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.787,0.787,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.282,0.282,0]},"t":14,"s":[98.354,98.354,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.137,0.137,0]},"t":15,"s":[99.199,99.199,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.892,0.892,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.218,0.218,0]},"t":16,"s":[100.512,100.512,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.85,0.85,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.371,0.371,0]},"t":17,"s":[101.326,101.326,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.962,0.962,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.188,0.188,0]},"t":18,"s":[101.562,101.562,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.814,0.814,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.07,-0.07,0]},"t":19,"s":[101.75,101.75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.693,0.693,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.151,0.151,0]},"t":20,"s":[101.648,101.648,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.822,0.822,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.114,0.114,0]},"t":21,"s":[101.522,101.522,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.876,0.876,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.157,0.157,0]},"t":22,"s":[101.187,101.187,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.767,0.767,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.254,0.254,0]},"t":23,"s":[100.807,100.807,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.851,0.851,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.13,0.13,0]},"t":24,"s":[100.622,100.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.885,0.885,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.19,0.19,0]},"t":25,"s":[100.289,100.289,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.801,0.801,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.302,0.302,0]},"t":26,"s":[100.028,100.028,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.043,1.043,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.143,0.143,0]},"t":27,"s":[99.929,99.929,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.028,0.028,0]},"t":28,"s":[99.791,99.791,100]},{"t":29,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[120,120,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.715,0.715,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.118,0.118,0]},"t":1,"s":[93.059,101.388,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.742,0.742,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.219,0.219,0]},"t":2,"s":[76.296,104.741,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.839,0.839,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.123,0.123,0]},"t":3,"s":[65.97,106.806,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,0]},"t":4,"s":[44.266,111.147,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.883,0.883,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[23.957,115.209,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.008,1.008,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.292,0.292,0]},"t":6,"s":[7.227,118.555,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.678,0.678,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.007,0.007,0]},"t":7,"s":[0.554,119.889,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.87,0.87,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.112,0.112,0]},"t":8,"s":[7.855,118.429,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.752,0.752,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.233,0.233,0]},"t":9,"s":[28.793,114.241,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.844,0.844,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.126,0.126,0]},"t":10,"s":[40.421,111.916,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.178,0.178,0]},"t":11,"s":[63.383,107.323,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.787,0.787,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.282,0.282,0]},"t":12,"s":[83.539,103.292,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.137,0.137,0]},"t":13,"s":[91.987,101.603,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.892,0.892,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.218,0.218,0]},"t":14,"s":[105.121,98.976,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.85,0.85,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.371,0.371,0]},"t":15,"s":[113.259,97.348,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.962,0.962,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.188,0.188,0]},"t":16,"s":[115.62,96.876,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.814,0.814,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.07,-0.07,0]},"t":17,"s":[117.495,96.501,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.693,0.693,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.151,0.151,0]},"t":18,"s":[116.476,96.705,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.822,0.822,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.114,0.114,0]},"t":19,"s":[115.224,96.955,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.876,0.876,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.157,0.157,0]},"t":20,"s":[111.866,97.627,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.767,0.767,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.254,0.254,0]},"t":21,"s":[108.07,98.386,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.851,0.851,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.13,0.13,0]},"t":22,"s":[106.218,98.756,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.885,0.885,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.19,0.19,0]},"t":23,"s":[102.889,99.422,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.801,0.801,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.302,0.302,0]},"t":24,"s":[100.281,99.944,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.043,1.043,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.143,0.143,0]},"t":25,"s":[99.286,100.143,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.028,0.028,0]},"t":26,"s":[97.905,100.419,100]},{"t":27,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.583,-0.583],[-0.833,0],[-0.583,0.583],[0,0.833],[0.583,0.583],[0.833,0],[0.583,-0.583],[0,-0.833]],"o":[[0.583,0.583],[0.833,0],[0.583,-0.583],[0,-0.833],[-0.583,-0.583],[-0.833,0],[-0.583,0.583],[0,0.833]],"v":[[-2.125,2.125],[0,3],[2.125,2.125],[3,0],[2.125,-2.125],[0,-3],[-2.125,-2.125],[-3,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803926945,0.917647063732,0.929411768913,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":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[920,920],"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":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction.json b/TMessagesProj/src/main/res/raw/star_reaction.json new file mode 100644 index 000000000..7570b795d --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":163,"w":512,"h":512,"nm":"MAIN","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[38]},{"t":23,"s":[10]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":20,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[5]},{"t":22,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":10,"op":24,"st":2,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[61.452]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[35.632]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[100]},{"t":19,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[10]},{"t":19,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[40.632]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[10.895]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[100]},{"t":17,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[20]},{"t":23,"s":[30]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":-1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[89]},{"t":23,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"t":18,"s":[40]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[88.709,-81.81],[-165.567,199.251],[-6.5,-184]],"o":[[-180,166],[145,-174.5],[1.033,29.232]],"v":[[-27,133],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[5.857]},{"t":20,"s":[4]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[50]},{"t":20,"s":[55]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Star Main","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.69],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":15,"s":[27]},{"i":{"x":[0.69],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":31,"s":[-5]},{"i":{"x":[0.69],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":37,"s":[2]},{"t":42,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":15,"s":[213.061,450.015,0],"to":[1.439,-27.015,0],"ti":[0,0,0]},{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":23,"s":[256.061,414.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":29,"s":[256.061,453.015,0],"to":[0,0,0],"ti":[0,0,0]},{"t":35,"s":[256.061,443.015,0]}]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":14,"s":[0,31,100]},{"i":{"x":[0.69,0.69,0.69],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":23,"s":[65,110,100]},{"i":{"x":[0.69,0.69,0.69],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":29,"s":[110,91,100]},{"i":{"x":[0.69,0.69,0.69],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":35,"s":[97,103,100]},{"t":41,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-17.673,2.71],[0,0],[-16.014,1.341],[-10.257,0.284],[0,0],[-16.507,-3.751],[0,0],[2.623,-12.415],[6.465,-3.6],[0,0],[1.121,-1.846],[11.851,-3.575],[6.644,0.036],[2.034,0.227],[0,0],[2.687,-0.208],[0,0],[-3.31,0.746],[-0.391,0.401],[0,0],[2.875,6.851],[0,0],[0.231,0.112],[0,0],[26.149,9.441],[0,0],[-14.753,10.161],[-10.596,0.8],[0,0]],"o":[[0,0],[14.088,-2.722],[18.334,-1.306],[0,0],[25.112,1.694],[0,0],[23.526,1.6],[-1.078,5.1],[0,0],[-1.246,1.344],[0,0],[-1.892,0.571],[-2.507,-0.013],[0,0],[-3.42,-0.258],[0,0],[-5.374,0.408],[2.775,-0.625],[0,0],[-0.804,-1.352],[0,0],[-1.012,-0.292],[0,0],[-10.953,-5.593],[0,0],[-17.42,-7.6],[6.824,-4.7],[0,0],[10.416,-0.6]],"v":[[-140.649,-77.791],[-81.992,-87.39],[-28.497,-92.142],[3.159,-92.638],[137.591,-82.067],[186.749,-73.468],[296.256,-43.18],[343.045,-15.101],[322.117,-1.98],[189.95,41.041],[186.474,45.731],[70.519,74.074],[55.167,75.71],[50.123,75.458],[41.573,74.314],[33.073,74.279],[17.416,76.073],[2.992,75.343],[5.816,74.074],[5.642,70.854],[-86.606,65.387],[-175.827,52.193],[-182.432,47.536],[-201.879,37.97],[-271.291,16.563],[-306.556,0.925],[-312.799,-32.093],[-283.928,-43.575],[-181.354,-70.262]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[2.255,-3.776],[25.706,-59.603],[12.564,0.386],[3.846,3.175],[0,0],[5.081,-2.9],[0,0],[-1.872,12.014],[-0.739,5.6],[4.775,19.69],[2.875,6.851],[0,0],[0.129,0.112],[0,0],[14.56,9.441],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[11.084,6.278],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[-3.462,8.027],[-4.741,-0.188],[0,0],[-6.467,-3.6],[0,0],[-7.267,9.107],[1.57,-10.072],[0,0],[-5.061,-20.871],[0,0],[-0.563,-0.292],[0,0],[-6.099,-5.593],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-76.222,-77.791],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[78.709,-82.067],[95.709,-70.267],[167.058,-43.18],[187.958,-16.08],[181.458,-1.98],[116.268,53.887],[102.406,71.097],[58.417,157.926],[29.386,180.795],[19.848,177.263],[3.68,161.288],[-12.393,160.788],[-38.773,179.616],[-61.983,180.846],[-59.716,156.422],[-62.437,115.309],[-86.606,65.387],[-95.81,52.193],[-99.488,47.536],[-110.317,37.97],[-144.389,15.255],[-168.603,0.925],[-171.803,-33.775],[-156.003,-43.575],[-88.422,-68.291]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":42,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":6},"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[0,0.882,0.486,0,0.5,0.882,0.486,0,1,0.882,0.486,0]},{"t":32,"s":[0,0.914,0.553,0.188,0.5,0.898,0.48,0.106,1,0.882,0.408,0.024]}]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_SNQ0np4KuX","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Outline","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[0,0],[-36.33,4.522],[0,0]],"o":[[0,0],[17.779,-1.4],[0,0],[0,0]],"v":[[-273.512,-19.075],[-174.366,-49.603],[-104.372,-62.891],[-39.085,-75.879]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-150.203,-19.075],[-81.722,-44.991],[-56.022,-62.891],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"t":42,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-166.75,-33.375],[-72.95,-47.275],[-46.75,-65.3],[-4.1,-157.45]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[55.022,6.372],[0,0],[2.694,0.7],[3.412,-3.9],[0,0],[17.959,-1.3],[0,0],[2.873,-2.1],[-7.722,-3.6],[0,0],[-5.085,-1.946],[0,0],[-8.765,-5.745],[-0.866,-0.705],[-1.882,28.19]],"o":[[-21.73,-1.5],[0,0],[-1.437,-1.6],[-4.849,-1.2],[0,0],[-32.169,5.823],[0,0],[-4.669,0.3],[-5.029,3.8],[0,0],[17.241,7.9],[0,0],[6.558,2.326],[1.04,0.682],[203.83,16.76],[0,0]],"v":[[182.69,-57.05],[110.832,-74.467],[-27.771,-81.679],[-34.416,-85.179],[-52.195,-81.679],[-116.405,-69.091],[-181.909,-57.104],[-274.589,-27.475],[-286.622,-24.075],[-281.773,-8.875],[-243.873,4.6],[-208.97,18.574],[-190.976,24.057],[-159.587,37.26],[-156.816,39.353],[245.018,-28.028]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-2.832,-1.946],[0,0],[-4.898,-5.697],[-0.482,-0.705],[-15.839,21.145]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[3.652,2.326],[0.579,0.682],[64.215,-7.031],[0,0]],"v":[[91.909,-54.167],[63.809,-74.467],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-62.722,-69.091],[-85.922,-52.491],[-150.803,-27.475],[-157.503,-24.075],[-154.803,-8.875],[-133.7,4.6],[-114.265,18.574],[-104.246,24.057],[-86.767,37.26],[-85.224,39.353],[118.293,-39.855]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.4,-53.75],[49.05,-75.3],[10.075,-156.125],[1.625,-161.25],[-8.15,-156],[-52.575,-71.375],[-76.15,-53.65],[-165.6,-42.025],[-173.05,-38.25],[-173.1,-23.175],[-138.95,4.35],[-99.2,12.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.35,-48.3]],"c":true}]},{"t":42,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.65,-55.125],[50.8,-75.675],[10.825,-157.375],[1.5,-162.375],[-10.275,-157.25],[-53.825,-72.375],[-77.4,-55.275],[-165.6,-43.275],[-173.8,-38.5],[-173.6,-23.175],[-140.575,4.975],[-97.95,14.2],[3.45,1.825],[21.15,10.45],[22.15,12.85],[118.975,-50.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411764706,0.564705882353,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":38},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-0.092,0.461],[0,0],[-2.719,2.809],[0,0],[0,2.1],[8.8,0.6],[0,0],[51.191,7.154],[0,0],[2.873,0.7],[3.412,-4],[0,0],[17.959,-1.3],[0,0],[2.886,-2.083],[-7.722,-3.6],[0,0],[-5.406,-1.902],[0,0],[-8.796,-5.697],[-3.973,-2.929],[0,0],[-0.488,-1.081],[0,0],[-1.45,-0.196],[-2.149,0.157],[0,0],[-4.445,-0.358],[0,0],[-1.148,0.014]],"o":[[0,0],[1.878,-4.267],[0,0],[2.694,-1.5],[0,-5.1],[0,0],[-21.73,-1.5],[0,0],[-1.437,-1.6],[-3.771,-1],[0,0],[-30.554,4.657],[0,0],[-4.669,0.3],[-4.849,3.5],[0,0],[17.241,7.9],[0,0],[5.678,2.823],[10.603,3.408],[0,0],[4.645,12.652],[0,0],[-0.147,0.136],[1.612,0.265],[0,0],[5.08,-0.379],[0,0],[0.932,0.101],[2.503,-0.03]],"v":[[64.195,72.215],[177.994,44.5],[184.864,33.361],[296.795,-11.78],[300.925,-18.48],[261.137,-23.524],[182.69,-57.05],[110.832,-74.467],[-27.771,-81.679],[-35.673,-85.279],[-50.938,-81.179],[-116.404,-69.091],[-181.909,-57.104],[-274.589,-27.475],[-286.622,-24.075],[-281.773,-8.875],[-243.873,4.6],[-207.471,18.866],[-190.976,24.057],[-159.587,37.261],[-136.69,47.793],[-64.2,72.692],[13.069,69.556],[12.085,72.762],[12.761,73.196],[15.105,73.455],[30.029,71.732],[44.782,71.775],[53.851,72.925],[57.494,73.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.112,1.659],[0,0],[-3.455,3.467],[0,0],[0,2.1],[8.241,0.848],[0,0],[42.033,7.923],[0,0],[2.619,0.7],[3.11,-4],[0,0],[16.367,-1.3],[0,0],[2.629,-2.086],[-7.038,-3.6],[0,0],[-4.927,-1.902],[0,0],[-8.017,-5.697],[-3.62,-2.929],[0,0],[-1.473,-2.313],[0,0],[-1.754,-0.706],[-2.6,0.566],[0,0],[-5.376,-1.286],[0,0],[-1.388,0.039]],"o":[[0,0],[2.127,-5.109],[0,0],[2.455,-1.5],[0,-5.1],[0,0],[-19.804,-1.5],[0,0],[-1.309,-1.6],[-3.437,-1],[0,0],[-25.343,5.525],[0,0],[-4.255,0.3],[-4.419,3.5],[0,0],[15.712,7.9],[0,0],[5.174,2.823],[9.663,3.408],[0,0],[3.071,8.243],[0,0],[-0.177,0.489],[1.95,0.952],[0,0],[6.144,-1.363],[0,0],[1.127,0.362],[3.028,-0.108]],"v":[[60.819,87.225],[159.361,49.115],[168.087,36.031],[270.412,-10.661],[274.609,-18.265],[240.04,-24.461],[164.534,-56.473],[101.428,-74.467],[-20.977,-96.944],[-28.178,-100.544],[-42.09,-96.444],[-105.668,-69.091],[-162.711,-56.181],[-249.832,-27.475],[-260.798,-24.075],[-256.379,-8.875],[-221.839,4.6],[-188.663,18.866],[-173.63,24.057],[-145.023,37.261],[-124.897,48.199],[-36.323,70.093],[-1.336,79.918],[-1.646,90.105],[-0.829,91.665],[2.007,92.595],[20.057,86.403],[37.899,86.557],[48.867,90.69],[53.273,91.248]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-0.15,4.053],[0,0],[-4.927,4.784],[0,0],[0,2.1],[7.124,1.344],[0,0],[23.716,9.462],[0,0],[2.109,0.7],[2.505,-4],[0,0],[13.184,-1.3],[0,0],[2.114,-2.093],[-5.669,-3.6],[0,0],[-3.969,-1.902],[0,0],[-6.457,-5.697],[-2.916,-2.929],[0,0],[-3.444,-4.777],[0,0],[-2.362,-1.726],[-3.5,1.383],[0,0],[-7.238,-3.143],[0,0],[-1.869,0.091]],"o":[[0,0],[2.624,-6.794],[0,0],[1.978,-1.5],[0,-5.1],[0,0],[-15.952,-1.5],[0,0],[-1.055,-1.6],[-2.769,-1],[0,0],[-14.922,7.263],[0,0],[-3.428,0.3],[-3.56,3.5],[0,0],[12.656,7.9],[0,0],[4.168,2.823],[7.784,3.408],[0,0],[-0.078,-0.576],[0,0],[-0.239,1.194],[2.625,2.326],[0,0],[8.272,-3.332],[0,0],[1.517,0.885],[4.076,-0.264]],"v":[[54.066,117.246],[122.095,58.344],[134.533,41.372],[217.646,-8.424],[221.977,-17.835],[197.845,-26.333],[128.222,-55.32],[82.618,-74.467],[-7.388,-127.472],[-13.189,-131.072],[-24.395,-126.972],[-84.195,-69.091],[-124.317,-54.336],[-200.318,-27.475],[-209.151,-24.075],[-205.591,-8.875],[-177.769,4.6],[-151.047,18.866],[-138.938,24.057],[-115.895,37.261],[-101.312,49.01],[-38.041,87.466],[-30.147,100.641],[-29.107,124.791],[-28.007,128.605],[-24.189,130.877],[0.111,115.745],[24.132,116.122],[38.899,126.222],[44.83,127.584]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.189,6.447],[0,0],[-6.4,6.1],[0,0],[0,2.1],[6.007,1.84],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-3.01,-1.902],[0,0],[-4.898,-5.697],[-2.212,-2.929],[0,0],[-0.999,-15.106],[0,0],[-2.969,-2.745],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.349,0.142]],"o":[[0,0],[3.122,-8.479],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[3.161,2.823],[5.904,3.408],[0,0],[4.645,12.652],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[1.907,1.409],[5.125,-0.421]],"v":[[47.314,147.266],[84.83,67.573],[100.98,46.713],[164.88,-6.187],[169.345,-17.405],[155.65,-28.206],[91.909,-54.167],[63.809,-74.467],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-62.722,-69.091],[-85.922,-52.491],[-150.803,-27.475],[-157.503,-24.075],[-154.803,-8.875],[-133.7,4.6],[-113.43,18.866],[-104.246,24.057],[-86.767,37.261],[-77.726,49.821],[-64.2,72.692],[-54.553,114.69],[-56.569,159.477],[-55.185,165.544],[-50.386,169.158],[-19.834,145.088],[10.366,145.688],[28.931,161.753],[36.387,163.92]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-102.142,16.885],[-2.611,3.584],[16.317,10.171],[10.645,29.345],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":42,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.735,-56.434],[-163.221,-44.07],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[0,1,0.812,0.251,0.5,1,0.812,0.251,1,1,0.812,0.251,0,1,0.5,1,1,1]},{"t":32,"s":[0,1,1,1,0.5,1,0.99,0.922,1,1,0.98,0.843,0,0,0.5,0.5,1,1]}]}},"s":{"a":0,"k":[55.415,47.417]},"e":{"a":0,"k":[-16.164,-59.226]},"t":1,"nm":"Gradient_JRZHY2LUuM","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":48},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-0.092,0.461],[0,0],[-2.719,2.809],[0,0],[0,2.1],[8.8,0.6],[0,0],[51.191,7.154],[0,0],[2.873,0.7],[3.412,-4],[0,0],[17.959,-1.3],[0,0],[2.886,-2.083],[-7.722,-3.6],[0,0],[-5.406,-1.902],[0,0],[-8.796,-5.697],[-3.973,-2.929],[0,0],[-0.488,-1.081],[0,0],[-1.45,-0.196],[-2.149,0.157],[0,0],[-4.445,-0.358],[0,0],[-1.148,0.014]],"o":[[0,0],[1.878,-4.267],[0,0],[2.694,-1.5],[0,-5.1],[0,0],[-21.73,-1.5],[0,0],[-1.437,-1.6],[-3.771,-1],[0,0],[-30.554,4.657],[0,0],[-4.669,0.3],[-4.849,3.5],[0,0],[17.241,7.9],[0,0],[5.678,2.823],[10.603,3.408],[0,0],[4.645,12.652],[0,0],[-0.147,0.136],[1.612,0.265],[0,0],[5.08,-0.379],[0,0],[0.932,0.101],[2.503,-0.03]],"v":[[64.195,72.215],[177.994,44.5],[184.864,33.361],[296.795,-11.78],[300.925,-18.48],[261.137,-23.524],[182.69,-57.05],[110.832,-74.467],[-27.771,-81.679],[-35.673,-85.279],[-50.938,-81.179],[-116.404,-69.091],[-181.909,-57.104],[-274.589,-27.475],[-286.622,-24.075],[-281.773,-8.875],[-243.873,4.6],[-207.471,18.866],[-190.976,24.057],[-159.587,37.261],[-136.69,47.793],[-64.2,72.692],[13.069,69.556],[12.085,72.762],[12.761,73.196],[15.105,73.455],[30.029,71.732],[44.782,71.775],[53.851,72.925],[57.494,73.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.112,1.659],[0,0],[-3.455,3.467],[0,0],[0,2.1],[8.241,0.848],[0,0],[42.033,7.923],[0,0],[2.619,0.7],[3.11,-4],[0,0],[16.367,-1.3],[0,0],[2.629,-2.086],[-7.038,-3.6],[0,0],[-4.927,-1.902],[0,0],[-8.017,-5.697],[-3.62,-2.929],[0,0],[-1.473,-2.313],[0,0],[-1.754,-0.706],[-2.6,0.566],[0,0],[-5.376,-1.286],[0,0],[-1.388,0.039]],"o":[[0,0],[2.127,-5.109],[0,0],[2.455,-1.5],[0,-5.1],[0,0],[-19.804,-1.5],[0,0],[-1.309,-1.6],[-3.437,-1],[0,0],[-25.343,5.525],[0,0],[-4.255,0.3],[-4.419,3.5],[0,0],[15.712,7.9],[0,0],[5.174,2.823],[9.663,3.408],[0,0],[3.071,8.243],[0,0],[-0.177,0.489],[1.95,0.952],[0,0],[6.144,-1.363],[0,0],[1.127,0.362],[3.028,-0.108]],"v":[[60.819,87.225],[159.361,49.115],[168.087,36.031],[270.412,-10.661],[274.609,-18.265],[240.04,-24.461],[164.534,-56.473],[101.428,-74.467],[-20.977,-96.944],[-28.178,-100.544],[-42.09,-96.444],[-105.668,-69.091],[-162.711,-56.181],[-249.832,-27.475],[-260.798,-24.075],[-256.379,-8.875],[-221.839,4.6],[-188.663,18.866],[-173.63,24.057],[-145.023,37.261],[-124.897,48.199],[-36.323,70.093],[-1.336,79.918],[-1.646,90.105],[-0.829,91.665],[2.007,92.595],[20.057,86.403],[37.899,86.557],[48.867,90.69],[53.273,91.248]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-0.15,4.053],[0,0],[-4.927,4.784],[0,0],[0,2.1],[7.124,1.344],[0,0],[23.716,9.462],[0,0],[2.109,0.7],[2.505,-4],[0,0],[13.184,-1.3],[0,0],[2.114,-2.093],[-5.669,-3.6],[0,0],[-3.969,-1.902],[0,0],[-6.457,-5.697],[-2.916,-2.929],[0,0],[-3.444,-4.777],[0,0],[-2.362,-1.726],[-3.5,1.383],[0,0],[-7.238,-3.143],[0,0],[-1.869,0.091]],"o":[[0,0],[2.624,-6.794],[0,0],[1.978,-1.5],[0,-5.1],[0,0],[-15.952,-1.5],[0,0],[-1.055,-1.6],[-2.769,-1],[0,0],[-14.922,7.263],[0,0],[-3.428,0.3],[-3.56,3.5],[0,0],[12.656,7.9],[0,0],[4.168,2.823],[7.784,3.408],[0,0],[-0.078,-0.576],[0,0],[-0.239,1.194],[2.625,2.326],[0,0],[8.272,-3.332],[0,0],[1.517,0.885],[4.076,-0.264]],"v":[[54.066,117.246],[122.095,58.344],[134.533,41.372],[217.646,-8.424],[221.977,-17.835],[197.845,-26.333],[128.222,-55.32],[82.618,-74.467],[-7.388,-127.472],[-13.189,-131.072],[-24.395,-126.972],[-84.195,-69.091],[-124.317,-54.336],[-200.318,-27.475],[-209.151,-24.075],[-205.591,-8.875],[-177.769,4.6],[-151.047,18.866],[-138.938,24.057],[-115.895,37.261],[-101.312,49.01],[-38.041,87.466],[-30.147,100.641],[-29.107,124.791],[-28.007,128.605],[-24.189,130.877],[0.111,115.745],[24.132,116.122],[38.899,126.222],[44.83,127.584]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.189,6.447],[0,0],[-6.4,6.1],[0,0],[0,2.1],[6.007,1.84],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-3.01,-1.902],[0,0],[-4.898,-5.697],[-2.212,-2.929],[0,0],[-0.999,-15.106],[0,0],[-2.969,-2.745],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.349,0.142]],"o":[[0,0],[3.122,-8.479],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[3.161,2.823],[5.904,3.408],[0,0],[4.645,12.652],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[1.907,1.409],[5.125,-0.421]],"v":[[47.314,147.266],[84.83,67.573],[100.98,46.713],[164.88,-6.187],[169.345,-17.405],[155.65,-28.206],[91.909,-54.167],[63.809,-74.467],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-62.722,-69.091],[-85.922,-52.491],[-150.803,-27.475],[-157.503,-24.075],[-154.803,-8.875],[-133.7,4.6],[-113.43,18.866],[-104.246,24.057],[-86.767,37.261],[-77.726,49.821],[-64.2,72.692],[-54.553,114.69],[-56.569,159.477],[-55.185,165.544],[-50.386,169.158],[-19.834,145.088],[10.366,145.688],[28.931,161.753],[36.387,163.92]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-102.142,16.885],[-2.611,3.584],[16.317,10.171],[10.645,29.345],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":42,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.614,-54.978],[-163.1,-42.614],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[0,1,0.812,0.251,0.5,1,0.812,0.251,1,1,0.812,0.251]},{"t":32,"s":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_4h8pNV3xa2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-17.673,2.71],[0,0],[-16.014,1.341],[-10.257,0.284],[0,0],[-16.507,-3.751],[0,0],[2.623,-12.415],[6.465,-3.6],[0,0],[1.121,-1.846],[11.851,-3.575],[6.644,0.036],[2.034,0.227],[0,0],[2.687,-0.208],[0,0],[-3.31,0.746],[-0.391,0.401],[0,0],[2.875,6.851],[0,0],[0.231,0.112],[0,0],[26.149,9.441],[0,0],[-14.753,10.161],[-10.596,0.8],[0,0]],"o":[[0,0],[14.088,-2.722],[18.334,-1.306],[0,0],[25.112,1.694],[0,0],[23.526,1.6],[-1.078,5.1],[0,0],[-1.246,1.344],[0,0],[-1.892,0.571],[-2.507,-0.013],[0,0],[-3.419,-0.258],[0,0],[-5.374,0.408],[2.775,-0.625],[0,0],[-0.804,-1.352],[0,0],[-1.012,-0.292],[0,0],[-10.953,-5.593],[0,0],[-17.42,-7.6],[6.824,-4.7],[0,0],[10.416,-0.6]],"v":[[-140.649,-77.791],[-81.992,-87.39],[-28.497,-92.142],[3.159,-92.638],[137.591,-82.067],[186.749,-73.468],[296.256,-43.18],[333.79,-16.08],[322.117,-1.98],[189.95,41.041],[186.474,45.731],[70.519,74.074],[55.167,75.71],[50.123,75.458],[41.573,74.314],[33.073,74.279],[17.416,76.073],[2.992,75.343],[5.816,74.074],[5.642,70.854],[-86.606,65.387],[-175.827,52.193],[-182.432,47.536],[-201.879,37.97],[-271.291,16.563],[-306.556,0.925],[-312.799,-32.093],[-283.928,-43.575],[-181.354,-70.262]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[2.255,-3.776],[25.706,-59.603],[12.564,0.386],[3.846,3.175],[0,0],[5.081,-2.9],[0,0],[-1.872,12.014],[-0.739,5.6],[4.775,19.69],[2.875,6.851],[0,0],[0.129,0.112],[0,0],[14.56,9.441],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[11.904,5.566],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[-3.462,8.027],[-4.741,-0.188],[0,0],[-6.467,-3.6],[0,0],[-7.267,9.107],[1.57,-10.072],[0,0],[-5.061,-20.871],[0,0],[-0.563,-0.292],[0,0],[-6.099,-5.593],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-76.222,-77.791],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[78.709,-82.067],[95.709,-70.267],[167.058,-43.18],[187.958,-16.08],[181.458,-1.98],[116.268,53.887],[102.406,71.097],[58.417,157.926],[29.386,180.795],[19.848,177.263],[3.68,161.288],[-12.393,160.788],[-38.773,179.616],[-61.983,180.846],[-59.716,156.422],[-62.437,115.309],[-86.606,65.387],[-95.81,52.193],[-99.488,47.536],[-110.317,37.97],[-144.389,15.255],[-168.603,0.925],[-171.803,-33.775],[-156.003,-43.575],[-88.422,-68.291]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":42,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[0.002,1,0.812,0.251,0.501,1,0.812,0.251,1,1,0.812,0.251]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[0,1,0.757,0.149,0.5,0.965,0.633,0.075,1,0.929,0.51,0]},{"t":42,"s":[0,1,0.757,0.149,0.5,0.965,0.633,0.075,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_xwdmwDuieT","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":15,"op":172,"st":-8,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[38]},{"t":23,"s":[10]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":20,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[17]},{"t":22,"s":[15]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":10,"op":24,"st":2,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[61.452]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[35.632]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[100]},{"t":19,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[25]},{"t":22,"s":[22]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":1,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[40.632]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[10.895]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[100]},{"t":17,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[38]},{"t":22,"s":[40]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":-1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[89]},{"t":23,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[55]},{"t":22,"s":[51]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[88.709,-81.81],[-165.567,199.251],[-6.5,-184]],"o":[[-180,166],[145,-174.5],[1.033,29.232]],"v":[[-27,133],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[5.857]},{"t":20,"s":[4]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[65]},{"t":22,"s":[66]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Circle 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":89,"s":[70]},{"t":99,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[256,433,0],"to":[0,0,0],"ti":[0,0,0]},{"t":99,"s":[256,155,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":99,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[30]},{"t":99,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,206]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":75,"op":100,"st":75,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Circle 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":61,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":73,"s":[80]},{"t":83,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[256,443,0],"to":[0,0,0],"ti":[0,0,0]},{"t":83,"s":[256,115,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":83,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[40]},{"t":83,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":57,"op":84,"st":57,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Circle 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":39,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":51,"s":[80]},{"t":61,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[256,445,0],"to":[0,0,0],"ti":[0,0,0]},{"t":61,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":61,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"t":61,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":35,"op":62,"st":35,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Circle 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.843],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":31,"s":[80]},{"t":41,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[256,453,0],"to":[0,0,0],"ti":[0,0,0]},{"t":41,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":41,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"t":41,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":15,"op":42,"st":15,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Star Main","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":13,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":28,"s":[3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":42,"s":[-3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":54,"s":[3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":65,"s":[-3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":76,"s":[3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":86,"s":[-2]},{"t":95,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[256.061,443.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[256.061,475.54,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":86,"s":[256.061,452.54,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.26,"y":0},"t":98,"s":[256.061,473.015,0],"to":[0,0,0],"ti":[0,0,0]},{"t":107,"s":[256.061,443.015,0]}]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":16,"s":[110,85,100]},{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.15,0.15,0.15],"y":[0,0,0]},"t":87,"s":[75,120,100]},{"i":{"x":[0.74,0.74,0.74],"y":[1,1,1]},"o":{"x":[0.26,0.26,0.26],"y":[0,0,0]},"t":99,"s":[110,90,100]},{"i":{"x":[0.74,0.74,0.74],"y":[1,1,1]},"o":{"x":[0.26,0.26,0.26],"y":[0,0,0]},"t":108,"s":[95,105,100]},{"t":120,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0.125,2.808],[2.014,2.708],[0,0],[0,0],[0,0],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[-0.277,-6.215],[-1.54,-2.07],[0,0],[-3.504,-2.696],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.999,64.236],[-111.461,53.267],[-119.46,44.701],[-121.168,42.457],[-146.1,18.689],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[-0.344,-12.486],[3.043,-4.081],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.404,7.939],[-5.922,-0.62],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.194,-0.306],[0.142,5.133],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[0,0],[0,0],[-7.519,-10.38],[0,0],[-10.071,-9.92],[4.805,-3.666],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[165.637,-73.664],[190.226,-49.861],[185.827,-34.971],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.315,66.647],[-114.312,51.149],[-119.973,43.389],[-121.168,40.999],[-151.313,7.022],[-187.949,-30.295],[-182.841,-64.766],[-165.17,-70.545],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[0.671,-12.439],[3.35,-3.816],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-10.459,5.395],[0,0],[11.76,-2.42],[22.629,3.501],[6.991,5.725],[0,0],[-9.191,9.184],[-5.91,0.162],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.142,0.743],[-0.267,5.115],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[9.393,-3.69],[0,0],[-18.981,-2.937],[0,0],[-9.867,-8.643],[4.252,-4.235],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[167.158,-65.041],[189.716,-39.423],[184.161,-24.968],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-91.847,62.199],[-37.104,38.748],[-40.643,26.737],[-109.952,37.159],[-148.443,11.909],[-184.069,-20.774],[-183.534,-55.371],[-166.893,-63.364],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,58.567],[26.218,14.805],[24.118,10.005],[-99.344,35.341],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":107,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":6},"g":{"p":3,"k":{"a":0,"k":[0,0.914,0.553,0.188,0.5,0.898,0.48,0.106,1,0.882,0.408,0.024]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_3LR35z1uxe","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Outline","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-166.75,-33.375],[-72.95,-47.275],[-46.75,-65.3],[-4.1,-157.45]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-46.75],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"t":107,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-166.75,-33.375],[-72.95,-47.275],[-46.75,-65.3],[-4.1,-157.45]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.65,-55.125],[50.8,-75.675],[10.825,-157.375],[1.5,-162.375],[-10.275,-157.25],[-53.825,-72.375],[-77.4,-55.275],[-165.6,-43.275],[-173.8,-38.5],[-173.6,-23.175],[-140.575,4.975],[-97.95,14.2],[3.45,1.825],[21.15,10.45],[22.15,12.85],[118.975,-50.8]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[0,0],[0,0],[0,0],[0,0],[-98.482,72.589]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-135.837,6.531],[-115.87,23.71],[-104.244,35.132],[-95.847,45.185],[-92.594,65.266],[151.389,-43.793]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[2.052,-1.661],[-3.325,-4.516],[0,0],[0,0],[0,0],[0,0],[0,0],[-62.452,93.525]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.597,-0.324],[-3.62,3.029],[0,0],[9.6,7.9],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.93,-53.672],[-171.245,-51.955],[-172.221,-36.548],[-138.717,-3.261],[-113.87,22.46],[-102.071,36.384],[-93.487,48.459],[-94.87,68.258],[168.027,-59.406]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-99.516,16.915],[27.417,-6.395],[45.618,3.105],[46.617,5.505],[118.1,-47.3]],"c":true}]},{"t":107,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.65,-55.125],[50.8,-75.675],[10.825,-157.375],[1.5,-162.375],[-10.275,-157.25],[-53.825,-72.375],[-77.4,-55.275],[-165.6,-43.275],[-173.8,-38.5],[-173.6,-23.175],[-140.575,4.975],[-97.95,14.2],[3.45,1.825],[21.15,10.45],[22.15,12.85],[118.975,-50.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411764706,0.564705882353,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":38},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.735,-56.434],[-163.221,-44.07],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[0,0],[0,0],[-3.334,-5.586],[-0.647,-3.074],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.554,3.662],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[106.157,155.7],[94.457,62.9],[102.657,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-135.837,6.531],[-115.514,23.925],[-102.072,36.385],[-96.395,43.812],[-93.042,57.852],[-94.205,68.389],[-99.471,114.7],[-104.928,157.016],[-103.028,163.216],[-90.3,166.1],[-15.4,127.5],[14.8,129.802],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0.303,2.078],[4.935,-0.113],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[2.062,-1.649],[-3.325,-4.516],[0,0],[0,0],[0,0],[-3.4,-6.7],[-0.649,-3.68],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.268,-1.701],[-0.735,-5.047],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.597,-0.324],[-3.452,2.761],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.579,4.389],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[171.386,-43.512],[172.771,-51.889],[163.318,-59.202],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.93,-53.672],[-171.245,-51.955],[-172.221,-36.548],[-138.717,-3.261],[-112.514,22.883],[-102.072,36.385],[-94.199,46.957],[-93.687,65.739],[-94.344,76.311],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-86.742,166.175],[-15.886,130.525],[14.314,131.125],[81.903,168.096],[94.8,168.8]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-96.835,23.612],[26.134,-3.413],[45.062,5.058],[38.505,25.846],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":107,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.735,-56.434],[-163.221,-44.07],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,0.99,0.922,1,1,0.98,0.843,0,0,0.5,0.5,1,1]}},"s":{"a":0,"k":[55.415,47.417]},"e":{"a":0,"k":[-16.164,-59.226]},"t":1,"nm":"Gradient_QNQMKVBQfT","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":48},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.614,-54.978],[-163.1,-42.614],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[0,0],[0,0],[-3.334,-5.586],[-0.647,-3.074],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.554,3.662],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[106.157,155.7],[94.457,62.9],[102.657,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-135.837,6.531],[-115.514,23.925],[-102.072,36.385],[-96.395,43.812],[-93.042,57.852],[-94.205,68.389],[-99.471,114.7],[-104.928,157.016],[-103.028,163.216],[-90.3,166.1],[-15.4,127.5],[14.8,129.802],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0.303,2.078],[4.935,-0.113],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[2.062,-1.649],[-3.325,-4.516],[0,0],[0,0],[0,0],[-3.4,-6.7],[-0.649,-3.68],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.268,-1.701],[-0.735,-5.047],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.597,-0.324],[-3.452,2.761],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.579,4.389],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[171.386,-43.512],[172.771,-51.889],[163.318,-59.202],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.93,-53.672],[-171.245,-51.955],[-172.221,-36.548],[-138.717,-3.261],[-112.514,22.883],[-102.072,36.385],[-94.199,46.957],[-93.687,65.739],[-94.344,76.311],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-86.742,166.175],[-15.886,130.525],[14.314,131.125],[81.903,168.096],[94.8,168.8]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-96.835,23.612],[26.134,-3.413],[45.062,5.058],[38.505,25.846],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":107,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.614,-54.978],[-163.1,-42.614],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_mnhPmvM8T8","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[0,0],[0,0],[-3.504,-2.696],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.315,66.647],[-114.312,51.149],[-119.973,44.847],[-121.168,42.457],[-146.1,18.689],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[-0.344,-12.486],[3.043,-4.081],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.404,7.939],[-5.922,-0.62],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.194,-0.306],[0.142,5.133],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[0,0],[0,0],[-7.519,-10.38],[0,0],[-10.071,-9.92],[4.805,-3.666],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[165.637,-73.664],[190.226,-49.861],[185.827,-34.971],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.315,66.647],[-114.312,51.149],[-119.973,43.389],[-121.168,40.999],[-151.313,7.022],[-187.949,-30.295],[-182.841,-64.766],[-165.17,-70.545],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[0.671,-12.439],[3.35,-3.816],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-10.459,5.395],[0,0],[11.725,-0.275],[0,0],[6.991,5.725],[0,0],[-9.191,9.184],[-5.91,0.162],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.142,0.743],[-0.267,5.115],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[7.9,-3.232],[0,0],[-12.298,-3.4],[0,0],[-9.867,-8.643],[4.252,-4.235],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[167.158,-65.041],[189.716,-39.423],[184.161,-24.968],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-91.847,62.199],[-37.104,38.748],[-40.643,26.737],[-109.154,37.884],[-148.443,11.909],[-184.069,-20.774],[-183.534,-55.371],[-166.893,-63.364],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,58.567],[26.218,14.805],[24.118,10.005],[-99.344,35.341],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":107,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.757,0.149,0.5,0.965,0.633,0.075,1,0.929,0.51,0]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_meaT7JBx2M","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Circle 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":89,"s":[70]},{"t":99,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[256,433,0],"to":[0,0,0],"ti":[0,0,0]},{"t":99,"s":[256,155,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":99,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[30]},{"t":99,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,206]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":75,"op":100,"st":75,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Circle 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":61,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":73,"s":[80]},{"t":83,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[256,443,0],"to":[0,0,0],"ti":[0,0,0]},{"t":83,"s":[256,115,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":83,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[40]},{"t":83,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":57,"op":83,"st":57,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Circle 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":39,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":51,"s":[80]},{"t":61,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[256,445,0],"to":[0,0,0],"ti":[0,0,0]},{"t":61,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":61,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"t":61,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":35,"op":61,"st":35,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Circle 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.843],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":31,"s":[80]},{"t":41,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[256,453,0],"to":[0,0,0],"ti":[0,0,0]},{"t":41,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":41,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"t":41,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":15,"op":41,"st":15,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Prem Star Appear 4","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"t":43,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[256,256,0]}},"ao":0,"w":512,"h":512,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Prem Star Move 3","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[256,256,0]}},"ao":0,"w":512,"h":512,"ip":42,"op":222,"st":42,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_click.json b/TMessagesProj/src/main/res/raw/star_reaction_click.json new file mode 100644 index 000000000..c58988d25 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_click.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":125,"w":512,"h":512,"nm":"Prem Star Move 5","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Star Main 3","sr":1,"ks":{"p":{"a":0,"k":[256.061,259.332,0]},"a":{"a":0,"k":[0.061,3.332,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.1,0.1,0.1],"y":[0,0,0]},"t":89,"s":[25,25,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":103,"s":[120,120,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":112,"s":[90,90,100]},{"t":124,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[0]},{"t":124,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.1,"y":0},"t":89,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[32.419,-18.071],[-6.498,-15.36],[-5.92,1.887]],"o":[[-40.332,-2.996],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[11.743,-2.071],[-17.581,6.179],[27.927,-15.026],[17.83,-20.363]],"v":[[104.65,-49],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[8.4,36.075],[-92.683,101.114],[168.738,-27.633]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.927,-15.409],[24.662,-9.89],[-4.717,2.248]],"o":[[-26.7,-2.6],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[9.938,-1.658],[-3.085,2.323],[16.048,-8.635],[4.933,-8.207]],"v":[[92.236,-50.674],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-9.893,1.642],[23.53,12.576],[5.89,38.772],[128.984,-40.492]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-6.702,0.917],[-4.054,-7.358],[-4.048,2.448]],"o":[[-19.12,-2.38],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[8.935,-1.428],[4.975,0.178],[9.443,-5.081],[-2.239,-1.448]],"v":[[85.334,-51.604],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-17.451,2.722],[4.917,-0.491],[21.337,7.046],[106.878,-47.643]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":103,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[0,0],[0,0],[-3.092,2.735]],"o":[[-29.805,-1.848],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0,0],[0,0],[0,0]],"v":[[93.509,-50.543],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-28.257,4.265],[-10.709,1.374],[-0.361,0.078],[90.056,-51.213]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-4.011,-1.969],[-0.939,-2.083],[-17.77,9.867]],"o":[[-10.279,-1.77],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.42,0.206],[14.603,-7.857],[0,0]],"v":[[75.693,-52.707],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-11.546,1.878],[11.739,0.561],[20.432,6.288],[105.366,-48.835]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":112,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-1.796,-3.984],[-31.162,16.374]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27.927,-15.026],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[23.456,15.003],[129.905,-45.633]],"c":true}]},{"t":124,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_vXQH2uPf7C","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[0,1,1,1,0.5,1,1,1,1,1,1,1]},{"t":112,"s":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_oh7KTufb2R","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[0.002,1,1,1,0.501,1,1,1,1,1,1,1]},{"t":112,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_UUJnFZtDrL","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":89,"op":250,"st":70,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Circle","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[27,-21,0]},"s":{"a":0,"k":[90,90,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.3,"y":0.937},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-32.523,0],[0,-32.523],[32.523,0],[0,32.523]],"o":[[32.523,0],[0,32.523],[-32.523,0],[0,-32.523]],"v":[[0,-58.889],[58.889,0],[0,58.889],[-58.889,0]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.064,"y":0.006},"t":87,"s":[{"i":[[-149.117,0],[0,-149.117],[149.117,0],[0,149.117]],"o":[[149.117,0],[0,149.117],[-149.117,0],[0,-149.117]],"v":[[0,-270],[270,0],[0,270],[-270,0]],"c":true}]},{"t":93,"s":[{"i":[[-155.867,0],[0,-155.867],[155.867,0],[0,155.867]],"o":[[155.867,0],[0,155.867],[-155.867,0],[0,-155.867]],"v":[[0,-282.222],[282.222,0],[0,282.222],[-282.222,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-0.276,0],[0,0.276],[0.276,0],[0,-0.276]],"o":[[0.276,0],[0,-0.276],[-0.276,0],[0,0.276]],"v":[[0,0.5],[0.5,0],[0,-0.5],[-0.5,0]],"c":true}]},{"t":93,"s":[{"i":[[154.64,0],[0,-154.64],[-154.64,0],[0,154.64]],"o":[[-154.64,0],[0,154.64],[154.64,0],[0,-154.64]],"v":[[0,-280],[-280,0],[0,280],[280,0]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[27,-21]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":71,"op":91,"st":71,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Lines","sr":1,"ks":{"p":{"a":0,"k":[256.045,256.045,0]},"a":{"a":0,"k":[0.05,0.05,0]},"s":{"a":0,"k":[90,90,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[280.296,47.88],[31.05,2.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[256.515,247.158],[21.606,17.606]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.293,280.767],[0.8,33.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-229.244,256.137],[-21.061,24.494]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-274.668,73.448],[-27.506,5.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-282.302,-157.983],[0.05,0.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[116.54,-278.667],[11.272,-35.839]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-119.501,-274.658],[-10.95,-32.839]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 10","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[282.413,-190.005],[0.05,0.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 9","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[100]},{"t":100,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[100]},{"t":99,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":87,"op":101,"st":42,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"Null 4","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[258,269,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":1,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[104,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[96,104,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[104,96,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[96,104,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[103,96,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[98,102,100]},{"t":79,"s":[109.421,99,100]}]}},"ao":0,"ip":0,"op":77,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Star Main Flash","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":58,"s":[0]},{"t":76,"s":[80]}]},"p":{"a":0,"k":[1.061,17.332,0]},"a":{"a":0,"k":[1.061,17.332,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":72,"s":[{"i":[[-5.335,6.709],[0,0],[-9.326,-5.7],[-2.823,-3.052],[-15.103,-22.59],[-9.745,-4.891],[-25.757,-17.992],[2.862,-12.158],[2.241,-4.473],[25.151,-33.027],[1.248,-5.236],[6.609,-46.211],[15.419,-1.7],[8.158,0.721],[0,0],[7.848,-2.504],[0,0],[6.352,11.122],[1.145,10.361],[0,0],[-18.081,12.437],[-41.786,22.189],[8.594,-2.988],[26.025,-1.286],[13.727,4.954],[0,0],[-6.802,11.181],[-7.155,5.381],[0,0]],"o":[[24.186,-30.416],[11.248,-10.665],[4.112,2],[0,0],[4.782,7.152],[0,0],[9.905,6.919],[-1.177,4.999],[0,0],[-3.535,4.642],[0,0],[-1.486,10.39],[-5.825,0.6],[-39.568,-3.499],[-5.448,-1.8],[-32.596,10.399],[-15.188,2.11],[-2.399,-4.2],[-1.145,-10.361],[3.655,-23.3],[0,0],[7.065,-3.752],[0,0],[-15.438,0.763],[-17.009,-6.138],[-7.962,-7.387],[3.141,-5.164],[23.53,-17.697],[3.994,-3.159]],"v":[[-80.807,-104.57],[-23.131,-169.111],[10.437,-177.273],[22.547,-168.711],[76.225,-108.082],[98.129,-91.431],[172.572,-51.042],[189.584,-20.302],[185.083,-6.006],[145.48,58.297],[141.433,70.736],[137.091,158.8],[111.163,186.8],[92.9,186.56],[10.96,168.3],[-13.276,167.69],[-97.078,184.855],[-134.403,172.9],[-137.83,158.7],[-136.007,120.598],[-106.65,73.032],[-15.725,16.025],[-19.968,6.315],[-102.678,18.338],[-145.357,13.948],[-173.971,-4.324],[-181.535,-37.88],[-165.399,-52.981],[-96.395,-92.779]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.968626972273,0.788234994926,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.969274004768,0.788234994926,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-100.939,176.332]},"a":{"a":0,"k":[-100.939,176.332]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":77,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Star Main","parent":4,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-0.939,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[5.061,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-3.939,11.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[-0.939,-2.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-9.939,1.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[-0.939,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[10.341,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[-8.871,12.582,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[-0.564,-10.138,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[-12.439,1.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[1.579,11.795,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[10.511,-5.744,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[-7.689,17.46,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[2.811,-10.558,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[-18.779,2.582,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[11.356,9.374,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[5.061,-4.352,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[-7.656,17.616,0],"to":[0,0,0],"ti":[0,0,0]},{"t":76,"s":[-4.689,-10.219,0]}]},"a":{"a":0,"k":[1.061,17.332,0]},"s":{"a":1,"k":[{"i":{"x":[0.71,0.71,0.71],"y":[1,1,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"t":72,"s":[117,117,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"t":72,"s":[{"i":[[-6.84,6.129],[0,0],[-8.429,8.131],[-14.006,13.31]],"o":[[17.027,-15.257],[9.37,-6.18],[0,0],[1.908,-1.813]],"v":[[-156.67,-28.712],[-92.161,-67.944],[-58.248,-88.65],[-0.325,-152.2]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[7.817,13.122],[0,0],[1.502,0.7],[1.902,-3.9],[0,0],[9.544,-2.426],[0,0],[1.485,-2.176],[-4.472,-3.364],[0,0],[-12.111,1.679],[0,0],[-2.848,-13.629],[3.074,-7.224],[-33.542,13.684]],"o":[[-33.001,-6.607],[0,0],[-0.801,-1.6],[-2.703,-1.2],[0,0],[-5.725,7.95],[0,0],[-2.575,0.434],[-2.593,3.933],[0,0],[9.978,7.373],[0,0],[9.577,-1.405],[0.292,1.083],[50.605,-27.322],[-5.778,-3.712]],"v":[[112.919,-51.537],[51.879,-81.772],[6.206,-158],[2.502,-161.5],[-7.409,-158],[-56.845,-78.731],[-82.069,-60.705],[-161.254,-39.662],[-167.754,-35.925],[-164.272,-20.918],[-136.631,-0.567],[-102.523,8.424],[-3.029,-4.819],[19.15,9.225],[18.394,20.836],[154.133,-40.42]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[0,0],[10.569,15.538],[0,0],[1.503,0.7],[1.905,-3.9],[0,0],[9.025,-3.708],[0,0],[1.354,-2.262],[-4.669,-3.095],[0,0],[-11.895,1.654],[0,0],[-2.22,-21.518],[20.051,-14.936],[-26.425,5.4]],"o":[[-11.836,-6.276],[0,0],[-0.802,-1.6],[-2.706,-1.2],[0,0],[-7.119,6.755],[0,0],[-2.547,0.587],[-2.356,4.083],[0,0],[10.408,6.773],[0,0],[11.943,-1.752],[0.169,1.405],[77.481,-40.554],[9.299,-10.85]],"v":[[145.72,-42.529],[56.523,-91.987],[6.213,-158],[2.504,-161.5],[-7.42,-158],[-62.135,-88.672],[-89.663,-69.023],[-159.152,-37.683],[-165.424,-33.562],[-161.053,-18.776],[-139.968,-6.451],[-105.168,1.278],[-10.692,-9.964],[16.018,9.254],[-10.879,37.226],[168.93,-23.097]],"c":true}]},{"t":72,"s":[{"i":[[0,0],[11.578,16.424],[0,0],[1.504,0.7],[1.905,-3.9],[0,0],[8.834,-4.178],[-0.71,-2.234],[1.306,-2.294],[-4.741,-2.996],[0,0],[-11.697,0.917],[0,0],[-1.989,-24.411],[26.275,-17.764],[-23.816,2.363]],"o":[[-7.875,-5.251],[0,0],[-0.802,-1.6],[-2.708,-1.2],[0,0],[-7.631,6.317],[0,0],[0.71,2.234],[-2.27,4.139],[0,0],[10.565,6.553],[37.943,-2.974],[12.81,-1.879],[0.124,1.523],[87.334,-45.406],[11.018,-13.252]],"v":[[155.581,-38.923],[58.225,-95.731],[6.215,-158],[2.505,-161.5],[-7.423,-158],[-64.074,-92.317],[-95.563,-74.538],[-158.382,-36.957],[-164.57,-32.696],[-159.872,-17.99],[-142.304,-6.965],[-106.138,1.329],[-19.065,-10.206],[14.87,9.265],[-21.611,43.235],[166.625,-16.746]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":72,"s":[{"i":[[-1.249,7.637],[5.189,38.103],[-5.495,7.011],[0,0],[-0.239,2.086],[2.438,1.075],[14.055,6.648],[7.207,9.231],[0,0],[1.604,0.7],[1.905,-4],[0,0],[9.962,-5.803],[0,0],[1.32,-2.286],[-4.741,-2.996],[0,0],[-12.035,2.293],[0,0],[-4.272,-9.991],[12.407,-8.756],[16.277,-14.097],[3.138,-11.826],[0,0],[-1.485,-1.4],[-6.926,0.73],[-40.273,14.794],[-14.07,-3.275],[-35.269,-3.024],[-2.627,0.5]],"o":[[0,0],[-1.236,-9.076],[14.738,-18.803],[1.661,-1.32],[0.58,-5.067],[0,0],[-15.443,-7.305],[0,0],[-0.802,-1.6],[-2.106,-1],[0,0],[-6.252,5.817],[0,0],[-2.537,0.643],[-2.21,3.828],[0,0],[10.565,6.553],[0,0],[12.81,-1.879],[6.014,11.604],[0,0],[-7.189,6.226],[-3.347,12.615],[-0.343,1.9],[3.769,3.7],[0,0],[8.2,-3.012],[0,0],[4.778,0.41],[5.711,-1.2]],"v":[[120.242,153.851],[119.368,69.761],[130.074,43.663],[167.961,-18.374],[170.118,-24.666],[164.187,-35.079],[95.708,-72.618],[58.226,-95.731],[6.215,-158],[1.803,-161.6],[-6.721,-157.5],[-64.074,-92.317],[-95.563,-74.538],[-158.382,-36.957],[-164.57,-32.696],[-159.872,-17.99],[-142.304,-6.964],[-106.138,1.329],[-19.065,-10.206],[11.719,-2.446],[-0.146,28.063],[-93.597,89.909],[-115.596,119.493],[-118.527,157.3],[-116.357,163.5],[-100.443,168.155],[-15.458,149.16],[11.696,148.453],[97.95,168.827],[108.08,168.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_Ez2phmKzS3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":72,"s":[{"i":[[-5.335,6.709],[0,0],[-9.326,-5.7],[-2.823,-3.052],[-15.103,-22.59],[-9.745,-4.891],[-25.757,-17.992],[2.862,-12.158],[2.241,-4.473],[25.151,-33.027],[1.248,-5.236],[6.609,-46.211],[15.419,-1.7],[8.158,0.721],[0,0],[7.848,-2.504],[0,0],[6.352,11.122],[1.145,10.361],[0,0],[-18.081,12.437],[-41.786,22.189],[8.594,-2.988],[26.025,-1.286],[13.727,4.954],[0,0],[-6.802,11.181],[-7.155,5.381],[0,0]],"o":[[24.186,-30.416],[11.248,-10.665],[4.112,2],[0,0],[4.782,7.152],[0,0],[9.905,6.919],[-1.177,4.999],[0,0],[-3.535,4.642],[0,0],[-1.486,10.39],[-5.825,0.6],[-39.568,-3.499],[-5.448,-1.8],[-32.596,10.399],[-15.188,2.11],[-2.399,-4.2],[-1.145,-10.361],[3.655,-23.3],[0,0],[7.065,-3.752],[0,0],[-15.438,0.763],[-17.009,-6.138],[-7.962,-7.387],[3.141,-5.164],[23.53,-17.697],[3.994,-3.159]],"v":[[-80.807,-104.57],[-23.131,-169.111],[10.437,-177.273],[22.547,-168.711],[76.225,-108.082],[98.129,-91.431],[172.572,-51.042],[189.584,-20.302],[185.083,-6.006],[145.48,58.297],[141.433,70.736],[137.091,158.8],[111.163,186.8],[92.9,186.56],[10.96,168.3],[-13.276,167.69],[-97.078,184.855],[-134.403,172.9],[-137.83,158.7],[-136.007,120.598],[-106.65,73.032],[-15.725,16.025],[-19.968,6.315],[-102.678,18.338],[-145.357,13.948],[-173.971,-4.324],[-181.535,-37.88],[-165.399,-52.981],[-96.395,-92.779]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_qhoXqWB7bm","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_wycXGuHQTp","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-100.939,176.332]},"a":{"a":0,"k":[-100.939,176.332]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":77,"st":0,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect1.json b/TMessagesProj/src/main/res/raw/star_reaction_effect1.json new file mode 100644 index 000000000..3931d34fd --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect1.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":60,"op":150,"w":512,"h":512,"nm":"Reaction +","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"sred 13","sr":1,"ks":{"p":{"a":0,"k":[424.898,270.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[24.42,24.42,100]},{"t":146,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[643.643,-311.038]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":129,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":138,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[672.05,-449.466]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":126,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":137,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[521.835,-653.776]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":123,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":135,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":123,"op":149,"st":-112,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Splash8","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[114.323,321.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.315,7.996],[0,0]],"o":[[-50.738,-85.26],[0,0]],"v":[[343.1,453.608],[187.723,383.833]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.519],[0,0]],"o":[[-0.647,-97.877],[0,0]],"v":[[100.481,524.121],[163.398,392.329]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[20.184,143.776],[0,0]],"o":[[37.778,-141.807],[0,0]],"v":[[227.607,568.091],[177.212,391.069]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-88.831,38.601],[0,0]],"o":[[88.831,-38.601],[0,0]],"v":[[29.508,287.566],[160.542,367.297]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[13.737,-7.008],[0,0]],"o":[[-78.08,35.062],[0,0]],"v":[[237.709,221.709],[189.238,365.248]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":123,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":131,"s":[19.154]},{"t":142,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":121,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":131,"s":[14.964]},{"t":143,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":122,"op":144,"st":35,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"StarStr 9","sr":1,"ks":{"r":{"a":0,"k":-19},"p":{"a":0,"k":[97.622,326.968,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.642]},"t":121,"s":[64,64,100]},{"t":143,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[5.416,-28.737],[28.051,-10.46],[46.536,-44.684],[41.812,-3.268],[71.935,-6.676],[38.542,10.458],[36.381,36.076],[24.43,10.825],[0.78,12.282],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":134,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":143,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[49.217,103.446],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[0.666666686535,0.145098045468,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[1,0.964705882353,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[0.580392181873,1,0.035294119269,1]},{"t":134,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[64.185]},{"t":143,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[0.666666686535,0.145098045468,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[1,0.964705882353,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[0.580392181873,1,0.035294119269,1]},{"t":134,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[100]},{"t":132,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":121,"op":143,"st":121,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"star 31","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[-20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[10]},{"t":112,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.605},"o":{"x":0.167,"y":0.161},"t":67,"s":[260.046,119.899,0],"to":[3.954,-20.399,0],"ti":[31.546,-2.101,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.253},"t":88,"s":[236.171,68.774,0],"to":[-49.046,6.101,0],"ti":[-47.546,-140.899,0]},{"t":120,"s":[107.046,327.399,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":71,"s":[160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":88,"s":[200,200,100]},{"t":120,"s":[140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":121,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":118,"s":[100]},{"t":121,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":121,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79,"s":[0.650980353355,0.946620464325,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":83,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":87,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,0.770103812218,0.407843112946,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":111,"s":[0.938408374786,0.650980353355,1,1]},{"t":116,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":70,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":83,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":85,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":87,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":101,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":111,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":116,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":118,"s":[1,0.733333349228,0.180392161012,1]},{"t":120,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":67,"op":120,"st":58,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Crcl10","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[-9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[-55]},{"t":122,"s":[-117]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97,"s":[630.333,630.333,100]},{"t":122,"s":[542.667,542.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":97,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":101,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":108,"s":[1,0.650980353355,0.930196046829,1],"h":1},{"t":114,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":119,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[3.1]},{"t":122,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[5]},{"t":122,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[5]},{"t":107,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":97,"op":120,"st":-85,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Crcl9","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[-9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[-55]},{"t":121,"s":[-117]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[773.333,773.333,100]},{"t":121,"s":[685.667,685.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":96,"s":[1,1,1,1],"h":1},{"t":102,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":108,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":114,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":119,"s":[1,0.650980353355,0.930196046829,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[3.1]},{"t":121,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[5]},{"t":121,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5]},{"t":106,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":96,"op":120,"st":-86,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"sred 12","sr":1,"ks":{"p":{"a":0,"k":[283.898,426.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":127,"s":[24.42,24.42,100]},{"t":145,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[801.402,-485.529]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":129,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":138,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[753.32,-695.665]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":125,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":136,"s":[152,152]},{"t":147,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[521.835,-653.776]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":122,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":134,"s":[152,152]},{"t":147,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":122,"op":149,"st":-113,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Splash 6","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[288.323,419.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[29.127,45.13],[0,0]],"o":[[-68.168,-6.92],[0,0]],"v":[[340.325,325.3],[188.643,382.233]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.519],[0,0]],"o":[[-96.125,-55.965],[0,0]],"v":[[403.657,405.364],[190.392,397.226]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.365,8.996],[0,0]],"o":[[-60.426,34.369],[0,0]],"v":[[226.21,230.206],[180.317,365.568]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.909,30.679],[0,0]],"o":[[84.466,0.412],[0,0]],"v":[[25.144,309.01],[178.715,374.569]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[13.737,-7.008],[0,0]],"o":[[69.482,-112.084],[0,0]],"v":[[6.34,514.384],[160.253,408.184]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":122,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":130,"s":[19.154]},{"t":141,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":120,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":130,"s":[14.964]},{"t":142,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":121,"op":143,"st":34,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"StarStr 6","sr":1,"ks":{"r":{"a":0,"k":-97},"p":{"a":0,"k":[273.372,431.468,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.154]},"t":120,"s":[73,73,100]},{"t":142,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[9.752,-21.929],[28.051,-10.46],[42.963,-31.296],[41.812,-3.268],[66.113,7.686],[38.542,10.458],[38.843,25.281],[24.429,10.825],[7.487,11.856],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":133,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":142,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[139.39,17.089],[47.002,37.219],[46.587,93.737],[-2.248,36.609],[-58.913,49.413],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[0.431372582912,0.337254911661,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.415686309338,0.964705944061,1,1]},{"t":131,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[64.185]},{"t":142,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[0.431372582912,0.337254911661,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.415686309338,0.964705944061,1,1]},{"t":131,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[100]},{"t":131,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":120,"op":142,"st":120,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"star 30","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-10]},{"t":111,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.672},"o":{"x":0.167,"y":0.133},"t":66,"s":[152.296,201.399,0],"to":[-23.046,-17.899,0],"ti":[17.546,-26.601,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.241},"t":87,"s":[80.296,203.649,0],"to":[-17.546,26.601,0],"ti":[-173.546,14.101,0]},{"t":119,"s":[275.546,421.899,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":70,"s":[160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":87,"s":[200,200,100]},{"t":119,"s":[140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":116,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":120,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":117,"s":[100]},{"t":120,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":116,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":120,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":69,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":73,"s":[0.733102619648,1,0.650980353355,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":77,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":102,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":107,"s":[0.733102619648,1,0.650980353355,1]},{"t":112,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":66,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":69,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":73,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":77,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":87,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":102,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":107,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":112,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":117,"s":[1,0.733333349228,0.180392161012,1]},{"t":119,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":66,"op":119,"st":57,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Crcl8","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[-93]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-139]},{"t":120,"s":[-201]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[923.333,923.333,100]},{"t":116,"s":[853.667,853.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":95,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":99,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":104,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":108,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":112,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[2]},{"t":120,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[8]},{"t":120,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[4]},{"t":105,"s":[5]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":95,"op":119,"st":-87,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Crcl7","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[-93]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[-139]},{"t":119,"s":[-201]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[773.333,773.333,100]},{"t":116,"s":[713.667,713.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":94,"s":[1,1,1,1],"h":1},{"t":99,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":104,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":108,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":112,"s":[0.733102619648,1,0.650980353355,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[3.1]},{"t":119,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[5]},{"t":119,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[4]},{"t":102,"s":[7]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":94,"op":119,"st":-88,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"sred 11","sr":1,"ks":{"p":{"a":0,"k":[103.898,328.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[24.42,24.42,100]},{"t":144,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[576.715,-375.576]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":129,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":140,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[566.878,-638.298]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":124,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":135,"s":[152,152]},{"t":146,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[739.351,-285.672]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":121,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":133,"s":[152,152]},{"t":146,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":121,"op":149,"st":-114,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Splash 7","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[420.323,265.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.52],[0,0]],"o":[[-41.546,-154.438],[0,0]],"v":[[337.341,590.78],[192.669,400.667]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[37.975,94.393],[0,0]],"o":[[-37.975,-94.393],[0,0]],"v":[[145.825,570.506],[180.943,404.93]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-71.034,-13.179],[0,0]],"o":[[71.034,13.179],[0,0]],"v":[[64.794,310.81],[185.404,384.469]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[13.737,-7.008],[0,0]],"o":[[-45.489,43.183],[0,0]],"v":[[248.487,284.35],[190.448,379.787]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":121,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[1.014]},"t":129,"s":[19.154]},{"t":141,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":119,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.963]},"t":129,"s":[14.964]},{"t":142,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":120,"op":143,"st":33,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"StarStr 8","sr":1,"ks":{"r":{"a":0,"k":-171},"p":{"a":0,"k":[422.872,278.968,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.079,0.079,0.678],"y":[1,1,1]},"o":{"x":[0.106,0.106,0.209],"y":[1.468,1.468,0.976]},"t":119,"s":[83.902,83.902,100]},{"t":141,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[12.747,-15.513],[28.051,-10.46],[43.509,-25.916],[41.812,-3.268],[59.754,-3.047],[38.542,10.458],[37.974,26.148],[24.43,10.825],[11.149,13.707],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":132,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[66.374,-72.564],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[40.023,73.159],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":141,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-93.707,-93.448],[11.968,-36.573],[76.553,-98.253],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[40.864,79.601],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[0,0.823529422283,0.484429001808,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.971072614193,1,0.180392146111,1]},{"t":130,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[64.185]},{"t":141,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[0,0.823529422283,0.484429001808,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.971072614193,1,0.180392146111,1]},{"t":130,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[100]},{"t":130,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":119,"op":142,"st":119,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"star 29","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[-20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[10]},{"t":110,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.734},"o":{"x":0.167,"y":0.108},"t":65,"s":[182.046,341.899,0],"to":[-21.046,24.601,0],"ti":[-30.454,-15.601,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.239},"t":86,"s":[163.046,428.899,0],"to":[30.454,15.601,0],"ti":[-23.046,177.601,0]},{"t":118,"s":[413.546,263.899,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[-50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":69,"s":[-160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":86,"s":[-200,200,100]},{"t":118,"s":[-140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":119,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":116,"s":[100]},{"t":119,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"t":119,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.810657441616,0.403921544552,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":79,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":85,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":90,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":110,"s":[1,0.8948097229,0.403921544552,1]},{"t":114,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":65,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":82,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":85,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":90,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":100,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":110,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":114,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":116,"s":[1,0.733333349228,0.180392161012,1]},{"t":118,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":65,"op":118,"st":56,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Crcl6","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[-144]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[-190]},{"t":118,"s":[-252]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[630.333,630.333,100]},{"t":118,"s":[542.667,542.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":93,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":97,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":104,"s":[1,0.650980353355,0.930196046829,1],"h":1},{"t":110,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":115,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[3.1]},{"t":118,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[5]},{"t":118,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[5]},{"t":103,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":93,"op":118,"st":-89,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Crcl5","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-144]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-190]},{"t":117,"s":[-252]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[773.333,773.333,100]},{"t":117,"s":[685.667,685.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":92,"s":[1,1,1,1],"h":1},{"t":98,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":104,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":110,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":115,"s":[1,0.650980353355,0.930196046829,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[3.1]},{"t":117,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[5]},{"t":117,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[5]},{"t":102,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":92,"op":117,"st":-90,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"sred 10","sr":1,"ks":{"p":{"a":0,"k":[332.898,110.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[24.42,24.42,100]},{"t":143,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[836.948,-629.662]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":128,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":139,"s":[152,152]},{"t":149,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[566.878,-638.298]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":123,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":134,"s":[152,152]},{"t":145,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[876.233,-427.322]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":120,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":132,"s":[152,152]},{"t":145,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":120,"op":149,"st":-115,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Splash","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[340.323,107.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.315,7.996],[0,0]],"o":[[45.464,-104.394],[0,0]],"v":[[25.992,545.707],[159.03,407.771]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.519],[0,0]],"o":[[-71.937,-101.664],[0,0]],"v":[[394.248,480.87],[195.771,397.13]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.389,48.834],[0,0]],"o":[[-1.389,-48.834],[0,0]],"v":[[157.365,507.941],[183.898,410.891]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.365,8.996],[0,0]],"o":[[-110.655,-4.14],[0,0]],"v":[[377.579,313.117],[207.843,382.484]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.909,30.679],[0,0]],"o":[[84.466,0.412],[0,0]],"v":[[16.322,328.952],[157.875,377.474]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[68.363,-38.528],[0,0]],"o":[[-68.363,38.528],[0,0]],"v":[[259.492,244.901],[190.448,379.787]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":120,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":128,"s":[19.154]},{"t":139,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":118,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":128,"s":[14.964]},{"t":140,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":119,"op":141,"st":32,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"StarStr","sr":1,"ks":{"r":{"a":0,"k":-170},"p":{"a":0,"k":[339.372,113.968,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.548]},"t":118,"s":[80,80,100]},{"t":140,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[7.506,-18.638],[28.051,-10.46],[52.074,-36.765],[41.812,-3.268],[59.838,2.476],[38.542,10.458],[38.341,28.463],[24.429,10.825],[7.291,14.318],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":131,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":140,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[49.217,103.446],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0.294117629528,0.626297533512,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.415686309338,0.993125855923,1]},{"t":129,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[64.185]},{"t":140,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0.294117629528,0.626297533512,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.415686309338,0.993125855923,1]},{"t":129,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[100]},{"t":129,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":118,"op":140,"st":118,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"star 28","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[-10]},{"t":109,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.725},"o":{"x":0.167,"y":0.112},"t":64,"s":[325.046,349.899,0],"to":[16.454,51.101,0],"ti":[-25.954,25.899,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.242},"t":85,"s":[393.046,380.899,0],"to":[25.954,-25.899,0],"ti":[171.454,56.101,0]},{"t":117,"s":[336.546,103.899,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":68,"s":[160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":85,"s":[200,200,100]},{"t":117,"s":[140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":118,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":115,"s":[100]},{"t":118,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":118,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":67,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[0.733102619648,1,0.650980353355,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":75,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":99,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":103,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":108,"s":[1,0.770103812218,0.407843112946,1]},{"t":113,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":64,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":67,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":79,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":99,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":103,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":108,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":113,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":115,"s":[1,0.733333349228,0.180392161012,1]},{"t":117,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":64,"op":117,"st":55,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Crcl4","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-228]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[-274]},{"t":116,"s":[-336]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[923.333,923.333,100]},{"t":112,"s":[853.667,853.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":91,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":95,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":102,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":108,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":112,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[2]},{"t":116,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[8]},{"t":116,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[4]},{"t":101,"s":[5]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":91,"op":115,"st":-91,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Crcl3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[-228]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-274]},{"t":115,"s":[-336]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[773.333,773.333,100]},{"t":112,"s":[713.667,713.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":90,"s":[1,1,1,1],"h":1},{"t":95,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":102,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":108,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":112,"s":[0.733102619648,1,0.650980353355,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[3.1]},{"t":115,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[5]},{"t":115,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[4]},{"t":98,"s":[7]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":90,"op":115,"st":-92,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"sred 9","sr":1,"ks":{"p":{"a":0,"k":[147.898,136.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[24.42,24.42,100]},{"t":142,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[818.506,-559.993]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":127,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":138,"s":[152,152]},{"t":149,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[464.619,-458.722]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":122,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":133,"s":[152,152]},{"t":144,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[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]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[484.295,-735.969]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":119,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":131,"s":[152,152]},{"t":144,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":119,"op":149,"st":-116,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Splash 9","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[161.323,133.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.265,102.239],[0,0]],"o":[[11.265,-102.239],[0,0]],"v":[[54.959,534.15],[152.931,396.252]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.365,8.995],[0,0]],"o":[[-69.564,63.18],[0,0]],"v":[[258.415,216.808],[171.497,367.942]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-57.379,45.001],[0,0]],"o":[[57.379,-45.001],[0,0]],"v":[[13.749,379.645],[155.598,374.033]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[87.215,-28.737],[0,0]],"o":[[-87.215,28.737],[0,0]],"v":[[328.89,266.765],[190.448,379.787]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":119,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":127,"s":[19.154]},{"t":138,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":117,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":127,"s":[14.964]},{"t":139,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":118,"op":140,"st":31,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"StarStr 10","sr":1,"ks":{"r":{"a":0,"k":-172},"p":{"a":0,"k":[154.372,140.468,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.642]},"t":117,"s":[64,64,100]},{"t":139,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[2.924,-34.831],[28.051,-10.46],[58.861,-41.55],[41.812,-3.268],[74.355,6.359],[38.542,10.458],[41.614,42.162],[24.429,10.825],[-4.077,17.837],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":130,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":139,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[49.217,103.446],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[1,0.337254911661,0.556862771511,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[1,0.964705882353,0,1]},{"t":128,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[64.185]},{"t":139,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[1,0.337254911661,0.556862771511,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[1,0.964705882353,0,1]},{"t":128,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[100]},{"t":128,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":117,"op":139,"st":117,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"star 27","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[-10]},{"t":108,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.731},"o":{"x":0.167,"y":0.109},"t":63,"s":[347.046,169.899,0],"to":[25.454,17.101,0],"ti":[-1.413,21.336,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.221},"t":84,"s":[428.046,214.899,0],"to":[5.954,-89.899,0],"ti":[99.454,-123.899,0]},{"t":116,"s":[147.204,132.385,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[-50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":67,"s":[-160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":84,"s":[-200,200,100]},{"t":116,"s":[-140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":117,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":114,"s":[100]},{"t":117,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":117,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":70,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":80,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":89,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":93,"s":[0.733102619648,1,0.650980353355,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":99,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":104,"s":[0.650980353355,0.946620464325,1,1]},{"t":109,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":64,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":70,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":80,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":84,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":89,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":93,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":99,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":104,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":109,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.468],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":113,"s":[1,0.733333349228,0.180392161012,1]},{"t":116,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":63,"op":116,"st":54,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Crcl2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[-275]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[-321]},{"t":114,"s":[-383]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[630.333,630.333,100]},{"t":114,"s":[542.667,542.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":89,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":93,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":100,"s":[1,0.650980353355,0.930196046829,1],"h":1},{"t":106,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":111,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[3.1]},{"t":114,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[5]},{"t":114,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[5]},{"t":99,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":89,"op":114,"st":-93,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Crcl1","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[-275]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[-321]},{"t":113,"s":[-383]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[773.333,773.333,100]},{"t":113,"s":[685.667,685.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":88,"s":[1,1,1,1],"h":1},{"t":94,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":100,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":106,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":111,"s":[1,0.650980353355,0.930196046829,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[3.1]},{"t":113,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[5]},{"t":113,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[5]},{"t":98,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":88,"op":113,"st":-94,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"PF1","sr":1,"ks":{"p":{"a":0,"k":[243.5,253,0]},"a":{"a":0,"k":[135.5,-3,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[100,100,100]},{"t":66,"s":[111,111,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0,0],[6.5,-1.25],[0,0],[3.75,-4.25],[0,0],[-1.5,-7.75],[0,0],[-3,-5],[0,0],[-6.25,-4.5],[0,0],[-10,0.75],[0,0],[-5.5,6.5],[0,0],[-4.25,8.5],[0,0],[21.25,-1.625],[0,0],[1.25,-1.563],[0,0],[1.25,-1],[0,0],[1.875,0.5],[0,0],[1.75,0.5],[0,0],[0.25,1.75],[0,0],[-0.25,1.875],[0,0],[-2.25,0.75],[0,0],[-2.75,-0.5],[0,0],[-2,-2.375],[0,0],[4.5,7],[0,0],[11,-0.75]],"o":[[0,0],[-6.5,1.25],[0,0],[-3.75,4.25],[0,0],[1.5,7.75],[0,0],[3,5],[0,0],[6.25,4.5],[0,0],[10,-0.75],[0,0],[5.5,-6.5],[0,0],[4.25,-8.5],[0,0],[-3.625,0.625],[0,0],[-1.25,1.562],[0,0],[-1.25,1],[0,0],[-1.875,-0.5],[0,0],[-1.75,-0.5],[0,0],[-0.25,-1.75],[0,0],[0.25,-1.875],[0,0],[2.25,-0.75],[0,0],[2.75,0.5],[0,0],[2,2.375],[0,0],[-4.5,-7],[0,0],[-11,0.75]],"v":[[156,-58],[143,-39.25],[125.5,-46],[124.75,-29.25],[101.75,-18.75],[113,-6.75],[94.75,17.25],[122.75,14.5],[110.5,34.25],[131.75,26.25],[135.75,53.25],[154.5,34.5],[171,39],[174,24.75],[193.75,26.5],[183.25,4.5],[204.5,-10],[159.125,-6],[158.25,-1.625],[154.75,-2.25],[154,1.5],[151.438,-1.563],[150.5,3.5],[150.125,-0.875],[146.5,3.25],[147.25,-2.25],[142.25,1.5],[145,-3],[142.375,-5.5],[145.375,-8.25],[144,-12.75],[148.5,-10.5],[151.5,-14.5],[152.75,-10.25],[157.625,-12.625],[156,-6.625],[204.5,-10.25],[177.25,-19],[183.75,-42.5],[165,-34.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0,0],[18,-6.2],[0,0],[10.65,-11.15],[0,0],[1.2,-19.05],[0,0],[-6.75,-11.75],[0,0],[-11.95,-7.85],[0,0],[-12.85,2.1],[0,0],[-6.3,4.65],[0,0],[-4.4,9.05],[0,0],[11.15,-14.8],[0,0],[7.3,-6.95],[0,0],[9.85,-0.4],[0,0],[9.35,5.25],[0,0],[5.8,7.05],[0,0],[0.45,11.05],[0,0],[-6.4,8.4],[0,0],[-15.2,2.3],[0,0],[-16.8,-4.5],[0,0],[-16.7,-12.7],[0,0],[12,20.2],[0,0],[17.8,13.2]],"o":[[0,0],[-18,6.2],[0,0],[-10.65,11.15],[0,0],[-1.2,19.05],[0,0],[6.75,11.75],[0,0],[11.95,7.85],[0,0],[12.85,-2.1],[0,0],[6.3,-4.65],[0,0],[4.4,-9.05],[0,0],[-11.15,14.8],[0,0],[-7.3,6.95],[0,0],[-9.85,0.4],[0,0],[-9.35,-5.25],[0,0],[-5.8,-7.05],[0,0],[-0.45,-11.05],[0,0],[6.4,-8.4],[0,0],[15.2,-2.3],[0,0],[16.8,4.5],[0,0],[16.7,12.7],[0,0],[-12,-20.2],[0,0],[-17.8,-13.2]],"v":[[176.5,-140.4],[139.5,-94.2],[91.3,-107.6],[76.25,-57.65],[29.2,-41.85],[54.2,0.85],[10.05,49.6],[77.65,45.1],[56.7,94.2],[108.35,77.05],[122.4,135.8],[162.35,88.2],[206.8,106.9],[209,68.55],[255.9,68.2],[229.4,28.95],[289.5,-13.6],[204.15,2.2],[214.6,41.5],[189.3,38.55],[183.6,61.5],[154.75,51.3],[135.35,71.4],[125.35,43.85],[96.75,52.4],[105,25.25],[74.45,22.8],[93.15,-2.65],[83.5,-24.85],[105.1,-32.7],[108.9,-72.25],[140.3,-60.2],[167,-92.6],[176.9,-55.5],[206.7,-63.7],[204.8,-15.7],[288.9,-13.3],[222.5,-35.3],[234.2,-84.7],[191.8,-87.3]],"c":true}]},{"t":72,"s":[{"i":[[0,0],[35,-8.7],[0,0],[19.25,-26.15],[0,0],[-3.3,-32.65],[0,0],[-13.35,-14.4],[0,0],[-26.65,-13.95],[0,0],[-28.65,10.7],[0,0],[-19,21.05],[0,0],[-5.6,24.45],[0,0],[6.65,-26.3],[0,0],[20.3,-19.95],[0,0],[26.25,-3.7],[0,0],[18.35,10.85],[0,0],[11,16.25],[0,0],[-0.35,26.35],[0,0],[-18.9,23.8],[0,0],[-31.7,6.8],[0,0],[-33.1,-13.5],[0,0],[-7.7,-30.2],[0,0],[9,29.2],[0,0],[28.3,18.2]],"o":[[0,0],[-35,8.7],[0,0],[-19.25,26.15],[0,0],[3.3,32.65],[0,0],[13.35,14.4],[0,0],[26.65,13.95],[0,0],[28.65,-10.7],[0,0],[19,-21.05],[0,0],[5.6,-24.45],[0,0],[-6.65,26.3],[0,0],[-20.3,19.95],[0,0],[-26.25,3.7],[0,0],[-18.35,-10.85],[0,0],[-11,-16.25],[0,0],[0.35,-26.35],[0,0],[18.9,-23.8],[0,0],[31.7,-6.8],[0,0],[33.1,13.5],[0,0],[7.7,30.2],[0,0],[-9,-29.2],[0,0],[-28.3,-18.2]],"v":[[189,-208.9],[139.5,-139.2],[73.3,-166.6],[62.75,-92.15],[-20.8,-57.85],[18.7,7.85],[-45.95,79.6],[45.15,65.6],[19.2,137.2],[88.35,115.05],[114.9,193.8],[165.35,123.7],[243.8,161.4],[243,93.05],[310.9,83.2],[281.9,29.95],[344.5,-8.1],[266.15,22.7],[283.6,69],[232.8,79.55],[224.1,130.5],[166.25,106.8],[122.85,148.4],[98.85,100.85],[52.75,102.9],[61,52.75],[13.45,53.3],[30.65,7.85],[13.5,-46.85],[73.6,-80.2],[87.9,-134.75],[138.8,-121.2],[182,-164.6],[209.9,-110],[273.7,-111.7],[259.3,-48.7],[346.4,-8.3],[273.5,-59.3],[313.7,-143.7],[214.3,-120.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[1,1,1,1]},{"t":72,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[1,0.847058883368,0,1]},{"t":72,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":62,"op":73,"st":-1,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"S9","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-23.75,-9.25],[-0.5,9],[-4.75,-12.25],[3.75,-9.25]],"o":[[-25,-19.25],[-5.5,7.5],[-17,-1.75],[5.25,-4.25]],"v":[[309,82.5],[280.5,30.5],[282.5,68.75],[248.75,87.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-10,18.5],[0,0],[6.25,-12.5],[0,0]],"o":[[10,-18.5],[0,0],[-6.25,12.5],[0,0]],"v":[[319,87.5],[307.75,49.25],[306.25,82],[278.25,99.25]],"c":true}]},{"t":85,"s":[{"i":[[-10,18.5],[0,0],[6.25,-12.5],[0,0]],"o":[[10,-18.5],[0,0],[-6.25,12.5],[0,0]],"v":[[348,111.5],[367.75,57.75],[345.75,109.5],[312.75,154.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":73,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"S8","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-12.75,-20.75],[-15.5,29],[-4.75,-17],[0,0]],"o":[[-10.75,-20.25],[-9,-0.75],[-9,-10.5],[0,0]],"v":[[244.25,159.25],[239.5,95],[224.25,130.5],[185.75,123]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-19.75,11.75],[0,0],[13.75,-7.5],[0,0]],"o":[[19.75,-11.75],[0,0],[-13.75,7.5],[0,0]],"v":[[248.25,165.75],[262,134],[242.25,156],[209.75,162.5]],"c":true}]},{"t":85,"s":[{"i":[[-19.75,11.75],[0,0],[13.75,-7.5],[0,0]],"o":[[19.75,-11.75],[0,0],[-13.75,7.5],[0,0]],"v":[[262.25,197.75],[303.5,163.5],[261.25,195],[220.25,217]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false}],"ip":72,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"S6_7","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[31.75,-38.75],[-18.25,-4.25],[13.75,-9.25],[1.5,2]],"o":[[26.25,-20],[-4.75,-6.75],[5.5,-18.75],[-1.5,-2]],"v":[[25.75,130.25],[84.75,110.25],[56,102.25],[54.25,70.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-15.75,-19.25],[0,0],[9,10.75],[0,0]],"o":[[15.75,19.25],[0,0],[-9,-10.75],[0,0]],"v":[[22.75,144.75],[67.25,153.75],[34,138.25],[30.75,108.75]],"c":true}]},{"t":85,"s":[{"i":[[-14.75,-13.25],[0,0],[13,12.75],[0,0]],"o":[[14.75,13.25],[0,0],[-13,-12.75],[0,0]],"v":[[5.75,177.75],[43.25,200.75],[6.5,174.25],[-23.25,148.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-0.5,-51.25],[-12.75,-2],[5.25,-10.25],[10.5,0.25]],"o":[[14.25,-38.25],[-17.25,-7.5],[0.75,-10.75],[6.25,10.5]],"v":[[116.5,191.25],[162.5,124.25],[122.75,151.25],[99.25,121.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-29.5,-7.25],[0,0],[18.25,2.75],[0,0]],"o":[[29.5,7.25],[0,0],[-18.25,-2.75],[0,0]],"v":[[116.5,191.25],[160.5,171.75],[119.75,178.75],[88.25,160.5]],"c":true}]},{"t":85,"s":[{"i":[[-38,-3.25],[0,0],[25.75,2.25],[0,0]],"o":[[38,3.25],[0,0],[-25.75,-2.25],[0,0]],"v":[[120,226.75],[178,224.75],[120.75,224.25],[69.75,213]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":71,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"S4_5","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[47.75,-22.75],[-20.75,-5.25],[12.75,-4.75],[1.5,2]],"o":[[42.25,-12.5],[-10,-8.75],[12,-13.5],[-1.5,-2]],"v":[[-37.25,75.5],[48.5,63.5],[10,56],[21.75,17.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-9.25,-21.5],[0,0],[6.5,16.5],[0,0]],"o":[[9.25,21.5],[0,0],[-6.5,-16.5],[0,0]],"v":[[-28.25,74],[18,89],[-15,66],[-9.75,21.75]],"c":true}]},{"t":85,"s":[{"i":[[-9.25,-21.5],[0,0],[6.5,16.5],[0,0]],"o":[[9.25,21.5],[0,0],[-6.5,-16.5],[0,0]],"v":[[-65.75,82],[-37,130.5],[-64.5,77.5],[-77.75,13.25]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[36.75,2],[-4,-12.25],[13.75,20],[-4.25,13]],"o":[[26,21.25],[3.25,2.5],[27.75,-6],[-4.5,2]],"v":[[-15.75,-55.5],[19.5,2.25],[12.25,-47],[55.25,-78.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[7.25,-23],[0,0],[-4.25,16.5],[0,0]],"o":[[-7.25,23],[0,0],[4.25,-16.5],[0,0]],"v":[[-30.75,-65.5],[-11.5,-19.25],[-15.25,-61],[7.25,-90]],"c":true}]},{"t":85,"s":[{"i":[[13.25,-28],[0,0],[-12.75,27],[0,0]],"o":[[-13.25,28],[0,0],[12.75,-27],[0,0]],"v":[[-55.75,-103.5],[-78.5,-29.25],[-52.75,-102.5],[-15.25,-156]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":70,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"S2_3","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[33.25,34.5],[4,-18.75],[5.75,15.25],[1.5,2]],"o":[[7.25,32.5],[3.25,2.5],[19.75,20.25],[-1.5,-2]],"v":[[74.75,-162.5],[73.5,-82.75],[86.25,-138.75],[132.75,-122]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[25.75,-9],[0,0],[-22.25,7.75],[0,0]],"o":[[-25.75,9],[0,0],[22.25,-7.75],[0,0]],"v":[[68.75,-187],[44.5,-146.25],[72.25,-175.75],[111.25,-176]],"c":true}]},{"t":85,"s":[{"i":[[25.75,-9],[0,0],[-22.25,7.75],[0,0]],"o":[[-25.75,9],[0,0],[22.25,-7.75],[0,0]],"v":[[61.25,-212],[6.5,-178.25],[63.75,-207.75],[116.75,-225.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-1.25,50.5],[9.5,-11.25],[-9.25,24.75],[-17.25,-9.5]],"o":[[-16.25,57.5],[3.25,2.5],[0.25,21.75],[0,-3.5]],"v":[[187.75,-204.5],[146,-124.75],[182.75,-166.25],[201.75,-116.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[27.75,7.5],[0,0],[-15.25,-4.75],[0,0]],"o":[[-27.75,-7.5],[0,0],[15.25,4.75],[0,0]],"v":[[191.25,-200.5],[146.5,-178.75],[188.25,-187.25],[222.25,-159]],"c":true}]},{"t":85,"s":[{"i":[[27.75,7.5],[0,0],[-15.25,-4.75],[0,0]],"o":[[-27.75,-7.5],[0,0],[15.25,4.75],[0,0]],"v":[[203.75,-221],[152.25,-227],[203.75,-218.75],[250,-203.25]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":69,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"S10","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-41.75,4.5],[20,16.25],[-19.25,-2.75],[0,0]],"o":[[-30.25,-9.5],[3.25,2.5],[-30.25,4.75],[0,0]],"v":[[344.75,-8],[292,-34.25],[320.75,-9.25],[280.75,26.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[0.25,17.5],[16,4.75],[-0.75,-18.25],[0,0]],"o":[[-0.25,-17.5],[3.25,2.5],[0.75,18.25],[0,0]],"v":[[346.25,-9],[322.5,-40.75],[333.75,-11.25],[322.25,21]],"c":true}]},{"t":85,"s":[{"i":[[0.75,17.5],[4,12.75],[-0.75,-18.25],[0,0]],"o":[[-0.75,-17.5],[3.25,2.5],[0.75,18.25],[0,0]],"v":[[376.25,-12],[368.5,-58.75],[372.25,-11.75],[372.75,37]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":68,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"S1","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-27.25,24.5],[41,-1.25],[-7.25,9.75],[0,0]],"o":[[-17.25,13.5],[3.25,2.5],[-5.75,23.25],[0,0]],"v":[[307.75,-139],[214,-108.75],[276.75,-112.25],[275.25,-59]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[9.75,18.5],[0,0],[-9.25,-12.75],[0,0]],"o":[[-9.75,-18.5],[0,0],[9.25,12.75],[0,0]],"v":[[308.25,-130.5],[260.5,-141.25],[294.75,-126.25],[306.25,-83]],"c":true}]},{"t":85,"s":[{"i":[[13.25,18],[0,0],[-9.25,-12.75],[0,0]],"o":[[-13.25,-18],[0,0],[9.25,12.75],[0,0]],"v":[[329.25,-142],[280,-187.75],[326.25,-140.75],[355.75,-93]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":67,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"Points","parent":40,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":94,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-4.286]},{"t":94,"s":[0]}]},"p":{"a":0,"k":[0.5,3.5,0]},"a":{"a":0,"k":[0.5,3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.827,0.827,0.8],"y":[0.84,0.84,1]},"o":{"x":[0.436,0.436,0.431],"y":[0.438,0.438,0]},"t":64,"s":[68.431,68.431,100]},{"i":{"x":[0.708,0.708,0.479],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":68,"s":[90,90,100]},{"t":94,"s":[107,107,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"o":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"v":[[385.072,18.248],[354.843,22.31],[350.781,-7.919],[381.011,-11.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[367.391,4.348]},"a":{"a":0,"k":[367.391,4.348]},"s":{"a":1,"k":[{"i":{"x":[0.804,0.804],"y":[0.846,0.846]},"o":{"x":[0.431,0.431],"y":[0.428,0.428]},"t":64,"s":[123.181,123.181]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"o":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"v":[[261.231,286.312],[236.984,267.809],[255.487,243.561],[279.735,262.064]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256.522,264.13]},"a":{"a":0,"k":[256.522,264.13]},"s":{"a":1,"k":[{"i":{"x":[0.804,0.804],"y":[0.846,0.846]},"o":{"x":[0.431,0.431],"y":[0.428,0.428]},"t":64,"s":[123.181,123.181]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"o":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"v":[[-14.927,388.164],[-18.989,357.934],[11.24,353.873],[15.302,384.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.348,370.652]},"a":{"a":0,"k":[-4.348,370.652]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"o":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"v":[[-282.221,264.91],[-263.717,240.663],[-239.47,259.166],[-257.973,283.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-263.043,260.87]},"a":{"a":0,"k":[-263.043,260.87]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"o":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"v":[[-384.072,-11.248],[-353.843,-15.31],[-349.781,14.919],[-380.011,18.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-369.565,0]},"a":{"a":0,"k":[-369.565,0]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"o":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"v":[[-260.819,-278.542],[-236.571,-260.039],[-255.075,-235.791],[-279.322,-254.295]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-259.783,-258.696]},"a":{"a":0,"k":[-259.783,-258.696]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"o":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"v":[[15.927,-381.164],[19.989,-350.934],[-10.24,-346.873],[-14.302,-377.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-365.217]},"a":{"a":0,"k":[0,-365.217]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"o":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"v":[[283.221,-257.91],[264.717,-233.663],[240.47,-252.166],[258.973,-276.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[257.609,-254.348]},"a":{"a":0,"k":[257.609,-254.348]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":64,"op":93,"st":57,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":94,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-2.049,6.248,0]},"s":{"a":0,"k":[29,29,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,-62.396],[62.396,0],[0,62.396],[-62.396,0]],"o":[[0,62.396],[-62.396,0],[0,-62.396],[62.396,0]],"v":[[110.928,6.248],[-2.049,119.225],[-115.026,6.248],[-2.049,-106.729]],"c":true}]},{"t":94,"s":[{"i":[[0,-196.476],[196.476,0],[0,196.476],[-196.476,0]],"o":[[0,196.476],[-196.476,0],[0,-196.476],[196.476,0]],"v":[[353.703,6.248],[-2.049,362],[-357.801,6.248],[-2.049,-349.504]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.853],"y":[0.857]},"o":{"x":[0.312],"y":[0.298]},"t":61,"s":[103.67]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[18]},{"t":94,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":61,"op":93,"st":59,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"SfCrcl10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":127,"s":[50]},{"t":147,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":116,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":123,"s":[744,744,100]},{"t":147,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.233,0,0.304,0,0.375,0,0.427,0.5,0.48,1,0.71,0.5,0.94,0,0.97,0,1,0]},{"t":147,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.525,0,0.611,0,0.697,0,0.787,0.5,0.877,1,0.917,0.5,0.957,0,0.979,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":116,"op":147,"st":93,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"SfCrcl9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":102,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":109,"s":[50]},{"t":129,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":98,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":105,"s":[744,744,100]},{"t":129,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[0,0.679,1,0.443,0.5,0.688,1,0.435,1,0.697,1,0.427,0.22,0,0.297,0,0.375,0,0.427,0.5,0.48,1,0.684,0.5,0.887,0,0.944,0,1,0]},{"t":129,"s":[0,0.679,1,0.443,0.5,0.688,1,0.435,1,0.697,1,0.427,0.603,0,0.69,0,0.777,0,0.837,0.5,0.897,1,0.934,0.5,0.97,0,0.985,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":98,"op":129,"st":75,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"SfCrcl8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":90,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":97,"s":[50]},{"t":117,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":86,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":93,"s":[744,744,100]},{"t":117,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[0,0.576,0.935,1,0.5,0.547,0.919,1,1,0.518,0.904,1,0.235,0,0.305,0,0.375,0,0.427,0.5,0.48,1,0.699,0.5,0.918,0,0.959,0,1,0]},{"t":117,"s":[0,0.576,0.935,1,0.5,0.547,0.919,1,1,0.518,0.904,1,0.627,0,0.689,0,0.75,0,0.814,0.5,0.877,1,0.916,0.5,0.955,0,0.977,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":86,"op":117,"st":63,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"SfCrcl7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":77,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":84,"s":[50]},{"t":104,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":73,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":80,"s":[744,744,100]},{"t":104,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[0,1,0.576,0.945,0.5,1,0.547,0.936,1,1,0.518,0.926,0.24,0,0.307,0,0.375,0,0.427,0.5,0.48,1,0.699,0.5,0.918,0,0.959,0,1,0]},{"t":104,"s":[0,1,0.576,0.945,0.5,1,0.547,0.936,1,1,0.518,0.926,0.608,0,0.694,0,0.78,0,0.826,0.5,0.873,1,0.907,0.5,0.943,0,0.971,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":73,"op":104,"st":50,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"SfCrcl6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":61,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":68,"s":[50]},{"t":92,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":61,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":68,"s":[744,744,100]},{"t":92,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.228,0,0.301,0,0.375,0,0.427,0.5,0.48,1,0.707,0.5,0.935,0,0.968,0,1,0]},{"t":92,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.585,0,0.641,0,0.697,0,0.787,0.5,0.877,1,0.922,0.5,0.967,0,0.984,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":61,"op":92,"st":38,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"Splash 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[100]},{"t":73,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[33,65,0]},"s":{"a":0,"k":[96,96,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-236.98,110.536],[19.577,58.91]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[55,50.5]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":156.108},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-248.641,222.266],[-2.152,75.418]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[25,70]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":334.031},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-226.049,-26.349],[-9.319,46.459]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[36.5,60]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":232.385},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-235.78,15.937],[-14.93,57.289]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[30,65]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":57.723},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-217.719,48.33],[10.663,66.502]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[10,61.5]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":6.451},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[58.154]},{"t":74,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[23]},{"t":74,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[29.216,56.11]},"a":{"a":0,"k":[29.216,56.11]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-24.301,0],[0,-24.301],[24.301,0],[0,24.301]],"o":[[24.301,0],[0,24.301],[-24.301,0],[0,-24.301]],"v":[[0,-44],[44,0],[0,44],[-44,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.359],"y":[1]},"o":{"x":[0.108],"y":[0.288]},"t":62,"s":[18.573]},{"t":74,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[33,65]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.348,0.348],"y":[0.917,0.917]},"o":{"x":[0.104,0.104],"y":[0.237,0.237]},"t":62,"s":[127.325,127.325]},{"t":74,"s":[342.605,342.605]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":62,"op":75,"st":-7,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect2.json b/TMessagesProj/src/main/res/raw/star_reaction_effect2.json new file mode 100644 index 000000000..36922059d --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect2.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":83,"w":512,"h":512,"nm":"REACTION MAIN","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 19 :M","sr":1,"ks":{"r":{"a":0,"k":20},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.92},"o":{"x":0.167,"y":0.167},"t":47,"s":[356,346.789,0],"to":[0,0,0],"ti":[-2.5,0.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.523,"y":0.076},"t":57,"s":[364.5,278.289,0],"to":[2,1.5,0],"ti":[0,0,0]},{"t":80,"s":[378,588.789,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.2,0.2,0.2],"y":[0,0,0]},"t":67,"s":[55,55,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":66,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":71,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"t":81,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":47,"op":79,"st":20,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6 :M","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[33]},{"t":87,"s":[-44]}]},"p":{"a":1,"k":[{"i":{"x":0.14,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[344.409,365.398,0],"to":[-126.432,-9.795,0],"ti":[0,0,0]},{"t":94,"s":[154.125,454.17,0]}]},"a":{"a":0,"k":[245.677,245.967,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":76,"s":[38,38,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[{"i":[[2.448,-6.196],[0,0],[0,0],[0.488,-0.35],[0.625,-0.032],[0,0],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[8.812,3.695],[-0.974,0.778],[0,0],[-5.794,2.04],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[0,0],[-0.23,0.582],[-0.488,0.35],[0,0],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[0,0],[-2.116,-0.888],[0,0],[0,0],[6.535,-2.3],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-27.836,-60.886],[-36.9,-40.968],[-38.007,-39.548],[-39.707,-38.954],[-61.382,-36.718],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.598,32.677],[23.063,17.68],[-13.832,-4.832],[28.999,-1.867],[41.215,-3.575],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.187,-12.4],[0,0],[0,0],[0.328,-0.35],[0.419,-0.032],[0,0],[0,0],[-3.355,-4.022],[0,0],[0.208,-1.211],[0,0],[-4.504,3.673],[0,0],[-0.719,-0.718],[0,0],[1.057,6.33],[0,0],[5.998,3.025],[-0.654,0.778],[0,0],[-5.947,3.537],[0,0],[5.262,1.288],[0,0],[0.301,1.173],[0,0]],"o":[[0,0],[0,0],[-0.154,0.582],[-0.328,0.35],[0,0],[0,0],[-5.65,0.341],[0,0],[0.654,0.784],[0,0],[-0.515,7.471],[0,0],[0.721,-0.713],[0,0],[6.482,6.839],[0,0],[0,0],[-0.957,-1.063],[0,0],[0,0],[4.946,-2.942],[1.983,-5.363],[0,0],[-0.841,-0.071],[0,0],[-3.05,-10.609]],"v":[[-20.671,-76.168],[-26.82,-57.887],[-32.968,-39.605],[-33.711,-38.185],[-34.852,-37.59],[-46.317,-36.24],[-57.782,-34.891],[-62.544,-21.459],[-44.265,1.58],[-43.532,4.855],[-47.798,51.394],[-36.02,60.528],[-13.422,42.333],[-11.043,42.341],[11.083,59.99],[23.761,51.259],[22.165,28.554],[16.127,17.225],[-24.827,-7.912],[17.028,-3.118],[29.554,-5.683],[38.392,-19.012],[33.547,-33.15],[10.365,-36.881],[8.487,-38.924],[-3.109,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[4.346,-17.571],[0,0],[0,0],[0.095,-0.334],[0.062,-0.032],[0,0],[0,0],[0.383,-4.034],[0,0],[0.158,-1.211],[0,0],[-5.494,-0.028],[0,0],[-0.549,-0.718],[0,0],[-1.852,4.025],[0,0],[0,0],[-0.499,0.778],[0,0],[0,0],[0,0],[1.466,4.309],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[0,0],[-0.023,0.582],[-0.095,0.334],[0,0],[0,0],[-0.319,1.045],[0,0],[0.499,0.784],[0,0],[0.315,8.425],[0,0],[0.55,-0.713],[0,0],[5.101,-1.928],[0,0],[0,0],[-0.154,-1.21],[0,0],[0,0],[0,0],[0.01,-4.748],[0,0],[-0.642,-0.071],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-27.799,-55.386],[-31.876,-38.468],[-32.079,-37.08],[-32.341,-36.517],[-32.511,-35.437],[-32.681,-34.357],[-35.881,-22.129],[-39.163,-7.284],[-38.604,-4.009],[-24.815,46.575],[-10.631,61.028],[-11.577,60.992],[-9.762,61],[-7.726,60.74],[3.477,46.1],[11.183,17.951],[14.785,-5.07],[-30.65,-7.458],[14.904,-5.515],[15.045,-6.941],[14.089,-18.137],[10.659,-31.184],[9.172,-35.983],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[2.671,-11.635],[0,0],[0.366,-0.557],[0,0],[-0.948,-3.012],[0,0],[-0.384,-0.181],[-0.064,-0.3],[3.486,-0.843],[-0.017,-0.143],[0,0],[-1.827,-2.38],[0,0],[-0.998,0.385],[-1.831,4.542],[-0.48,5.854],[0,0],[-0.042,0.307],[-0.104,0.457],[0,0],[0,0],[0,0],[1.022,1.957],[0,0],[0.215,1.191],[0,0]],"o":[[0,0],[-0.242,1.181],[0,0],[-2.561,6.177],[0,0],[0.029,0.188],[0.378,0.376],[0.072,0.342],[-7.803,0.771],[0,0],[1.223,8.157],[1.427,3.832],[0.745,0.74],[0,0],[2.248,-4.049],[0,0],[0.149,-0.914],[0.1,-0.742],[0,0],[0,0],[0,0],[-0.284,-5.629],[0,0],[-0.43,-0.814],[0,0],[-3.664,-13.582]],"v":[[-22.573,-74.615],[-32.675,-40.084],[-34.055,-35.361],[-36.469,-26.75],[-38.552,-10.277],[-37.15,-8.124],[-35.921,-6.295],[8.703,-9.728],[-28.336,2.313],[-34.671,16.105],[-27.35,41.028],[-21.252,55.226],[-12.497,61.569],[-9.609,61.924],[-0.156,55.597],[7.06,37.797],[12.979,13.473],[14.128,3.944],[14.39,2.896],[14.776,2.569],[14.997,-1.335],[15.75,-11.801],[12.328,-28.924],[10.54,-37.795],[9.588,-40.886],[0.083,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[2.181,-6.379],[0,0],[1.113,-0.065],[0,0],[-4.354,-4.141],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.206],[0.037,-0.173],[0,0],[-4.738,3.721],[0,0],[-0.933,-0.739],[0,0],[1.371,6.517],[0,0],[-0.029,0.362],[-0.6,0.566],[0,0],[0,0],[0,0],[5.57,0.373],[0,0],[0.4,1.208],[0,0]],"o":[[0,0],[-0.409,1.198],[0,0],[-5.581,0.33],[0,0],[0.163,0.155],[5.669,0.04],[0,0],[-7.941,6.02],[0,0],[-1.408,6.513],[0,0],[0.936,-0.734],[0,0],[4.718,3.742],[0,0],[-0.077,-0.365],[0.069,-0.873],[0,0],[0,0],[0,0],[4.358,-4.116],[0,0],[-1.117,-0.073],[0,0],[-2.124,-6.404]],"v":[[-18.772,-81.309],[-34.464,-40.761],[-36.965,-38.687],[-72.152,-35.833],[-75.659,-23.057],[-60.91,-5.772],[-47.913,0.178],[-9.379,-5.634],[-41.389,16.012],[-51.365,31.124],[-56.334,54.826],[-43.129,61.279],[-12.983,37.477],[-9.897,37.486],[18.242,60.759],[31.981,55.109],[26.833,7.663],[26.763,6.566],[27.795,4.305],[30.078,1.94],[34.683,-2.83],[53.392,-22.738],[49.94,-35.526],[13.833,-39.335],[11.339,-41.439],[-4.139,-80.743]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":64,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[-2.4,-6.213],[0,0],[0,0],[-0.485,-0.354],[-0.623,-0.036],[0,0],[0,0],[5.022,-3.986],[0,0],[-0.3,-1.213],[0,0],[5.407,3.653],[0,0],[1.075,-0.71],[0,0],[-1.618,6.319],[0,0],[-8.829,3.631],[0.967,0.785],[0,0],[5.895,3.993],[0,0],[-6.389,0.316],[0,0],[-0.457,1.17],[0,0]],"o":[[0,0],[0,0],[0.225,0.584],[0.485,0.354],[0,0],[0,0],[6.397,0.368],[0,0],[-0.978,0.777],[0,0],[1.568,6.338],[0,0],[-1.068,-0.721],[0,0],[-5.437,3.595],[0,0],[0,0],[2.121,-0.872],[0,0],[0,0],[-5.731,-3.881],[-4.968,-4.034],[0,0],[1.252,-0.062],[0,0],[2.426,-6.203]],"v":[[-3.989,-80.753],[4.921,-60.77],[13.83,-40.786],[14.926,-39.358],[16.619,-38.752],[38.255,-36.358],[59.892,-33.964],[63.824,-21.525],[31.594,6.529],[30.481,9.796],[39.105,53.944],[28.206,61.568],[-9.661,38.255],[-13.201,38.237],[-51.345,61.2],[-62.171,53.48],[-58.632,32.333],[-46.499,17.423],[-9.477,-4.819],[-53.179,0.328],[-64.477,-3.963],[-86.172,-22.309],[-82.123,-34.701],[-38.221,-39.18],[-35.411,-41.204],[-17.591,-80.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-3.163,-12.4],[0,0],[0,0],[-0.325,-0.35],[-0.416,-0.032],[0,0],[0,0],[3.33,-4.022],[0,0],[-0.206,-1.211],[0,0],[4.47,3.673],[0,0],[0.714,-0.718],[0,0],[-1.049,6.33],[0,0],[-5.953,3.025],[0.649,0.778],[0,0],[5.902,3.537],[0,0],[-5.222,1.288],[0,0],[-0.299,1.173],[0,0]],"o":[[0,0],[0,0],[0.153,0.582],[0.325,0.35],[0,0],[0,0],[5.607,0.341],[0,0],[-0.649,0.784],[0,0],[0.511,7.471],[0,0],[-0.716,-0.713],[0,0],[-6.434,6.839],[0,0],[0,0],[0.95,-1.064],[0,0],[0,0],[-4.909,-2.942],[-1.969,-5.363],[0,0],[0.835,-0.071],[0,0],[3.028,-10.609]],"v":[[-3.413,-76.168],[2.689,-57.887],[8.791,-39.605],[9.529,-38.185],[10.662,-37.59],[22.041,-36.24],[33.419,-34.891],[38.145,-21.459],[20.004,1.58],[19.277,4.855],[23.51,51.394],[11.82,60.528],[-10.607,42.333],[-12.968,42.341],[-34.928,59.99],[-47.511,51.259],[-45.802,29.804],[-40.809,16.1],[-19.788,-4.662],[-40.828,-3.118],[-52.01,-5.433],[-60.781,-18.762],[-55.973,-32.9],[-34.216,-36.881],[-32.351,-38.924],[-20.843,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-4.017,-17.571],[0,0],[0,0],[-0.098,-0.334],[-0.064,-0.032],[0,0],[0,0],[-0.395,-4.034],[0,0],[-0.164,-1.211],[0,0],[5.675,-0.028],[0,0],[0.567,-0.718],[0,0],[2.112,6.338],[0,0],[0,0],[0.515,0.778],[0,0],[0,0],[0,0],[-1.514,4.309],[0,0],[-0.238,1.173],[0,0]],"o":[[0,0],[0,0],[0.024,0.582],[0.098,0.334],[0,0],[0,0],[0.329,1.045],[0,0],[-0.515,0.784],[0,0],[-1.803,7.8],[0,0],[-0.568,-0.713],[0,0],[-5.27,-1.928],[0,0],[0,0],[0.159,-1.21],[0,0],[0,0],[0,0],[1.002,-4.641],[0,0],[0.663,-0.071],[0,0],[3.814,-14.266]],"v":[[-1.5,-72.304],[3.736,-55.386],[8.972,-38.468],[9.182,-37.08],[9.453,-36.517],[9.629,-35.437],[9.805,-34.357],[12.61,-22.129],[15.125,-11.534],[15.298,-5.384],[0.928,48.263],[-13.725,61.028],[-12.748,60.992],[-14.622,61],[-16.726,60.74],[-27.549,48.225],[-36.26,17.951],[-39.981,-5.07],[-40.294,-6.458],[-40.104,-5.515],[-40.25,-6.941],[-39.456,-18.191],[-36.219,-31.184],[-34.557,-36.108],[-33.735,-38.902],[-23.541,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-2.383,-11.635],[0,0],[-0.374,-0.557],[0,0],[-0.281,-3.723],[0,0],[0.392,-0.181],[0.065,-0.3],[0,0],[0.018,-0.143],[0,0],[1.869,-2.38],[0,0],[1.02,0.385],[1.873,4.542],[0.491,5.854],[0,0],[0.043,0.307],[0.107,0.457],[0,0],[0,0],[0,0],[-1.045,1.957],[0,0],[-0.22,1.191],[0,0]],"o":[[0,0],[0.248,1.181],[0,0],[1.6,6.438],[0,0],[-0.03,0.188],[0.035,1.045],[-0.074,0.342],[0,0],[0,0],[-1.25,8.157],[-1.459,3.832],[-0.762,0.74],[0,0],[-2.298,-4.049],[0,0],[-0.153,-0.914],[-0.103,-0.742],[0,0],[0,0],[0,0],[0.29,-5.629],[0,0],[0.439,-0.814],[0,0],[3.268,-13.582]],"v":[[-2.539,-74.615],[9.27,-40.084],[10.682,-35.361],[13.15,-26.75],[14.906,-11.714],[15.347,-8.249],[15.34,-6.42],[11.676,-2.54],[14.209,3.251],[11.312,16.105],[3.826,41.028],[-2.411,55.226],[-11.364,61.569],[-14.318,61.924],[-23.985,55.597],[-31.364,37.797],[-37.416,13.473],[-38.592,3.944],[-38.859,2.896],[-39.254,2.569],[-39.48,-1.335],[-40.25,-11.801],[-36.75,-28.924],[-34.922,-37.795],[-33.948,-40.886],[-22.75,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-3.703,-13.779],[0,0],[-0.605,-0.427],[0,0],[1.609,-4.042],[0,0],[2.371,-0.144],[0,0],[-1.54,-1.405],[0.003,-0.148],[0,0],[3.349,-1.11],[0,0],[1.345,0.052],[1.979,2.743],[0.126,5.127],[0,0],[0.134,0.922],[0.335,1.371],[0,0],[0,0],[0,0],[-1.979,1.535],[0,0],[-0.234,1.173],[0,0]],"o":[[0,0],[0.309,1.164],[0,0],[6.269,3.706],[0,0],[-0.093,0.176],[-2.23,0.288],[0,0],[7.416,4.73],[0,0],[-0.918,6.517],[-1.541,2.315],[-1.073,0.268],[0,0],[-3.779,-1.532],[0,0],[0.062,-0.767],[-0.323,-2.225],[0,0],[0,0],[0,0],[-2.495,-5.63],[0,0],[0.539,-0.618],[0,0],[3.535,-11.584]],"v":[[-1.313,-75.217],[10.348,-39.006],[11.946,-36.137],[24.999,-31.66],[27.833,-15.924],[20.119,-7.566],[10.078,-2.381],[0.414,-2.407],[7.449,9.731],[15.191,22.118],[13.996,50.163],[6.611,59.949],[-10.111,49.705],[-14.115,49.921],[-30.508,57.411],[-38.252,44.437],[-39.382,12.597],[-40.285,6.67],[-40.686,2.53],[-41.201,0.949],[-43.338,-3.278],[-51.255,-16.431],[-47.551,-32.782],[-35.954,-36.257],[-34.755,-39.051],[-21.691,-75.729]],"c":true}]},{"t":85,"s":[{"i":[[-2.181,-6.379],[0,0],[-1.113,-0.065],[0,0],[4.353,-4.141],[0,0],[6.129,-0.044],[0,0],[-4.228,-3.206],[-0.037,-0.173],[0,0],[4.737,3.721],[0,0],[0.933,-0.739],[0,0],[-1.371,6.517],[0,0],[0.029,0.362],[0.6,0.566],[0,0],[0,0],[0,0],[-5.568,0.373],[0,0],[-0.4,1.208],[0,0]],"o":[[0,0],[0.409,1.198],[0,0],[5.58,0.33],[0,0],[-0.163,0.155],[-5.667,0.04],[0,0],[7.94,6.02],[0,0],[1.408,6.513],[0,0],[-0.936,-0.734],[0,0],[-4.717,3.742],[0,0],[0.077,-0.365],[-0.069,-0.873],[0,0],[0,0],[0,0],[-4.357,-4.116],[0,0],[1.116,-0.073],[0,0],[2.123,-6.404]],"v":[[-4.493,-81.309],[11.197,-40.761],[13.697,-38.687],[48.877,-35.833],[52.384,-23.057],[37.637,-5.772],[24.643,0.178],[-13.884,-5.634],[18.12,16.012],[28.094,31.124],[33.062,54.826],[19.86,61.279],[-10.28,37.477],[-13.366,37.486],[-41.5,60.759],[-55.236,55.109],[-50.089,7.663],[-50.019,6.566],[-51.051,4.305],[-53.333,1.94],[-57.937,-2.83],[-76.643,-22.738],[-73.192,-35.526],[-37.091,-39.335],[-34.598,-41.439],[-19.122,-80.743]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-16.729,-98.623]},"e":{"a":0,"k":[-4.431,19.358]},"t":1,"nm":"Gradient Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[257.144,257.305]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[95,95]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 772","bm":0,"hd":false}],"ip":45,"op":86,"st":13,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 6 :M 2","sr":1,"ks":{"r":{"a":0,"k":-18},"p":{"a":1,"k":[{"i":{"x":0.28,"y":0.932},"o":{"x":0.167,"y":0.167},"t":44,"s":[347.75,323.75,0],"to":[21,-149,0],"ti":[0,0,0]},{"t":86,"s":[506.25,197.25,0]}]},"a":{"a":0,"k":[245.677,245.967,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[44,44,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[2.448,-6.196],[0,0],[0,0],[0.488,-0.35],[0.625,-0.032],[0,0],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[8.812,3.695],[-0.974,0.778],[0,0],[-5.794,2.04],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[0,0],[-0.23,0.582],[-0.488,0.35],[0,0],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[0,0],[-2.116,-0.888],[0,0],[0,0],[6.535,-2.3],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-27.836,-60.886],[-36.9,-40.968],[-38.007,-39.548],[-39.707,-38.954],[-61.382,-36.718],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.598,32.677],[23.063,17.68],[-13.832,-4.832],[28.999,-1.867],[41.215,-3.575],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[3.187,-12.4],[0,0],[0,0],[0.328,-0.35],[0.419,-0.032],[0,0],[0,0],[-3.355,-4.022],[0,0],[0.208,-1.211],[0,0],[-4.504,3.673],[0,0],[-0.719,-0.718],[0,0],[1.057,6.33],[0,0],[5.998,3.025],[-0.654,0.778],[0,0],[-5.947,3.537],[0,0],[5.262,1.288],[0,0],[0.301,1.173],[0,0]],"o":[[0,0],[0,0],[-0.154,0.582],[-0.328,0.35],[0,0],[0,0],[-5.65,0.341],[0,0],[0.654,0.784],[0,0],[-0.515,7.471],[0,0],[0.721,-0.713],[0,0],[6.482,6.839],[0,0],[0,0],[-0.957,-1.063],[0,0],[0,0],[4.946,-2.942],[1.983,-5.363],[0,0],[-0.841,-0.071],[0,0],[-3.05,-10.609]],"v":[[-20.671,-76.168],[-26.82,-57.887],[-32.968,-39.605],[-33.711,-38.185],[-34.852,-37.59],[-46.317,-36.24],[-57.782,-34.891],[-62.544,-21.459],[-44.265,1.58],[-43.532,4.855],[-47.798,51.394],[-36.02,60.528],[-13.422,42.333],[-11.043,42.341],[11.083,59.99],[23.761,51.259],[22.165,28.554],[16.127,17.225],[-24.827,-7.912],[17.028,-3.118],[29.554,-5.683],[38.392,-19.012],[33.547,-33.15],[10.365,-36.881],[8.487,-38.924],[-3.109,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[4.346,-17.571],[0,0],[0,0],[0.095,-0.334],[0.062,-0.032],[0,0],[0,0],[0.383,-4.034],[0,0],[0.158,-1.211],[0,0],[-5.494,-0.028],[0,0],[-0.549,-0.718],[0,0],[-1.852,4.025],[0,0],[0,0],[-0.499,0.778],[0,0],[0,0],[0,0],[1.466,4.309],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[0,0],[-0.023,0.582],[-0.095,0.334],[0,0],[0,0],[-0.319,1.045],[0,0],[0.499,0.784],[0,0],[0.315,8.425],[0,0],[0.55,-0.713],[0,0],[5.101,-1.928],[0,0],[0,0],[-0.154,-1.21],[0,0],[0,0],[0,0],[0.01,-4.748],[0,0],[-0.642,-0.071],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-27.799,-55.386],[-31.876,-38.468],[-32.079,-37.08],[-32.341,-36.517],[-32.511,-35.437],[-32.681,-34.357],[-35.881,-22.129],[-39.163,-7.284],[-38.604,-4.009],[-24.815,46.575],[-10.631,61.028],[-11.577,60.992],[-9.762,61],[-7.726,60.74],[3.477,46.1],[11.183,17.951],[14.785,-5.07],[-30.65,-7.458],[14.904,-5.515],[15.045,-6.941],[14.089,-18.137],[10.659,-31.184],[9.172,-35.983],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[2.671,-11.635],[0,0],[0.366,-0.557],[0,0],[-0.948,-3.012],[0,0],[-0.384,-0.181],[-0.064,-0.3],[3.486,-0.843],[-0.017,-0.143],[0,0],[-1.827,-2.38],[0,0],[-0.998,0.385],[-1.831,4.542],[-0.48,5.854],[0,0],[-0.042,0.307],[-0.104,0.457],[0,0],[0,0],[0,0],[1.022,1.957],[0,0],[0.215,1.191],[0,0]],"o":[[0,0],[-0.242,1.181],[0,0],[-2.561,6.177],[0,0],[0.029,0.188],[0.378,0.376],[0.072,0.342],[-7.803,0.771],[0,0],[1.223,8.157],[1.427,3.832],[0.745,0.74],[0,0],[2.248,-4.049],[0,0],[0.149,-0.914],[0.1,-0.742],[0,0],[0,0],[0,0],[-0.284,-5.629],[0,0],[-0.43,-0.814],[0,0],[-3.664,-13.582]],"v":[[-22.573,-74.615],[-32.675,-40.084],[-34.055,-35.361],[-36.469,-26.75],[-38.552,-10.277],[-37.15,-8.124],[-35.921,-6.295],[8.703,-9.728],[-28.336,2.313],[-34.671,16.105],[-27.35,41.028],[-21.252,55.226],[-12.497,61.569],[-9.609,61.924],[-0.156,55.597],[7.06,37.797],[12.979,13.473],[14.128,3.944],[14.39,2.896],[14.776,2.569],[14.997,-1.335],[15.75,-11.801],[12.328,-28.924],[10.54,-37.795],[9.588,-40.886],[0.083,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[2.181,-6.379],[0,0],[1.113,-0.065],[0,0],[-4.354,-4.141],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.206],[0.037,-0.173],[0,0],[-4.738,3.721],[0,0],[-0.933,-0.739],[0,0],[1.371,6.517],[0,0],[-0.029,0.362],[-0.6,0.566],[0,0],[0,0],[0,0],[5.57,0.373],[0,0],[0.4,1.208],[0,0]],"o":[[0,0],[-0.409,1.198],[0,0],[-5.581,0.33],[0,0],[0.163,0.155],[5.669,0.04],[0,0],[-7.941,6.02],[0,0],[-1.408,6.513],[0,0],[0.936,-0.734],[0,0],[4.718,3.742],[0,0],[-0.077,-0.365],[0.069,-0.873],[0,0],[0,0],[0,0],[4.358,-4.116],[0,0],[-1.117,-0.073],[0,0],[-2.124,-6.404]],"v":[[-18.772,-81.309],[-34.464,-40.761],[-36.965,-38.687],[-72.152,-35.833],[-75.659,-23.057],[-60.91,-5.772],[-47.913,0.178],[-9.379,-5.634],[-41.389,16.012],[-51.365,31.124],[-56.334,54.826],[-43.129,61.279],[-12.983,37.477],[-9.897,37.486],[18.242,60.759],[31.981,55.109],[26.833,7.663],[26.763,6.566],[27.795,4.305],[30.078,1.94],[34.683,-2.83],[53.392,-22.738],[49.94,-35.526],[13.833,-39.335],[11.339,-41.439],[-4.139,-80.743]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":67,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.4,-6.213],[0,0],[0,0],[-0.485,-0.354],[-0.623,-0.036],[0,0],[0,0],[5.022,-3.986],[0,0],[-0.3,-1.213],[0,0],[5.407,3.653],[0,0],[1.075,-0.71],[0,0],[-1.618,6.319],[0,0],[-8.829,3.631],[0.967,0.785],[0,0],[5.895,3.993],[0,0],[-6.389,0.316],[0,0],[-0.457,1.17],[0,0]],"o":[[0,0],[0,0],[0.225,0.584],[0.485,0.354],[0,0],[0,0],[6.397,0.368],[0,0],[-0.978,0.777],[0,0],[1.568,6.338],[0,0],[-1.068,-0.721],[0,0],[-5.437,3.595],[0,0],[0,0],[2.121,-0.872],[0,0],[0,0],[-5.731,-3.881],[-4.968,-4.034],[0,0],[1.252,-0.062],[0,0],[2.426,-6.203]],"v":[[-3.989,-80.753],[4.921,-60.77],[13.83,-40.786],[14.926,-39.358],[16.619,-38.752],[38.255,-36.358],[59.892,-33.964],[63.824,-21.525],[31.594,6.529],[30.481,9.796],[39.105,53.944],[28.206,61.568],[-9.661,38.255],[-13.201,38.237],[-51.345,61.2],[-62.171,53.48],[-58.632,32.333],[-46.499,17.423],[-9.477,-4.819],[-53.179,0.328],[-64.477,-3.963],[-86.172,-22.309],[-82.123,-34.701],[-38.221,-39.18],[-35.411,-41.204],[-17.591,-80.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-3.163,-12.4],[0,0],[0,0],[-0.325,-0.35],[-0.416,-0.032],[0,0],[0,0],[3.33,-4.022],[0,0],[-0.206,-1.211],[0,0],[4.47,3.673],[0,0],[0.714,-0.718],[0,0],[-1.049,6.33],[0,0],[-5.953,3.025],[0.649,0.778],[0,0],[5.902,3.537],[0,0],[-5.222,1.288],[0,0],[-0.299,1.173],[0,0]],"o":[[0,0],[0,0],[0.153,0.582],[0.325,0.35],[0,0],[0,0],[5.607,0.341],[0,0],[-0.649,0.784],[0,0],[0.511,7.471],[0,0],[-0.716,-0.713],[0,0],[-6.434,6.839],[0,0],[0,0],[0.95,-1.064],[0,0],[0,0],[-4.909,-2.942],[-1.969,-5.363],[0,0],[0.835,-0.071],[0,0],[3.028,-10.609]],"v":[[-3.413,-76.168],[2.689,-57.887],[8.791,-39.605],[9.529,-38.185],[10.662,-37.59],[22.041,-36.24],[33.419,-34.891],[38.145,-21.459],[20.004,1.58],[19.277,4.855],[23.51,51.394],[11.82,60.528],[-10.607,42.333],[-12.968,42.341],[-34.928,59.99],[-47.511,51.259],[-45.802,29.804],[-40.809,16.1],[-19.788,-4.662],[-40.828,-3.118],[-52.01,-5.433],[-60.781,-18.762],[-55.973,-32.9],[-34.216,-36.881],[-32.351,-38.924],[-20.843,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-4.017,-17.571],[0,0],[0,0],[-0.098,-0.334],[-0.064,-0.032],[0,0],[0,0],[-0.395,-4.034],[0,0],[-0.164,-1.211],[0,0],[5.675,-0.028],[0,0],[0.567,-0.718],[0,0],[2.112,6.338],[0,0],[0,0],[0.515,0.778],[0,0],[0,0],[0,0],[-1.514,4.309],[0,0],[-0.238,1.173],[0,0]],"o":[[0,0],[0,0],[0.024,0.582],[0.098,0.334],[0,0],[0,0],[0.329,1.045],[0,0],[-0.515,0.784],[0,0],[-1.803,7.8],[0,0],[-0.568,-0.713],[0,0],[-5.27,-1.928],[0,0],[0,0],[0.159,-1.21],[0,0],[0,0],[0,0],[1.002,-4.641],[0,0],[0.663,-0.071],[0,0],[3.814,-14.266]],"v":[[-1.5,-72.304],[3.736,-55.386],[8.972,-38.468],[9.182,-37.08],[9.453,-36.517],[9.629,-35.437],[9.805,-34.357],[12.61,-22.129],[15.125,-11.534],[15.298,-5.384],[0.928,48.263],[-13.725,61.028],[-12.748,60.992],[-14.622,61],[-16.726,60.74],[-27.549,48.225],[-36.26,17.951],[-39.981,-5.07],[-40.294,-6.458],[-40.104,-5.515],[-40.25,-6.941],[-39.456,-18.191],[-36.219,-31.184],[-34.557,-36.108],[-33.735,-38.902],[-23.541,-73.109]],"c":true}]},{"t":80,"s":[{"i":[[-2.383,-11.635],[0,0],[-0.374,-0.557],[0,0],[-0.281,-3.723],[0,0],[0.392,-0.181],[0.065,-0.3],[0,0],[0.018,-0.143],[0,0],[1.869,-2.38],[0,0],[1.02,0.385],[1.873,4.542],[0.491,5.854],[0,0],[0.043,0.307],[0.107,0.457],[0,0],[0,0],[0,0],[-1.045,1.957],[0,0],[-0.22,1.191],[0,0]],"o":[[0,0],[0.248,1.181],[0,0],[1.6,6.438],[0,0],[-0.03,0.188],[0.035,1.045],[-0.074,0.342],[0,0],[0,0],[-1.25,8.157],[-1.459,3.832],[-0.762,0.74],[0,0],[-2.298,-4.049],[0,0],[-0.153,-0.914],[-0.103,-0.742],[0,0],[0,0],[0,0],[0.29,-5.629],[0,0],[0.439,-0.814],[0,0],[3.268,-13.582]],"v":[[-2.539,-74.615],[9.27,-40.084],[10.682,-35.361],[13.15,-26.75],[14.906,-11.714],[15.347,-8.249],[15.34,-6.42],[11.676,-2.54],[14.209,3.251],[11.312,16.105],[3.826,41.028],[-2.411,55.226],[-11.364,61.569],[-14.318,61.924],[-23.985,55.597],[-31.364,37.797],[-37.416,13.473],[-38.592,3.944],[-38.859,2.896],[-39.254,2.569],[-39.48,-1.335],[-40.25,-11.801],[-36.75,-28.924],[-34.922,-37.795],[-33.948,-40.886],[-22.75,-74.334]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-16.402,-105.435]},"e":{"a":0,"k":[-4.431,19.358]},"t":1,"nm":"Gradient Fill 4","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[257.144,257.305]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[95,95]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 772","bm":0,"hd":false}],"ip":44,"op":82,"st":16,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 19 :M 2","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.24,"y":0.818},"o":{"x":0.097,"y":0.107},"t":43,"s":[350.473,365.868,0],"to":[-36.5,-162.5,0],"ti":[37.527,-102.368,0]},{"t":85,"s":[178.473,250.868,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70,"s":[50,50,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":57,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":62,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-4.399,-16.739],[0,0],[-0.46,-0.482],[0,0],[0.869,-4.112],[0,0],[0.062,-0.187],[0.105,-0.436],[0.075,-0.542],[0.015,-0.135],[0,0],[3.127,-1.741],[0,0],[1.38,0.156],[2.361,3.154],[0.482,5.051],[0,0],[-2.948,2.259],[0.128,0.137],[0.643,0.053],[0.547,0.474],[0,0],[-2.021,1.973],[0,0],[-0.266,1.193],[0,0]],"o":[[0,0],[0.272,1.183],[0,0],[4.992,2.851],[0,0],[-0.067,0.177],[-0.132,0.396],[-0.12,0.498],[-0.018,0.133],[0,0],[-1.619,6.968],[-3.562,2.689],[-1.054,0.403],[0,0],[-4.284,-1.356],[0,0],[-0.135,-0.831],[0.991,-0.83],[0,0],[-1.076,-0.416],[-1.558,-1.351],[-3.643,-5.423],[0,0],[0.568,-0.702],[0,0],[4.183,-13.708]],"v":[[0.637,-72.352],[8.336,-42.199],[9.652,-39.169],[14.169,-34.781],[23.006,-23.835],[17.155,-5.341],[17.209,-4.466],[17.101,-1.856],[16.807,-0.294],[16.757,0.107],[15.024,41.668],[9.562,57.061],[0.89,56.831],[-11.218,50.829],[-27.021,58.455],[-36.092,46.254],[-38.062,15.655],[-33.59,2.259],[-27.598,-4.787],[-31.849,-5.748],[-38.698,-8.82],[-44.857,-16.917],[-43.935,-30.357],[-33.857,-35.277],[-32.565,-38.654],[-23.522,-73.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-4.692,-17.958],[0,0],[-0.309,-0.622],[0,0],[-1.161,-4],[0,0],[0.052,-0.199],[0.11,-0.45],[0.119,-0.562],[0.028,-0.141],[0,0],[2.504,-3.548],[0,0],[1.606,0.447],[3.214,4.206],[1.055,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.705,2.168],[0,0],[-0.248,1.199],[0,0]],"o":[[0,0],[0.254,1.189],[0,0],[0.657,3.942],[0,0],[-0.051,0.194],[-0.11,0.421],[-0.126,0.514],[-0.029,0.137],[0,0],[-2.364,6.758],[-2.504,3.548],[-1.163,0.775],[0,0],[-3.214,-4.206],[0,0],[-0.207,-0.989],[0,0],[0,0],[0,0],[0,0],[0.946,-5.864],[0,0],[0.455,-0.912],[0,0],[4.456,-14.581]],"v":[[0.834,-71.667],[8.131,-48.03],[9.21,-44.662],[11.147,-38.015],[14.698,-26.546],[16.951,-12.793],[17.134,-11.767],[17.14,-8.649],[16.771,-7.038],[16.685,-6.621],[4.203,41.797],[-3.171,57.14],[-10.855,62.135],[-15.446,62.463],[-23.718,57.204],[-30.416,41.219],[-40.572,1.266],[-42.472,-8.703],[-40.568,-8.85],[-42.5,-8.17],[-42.091,-11.846],[-40.76,-19.55],[-38.301,-28.038],[-37.1,-34.412],[-36.093,-37.651],[-24.915,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-2.633,-11.634],[0,0],[-0.226,-0.623],[0,0],[0.932,-3.012],[0,0],[0.378,-0.181],[0.062,-0.3],[-0.405,-0.843],[0.017,-0.143],[0,0],[1.799,-2.381],[0,0],[0.983,0.385],[1.805,4.541],[0.474,5.854],[0,0],[0.041,0.307],[0.103,0.457],[0,0],[0,0],[0,0],[-1.006,1.957],[0,0],[-0.212,1.191],[0,0]],"o":[[0,0],[0.239,1.181],[0,0],[1.068,6.586],[0,0],[-0.029,0.188],[-0.372,0.376],[-0.071,0.342],[0.907,0.771],[0,0],[-1.202,8.157],[-1.404,3.833],[-0.734,0.74],[0,0],[-2.215,-4.048],[0,0],[-0.147,-0.914],[-0.099,-0.742],[0,0],[0,0],[0,0],[0.278,-5.629],[0,0],[0.423,-0.814],[0,0],[3.603,-13.583]],"v":[[-0.244,-76.368],[11.209,-40.34],[12.859,-34.816],[14.712,-28.278],[15.1,-9.035],[13.72,-6.882],[12.511,-5.053],[12.317,-4.471],[14.629,-1.82],[15.754,2.971],[4.601,41.023],[-0.149,56.222],[-10.377,62.32],[-13.222,62.675],[-24.161,56.102],[-30,38.304],[-37.573,8.481],[-39.062,-0.797],[-39.32,-1.845],[-39.701,-2.172],[-39.919,-6.076],[-40.664,-16.542],[-38.035,-31.665],[-35.859,-37.788],[-34.922,-40.879],[-23.322,-75.33]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-3.514,-13.779],[0,0],[-0.574,-0.427],[0,0],[1.527,-4.042],[0,0],[2.25,-0.144],[0,0],[-1.462,-1.405],[0.003,-0.148],[0,0],[3.178,-1.11],[0,0],[1.276,0.052],[1.878,2.743],[0.12,5.127],[0,0],[0.127,0.922],[0.318,1.371],[0,0],[0,0],[0,0],[-1.878,1.535],[0,0],[-0.222,1.173],[0,0]],"o":[[0,0],[0.293,1.164],[0,0],[5.949,3.706],[0,0],[-0.089,0.176],[-2.117,0.288],[0,0],[7.038,4.73],[0,0],[-0.872,6.517],[-1.463,2.315],[-1.018,0.268],[0,0],[-3.586,-1.532],[0,0],[0.059,-0.767],[-0.306,-2.225],[0,0],[0,0],[0,0],[-2.368,-5.63],[0,0],[0.511,-0.618],[0,0],[3.355,-11.584]],"v":[[-2.711,-75.388],[6.855,-38.927],[8.371,-36.058],[22.301,-31.706],[25.223,-16.97],[17.072,-6.362],[8.254,-3.677],[-0.005,-3.078],[4.159,2.81],[13.398,12.446],[10.317,50.242],[3.309,60.028],[-12.56,49.784],[-16.36,50],[-33.578,55.99],[-40.927,43.016],[-41.827,10.176],[-41.261,4.249],[-41.641,0.109],[-42.13,-1.472],[-44.158,-5.699],[-51.671,-18.852],[-48.091,-32.703],[-37.085,-36.178],[-35.948,-38.972],[-23.55,-75.65]],"c":true}]},{"t":83,"s":[{"i":[[-2.133,-6.477],[0,0],[-1.089,-0.066],[0,0],[4.258,-4.204],[0,0],[5.996,-0.044],[0,0],[-4.136,-3.255],[-0.036,-0.175],[0,0],[4.634,3.778],[0,0],[0.913,-0.751],[0,0],[-1.341,6.617],[0,0],[0.028,0.367],[0.587,0.575],[0,0],[0,0],[0,0],[-5.447,0.379],[0,0],[-0.391,1.227],[0,0]],"o":[[0,0],[0.4,1.217],[0,0],[5.458,0.336],[0,0],[-0.159,0.157],[-5.544,0.041],[0,0],[7.767,6.113],[0,0],[1.377,6.613],[0,0],[-0.915,-0.746],[0,0],[-4.615,3.8],[0,0],[0.075,-0.371],[-0.067,-0.887],[0,0],[0,0],[0,0],[-4.262,-4.179],[0,0],[1.092,-0.074],[0,0],[2.077,-6.503]],"v":[[-3.659,-81.723],[11.689,-40.553],[14.135,-38.447],[48.548,-35.55],[51.979,-22.577],[37.553,-5.027],[24.842,1.014],[-12.845,-4.887],[18.461,17.091],[28.218,32.435],[33.078,56.501],[20.163,63.053],[-9.321,38.886],[-12.339,38.894],[-39.86,62.525],[-53.297,56.788],[-48.262,8.615],[-48.193,7.5],[-49.203,5.205],[-51.436,2.803],[-55.939,-2.04],[-74.238,-22.253],[-70.862,-35.238],[-35.547,-39.105],[-33.109,-41.241],[-17.97,-81.149]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":43,"op":84,"st":11,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 19 :M 3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"t":76,"s":[14]}]},"p":{"a":1,"k":[{"i":{"x":0.14,"y":0.755},"o":{"x":0.167,"y":0.167},"t":43,"s":[362.448,351.395,0],"to":[119.125,-49.943,0],"ti":[0,0,0]},{"t":75,"s":[566.754,342.701,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":59,"s":[-40,40,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":62,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":67,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"t":77,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":43,"op":77,"st":16,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 6 :M 3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[0]},{"t":94,"s":[-180]}]},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.92},"o":{"x":0.167,"y":0.167},"t":53,"s":[341.25,358.25,0],"to":[0,0,0],"ti":[27,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.7,"y":0.132},"t":68,"s":[304.5,267.25,0],"to":[-27,3,0],"ti":[0,0,0]},{"t":91,"s":[278.75,464.25,0]}]},"a":{"a":0,"k":[245.677,245.967,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[36,36,100]},{"t":91,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[2.448,-6.196],[0,0],[0,0],[0.488,-0.35],[0.625,-0.032],[0,0],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[8.812,3.695],[-0.974,0.778],[0,0],[-5.794,2.04],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[0,0],[-0.23,0.582],[-0.488,0.35],[0,0],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[0,0],[-2.116,-0.888],[0,0],[0,0],[6.535,-2.3],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-27.836,-60.886],[-36.9,-40.968],[-38.007,-39.548],[-39.707,-38.954],[-61.382,-36.718],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.598,32.677],[23.063,17.68],[-13.832,-4.832],[28.999,-1.867],[41.215,-3.575],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[3.187,-12.4],[0,0],[0,0],[0.328,-0.35],[0.419,-0.032],[0,0],[0,0],[-3.355,-4.022],[0,0],[0.208,-1.211],[0,0],[-4.504,3.673],[0,0],[-0.719,-0.718],[0,0],[1.057,6.33],[0,0],[5.998,3.025],[-0.654,0.778],[0,0],[-5.947,3.537],[0,0],[5.262,1.288],[0,0],[0.301,1.173],[0,0]],"o":[[0,0],[0,0],[-0.154,0.582],[-0.328,0.35],[0,0],[0,0],[-5.65,0.341],[0,0],[0.654,0.784],[0,0],[-0.515,7.471],[0,0],[0.721,-0.713],[0,0],[6.482,6.839],[0,0],[0,0],[-0.957,-1.063],[0,0],[0,0],[4.946,-2.942],[1.983,-5.363],[0,0],[-0.841,-0.071],[0,0],[-3.05,-10.609]],"v":[[-20.671,-76.168],[-26.82,-57.887],[-32.968,-39.605],[-33.711,-38.185],[-34.852,-37.59],[-46.317,-36.24],[-57.782,-34.891],[-62.544,-21.459],[-44.265,1.58],[-43.532,4.855],[-47.798,51.394],[-36.02,60.528],[-13.422,42.333],[-11.043,42.341],[11.083,59.99],[23.761,51.259],[22.165,28.554],[16.127,17.225],[-24.827,-7.912],[17.028,-3.118],[29.554,-5.683],[38.392,-19.012],[33.547,-33.15],[10.365,-36.881],[8.487,-38.924],[-3.109,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[4.346,-17.571],[0,0],[0,0],[0.095,-0.334],[0.062,-0.032],[0,0],[0,0],[0.383,-4.034],[0,0],[0.158,-1.211],[0,0],[-5.494,-0.028],[0,0],[-0.549,-0.718],[0,0],[-1.852,4.025],[0,0],[0,0],[-0.499,0.778],[0,0],[0,0],[0,0],[1.466,4.309],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[0,0],[-0.023,0.582],[-0.095,0.334],[0,0],[0,0],[-0.319,1.045],[0,0],[0.499,0.784],[0,0],[0.315,8.425],[0,0],[0.55,-0.713],[0,0],[5.101,-1.928],[0,0],[0,0],[-0.154,-1.21],[0,0],[0,0],[0,0],[0.01,-4.748],[0,0],[-0.642,-0.071],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-27.799,-55.386],[-31.876,-38.468],[-32.079,-37.08],[-32.341,-36.517],[-32.511,-35.437],[-32.681,-34.357],[-35.881,-22.129],[-39.163,-7.284],[-38.604,-4.009],[-24.815,46.575],[-10.631,61.028],[-11.577,60.992],[-9.762,61],[-7.726,60.74],[3.477,46.1],[11.183,17.951],[14.785,-5.07],[-30.65,-7.458],[14.904,-5.515],[15.045,-6.941],[14.089,-18.137],[10.659,-31.184],[9.172,-35.983],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[2.671,-11.635],[0,0],[0.366,-0.557],[0,0],[-0.948,-3.012],[0,0],[-0.384,-0.181],[-0.064,-0.3],[3.486,-0.843],[-0.017,-0.143],[0,0],[-1.827,-2.38],[0,0],[-0.998,0.385],[-1.831,4.542],[-0.48,5.854],[0,0],[-0.042,0.307],[-0.104,0.457],[0,0],[0,0],[0,0],[1.022,1.957],[0,0],[0.215,1.191],[0,0]],"o":[[0,0],[-0.242,1.181],[0,0],[-2.561,6.177],[0,0],[0.029,0.188],[0.378,0.376],[0.072,0.342],[-7.803,0.771],[0,0],[1.223,8.157],[1.427,3.832],[0.745,0.74],[0,0],[2.248,-4.049],[0,0],[0.149,-0.914],[0.1,-0.742],[0,0],[0,0],[0,0],[-0.284,-5.629],[0,0],[-0.43,-0.814],[0,0],[-3.664,-13.582]],"v":[[-22.573,-74.615],[-32.675,-40.084],[-34.055,-35.361],[-36.469,-26.75],[-38.552,-10.277],[-37.15,-8.124],[-35.921,-6.295],[8.703,-9.728],[-28.336,2.313],[-34.671,16.105],[-27.35,41.028],[-21.252,55.226],[-12.497,61.569],[-9.609,61.924],[-0.156,55.597],[7.06,37.797],[12.979,13.473],[14.128,3.944],[14.39,2.896],[14.776,2.569],[14.997,-1.335],[15.75,-11.801],[12.328,-28.924],[10.54,-37.795],[9.588,-40.886],[0.083,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[2.181,-6.379],[0,0],[1.113,-0.065],[0,0],[-4.354,-4.141],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.206],[0.037,-0.173],[0,0],[-4.738,3.721],[0,0],[-0.933,-0.739],[0,0],[1.371,6.517],[0,0],[-0.029,0.362],[-0.6,0.566],[0,0],[0,0],[0,0],[5.57,0.373],[0,0],[0.4,1.208],[0,0]],"o":[[0,0],[-0.409,1.198],[0,0],[-5.581,0.33],[0,0],[0.163,0.155],[5.669,0.04],[0,0],[-7.941,6.02],[0,0],[-1.408,6.513],[0,0],[0.936,-0.734],[0,0],[4.718,3.742],[0,0],[-0.077,-0.365],[0.069,-0.873],[0,0],[0,0],[0,0],[4.358,-4.116],[0,0],[-1.117,-0.073],[0,0],[-2.124,-6.404]],"v":[[-18.772,-81.309],[-34.464,-40.761],[-36.965,-38.687],[-72.152,-35.833],[-75.659,-23.057],[-60.91,-5.772],[-47.913,0.178],[-9.379,-5.634],[-41.389,16.012],[-51.365,31.124],[-56.334,54.826],[-43.129,61.279],[-12.983,37.477],[-9.897,37.486],[18.242,60.759],[31.981,55.109],[26.833,7.663],[26.763,6.566],[27.795,4.305],[30.078,1.94],[34.683,-2.83],[53.392,-22.738],[49.94,-35.526],[13.833,-39.335],[11.339,-41.439],[-4.139,-80.743]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":72,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-2.4,-6.213],[0,0],[0,0],[-0.485,-0.354],[-0.623,-0.036],[0,0],[0,0],[5.022,-3.986],[0,0],[-0.3,-1.213],[0,0],[5.407,3.653],[0,0],[1.075,-0.71],[0,0],[-1.618,6.319],[0,0],[-8.829,3.631],[0.967,0.785],[0,0],[5.895,3.993],[0,0],[-6.389,0.316],[0,0],[-0.457,1.17],[0,0]],"o":[[0,0],[0,0],[0.225,0.584],[0.485,0.354],[0,0],[0,0],[6.397,0.368],[0,0],[-0.978,0.777],[0,0],[1.568,6.338],[0,0],[-1.068,-0.721],[0,0],[-5.437,3.595],[0,0],[0,0],[2.121,-0.872],[0,0],[0,0],[-5.731,-3.881],[-4.968,-4.034],[0,0],[1.252,-0.062],[0,0],[2.426,-6.203]],"v":[[-3.989,-80.753],[4.921,-60.77],[13.83,-40.786],[14.926,-39.358],[16.619,-38.752],[38.255,-36.358],[59.892,-33.964],[63.824,-21.525],[31.594,6.529],[30.481,9.796],[39.105,53.944],[28.206,61.568],[-9.661,38.255],[-13.201,38.237],[-51.345,61.2],[-62.171,53.48],[-58.632,32.333],[-46.499,17.423],[-9.477,-4.819],[-53.179,0.328],[-64.477,-3.963],[-86.172,-22.309],[-82.123,-34.701],[-38.221,-39.18],[-35.411,-41.204],[-17.591,-80.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-3.163,-12.4],[0,0],[0,0],[-0.325,-0.35],[-0.416,-0.032],[0,0],[0,0],[3.33,-4.022],[0,0],[-0.206,-1.211],[0,0],[4.47,3.673],[0,0],[0.714,-0.718],[0,0],[-1.049,6.33],[0,0],[-5.953,3.025],[0.649,0.778],[0,0],[5.902,3.537],[0,0],[-5.222,1.288],[0,0],[-0.299,1.173],[0,0]],"o":[[0,0],[0,0],[0.153,0.582],[0.325,0.35],[0,0],[0,0],[5.607,0.341],[0,0],[-0.649,0.784],[0,0],[0.511,7.471],[0,0],[-0.716,-0.713],[0,0],[-6.434,6.839],[0,0],[0,0],[0.95,-1.064],[0,0],[0,0],[-4.909,-2.942],[-1.969,-5.363],[0,0],[0.835,-0.071],[0,0],[3.028,-10.609]],"v":[[-3.413,-76.168],[2.689,-57.887],[8.791,-39.605],[9.529,-38.185],[10.662,-37.59],[22.041,-36.24],[33.419,-34.891],[38.145,-21.459],[20.004,1.58],[19.277,4.855],[23.51,51.394],[11.82,60.528],[-10.607,42.333],[-12.968,42.341],[-34.928,59.99],[-47.511,51.259],[-45.802,29.804],[-40.809,16.1],[-19.788,-4.662],[-40.828,-3.118],[-52.01,-5.433],[-60.781,-18.762],[-55.973,-32.9],[-34.216,-36.881],[-32.351,-38.924],[-20.843,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-4.017,-17.571],[0,0],[0,0],[-0.098,-0.334],[-0.064,-0.032],[0,0],[0,0],[-0.395,-4.034],[0,0],[-0.164,-1.211],[0,0],[5.675,-0.028],[0,0],[0.567,-0.718],[0,0],[2.112,6.338],[0,0],[0,0],[0.515,0.778],[0,0],[0,0],[0,0],[-1.514,4.309],[0,0],[-0.238,1.173],[0,0]],"o":[[0,0],[0,0],[0.024,0.582],[0.098,0.334],[0,0],[0,0],[0.329,1.045],[0,0],[-0.515,0.784],[0,0],[-1.803,7.8],[0,0],[-0.568,-0.713],[0,0],[-5.27,-1.928],[0,0],[0,0],[0.159,-1.21],[0,0],[0,0],[0,0],[1.002,-4.641],[0,0],[0.663,-0.071],[0,0],[3.814,-14.266]],"v":[[-1.5,-72.304],[3.736,-55.386],[8.972,-38.468],[9.182,-37.08],[9.453,-36.517],[9.629,-35.437],[9.805,-34.357],[12.61,-22.129],[15.125,-11.534],[15.298,-5.384],[0.928,48.263],[-13.725,61.028],[-12.748,60.992],[-14.622,61],[-16.726,60.74],[-27.549,48.225],[-36.26,17.951],[-39.981,-5.07],[-40.294,-6.458],[-40.104,-5.515],[-40.25,-6.941],[-39.456,-18.191],[-36.219,-31.184],[-34.557,-36.108],[-33.735,-38.902],[-23.541,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-2.383,-11.635],[0,0],[-0.374,-0.557],[0,0],[-0.281,-3.723],[0,0],[0.392,-0.181],[0.065,-0.3],[0,0],[0.018,-0.143],[0,0],[1.869,-2.38],[0,0],[1.02,0.385],[1.873,4.542],[0.491,5.854],[0,0],[0.043,0.307],[0.107,0.457],[0,0],[0,0],[0,0],[-1.045,1.957],[0,0],[-0.22,1.191],[0,0]],"o":[[0,0],[0.248,1.181],[0,0],[1.6,6.438],[0,0],[-0.03,0.188],[0.035,1.045],[-0.074,0.342],[0,0],[0,0],[-1.25,8.157],[-1.459,3.832],[-0.762,0.74],[0,0],[-2.298,-4.049],[0,0],[-0.153,-0.914],[-0.103,-0.742],[0,0],[0,0],[0,0],[0.29,-5.629],[0,0],[0.439,-0.814],[0,0],[3.268,-13.582]],"v":[[-2.539,-74.615],[9.27,-40.084],[10.682,-35.361],[13.15,-26.75],[14.906,-11.714],[15.347,-8.249],[15.34,-6.42],[11.676,-2.54],[14.209,3.251],[11.312,16.105],[3.826,41.028],[-2.411,55.226],[-11.364,61.569],[-14.318,61.924],[-23.985,55.597],[-31.364,37.797],[-37.416,13.473],[-38.592,3.944],[-38.859,2.896],[-39.254,2.569],[-39.48,-1.335],[-40.25,-11.801],[-36.75,-28.924],[-34.922,-37.795],[-33.948,-40.886],[-22.75,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[-3.703,-13.779],[0,0],[-0.605,-0.427],[0,0],[1.609,-4.042],[0,0],[2.371,-0.144],[0,0],[-1.54,-1.405],[0.003,-0.148],[0,0],[3.349,-1.11],[0,0],[1.345,0.052],[1.979,2.743],[0.126,5.127],[0,0],[0.134,0.922],[0.335,1.371],[0,0],[0,0],[0,0],[-1.979,1.535],[0,0],[-0.234,1.173],[0,0]],"o":[[0,0],[0.309,1.164],[0,0],[6.269,3.706],[0,0],[-0.093,0.176],[-2.23,0.288],[0,0],[7.416,4.73],[0,0],[-0.918,6.517],[-1.541,2.315],[-1.073,0.268],[0,0],[-3.779,-1.532],[0,0],[0.062,-0.767],[-0.323,-2.225],[0,0],[0,0],[0,0],[-2.495,-5.63],[0,0],[0.539,-0.618],[0,0],[3.535,-11.584]],"v":[[-1.313,-75.217],[10.348,-39.006],[11.946,-36.137],[24.999,-31.66],[27.833,-15.924],[20.119,-7.566],[10.078,-2.381],[0.414,-2.407],[7.449,9.731],[15.191,22.118],[13.996,50.163],[6.611,59.949],[-10.111,49.705],[-14.115,49.921],[-30.508,57.411],[-38.252,44.437],[-39.382,12.597],[-40.285,6.67],[-40.686,2.53],[-41.201,0.949],[-43.338,-3.278],[-51.255,-16.431],[-47.551,-32.782],[-35.954,-36.257],[-34.755,-39.051],[-21.691,-75.729]],"c":true}]},{"t":93,"s":[{"i":[[-2.181,-6.379],[0,0],[-1.113,-0.065],[0,0],[4.353,-4.141],[0,0],[6.129,-0.044],[0,0],[-4.228,-3.206],[-0.037,-0.173],[0,0],[4.737,3.721],[0,0],[0.933,-0.739],[0,0],[-1.371,6.517],[0,0],[0.029,0.362],[0.6,0.566],[0,0],[0,0],[0,0],[-5.568,0.373],[0,0],[-0.4,1.208],[0,0]],"o":[[0,0],[0.409,1.198],[0,0],[5.58,0.33],[0,0],[-0.163,0.155],[-5.667,0.04],[0,0],[7.94,6.02],[0,0],[1.408,6.513],[0,0],[-0.936,-0.734],[0,0],[-4.717,3.742],[0,0],[0.077,-0.365],[-0.069,-0.873],[0,0],[0,0],[0,0],[-4.357,-4.116],[0,0],[1.116,-0.073],[0,0],[2.123,-6.404]],"v":[[-4.493,-81.309],[11.197,-40.761],[13.697,-38.687],[48.877,-35.833],[52.384,-23.057],[37.637,-5.772],[24.643,0.178],[-13.884,-5.634],[18.12,16.012],[28.094,31.124],[33.062,54.826],[19.86,61.279],[-10.28,37.477],[-13.366,37.486],[-41.5,60.759],[-55.236,55.109],[-50.089,7.663],[-50.019,6.566],[-51.051,4.305],[-53.333,1.94],[-57.937,-2.83],[-76.643,-22.738],[-73.192,-35.526],[-37.091,-39.335],[-34.598,-41.439],[-19.122,-80.743]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-20.857,-121.646]},"e":{"a":0,"k":[-4.764,12.627]},"t":1,"nm":"Gradient Fill 4","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[257.144,257.305]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[95,95]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 772","bm":0,"hd":false}],"ip":53,"op":88,"st":21,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 19 :M 4","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[0]},{"t":87,"s":[65]}]},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.946},"o":{"x":0.167,"y":0.167},"t":50,"s":[362.5,378.973,0],"to":[0,0,0],"ti":[-38,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.52,"y":0.093},"t":63,"s":[400,258.473,0],"to":[27,-3,0],"ti":[0,0,0]},{"t":87,"s":[453,485.473,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":74,"s":[35,35,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":69,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":74,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"t":84,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":50,"op":86,"st":23,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 19 :M 5","sr":1,"ks":{"r":{"a":0,"k":12},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.934},"o":{"x":0.167,"y":0.167},"t":46,"s":[319.105,348.21,0],"to":[0,0,0],"ti":[41,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.346,"y":0.061},"t":59,"s":[265.912,262.233,0],"to":[-41.705,1.989,0],"ti":[0,0,0]},{"t":85,"s":[225.105,514.21,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":73,"s":[-40,40,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":58,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":63,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-4.399,-16.739],[0,0],[-0.46,-0.482],[0,0],[0.869,-4.112],[0,0],[0.062,-0.187],[0.105,-0.436],[0.075,-0.542],[0.015,-0.135],[0,0],[3.127,-1.741],[0,0],[1.38,0.156],[2.361,3.154],[0.482,5.051],[0,0],[-2.948,2.259],[0.128,0.137],[0.643,0.053],[0.547,0.474],[0,0],[-2.021,1.973],[0,0],[-0.266,1.193],[0,0]],"o":[[0,0],[0.272,1.183],[0,0],[4.992,2.851],[0,0],[-0.067,0.177],[-0.132,0.396],[-0.12,0.498],[-0.018,0.133],[0,0],[-1.619,6.968],[-3.562,2.689],[-1.054,0.403],[0,0],[-4.284,-1.356],[0,0],[-0.135,-0.831],[0.991,-0.83],[0,0],[-1.076,-0.416],[-1.558,-1.351],[-3.643,-5.423],[0,0],[0.568,-0.702],[0,0],[4.183,-13.708]],"v":[[0.637,-72.352],[8.336,-42.199],[9.652,-39.169],[14.169,-34.781],[23.006,-23.835],[17.155,-5.341],[17.209,-4.466],[17.101,-1.856],[16.807,-0.294],[16.757,0.107],[15.024,41.668],[9.562,57.061],[0.89,56.831],[-11.218,50.829],[-27.021,58.455],[-36.092,46.254],[-38.062,15.655],[-33.59,2.259],[-27.598,-4.787],[-31.849,-5.748],[-38.698,-8.82],[-44.857,-16.917],[-43.935,-30.357],[-33.857,-35.277],[-32.565,-38.654],[-23.522,-73.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-4.692,-17.958],[0,0],[-0.309,-0.622],[0,0],[-1.161,-4],[0,0],[0.052,-0.199],[0.11,-0.45],[0.119,-0.562],[0.028,-0.141],[0,0],[2.504,-3.548],[0,0],[1.606,0.447],[3.214,4.206],[1.055,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.705,2.168],[0,0],[-0.248,1.199],[0,0]],"o":[[0,0],[0.254,1.189],[0,0],[0.657,3.942],[0,0],[-0.051,0.194],[-0.11,0.421],[-0.126,0.514],[-0.029,0.137],[0,0],[-2.364,6.758],[-2.504,3.548],[-1.163,0.775],[0,0],[-3.214,-4.206],[0,0],[-0.207,-0.989],[0,0],[0,0],[0,0],[0,0],[0.946,-5.864],[0,0],[0.455,-0.912],[0,0],[4.456,-14.581]],"v":[[0.834,-71.667],[8.131,-48.03],[9.21,-44.662],[11.147,-38.015],[14.698,-26.546],[16.951,-12.793],[17.134,-11.767],[17.14,-8.649],[16.771,-7.038],[16.685,-6.621],[4.203,41.797],[-3.171,57.14],[-10.855,62.135],[-15.446,62.463],[-23.718,57.204],[-30.416,41.219],[-40.572,1.266],[-42.472,-8.703],[-40.568,-8.85],[-42.5,-8.17],[-42.091,-11.846],[-40.76,-19.55],[-38.301,-28.038],[-37.1,-34.412],[-36.093,-37.651],[-24.915,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-2.633,-11.634],[0,0],[-0.226,-0.623],[0,0],[0.932,-3.012],[0,0],[0.378,-0.181],[0.062,-0.3],[-0.405,-0.843],[0.017,-0.143],[0,0],[1.799,-2.381],[0,0],[0.983,0.385],[1.805,4.541],[0.474,5.854],[0,0],[0.041,0.307],[0.103,0.457],[0,0],[0,0],[0,0],[-1.006,1.957],[0,0],[-0.212,1.191],[0,0]],"o":[[0,0],[0.239,1.181],[0,0],[1.068,6.586],[0,0],[-0.029,0.188],[-0.372,0.376],[-0.071,0.342],[0.907,0.771],[0,0],[-1.202,8.157],[-1.404,3.833],[-0.734,0.74],[0,0],[-2.215,-4.048],[0,0],[-0.147,-0.914],[-0.099,-0.742],[0,0],[0,0],[0,0],[0.278,-5.629],[0,0],[0.423,-0.814],[0,0],[3.603,-13.583]],"v":[[-0.244,-76.368],[11.209,-40.34],[12.859,-34.816],[14.712,-28.278],[15.1,-9.035],[13.72,-6.882],[12.511,-5.053],[12.317,-4.471],[14.629,-1.82],[15.754,2.971],[4.601,41.023],[-0.149,56.222],[-10.377,62.32],[-13.222,62.675],[-24.161,56.102],[-30,38.304],[-37.573,8.481],[-39.062,-0.797],[-39.32,-1.845],[-39.701,-2.172],[-39.919,-6.076],[-40.664,-16.542],[-38.035,-31.665],[-35.859,-37.788],[-34.922,-40.879],[-23.322,-75.33]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-3.514,-13.779],[0,0],[-0.574,-0.427],[0,0],[1.527,-4.042],[0,0],[2.25,-0.144],[0,0],[-1.462,-1.405],[0.003,-0.148],[0,0],[3.178,-1.11],[0,0],[1.276,0.052],[1.878,2.743],[0.12,5.127],[0,0],[0.127,0.922],[0.318,1.371],[0,0],[0,0],[0,0],[-1.878,1.535],[0,0],[-0.222,1.173],[0,0]],"o":[[0,0],[0.293,1.164],[0,0],[5.949,3.706],[0,0],[-0.089,0.176],[-2.117,0.288],[0,0],[7.038,4.73],[0,0],[-0.872,6.517],[-1.463,2.315],[-1.018,0.268],[0,0],[-3.586,-1.532],[0,0],[0.059,-0.767],[-0.306,-2.225],[0,0],[0,0],[0,0],[-2.368,-5.63],[0,0],[0.511,-0.618],[0,0],[3.355,-11.584]],"v":[[-2.711,-75.388],[6.855,-38.927],[8.371,-36.058],[22.301,-31.706],[25.223,-16.97],[17.072,-6.362],[8.254,-3.677],[-0.005,-3.078],[4.159,2.81],[13.398,12.446],[10.317,50.242],[3.309,60.028],[-12.56,49.784],[-16.36,50],[-33.578,55.99],[-40.927,43.016],[-41.827,10.176],[-41.261,4.249],[-41.641,0.109],[-42.13,-1.472],[-44.158,-5.699],[-51.671,-18.852],[-48.091,-32.703],[-37.085,-36.178],[-35.948,-38.972],[-23.55,-75.65]],"c":true}]},{"t":84,"s":[{"i":[[-2.133,-6.477],[0,0],[-1.089,-0.066],[0,0],[4.258,-4.204],[0,0],[5.996,-0.044],[0,0],[-4.136,-3.255],[-0.036,-0.175],[0,0],[4.634,3.778],[0,0],[0.913,-0.751],[0,0],[-1.341,6.617],[0,0],[0.028,0.367],[0.587,0.575],[0,0],[0,0],[0,0],[-5.447,0.379],[0,0],[-0.391,1.227],[0,0]],"o":[[0,0],[0.4,1.217],[0,0],[5.458,0.336],[0,0],[-0.159,0.157],[-5.544,0.041],[0,0],[7.767,6.113],[0,0],[1.377,6.613],[0,0],[-0.915,-0.746],[0,0],[-4.615,3.8],[0,0],[0.075,-0.371],[-0.067,-0.887],[0,0],[0,0],[0,0],[-4.262,-4.179],[0,0],[1.092,-0.074],[0,0],[2.077,-6.503]],"v":[[-3.659,-81.723],[11.689,-40.553],[14.135,-38.447],[48.548,-35.55],[51.979,-22.577],[37.553,-5.027],[24.842,1.014],[-12.845,-4.887],[18.461,17.091],[28.218,32.435],[33.078,56.501],[20.163,63.053],[-9.321,38.886],[-12.339,38.894],[-39.86,62.525],[-53.297,56.788],[-48.262,8.615],[-48.193,7.5],[-49.203,5.205],[-51.436,2.803],[-55.939,-2.04],[-74.238,-22.253],[-70.862,-35.238],[-35.547,-39.105],[-33.109,-41.241],[-17.97,-81.149]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":46,"op":84,"st":12,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 19 :M 6","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.935},"o":{"x":0.167,"y":0.167},"t":43,"s":[352.5,350,0],"to":[0,0,0],"ti":[-38,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.35,"y":0.06},"t":56,"s":[404.5,261,0],"to":[81,0,0],"ti":[0,0,0]},{"t":81,"s":[510.5,520,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":69,"s":[35,35,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":62,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":67,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-4.399,-16.739],[0,0],[-0.46,-0.482],[0,0],[0.869,-4.112],[0,0],[0.062,-0.187],[0.105,-0.436],[0.075,-0.542],[0.015,-0.135],[0,0],[3.127,-1.741],[0,0],[1.38,0.156],[2.361,3.154],[0.482,5.051],[0,0],[-2.948,2.259],[0.128,0.137],[0.643,0.053],[0.547,0.474],[0,0],[-2.021,1.973],[0,0],[-0.266,1.193],[0,0]],"o":[[0,0],[0.272,1.183],[0,0],[4.992,2.851],[0,0],[-0.067,0.177],[-0.132,0.396],[-0.12,0.498],[-0.018,0.133],[0,0],[-1.619,6.968],[-3.562,2.689],[-1.054,0.403],[0,0],[-4.284,-1.356],[0,0],[-0.135,-0.831],[0.991,-0.83],[0,0],[-1.076,-0.416],[-1.558,-1.351],[-3.643,-5.423],[0,0],[0.568,-0.702],[0,0],[4.183,-13.708]],"v":[[0.637,-72.352],[8.336,-42.199],[9.652,-39.169],[14.169,-34.781],[23.006,-23.835],[17.155,-5.341],[17.209,-4.466],[17.101,-1.856],[16.807,-0.294],[16.757,0.107],[15.024,41.668],[9.562,57.061],[0.89,56.831],[-11.218,50.829],[-27.021,58.455],[-36.092,46.254],[-38.062,15.655],[-33.59,2.259],[-27.598,-4.787],[-31.849,-5.748],[-38.698,-8.82],[-44.857,-16.917],[-43.935,-30.357],[-33.857,-35.277],[-32.565,-38.654],[-23.522,-73.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-4.692,-17.958],[0,0],[-0.309,-0.622],[0,0],[-1.161,-4],[0,0],[0.052,-0.199],[0.11,-0.45],[0.119,-0.562],[0.028,-0.141],[0,0],[2.504,-3.548],[0,0],[1.606,0.447],[3.214,4.206],[1.055,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.705,2.168],[0,0],[-0.248,1.199],[0,0]],"o":[[0,0],[0.254,1.189],[0,0],[0.657,3.942],[0,0],[-0.051,0.194],[-0.11,0.421],[-0.126,0.514],[-0.029,0.137],[0,0],[-2.364,6.758],[-2.504,3.548],[-1.163,0.775],[0,0],[-3.214,-4.206],[0,0],[-0.207,-0.989],[0,0],[0,0],[0,0],[0,0],[0.946,-5.864],[0,0],[0.455,-0.912],[0,0],[4.456,-14.581]],"v":[[0.834,-71.667],[8.131,-48.03],[9.21,-44.662],[11.147,-38.015],[14.698,-26.546],[16.951,-12.793],[17.134,-11.767],[17.14,-8.649],[16.771,-7.038],[16.685,-6.621],[4.203,41.797],[-3.171,57.14],[-10.855,62.135],[-15.446,62.463],[-23.718,57.204],[-30.416,41.219],[-40.572,1.266],[-42.472,-8.703],[-40.568,-8.85],[-42.5,-8.17],[-42.091,-11.846],[-40.76,-19.55],[-38.301,-28.038],[-37.1,-34.412],[-36.093,-37.651],[-24.915,-72.489]],"c":true}]},{"t":80,"s":[{"i":[[-2.633,-11.634],[0,0],[-0.226,-0.623],[0,0],[0.932,-3.012],[0,0],[0.378,-0.181],[0.062,-0.3],[-0.405,-0.843],[0.017,-0.143],[0,0],[1.799,-2.381],[0,0],[0.983,0.385],[1.805,4.541],[0.474,5.854],[0,0],[0.041,0.307],[0.103,0.457],[0,0],[0,0],[0,0],[-1.006,1.957],[0,0],[-0.212,1.191],[0,0]],"o":[[0,0],[0.239,1.181],[0,0],[1.068,6.586],[0,0],[-0.029,0.188],[-0.372,0.376],[-0.071,0.342],[0.907,0.771],[0,0],[-1.202,8.157],[-1.404,3.833],[-0.734,0.74],[0,0],[-2.215,-4.048],[0,0],[-0.147,-0.914],[-0.099,-0.742],[0,0],[0,0],[0,0],[0.278,-5.629],[0,0],[0.423,-0.814],[0,0],[3.603,-13.583]],"v":[[-0.244,-76.368],[11.209,-40.34],[12.859,-34.816],[14.712,-28.278],[15.1,-9.035],[13.72,-6.882],[12.511,-5.053],[12.317,-4.471],[14.629,-1.82],[15.754,2.971],[4.601,41.023],[-0.149,56.222],[-10.377,62.32],[-13.222,62.675],[-24.161,56.102],[-30,38.304],[-37.573,8.481],[-39.062,-0.797],[-39.32,-1.845],[-39.701,-2.172],[-39.919,-6.076],[-40.664,-16.542],[-38.035,-31.665],[-35.859,-37.788],[-34.922,-40.879],[-23.322,-75.33]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-16.376,-95.506]},"e":{"a":0,"k":[-4.764,12.627]},"t":1,"nm":"Gradient Fill 4","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":43,"op":80,"st":16,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[250.952,301.511,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":31,"s":[249.652,324.993,0],"to":[0,0,0],"ti":[0,0,0]},{"t":82,"s":[249.652,302.811,0]}]},"s":{"a":0,"k":[63.375,63.375,100]}},"ao":0,"ip":1,"op":85,"st":16,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Star3D 2","parent":3,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[248.642,253.313,0]},"a":{"a":0,"k":[356,356,0]},"s":{"a":0,"k":[90,90,100]}},"ao":0,"w":712,"h":712,"ip":36,"op":81,"st":-11,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Merged Shape Layer","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":-2,"s":[90]},{"i":{"x":[0.4],"y":[0.812]},"o":{"x":[0.159],"y":[0]},"t":17,"s":[-17]},{"t":82,"s":[10]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[32.52,-107.221,0],"to":[0,0,0],"ti":[4.707,-268.15,0]},{"t":22,"s":[-134.949,130.308,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.067,-0.067,0]},"t":0,"s":[15,15,100]},{"t":22,"s":[70,70,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[4.939,-0.682],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.65,-1.073],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":33,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.78431372549,0.380392156863,0.007843137255,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":7},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[18.148]},{"t":22,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-3.343,-0.116],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.703,0.128],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.949,-0.993],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":33,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.466666666667,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":7},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.319,-13.084],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.682],[0,0],[-0.699,-0.718],[0,0],[1.032,6.33],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.386],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.451],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.735,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.667],[5.449,-5.407],[3.259,-4],[0,0],[-0.818,-0.071],[0,0],[-3.193,-11.089]],"v":[[-20.529,-75.648],[-32.235,-43.437],[-34.064,-41.421],[-49.389,-42.156],[-54.315,-28.608],[-42.115,0.845],[-41.832,1.267],[-40.939,-3.774],[-40.857,-2.359],[-40.902,-2.008],[-43.855,46.68],[-31.723,55.964],[-12.775,42.788],[-10.464,42.795],[11.336,61.565],[24.458,52.705],[23.468,26.621],[12.866,20.499],[-38.922,-11.003],[23.133,1.682],[31.745,-3.086],[41.567,-19.542],[37.08,-32.339],[11.014,-35.881],[9.077,-39.673],[-2.191,-76.119]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":33,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.22,1,0.956,0.846,0.61,0.976,0.757,0.452,1,0.953,0.558,0.059]}},"s":{"a":0,"k":[-14.258,-97.519]},"e":{"a":0,"k":[-8.286,53.976]},"t":1,"nm":"Gradient_JirTqIgu4f","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.668],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[22.898,-0.751],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":33,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.4,1,0.709,0.166,0.7,0.954,0.595,0.114,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_VdQY6b16pW","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":4,"op":32,"st":-26,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Merged Shape Layer 4","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"t":71,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[91.718,91.718,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":70,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254901961,0.498039215686,0.070588235294,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":36,"op":74,"st":-48,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Merged Shape Layer 3","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[100]},{"t":56,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[91.718,91.718,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":55,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254901961,0.498039215686,0.070588235294,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":35,"op":74,"st":-52,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Merged Shape Layer 2","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[100]},{"t":53,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[91.718,91.718,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":52,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254901961,0.498039215686,0.070588235294,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":32,"op":74,"st":-55,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Merged Shape Layer 21","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[100]},{"t":52,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[117,117,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":52,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":32,"op":74,"st":-55,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[424.3,195.65,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[428.2,229.775,0],"to":[0,0,0],"ti":[0,0,0]},{"t":85,"s":[428.2,192.725,0]}]},"s":{"a":0,"k":[-97.5,97.5,100]}},"ao":0,"ip":1,"op":85,"st":18,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"Star3D 2","parent":10,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[236.676,244.471,0]},"a":{"a":0,"k":[356,356,0]},"s":{"a":0,"k":[105,105,100]}},"ao":0,"w":712,"h":712,"ip":37,"op":81,"st":-9,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Merged Shape Layer 17","parent":8,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[50]},{"i":{"x":[0.42],"y":[0.742]},"o":{"x":[0.167],"y":[0]},"t":17,"s":[-15]},{"t":85,"s":[13]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[150.313,52.922,0],"to":[-39.782,-70.598,0],"ti":[7.092,-14.93,0]},{"t":17,"s":[-8.104,17.422,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.083,-0.083,0]},"t":0,"s":[-15,15,100]},{"t":17,"s":[-35,35,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[4.939,-0.682],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.65,-1.073],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":34,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.78431372549,0.380392156863,0.007843137255,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[18.148]},{"t":23,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-3.343,-0.116],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.703,0.128],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.949,-0.993],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":34,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.466666666667,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.319,-13.084],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.682],[0,0],[-0.699,-0.718],[0,0],[1.032,6.33],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.386],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.451],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.735,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.667],[5.449,-5.407],[3.259,-4],[0,0],[-0.818,-0.071],[0,0],[-3.193,-11.089]],"v":[[-20.529,-75.648],[-32.235,-43.437],[-34.064,-41.421],[-49.389,-42.156],[-54.315,-28.608],[-42.115,0.845],[-41.832,1.267],[-40.939,-3.774],[-40.857,-2.359],[-40.902,-2.008],[-43.855,46.68],[-31.723,55.964],[-12.775,42.788],[-10.464,42.795],[11.336,61.565],[24.458,52.705],[23.468,26.621],[12.866,20.499],[-38.922,-11.003],[23.133,1.682],[31.745,-3.086],[41.567,-19.542],[37.08,-32.339],[11.014,-35.881],[9.077,-39.673],[-2.191,-76.119]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":34,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.22,1,0.956,0.846,0.61,0.976,0.757,0.452,1,0.953,0.558,0.059]}},"s":{"a":0,"k":[-14.258,-97.519]},"e":{"a":0,"k":[-8.286,53.976]},"t":1,"nm":"Gradient_iIbi2H9jky","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.668],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[22.898,-0.751],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":34,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.4,1,0.709,0.166,0.7,0.954,0.595,0.114,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_mqBB8EHEW0","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":3,"op":34,"st":-25,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Merged Shape Layer 7","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[100]},{"t":73,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[97.547,97.547,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":72,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.388059608609,0.003060361451,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":38,"op":74,"st":-46,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Merged Shape Layer 6","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100]},{"t":58,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[97.547,97.547,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":57,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.388059608609,0.003060361451,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":37,"op":74,"st":-50,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Merged Shape Layer 5","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"t":55,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[97.547,97.547,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":54,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.388059608609,0.003060361451,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":34,"op":74,"st":-53,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Merged Shape Layer 22","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100]},{"t":54,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[123.81,123.81,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":54,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":34,"op":74,"st":-53,"bm":0},{"ddd":0,"ind":15,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[382.008,296.56,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.505,"y":0.805},"o":{"x":0.333,"y":0},"t":36,"s":[382.008,325.972,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87,"s":[382.008,311.185,0]}]},"s":{"a":0,"k":[-87.75,87.75,100]}},"ao":0,"ip":1,"op":85,"st":14,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"Star3D 2","parent":17,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[250.014,246.798,0]},"a":{"a":0,"k":[356,356,0]}},"ao":0,"w":712,"h":712,"ip":33,"op":81,"st":-13,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Merged Shape Layer 18","parent":15,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.434],"y":[1.012]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-100]},{"i":{"x":[0.4],"y":[0.719]},"o":{"x":[0.107],"y":[0]},"t":24,"s":[21]},{"t":83,"s":[7]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[137.99,-40.195,0],"to":[0,0,0],"ti":[13.498,-122.332,0]},{"t":26,"s":[2.99,95.064,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.156,0.156,0]},"t":0,"s":[-10,10,100]},{"t":24,"s":[-58,58,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":28,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.756862745098,0.433341740627,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-2,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[18.148]},{"t":17,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":28,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.822222302007,0.510682708142,0.003224401147,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":28,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.994,0.927,0.45,0.998,0.909,0.597,0.7,0.996,0.824,0.267]}},"s":{"a":0,"k":[-12.22,-81.292]},"e":{"a":0,"k":[-12.49,66.21]},"t":1,"nm":"Gradient_0ALnMmLWLd","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":28,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.899,0.469,0.65,0.979,0.802,0.293,1,0.958,0.704,0.116]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_JMpFdCdy4r","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":4,"op":30,"st":-31,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Merged Shape Layer 10","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"t":69,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.789,101.789,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":68,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411764706,0.811764705882,0.027450980392,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":34,"op":74,"st":-50,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Merged Shape Layer 9","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"t":54,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.789,101.789,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":53,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411764706,0.811764705882,0.027450980392,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":33,"op":74,"st":-54,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Merged Shape Layer 8","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"t":51,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.789,101.789,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":50,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411764706,0.811764705882,0.027450980392,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":30,"op":74,"st":-57,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Merged Shape Layer 23","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"t":50,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[130,130,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":50,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":30,"op":74,"st":-57,"bm":0},{"ddd":0,"ind":22,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[259.124,193.338,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[259.124,220.313,0],"to":[0,0,0],"ti":[0,0,0]},{"t":106,"s":[259.124,190.413,0]}]},"s":{"a":0,"k":[97.5,97.5,100]}},"ao":0,"ip":1,"op":85,"st":17,"bm":0},{"ddd":0,"ind":23,"ty":0,"nm":"Star3D 2","parent":24,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[256.613,254.68,0]},"a":{"a":0,"k":[356,356,0]}},"ao":0,"w":712,"h":712,"ip":36,"op":76,"st":-10,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Merged Shape Layer 19","parent":22,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[136]},{"i":{"x":[0.4],"y":[0.517]},"o":{"x":[0.113],"y":[0]},"t":16,"s":[-15]},{"t":76,"s":[5]}]},"p":{"a":1,"k":[{"i":{"x":0.42,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[2.212,65.471,0],"to":[0,0,0],"ti":[-21.866,67.767,0]},{"t":16,"s":[9.546,-113.195,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.122,-0.122,0]},"t":3,"s":[10,10,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":17,"s":[58,58,100]},{"t":39,"s":[50,50,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[4.939,-0.682],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.65,-1.073],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":32,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.756862745098,0.435294117647,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[18.148]},{"t":21,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-3.343,-0.116],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.703,0.128],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.949,-0.993],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":32,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.509803921569,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.319,-13.084],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.682],[0,0],[-0.699,-0.718],[0,0],[1.032,6.33],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.386],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.451],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.735,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.667],[5.449,-5.407],[3.259,-4],[0,0],[-0.818,-0.071],[0,0],[-3.193,-11.089]],"v":[[-20.529,-75.648],[-32.235,-43.437],[-34.064,-41.421],[-49.389,-42.156],[-54.315,-28.608],[-42.115,0.845],[-41.832,1.267],[-40.939,-3.774],[-40.857,-2.359],[-40.902,-2.008],[-43.855,46.68],[-31.723,55.964],[-12.775,42.788],[-10.464,42.795],[11.336,61.565],[24.458,52.705],[23.468,26.621],[12.866,20.499],[-38.922,-11.003],[23.133,1.682],[31.745,-3.086],[41.567,-19.542],[37.08,-32.339],[11.014,-35.881],[9.077,-39.673],[-2.191,-76.119]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":32,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.22,1,0.963,0.851,0.61,1,0.841,0.503,1,1,0.719,0.156]}},"s":{"a":0,"k":[-10.53,-83.143]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_1etpPWIk5E","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.668],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[22.898,-0.751],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":32,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.791,0.179,0.5,0.982,0.704,0.115,1,0.963,0.617,0.052]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_6gqnlohq1a","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":4,"op":33,"st":-27,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Merged Shape Layer 13","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100]},{"t":72,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.047,101.047,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":71,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.945098039216,0.572549019608,0.074509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":37,"op":73,"st":-47,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Merged Shape Layer 12","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"t":57,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.047,101.047,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":56,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.945098039216,0.572549019608,0.074509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":36,"op":73,"st":-51,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"Merged Shape Layer 11","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"t":54,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.047,101.047,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":53,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.945098039216,0.572549019608,0.074509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":33,"op":73,"st":-54,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Merged Shape Layer 24","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"t":53,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[130,130,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":53,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":33,"op":73,"st":-54,"bm":0},{"ddd":0,"ind":29,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.976},"o":{"x":0.167,"y":0.167},"t":7,"s":[353.444,431.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.498,"y":0.826},"o":{"x":0.3,"y":0.147},"t":27,"s":[359.294,492.997,0],"to":[0,0,0],"ti":[0,0,0]},{"t":79,"s":[359.294,469.597,0]}]},"s":{"a":0,"k":[175.5,175.5,100]}},"ao":0,"ip":1,"op":85,"st":12,"bm":0},{"ddd":0,"ind":30,"ty":0,"nm":"Star3D 2","parent":31,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[254.082,255.505,0]},"a":{"a":0,"k":[356,356,0]}},"ao":0,"w":712,"h":712,"ip":32,"op":79,"st":-15,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Merged Shape Layer 20","parent":29,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.362],"y":[0]},"t":0,"s":[-120]},{"i":{"x":[0.41],"y":[0.643]},"o":{"x":[0.167],"y":[0]},"t":22,"s":[7]},{"t":80,"s":[-9]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[-51.676,-101.529,0],"to":[0,0,0],"ti":[72.809,-15.498,0]},{"t":14,"s":[-150.01,-147.491,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.139,0.139,0]},"t":2,"s":[5,5,100]},{"t":15,"s":[25,25,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":27,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.434571688783,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[-4.711]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[18.148]},{"t":16,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":27,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.824836760876,0.53827383004,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":27,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.994,0.927,0.45,0.999,0.897,0.545,0.7,0.997,0.8,0.163]}},"s":{"a":0,"k":[-10.819,-96.725]},"e":{"a":0,"k":[-12.49,66.21]},"t":1,"nm":"Gradient_CcEXlcFQH2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":27,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,0.995,0.882,0.404,0.65,0.963,0.774,0.228,1,0.932,0.666,0.052]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_dmepfa3R3b","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":3,"op":28,"st":-32,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"Merged Shape Layer 16","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[100]},{"t":70,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[100.275,100.275,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":66,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.947712498085,0.721005667892,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":32,"op":73,"st":-52,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"Merged Shape Layer 15","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[100]},{"t":55,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[100.275,100.275,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":51,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.947712498085,0.721005667892,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":31,"op":73,"st":-56,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"Merged Shape Layer 14","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"t":52,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[100.275,100.275,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":48,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.947712498085,0.721005667892,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":28,"op":73,"st":-59,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Merged Shape Layer 25","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[100]},{"t":49,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[135,135,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":49,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":28,"op":73,"st":-59,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"Points","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[100]},{"t":35,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1]},{"t":35,"s":[4]}]},"p":{"a":0,"k":[256.555,258.122,0]},"a":{"a":0,"k":[0.5,3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.107,0.107,0.347],"y":[0,0,0]},"t":-2,"s":[9.782,9.782,100]},{"i":{"x":[0.708,0.708,0.479],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[25.155,25.155,100]},{"t":35,"s":[29.906,29.906,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"o":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"v":[[385.072,18.248],[354.843,22.31],[350.781,-7.919],[381.011,-11.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[367.391,4.348]},"a":{"a":0,"k":[367.391,4.348]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.317,0.317],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"o":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"v":[[261.231,286.312],[236.984,267.809],[255.487,243.561],[279.735,262.064]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256.522,264.13]},"a":{"a":0,"k":[256.522,264.13]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.317,0.317],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"o":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"v":[[-14.927,388.164],[-18.989,357.934],[11.24,353.873],[15.302,384.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.348,370.652]},"a":{"a":0,"k":[-4.348,370.652]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"o":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"v":[[-282.221,264.91],[-263.717,240.663],[-239.47,259.166],[-257.973,283.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-263.043,260.87]},"a":{"a":0,"k":[-263.043,260.87]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"o":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"v":[[-384.072,-11.248],[-353.843,-15.31],[-349.781,14.919],[-380.011,18.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-369.565,0]},"a":{"a":0,"k":[-369.565,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"o":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"v":[[-260.819,-278.542],[-236.571,-260.039],[-255.075,-235.791],[-279.322,-254.295]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-259.783,-258.696]},"a":{"a":0,"k":[-259.783,-258.696]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"o":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"v":[[15.927,-381.164],[19.989,-350.934],[-10.24,-346.873],[-14.302,-377.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-365.217]},"a":{"a":0,"k":[0,-365.217]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"o":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"v":[[283.221,-257.91],[264.717,-233.663],[240.47,-252.166],[258.973,-276.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[257.609,-254.348]},"a":{"a":0,"k":[257.609,-254.348]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":5,"op":34,"st":-2,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[100]},{"t":35,"s":[0]}]},"p":{"a":0,"k":[256.6,258.05,0]},"a":{"a":0,"k":[-2.049,6.248,0]},"s":{"a":0,"k":[27.95,27.95,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.05,"y":0},"t":0,"s":[{"i":[[0,-17.536],[17.536,0],[0,17.536],[-17.536,0]],"o":[[0,17.536],[-17.536,0],[0,-17.536],[17.536,0]],"v":[[29.703,6.248],[-2.049,38],[-33.801,6.248],[-2.049,-25.504]],"c":true}]},{"t":35,"s":[{"i":[[0,-196.476],[196.476,0],[0,196.476],[-196.476,0]],"o":[[0,196.476],[-196.476,0],[0,-196.476],[196.476,0]],"v":[[353.703,6.248],[-2.049,362],[-357.801,6.248],[-2.049,-349.504]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.05],"y":[0]},"t":0,"s":[120]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[18]},{"t":35,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":34,"st":0,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect3.json b/TMessagesProj/src/main/res/raw/star_reaction_effect3.json new file mode 100644 index 000000000..1c32b5cc0 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect3.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":9,"op":94,"w":512,"h":512,"nm":"REACTION PREM STAR","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Light 50","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.615,"s":[100]},{"t":94,"s":[0]}]},"p":{"a":0,"k":[420.276,174.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,4.167]},"t":84,"s":[90,90,100]},{"t":97,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_o0TcRjUXr7","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":78,"op":93,"st":75,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Light 49","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82.615,"s":[100]},{"t":87,"s":[0]}]},"p":{"a":0,"k":[192.276,416.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-3.333]},"t":74,"s":[120,120,100]},{"t":87,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_0g50dtwYnN","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":86,"st":64,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Light 48","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.615,"s":[100]},{"t":78,"s":[0]}]},"p":{"a":0,"k":[319.276,78.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-0.595]},"t":65,"s":[145,145,100]},{"t":78,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_ibPFueI2Pk","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":56,"op":75,"st":55,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Light 47","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60.615,"s":[100]},{"t":65,"s":[0]}]},"p":{"a":0,"k":[87.276,259.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.667]},"t":52,"s":[110,110,100]},{"t":65,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_2KEMfemvZY","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":45,"op":62,"st":42,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Light 46","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43.615,"s":[100]},{"t":48,"s":[0]}]},"p":{"a":0,"k":[422.276,395.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.111]},"t":35,"s":[160,160,100]},{"t":48,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_kvQ60Aov6A","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":26,"op":45,"st":25,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Light 51","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31.615,"s":[100]},{"t":36,"s":[0]}]},"p":{"a":0,"k":[152.276,130.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-0.98]},"t":23,"s":[180,180,100]},{"t":36,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_jnpCGvptCQ","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":14,"op":33,"st":13,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Star 3D 9","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.592],"y":[0.358]},"o":{"x":[0.227],"y":[-0.494]},"t":33,"s":[-20]},{"i":{"x":[0.744],"y":[1]},"o":{"x":[0.343],"y":[0.608]},"t":51,"s":[-50.571]},{"t":91,"s":[-111]}]},"p":{"a":1,"k":[{"i":{"x":0.518,"y":0.924},"o":{"x":0.167,"y":0.167},"t":33,"s":[294.5,198,0],"to":[-1.721,-37.864,0],"ti":[-32.829,1.762,0]},{"i":{"x":0.681,"y":0.835},"o":{"x":0.3,"y":0.057},"t":50,"s":[379.381,29.874,0],"to":[66.407,-3.564,0],"ti":[0,0,0]},{"t":91,"s":[448.5,407,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.128]},"t":33,"s":[-32,32,100]},{"i":{"x":[0.536,0.536,0.462],"y":[1,1,1]},"o":{"x":[0.1,0.1,0.1],"y":[0,0,0]},"t":38,"s":[-65,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.778]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":77,"s":[-35,35,100]},{"t":91,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[243.78,183.376],[254.942,217.478]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.39],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":41,"s":[9]},{"t":70,"s":[9]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":62,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":89,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.784313785329,0.376470618154,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.39],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[5]},{"t":70,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":62,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":89,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854902020623,0.466666696586,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.39],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[5]},{"t":70,"s":[8]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.855,0.49,0.513,0.988,0.721,0.294,1,0.976,0.587,0.098]}},"s":{"a":0,"k":[-8.994,-72.71]},"e":{"a":0,"k":[-23.843,22.638]},"t":1,"nm":"Gradient_R6YssOGlwB","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":33,"op":90,"st":17,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Star 3D 8","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[28]},{"t":96,"s":[-13]}]},"p":{"a":1,"k":[{"i":{"x":0.518,"y":0.919},"o":{"x":0.167,"y":0.167},"t":43,"s":[244.5,218,0],"to":[-1.721,-37.864,0],"ti":[30.704,-0.75,0]},{"i":{"x":0.681,"y":0.928},"o":{"x":0.334,"y":0.075},"t":61,"s":[179.381,52.374,0],"to":[-43.508,1.063,0],"ti":[0,0,0]},{"t":97,"s":[106,313.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-7.424]},"t":43,"s":[-15,15,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1.909]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":77,"s":[-58,58,100]},{"t":96,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[12]},{"t":78,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":66,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":94,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464183807,0.468024879694,0.003111624159,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[10]},{"t":78,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":66,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":94,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[10]},{"t":78,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[11.842,-51.821]},"e":{"a":0,"k":[-28.242,23.088]},"t":1,"nm":"Gradient_lrqTCfvxfh","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":46,"op":93,"st":23,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Star 3D 7","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[-23]},{"t":82,"s":[100]}]},"p":{"a":1,"k":[{"i":{"x":0.518,"y":0.785},"o":{"x":0.167,"y":0.167},"t":21,"s":[185,203,0],"to":[-15.221,-35.364,0],"ti":[38.07,-3.659,0]},{"i":{"x":0.677,"y":0.932},"o":{"x":0.356,"y":0.146},"t":41,"s":[92.381,83.874,0],"to":[-64.432,6.193,0],"ti":[0,0,0]},{"t":85,"s":[14.5,441,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.417,0.417,0.301],"y":[0,0,0]},"t":21,"s":[50,50,100]},{"i":{"x":[0.639,0.639,0.703],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":40,"s":[60,60,100]},{"i":{"x":[0.721,0.721,0.689],"y":[1,1,1]},"o":{"x":[0.533,0.533,0.3],"y":[0,0,0]},"t":69,"s":[28,28,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":21,"s":[9]},{"t":66,"s":[9]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":69,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":85,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.785621074602,0.3764021032,0.00102690879,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":21,"s":[7]},{"t":66,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":69,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":85,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.856209309896,0.465928021599,0.00559619034,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":21,"s":[7]},{"t":66,"s":[8]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.855,0.49,0.513,0.988,0.721,0.294,1,0.976,0.587,0.098]}},"s":{"a":0,"k":[-23.79,-64.655]},"e":{"a":0,"k":[12.417,13.071]},"t":1,"nm":"Gradient_7XOEScdsi6","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":21,"op":80,"st":-5,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Star 3D 3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[17.073]},{"t":66,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.305,"y":0.921},"o":{"x":0.167,"y":0.167},"t":8,"s":[260.5,178,0],"to":[-1.221,-23.364,0],"ti":[23.669,2.424,0]},{"i":{"x":0.71,"y":0.921},"o":{"x":0.402,"y":0.037},"t":22,"s":[225.381,77.374,0],"to":[-37.271,-3.816,0],"ti":[0,0,0]},{"t":67,"s":[166,506.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.55,0.55,0.4],"y":[1,1,1]},"o":{"x":[0.304,0.304,0.167],"y":[0,0,0]},"t":8,"s":[20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1.98]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":52,"s":[90,90,100]},{"t":64,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[12]},{"t":38,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":32,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":55,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"t":63,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.843137254902,0.472930908203,0.007714930703,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[10]},{"t":38,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":32,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":55,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"t":63,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.845751713771,0.524679326076,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[10]},{"t":38,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-22.507,-59.66]},"e":{"a":0,"k":[-0.114,36.781]},"t":1,"nm":"Gradient_HFnzQcNVeP","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":67,"st":-18,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 2 :M 3 :M","sr":1,"ks":{"o":{"a":0,"k":70},"p":{"a":0,"k":[99.889,120.452,0]},"a":{"a":0,"k":[99.889,122.952,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[10]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[7.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.553]},"o":{"x":[0.156],"y":[0.165]},"t":41,"s":[73]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.66]},"t":66,"s":[236.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[0.367]},"o":{"x":[0.158],"y":[0.231]},"t":41,"s":[30]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[20]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[21]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[18.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.536]},"o":{"x":[0.156],"y":[0.171]},"t":41,"s":[40]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.484]},"t":66,"s":[197.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[-0.172]},"o":{"x":[0.158],"y":[0.429]},"t":41,"s":[18]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[15]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[21]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[18.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.536]},"o":{"x":[0.156],"y":[0.171]},"t":41,"s":[16]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.415]},"t":66,"s":[173.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[-2.515]},"o":{"x":[0.158],"y":[1.286]},"t":41,"s":[12]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[11]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[21]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[18.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.524]},"o":{"x":[0.156],"y":[0.176]},"t":41,"s":[4]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.379]},"t":66,"s":[157.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[-2.515]},"o":{"x":[0.158],"y":[1.286]},"t":41,"s":[8]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[7]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 6","bm":0,"hd":false}],"ip":21,"op":88,"st":9,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Star 3D 6","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[-143]},{"t":80,"s":[32]}]},"p":{"a":1,"k":[{"i":{"x":0.513,"y":0.939},"o":{"x":0.167,"y":0.167},"t":26,"s":[257,200,0],"to":[-1.058,-7.198,0],"ti":[-16.274,-0.848,0]},{"i":{"x":0.771,"y":1},"o":{"x":0.413,"y":0.041},"t":43,"s":[284.939,37.132,0],"to":[18.723,0.976,0],"ti":[0,0,0]},{"t":80,"s":[337,497,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-7.051]},"t":26,"s":[-15,15,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,2.282]},"o":{"x":[0.709,0.709,0.709],"y":[0,0,0]},"t":69,"s":[-70,70,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.601,184.532],[255.324,216.865]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[12]},{"t":69,"s":[9]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":78,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.848366172641,0.459115839939,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[10]},{"t":69,"s":[7]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164],[-14.457,-4.833],[38.777,-4.29],[52.938,-10.548],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-7.256,-4.965],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-15.03,-4.223],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":78,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[10]},{"t":69,"s":[7]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.899,0.595,0.513,1,0.817,0.38,1,1,0.735,0.166]}},"s":{"a":0,"k":[-3.706,-58.535]},"e":{"a":0,"k":[-22.565,34.831]},"t":1,"nm":"Gradient_fLVWno7Be2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":28,"op":79,"st":1,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 2 :M 2","sr":1,"ks":{"o":{"a":0,"k":75},"p":{"a":0,"k":[301.359,195.781,0]},"a":{"a":0,"k":[201.359,195.781,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.906]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.114]},"t":41,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[34.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[9.116]},{"t":85,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[10.333]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[21.2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[86.432]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[154.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[296.601]},{"t":85,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[6]},{"t":85,"s":[2]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.884]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.712],"y":[1.27]},"o":{"x":[0.379],"y":[-0.126]},"t":40,"s":[13]},{"i":{"x":[0.796],"y":[0.932]},"o":{"x":[0.462],"y":[0.163]},"t":54,"s":[6.893]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[5.116]},{"t":85,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100.622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[166.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[305.971]},{"t":85,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[10]},{"t":85,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.813]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.722],"y":[1.744]},"o":{"x":[0.388],"y":[-0.215]},"t":38,"s":[7]},{"i":{"x":[0.788],"y":[0.924]},"o":{"x":[0.454],"y":[0.192]},"t":54,"s":[2.808]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[15.116]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[3.369]},{"t":84,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[124.84]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[181.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[290.501]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[337.643]},{"t":84,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[32]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[15]},{"t":84,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.832]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.736],"y":[2.723]},"o":{"x":[0.402],"y":[-1.107]},"t":35,"s":[6]},{"i":{"x":[0.775],"y":[0.929]},"o":{"x":[0.441],"y":[0.168]},"t":54,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[11.116]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[7.066]},{"t":81,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[52]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[135.251]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[181.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[318]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[319.5]},{"t":81,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6]},{"i":{"x":[0.779],"y":[0.692]},"o":{"x":[0.47],"y":[0]},"t":35,"s":[14]},{"i":{"x":[0.742],"y":[0.731]},"o":{"x":[0.503],"y":[0.709]},"t":54,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[24]},{"t":82,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false}],"ip":31,"op":87,"st":26,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Star 3D 5","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[30]},{"t":44,"s":[-18]}]},"p":{"a":1,"k":[{"i":{"x":0.754,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[263,309.5,0],"to":[1.5,34,0],"ti":[0,0,0]},{"t":47,"s":[268.5,510.75,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":13,"s":[-20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.35,0.35,0.35],"y":[0,0,0]},"t":26,"s":[-75,75,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.842,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.723,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.641,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"t":41,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.847058823529,0.498039215686,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.842,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.723,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[-16.268,-10.95],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.641,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164],[-14.457,-4.833],[38.777,-4.29],[52.938,-10.548],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"t":41,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-7.256,-4.965],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.922,0.686,0.513,0.999,0.872,0.477,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-19.254,-34.646]},"e":{"a":0,"k":[-42.059,42.289]},"t":1,"nm":"Gradient_FEj0ZysM9D","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":15,"op":44,"st":-16,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 2 :M 3 :M 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"t":28,"s":[75]}]},"p":{"a":0,"k":[99.889,112.452,0]},"a":{"a":0,"k":[99.889,122.952,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[9.184]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[20.664]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[13.803]},{"t":48,"s":[4.803]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[92.561]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[225.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[298.347]},{"t":48,"s":[336.347]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[9]},{"t":48,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[7.111]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[7.45]},{"t":48,"s":[4.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[59.376]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[161.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[274.759]},{"t":48,"s":[325.759]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[32]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[39]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[23.27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[6.358]},{"t":48,"s":[4]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[8.295]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[18.664]},{"t":44,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[33.858]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[106.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[254.641]},{"t":48,"s":[315.641]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[20.593]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[4.882]},{"t":48,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[8.295]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[18.664]},{"t":44,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[12.265]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[74.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[235.935]},{"t":48,"s":[305.935]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[10.444]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[3]},{"t":48,"s":[2]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 6","bm":0,"hd":false}],"ip":14,"op":49,"st":-2,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Star 3D 4","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[-200]},{"t":59,"s":[-334]}]},"p":{"a":1,"k":[{"i":{"x":0.579,"y":0.802},"o":{"x":0.238,"y":0.978},"t":13,"s":[283.713,202.898,0],"to":[5.532,-10.027,0],"ti":[-7.973,-2.031,0]},{"i":{"x":0.611,"y":0.93},"o":{"x":0.334,"y":0.062},"t":21,"s":[298.381,182.374,0],"to":[33.594,8.555,0],"ti":[0,0,0]},{"t":59,"s":[379,498.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.667]},"t":11,"s":[-20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,2.667]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":47,"s":[-55,55,100]},{"t":58,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[244.167,187.072],[255.053,219.042]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":34,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":53,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":58,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.784313785329,0.376470618154,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":34,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":53,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":58,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854902020623,0.466666696586,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.822,0.535,0.513,0.988,0.705,0.316,1,0.976,0.587,0.098]}},"s":{"a":0,"k":[7.439,-54.887]},"e":{"a":0,"k":[-23.238,37.877]},"t":1,"nm":"Gradient_WdA15I8Z9Y","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":13,"op":57,"st":-15,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 2 :M 3 :M 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[0]},{"t":39,"s":[75]}]},"p":{"a":0,"k":[99.889,120.452,0]},"a":{"a":0,"k":[99.889,122.952,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[11.664]},{"t":58,"s":[5.803]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[61]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[231.225]},{"t":58,"s":[335.347]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.532]},"t":23,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[34]},{"t":58,"s":[7.941]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[18.664]},{"t":58,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[36]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[195.225]},{"t":58,"s":[324.759]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.277]},"t":23,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[22.27]},{"t":58,"s":[6.358]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[18.664]},{"t":58,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[169.225]},{"t":58,"s":[318.641]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.394]},"t":23,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[15]},{"t":58,"s":[4.882]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[18.664]},{"t":58,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[149.225]},{"t":58,"s":[313.935]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.591]},"t":23,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[10]},{"t":58,"s":[3.941]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 6","bm":0,"hd":false}],"ip":13,"op":59,"st":-1,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Shape Layer 2 :M","sr":1,"ks":{"o":{"a":0,"k":75},"p":{"a":0,"k":[201.359,195.781,0]},"a":{"a":0,"k":[201.359,195.781,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.918]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.111]},"t":26,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[34.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[14.116]},{"t":69,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[154.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[290.601]},{"t":69,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[18]},{"t":69,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"t":71,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.899]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.179]},"t":25,"s":[13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[12.116]},{"t":69,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[83.804]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[171.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[297.971]},{"t":69,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[6]},{"t":69,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"t":72,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.813]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.117]},"t":23,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[15.116]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[3.369]},{"t":68,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[99.84]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[186.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[286.501]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[329.643]},{"t":68,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[37]},{"t":68,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[100]},{"t":70,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.782]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0]},{"i":{"x":[0.736],"y":[0.184]},"o":{"x":[0.402],"y":[0.524]},"t":20,"s":[6]},{"i":{"x":[0.775],"y":[0.893]},"o":{"x":[0.441],"y":[0.252]},"t":38,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[11.116]},{"t":65,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[52]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[117.251]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[181.502]},{"t":65,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[24]},{"t":65,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[100]},{"t":67,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false}],"ip":20,"op":71,"st":10,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Star 3D 2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[120]},{"t":63,"s":[300]}]},"p":{"a":1,"k":[{"i":{"x":0.554,"y":0.821},"o":{"x":0.208,"y":0.331},"t":13,"s":[274.105,174.577,0],"to":[22.471,-71.378,0],"ti":[-38.571,-2.324,0]},{"i":{"x":0.569,"y":0.887},"o":{"x":0.275,"y":0.13},"t":32,"s":[393.381,62.874,0],"to":[54.645,3.293,0],"ti":[0,0,0]},{"t":63,"s":[490,275.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":11,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.083]},"o":{"x":[0.727,0.727,0.5],"y":[0,0,0]},"t":41,"s":[45,45,100]},{"t":63,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":35,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"t":63,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.848366172641,0.50040881587,0.003326926044,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":35,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164],[-14.457,-4.833],[38.777,-4.29],[52.938,-10.548],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-7.256,-4.965],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053],[-21,-11.37],[10.915,-4.579],[17.551,-7.776],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-9.261,-2.714],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-15.03,-4.223],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"t":63,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[40.146,-23.147]},"e":{"a":0,"k":[-56.469,10.765]},"t":1,"nm":"Gradient_uqen0XnthU","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":13,"op":64,"st":-15,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Star 3D","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[44]},{"t":48,"s":[-9]}]},"p":{"a":1,"k":[{"i":{"x":0.71,"y":1},"o":{"x":0.214,"y":0.3},"t":13,"s":[170.967,253.74,0],"to":[-138.849,4.447,0],"ti":[0,0,0]},{"t":54,"s":[36,471.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,2.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":36,"s":[55,55,100]},{"t":48,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":9},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":27,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"t":43,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.784313785329,0.376470618154,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":27,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-22.35,-11.83],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053],[-21,-11.37],[10.915,-4.579],[17.551,-7.776],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"t":43,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854902020623,0.466666696586,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.806,0.493,0.513,0.975,0.682,0.279,1,0.95,0.558,0.066]}},"s":{"a":0,"k":[-16.006,-59.997]},"e":{"a":0,"k":[-4.763,46.286]},"t":1,"nm":"Gradient_MkFHPaeN6h","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":13,"op":49,"st":-15,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Star 3D 11","sr":1,"ks":{"r":{"a":0,"k":-33},"p":{"a":1,"k":[{"i":{"x":0.769,"y":0.887},"o":{"x":0.274,"y":0.351},"t":12,"s":[203.046,186.584,0],"to":[-48.302,-99.817,0],"ti":[51.393,-51.848,0]},{"t":33.244140625,"s":[16.5,120,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,-14]},"o":{"x":[0.518,0.518,0.3],"y":[0,0,0]},"t":13,"s":[55,55,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[9]},{"t":34,"s":[13]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"t":32,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.847058823529,0.498039215686,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[7]},{"t":34,"s":[11]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"t":32,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[7]},{"t":34,"s":[11]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-34.14,-41.957]},"e":{"a":0,"k":[4.711,27.11]},"t":1,"nm":"Gradient_aQkahUQs5O","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":34,"st":-17,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Star 3D 10","sr":1,"ks":{"r":{"a":0,"k":13},"p":{"a":1,"k":[{"i":{"x":0.754,"y":0.875},"o":{"x":0.167,"y":0.167},"t":10,"s":[305.5,196.5,0],"to":[133.5,-134,0],"ti":[0,0,0]},{"t":36,"s":[495.5,287,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,20.048]},"o":{"x":[0.585,0.585,0.3],"y":[0,0,0]},"t":20,"s":[-40,40,100]},{"t":35,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"t":29,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464183807,0.468024879694,0.003111624159,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":9},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"t":29,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":9},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[9.231,-40.029]},"e":{"a":0,"k":[-28.277,31.518]},"t":1,"nm":"Gradient_rRk7VNTMbf","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":36,"st":-16,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Star 3D 12","sr":1,"ks":{"r":{"a":0,"k":13},"p":{"a":1,"k":[{"i":{"x":0.766,"y":0.875},"o":{"x":0.254,"y":0.335},"t":12,"s":[195.586,305.868,0],"to":[-63.855,65.356,0],"ti":[0,0,0]},{"t":32,"s":[154.5,497,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.704,0.704,0.704],"y":[-0.226,0.087,-26.386]},"o":{"x":[0.275,0.275,0.275],"y":[0,0,0]},"t":12,"s":[30,30,100]},{"i":{"x":[0.78,0.78,0.78],"y":[0.939,0.931,-3.161]},"o":{"x":[0.427,0.427,0.427],"y":[0.155,0.175,10.513]},"t":27,"s":[26.276,25,100]},{"t":31,"s":[15,15,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"t":27,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[32.727,35.889],[25.897,23.574]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464183807,0.468024879694,0.003111624159,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"t":27,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[32.727,35.889],[25.897,23.574],[-14.457,-4.833],[36.464,-5.827],[50.625,-12.085],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-24.646,-37.694]},"e":{"a":0,"k":[2.54,18.993]},"t":1,"nm":"Gradient_UFPre71sSh","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":32,"st":-16,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Shape Layer 26","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":80,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-360]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.71},"o":{"x":0.112,"y":0.131},"t":12,"s":[259.658,160.283,0],"to":[1.546,-33.016,0],"ti":[5.538,18.448,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.873},"t":29,"s":[250.65,70.521,0],"to":[-11.278,-37.567,0],"ti":[0,0,0]},{"t":93,"s":[223,14.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":54,"s":[20,20,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.580392156863,0.96862745098,0.450980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":72,"st":-77,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Shape Layer 25","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[50]},{"t":81,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-270]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[301.202,160.234,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.878},"t":29,"s":[363.643,92.278,0],"to":[0,0,0],"ti":[0,0,0]},{"t":72,"s":[407,58,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":57,"s":[20,20,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333333333,0.439215686275,0.988235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":74,"st":-98,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Shape Layer 24","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":80,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-180]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.707},"o":{"x":0.112,"y":0.104},"t":12,"s":[350.263,202.194,0],"to":[17.532,-8.291,0],"ti":[-25.948,6.912,0]},{"i":{"x":0.7,"y":0.938},"o":{"x":0.298,"y":0.55},"t":29,"s":[428.055,178.457,0],"to":[22.292,-5.937,0],"ti":[-18.764,-7.455,0]},{"t":75,"s":[492,181,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.273]},"t":12,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":52,"s":[30,30,100]},{"t":73,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254901961,0.314868762446,0.314868762446,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":72,"st":-95,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"Shape Layer 23","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"t":80,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-90]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.71},"o":{"x":0.112,"y":0.13},"t":12,"s":[352.799,238.28,0],"to":[18.502,4.824,0],"ti":[-20.417,-17.478,0]},{"i":{"x":0.7,"y":0.951},"o":{"x":0.298,"y":0.857},"t":29,"s":[429.074,280.324,0],"to":[29.828,25.535,0],"ti":[-6.493,-43.828,0]},{"t":78,"s":[489,379,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":54,"s":[20,20,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.690196078431,0.517647058824,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":72,"st":-92,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Shape Layer 22","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"t":77,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":76,"s":[124]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[325.358,329.633,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.878},"t":29,"s":[372.199,390.259,0],"to":[0,0,0],"ti":[0,0,0]},{"t":81,"s":[438.5,470.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":56,"s":[30,30,100]},{"t":77,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.576470588235,0.235294117647,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":78,"st":-89,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Shape Layer 21","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[50]},{"t":76,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[90]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[245.665,339.721,0],"to":[-7.296,20.229,0],"ti":[9.122,-31.98,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.877},"t":27,"s":[226.656,406.986,0],"to":[-8.802,30.859,0],"ti":[1.862,-17.763,0]},{"t":84,"s":[213.5,497.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[50,50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":59,"s":[20,20,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078431373,0.725490196078,0.960784313725,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":78,"st":-86,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Shape Layer 20","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"t":79,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[180]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[181.866,290.421,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.878},"t":29,"s":[111.006,365.381,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87,"s":[67.5,417.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":52,"s":[30,30,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.450980392157,0.96862745098,0.717647058824,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":78,"st":-83,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Shape Layer 19","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[50]},{"t":81,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[270]}]},"p":{"a":1,"k":[{"i":{"x":0.571,"y":0.662},"o":{"x":0.167,"y":0.167},"t":12,"s":[173.261,231.262,0],"to":[-6.14,-1.361,0],"ti":[48.974,-21.268,0]},{"i":{"x":0.708,"y":1},"o":{"x":0.304,"y":0.74},"t":32,"s":[77.502,252.366,0],"to":[-33.88,14.713,0],"ti":[21.099,-30.941,0]},{"t":93,"s":[4,314.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":59,"s":[20,20,100]},{"t":77,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.354248286229,0.57462385589,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":67,"st":-80,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"Shape Layer 35","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"t":79,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-343]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[281.425,187.241,0],"to":[-1.336,-29.61,0],"ti":[-1.938,14.395,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.712},"t":35,"s":[283.441,142.768,0],"to":[3.125,-23.21,0],"ti":[0,0,0]},{"t":99,"s":[296.101,104.425,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":55,"s":[31.5,31.5,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.52418308632,0.651067397174,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":81,"st":-71,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"Shape Layer 34","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[100]},{"t":82,"s":[25]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-253]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.626},"o":{"x":0.167,"y":0.167},"t":15,"s":[302.145,200.521,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":35,"s":[362.509,172.69,0],"to":[0,0,0],"ti":[0,0,0]},{"t":88,"s":[397.444,156.024,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[25.2,25.2,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":67,"s":[12.6,12.6,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.537285658892,0.617300714231,0.932026223575,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":82,"st":-92,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"Shape Layer 33","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":85,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-163]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[342.766,239.279,0],"to":[12.208,-1.911,0],"ti":[-20.028,-1.938,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.709},"t":35,"s":[406.663,242.096,0],"to":[17.143,1.659,0],"ti":[-14.592,-11.02,0]},{"t":81,"s":[465.79,260.061,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":58,"s":[12.6,12.6,100]},{"t":79,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.62875809015,0.957164390414,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":78,"st":-89,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Shape Layer 32","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":83,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-73]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[331.559,276.693,0],"to":[7.379,5.503,0],"ti":[-14.676,-16.088,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.71},"t":35,"s":[355.292,304.034,0],"to":[16.671,18.275,0],"ti":[-6.339,-23.601,0]},{"t":84,"s":[392.22,366.521,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[35,35,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":60,"s":[20,20,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.450980392157,0.96862745098,0.702699190028,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":78,"st":-86,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"Shape Layer 31","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":84,"s":[50]}]},"r":{"a":0,"k":17},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.626},"o":{"x":0.167,"y":0.167},"t":15,"s":[281.992,338.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":35,"s":[291.824,379.889,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87,"s":[302.249,423.637,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[44.1,44.1,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":62,"s":[18.9,18.9,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.997385780484,0.918311264936,0.45240909352,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":82,"st":-83,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"Shape Layer 30","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[50]},{"t":82,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":88,"s":[300]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.628},"o":{"x":0.167,"y":0.167},"t":15,"s":[226.102,326.344,0],"to":[-8.144,4.463,0],"ti":[16.17,-24.976,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":34,"s":[191.191,371.086,0],"to":[-10.987,16.971,0],"ti":[4.394,-10.359,0]},{"t":90,"s":[149.184,440.894,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,9.333]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":69,"s":[18.9,18.9,100]},{"t":90,"s":[5,5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.490196078431,0.439215686275,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":89,"st":-80,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"Shape Layer 29","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[50]},{"t":84,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[197]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.626},"o":{"x":0.167,"y":0.167},"t":15,"s":[195.833,270.012,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":35,"s":[143.036,307.22,0],"to":[0,0,0],"ti":[0,0,0]},{"t":93,"s":[104.331,336.816,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":66,"s":[15.75,15.75,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.576470588235,0.235294117647,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":83,"st":-77,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"Shape Layer 28","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":83,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[287]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.629},"o":{"x":0.167,"y":0.167},"t":15,"s":[192.989,221.963,0],"to":[-3.85,-6.026,0],"ti":[33.638,-0.022,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.707},"t":38,"s":[109.817,210.796,0],"to":[-10.134,0.007,0],"ti":[18.411,-14.755,0]},{"t":99,"s":[35.427,226.435,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":18,"s":[38,38,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":67,"s":[15,15,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333333333,0.439215686275,0.988235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":83,"st":-74,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"Shape Layer 27","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":85,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[377]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[227.568,196.69,0],"to":[-14.568,-24.197,0],"ti":[23.968,24.345,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.716},"t":35,"s":[179.133,135.408,0],"to":[-5.384,-5.468,0],"ti":[17.34,10.519,0]},{"t":99,"s":[120.25,90.342,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":68,"s":[25.2,25.2,100]},{"t":91,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.690196078431,0.98431372549,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":90,"st":-71,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"Star Splash 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":10,"s":[100]},{"t":29,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[2.602,-6.356],[0,0],[1.678,-0.082],[0,0],[-5.311,-4.126],[0,0],[0.415,-1.57],[0,0],[-5.78,3.707],[0,0],[-1.438,-0.931],[0,0],[1.673,6.494],[0,0],[-1.308,1.009],[0,0],[6.794,0.372],[0,0],[0.603,1.521],[0,0]],"o":[[0,0],[-0.617,1.509],[0,0],[-6.808,0.329],[0,0],[1.308,1.017],[0,0],[-1.717,6.49],[0,0],[1.443,-0.925],[0,0],[5.756,3.729],[0,0],[-0.403,-1.569],[0,0],[5.316,-4.101],[0,0],[-1.683,-0.092],[0,0],[-2.533,-6.381]],"v":[[-19.196,-79.644],[-42.925,-40.985],[-46.694,-38.374],[-87.515,-32.124],[-91.794,-19.393],[-64.77,12.184],[-63.304,16.429],[-66.084,58.211],[-54.549,66.113],[-14.62,53.202],[-9.861,53.212],[30.08,66.33],[41.656,58.492],[39.171,16.174],[40.654,11.945],[67.776,-19.075],[63.565,-31.818],[24.033,-39.411],[20.276,-42.061],[-4.726,-79.572]],"c":true}]},{"t":29,"s":[{"i":[[3.269,-8.273],[0,0],[2.108,-0.106],[0,0],[-6.673,-5.37],[0,0],[0.522,-2.043],[0,0],[-7.262,4.825],[0,0],[-1.807,-1.212],[0,0],[2.102,8.452],[0,0],[-1.643,1.313],[0,0],[8.537,0.484],[0,0],[0.757,1.98],[0,0]],"o":[[0,0],[-0.775,1.964],[0,0],[-8.554,0.429],[0,0],[1.643,1.324],[0,0],[-2.158,8.447],[0,0],[1.813,-1.204],[0,0],[7.232,4.854],[0,0],[-0.507,-2.042],[0,0],[6.679,-5.338],[0,0],[-2.115,-0.12],[0,0],[-3.182,-8.306]],"v":[[-21.04,-104.227],[-53.994,-64.973],[-58.73,-61.574],[-106.877,-42.375],[-112.253,-25.806],[-84.581,14.645],[-82.74,20.17],[-79.95,75.203],[-65.458,85.488],[-15.29,68.684],[-9.311,68.697],[40.871,85.771],[55.416,75.57],[58.576,20.489],[60.44,14.984],[88.234,-25.391],[82.943,-41.977],[33.903,-61.622],[29.181,-65.071],[-2.859,-104.133]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.98692818436,0.539429668352,0.011610918419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[25]},{"t":29,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":10,"op":30,"st":-78,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"Star Splash 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":12,"s":[100]},{"t":33,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[3.671,-9.291],[0,0],[2.367,-0.12],[0,0],[-7.494,-6.031],[0,0],[0.586,-2.295],[0,0],[-8.156,5.419],[0,0],[-2.03,-1.361],[0,0],[2.36,9.493],[0,0],[-1.845,1.474],[0,0],[9.587,0.543],[0,0],[0.851,2.223],[0,0]],"o":[[0,0],[-0.87,2.205],[0,0],[-9.607,0.481],[0,0],[1.845,1.486],[0,0],[-2.423,9.487],[0,0],[2.036,-1.352],[0,0],[8.122,5.451],[0,0],[-0.569,-2.293],[0,0],[7.501,-5.995],[0,0],[-2.375,-0.135],[0,0],[-3.574,-9.328]],"v":[[-22.151,-115.709],[-59.162,-71.623],[-64.481,-67.806],[-118.553,-46.245],[-124.591,-27.635],[-93.513,17.793],[-91.446,23.999],[-88.312,85.805],[-72.036,97.356],[-15.694,78.483],[-8.98,78.498],[47.38,97.674],[63.714,86.217],[67.263,24.356],[69.356,18.175],[100.572,-27.17],[94.629,-45.797],[39.553,-67.861],[34.251,-71.734],[-1.733,-115.603]],"c":true}]},{"t":33,"s":[{"i":[[4.724,-11.955],[0,0],[3.046,-0.154],[0,0],[-9.643,-7.761],[0,0],[0.754,-2.952],[0,0],[-10.494,6.973],[0,0],[-2.612,-1.751],[0,0],[3.037,12.214],[0,0],[-2.374,1.897],[0,0],[12.336,0.699],[0,0],[1.095,2.861],[0,0]],"o":[[0,0],[-1.12,2.838],[0,0],[-12.361,0.619],[0,0],[2.374,1.913],[0,0],[-3.118,12.207],[0,0],[2.619,-1.739],[0,0],[10.451,7.014],[0,0],[-0.732,-2.951],[0,0],[9.652,-7.714],[0,0],[-3.056,-0.173],[0,0],[-4.599,-12.003]],"v":[[-25.06,-145.747],[-72.682,-89.022],[-79.525,-84.111],[-149.101,-56.367],[-156.87,-32.423],[-116.882,26.031],[-114.221,34.016],[-110.189,113.542],[-89.247,128.405],[-16.751,104.121],[-8.112,104.14],[64.406,128.814],[85.424,114.071],[89.99,34.475],[92.683,26.522],[132.848,-31.824],[125.202,-55.792],[54.335,-84.181],[47.513,-89.165],[1.212,-145.611]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.964705882353,0.647058823529,0.090196078431,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[20]},{"t":31,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":12,"op":34,"st":-75,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"Star Splash 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":13,"s":[100]},{"t":43,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[4.621,-11.694],[0,0],[2.98,-0.15],[0,0],[-9.433,-7.591],[0,0],[0.737,-2.888],[0,0],[-10.265,6.821],[0,0],[-2.555,-1.713],[0,0],[2.971,11.948],[0,0],[-2.322,1.856],[0,0],[12.067,0.684],[0,0],[1.071,2.799],[0,0]],"o":[[0,0],[-1.095,2.776],[0,0],[-12.091,0.606],[0,0],[2.322,1.871],[0,0],[-3.05,11.941],[0,0],[2.562,-1.701],[0,0],[10.223,6.861],[0,0],[-0.716,-2.886],[0,0],[9.441,-7.546],[0,0],[-2.989,-0.17],[0,0],[-4.498,-11.741]],"v":[[-24.775,-142.806],[-71.358,-87.319],[-78.052,-82.514],[-146.109,-55.376],[-153.709,-31.954],[-114.593,25.224],[-111.991,33.035],[-108.047,110.826],[-87.562,125.364],[-16.648,101.61],[-8.197,101.629],[62.739,125.764],[83.298,111.344],[87.764,33.484],[90.399,25.704],[129.688,-31.368],[122.208,-54.813],[52.888,-82.583],[46.214,-87.458],[0.924,-142.673]],"c":true}]},{"t":44,"s":[{"i":[[6.23,-15.767],[0,0],[4.017,-0.203],[0,0],[-12.718,-10.235],[0,0],[0.994,-3.894],[0,0],[-13.841,9.196],[0,0],[-3.444,-2.309],[0,0],[4.005,16.109],[0,0],[-3.131,2.502],[0,0],[16.27,0.922],[0,0],[1.444,3.773],[0,0]],"o":[[0,0],[-1.477,3.743],[0,0],[-16.302,0.817],[0,0],[3.131,2.523],[0,0],[-4.112,16.1],[0,0],[3.455,-2.294],[0,0],[13.783,9.25],[0,0],[-0.966,-3.891],[0,0],[12.729,-10.174],[0,0],[-4.03,-0.229],[0,0],[-6.065,-15.83]],"v":[[-29.222,-188.733],[-92.028,-113.921],[-101.055,-107.443],[-192.815,-70.853],[-203.061,-39.274],[-150.322,37.818],[-146.814,48.349],[-141.496,153.234],[-113.876,172.836],[-18.264,140.808],[-6.87,140.834],[88.771,173.375],[116.49,153.932],[122.512,48.956],[126.065,38.466],[179.037,-38.484],[168.953,-70.094],[75.489,-107.535],[66.491,-114.108],[5.427,-188.553]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.803921568627,0.180392156863,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[20]},{"t":34,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":13,"op":45,"st":-71,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"Star Splash 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.671],"y":[0.523]},"o":{"x":[0.272],"y":[0]},"t":15,"s":[80]},{"i":{"x":[0.671],"y":[0.939]},"o":{"x":[0.337],"y":[0.062]},"t":35,"s":[33.488]},{"i":{"x":[0.671],"y":[3.247]},"o":{"x":[0.338],"y":[-2.307]},"t":36,"s":[15]},{"i":{"x":[0.672],"y":[1.045]},"o":{"x":[0.338],"y":[-0.046]},"t":38,"s":[15]},{"i":{"x":[0.672],"y":[0.548]},"o":{"x":[0.431],"y":[0.593]},"t":39,"s":[40]},{"i":{"x":[0.68],"y":[0.875]},"o":{"x":[0.345],"y":[0.059]},"t":41,"s":[35]},{"i":{"x":[0.68],"y":[6.009]},"o":{"x":[0.426],"y":[-6.655]},"t":42,"s":[15]},{"i":{"x":[0.778],"y":[1.059]},"o":{"x":[0.426],"y":[-0.333]},"t":44,"s":[15]},{"i":{"x":[0.778],"y":[2.184]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[25]},{"t":48,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[4.717,-11.938],[0,0],[3.042,-0.154],[0,0],[-9.63,-7.75],[0,0],[0.753,-2.948],[0,0],[-10.48,6.963],[0,0],[-2.608,-1.748],[0,0],[3.033,12.198],[0,0],[-2.371,1.894],[0,0],[12.319,0.698],[0,0],[1.093,2.857],[0,0]],"o":[[0,0],[-1.118,2.834],[0,0],[-12.344,0.618],[0,0],[2.371,1.91],[0,0],[-3.114,12.19],[0,0],[2.616,-1.737],[0,0],[10.436,7.004],[0,0],[-0.731,-2.946],[0,0],[9.638,-7.703],[0,0],[-3.052,-0.173],[0,0],[-4.592,-11.986]],"v":[[-25.042,-145.562],[-72.598,-88.915],[-79.432,-84.01],[-148.912,-56.305],[-156.67,-32.393],[-116.737,25.98],[-114.081,33.954],[-110.054,113.37],[-89.141,128.213],[-16.745,103.962],[-8.117,103.981],[64.301,128.621],[85.289,113.899],[89.849,34.413],[92.539,26.47],[132.649,-31.795],[125.013,-55.73],[54.244,-84.08],[47.431,-89.057],[1.194,-145.426]],"c":true}]},{"t":49,"s":[{"i":[[12.639,-17.873],[0,0],[5.253,-0.265],[0,0],[-14.182,-20.101],[0,0],[1.3,-5.092],[0,0],[-22.123,11.018],[0,0],[-4.504,-3.02],[0,0],[-0.058,21.466],[0,0],[-4.094,3.271],[0,0],[21.908,7.577],[0,0],[1.888,4.934],[0,0]],"o":[[0,0],[-1.931,4.894],[0,0],[-15.505,5.276],[0,0],[4.094,3.299],[0,0],[-1.374,22.379],[0,0],[4.518,-3],[0,0],[18.625,10.861],[0,0],[-1.263,-5.089],[0,0],[11.466,-15.096],[0,0],[-5.27,-0.299],[0,0],[-15.654,-20.853]],"v":[[-34.397,-243.382],[-116.528,-145.551],[-128.331,-137.08],[-248.324,-89.233],[-261.723,-47.937],[-192.758,52.874],[-188.169,66.646],[-181.216,203.8],[-145.098,229.434],[-20.068,187.552],[-5.168,187.586],[119.9,230.139],[156.148,204.713],[164.022,67.439],[168.668,53.721],[237.939,-46.904],[224.752,-88.24],[102.531,-137.201],[90.765,-145.796],[10.913,-243.147]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.956331260532,0.503267894072,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[30]},{"t":40,"s":[7]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":15,"op":50,"st":-69,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"GRADIENT LIGHT","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[100]},{"t":30,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[44,74,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.348]},"t":10,"s":[110,110,100]},{"t":25,"s":[160,160,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-90.575,0],[0,-90.575],[90.575,0],[0,90.575]],"o":[[90.575,0],[0,90.575],[-90.575,0],[0,-90.575]],"v":[[0,-164],[164,0],[0,164],[-164,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.15,1,1,1,0.36,1,1,1,0.45,1,1,1,0.78,1,1,1,1,1,1,1,0.15,0,0.36,0.5,0.45,1,0.78,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[160.5,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_9366IkNRH0","hd":false},{"ty":"tr","p":{"a":0,"k":[44,74]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":10,"op":31,"st":9,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.72],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":61,"s":[75]},{"t":91,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[197,387,0],"to":[0,0,0],"ti":[0,0,0]},{"t":84,"s":[144,414,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.117]},"t":13,"s":[36,36,100]},{"t":82,"s":[52,52,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.839,0.469,0.65,1,0.839,0.47,1,1,0.839,0.471,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_tEoam5RiKy","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":13,"op":89,"st":1,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[75]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":30,"s":[45]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":53,"s":[100]},{"t":80,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.8,"y":1},"o":{"x":0.167,"y":0.167},"t":12,"s":[314.5,158,0],"to":[-3.5,-31.5,0],"ti":[0,0,0]},{"t":80,"s":[308,85.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,3.174]},"t":12,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.248]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":44,"s":[50,50,100]},{"t":80,"s":[40,40,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.943,0.605,0.65,1,0.942,0.605,1,1,0.941,0.604,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_7QdFZkjyma","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":13,"op":81,"st":-1,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":30,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":48,"s":[45]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":67,"s":[75]},{"t":89,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":0.905},"o":{"x":0.167,"y":0.167},"t":23,"s":[120,256.5,0],"to":[0,0,0],"ti":[18,-3,0]},{"t":89,"s":[69.5,252.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.641]},"t":23,"s":[30,30,100]},{"t":89,"s":[38,38,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.941,0.604,0.65,1,0.941,0.604,1,1,0.941,0.604,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_St4IBLrCCt","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":23,"op":89,"st":12,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.593],"y":[0]},"t":41,"s":[100]},{"t":83,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":0.911},"o":{"x":0.167,"y":0.167},"t":13,"s":[332,375.5,0],"to":[0,0,0],"ti":[-9,-50.5,0]},{"t":85,"s":[358.5,446,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,3.444]},"t":13,"s":[50,50,100]},{"t":85,"s":[26,26,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.95,0.658,0.65,1,0.95,0.658,1,1,0.949,0.659,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_5ynFuNzS96","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":13,"op":86,"st":2,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.4],"y":[0]},"t":44,"s":[100]},{"t":79,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[179,149,0],"to":[0,0,0],"ti":[26.5,9.5,0]},{"t":78,"s":[127,109.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,4.861]},"t":14,"s":[25,25,100]},{"t":79,"s":[45,45,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.95,0.658,0.65,1,0.95,0.658,1,1,0.949,0.659,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_0vIEzeG9ST","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":14,"op":80,"st":10,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.72],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":24,"s":[100]},{"i":{"x":[0.72],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.28],"y":[0]},"t":67,"s":[100]},{"t":92,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[410,198.75,0],"to":[0,0,0],"ti":[-14,0,0]},{"t":92,"s":[457,184.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.259,0.259,0.4],"y":[0,0,0]},"t":24,"s":[40,40,100]},{"i":{"x":[0.501,0.501,0.5],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":60,"s":[26,26,100]},{"t":92,"s":[30,30,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.839,0.471,0.65,1,0.839,0.471,1,1,0.839,0.471,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_FPIvVktlvg","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":24,"op":91,"st":20,"bm":0},{"ddd":0,"ind":52,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":16,"s":[90]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":36,"s":[45]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":61,"s":[80]},{"t":82,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[371.5,286,0],"to":[0,0,0],"ti":[-13,-9,0]},{"t":82,"s":[423,310.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,3.704]},"t":16,"s":[20,20,100]},{"t":81,"s":[40,40,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.95,0.658,0.65,1,0.95,0.658,1,1,0.949,0.659,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_iRgF43tCuP","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":16,"op":82,"st":12,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect4.json b/TMessagesProj/src/main/res/raw/star_reaction_effect4.json new file mode 100644 index 000000000..cc6b8713d --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect4.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":90,"w":512,"h":512,"nm":"Reaction 512x512","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"salut1","sr":1,"ks":{"p":{"a":0,"k":[107.116,114.024,0]},"a":{"a":0,"k":[47.333,109.333,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.063,2.3],[48.832,0.352],[-67.878,7.615],[138.212,-10.086],[-137.056,-4.451],[129.387,-9.659]],"o":[[45.363,-2.481],[-71.38,-0.515],[119.193,-13.373],[-135.982,9.923],[143.545,4.662],[-219.408,16.379]],"v":[[53.991,99.63],[38.276,134.655],[47.561,67.658],[47.754,171.063],[51.585,29.122],[58.054,203.981]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.917647118662,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[12]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":4,"s":[100],"h":1},{"t":7,"s":[0],"h":1},{"t":10,"s":[100],"h":1},{"t":13,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":19,"s":[0],"h":1},{"t":22,"s":[100],"h":1},{"t":25,"s":[0],"h":1},{"t":28,"s":[100],"h":1},{"t":31,"s":[0],"h":1},{"t":34,"s":[100],"h":1},{"t":37,"s":[0],"h":1},{"t":40,"s":[100],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.593,-36.693],[-4.029,42.276],[-0.245,-59.628],[4.888,120.803],[0.491,-177.799],[-36.29,102.441]],"o":[[-1.718,39.571],[5.889,-61.796],[0.431,104.705],[-3.895,-96.273],[-0.491,177.799],[64.093,-180.927]],"v":[[54.715,106.138],[30.668,88.792],[78.271,103.97],[-13.762,90.564],[113.96,113.61],[-31.633,90.342]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":2,"s":[100],"h":1},{"t":5,"s":[0],"h":1},{"t":8,"s":[100],"h":1},{"t":11,"s":[0],"h":1},{"t":14,"s":[100],"h":1},{"t":17,"s":[0],"h":1},{"t":20,"s":[100],"h":1},{"t":23,"s":[0],"h":1},{"t":26,"s":[100],"h":1},{"t":29,"s":[0],"h":1},{"t":32,"s":[100],"h":1},{"t":35,"s":[0],"h":1},{"t":38,"s":[100],"h":1},{"t":41,"s":[0],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-25.333,1.82],[29.212,-4.9],[-41.137,-0.662],[83.378,3.528],[-122.678,-0.413],[132.348,6.765]],"o":[[27.321,-1.963],[-42.7,7.162],[72.236,1.163],[-111.49,-4.718],[122.678,0.413],[-132.349,-6.765]],"v":[[52.263,114.241],[40.555,83.417],[50.512,144.324],[43.84,48.958],[55.45,179.48],[47.845,17.64]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":3,"s":[0],"h":1},{"t":6,"s":[100],"h":1},{"t":9,"s":[0],"h":1},{"t":12,"s":[100],"h":1},{"t":15,"s":[0],"h":1},{"t":18,"s":[100],"h":1},{"t":21,"s":[0],"h":1},{"t":24,"s":[100],"h":1},{"t":27,"s":[0],"h":1},{"t":30,"s":[100],"h":1},{"t":33,"s":[0],"h":1},{"t":36,"s":[100],"h":1},{"t":39,"s":[0],"h":1},{"t":42,"s":[100],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.623,-16.922],[4.105,19.497],[0.25,-27.5],[-2.25,55.75],[-0.5,-82],[-4.5,88.5]],"o":[[1.75,18.25],[-6,-28.5],[-0.439,48.289],[3.009,-74.547],[0.5,82],[4.5,-88.5]],"v":[[39.5,110],[64,102],[15.5,109],[91.5,104],[-12.5,112.5],[116.5,106.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":-2,"s":[100],"h":1},{"t":1,"s":[0],"h":1},{"t":4,"s":[100],"h":1},{"t":7,"s":[0],"h":1},{"t":10,"s":[100],"h":1},{"t":13,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":19,"s":[0],"h":1},{"t":22,"s":[100],"h":1},{"t":25,"s":[0],"h":1},{"t":28,"s":[100],"h":1},{"t":31,"s":[0],"h":1},{"t":34,"s":[100],"h":1},{"t":37,"s":[0],"h":1},{"t":40,"s":[100],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[49.5,106.5]},"a":{"a":0,"k":[49.5,106.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[83,-32.75]],"o":[[0,0],[-83,32.75]],"v":[[-148.75,-152],[-249.5,-219.25]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[113.75,30.25]],"o":[[0,0],[-113.75,-30.25]],"v":[[-148.75,-152],[-245.25,-281.25]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-118,-21]],"o":[[0,0],[118,21]],"v":[[-148.75,-152],[17.5,-220.5]],"c":false}},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-9.75,-183]],"o":[[0,0],[9.75,183]],"v":[[-148.75,-152],[-67.25,33.5]],"c":false}},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-72.25,-202.75]],"o":[[0,0],[72.25,202.75]],"v":[[-148.75,-152],[34.75,-48.75]],"c":false}},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[78.5,-147.25]],"o":[[0,0],[-78.5,147.25]],"v":[[-148.75,-152],[-319,-93.25]],"c":false}},"nm":"Path 6","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.077],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[0]},{"t":30,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":19,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[10]},{"t":30,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.949019129136,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[24]},{"t":30,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-43.781,-147.331]],"o":[[0,0],[39.51,132.957]],"v":[[-144.361,-155.071],[-29.543,-57.342]],"c":false}},"nm":"Path 12","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-154.103,-108.094]],"o":[[0,0],[154.103,108.094]],"v":[[-144.361,-155.071],[93.19,-146.235]],"c":false}},"nm":"Path 11","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-41.582,87.11]],"o":[[0,0],[64.633,-135.401]],"v":[[-147.441,-169.915],[-122.418,-361.11]],"c":false}},"nm":"Path 10","hd":false},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[15.453,-198.051]],"o":[[0,0],[-15.453,198.051]],"v":[[-149.059,-155.201],[-253.023,-1.49]],"c":false}},"nm":"Path 9","hd":false},{"ind":4,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[39.907,-333.853]],"o":[[0,0],[-25.542,213.68]],"v":[[-149.066,-167.184],[-285.907,-50.147]],"c":false}},"nm":"Path 8","hd":false},{"ind":5,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-129.719,-169.197]],"o":[[0,0],[129.719,169.197]],"v":[[-147.059,-154.201],[97.422,-193.87]],"c":false}},"nm":"Path 7","hd":false},{"ind":6,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-93.91,-67.25]],"o":[[0,0],[84.748,60.689]],"v":[[-148.327,-152.5],[-30.59,-211.75]],"c":false}},"nm":"Path 1","hd":false},{"ind":7,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-135.621,30.25]],"o":[[0,0],[135.621,-30.25]],"v":[[-148.327,-152.5],[-14.197,-301.75]],"c":false}},"nm":"Path 2","hd":false},{"ind":8,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[140.688,-21]],"o":[[0,0],[-140.688,21]],"v":[[-148.327,-152.5],[-295.87,-242]],"c":false}},"nm":"Path 3","hd":false},{"ind":9,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[11.625,-183]],"o":[[0,0],[-11.625,183]],"v":[[-148.327,-152.5],[-190.767,43]],"c":false}},"nm":"Path 4","hd":false},{"ind":10,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[107.609,-170.75]],"o":[[0,0],[-117.451,186.368]],"v":[[-148.327,-152.5],[-363.609,-126.25]],"c":false}},"nm":"Path 5","hd":false},{"ind":11,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-93.593,-147.25]],"o":[[0,0],[93.593,147.25]],"v":[[-148.327,-152.5],[54.657,-93.75]],"c":false}},"nm":"Path 6","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.077],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2.4,"s":[0]},{"t":24,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":24,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[10]},{"t":24,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.854901432991,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[24]},{"t":24,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[50,98.125]},"a":{"a":0,"k":[-144,-171]},"s":{"a":0,"k":[40,40]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false}],"ip":0,"op":41,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"slap1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":5,"s":[0]}]},"r":{"a":0,"k":-17},"p":{"a":0,"k":[138.288,117.395,0]},"s":{"a":0,"k":[78,269,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.5,"y":0},"t":-5,"s":[{"i":[[0.086,0.008],[0.106,-0.04],[-0.086,-0.043],[-0.099,-0.003],[0.003,0],[0,-0.001],[0.004,-0.001],[0,0]],"o":[[0.066,0.005],[0.11,-0.03],[-0.036,-0.051],[-0.077,-0.005],[-0.003,0],[-0.001,-0.001],[0.003,-0.001],[0,0]],"v":[[0.25,-5.53],[0.29,-5.448],[0.618,-5.424],[0.812,-5.493],[0.536,-5.51],[0.53,-5.509],[0.522,-5.509],[0.52,-5.512]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0,"y":0},"t":0.834,"s":[{"i":[[34.792,3.333],[42.708,-16.042],[-34.583,-17.5],[-40,-1.25],[14.375,1.042],[-1.25,-7.292],[20.833,-5],[0,0]],"o":[[26.875,1.875],[44.375,-12.292],[-14.583,-20.625],[-31.042,-1.875],[-14.375,-1.042],[-2.917,-4.583],[17.5,-7.708],[0,0]],"v":[[-108.5,-12.292],[-92.25,21.042],[40.458,30.833],[119,2.917],[46.708,-2.292],[14.208,7.708],[-32.25,3.958],[-43.292,-8.125]],"c":true}]},{"t":5,"s":[{"i":[[15.548,1.562],[60.86,-22.86],[-63.456,-31.565],[-57.001,-1.781],[-0.307,0.024],[-20.66,-32.013],[35.33,-10.202],[27.637,2.538]],"o":[[40.027,3.281],[46.018,-13.493],[-20.781,-29.391],[-13.57,-0.935],[-45.973,-1.523],[-76.159,-36.513],[64.079,-27.616],[0,0]],"v":[[-158.422,-16.254],[-135.266,31.246],[59.206,48.353],[169.553,5.102],[169.057,5.226],[59.159,48.263],[-134.329,31.616],[-155.452,-16.009]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.5,"y":0},"t":-5,"s":[{"i":[[0.048,0.023],[0,0],[-0.001,0],[0,0.002],[-0.003,0.001],[0,0],[-0.135,-0.006],[-0.029,0.02]],"o":[[-0.01,0.049],[0,0],[0.001,0],[0.001,0.001],[-0.002,0.001],[0,0],[-0.152,-0.02],[-0.056,0.012]],"v":[[0.452,-5.576],[0.254,-5.53],[0.519,-5.511],[0.526,-5.513],[0.533,-5.512],[0.536,-5.51],[0.81,-5.493],[0.693,-5.561]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0,"y":0},"t":0.834,"s":[{"i":[[19.583,9.375],[0,0],[-7.5,0],[-1.042,8.958],[-18.75,3.542],[0,0],[-54.792,-2.292],[-11.667,8.125]],"o":[[-3.958,20],[0,0],[7.5,0],[2.917,3.333],[-12.708,6.042],[0,0],[-61.667,-7.917],[-22.5,4.792]],"v":[[-26.833,-30.833],[-106.833,-12.292],[-45.375,-7.292],[-10.167,-16.458],[30.875,-13.125],[44.208,-2.292],[117.958,2.917],[70.667,-24.583]],"c":true}]},{"t":5,"s":[{"i":[[31.823,13.773],[0,0],[-3.324,0],[-4.216,27.342],[-48.682,11.091],[-0.049,0.422],[-0.193,-0.102],[-16.421,12.286]],"o":[[-4.153,27.469],[-0.087,0.243],[3.324,0],[18.784,9.592],[-39.432,28.091],[-0.049,0.672],[-86.943,-10.852],[-31.786,8.128]],"v":[[-37.789,-41.73],[-156.047,-16.254],[-155.346,-15.767],[-37.534,-41.842],[96.932,-33.841],[168.049,5.078],[168.068,5.102],[96.893,-33.77]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false}],"ip":0,"op":6,"st":-5,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"p":{"a":0,"k":[329.25,83.375,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[53.5,53.5,100]},{"t":30,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0,0],[0,0],[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],[0,0],[0,0]],"v":[[-58.975,-102.584],[-37.504,-34.797],[-188.473,-26.813],[-47.945,6.824],[-113.55,144.63],[-7.378,50.769],[97.604,175],[50.088,17.249],[185.223,-5.048],[64.082,-30.632],[104.695,-103.745],[13.441,-54.817]],"c":true}]},{"t":29,"s":[{"i":[[2.33,0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-2.33,-0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-48.583,-112.612],[-28.004,-30.297],[-118.473,-19.813],[-29.945,-1.176],[-69.55,51.63],[-2.378,33.769],[44.604,99],[55.087,11.249],[110.223,-12.048],[58.582,-29.132],[80.714,-102.128],[6.941,-52.817]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.88627355239,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":20},"lc":1,"lj":1,"ml":49,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":27,"op":30,"st":19,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 13","sr":1,"ks":{"p":{"a":0,"k":[346.5,342,0]},"s":{"a":0,"k":[84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-51.858,56.592],[-9.5,-155.695]],"o":[[141.551,-154.471],[12.271,201.104]],"v":[[24.079,-294.777],[142.429,35.355]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[40.023,65.563],[-17.149,-255.856]],"o":[[-59.828,-98.008],[14.998,223.759]],"v":[[24.709,-294.254],[-114.398,135.618]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":30,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":31,"s":[1,1,1,1],"h":1},{"t":33,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-51.858,56.592],[-14.718,-212.079]],"o":[[141.551,-154.471],[19.011,273.933]],"v":[[24.079,-294.777],[322.241,111.166]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-33.04,69.344],[-84.136,-282.967]],"o":[[34.136,-71.646],[78.377,263.599]],"v":[[24.709,-294.254],[282.35,-167.033]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":32,"s":[1,0.854901432991,0,1],"h":1},{"t":33,"s":[1,1,1,1],"h":1},{"t":35,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-81.315,2.253],[-9.5,-173.5]],"o":[[73.249,-2.029],[12.271,224.102]],"v":[[24.079,-294.777],[98.381,64.524]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-53.011,55.074],[-43.537,-232.859]],"o":[[96.142,-99.884],[50.704,271.193]],"v":[[24.709,-294.254],[369.282,160.439]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":34,"s":[1,0.603920638561,0,1],"h":1},{"t":35,"s":[1,1,1,1],"h":1},{"t":37,"s":[1,0.603920638561,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-53.516,55.066],[-58.845,-395.913]],"o":[[95.366,-98.129],[40.333,271.363]],"v":[[24.079,-294.777],[368.964,49.485]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.478,63.553],[-56.154,-232.543]],"o":[[73.715,-110.289],[57.312,237.34]],"v":[[24.709,-294.254],[237.107,111.71]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":36,"s":[0,0.760785162449,1,1],"h":1},{"t":37,"s":[1,1,1,1],"h":1},{"t":39,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.433,46.635],[-219.553,-184.895]],"o":[[91.504,-69.463],[209.541,176.463]],"v":[[24.079,-294.777],[378.482,-268.676]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.175,53.034],[14.657,-352.039]],"o":[[113.445,-98.347],[-11.396,273.71]],"v":[[24.709,-294.254],[32.515,124.092]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":38,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":39,"s":[1,1,1,1],"h":1},{"t":41,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-49.442,58.691],[-8.905,-156.364]],"o":[[103.455,-122.808],[11.461,201.242]],"v":[[24.079,-294.776],[55.333,140.888]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-52.118,61.957],[14.658,-352.039]],"o":[[80.432,-95.616],[-11.396,273.711]],"v":[[24.709,-294.254],[13.549,66.661]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":40,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":41,"s":[1,1,1,1],"h":1},{"t":43,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[-100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[18.516,74.492],[13.422,-333.479]],"o":[[-26.303,-105.821],[-9.897,245.881]],"v":[[-18.34,-299.536],[109.792,-156.997]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[62.033,45.301],[53.255,-408.833]],"o":[[-64.092,-46.805],[-28.968,222.383]],"v":[[-17.71,-300.058],[-247.898,6.452]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":42,"s":[1,0.854901432991,0,1],"h":1},{"t":43,"s":[1,1,1,1],"h":1},{"t":45,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[45.766,61.623],[71.756,-200.146]],"o":[[-114.398,-154.036],[-83.048,231.644]],"v":[[-18.34,-299.536],[-349.137,-188.545]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[62.033,45.302],[11.898,-405.5]],"o":[[-64.092,-46.805],[-6.577,224.165]],"v":[[-17.71,-300.058],[-175.874,135.023]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":44,"s":[1,0.854901432991,0,1],"h":1},{"t":45,"s":[1,1,1,1],"h":1},{"t":47,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.004,52.656],[12.759,-250.824]],"o":[[-53.196,-45.176],[-13.928,273.814]],"v":[[-18.34,-299.536],[178.313,-89.653]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[54.595,53.504],[-0.911,-288.004]],"o":[[-94.743,-92.851],[0.641,202.472]],"v":[[-17.71,-300.058],[-131.827,130.861]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":46,"s":[0,0.760785162449,1,1],"h":1},{"t":47,"s":[1,1,1,1],"h":1},{"t":49,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[71.302,39.158],[-8.758,-212.08]],"o":[[-55.945,-30.725],[11.313,273.933]],"v":[[-18.34,-299.536],[178.313,-89.653]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[12.337,75.439],[-25.173,-403.476]],"o":[[-28.123,-171.965],[13.965,223.826]],"v":[[-17.71,-300.058],[53.149,83.238]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":48,"s":[0,0.760785162449,1,1],"h":1},{"t":49,"s":[1,1,1,1],"h":1},{"t":51,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[66.329,43.928],[-11.985,-199.245]],"o":[[-104.53,-69.227],[16.45,273.474]],"v":[[-18.34,-299.536],[32.325,142.858]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[80.936,2.087],[-29.792,-379.643]],"o":[[-83.014,-2.141],[17.545,223.574]],"v":[[-17.71,-300.058],[155.387,-114.405]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":50,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":51,"s":[1,1,1,1],"h":1},{"t":53,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-15.996,75.451],[14.578,-355.139]],"o":[[23.697,-111.774],[-11.236,273.716]],"v":[[-18.34,-299.536],[69.351,148.591]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[80.936,2.087],[15.898,-288]],"o":[[-83.014,-2.141],[-12.361,223.92]],"v":[[-17.71,-300.058],[155.387,-114.405]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":52,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":53,"s":[1,1,1,1],"h":1},{"t":55,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false}],"ip":27,"op":66,"st":22,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"con3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.592],"y":[-0.45]},"o":{"x":[0.235],"y":[0.539]},"t":6,"s":[254.562]},{"i":{"x":[0.839],"y":[0.885]},"o":{"x":[0.36],"y":[0.25]},"t":9,"s":[266.189]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[1],"y":[0]},"t":17,"s":[424.562]},{"t":26.08203125,"s":[302]}]},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[227,278.5,0],"to":[-345.667,104.833,0],"ti":[-250.833,-189.333,0]},{"t":26.08203125,"s":[373,112.5,0]}]},"a":{"a":0,"k":[512,512,0]},"s":{"a":1,"k":[{"i":{"x":[0.125,0.125,0.125],"y":[-0.082,0.536,1]},"o":{"x":[0.27,0.27,0.27],"y":[0.59,0.253,0]},"t":6,"s":[0,0,100]},{"i":{"x":[0.559,0.559,0.559],"y":[1,1,1]},"o":{"x":[0.238,0.238,0.238],"y":[0.127,2.076,0]},"t":12,"s":[30.409,70.909,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":17,"s":[89,74.5,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1.105,1.105,1]},"o":{"x":[0.323,0.323,0.323],"y":[0,0,0]},"t":26.082,"s":[73.996,73.996,100]},{"i":{"x":[0.656,0.656,0.656],"y":[1.126,0.886,1]},"o":{"x":[0.32,0.32,0.32],"y":[-0.046,0.042,0]},"t":26.805,"s":[80.457,80.458,100]},{"i":{"x":[0.67,0.67,0.67],"y":[0.741,1.569,1]},"o":{"x":[0.328,0.328,0.328],"y":[0.09,-0.198,0]},"t":28.252,"s":[107.749,50.25,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":31.143,"s":[35.423,83.226,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":36.082,"s":[20.957,20.958,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-28.92],[0,28.92]],"o":[[0,28.92],[0,-28.92]],"v":[[52.365,-1.276],[-52.365,-1.276]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.305882364511,0,0.447058826685,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0.890196084976,0.890196084976,0.890196084976,1]},{"t":39,"s":[0.660035133362,0.764959335327,0.903267920017,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,462.867]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.701,-8.422],[0,0]],"o":[[0,0],[-13.368,-3.712]],"v":[[1.904,9.371],[12.123,-12.997]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[523.179,534.386]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[12.035,-0.992],[0,0]],"o":[[0,0],[7.467,-8.453]],"v":[[-5.326,-0.327],[4.586,20.584]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[502.626,540.301]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[5.637,-0.698],[-5.944,2.009],[0,0]],"o":[[1.758,15.656],[3.476,-8.479],[-10.07,5.228]],"v":[[-9.485,1.423],[10.246,17.141],[21.092,-6.537]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[533.915,483.855]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.137,-12.885],[1.619,12.043]],"o":[[2.115,12.753],[-1.619,-12.043]],"v":[[-8.545,1.67],[8.613,-1.697]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[513.302,506.818]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.362,0.218],[0,0]],"o":[[0,0],[8.806,-7.597]],"v":[[-13.94,-8.969],[-2.569,16.518]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[488.8,499.198]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[52.365,-58.796],[0,57.52],[-52.365,-58.796]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.305882364511,0,0.447058826685,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0.501960813999,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,520.387]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false}],"ip":6,"op":39,"st":-28,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"r":{"a":0,"k":-186},"p":{"a":0,"k":[382.75,368.375,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[42,42,100]},{"t":27,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[0,0],[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],[0,0],[0,0]],"v":[[-64.583,-173.612],[-37.504,-34.797],[-188.473,-26.813],[-47.945,6.824],[-113.55,144.63],[-7.378,50.769],[97.604,175],[50.088,17.249],[185.223,-5.048],[64.082,-30.632],[118.714,-141.128],[13.441,-54.817]],"c":true}]},{"t":26,"s":[{"i":[[2.33,0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-2.33,-0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-48.583,-112.612],[-28.004,-30.297],[-118.473,-19.813],[-29.945,-1.176],[-69.55,51.63],[-2.378,33.769],[44.604,99],[55.087,11.249],[110.223,-12.048],[58.582,-29.132],[80.714,-102.128],[6.941,-52.817]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.88627355239,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":20},"lc":1,"lj":1,"ml":49,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":24,"op":27,"st":16,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 12","sr":1,"ks":{"p":{"a":0,"k":[309,286.5,0]},"s":{"a":0,"k":[-84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.888,65.039],[-9.5,-155.695]],"o":[[3.98,-291.593],[12.271,201.104]],"v":[[137.092,178.497],[166.238,-1.55]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[43.635,50.844],[11.898,-405.5]],"o":[[-45.083,-52.531],[-6.577,224.165]],"v":[[138.016,178.147],[-43.565,169.547]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":27,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":28,"s":[1,1,1,1],"h":1},{"t":30,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[18.762,62.281],[-9.5,-173.5]],"o":[[-51.212,-170],[12.271,224.102]],"v":[[137.092,178.497],[-124.667,167.048]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[43.635,50.844],[11.898,-405.5]],"o":[[-45.083,-52.531],[-6.577,224.165]],"v":[[138.016,178.146],[-213.565,222.547]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":29,"s":[1,0.854901432991,0,1],"h":1},{"t":30,"s":[1,1,1,1],"h":1},{"t":32,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[29.762,81.394],[-9.5,-173.5]],"o":[[-33.419,-91.396],[12.271,224.102]],"v":[[137.092,178.497],[63.857,150.833]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[31.735,56.782],[-28.102,-190.5]],"o":[[-55.073,-98.539],[32.728,221.861]],"v":[[138.016,178.147],[-136.565,125.548]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":31,"s":[1,0.603920638561,0,1],"h":1},{"t":32,"s":[1,1,1,1],"h":1},{"t":34,"s":[1,0.603920638561,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.188,63.153],[-0.5,-126]],"o":[[-28.848,-112.54],[0.891,224.436]],"v":[[137.092,178.497],[-90.667,174.047]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[31.735,56.782],[50.898,-197.872]],"o":[[-55.073,-98.539],[-50.44,196.091]],"v":[[138.016,178.147],[-188.66,-14.113]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":33,"s":[0,0.760785162449,1,1],"h":1},{"t":34,"s":[1,1,1,1],"h":1},{"t":36,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.807,66.937],[-25,-304]],"o":[[-4.18,-99.702],[18.395,223.683]],"v":[[137.092,178.498],[-256.667,177.047]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[84.812,16.008],[60.232,-390.024]],"o":[[-86.99,-16.42],[-34.227,221.633]],"v":[[138.016,178.147],[-318.565,62.048]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":35,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":36,"s":[1,1,1,1],"h":1},{"t":38,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.94,64.943],[-8.905,-156.364]],"o":[[-1.973,-136.236],[11.461,201.243]],"v":[[137.092,178.497],[134.5,-21.612]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[84.812,16.008],[15.898,-288]],"o":[[-86.99,-16.42],[-12.361,223.92]],"v":[[138.016,178.147],[-305.565,165.047]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":37,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":38,"s":[1,1,1,1],"h":1},{"t":40,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[-100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.916,64.562],[-9.5,-155.695]],"o":[[41.179,-335.86],[12.271,201.104]],"v":[[-128.679,181.694],[248.857,15.009]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.131,66.991],[11.898,-405.5]],"o":[[1.168,-69.214],[-6.577,224.165]],"v":[[-127.755,182.044],[-38.374,250.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":39,"s":[1,0.854901432991,0,1],"h":1},{"t":40,"s":[1,1,1,1],"h":1},{"t":42,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.899,64.861],[-9.5,-155.695]],"o":[[34.631,-458.479],[12.271,201.104]],"v":[[-128.679,181.694],[160.762,-23.087]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.131,66.991],[11.898,-405.5]],"o":[[1.168,-69.214],[-6.577,224.165]],"v":[[-127.755,182.045],[-97.898,225.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":41,"s":[1,0.854901432991,0,1],"h":1},{"t":42,"s":[1,1,1,1],"h":1},{"t":44,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-85.133,16.221],[-65.5,-231.476]],"o":[[76.688,-14.612],[61.109,215.958]],"v":[[-128.679,181.694],[359.548,63.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.972,63.53],[50.898,-197.872]],"o":[[24.246,-110.25],[-50.44,196.091]],"v":[[-127.755,182.045],[-205.636,-36.996]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":43,"s":[0,0.760785162449,1,1],"h":1},{"t":44,"s":[1,1,1,1],"h":1},{"t":46,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-85.133,16.221],[-9.5,-173.5]],"o":[[76.688,-14.612],[12.271,224.102]],"v":[[-128.679,181.694],[244.667,172.547]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.972,63.53],[50.898,-220.5]],"o":[[24.246,-110.25],[-50.44,218.515]],"v":[[-127.755,182.045],[-182.565,198.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":45,"s":[0,0.760785162449,1,1],"h":1},{"t":46,"s":[1,1,1,1],"h":1},{"t":48,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-72.83,30.077],[-13,-163]],"o":[[60.268,-24.889],[17.843,223.727]],"v":[[-128.679,181.694],[319.167,146.547]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[52.79,68.284],[15.898,-288]],"o":[[-54.145,-70.037],[-12.361,223.92]],"v":[[-127.755,182.045],[-194.017,89.167]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":47,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":48,"s":[1,1,1,1],"h":1},{"t":50,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.346,51.916],[-25,-304]],"o":[[63.074,-77.328],[18.395,223.683]],"v":[[-128.679,181.694],[338.667,121.047]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[52.79,68.284],[15.898,-288]],"o":[[-54.145,-70.037],[-12.361,223.92]],"v":[[-127.755,182.045],[-183.898,185]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":49,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":50,"s":[1,1,1,1],"h":1},{"t":52,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false}],"ip":24,"op":63,"st":19,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"con2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.424],"y":[0.027]},"t":3,"s":[52]},{"i":{"x":[0.565],"y":[1.325]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[181.408]},{"t":23.08203125,"s":[336.228]}]},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":3,"s":[271,250,0],"to":[202.485,-142.785,0],"ti":[89.277,-55.997,0]},{"t":23.08203125,"s":[400.5,414.5,0]}]},"a":{"a":0,"k":[512,512,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":3,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.307,0.307,0.307],"y":[0,0,0]},"t":12.045,"s":[92,92,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1.105,1.105,1]},"o":{"x":[0.323,0.323,0.323],"y":[0,0,0]},"t":23.082,"s":[70.997,70.997,100]},{"i":{"x":[0.656,0.656,0.656],"y":[1.126,0.887,1]},"o":{"x":[0.32,0.32,0.32],"y":[-0.046,0.042,0]},"t":23.807,"s":[77.459,77.459,100]},{"i":{"x":[0.67,0.67,0.67],"y":[0.74,1.569,1]},"o":{"x":[0.328,0.328,0.328],"y":[0.09,-0.198,0]},"t":25.252,"s":[104.75,47.25,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":28.145,"s":[32.424,80.227,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":33.082,"s":[17.959,17.959,100]},{"t":36,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-28.398],[0,28.398]],"o":[[0,28.398],[0,-28.398]],"v":[[51.42,-2.219],[-51.42,-2.219]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019634724,0,0.105882354081,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0.890196084976,0.890196084976,0.890196084976,1]},{"t":34,"s":[0.660035133362,0.764959335327,0.903267920017,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,462.867]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-17.698,-2.763],[0,0],[5.321,9.711]],"o":[[0,0],[-2.072,5.698],[0,0],[-3.707,-10.587]],"v":[[-18.406,-16.397],[16.346,3.608],[10.158,17.686],[-7.431,8.336]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[508.607,540.326]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[21.046,2.412],[0,0],[0,0],[0,0]],"o":[[20.873,16.916],[0,0],[0,0],[0,0]],"v":[[-24.813,-4.336],[21.168,13.551],[28.331,-2.991],[8.886,-5.177]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[522.419,487.75]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[21.813,23.677],[0,0],[-31.424,-4.662],[0,0]],"o":[[0,0],[0,0],[2.849,-6.993],[-23.05,-2.849]],"v":[[-35.3,-23.8],[-25.36,-0.869],[23.042,27.59],[31.2,9.677]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[507.009,504.323]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[51.42,-59.739],[0,57.52],[-51.42,-59.739]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019634724,0,0.105882354081,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.760784327984,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,520.387]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false}],"ip":3,"op":36,"st":-31,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"r":{"a":0,"k":189},"p":{"a":0,"k":[120.75,295.875,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[48.5,48.5,100]},{"t":24,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[0,0],[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],[0,0],[0,0]],"v":[[-64.583,-173.612],[-37.504,-34.797],[-188.473,-26.813],[-47.945,6.824],[-113.55,144.63],[-7.378,50.769],[97.604,175],[50.088,17.249],[185.223,-5.048],[64.082,-30.632],[118.714,-141.128],[13.441,-54.817]],"c":true}]},{"t":23,"s":[{"i":[[2.33,0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-2.33,-0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-48.583,-112.612],[-28.004,-30.297],[-118.473,-19.813],[-29.945,-1.176],[-69.55,51.63],[-2.378,33.769],[44.604,99],[55.087,11.249],[110.223,-12.048],[58.582,-29.132],[80.714,-102.128],[6.941,-52.817]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.88627355239,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":20},"lc":1,"lj":1,"ml":49,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":21,"op":24,"st":13,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"p":{"a":0,"k":[124.5,423,0]},"s":{"a":0,"k":[84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-9.5,-155.695]],"o":[[12.5,-252.612],[12.271,201.104]],"v":[[12.833,-128.936],[98.976,-56.311]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[11.898,-405.5]],"o":[[-23.488,-92.879],[-6.577,224.165]],"v":[[13.822,-128.936],[-20.946,73.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":24,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":25,"s":[1,1,1,1],"h":1},{"t":27,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-14.438,-173.5]],"o":[[12.5,-252.612],[18.649,224.102]],"v":[[12.833,-128.936],[-208.113,63.476]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[18.083,-405.5]],"o":[[-23.488,-92.879],[-9.996,224.165]],"v":[[13.822,-128.936],[-246.174,28.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":26,"s":[1,0.854901432991,0,1],"h":1},{"t":27,"s":[1,1,1,1],"h":1},{"t":29,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.448,98.196],[-9.5,-173.5]],"o":[[0.262,-57.374],[12.271,224.102]],"v":[[12.833,-128.936],[46,77.024]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.786],[-42.709,-190.5]],"o":[[-16.488,-159.285],[49.74,221.861]],"v":[[13.821,-128.936],[-226.196,21.976]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":28,"s":[1,0.603920638561,0,1],"h":1},{"t":29,"s":[1,1,1,1],"h":1},{"t":31,"s":[1,0.603920638561,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.295,92.405],[-0.5,-126]],"o":[[13,-164.669],[0.891,224.436]],"v":[[12.833,-128.936],[-68.048,77.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.786],[77.356,-197.872]],"o":[[-16.488,-159.284],[-76.659,196.091]],"v":[[13.821,-128.936],[-387.444,-116.494]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":30,"s":[0,0.760785162449,1,1],"h":1},{"t":31,"s":[1,1,1,1],"h":1},{"t":33,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-21.148,90.672],[-37.995,-304]],"o":[[31.5,-135.055],[27.957,223.683]],"v":[[12.833,-128.936],[-313.49,80.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[73.599,64.306],[24.162,-288]],"o":[[-75.488,-65.957],[-18.786,223.92]],"v":[[13.821,-128.936],[-407.564,-34.381]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":32,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":33,"s":[1,1,1,1],"h":1},{"t":35,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.717,92.634],[-8.905,-156.364]],"o":[[1.5,-193.834],[11.461,201.243]],"v":[[12.833,-128.936],[23.19,-128.16]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[73.599,64.306],[24.162,-288]],"o":[[-75.488,-65.957],[-18.786,223.92]],"v":[[13.822,-128.936],[-387.806,68.619]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":34,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":35,"s":[1,1,1,1],"h":1},{"t":37,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[-100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-14.438,-155.695]],"o":[[12.5,-252.612],[18.649,201.104]],"v":[[-3.833,-128.936],[345.044,-125.468]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[11.898,-405.5]],"o":[[-23.488,-92.878],[-6.577,224.165]],"v":[[-2.845,-128.936],[121.745,42.762]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":36,"s":[1,0.854901432991,0,1],"h":1},{"t":37,"s":[1,1,1,1],"h":1},{"t":39,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-14.438,-155.695]],"o":[[12.5,-252.612],[18.649,201.104]],"v":[[-3.833,-128.936],[345.044,-125.468]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[11.898,-405.5]],"o":[[-23.488,-92.879],[-6.577,224.165]],"v":[[-2.845,-128.936],[-3.851,123.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":38,"s":[1,0.854901432991,0,1],"h":1},{"t":39,"s":[1,1,1,1],"h":1},{"t":41,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-73.823,64.753],[-14.438,-173.5]],"o":[[66.5,-58.329],[18.649,224.102]],"v":[[-3.833,-128.936],[295.252,76.119]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.785],[50.898,-197.872]],"o":[[-16.488,-159.285],[-50.44,196.091]],"v":[[-2.845,-128.936],[-129.446,-153.663]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":40,"s":[0,0.760785162449,1,1],"h":1},{"t":41,"s":[1,1,1,1],"h":1},{"t":43,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-73.823,64.753],[-14.438,-173.5]],"o":[[66.5,-58.329],[18.649,224.102]],"v":[[-3.833,-128.936],[295.252,76.119]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.786],[50.898,-220.5]],"o":[[-16.488,-159.285],[-50.44,218.515]],"v":[[-2.845,-128.936],[-46.851,23.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":42,"s":[0,0.760785162449,1,1],"h":1},{"t":43,"s":[1,1,1,1],"h":1},{"t":45,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-57.401,76.995],[-19.758,-163]],"o":[[47.5,-63.714],[27.118,223.727]],"v":[[-3.833,-128.936],[408.478,50.119]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[7.607,92.626],[15.898,-288]],"o":[[-8.205,-99.908],[-12.361,223.92]],"v":[[-2.845,-128.936],[-82.112,76.667]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":44,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":45,"s":[1,1,1,1],"h":1},{"t":47,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-21.148,90.672],[-37.995,-304]],"o":[[31.5,-135.055],[27.957,223.682]],"v":[[-3.833,-128.936],[438.115,24.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[28.539,93.475],[15.898,-288]],"o":[[-27.512,-90.112],[-12.361,223.92]],"v":[[-2.845,-128.936],[-130.922,44.524]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":46,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":47,"s":[1,1,1,1],"h":1},{"t":49,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false}],"ip":21,"op":60,"st":16,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"con1","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.401],"y":[0.037]},"o":{"x":[0.516],"y":[0.117]},"t":0,"s":[-544]},{"i":{"x":[0.446],"y":[1]},"o":{"x":[0.162],"y":[0.25]},"t":6,"s":[-485.939]},{"t":20.08203125,"s":[-344]}]},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[271.5,282,0],"to":[74.574,198.911,0],"ti":[-62.939,168.367,0]},{"t":20.08203125,"s":[104.5,350.5,0]}]},"a":{"a":0,"k":[512,512,0]},"s":{"a":1,"k":[{"i":{"x":[0.182,0.182,0.182],"y":[0.69,0.884,-24.46]},"o":{"x":[0.309,0.309,0.309],"y":[0.143,0.054,11.743]},"t":0,"s":[0,0,100]},{"i":{"x":[0.523,0.523,0.523],"y":[1,1,1]},"o":{"x":[0.211,0.211,0.211],"y":[0.366,-0.055,6.56]},"t":5.047,"s":[41.033,109.533,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":10.096,"s":[50,50,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1.134,1.134,1.005]},"o":{"x":[0.323,0.323,0.323],"y":[0,0,0]},"t":20.082,"s":[74.497,74.497,100]},{"i":{"x":[0.656,0.656,0.656],"y":[1.126,0.887,1.018]},"o":{"x":[0.32,0.32,0.32],"y":[-0.046,0.042,-0.008]},"t":21.006,"s":[80.959,80.959,100]},{"i":{"x":[0.67,0.67,0.67],"y":[0.746,1.556,37.686]},"o":{"x":[0.328,0.328,0.328],"y":[0.088,-0.194,-0.034]},"t":22.451,"s":[108.25,50.75,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":25.277,"s":[35.924,83.727,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":30.082,"s":[21.459,21.459,100]},{"t":33,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-30.244],[0,30.244]],"o":[[0,30.244],[0,-30.244]],"v":[[54.762,0],[-54.762,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.06274510175,0,0.658823549747,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[0.890196084976,0.890196084976,0.890196084976,1]},{"t":31,"s":[0.660035133362,0.764959335327,0.903267920017,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,462.867]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[54.762,-57.52],[0,57.52],[-54.762,-57.52]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.06274510175,0,0.658823549747,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0,1,0.5,0.5,0.5,1,1,0,1,1]}},"s":{"a":0,"k":[-7,-33.387]},"e":{"a":0,"k":[-47.748,60.023]},"t":1,"nm":"Gradient_LkmdtAqsKe","hd":false},{"ty":"tr","p":{"a":0,"k":[512,520.387]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":33,"st":-34,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":19},"p":{"a":0,"k":[365.391,387.205,0]},"a":{"a":0,"k":[112,110.5,0]},"s":{"a":0,"k":[109.661,100,100]}},"ao":0,"w":224,"h":221,"ip":49,"op":90,"st":49,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":3},"p":{"a":0,"k":[138.102,364.843,0]},"a":{"a":0,"k":[112,110.5,0]},"s":{"a":0,"k":[128.54,128.54,100]}},"ao":0,"w":224,"h":221,"ip":44,"op":85,"st":44,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":19},"p":{"a":0,"k":[366.5,146,0]},"a":{"a":0,"k":[112,110.5,0]}},"ao":0,"w":224,"h":221,"ip":38,"op":79,"st":38,"bm":0},{"ddd":0,"ind":13,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":-14},"p":{"a":0,"k":[150.507,141.952,0]},"a":{"a":0,"k":[112,110.5,0]},"s":{"a":0,"k":[-116.935,112.424,100]}},"ao":0,"w":224,"h":221,"ip":33,"op":74,"st":33,"bm":0},{"ddd":0,"ind":14,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[447,277,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[39.673,40.638,100]}},"ao":0,"w":280,"h":235,"ip":84,"op":90,"st":84,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"1","sr":1,"ks":{"r":{"a":0,"k":-7.442},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[148.7,423.572,0],"to":[36.212,-73.721,0],"ti":[-43.496,152.841,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":65,"s":[392.931,282.143,0],"to":[9.343,-32.83,0],"ti":[-4.936,-35.273,0]},{"t":86,"s":[444.2,283.572,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.557,0.557,0.557],"y":[1,1,1]},"o":{"x":[0.273,0.273,0.273],"y":[0.045,0.045,3.688]},"t":38,"s":[0,0,100]},{"i":{"x":[0.557,0.557,0.557],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":42,"s":[58.5,58.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":68,"s":[72,72,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-8.563,31.024],[18.5,17.75]],"o":[[-23.179,9.555],[-0.503,45.167]],"v":[[517.26,513.492],[444.349,503.098]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.779,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.586,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.535,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[8.189,59.335],[21.124,3.466]],"o":[[-22.5,26.625],[28.402,20.507]],"v":[[579.779,491.202],[498.01,524.629]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.463,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":75.5859375,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.407843167174,0.003921568627,0.533333333333,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[7.367,4.157],[-15.962,20.935],[-0.419,5.206],[2.064,4.224],[-12.88,9.655],[-0.675,9.778],[-6.774,0]],"o":[[-5.895,-3.504],[1.934,-4.055],[0.42,-5.22],[-23.232,-14.914],[4.164,-2.93],[1.796,-12.531],[6.774,0]],"v":[[485.008,612.805],[491.252,548.222],[495.162,533.782],[493.502,518.668],[490.569,469.102],[497.397,449.375],[510.108,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.779,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.586,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.535,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-9.426,0.527],[3.336,30.533],[-0.525,4.423],[-1.674,5.011],[16.277,5.225],[2.182,11.243],[7.649,0]],"o":[[9.613,-0.445],[-0.002,-3.793],[0.527,-4.435],[11.243,-31.005],[-4.144,-1.327],[-1.638,-12.579],[-7.649,0]],"v":[[534.712,612.192],[538.458,559.735],[539.089,547.396],[542.236,533.212],[537.778,467.105],[529.364,456.73],[510.31,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.463,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":75.5859375,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.572549019608,0.03137254902,0.780392216701,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27.145,"s":[66.014]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.414,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":59,"s":[66.014]},{"t":75.5859375,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"t":75.5859375,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27.145,"s":[8.157]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.414,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":59,"s":[8.157]},{"t":75.5859375,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.053,-4.994],[43.07,-32.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.054,-4.994],[43.07,-32.939]],"c":false}]},{"t":75.5859375,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"t":75.5859375,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.962,0.665,1,0.5,0.885,0.333,1,1,0.808,0,1]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_NSgQ8Mf14K","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.636],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.635],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"t":75.5859375,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.404756792854,0,0.532025984222,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.369,0.983,0.5,0.766,0.184,0.872,1,0.532,0,0.762]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_en82WAW6Tf","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.403921598547,0,0.533333333333,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.572549019608,0.03137254902,0.780392216701,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.291,315.229]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.521]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":30.879,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":47.465,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":64.051,"s":[110,90]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":80.635,"s":[90,110]},{"t":97.220703125,"s":[110,90]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.93,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.977,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.807,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.855,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.686,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":94.732421875,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.756862745098,0.872905536726,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55.758,"s":[53]},{"t":93.07421875,"s":[27]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":38,"op":84,"st":28,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[378,412.5,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[59.362,59.362,100]}},"ao":0,"w":280,"h":235,"ip":81,"op":87,"st":81,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"9","sr":1,"ks":{"r":{"a":0,"k":6.301},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[153.864,435.179,0],"to":[48.958,-77.021,0],"ti":[-44.065,49.842,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[424.867,453.681,0],"to":[18.732,-21.188,0],"ti":[26.521,-28.982,0]},{"t":83,"s":[373.864,425.679,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.535,0.535,0.535],"y":[1,1,1]},"o":{"x":[0.296,0.296,0.296],"y":[0.058,0.058,4.43]},"t":38,"s":[0,0,100]},{"i":{"x":[0.535,0.535,0.535],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":42,"s":[41.5,41.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":65,"s":[55,55,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49.635,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53.783,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[3.5,25],[12.75,-8.959]],"o":[[5.25,24.25],[13.5,-9.959]],"v":[[615.75,489.75],[587.25,539.459]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.416,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"t":81.9765625,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-0.906,2.369],[-4.263,18.214],[-0.472,4.82],[-2.736,3.93],[1.599,7.792],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[-0.89,-4.901],[0.473,-4.833],[-6.071,-11.289],[0.098,-2.251],[0.104,-12.555],[-0.332,0]],"v":[[509.392,612.464],[515.131,549.155],[514.235,533.945],[519.295,519.289],[511.551,465.079],[510.83,449.375],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49.635,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53.783,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-25.875,0],[6.375,37.5],[-0.625,3.685],[-6.266,5.508],[45.5,5.875],[4.875,12.625],[21.25,0]],"o":[[25.875,0],[-0.655,-3.855],[0.627,-3.695],[39.25,-34.5],[-11.562,-1.493],[-4.875,-12.625],[-21.25,0]],"v":[[556.125,614.875],[585.875,559.125],[584.75,548.308],[594,535],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.416,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"t":81.9765625,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.176470588235,0.61568627451,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":38,"s":[100]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":54.611,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[100]},{"t":87.783203125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[16.983,4.139]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"t":87.783203125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[16.983,4.139]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":38,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":54.611,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[0]},{"t":87.783203125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"t":87.783203125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[3.645,0.118],[0.057,28.368],[-0.01,9.977],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-10.811,-43.431],[-0.844,-4.117],[-0.442,-13.119],[-0.008,-9.243],[0.047,-13.382],[14.463,-0.472]],"o":[[-14.388,-0.465],[-0.027,-13.751],[0.01,-9.977],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[1.598,6.419],[4.679,22.836],[0.1,2.962],[0.008,9.244],[-0.084,24.242],[-3.632,0.118]],"v":[[-5.462,93.821],[-35.623,61.372],[-35.674,32.473],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[25.807,-53.004],[28.942,-38.771],[37.501,12.505],[37.647,29.642],[37.528,62.643],[7.109,93.821]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[47.834,-31.523],[1.226,-2.786],[-0.871,-3.584],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.941,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.661,1.754],[-1.419,3.224],[16.788,69.096],[-6.017,-5.133]],"v":[[-9.466,72.889],[-59.013,61.311],[-18.449,15.821],[-70.059,7.574],[-45.796,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[67.145,20.677],[61.251,27.663],[60.33,38.15],[11.361,72.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.058,-32.304],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.005,2.964],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[31.987,-38.989],[37.501,12.505],[35.671,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"t":87.783203125,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[47.834,-31.523],[1.226,-2.786],[-0.871,-3.584],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.941,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.661,1.754],[-1.419,3.224],[16.788,69.096],[-6.017,-5.133]],"v":[[-9.466,72.889],[-59.013,61.311],[-18.449,15.821],[-70.059,7.574],[-45.796,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[67.145,20.677],[61.251,27.663],[60.33,38.15],[11.361,72.902]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.506,0.952,1,0,0.506,0.976,0.939,0,0.506,1,0.878,0.5,0.253,0.857,0.939,1,0,0.714,1]}},"s":{"a":0,"k":[7.996,-79.56]},"e":{"a":0,"k":[10.826,49.547]},"t":1,"nm":"Gradient_kDyl5j3fhn","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-5.781,0.601],[-0.323,40.051],[0.062,7.102],[0.108,4.266],[6.966,16.874],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.241,-18.578],[0.044,-10.635],[-0.026,-23.02],[-29.073,-3.023]],"o":[[29.056,-3.019],[0.041,-5.065],[-0.057,-6.537],[-0.659,-26.835],[-2.26,-5.473],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.188,14.446],[-0.044,10.635],[0.035,30.865],[5.779,0.601]],"v":[[8.327,101.399],[52.34,51.895],[52.381,32.224],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-51.489,6.233],[-51.805,30.773],[-51.723,62.881],[-10.969,101.399]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-5.781,-4.17],[16.366,69.651],[-1.105,2.925],[-2.382,1.889],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.558,-27.083],[-29.073,20.987]],"o":[[29.056,20.96],[-0.745,-3.172],[1.031,-2.729],[46.959,-37.248],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-6.045,46.013],[5.779,-4.172]],"v":[[8.63,90.384],[72.456,41.515],[73.073,32.185],[78.256,25.107],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.168,-53.378],[-94.558,6.232],[-35.111,14.18],[-75.414,62.88],[-10.666,90.384]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"t":87.783203125,"s":[{"i":[[-5.781,-4.17],[16.366,69.651],[-1.105,2.925],[-2.382,1.889],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.558,-27.083],[-29.073,20.987]],"o":[[29.056,20.96],[-0.745,-3.172],[1.031,-2.729],[46.959,-37.248],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-6.045,46.013],[5.779,-4.172]],"v":[[8.63,90.384],[72.456,41.515],[73.073,32.185],[78.256,25.107],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.168,-53.378],[-94.558,6.232],[-35.111,14.18],[-75.414,62.88],[-10.666,90.384]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062404901841,0.443099048091,0.809150247013,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.369,0.859,1,0.5,0.184,0.629,1,1,0,0.4,1]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_0oidiW3rhK","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.545098039216,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":38,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":54.611,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":71,"s":[110,90]},{"t":87.783203125,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.441,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.488,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.318,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":95.244140625,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.785621074602,0.887938256357,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":57,"s":[34]},{"t":75,"s":[71]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":38,"op":81,"st":25,"bm":0},{"ddd":0,"ind":18,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[392.5,110,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[43.214,50,100]}},"ao":0,"w":280,"h":235,"ip":78,"op":84,"st":78,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"10","sr":1,"ks":{"r":{"a":0,"k":3.876},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[181.18,437.565,0],"to":[46.274,-87.384,0],"ti":[27.533,224.417,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":59,"s":[442.504,174.027,0],"to":[-3.099,-25.255,0],"ti":[26.462,-6.921,0]},{"t":80,"s":[387.18,118.565,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0.077,0.077,5.614]},"t":38,"s":[0,0,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":42,"s":[34.5,34.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":62,"s":[48,48,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.879,"s":[{"i":[[-7.125,-4.375],[1.5,21.375]],"o":[[-6.75,-3.375],[3.125,25.5]],"v":[[439.5,530.75],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[0.871,22.343],[38.508,4.562]],"o":[[2.496,22.468],[39.008,4.437]],"v":[[613.75,489.75],[567.11,525.786]],"c":true}]},{"t":87,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.305882352941,0.619607843137,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.879,"s":[{"i":[[25.066,0],[-12.145,32.875],[-0.318,5.956],[8.073,3.528],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[1.354,-3.665],[0.319,-5.972],[-39.898,-17.438],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[440.02,561],[444.299,545.503],[434.773,529.5],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.719,9.609],[-7.482,-1.433],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.255,-3.413],[66.602,12.758],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[573.481,561.374],[544.821,525.865],[564.522,524.841],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"t":87,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.207843152214,0.61568627451,0.807843197093,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69.879,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.709,"s":[0]},{"t":87,"s":[100]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"t":87,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.709,"s":[24]},{"t":87,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-39.972,30.672],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"t":87,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[5.601,-4.559],[-1.765,26.779],[1.219,14.319],[13.51,15.089],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[82.365,8.225],[1.119,-2.544],[-2.543,-2.208],[27.777,22.927]],"o":[[-29.1,23.689],[0.89,-13.501],[-0.716,-8.412],[-23.607,-26.366],[7.027,0.425],[19.009,-48.344],[2.628,6.422],[45.96,-2.921],[-8.631,-0.862],[-1.295,2.944],[67.833,58.912],[-5.57,-4.597]],"v":[[-9.445,73.742],[-52.938,61.294],[-49.082,32.45],[-72.685,9.074],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[37.88,8.061],[20.369,12.565],[25.03,27.517],[9.572,73.754]],"c":true}]},{"t":87,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.566,0.971,1,0,0.783,0.986,1,0,1,1,1,0.5,0.5,0.935,1,1,0,0.871,1]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_uZDXlwKduE","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-5.274,-3.814],[59.064,50.034],[-1.009,2.671],[-2.721,-0.548],[60.997,-2.167],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-16.767,-21.286],[-4.43,-8.711],[2.54,-17.361],[-26.548,19.164]],"o":[[44.827,32.417],[-2.27,-1.923],[0.942,-2.492],[80.15,16.13],[-6.442,0.229],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[12.006,15.242],[5.093,10.014],[-6.135,41.93],[5.277,-3.809]],"v":[[6.905,89.332],[40.93,27.954],[32.867,12.932],[46.226,11.596],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-92.057,4.481],[-65.118,33.06],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"t":87,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.452902520872,0.620914952895,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.393,0.897,0.924,0.5,0.196,0.774,0.881,1,0,0.651,0.838]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_DjLtsFwTXS","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.450980422076,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.666666666667,0.84313731474,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,315.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":29.244,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":45.83,"s":[110,90]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":62.416,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":79,"s":[110,90]},{"t":95.5859375,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.758,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50.807,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51.635,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75.686,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76.514,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":100.5625,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.815322157916,0.900968244964,0.994771082261,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38,"s":[1]},{"i":{"x":[0.663],"y":[0.785]},"o":{"x":[0.157],"y":[0]},"t":54.953,"s":[61]},{"i":{"x":[0.797],"y":[1]},"o":{"x":[0.436],"y":[-0.619]},"t":67.391,"s":[20.088]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":70.709,"s":[25]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":83.977,"s":[61]},{"t":111.34375,"s":[61]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":38,"op":78,"st":21,"bm":0},{"ddd":0,"ind":20,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"r":{"a":0,"k":-91},"p":{"a":0,"k":[169.5,122,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[45.745,45.745,100]}},"ao":0,"w":280,"h":235,"ip":79,"op":85,"st":79,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"11","sr":1,"ks":{"r":{"a":0,"k":-6.506},"p":{"a":1,"k":[{"i":{"x":0.538,"y":0.242},"o":{"x":0.167,"y":0.167},"t":33,"s":[424.87,229.576,0],"to":[-113.38,-117.097,0],"ti":[42.038,65.476,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.21,"y":1},"t":60,"s":[105.538,160.476,0],"to":[-14.895,-23.199,0],"ti":[-35.202,-21.185,0]},{"t":81,"s":[173.87,140.076,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.517,0.517,0.517],"y":[1,1,1]},"o":{"x":[0.315,0.315,0.315],"y":[0.029,0.029,2.082]},"t":33,"s":[0,0,100]},{"i":{"x":[0.517,0.517,0.517],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":35,"s":[35.5,35.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":63,"s":[49,49,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.311,496.464],[465.312,498.214]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.879,"s":[{"i":[[-7.125,-4.375],[1.5,21.375]],"o":[[-6.75,-3.375],[3.125,25.5]],"v":[[439.5,530.75],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[0.871,22.343],[38.508,4.562]],"o":[[2.496,22.468],[39.008,4.437]],"v":[[613.75,489.75],[567.11,525.786]],"c":true}]},{"t":82,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.807,496.759],[465.807,498.509]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.454901990704,0.156862745098,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.879,"s":[{"i":[[25.066,0],[-12.145,32.875],[-0.318,5.956],[8.073,3.528],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[1.354,-3.665],[0.319,-5.972],[-39.898,-17.438],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[440.02,561],[444.299,545.503],[434.773,529.5],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.719,9.609],[-7.482,-1.433],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.255,-3.413],[66.602,12.758],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[573.481,561.374],[544.821,525.865],[564.522,524.841],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"t":82,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.572549045086,0.031372550875,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64.879,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.709,"s":[0]},{"t":82,"s":[100]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"t":82,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.709,"s":[24]},{"t":82,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-39.972,30.672],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"t":82,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[5.601,-4.559],[-1.765,26.779],[1.219,14.319],[13.51,15.089],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[82.365,8.225],[1.119,-2.544],[-2.543,-2.208],[27.777,22.927]],"o":[[-29.1,23.689],[0.89,-13.501],[-0.716,-8.412],[-23.607,-26.366],[7.027,0.425],[19.009,-48.344],[2.628,6.422],[45.96,-2.921],[-8.631,-0.862],[-1.295,2.944],[67.833,58.912],[-5.57,-4.597]],"v":[[-9.445,73.742],[-52.938,61.294],[-49.082,32.45],[-72.685,9.074],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[37.88,8.061],[20.369,12.565],[25.03,27.517],[9.572,73.754]],"c":true}]},{"t":82,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.447,0.5,1,0.865,0.224,1,1,0.729,0]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_nOQRf2qsS7","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-5.274,-3.814],[59.064,50.034],[-1.009,2.671],[-2.721,-0.548],[60.997,-2.167],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-16.767,-21.286],[-4.43,-8.711],[2.54,-17.361],[-26.548,19.164]],"o":[[44.827,32.417],[-2.27,-1.923],[0.942,-2.492],[80.15,16.13],[-6.442,0.229],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[12.006,15.242],[5.093,10.014],[-6.135,41.93],[5.277,-3.809]],"v":[[6.905,89.332],[40.93,27.954],[32.867,12.932],[46.226,11.596],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-92.057,4.481],[-65.118,33.06],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"t":82,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.898039221764,0.454901963472,0.156862750649,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.71,0.184,1,1,0.545,0]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_nNc6FnBRIw","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.898039221764,0.454901963472,0.156862750649,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.54509806633,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.521]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":26.539,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":43.123,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":59.709,"s":[110,90]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":76.295,"s":[90,110]},{"t":92.87890625,"s":[110,90]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.586,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.635,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.465,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.514,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.344,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":90.390625,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.811764705882,0.901604267195,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0]},{"t":70.48828125,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":33,"op":79,"st":24,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"12","sr":1,"ks":{"r":{"a":0,"k":1.197},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[421.246,211.879,0],"to":[55.487,-79.905,0],"ti":[42.26,6.62,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[309.662,108.023,0],"to":[-21.06,-3.299,0],"ti":[10.302,-7.566,0]},{"t":78,"s":[265.246,115.879,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.479,0.479,0.479],"y":[1,1,1]},"o":{"x":[0.356,0.356,0.356],"y":[0.025,0.025,2.565]},"t":33,"s":[0,0,100]},{"i":{"x":[0.479,0.479,0.479],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":35,"s":[37.5,37.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":60,"s":[35.5,35.5,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-8.563,31.024],[18.5,17.75]],"o":[[-23.179,9.555],[-0.503,45.167]],"v":[[517.26,513.492],[444.349,503.098]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.807,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50.611,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.562,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[8.189,59.335],[21.124,3.466]],"o":[[-22.5,26.625],[28.402,20.507]],"v":[[579.779,491.202],[498.01,524.629]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75.488,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":84.611328125,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[7.367,4.157],[-15.962,20.935],[-0.419,5.206],[2.064,4.224],[-12.88,9.655],[-0.675,9.778],[-6.774,0]],"o":[[-5.895,-3.504],[1.934,-4.055],[0.42,-5.22],[-23.232,-14.914],[4.164,-2.93],[1.796,-12.531],[6.774,0]],"v":[[485.008,612.805],[491.252,548.222],[495.162,533.782],[493.502,518.668],[490.569,469.102],[497.397,449.375],[510.108,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.807,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50.611,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.562,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-9.426,0.527],[3.336,30.533],[-0.525,4.423],[-1.674,5.011],[16.277,5.225],[2.182,11.243],[7.649,0]],"o":[[9.613,-0.445],[-0.002,-3.793],[0.527,-4.435],[11.243,-31.005],[-4.144,-1.327],[-1.638,-12.579],[-7.649,0]],"v":[[534.712,612.192],[538.458,559.735],[539.089,547.396],[542.236,533.212],[537.778,467.105],[529.364,456.73],[510.31,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75.488,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":84.611328125,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.176470588235,0.61568627451,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":36,"s":[66.014]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":51.441,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":68.025,"s":[66.014]},{"t":84.611328125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"t":84.611328125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":36,"s":[8.157]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":51.441,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":68.025,"s":[8.157]},{"t":84.611328125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.053,-4.994],[43.07,-32.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.054,-4.994],[43.07,-32.939]],"c":false}]},{"t":84.611328125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"t":84.611328125,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.393,0.779,1,0.5,0.197,0.621,1,1,0,0.463,1]}},"s":{"a":0,"k":[7.996,-79.56]},"e":{"a":0,"k":[10.826,49.547]},"t":1,"nm":"Gradient_tH9QTnY4vK","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.636],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.635],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"t":84.611328125,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.037965531443,0.691503188189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.369,0.591,1,0.5,0.184,0.331,1,1,0,0.071,1]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_8QqlYsOR0v","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.545098039216,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":36,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":52.27,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":68.855,"s":[110,90]},{"t":85.44140625,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.1,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43.146,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43.977,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68.025,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"t":68.85546875,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.908497051164,0.952168962067,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[0]},{"t":73,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":33,"op":76,"st":20,"bm":0},{"ddd":0,"ind":23,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"r":{"a":0,"k":12},"p":{"a":0,"k":[84.5,242.5,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[70.198,76.243,100]}},"ao":0,"w":280,"h":235,"ip":73,"op":79,"st":73,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"6","sr":1,"ks":{"r":{"a":0,"k":-8.051},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[410.2,232.146,0],"to":[-25.48,-134.839,0],"ti":[82.52,-11.16,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[216.874,150.062,0],"to":[-26.637,3.602,0],"ti":[33.989,-54.302,0]},{"t":75,"s":[93.2,229.646,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.408,0.408,0.408],"y":[1,1,1]},"o":{"x":[0.425,0.425,0.425],"y":[0.049,0.049,3.593]},"t":33,"s":[0,0,100]},{"i":{"x":[0.408,0.408,0.408],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":35,"s":[51,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":57,"s":[70,70,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.807,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.953,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":48.586,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.146,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":75.953125,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-0.906,2.369],[-4.263,18.214],[-0.472,4.82],[-2.736,3.93],[1.599,7.792],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[-0.89,-4.901],[0.473,-4.833],[-6.071,-11.289],[0.098,-2.251],[0.104,-12.555],[-0.332,0]],"v":[[509.392,612.464],[515.131,549.155],[514.235,533.945],[519.295,519.289],[511.551,465.079],[510.83,449.375],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.807,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.953,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":48.586,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.146,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":75.953125,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.070588235294,0.509803921569,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27,"s":[100]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.783,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":60,"s":[100]},{"t":75.953125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"t":75.953125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.783,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":60,"s":[0]},{"t":75.953125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"t":75.953125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[3.645,0.118],[0.057,28.368],[-0.01,9.977],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-10.811,-43.431],[-0.844,-4.117],[-0.442,-13.119],[-0.008,-9.243],[0.047,-13.382],[14.463,-0.472]],"o":[[-14.388,-0.465],[-0.027,-13.751],[0.01,-9.977],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[1.598,6.419],[4.679,22.836],[0.1,2.962],[0.008,9.244],[-0.084,24.242],[-3.632,0.118]],"v":[[-5.462,93.821],[-35.623,61.372],[-35.674,32.473],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[25.807,-53.004],[28.942,-38.771],[37.501,12.505],[37.647,29.642],[37.528,62.643],[7.109,93.821]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"t":75.953125,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.948,0.642,0.5,1,0.656,0.623,1,1,0.365,0.604]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_HdiE9G3rng","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-5.781,0.601],[-0.323,40.051],[0.062,7.102],[0.108,4.266],[6.966,16.874],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.241,-18.578],[0.044,-10.635],[-0.026,-23.02],[-29.073,-3.023]],"o":[[29.056,-3.019],[0.041,-5.065],[-0.057,-6.537],[-0.659,-26.835],[-2.26,-5.473],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.188,14.446],[-0.044,10.635],[0.035,30.865],[5.779,0.601]],"v":[[8.327,101.399],[52.34,51.895],[52.381,32.224],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-51.489,6.233],[-51.805,30.773],[-51.723,62.881],[-10.969,101.399]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"t":75.953125,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.70457500383,0,0.287356716979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.369,0.933,0.5,1,0.184,0.67,1,1,0,0.408]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_88WLE7C1yW","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.01568627451,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":17.904,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":34.488,"s":[110,90]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":51.074,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":67.66,"s":[110,90]},{"t":84.244140625,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.416,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.465,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.295,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.344,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.172,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":89.220703125,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.688701016295,0.824797806085,0.973856129366,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":59.367,"s":[100]},{"t":102.48828125,"s":[59]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":33,"op":73,"st":10,"bm":0},{"ddd":0,"ind":25,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"r":{"a":0,"k":-86},"p":{"a":0,"k":[112.5,425,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[52.173,52.808,100]}},"ao":0,"w":280,"h":235,"ip":79,"op":85,"st":79,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"8","sr":1,"ks":{"r":{"a":0,"k":-3.893},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[107.577,186.9,0],"to":[109.227,-68.805,0],"ti":[28.1,-89.362,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":60,"s":[132.019,345.954,0],"to":[-6.753,21.477,0],"ti":[-8.487,-37.521,0]},{"t":81,"s":[112.577,443.4,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.545,0.545,0.545],"y":[1,1,1]},"o":{"x":[0.285,0.285,0.285],"y":[0.117,0.117,6.704]},"t":31,"s":[0,0,100]},{"i":{"x":[0.545,0.545,0.545],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":36,"s":[43,43,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":63,"s":[75.5,75.5,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.146,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.295,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":52.93,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74.488,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":80.294921875,"s":[{"i":[[0.871,22.343],[38.508,4.562]],"o":[[2.496,22.468],[39.008,4.437]],"v":[[613.75,489.75],[567.11,525.786]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.768627510819,0.309803921569,0,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-0.906,2.369],[-4.263,18.214],[-0.472,4.82],[-2.736,3.93],[1.599,7.792],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[-0.89,-4.901],[0.473,-4.833],[-6.071,-11.289],[0.098,-2.251],[0.104,-12.555],[-0.332,0]],"v":[[509.392,612.464],[515.131,549.155],[514.235,533.945],[519.295,519.289],[511.551,465.079],[510.83,449.375],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.146,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.295,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":52.93,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74.488,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":80.294921875,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.719,9.609],[-7.482,-1.433],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.255,-3.413],[66.602,12.758],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[573.481,561.374],[544.821,525.865],[564.522,524.841],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.482352971096,0,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[100]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":47.123,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":64,"s":[100]},{"t":80.294921875,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"t":80.294921875,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":47.123,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":64,"s":[0]},{"t":80.294921875,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"t":80.294921875,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-39.972,30.672],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[3.645,0.118],[0.057,28.368],[-0.01,9.977],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-10.811,-43.431],[-0.844,-4.117],[-0.442,-13.119],[-0.008,-9.243],[0.047,-13.382],[14.463,-0.472]],"o":[[-14.388,-0.465],[-0.027,-13.751],[0.01,-9.977],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[1.598,6.419],[4.679,22.836],[0.1,2.962],[0.008,9.244],[-0.084,24.242],[-3.632,0.118]],"v":[[-5.462,93.821],[-35.623,61.372],[-35.674,32.473],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[25.807,-53.004],[28.942,-38.771],[37.501,12.505],[37.647,29.642],[37.528,62.643],[7.109,93.821]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.494,74.003],[-54.737,63.43],[-18.498,16.082],[-70.108,7.834],[-45.845,-38.527],[-29.773,-48.875],[31.523,-48.623],[47.485,-38.516],[56.461,24.576],[51.078,30.955],[50.238,40.53],[9.523,74.015]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.571,93.092],[-29.113,60.892],[-34.063,34.099],[-35.581,8.373],[-30.439,-38.272],[-25.238,-54.371],[27.799,-53.545],[32.278,-36.294],[37.452,12.765],[35.622,33.614],[30.864,59.814],[7.06,94.082]],"c":true}]},{"t":80.294921875,"s":[{"i":[[5.601,-4.559],[-1.765,26.779],[1.219,14.319],[13.51,15.089],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[82.365,8.225],[1.119,-2.544],[-2.543,-2.208],[27.777,22.927]],"o":[[-29.1,23.689],[0.89,-13.501],[-0.716,-8.412],[-23.607,-26.366],[7.027,0.425],[19.009,-48.344],[2.628,6.422],[45.96,-2.921],[-8.631,-0.862],[-1.295,2.944],[67.833,58.912],[-5.57,-4.597]],"v":[[-9.494,74.003],[-52.987,61.555],[-49.131,32.711],[-72.734,9.335],[-45.845,-38.527],[-29.773,-48.875],[31.523,-48.623],[47.485,-38.516],[37.831,8.322],[20.32,12.826],[24.981,27.777],[9.523,74.015]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.808,0,0.5,1,0.62,0,1,1,0.431,0]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_PRfJrAstoH","hd":false},{"ty":"tr","p":{"a":0,"k":[510.053,507.8]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-5.781,0.601],[-0.323,40.051],[0.062,7.102],[0.108,4.266],[6.966,16.874],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.241,-18.578],[0.044,-10.635],[-0.026,-23.02],[-29.073,-3.023]],"o":[[29.056,-3.019],[0.041,-5.065],[-0.057,-6.537],[-0.659,-26.835],[-2.26,-5.473],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.188,14.446],[-0.044,10.635],[0.035,30.865],[5.779,0.601]],"v":[[8.327,101.399],[52.34,51.895],[52.381,32.224],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-51.489,6.233],[-51.805,30.773],[-51.723,62.881],[-10.969,101.399]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.856,89.592],[61.137,43.218],[61.7,34.698],[66.432,28.235],[53.077,-53.118],[38.412,-63.162],[-40.552,-63.161],[-55.216,-53.118],[-94.607,6.492],[-35.16,14.441],[-69.886,64.477],[-10.764,89.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.27,102.204],[44.597,58.812],[49.486,39.485],[52.11,18.441],[44.735,-45.613],[38.196,-63.157],[-40.768,-63.157],[-46.058,-45.613],[-52.258,6.226],[-49.659,34.146],[-41.817,63.238],[-8.581,101.987]],"c":true}]},{"t":80.294921875,"s":[{"i":[[-5.274,-3.814],[59.064,50.034],[-1.009,2.671],[-2.721,-0.548],[60.997,-2.167],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-16.767,-21.286],[-4.43,-8.711],[2.54,-17.361],[-26.548,19.164]],"o":[[44.827,32.417],[-2.27,-1.923],[0.942,-2.492],[80.15,16.13],[-6.442,0.229],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[12.006,15.242],[5.093,10.014],[-6.135,41.93],[5.277,-3.809]],"v":[[6.856,89.592],[40.881,28.214],[32.818,13.193],[46.177,11.856],[53.077,-53.118],[38.412,-63.162],[-40.552,-63.161],[-55.216,-53.118],[-92.106,4.742],[-65.167,33.321],[-69.886,64.477],[-10.764,89.592]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.767320101869,0.308551982805,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.651,0,0.5,0.95,0.491,0,1,0.901,0.332,0]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_C2g5hPIzzu","hd":false},{"ty":"tr","p":{"a":0,"k":[512.049,512.239]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.898039221764,0.454901963472,0.156862750649,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.54509806633,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.521]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":31.904,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":48.488,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":65.074,"s":[110,90]},{"t":81.66015625,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.953,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.83,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.879,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71.709,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":95.7578125,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464211857,0.892038083544,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"t":75,"s":[55]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":79,"st":22,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"7","sr":1,"ks":{"r":{"a":0,"k":-8.9},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[115.123,197.656,0],"to":[76.458,-107.895,0],"ti":[-170.276,-36.122,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[261.516,479.326,0],"to":[0.276,-13.878,0],"ti":[-19.54,-1.432,0]},{"t":78,"s":[295.123,455.156,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.518,0.518,0.518],"y":[1,1,1]},"o":{"x":[0.314,0.314,0.314],"y":[0.101,0.101,8.219]},"t":31,"s":[0,0,100]},{"i":{"x":[0.518,0.518,0.518],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":36,"s":[37,37,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":60,"s":[46,46,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.5,25],[12.75,-8.959]],"o":[[5.25,24.25],[13.5,-9.959]],"v":[[615.75,489.75],[587.25,539.459]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.34,"s":[{"i":[[-7.125,-4.375],[1.5,21.375]],"o":[[-6.75,-3.375],[3.125,25.5]],"v":[[439.5,530.75],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[7.875,36.75],[30.625,10.25]],"o":[[7.5,36.25],[29.625,9.875]],"v":[[615.75,489.75],[550,517.625]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.293,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":80.94921875,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.478431402468,0.400000029919,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-25.875,0],[6.375,37.5],[-0.625,3.685],[-6.266,5.508],[45.5,5.875],[4.875,12.625],[21.25,0]],"o":[[25.875,0],[-0.655,-3.855],[0.627,-3.695],[39.25,-34.5],[-11.562,-1.493],[-4.875,-12.625],[-21.25,0]],"v":[[556.125,614.875],[585.875,559.125],[584.75,548.308],[594,535],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[11.271,5.001],[-6.41,32.008],[-0.395,5.388],[4.329,4.362],[-21.918,4.375],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[0.851,-3.712],[0.396,-5.402],[-25.361,-26.438],[5.552,-1.11],[2.594,-12.519],[10.127,0]],"v":[[475.501,613.716],[476.483,560.531],[479.412,546.204],[474.58,530.875],[479.961,468],[491.101,457.625],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.34,"s":[{"i":[[25.066,0],[-12.145,32.875],[-0.318,5.956],[8.073,3.528],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[1.354,-3.665],[0.319,-5.972],[-39.898,-17.438],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[440.02,561],[444.299,545.503],[434.773,529.5],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-25.875,0],[5.875,20.5],[-6.747,11.104],[-15.75,10.125],[45.5,5.875],[4.875,12.625],[21.25,0]],"o":[[25.875,0],[-6.525,-22.767],[4.881,-8.033],[25.498,-16.391],[-11.562,-1.493],[-4.875,-12.625],[-21.25,0]],"v":[[556,613.25],[587.75,570],[548.997,523.396],[602.625,519.5],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.293,"s":[{"i":[[-11.866,0],[11.235,14.609],[-0.541,4.31],[-9.095,3.541],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-4.631,-6.022],[0.542,-4.321],[16.662,-6.487],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[546.765,550.391],[539.501,534.162],[553.463,520.112],[539.345,459.75],[528.625,449.375],[510.339,409.5]],"c":false}]},{"t":80.94921875,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.03137254902,0.733333333333,0.341176470588,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47.949,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63.34,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64.17,"s":[0]},{"t":80.94921875,"s":[100]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[16.983,4.139]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.55,-4.149],[16.55,4.149]],"c":false}]},{"t":80.94921875,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[24]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":47.949,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":64.17,"s":[24]},{"t":80.94921875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.78,32.932],[-7.172,15.987],[20.763,-4.987],[42.78,-32.932]],"c":false}]},{"t":80.94921875,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[47.834,-31.523],[1.226,-2.786],[-0.871,-3.584],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.941,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.661,1.754],[-1.419,3.224],[16.788,69.096],[-6.017,-5.133]],"v":[[-9.466,72.889],[-59.013,61.311],[-18.449,15.821],[-70.059,7.574],[-45.796,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[67.145,20.677],[61.251,27.663],[60.33,38.15],[11.361,72.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.198,8.079],[13.295,4.317],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.122,0],[4.324,-7.605],[-26.547,-20.849],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.198,-8.079],[-33.66,-10.929],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-19.204,0],[-5.007,8.806],[26.933,21.152],[-6.017,-5.133]],"v":[[-9.899,72.899],[-59.446,61.321],[-51.676,28.013],[-73.076,8.538],[-46.229,-38.778],[-30.157,-49.126],[31.138,-48.874],[47.101,-38.767],[66.176,4.44],[26.982,9.229],[54.78,49.243],[10.928,72.912]],"c":true}]},{"t":80.94921875,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.365,1,0.803,0,0.435,0.976,0.902,0,0.506,0.952,1,0.5,0.253,0.976,0.555,1,0,1,0.11]}},"s":{"a":0,"k":[7.996,-79.56]},"e":{"a":0,"k":[10.826,49.547]},"t":1,"nm":"Gradient_E17icAS8rp","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-5.781,-4.17],[16.366,69.651],[-1.105,2.925],[-2.382,1.889],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.558,-27.083],[-29.073,20.987]],"o":[[29.056,20.96],[-0.745,-3.172],[1.031,-2.729],[46.959,-37.248],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-6.045,46.013],[5.779,-4.172]],"v":[[8.63,90.384],[72.456,41.515],[73.073,32.185],[78.256,25.107],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.168,-53.378],[-94.558,6.232],[-35.111,14.18],[-75.414,62.88],[-10.666,90.384]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-5.78,-4.17],[9.874,42.023],[-5.976,11.278],[-20.46,11.655],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.621,-18.688],[-3.62,-10.635],[2.675,-18.733],[-29.073,20.987]],"o":[[29.056,20.96],[-5.568,-23.698],[5.482,-10.345],[28.831,-16.423],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[10.077,9.598],[3.62,10.635],[-6.559,45.942],[5.779,-4.172]],"v":[[8.197,90.394],[75.446,57.883],[36.62,11.12],[90.468,6.861],[52.693,-53.369],[38.028,-63.413],[-40.936,-63.412],[-55.6,-53.369],[-94.991,6.241],[-68.338,26.372],[-75.847,62.889],[-11.099,90.394]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.293,"s":[{"i":[[-5.781,-1.546],[4.266,40.939],[-3.897,8.516],[-8.648,8.913],[27.41,9.663],[2.515,5.936],[22.413,-52.919],[3.838,-3.466],[-8.697,-18.628],[-1.605,-10.635],[1.189,-21.091],[-29.073,7.782]],"o":[[29.056,7.772],[-2.483,-13.45],[0.962,-2.102],[15.727,-26.462],[-4.143,-3.057],[-22.348,-52.741],[-2.514,5.936],[-26.456,10.9],[4.431,12.264],[1.605,10.635],[-2.932,37.65],[5.779,-1.547]],"v":[[8.269,96.447],[62.738,54.59],[45.288,22.727],[68.898,12.337],[48.343,-49.246],[38.147,-63.415],[-40.817,-63.415],[-50.325,-49.246],[-71.065,6.237],[-59.245,28.792],[-62.579,62.885],[-11.028,96.447]],"c":true}]},{"t":80.94921875,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.479738482307,0.398841169769,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.369,1,0.567,0.5,0.184,0.855,0.445,1,0,0.71,0.323]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_dKXd2l7zPg","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.545098039216,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":31,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":47.584,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":64.17,"s":[110,90]},{"t":80.755859375,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.414,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38.463,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.293,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.34,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":88.21875,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.816993623621,0.904337565104,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[23]},{"t":71,"s":[61]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":76,"st":22,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"13","sr":1,"ks":{"r":{"a":0,"k":-4.92},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[106.104,184.938,0],"to":[-37.361,-87.936,0],"ti":[-39.856,-40.007,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[92.042,446.136,0],"to":[39.856,40.007,0],"ti":[-6.538,45.49,0]},{"t":75,"s":[190.854,394.188,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.476,0.476,0.476],"y":[1,1,1]},"o":{"x":[0.359,0.359,0.359],"y":[0.146,0.146,10.591]},"t":31,"s":[0,0,100]},{"i":{"x":[0.476,0.476,0.476],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":36,"s":[33,33,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":57,"s":[46,46,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-8.563,31.024],[18.5,17.75]],"o":[[-23.179,9.555],[-0.503,45.167]],"v":[[517.26,513.492],[444.349,503.098]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.123,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.926,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[8.189,59.335],[21.124,3.466]],"o":[[-22.5,26.625],[28.402,20.507]],"v":[[579.779,491.202],[498.01,524.629]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.805,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":79.92578125,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[7.367,4.157],[-15.962,20.935],[-0.419,5.206],[2.064,4.224],[-12.88,9.655],[-0.675,9.778],[-6.774,0]],"o":[[-5.895,-3.504],[1.934,-4.055],[0.42,-5.22],[-23.232,-14.914],[4.164,-2.93],[1.796,-12.531],[6.774,0]],"v":[[485.008,612.805],[491.252,548.222],[495.162,533.782],[493.502,518.668],[490.569,469.102],[497.397,449.375],[510.108,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.123,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.926,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-9.426,0.527],[3.336,30.533],[-0.525,4.423],[-1.674,5.011],[16.277,5.225],[2.182,11.243],[7.649,0]],"o":[[9.613,-0.445],[-0.002,-3.793],[0.527,-4.435],[11.243,-31.005],[-4.144,-1.327],[-1.638,-12.579],[-7.649,0]],"v":[[534.712,612.192],[538.458,559.735],[539.089,547.396],[542.236,533.212],[537.778,467.105],[529.364,456.73],[510.31,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.805,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":79.92578125,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.070588235294,0.509803921569,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[66.014]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":46.756,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":63.342,"s":[66.014]},{"t":79.92578125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"t":79.92578125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[8.157]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":46.756,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":63.342,"s":[8.157]},{"t":79.92578125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.053,-4.994],[43.07,-32.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.054,-4.994],[43.07,-32.939]],"c":false}]},{"t":79.92578125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"t":79.92578125,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.948,0.642,0.5,1,0.656,0.623,1,1,0.365,0.604]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_feNSAHVoZv","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.636],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.635],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"t":79.92578125,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.70457500383,0,0.287356716979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.369,0.933,0.5,1,0.184,0.67,1,1,0,0.408]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_R4Ov2YnBoh","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.01568627451,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":22.707,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":39.293,"s":[110,90]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":55.879,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":72.463,"s":[110,90]},{"t":89.048828125,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.221,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.268,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.098,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.146,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.977,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":94.0234375,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.708727369121,0.812806193034,0.926797305836,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":59,"s":[45]},{"t":77,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":73,"st":28,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Shape Layer 16","sr":1,"ks":{"r":{"a":0,"k":229},"p":{"a":0,"k":[69.5,311,0]},"s":{"a":0,"k":[50,50,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-111.243,169.288],[203.865,-102.196]],"o":[[294.437,-448.072],[-413.414,207.243]],"v":[[-188.437,363.072],[368.393,469.709]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-149.28,136.926],[253.963,131.026]],"o":[[196.275,-180.031],[-88.624,-45.723]],"v":[[-188.437,363.071],[-283.367,-176.462]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[196.273,50.094],[44.629,78.73]],"o":[[-82.564,-21.072],[-187.975,-331.605]],"v":[[-188.436,363.072],[-356.531,197.288]],"c":false}},"nm":"Path 3","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"t":27,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[0]},{"t":27,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[15]},{"t":27,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.90196031332,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[30]},{"t":27,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":4,"op":27,"st":-11,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Shape Layer 15","sr":1,"ks":{"p":{"a":0,"k":[414.5,314,0]},"s":{"a":0,"k":[50,50,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-195.396,53.421],[226.001,-102]],"o":[[429.086,-117.312],[-421.51,190.238]],"v":[[-303.086,-124.688],[-231.001,364]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-21.206,201.454],[-129.209,-309.535]],"o":[[31.086,-295.312],[38.415,92.028]],"v":[[-303.086,-124.688],[161.209,-248.465]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[-14.268,202.062],[99.84,74.352]],"o":[[13.086,-185.313],[-305.716,-227.671]],"v":[[-303.086,-124.687],[-463.84,-441.352]],"c":false}},"nm":"Path 3","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[0]},{"t":25,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[0]},{"t":25,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[10]},{"t":25,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.90196031332,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[20]},{"t":25,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":2,"op":25,"st":2,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Shape Layer 14","sr":1,"ks":{"r":{"a":0,"k":220},"p":{"a":0,"k":[358.5,193,0]},"s":{"a":0,"k":[50,50,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[140.997,145.442],[-124,-129]],"o":[[-222,-229],[264.154,274.804]],"v":[[29,-274],[144,-612]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[67.107,191.128],[129.13,204.842],[-54.086,-120.534],[116,-83]],"o":[[-79,-225],[-53.458,-84.802],[45.449,101.286],[-232.906,166.648]],"v":[[29,-274],[-445.449,-337.568],[-260.592,-429.436],[-356,-45]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[176.058,100.184],[-336,-180]],"o":[[-239,-136],[336,180]],"v":[[29,-274],[-60,79]],"c":false}},"nm":"Path 3","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":23,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":23,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[15]},{"t":23,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.90196031332,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[30]},{"t":23,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":0,"op":23,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"g3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.165],"y":[0]},"t":-5,"s":[26]},{"i":{"x":[0.832],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[37.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-13]},{"t":45,"s":[-13]}]},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":5,"s":[290.754,268.75,0],"to":[116.466,46.1,0],"ti":[144.534,34.4,0]},{"t":45,"s":[165.047,464.347,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.229,0.229,0.229],"y":[0.395,0.125,0]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11.223,"s":[16.076,50.576,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":15.111,"s":[45,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":38.104,"s":[45,45,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.284,-6.947],[-33.294,-58.359],[5.882,-21.15]],"o":[[-4.135,-13.22],[7.139,-79.656],[-6,5.346]],"v":[[-89.729,-159.8],[0.513,-80.717],[-58.098,-181.479]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[7.328,0],[-22.124,-35.348],[10.144,0]],"o":[[-7.328,0],[23.862,-42.975],[-10.144,0]],"v":[[-26.251,-184.732],[0.888,-83.025],[26.856,-184.713]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[9.416,4.312],[-5.339,-76.365],[-10.609,-5.011]],"o":[[-14.959,-15.313],[37.459,-67.302],[-9.734,-7.011]],"v":[[58.834,-182.687],[0.031,-81.284],[91.609,-161.489]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0.055],[0.035,-0.238],[-0.003,-0.129]],"o":[[-0.001,-0.278],[0.155,-0.028],[0.002,0.073]],"v":[[1.972,-84.416],[1.304,-84.181],[1.974,-84.23]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-58.754,-22.426],[2.84,9.446],[2.87,-3.464]],"o":[[-26.158,-35.961],[-2.568,0],[-2.546,16.968]],"v":[[0.513,-80.717],[-57.951,-181.3],[-89.568,-159.611]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-16.888,-46.475],[4.313,0],[4.959,0]],"o":[[23.112,-55.975],[-4.313,0],[-4.959,0]],"v":[[0.888,-83.025],[26.854,-184.651],[-26.253,-184.651]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[27.557,-28.608],[3.11,18.372],[7.875,5.207]],"o":[[59.243,-26.628],[-2.676,-1.802],[-7.016,11.974]],"v":[[0.031,-81.284],[91.226,-161.727],[59,-182.832]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0.121,-0.111],[0.002,0.162],[0,0.078]],"o":[[0.196,0.033],[0,-0.016],[-0.113,0.012]],"v":[[1.304,-84.181],[1.972,-84.232],[1.973,-84.418]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.339315975414,0.772549019608,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[39.987,83.048],[0,0],[0,0]],"o":[[0,0],[37.932,59.071],[0,0]],"v":[[-72.968,-196.749],[-126.624,-162.347],[0.665,-80.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,49.669],[0,0],[0,0]],"o":[[0,0],[0,52.773],[0,0]],"v":[[45.25,-196.291],[-43.839,-197],[0.918,-82.799]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-46.488,62.291],[0,0],[0,0]],"o":[[0,0],[-48.138,89.011],[0,0]],"v":[[129.222,-163.269],[74.301,-199.194],[0.067,-81.007]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":26.035,"s":[{"i":[[-84.252,-96.603],[0,0],[65.058,-1.852]],"o":[[0,0],[-80.439,-59.548],[72.089,49.973]],"v":[[218.612,-18.331],[212.503,-76.263],[0.909,-82.451]],"c":true}]},{"t":32.068359375,"s":[{"i":[[-98.765,-68.901],[0,0],[84.61,-15.146]],"o":[[0,0],[-98.597,-68.966],[84.61,-15.146]],"v":[[277.612,-28.106],[277.507,-28.041],[0.925,-83.049]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,-0.541]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[3.562,0.396],[4.486,-30.705],[2.528,-42.852]],"o":[[-2.735,-31.243],[23.134,-48.353],[-4.616,12.103]],"v":[[47.968,-59.041],[0.181,-81.135],[99.326,-80.542]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.983,0.37],[-26.263,6.174],[4.246,-11.798]],"o":[[-4.593,-11.621],[26.987,5.34],[-7.754,0.263]],"v":[[-43.032,-45.949],[0.888,-83.764],[43.254,-45.772]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.636,7.589],[-25.685,-47.937],[-17.228,-15.756]],"o":[[-2.769,-33.656],[-29.531,-12.611],[-9.187,-0.664]],"v":[[-102.517,-80.73],[0.031,-82.139],[-53.059,-56.285]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,-0.089],[0.06,0.338],[-0.001,0.127]],"o":[[0,0.26],[0.314,0.056],[0.001,0.101]],"v":[[1.782,-83.563],[0.912,-83.891],[1.782,-83.825]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[32.617,11.332],[0.469,1.698],[2.565,-16.738]],"o":[[58.068,3.751],[-2.309,-0.343],[0.412,7.213]],"v":[[0.181,-81.135],[99.549,-80.475],[47.806,-59.055]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-27.013,5.688],[1.246,-7.237],[5.344,0.209]],"o":[[30.487,5.966],[-3.879,-0.32],[-0.343,-9.106]],"v":[[0.888,-83.764],[43.629,-45.71],[-43.282,-45.962]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-34.368,8.181],[14.503,9.746],[3.343,10.584]],"o":[[-6.795,12.388],[-4.163,-0.115],[-0.295,-2.323]],"v":[[0.031,-82.139],[-52.675,-56.196],[-102.669,-79.311]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0.267,0.181],[0.002,-0.315],[-0.001,-0.129]],"o":[[0.157,-0.036],[0,0.038],[0.001,-0.095]],"v":[[0.912,-83.891],[1.783,-83.828],[1.782,-83.58]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.341176470588,0.772549079446,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-47.773,37.347],[13.35,4.661],[0,0]],"o":[[-8.75,11.859],[-29.837,10.284],[0,0]],"v":[[130.25,-76.109],[73.163,-40.941],[-0.09,-81.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-7.056,-21.075],[22.423,4.353],[0,0]],"o":[[-24.75,3.841],[5.117,-32.397],[0,0]],"v":[[51.556,-17.175],[-45.367,-16.853],[0.66,-83.81]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[30.446,13.502],[7.5,16.094],[0,0]],"o":[[-15.081,4.208],[53.378,40.554],[0,0]],"v":[[-72.019,-39.761],[-130.75,-75.344],[-0.121,-82.24]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":26.035,"s":[{"i":[[62.584,13.086],[0,0],[-76.293,-50.621]],"o":[[0,0],[59.413,-2.914],[-105.714,-16.287]],"v":[[-216.595,-5.445],[-221.581,-64.208],[0.796,-83.205]],"c":true}]},{"t":32.068359375,"s":[{"i":[[61.327,-74.693],[0,0],[-94.582,-57.384]],"o":[[0,0],[61.287,-75.47],[-94.582,-57.634]],"v":[[-295.542,-26.252],[-295.502,-25.724],[0.867,-83.81]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":26.035,"s":[100]},{"t":32.068359375,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[127.458,-87.534],[202.035,-45.391],[61.037,36.306],[-13.54,-5.837]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[219.958,-130.284],[201.785,-44.641],[60.787,37.056],[78.96,-48.587]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[270.458,15.841],[201.785,-44.516],[60.787,37.181],[129.46,97.538]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_3bbZEK7LAp","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-199.644,-112.575],[-124.894,-156.234],[75.903,-43.262],[61.403,37.898]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.144,-113.575],[-198.527,-210.234],[64.521,-59.262],[61.903,37.398]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-199.394,-112.075],[-275.894,-120.734],[-15.097,28.988],[61.403,37.648]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_jpTGbMUCTi","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-59.217,-194.944],[4.36,-158.801],[-136.638,-77.104],[-200.215,-113.248]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-59.967,-193.944],[-42.14,-269.676],[-183.138,-187.979],[-200.965,-112.248]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-59.717,-194.194],[-107.39,-261.801],[-248.388,-180.104],[-200.715,-112.498]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_JLoNU3DvSR","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-134.394,-151.075],[-59.644,-194.734],[201.403,-44.262],[66.403,-38.102]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-78.144,-280.325],[-59.894,-194.234],[201.903,-45.012],[183.653,-131.102]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-7.894,-258.075],[-59.144,-194.234],[202.403,-44.512],[253.653,-108.352]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_LtgtTmEdpW","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[0.231,-163.047],[141.778,-81.324],[1.153,0.398]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-58.875,-194.312],[201.75,-44.391],[60.625,37.312],[-200,-112.609]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.082352941176,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.003,0,0.427,0.5,0.502,0,0.567,1,1,0,0.706]}},"s":{"a":0,"k":[2,13]},"e":{"a":0,"k":[61,-117.25]},"t":1,"nm":"Gradient_sNuIUWvnfz","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31.207,"s":[0]},{"t":32.068359375,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"TOP2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-110.103,-63.56],[-110.027,-100.532],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[-0.41,-27.045]],"o":[[0,0],[0,0],[-61.41,1.83]],"v":[[-94.995,-109.773],[-47.63,-137.306],[0.535,-81.705]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-56.849,-2.331]],"o":[[0,0],[0,0],[-3.842,31.77]],"v":[[-107.323,6.751],[-154.59,-20.677],[0.554,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-178.603,-63.7],[-178.527,-100.672],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[-9.884,-25.477]],"o":[[0,0],[0,0],[-59.087,6.302]],"v":[[-160.747,-124.574],[-123.563,-154.139],[0.519,-81.651]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-187.745],[-35.933,-187.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[2.785,-29.597]],"o":[[0,0],[0,0],[54.41,4.403]],"v":[[156.725,-143.497],[109.36,-170.781],[0.215,-81.653]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-56.849,2.331]],"o":[[0,0],[0,0],[-3.842,-31.77]],"v":[[-47.92,-137.119],[-95.187,-109.691],[0.643,-81.232]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-137.745],[-35.933,-137.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[-6.842,-27.174]],"o":[[0,0],[0,0],[51.141,-0.508]],"v":[[83.969,-115.726],[30.998,-137.115],[0.229,-81.576]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,21.16],[37.271,21.063],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[-4.16,33.449]],"o":[[0,0],[0,0],[-63.035,0.199]],"v":[[-155.245,-20.818],[-107.88,6.465],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[56.849,-2.331]],"o":[[0,0],[0,0],[3.842,31.77]],"v":[[47.783,-26.749],[95.05,-54.177],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,-26.34],[37.271,-26.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[5.534,30.754]],"o":[[0,0],[0,0],[-59.35,4.786]],"v":[[-81.441,-48.393],[-28.47,-27.004],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[111.5,-100.405],[111.424,-63.769],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[3.84,30.199]],"o":[[0,0],[0,0],[60.715,-1.176]],"v":[[94.475,-54.176],[47.11,-27.142],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[56.849,2.331]],"o":[[0,0],[0,0],[3.842,-31.77]],"v":[[110.513,-172.494],[157.779,-145.066],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[180.5,-100.073],[180.424,-63.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[13.148,28.408]],"o":[[0,0],[0,0],[58.424,-5.694]],"v":[[160.64,-34.878],[123.456,-5.777],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.997,-186.12],[109.555,-186.491],[109.883,20.946],[-108.67,21.316]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.375,-196.875],[201.5,-115.704],[-61,33.438],[-202.125,-47.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.644,-48.012],[60.981,-198.422],[202.528,-116.699],[-59.722,33.898]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-177.498,-136.26],[178.555,-136.159],[178.883,-26.223],[-177.17,-26.324]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.193},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-122.064,-161.16],[188.465,-96.027],[127.132,1.043],[-187.835,-63.839]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-60.625,-194.062],[202,-44.391],[60.875,37.312],[-201.75,-112.359]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019607843,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.786,0.95,0.5,0.919,0.893,0.973,1,0.838,1,0.996]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_RsdAYi1BUX","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"top","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,21.291],[-35.494,79.598],[36.963,79.284],[36.831,21.136]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-154.715,-20.624],[-154.76,40.468],[-108.618,67.416],[-107.573,6.573]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[46.91,-26.749],[50.382,33.285],[97.648,5.857],[97.147,-106.398]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,-26.209],[-37.306,32.91],[35.151,32.596],[36.831,-26.364]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-81.082,-52.213],[-80.576,-51.499],[-28.769,-30.42],[-28.324,-30.904]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.332,-114.463],[-200.826,-113.749],[-28.769,-30.42],[-28.324,-30.904]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.533333333333,0.062745098039,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.592,1,0.251,0.5,0.445,0.835,0.241,1,0.298,0.671,0.231]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_mf9lwQKr1K","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.613,21.321],[109.673,21.064],[109.15,76.764],[-109.136,77.014]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.589,-47.727],[-60.808,33.613],[-61.775,92.706],[-202.556,11.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-60.183,33.898],[202.067,-116.699],[204.616,-58.665],[-57.634,91.932]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-177.113,-26.32],[178.673,-26.105],[176.338,30.408],[-179.448,30.186]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-195.911,-94.225],[86.555,23.55],[86.399,86.205],[-196.067,-31.571]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.214,-112.352],[61.066,37.488],[60.774,96.629],[-201.507,-53.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019607843,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[0,1,0.574,0.815,0.5,1,0.764,0.467,1,1,0.955,0.119]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[0,1,0.161,0.686,0.5,1,0.508,0.343,1,1,0.855,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[0,1,0.574,0.815,0.5,1,0.764,0.467,1,1,0.955,0.119]},{"t":32.068359375,"s":[0,1,0.161,0.686,0.5,1,0.508,0.343,1,1,0.855,0]}]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[119.586,-56.314],"to":[-21.5,11.667],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-9.414,13.686],"to":[0,0],"ti":[0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[119.586,-56.314],"to":[0,0],"ti":[21.5,-11.667]},{"t":32.068359375,"s":[-9.414,13.686]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[6.461,156.253],"to":[-22,-12.5],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-125.539,81.253],"to":[0,0],"ti":[0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[6.461,156.253],"to":[0,0],"ti":[22,12.5]},{"t":32.068359375,"s":[-125.539,81.253]}]},"t":1,"nm":"Gradient_8fLXYVnVQl","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.787,-62.524],[-108.598,-3.166],[-108.939,-39],[-109.128,-99.425]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.298,-108.233],[-93.347,-47.14],[-46.52,-74.568],[-46.471,-135.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-107.323,6.751],[-104.774,66.785],[-152.041,39.357],[-154.59,-20.677]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-177.287,-62.664],[-178.91,-2.494],[-179.251,-38.327],[-177.628,-99.565]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-159.133,-123.142],[-158.415,-58.13],[-121.742,-87.368],[-122.46,-152.61]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-154.298,-139.233],[-153.673,-78.092],[-106.846,-105.52],[-107.471,-166.661]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.133254780489,0.532025984222,0.061895736994,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.592,1,0.251,0.5,0.445,0.835,0.241,1,0.298,0.671,0.231]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_2vmOP17wjI","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.446,21.5],[-108.258,77.188],[-109.279,-127.08],[-109.468,-185.949]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.375,-47.46],[-201.424,11.632],[60.182,-137.528],[60.231,-196.62]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-60.183,33.898],[-57.634,91.932],[-199.181,10.21],[-201.73,-47.825]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-176.946,-26.14],[-178.57,30.36],[-179.591,-76.408],[-177.968,-136.089]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-187.369,-63.827],[-188.589,-5.51],[-128.031,-101.359],[-121.436,-161.345]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-195.707,-93.977],[-194.989,-31.324],[-85.167,-118.438],[-85.885,-181.776]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201,-112.085],[-200.375,-52.945],[-60.144,-134.667],[-60.769,-193.808]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549787872913,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.855,0,0.5,1,0.508,0.344,1,1,0.161,0.687]}},"s":{"a":0,"k":[-123,86]},"e":{"a":0,"k":[-31,12]},"t":1,"nm":"Gradient_FTiGJEG4o8","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.669,-62.918],[109.861,-6.162],[109.819,-41.996],[109.627,-99.819]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[47.24,-27.096],[47.195,31.996],[94.408,4.568],[94.453,-54.524]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[155.388,-143.846],[157.937,-85.812],[110.67,-113.24],[108.121,-171.274]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[178.669,-62.586],[177.049,-5.018],[177.007,-40.852],[178.627,-99.488]],"c":true}]},{"t":23.44921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[123.179,-8.183],[123.497,-8.123],[160.537,-37.36],[160.219,-37.65]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.533333333333,0.062745098039,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.592,1,0.251,0.5,0.467,0.886,0.125,1,0.341,0.773,0]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_sp250JqFEt","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.711,21.106],[109.902,76.805],[109.778,-127.463],[109.586,-186.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-61.222,33.676],[-61.267,92.768],[201.494,-56.392],[201.539,-115.484]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[202.528,-116.699],[205.077,-58.665],[63.53,-140.387],[60.981,-198.422]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[178.711,-26.063],[177.09,30.449],[176.965,-76.319],[178.586,-136.011]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[86.239,23.608],[86.96,86.263],[197.633,-7.181],[197.16,-64.191]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.653,37.551],[61.282,96.691],[202.669,14.969],[202.039,-44.172]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019607843,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.573,0.816,0.5,1,0.765,0.467,1,1,0.957,0.118]}},"s":{"a":0,"k":[119.586,-56.314]},"e":{"a":0,"k":[6.461,156.253]},"t":1,"nm":"Gradient_E9CSPoI72m","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":45,"st":-5,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Layer 2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0.025]},"t":2.6,"s":[117.393]},{"t":13,"s":[12]}]},"p":{"a":1,"k":[{"i":{"x":0.403,"y":1},"o":{"x":0.137,"y":0.495},"t":3,"s":[262.447,263.133,0],"to":[-140.782,82.357,0],"ti":[-35.452,44.291,0]},{"t":42,"s":[112.482,173.097,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.113,0.113,0.113],"y":[0.377,0.84,1]},"o":{"x":[0.261,0.261,0.261],"y":[0.358,0.092,0]},"t":3,"s":[0,0,100]},{"i":{"x":[0.568,0.568,0.568],"y":[1,1,1]},"o":{"x":[0.245,0.245,0.245],"y":[0.084,-0.118,0]},"t":7.355,"s":[16.427,63.927,100]},{"i":{"x":[0.568,0.568,0.568],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":11.711,"s":[50,40,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":21.666,"s":[45,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":34,"s":[45,45,100]},{"t":42,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,0],[-33.779,-14.515],[0,-50.763]],"o":[[0,-16.87],[-11.87,-48.515],[0,19.856]],"v":[[-123.816,-41.735],[0.279,-31.735],[-123.886,-99.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,0],[-33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[-11.87,-90.82],[0,19.856]],"v":[[-123.908,-63.225],[0.279,-32.336],[-123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,0],[-20.029,-88.414],[18.502,-47.289]],"o":[[-1.5,-79.775],[-8.529,-107.164],[-6.273,16.031]],"v":[[-124,-101.975],[0.279,-32.336],[-123.977,-138.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,0],[-33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[-11.87,-90.82],[0,19.856]],"v":[[-123.908,-63.225],[0.279,-32.336],[-123.886,-99.656]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,0],[-33.779,-14.515],[0,-50.763]],"o":[[0,-16.87],[-11.87,-48.515],[0,19.856]],"v":[[-123.816,-41.735],[0.279,-31.735],[-123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[0,0],[-29.701,-70.336],[5.506,-49.729]],"o":[[-0.446,-45.923],[-10.876,-95.684],[-1.867,18.718]],"v":[[-123.936,-74.756],[0.279,-32.336],[-123.913,-111.188]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[0,0],[-33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[-11.87,-90.82],[0,19.856]],"v":[[-123.908,-63.225],[0.279,-32.336],[-123.886,-99.656]],"c":true}]},{"t":37,"s":[{"i":[[0,0.055],[0.035,-0.238],[-0.003,-0.129]],"o":[[-0.001,-0.278],[0.155,-0.028],[0.002,0.073]],"v":[[1.944,-32.916],[1.276,-32.681],[1.946,-32.73]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[-81.799,4.704],[0.457,15.866],[1.036,-15.219]],"o":[[-54.279,-25.015],[0,0],[-1.036,15.219]],"v":[[0.279,-31.735],[-123.886,-99.656],[-123.794,-41.735]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[1.036,-28.489]],"o":[[-67.048,-4.427],[0,0],[-1.036,28.489]],"v":[[0.279,-32.336],[-123.886,-99.656],[-123.886,-63.225]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[-4.644,-28.127]],"o":[[-67.048,-4.427],[0,0],[4.102,24.85]],"v":[[0.279,-32.336],[-123.977,-138.406],[-123.977,-101.975]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[1.036,-28.489]],"o":[[-67.048,-4.427],[0,0],[-1.036,28.489]],"v":[[0.279,-32.336],[-123.886,-99.656],[-123.886,-63.225]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[-81.799,4.704],[0.457,15.866],[1.036,-15.219]],"o":[[-54.279,-25.015],[0,0],[-1.036,15.219]],"v":[[0.279,-31.735],[-123.886,-99.656],[-123.794,-41.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[-0.654,-28.382]],"o":[[-67.048,-4.427],[0,0],[0.493,27.406]],"v":[[0.279,-32.336],[-123.913,-111.188],[-123.913,-74.756]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[1.036,-28.489]],"o":[[-67.048,-4.427],[0,0],[-1.036,28.489]],"v":[[0.279,-32.336],[-123.886,-99.656],[-123.886,-63.225]],"c":true}]},{"t":37,"s":[{"i":[[0.121,-0.111],[0.002,0.162],[0,0.078]],"o":[[0.196,0.033],[0,-0.016],[-0.113,0.012]],"v":[[1.276,-32.681],[1.944,-32.732],[1.944,-32.918]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[77.005,55.715],[0,0],[0,0]],"o":[[0,0],[88.791,15.222],[0,0]],"v":[[-165.505,-97.465],[-167.291,-12.945],[0.506,-31.735]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[67.165,89.824],[0,0],[0,0]],"o":[[0,0],[63.712,46.446],[0,0]],"v":[[-167.505,-113.965],[-168.541,-55.472],[0.506,-32.336]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[59.24,45.557],[0,0],[0,0]],"o":[[0,0],[59.027,29.363],[0,0]],"v":[[-163.001,-86.872],[-168.29,-66.175],[0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[67.165,89.824],[0,0],[0,0]],"o":[[0,0],[63.712,46.446],[0,0]],"v":[[-167.505,-113.965],[-168.541,-55.472],[0.506,-32.336]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[77.005,55.715],[0,0],[0,0]],"o":[[0,0],[88.791,15.222],[0,0]],"v":[[-165.505,-97.465],[-167.291,-12.945],[0.506,-31.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[64.807,76.651],[0,0],[0,0]],"o":[[0,0],[62.318,41.362],[0,0]],"v":[[-166.165,-105.902],[-168.467,-58.657],[0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[67.165,89.824],[0,0],[0,0]],"o":[[0,0],[63.712,46.446],[0,0]],"v":[[-167.505,-113.965],[-168.541,-55.472],[0.506,-32.336]],"c":true}]},{"t":37,"s":[{"i":[[92.491,-59.579],[0,0],[0,0]],"o":[[0,0],[93.777,-57.792],[0,0]],"v":[[-236.741,-42.421],[-237.777,-43.208],[0.506,-32.336]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,0],[33.799,-33.481],[0,-50.763]],"o":[[0,-16.87],[11.87,-48.515],[0,19.856]],"v":[[123.908,-48.235],[-0.279,-31.735],[123.886,-99.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,0],[33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[11.87,-90.82],[0,19.856]],"v":[[123.908,-63.225],[-0.279,-32.336],[123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,-10.15],[44.029,-99.664],[-13.909,-46.155]],"o":[[-2.691,-65.65],[11.87,-90.82],[4.831,16.031]],"v":[[123.816,-101.975],[-0.279,-32.336],[123.794,-138.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,0],[33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[11.87,-90.82],[0,19.856]],"v":[[123.908,-63.225],[-0.279,-32.336],[123.886,-99.656]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,0],[33.799,-33.481],[0,-50.763]],"o":[[0,-16.87],[11.87,-48.515],[0,19.856]],"v":[[123.908,-48.235],[-0.279,-31.735],[123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[0,-3.021],[36.843,-73.683],[-4.139,-49.392]],"o":[[-0.801,-41.719],[11.87,-90.82],[1.438,18.718]],"v":[[123.881,-74.756],[-0.279,-32.336],[123.858,-111.188]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[0,0],[33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[11.87,-90.82],[0,19.856]],"v":[[123.908,-63.225],[-0.279,-32.336],[123.886,-99.656]],"c":true}]},{"t":37,"s":[{"i":[[0,-0.089],[0.06,0.338],[-0.001,0.127]],"o":[[0,0.26],[0.314,0.056],[0.001,0.101]],"v":[[1.754,-32.063],[0.884,-32.391],[1.754,-32.325]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[81.799,4.704],[-0.457,15.866],[-1.036,-15.219]],"o":[[46.529,-39.265],[0,0],[1.036,15.219]],"v":[[-0.279,-31.735],[123.886,-99.656],[123.886,-48.235]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[81.799,8.806],[-0.457,15.866],[-1.036,-28.489]],"o":[[67.048,-4.427],[0,0],[1.036,28.489]],"v":[[-0.279,-32.336],[123.886,-99.656],[123.886,-63.225]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[81.799,8.806],[0.206,64.344],[0.019,-19.713]],"o":[[67.048,-4.427],[0,0],[-0.027,28.508]],"v":[[-0.279,-32.336],[123.794,-138.406],[123.794,-101.975]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[81.799,8.806],[-0.457,15.866],[-1.036,-28.489]],"o":[[67.048,-4.427],[0,0],[1.036,28.489]],"v":[[-0.279,-32.336],[123.886,-99.656],[123.886,-63.225]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[81.799,4.704],[-0.457,15.866],[-1.036,-15.219]],"o":[[46.529,-39.265],[0,0],[1.036,15.219]],"v":[[-0.279,-31.735],[123.886,-99.656],[123.886,-48.235]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[81.799,8.806],[-0.26,30.293],[-0.722,-25.877]],"o":[[67.048,-4.427],[0,0],[0.72,28.495]],"v":[[-0.279,-32.336],[123.858,-111.188],[123.858,-74.756]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[81.799,8.806],[-0.457,15.866],[-1.036,-28.489]],"o":[[67.048,-4.427],[0,0],[1.036,28.489]],"v":[[-0.279,-32.336],[123.886,-99.656],[123.886,-63.225]],"c":true}]},{"t":37,"s":[{"i":[[0.267,0.181],[0.002,-0.315],[-0.001,-0.129]],"o":[[0.157,-0.036],[0,0.038],[0.001,-0.095]],"v":[[0.884,-32.391],[1.755,-32.328],[1.754,-32.08]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[-57.761,32.715],[0,0],[0,0]],"o":[[0,0],[-61.083,19.972],[0,0]],"v":[[167.511,-80.465],[168.583,-13.222],[-0.506,-31.735]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[-67.165,89.824],[0,0],[0,0]],"o":[[0,0],[-63.712,46.446],[0,0]],"v":[[167.505,-113.965],[168.541,-55.472],[-0.506,-32.336]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[-49.778,62.832],[0,0],[0,0]],"o":[[0,0],[-53.219,41.7],[0,0]],"v":[[157.669,-96.238],[167.706,-69.551],[-0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[-67.165,89.824],[0,0],[0,0]],"o":[[0,0],[-63.712,46.446],[0,0]],"v":[[167.505,-113.965],[168.541,-55.472],[-0.506,-32.336]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[-57.761,32.715],[0,0],[0,0]],"o":[[0,0],[-61.083,19.972],[0,0]],"v":[[167.511,-80.465],[168.583,-13.222],[-0.506,-31.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[-61.991,81.792],[0,0],[0,0]],"o":[[0,0],[-60.59,45.034],[0,0]],"v":[[164.578,-108.69],[168.293,-59.662],[-0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[-67.165,89.824],[0,0],[0,0]],"o":[[0,0],[-63.712,46.446],[0,0]],"v":[[167.505,-113.965],[168.541,-55.472],[-0.506,-32.336]],"c":true}]},{"t":37,"s":[{"i":[[-76.255,-39.75],[0,0],[0,0]],"o":[[0,0],[-76.791,-38.197],[0,0]],"v":[[223.755,-51],[224.791,-51.553],[-0.506,-32.336]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":32.715,"s":[100]},{"t":37,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[-10.972,12.078],[0,0],[17.96,-4.932],[0,0]],"o":[[0,0],[-16.104,15.242],[0,0],[15.322,-4.068]],"v":[[130.139,13.484],[130.121,97.174],[78.964,127.088],[78.982,41.672]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[-10.972,8.832],[0,0],[17.96,-3.437],[0,0]],"o":[[0,0],[-16.104,10.622],[0,0],[15.322,-2.975]],"v":[[130.139,1.302],[130.139,99.404],[78.982,120.252],[78.982,21.914]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[-10.972,0.889],[0,0],[17.96,-0.317],[0,0]],"o":[[0,0],[-16.104,0.979],[0,0],[15.322,-0.299]],"v":[[130.139,-28.505],[130.139,76.949],[78.982,78.871],[78.982,-26.431]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[-10.972,8.832],[0,0],[17.96,-3.437],[0,0]],"o":[[0,0],[-16.104,10.622],[0,0],[15.322,-2.975]],"v":[[130.139,1.302],[130.139,99.404],[78.982,120.252],[78.982,21.914]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[-10.972,12.078],[0,0],[17.96,-4.932],[0,0]],"o":[[0,0],[-16.104,15.242],[0,0],[15.322,-4.068]],"v":[[130.139,13.484],[130.121,97.174],[78.964,127.088],[78.982,41.672]],"c":true}]},{"t":26.28515625,"s":[{"i":[[-10.972,6.468],[0,0],[17.96,-2.509],[0,0]],"o":[[0,0],[-16.104,7.752],[0,0],[15.322,-2.179]],"v":[[130.139,-7.568],[130.278,-7.278],[79.121,7.937],[78.982,7.527]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.584,0.267,0.5,1,0.767,0.133,1,1,0.949,0]}},"s":{"a":0,"k":[4.5,25]},"e":{"a":0,"k":[5.5,122.5]},"t":1,"nm":"Gradient_fUQF0Ez9Pq","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[10.972,12.078],[0,0],[-17.96,-4.932],[0,0]],"o":[[0,0],[16.104,15.242],[0,0],[-15.322,-4.068]],"v":[[-130.139,13.156],[-130.157,96.83],[-79,126.744],[-78.982,41.345]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[10.972,8.832],[0,0],[-17.96,-3.437],[0,0]],"o":[[0,0],[16.104,10.622],[0,0],[-15.322,-2.975]],"v":[[-130.139,1.062],[-130.139,99.165],[-78.982,120.012],[-78.982,21.674]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[10.972,0.889],[0,0],[-17.96,-0.317],[0,0]],"o":[[0,0],[16.104,0.979],[0,0],[-15.322,-0.299]],"v":[[-130.139,-28.529],[-130.139,76.927],[-78.982,78.849],[-78.982,-26.455]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[10.972,8.832],[0,0],[-17.96,-3.437],[0,0]],"o":[[0,0],[16.104,10.622],[0,0],[-15.322,-2.975]],"v":[[-130.139,1.062],[-130.139,99.165],[-78.982,120.012],[-78.982,21.674]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[10.972,12.078],[0,0],[-17.96,-4.932],[0,0]],"o":[[0,0],[16.104,15.242],[0,0],[-15.322,-4.068]],"v":[[-130.139,13.156],[-130.157,96.83],[-79,126.744],[-78.982,41.345]],"c":true}]},{"t":26.28515625,"s":[{"i":[[10.972,6.468],[0,0],[-17.96,-2.509],[0,0]],"o":[[0,0],[16.104,7.752],[0,0],[-15.322,-2.179]],"v":[[-130.139,-7.744],[-130,-7.453],[-78.843,7.763],[-78.982,7.352]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.584,0.267,0.5,1,0.767,0.133,1,1,0.949,0]}},"s":{"a":0,"k":[-0.5,17]},"e":{"a":0,"k":[-1,125.5]},"t":1,"nm":"Gradient_7LrCXwVvRi","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[12.642,-12.38],[-60.129,3.384],[0,0],[-12.642,12.38],[51.639,-5.582],[0,0]],"o":[[0,0],[9.941,28.381],[20.654,-6.634],[0,0],[-12.721,-25.732],[-20.654,6.634]],"v":[[-130.139,-76.837],[0,-32.011],[78.982,41.672],[130.139,13.156],[0,-32.011],[-78.982,-105.353]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[12.642,-9.052],[-60.129,4.632],[0,0],[-12.642,9.052],[51.639,-7.64],[0,0]],"o":[[0,0],[9.941,38.849],[20.654,-4.851],[0,0],[-12.721,-35.223],[-20.654,4.851]],"v":[[-130.139,-64.743],[0,-32.581],[78.982,21.914],[130.139,1.062],[0,-32.581],[-78.982,-85.595]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[12.642,-0.911],[-60.129,0.466],[0,0],[-12.642,0.911],[51.639,-0.769],[0,0]],"o":[[0,0],[9.941,3.91],[20.654,-0.488],[0,0],[-12.721,-3.545],[-20.654,0.488]],"v":[[-130.139,-35.152],[0,-31.915],[78.982,-26.431],[130.139,-28.529],[0,-31.915],[-78.982,-37.25]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[12.642,-9.052],[-60.129,4.632],[0,0],[-12.642,9.052],[51.639,-7.64],[0,0]],"o":[[0,0],[9.941,38.849],[20.654,-4.851],[0,0],[-12.721,-35.223],[-20.654,4.851]],"v":[[-130.139,-64.743],[0,-32.581],[78.982,21.914],[130.139,1.062],[0,-32.581],[-78.982,-85.595]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[12.642,-12.38],[-60.129,3.384],[0,0],[-12.642,12.38],[51.639,-5.582],[0,0]],"o":[[0,0],[9.941,28.381],[20.654,-6.634],[0,0],[-12.721,-25.732],[-20.654,6.634]],"v":[[-130.139,-76.837],[0,-32.011],[78.982,41.672],[130.139,13.156],[0,-32.011],[-78.982,-105.353]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[12.642,-6.63],[-60.129,3.392],[0,0],[-12.642,6.63],[51.639,-5.595],[0,0]],"o":[[0,0],[9.941,28.451],[20.654,-3.552],[0,0],[-12.721,-25.796],[-20.654,3.552]],"v":[[-130.139,-55.937],[0,-32.383],[78.982,7.527],[130.139,-7.744],[0,-32.383],[-78.982,-71.208]],"c":true}]},{"t":34.85546875,"s":[{"i":[[0.195,-0.071],[-0.926,0.036],[0,0],[-0.195,0.071],[0.795,-0.06],[0,0]],"o":[[0,0],[0.153,0.306],[0.318,-0.038],[0,0],[-0.196,-0.277],[-0.318,0.038]],"v":[[-1.035,-32.815],[1.138,-32.743],[1.359,-32.08],[3.625,-32.738],[1.138,-32.743],[0.679,-33.335]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25.57,"s":[100]},{"t":26.28515625,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,0],[-20.654,-6.634],[-11.037,22.705],[0,0],[20.654,6.634],[17.84,-28.097]],"o":[[12.642,12.38],[0,0],[47.957,2.363],[-12.642,-12.38],[0,0],[-59.987,-2.649]],"v":[[-130.139,13.156],[-78.982,41.672],[0,-32.011],[130.139,-76.837],[78.982,-105.353],[0,-32.011]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,0],[-20.654,-4.851],[-11.037,31.079],[0,0],[20.654,4.851],[17.84,-38.46]],"o":[[12.642,9.052],[0,0],[47.957,3.235],[-12.642,-9.052],[0,0],[-59.987,-3.626]],"v":[[-130.139,1.062],[-78.982,21.914],[0,-32.581],[130.139,-64.743],[78.982,-85.595],[0,-32.581]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,0],[-20.654,-0.488],[-11.037,3.128],[0,0],[20.654,0.488],[17.84,-3.871]],"o":[[12.642,0.911],[0,0],[47.957,0.326],[-12.642,-0.911],[0,0],[-59.987,-0.365]],"v":[[-130.139,-28.529],[-78.982,-26.431],[0,-31.915],[130.139,-35.152],[78.982,-37.25],[0,-31.915]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,0],[-20.654,-4.851],[-11.037,31.079],[0,0],[20.654,4.851],[17.84,-38.46]],"o":[[12.642,9.052],[0,0],[47.957,3.235],[-12.642,-9.052],[0,0],[-59.987,-3.626]],"v":[[-130.139,1.062],[-78.982,21.914],[0,-32.581],[130.139,-64.743],[78.982,-85.595],[0,-32.581]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,0],[-20.654,-6.634],[-11.037,22.705],[0,0],[20.654,6.634],[17.84,-28.097]],"o":[[12.642,12.38],[0,0],[47.957,2.363],[-12.642,-12.38],[0,0],[-59.987,-2.649]],"v":[[-130.139,13.156],[-78.982,41.672],[0,-32.011],[130.139,-76.837],[78.982,-105.353],[0,-32.011]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[0,0],[-20.654,-3.552],[-11.037,22.761],[0,0],[20.654,3.552],[17.84,-28.167]],"o":[[12.642,6.63],[0,0],[47.957,2.369],[-12.642,-6.63],[0,0],[-59.987,-2.655]],"v":[[-130.139,-7.744],[-78.982,7.527],[0,-32.383],[130.139,-55.937],[78.982,-71.208],[0,-32.383]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":32.715,"s":[{"i":[[0,0],[-20.654,-0.488],[-11.037,3.128],[0,0],[20.654,0.488],[17.84,-3.871]],"o":[[12.642,0.911],[0,0],[47.957,0.326],[-12.642,-0.911],[0,0],[-59.987,-0.365]],"v":[[-130.139,-28.529],[-78.982,-26.431],[0,-31.915],[130.139,-35.152],[78.982,-37.25],[0,-31.915]],"c":true}]},{"t":37,"s":[{"i":[[0,0],[-0.25,-0.006],[-0.134,0.038],[0,0],[0.25,0.006],[0.216,-0.047]],"o":[[0.153,0.011],[0,0],[0.582,0.004],[-0.153,-0.011],[0,0],[-0.727,-0.004]],"v":[[-1.578,-31.8],[-0.958,-31.775],[0,-31.841],[1.578,-31.881],[0.958,-31.906],[0,-31.841]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,-113.34],[0,113.34]],"o":[[0,113.34],[0,-113.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,-82.877],[0,82.877]],"o":[[0,82.877],[0,-82.877]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,-8.34],[0,8.34]],"o":[[0,8.34],[0,-8.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,-82.877],[0,82.877]],"o":[[0,82.877],[0,-82.877]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,-113.34],[0,113.34]],"o":[[0,113.34],[0,-113.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[0,-60.696],[0,60.696]],"o":[[0,60.696],[0,-60.696]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"t":32.71484375,"s":[{"i":[[0,-8.34],[0,8.34]],"o":[[0,8.34],[0,-8.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.082352941176,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0,0.525,1,0.5,0.288,0.763,0.998,1,0.576,1,0.995]}},"s":{"a":0,"k":[30.086,-99.814]},"e":{"a":0,"k":[-29.539,39.753]},"t":1,"nm":"Gradient_Q4Vi2Dk2lO","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,-53.815],[0,118.92],[0,0],[0,0]],"o":[[0,118.92],[0,-54.203],[0,0],[0,0]],"v":[[149.982,49.08],[-150.018,49.08],[-150,-31.508],[150,-31.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,-37.504],[0,82.877],[0,0],[0,0]],"o":[[0,82.877],[0,-37.775],[0,0],[0,0]],"v":[[150,65.887],[-150,65.887],[-150,-31.598],[150,-31.523]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,-3.458],[0,7.641],[0,0],[0,0]],"o":[[0,7.641],[0,-3.483],[0,0],[0,0]],"v":[[150,73.859],[-150,73.859],[-150,-31.816],[150,-31.809]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,-37.504],[0,82.877],[0,0],[0,0]],"o":[[0,82.877],[0,-37.775],[0,0],[0,0]],"v":[[150,65.887],[-150,65.887],[-150,-31.598],[150,-31.523]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,-53.815],[0,118.92],[0,0],[0,0]],"o":[[0,118.92],[0,-54.203],[0,0],[0,0]],"v":[[149.982,49.08],[-150.018,49.08],[-150,-31.508],[150,-31.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[0,-27.373],[0,60.488],[0,0],[0,0]],"o":[[0,60.488],[0,-27.57],[0,0],[0,0]],"v":[[150,68.259],[-150,68.259],[-150,-31.663],[150,-31.608]],"c":true}]},{"t":32.71484375,"s":[{"i":[[0,-3.458],[0,7.641],[0,0],[0,0]],"o":[[0,7.641],[0,-3.483],[0,0],[0,0]],"v":[[150,73.859],[-150,73.859],[-150,-31.816],[150,-31.809]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.082352941176,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0,0.525,1,0.165,0,0.345,1,0.33,0,0.165,1,0.665,0.288,0.582,0.998,1,0.576,1,0.995]}},"s":{"a":0,"k":[-147.414,63.686]},"e":{"a":0,"k":[141.461,60.253]},"t":1,"nm":"Gradient_prB2Rm9ILF","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":19.145,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.855,"s":[0,-101],"to":[0,0],"ti":[0,0]},{"t":37,"s":[131,-260]}]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":33.43,"s":[100,100]},{"t":37,"s":[81,81]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":19.145,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29.855,"s":[0]},{"t":37,"s":[34]}]},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.57,"s":[{"i":[[0.571,79.975],[0,0],[0,-36.607],[0,80.315],[0,0],[0,0]],"o":[[0,0],[0,0],[0,80.315],[0,-36.345],[0,0],[-0.745,79.927]],"v":[[-145.356,-27.123],[-145.363,-27.123],[-145.363,79.838],[145.363,79.838],[145.363,-27.051],[145.354,-27.051]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24.145,"s":[{"i":[[0.571,79.975],[0,0],[0,-36.607],[0,80.315],[0,0],[0,0]],"o":[[0,0],[0,0],[0,80.315],[0,-36.345],[0,0],[-0.745,79.927]],"v":[[-145.356,-27.123],[-145.363,-27.123],[-145.363,79.838],[145.363,79.838],[145.363,-27.051],[145.354,-27.051]],"c":true}]},{"t":35.5703125,"s":[{"i":[[0.571,150.378],[0,0],[0,-72.813],[0,159.75],[0,0],[0,0]],"o":[[0,0],[0,0],[0,159.75],[0,-72.292],[0,0],[-0.745,150.287]],"v":[[-145.356,-31.575],[-145.363,-31.575],[-145.5,30.75],[145.226,30.75],[145.363,-31.44],[145.354,-31.44]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.317647058824,0.317647058824,0.317647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.49,0.574,0.637,0.5,0.745,0.787,0.818,1,1,1,1]}},"s":{"a":0,"k":[119.5,43]},"e":{"a":0,"k":[-103.5,59]},"t":1,"nm":"Gradient_PwvcnBhLqh","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.57,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,79.838],[-145.363,79.838]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24.145,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,79.838],[-145.363,79.838]],"c":true}]},{"t":35.5703125,"s":[{"i":[[0,-159.75],[0,159.75]],"o":[[0,159.75],[0,-159.75]],"v":[[145.226,30.75],[-145.5,30.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.317647058824,0.317647058824,0.317647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.666666666667,0.717647058824,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.57,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,-27.358],[-145.363,-27.358]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24.145,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,-27.358],[-145.363,-27.358]],"c":true}]},{"t":35.5703125,"s":[{"i":[[0,-151.018],[0,151.018]],"o":[[0,151.018],[0,-151.018]],"v":[[145.363,-32.018],[-145.363,-32.018]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.317647058824,0.317647058824,0.317647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.49,0.574,0.637,0.5,0.745,0.787,0.818,1,1,1,1]}},"s":{"a":0,"k":[-102,-28]},"e":{"a":0,"k":[92.862,-28]},"t":1,"nm":"Gradient_ZYm3QBhvmR","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":12.715,"s":[0,0],"to":[0,0],"ti":[0,0]},{"t":22,"s":[0,0]}]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":12.715,"s":[54,54]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[1,1],"y":[0,0]},"t":22,"s":[100,100]},{"t":37,"s":[90,90]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":43,"st":-13,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"g1","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-29]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[10]},{"t":40,"s":[-22]}]},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[251.754,208.75,0],"to":[20.226,-43.4,0],"ti":[-23.226,-117.6,0]},{"t":40,"s":[430.607,261.347,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.179,0.179,0.179],"y":[0.732,0.327,0.715]},"o":{"x":[0.307,0.307,0.307],"y":[0.124,0.312,0.133]},"t":0,"s":[0,0,100]},{"i":{"x":[0.525,0.525,0.525],"y":[1,1,1]},"o":{"x":[0.212,0.212,0.212],"y":[0.382,0.262,0.118]},"t":3.889,"s":[42.638,17,100]},{"i":{"x":[0.525,0.525,0.525],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":10.111,"s":[55,35,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":21,"s":[45,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":34,"s":[41.5,41.5,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.284,-6.947],[-33.294,-58.359],[5.882,-21.15]],"o":[[-4.135,-13.22],[7.139,-79.656],[-6,5.346]],"v":[[-89.729,-159.8],[0.513,-80.717],[-58.098,-181.479]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[7.328,0],[-22.124,-35.348],[10.144,0]],"o":[[-7.328,0],[23.862,-42.975],[-10.144,0]],"v":[[-26.251,-184.732],[0.888,-83.025],[26.856,-184.713]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[9.416,4.312],[-5.339,-76.365],[-10.609,-5.011]],"o":[[-14.959,-15.313],[37.459,-67.302],[-9.734,-7.011]],"v":[[58.834,-182.687],[0.031,-81.284],[91.609,-161.489]],"c":true}]},{"t":28,"s":[{"i":[[0,0.055],[0.035,-0.238],[-0.003,-0.129]],"o":[[-0.001,-0.278],[0.155,-0.028],[0.002,0.073]],"v":[[1.972,-84.416],[1.304,-84.181],[1.974,-84.23]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[-58.754,-22.426],[2.84,9.446],[2.87,-3.464]],"o":[[-26.158,-35.961],[-2.568,0],[-2.546,16.968]],"v":[[0.513,-80.717],[-57.951,-181.3],[-89.568,-159.611]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-16.888,-46.475],[4.313,0],[4.959,0]],"o":[[23.112,-55.975],[-4.313,0],[-4.959,0]],"v":[[0.888,-83.025],[26.854,-184.651],[-26.253,-184.651]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[27.557,-28.608],[3.11,18.372],[7.875,5.207]],"o":[[59.243,-26.628],[-2.676,-1.802],[-7.016,11.974]],"v":[[0.031,-81.284],[91.226,-161.727],[59,-182.832]],"c":true}]},{"t":28,"s":[{"i":[[0.121,-0.111],[0.002,0.162],[0,0.078]],"o":[[0.196,0.033],[0,-0.016],[-0.113,0.012]],"v":[[1.304,-84.181],[1.972,-84.232],[1.973,-84.418]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960790157,0.901960790157,0.901960790157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[39.987,83.048],[0,0],[0,0]],"o":[[0,0],[37.932,59.071],[0,0]],"v":[[-72.968,-196.749],[-126.624,-162.347],[0.665,-80.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,49.669],[0,0],[0,0]],"o":[[0,0],[0,52.773],[0,0]],"v":[[45.25,-196.291],[-43.839,-197],[0.918,-82.799]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-46.488,62.291],[0,0],[0,0]],"o":[[0,0],[-48.138,89.011],[0,0]],"v":[[129.222,-163.269],[74.301,-199.194],[0.067,-81.007]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":22.4,"s":[{"i":[[-84.252,-96.603],[0,0],[65.058,-1.852]],"o":[[0,0],[-80.439,-59.548],[72.089,49.973]],"v":[[218.612,-18.331],[212.503,-76.263],[0.909,-82.451]],"c":true}]},{"t":28,"s":[{"i":[[-98.765,-68.901],[0,0],[84.61,-15.146]],"o":[[0,0],[-98.597,-68.966],[84.61,-15.146]],"v":[[277.612,-28.106],[277.507,-28.041],[0.925,-83.049]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[3.562,0.396],[4.486,-30.705],[2.528,-42.852]],"o":[[-2.735,-31.243],[23.134,-48.353],[-4.616,12.103]],"v":[[47.968,-59.041],[0.181,-81.135],[99.326,-80.542]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[5.983,0.37],[-26.263,6.174],[4.246,-11.798]],"o":[[-4.593,-11.621],[26.987,5.34],[-7.754,0.263]],"v":[[-43.032,-45.949],[0.888,-83.764],[43.254,-45.772]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[3.636,7.589],[-25.685,-47.937],[-17.228,-15.756]],"o":[[-2.769,-33.656],[-29.531,-12.611],[-9.187,-0.664]],"v":[[-102.517,-80.73],[0.031,-82.139],[-53.059,-56.285]],"c":true}]},{"t":28,"s":[{"i":[[0,-0.089],[0.06,0.338],[-0.001,0.127]],"o":[[0,0.26],[0.314,0.056],[0.001,0.101]],"v":[[1.782,-83.563],[0.912,-83.891],[1.782,-83.825]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[32.617,11.332],[0.469,1.698],[2.565,-16.738]],"o":[[58.068,3.751],[-2.309,-0.343],[0.412,7.213]],"v":[[0.181,-81.135],[99.549,-80.475],[47.806,-59.055]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-27.013,5.688],[1.246,-7.237],[5.344,0.209]],"o":[[30.487,5.966],[-3.879,-0.32],[-0.343,-9.106]],"v":[[0.888,-83.764],[43.629,-45.71],[-43.282,-45.962]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-34.368,8.181],[14.503,9.746],[3.343,10.584]],"o":[[-6.795,12.388],[-4.163,-0.115],[-0.295,-2.323]],"v":[[0.031,-82.139],[-52.675,-56.196],[-102.669,-79.311]],"c":true}]},{"t":28,"s":[{"i":[[0.267,0.181],[0.002,-0.315],[-0.001,-0.129]],"o":[[0.157,-0.036],[0,0.038],[0.001,-0.095]],"v":[[0.912,-83.891],[1.783,-83.828],[1.782,-83.58]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960790157,0.901960790157,0.901960790157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[-47.773,37.347],[13.35,4.661],[0,0]],"o":[[-8.75,11.859],[-29.837,10.284],[0,0]],"v":[[130.25,-76.109],[73.163,-40.941],[-0.09,-81.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-7.056,-21.075],[22.423,4.353],[0,0]],"o":[[-24.75,3.841],[5.117,-32.397],[0,0]],"v":[[51.556,-17.175],[-45.367,-16.853],[0.66,-83.81]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[30.446,13.502],[7.5,16.094],[0,0]],"o":[[-15.081,4.208],[53.378,40.554],[0,0]],"v":[[-72.019,-39.761],[-130.75,-75.344],[-0.121,-82.24]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":22.4,"s":[{"i":[[62.584,13.086],[0,0],[-76.293,-50.621]],"o":[[0,0],[59.413,-2.914],[-105.714,-16.287]],"v":[[-216.595,-5.445],[-221.581,-64.208],[0.796,-83.205]],"c":true}]},{"t":28,"s":[{"i":[[61.327,-74.693],[0,0],[-94.582,-57.384]],"o":[[0,0],[61.287,-75.47],[-94.582,-57.634]],"v":[[-295.542,-26.252],[-295.502,-25.724],[0.867,-83.81]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22.4,"s":[100]},{"t":28,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[66.458,-126.034],[141.785,-82.891],[0.787,-1.194],[-74.54,-44.337]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[159.958,-168.534],[141.785,-82.891],[0.787,-1.194],[18.96,-86.837]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[210.458,-22.534],[141.785,-82.891],[0.787,-1.194],[69.46,59.163]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_1N4lrLIMTn","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.033,-163.694],[75.36,-120.551],[-65.638,-38.854],[-140.965,-81.998]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.033,-163.694],[17.86,-239.426],[-123.138,-157.729],[-140.965,-81.998]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.033,-163.694],[-47.64,-231.301],[-188.638,-149.604],[-140.965,-81.998]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_ZAYgVVKBbH","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-75.144,-119.825],[-0.394,-163.484],[141.153,-81.762],[66.403,-38.102]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-18.644,-249.575],[-0.394,-163.484],[141.153,-81.762],[122.903,-167.852]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[50.856,-227.325],[-0.394,-163.484],[141.153,-81.762],[192.403,-145.602]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_H8xkVVC8eW","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[-65.644,-124.984],[75.903,-43.262],[1.153,0.398]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[-137.777,-177.984],[3.771,-96.262],[1.153,0.398]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[-216.894,-89.984],[-75.347,-8.262],[1.153,0.398]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_0j6JMua1Ti","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[0.231,-163.047],[141.778,-81.324],[1.153,0.398]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.414,0,0.637,0.5,0.631,0.292,0.818,1,0.848,0.584,1]}},"s":{"a":0,"k":[2,13]},"e":{"a":0,"k":[61,-117.25]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_2juTQaaxqD","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27.199,"s":[0]},{"t":28,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"TOP2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-110.103,-63.56],[-110.027,-100.532],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[-0.41,-27.045]],"o":[[0,0],[0,0],[-61.41,1.83]],"v":[[-94.995,-109.773],[-47.63,-137.306],[0.535,-81.705]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[-56.849,-2.331]],"o":[[0,0],[0,0],[-3.842,31.77]],"v":[[-46.448,-26.749],[-93.715,-54.177],[0.554,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-110.103,-63.56],[-110.027,-100.532],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[-9.884,-25.477]],"o":[[0,0],[0,0],[-59.087,6.302]],"v":[[-98.247,-99.824],[-61.063,-129.389],[0.519,-81.651]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-137.745],[-35.933,-137.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[2.785,-29.597]],"o":[[0,0],[0,0],[54.41,4.403]],"v":[[96.725,-109.685],[49.36,-136.968],[0.215,-81.653]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[-56.849,2.331]],"o":[[0,0],[0,0],[-3.842,-31.77]],"v":[[-47.92,-137.119],[-95.187,-109.691],[0.643,-81.232]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-137.745],[-35.933,-137.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[-6.842,-27.174]],"o":[[0,0],[0,0],[51.141,-0.508]],"v":[[83.969,-115.726],[30.998,-137.115],[0.229,-81.576]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,-26.34],[37.271,-26.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[-4.16,33.449]],"o":[[0,0],[0,0],[-63.035,0.199]],"v":[[-93.87,-54.443],[-46.505,-27.16],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[56.849,-2.331]],"o":[[0,0],[0,0],[3.842,31.77]],"v":[[47.783,-26.749],[95.05,-54.177],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,-26.34],[37.271,-26.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[5.534,30.754]],"o":[[0,0],[0,0],[-59.35,4.786]],"v":[[-81.441,-48.393],[-28.47,-27.004],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[111.5,-100.405],[111.424,-63.769],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[3.84,30.199]],"o":[[0,0],[0,0],[60.715,-1.176]],"v":[[94.475,-54.176],[47.11,-27.142],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[56.849,2.331]],"o":[[0,0],[0,0],[3.842,-31.77]],"v":[[49.763,-137.119],[97.029,-109.691],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[111.5,-100.405],[111.424,-63.769],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[13.148,28.408]],"o":[[0,0],[0,0],[58.424,-5.694]],"v":[[98.14,-64.128],[60.956,-35.027],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[0.231,-163.047],[141.778,-81.324],[1.153,0.398]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.294117647059,0,0.576470588235,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.895,0.684,1,0.5,0.939,0.753,1,1,0.983,0.822,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_NeJutkZm55","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"top","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,-26.209],[-35.686,137],[36.771,136.686],[36.831,-26.364]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.34,-54.249],[-92.879,110.4],[-46.737,137.347],[-46.198,-27.052]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[46.91,-26.749],[47.371,137.9],[94.638,110.472],[94.177,-54.177]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,-26.209],[-35.686,137],[36.771,136.686],[36.831,-26.364]],"c":true}]},{"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-81.082,-52.213],[-80.576,-51.499],[-28.769,-30.42],[-28.324,-30.904]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.423529411765,0.505882352941,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.851,0.851,0.851,1,0.702,0.702,0.702]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_b4S6m3KfYm","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.613,-26.179],[109.673,-26.436],[108.958,134.166],[-109.328,134.416]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.214,-81.352],[0.567,-0.012],[0.105,162.637],[-140.676,81.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.692,0.398],[141.317,-81.324],[140.855,81.325],[0.231,163.047]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.613,-26.179],[109.673,-26.436],[108.958,134.166],[-109.328,134.416]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.214,-81.352],[0.567,-0.012],[0.105,162.637],[-140.676,81.297]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.294117647059,0,0.576470588235,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[0,0.829,0.433,1,0.5,0.914,0.414,0.968,1,1,0.396,0.936]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[0,0.494,0,0.757,0.5,0.671,0.108,0.849,1,0.847,0.216,0.941]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[0,0.829,0.433,1,0.5,0.914,0.414,0.968,1,1,0.396,0.936]},{"t":28,"s":[0,0.494,0,0.757,0.5,0.671,0.108,0.849,1,0.847,0.216,0.941]}]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[119.586,-56.314],"to":[-21.5,11.667],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[-9.414,13.686],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[119.586,-56.314],"to":[0,0],"ti":[21.5,-11.667]},{"t":28,"s":[-9.414,13.686]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[6.461,156.253],"to":[-22,-12.5],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[-125.539,81.253],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[6.461,156.253],"to":[0,0],"ti":[22,12.5]},{"t":28,"s":[-125.539,81.253]}]},"t":1,"nm":"Gradient_20imbctHUK","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.787,-62.524],[-108.79,101.736],[-109.131,65.902],[-109.128,-99.425]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.298,-108.233],[-92.841,56.416],[-46.014,28.988],[-46.471,-135.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-46.448,-26.749],[-46.909,137.9],[-94.176,110.472],[-93.715,-54.177]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.787,-62.524],[-108.79,101.736],[-109.131,65.902],[-109.128,-99.425]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.298,-108.233],[-92.841,56.416],[-46.014,28.988],[-46.471,-135.661]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.423529411765,0.505882352941,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.851,0.851,0.851,1,0.702,0.702,0.702]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_Wz8IloAOir","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.446,-26],[-108.45,134.59],[-109.471,27.822],[-109.468,-135.949]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140,-81.085],[-139.543,81.563],[0.688,-0.159],[0.231,-162.808]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.692,0.398],[0.231,163.047],[-141.317,81.324],[-140.855,-81.325]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.446,-26],[-108.45,134.59],[-109.471,27.822],[-109.468,-135.949]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140,-81.085],[-139.543,81.563],[0.688,-0.159],[0.231,-162.808]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.293886311849,0,0.576470588235,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.847,0.216,0.941,0.5,0.67,0.108,0.849,1,0.493,0,0.757]}},"s":{"a":0,"k":[-123,86]},"e":{"a":0,"k":[-31,12]},"t":1,"nm":"Gradient_MSZnh6e9dI","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.669,-62.918],[109.669,98.74],[109.627,62.906],[109.627,-99.819]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[47.24,-27.096],[47.7,135.552],[94.913,108.124],[94.453,-54.524]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[94.638,-108.471],[94.177,54.177],[46.91,26.749],[47.371,-135.899]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.669,-62.918],[109.669,98.74],[109.627,62.906],[109.627,-99.819]],"c":true}]},{"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.679,-37.433],[60.997,-37.373],[98.037,-66.61],[97.719,-66.9]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.851,0.851,0.851,1,0.702,0.702,0.702]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_CWYj9Fyz7a","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.711,-26.394],[109.71,134.207],[109.585,27.439],[109.586,-136.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.153,0.051],[0.614,162.7],[142,80.977],[141.539,-81.672]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[141.778,-81.324],[141.317,81.325],[-0.231,-0.398],[0.231,-163.047]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.711,-26.394],[109.71,134.207],[109.585,27.439],[109.586,-136.343]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.153,0.051],[0.614,162.7],[142,80.977],[141.539,-81.672]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.827,0.431,1,0.5,0.914,0.414,0.969,1,1,0.396,0.937]}},"s":{"a":0,"k":[119.586,-56.314]},"e":{"a":0,"k":[6.461,156.253]},"t":1,"nm":"Gradient_1MLs5ujq8t","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.541]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":40,"st":-10,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect5.json b/TMessagesProj/src/main/res/raw/star_reaction_effect5.json new file mode 100644 index 000000000..a7933bddc --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect5.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":90,"w":512,"h":512,"nm":"Реакция MINI","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1141","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-8.595},"p":{"a":0,"k":[249.5,99.5,0]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой 187","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.601]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-285.243]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[-0.227]},"t":72.133,"s":[-358.383]},{"t":88.080078125,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.72},"o":{"x":0.185,"y":0.498},"t":66,"s":[-8.437,20.891,0],"to":[35.165,-9.262,0],"ti":[-48.957,-57.45,0]},{"t":88.080078125,"s":[131.659,73.628,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76,"s":[-135.047,151.667,100]},{"t":88.080078125,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":88,"st":-88,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой 186","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-23.479]},{"t":87.611328125,"s":[-285.243]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.361},"o":{"x":0.163,"y":1},"t":64,"s":[3.961,4.443,0],"to":[3.848,1.05,0],"ti":[-16.722,-44.02,0]},{"t":89,"s":[39.696,62.568,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.109,"s":[-116.079,124.154,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.803321748621,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой 185","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-233.751]},{"t":87,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.67},"o":{"x":0.185,"y":0.586},"t":64,"s":[-35.198,26.98,0],"to":[-22.156,-21.253,0],"ti":[27.56,-50.408,0]},{"t":87,"s":[-180.837,77.98,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[81.669,217.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-170.253,179.285,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-90,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой 190","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.5]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[-63.897]},{"t":89,"s":[-273.879]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.408},"o":{"x":0.176,"y":1},"t":66,"s":[268.09,152.609,0],"to":[14.416,5.797,0],"ti":[-6.363,-21.439,0]},{"t":89,"s":[340.317,208.343,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81,"s":[-166.309,219.738,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":89,"st":-88,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой 184","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-23.479]},{"t":87,"s":[-233.751]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.643},"o":{"x":0.185,"y":0.635},"t":64,"s":[-18.737,-25.983,0],"to":[-41.271,-18.579,0],"ti":[24.897,-19.942,0]},{"t":87,"s":[-166.443,-4.078,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-166.309,219.738,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-90,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой 183","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-23.479]},{"t":86,"s":[-233.751]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.435},"o":{"x":0.184,"y":1},"t":64,"s":[5.494,10.102,0],"to":[-22.156,-21.253,0],"ti":[25.633,-37.765,0]},{"t":86,"s":[-76.329,28.048,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[90.635,225.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-159.497,210.738,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Blesk 34","parent":1,"sr":1,"ks":{"r":{"a":0,"k":44.816},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[27.52,-75.842,0],"to":[-11.873,11.599,0],"ti":[-2.556,-22.491,0]},{"t":84.560546875,"s":[7.56,-12.375,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77.199,"s":[-156.328,156.328,100]},{"t":84.560546875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":68,"op":85,"st":67,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"manetka 40","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[0.052]},"t":64,"s":[-234.608]},{"t":87,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.478},"o":{"x":0.185,"y":0.381},"t":64,"s":[8.008,19.334,0],"to":[-46.431,-0.545,0],"ti":[28.332,-26.579,0]},{"t":87,"s":[-105.676,111.2,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[-104.263,113.738,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 200","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 201","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-93,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"manetka 41","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[0.052]},"t":67.84,"s":[-243.203]},{"t":89,"s":[-32.074]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.191},"o":{"x":0.185,"y":0.591},"t":67.84,"s":[260.957,90.96,0],"to":[7.779,-21.861,0],"ti":[-41.481,5.814,0]},{"t":89,"s":[320.82,22.227,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82.561,"s":[-104.075,104.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 202","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 203","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":67,"op":90,"st":-93,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"manetka 39","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[0.948]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[-23.479]},{"t":85.16015625,"s":[-234.608]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.417},"o":{"x":0.185,"y":0.426},"t":64,"s":[-31.073,7.905,0],"to":[-32.433,-41.17,0],"ti":[38.045,-20.733,0]},{"t":85.16015625,"s":[-151.672,-18.143,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78.721,"s":[-104.075,104.075,100]},{"t":85.16015625,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 204","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 205","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-93,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"zvezda 10","parent":1,"sr":1,"ks":{"r":{"a":0,"k":-9.109},"p":{"a":0,"k":[-4.634,7.873,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[-46.023,46.023,100]},{"t":81.478515625,"s":[-89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.743990789675,0.298039185767,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":81.478515625,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":82,"st":-61,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"manetka 38","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.273]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[-158.322]},{"t":81.478515625,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.788},"o":{"x":0.185,"y":0.377},"t":64,"s":[18.956,-9.172,0],"to":[13.479,-19.023,0],"ti":[-41.77,-63.218,0]},{"t":81.478515625,"s":[164.744,25.714,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.668,"s":[-177.421,177.421,100]},{"t":81.478515625,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 206","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 207","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-91,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Слой 182","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-285.243]},{"t":89,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.602},"o":{"x":0.185,"y":0.707},"t":66,"s":[18.183,11.584,0],"to":[18.139,-35.83,0],"ti":[20.574,14.991,0]},{"t":89,"s":[-23.966,-82.889,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76.223,"s":[-241.952,287.197,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":89,"st":-88,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Слой 181","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.202]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-285.243]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[-5.972]},"t":75.199,"s":[-36.102]},{"t":89,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.175},"o":{"x":0.126,"y":1},"t":66,"s":[8.144,12.051,0],"to":[1.76,-13.571,0],"ti":[-6.919,-12.147,0]},{"t":89,"s":[54.103,2.753,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76.119,"s":[-171.277,171.73,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":89,"st":-88,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Blesk 33","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-183.858]},{"t":80.560546875,"s":[-36.42]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-9.17,39.652,0],"to":[6.533,-4.583,0],"ti":[-6.533,4.583,0]},{"t":80.560546875,"s":[30.03,12.151,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":71.359,"s":[-159.443,159.443,100]},{"t":80.560546875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":81,"st":48,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Zvezda svet 10","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75.961,"s":[100]},{"t":81.478515625,"s":[0]}]},"r":{"a":0,"k":-46.126},"p":{"a":0,"k":[-2.764,15.51,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[-22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":75.961,"s":[-52.788,52.788,100]},{"t":81.478515625,"s":[-55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.819},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.181},"t":75.961,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":81.478515625,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.612,0,0.5,1,0.659,0,1,1,0.706,0,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 208","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":82,"st":-61,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Слой 159","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":70.943,"s":[350.007]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.72},"o":{"x":0.185,"y":0.498},"t":64,"s":[10.547,20.574,0],"to":[-36.139,-4.041,0],"ti":[40.066,-63.969,0]},{"t":89,"s":[-120.373,93.157,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.109,"s":[169.773,190.667,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.893102728152,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Слой 157","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":86,"s":[276.867]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.361},"o":{"x":0.163,"y":1},"t":64,"s":[-4.115,6.107,0],"to":[-3.654,1.599,0],"ti":[10.131,-45.986,0]},{"t":86,"s":[-31.002,68.819,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73.775,"s":[211.915,226.656,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.559630928788,0.976470648074,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Слой 156","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[225.375]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.793},"t":64,"s":[37.909,22.7,0],"to":[18.824,-24.254,0],"ti":[-10.846,-84.473,0]},{"t":89,"s":[108.15,81.972,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72.334,"s":[-81.669,217.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80.666,"s":[170.253,179.285,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Слой 155","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":83,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.459},"o":{"x":0.185,"y":0.963},"t":64,"s":[13.909,-27.3,0],"to":[18.824,-24.254,0],"ti":[-27.536,-16.102,0]},{"t":83,"s":[107.169,-42.971,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[176.148,232.738,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-90,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Слой 154","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":88,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.435},"o":{"x":0.184,"y":1},"t":64,"s":[-4.807,11.929,0],"to":[18.824,-24.254,0],"ti":[-30.86,-33.628,0]},{"t":88,"s":[78.757,17.765,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72.002,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79.998,"s":[198.096,261.738,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Blesk 25","parent":159,"sr":1,"ks":{"r":{"a":0,"k":-53.192},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-39.118,-69.889,0],"to":[13.436,9.746,0],"ti":[-0.748,-22.623,0]},{"t":77.6796875,"s":[-10.126,-10.007,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":71.6,"s":[156.328,156.328,100]},{"t":77.6796875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":78,"st":63,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"manetka 28","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[-0.052]},"t":64,"s":[226.232]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.477},"o":{"x":0.185,"y":0.382},"t":64,"s":[-5.95,21.429,0],"to":[45.856,-7.303,0],"ti":[-31.902,-22.168,0]},{"t":89,"s":[136.679,58.224,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[126.075,126.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 209","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 210","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-93,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"manetka 27","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.072]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[15.103]},{"t":88,"s":[226.232]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.372},"o":{"x":0.185,"y":0.458},"t":64,"s":[31.05,4.429,0],"to":[-18.509,-57.983,0],"ti":[-31.449,8.357,0]},{"t":88,"s":[118.313,-128.088,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82.68,"s":[104.075,104.075,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 211","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 212","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-93,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"zvezda 6","parent":159,"sr":1,"ks":{"r":{"a":0,"k":0.733},"p":{"a":0,"k":[4.887,8.249,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[46.023,46.023,100]},{"t":78.439453125,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0.823529531441,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":78.439453125,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":78,"st":-61,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"manetka 24","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[149.946]},{"t":78.439453125,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.741},"o":{"x":0.185,"y":0.461},"t":64,"s":[-20.934,-5.178,0],"to":[-36.968,-0.645,0],"ti":[14.998,-42.494,0]},{"t":78.439453125,"s":[-118.811,77.898,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.334,"s":[177.421,177.421,100]},{"t":78.439453125,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 213","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 214","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":79,"st":-91,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Слой 153","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"t":88,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.602},"o":{"x":0.185,"y":0.707},"t":64,"s":[-17.145,15.244,0],"to":[-23.165,-32.805,0],"ti":[-18.171,17.829,0]},{"t":88,"s":[10.792,-84.361,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[202.356,240.197,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Слой 152","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.973]},"t":72.799,"s":[27.726]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.175},"o":{"x":0.126,"y":1},"t":64,"s":[-7.145,14.244,0],"to":[-3.718,-13.17,0],"ti":[5.076,-13.025,0]},{"t":86,"s":[-53.969,11.74,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.422,"s":[171.277,171.73,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Blesk 24","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[175.482]},{"t":77.6796875,"s":[28.044]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[14.005,39.028,0],"to":[-7.131,-3.583,0],"ti":[7.131,3.583,0]},{"t":77.6796875,"s":[-28.783,17.531,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70.08,"s":[159.443,159.443,100]},{"t":77.6796875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":78,"st":48,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Zvezda svet 6","parent":159,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.881,"s":[100]},{"t":78.439453125,"s":[0]}]},"r":{"a":0,"k":37.75},"p":{"a":0,"k":[4.15,16.077,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":73.881,"s":[52.788,52.788,100]},{"t":78.439453125,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.781},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.219},"t":73.881,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":78.439453125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0,0.965,0.5,1,0,0.918,1,1,0,0.871,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 215","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":79,"st":-61,"bm":0},{"ddd":0,"ind":32,"ty":3,"nm":"Null 1138","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":104.787},"p":{"a":0,"k":[406,230,0]},"s":{"a":0,"k":[136.571,136.571,100]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":69.387,"s":[350.007]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.622},"o":{"x":0.185,"y":0.672},"t":63,"s":[5.547,13.574,0],"to":[-36.139,-4.041,0],"ti":[44.227,8.41,0]},{"t":86,"s":[-107.771,-15.741,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[150.184,168.667,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[15.103]},{"t":84.720703125,"s":[276.867]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.794},"t":63,"s":[-9.115,-0.893,0],"to":[-3.654,1.599,0],"ti":[10.131,-45.986,0]},{"t":86,"s":[-50.219,88.5,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[153.012,163.656,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.966551298254,0.4313725191,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[225.375]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.804,"y":0},"o":{"x":0.081,"y":1},"t":63,"s":[32.909,15.7,0],"to":[18.824,-24.254,0],"ti":[-6.293,3.338,0]},{"t":86,"s":[63.964,-13.264,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-59.119,157.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[149.362,157.285,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[15.103]},{"t":87,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.339},"o":{"x":0.158,"y":1},"t":63,"s":[8.909,-34.3,0],"to":[18.824,-24.254,0],"ti":[-26.03,3.947,0]},{"t":87,"s":[78.745,-75.594,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.002,"s":[-78.602,195.932,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78.998,"s":[149.646,197.722,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.51764681947,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":87,"st":-94,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[15.103]},{"t":89,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.354},"o":{"x":0.161,"y":1},"t":63,"s":[-9.807,4.929,0],"to":[18.824,-24.254,0],"ti":[-22.598,0.541,0]},{"t":89,"s":[53.624,-48.291,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-72.985,181.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[126.196,166.738,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.905928488339,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":89,"st":-94,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"manetka 31","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.771],"y":[1]},"o":{"x":[0.635],"y":[0.2]},"t":63,"s":[360.721]},{"t":85.115234375,"s":[-0.897]}]},"p":{"a":1,"k":[{"i":{"x":0.785,"y":0},"o":{"x":0.185,"y":0.852},"t":63,"s":[-1.91,-0.576,0],"to":[-10.521,14.761,0],"ti":[-20.808,-8.477,0]},{"t":86,"s":[47.295,35.709,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.076,"s":[86.383,86.383,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 216","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 217","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-97,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"manetka 30","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.057]},"o":{"x":[0.184],"y":[0]},"t":63,"s":[15.103]},{"t":85.115234375,"s":[226.232]}]},"p":{"a":1,"k":[{"i":{"x":0.846,"y":0},"o":{"x":0.156,"y":1},"t":63,"s":[18.33,-30.146,0],"to":[-9.12,-2.195,0],"ti":[-41.387,18.989,0]},{"t":85.115234375,"s":[19.543,-58.939,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[53.078,53.078,100]},{"t":85.115234375,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 218","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 219","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-97,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"manetka 29","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":63,"s":[149.946]},{"t":79.80859375,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.65},"o":{"x":0.185,"y":0.622},"t":63,"s":[-17.908,-12.633,0],"to":[-29.398,10.994,0],"ti":[13.489,-37.801,0]},{"t":79.80859375,"s":[-101.012,34.738,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.076,"s":[96.975,96.975,100]},{"t":79.80859375,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 220","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 221","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":79,"st":-95,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"Слой 161","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[276.867]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.416},"o":{"x":0.179,"y":1},"t":63,"s":[-22.145,8.244,0],"to":[-23.165,-32.805,0],"ti":[-18.171,17.829,0]},{"t":86,"s":[-18.893,-58.757,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[99.867,99.867,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"Слой 160","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.972]},"t":72.201,"s":[27.726]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.513},"o":{"x":0.185,"y":0.867},"t":63,"s":[2.017,-0.202,0],"to":[-7.378,21.259,0],"ti":[-40.229,1.727,0]},{"t":86,"s":[62.685,50.983,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[114.428,114.73,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"Blesk 27","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[175.482]},{"t":78.923828125,"s":[28.044]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":63,"s":[-12.951,13.043,0],"to":[0.169,-1.015,0],"ti":[-0.169,1.015,0]},{"t":78.923828125,"s":[-11.938,6.954,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":63,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70,"s":[91.443,91.443,100]},{"t":78.923828125,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":78,"st":44,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"zvezda 7","parent":32,"sr":1,"ks":{"r":{"a":0,"k":0.733},"p":{"a":0,"k":[-0.113,1.249,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":63,"s":[46.023,46.023,100]},{"t":77,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.560784313725,1,0.98449826708,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.136]},"t":63,"s":[34]},{"t":77,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[67.599,67.599]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":63,"op":77,"st":-65,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"Zvezda svet 7","parent":32,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.5,"s":[100]},{"t":79.80859375,"s":[0]}]},"r":{"a":0,"k":37.75},"p":{"a":0,"k":[-9.759,6.885,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.629,0.629,0.151]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":63,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":74,"s":[38.677,38.677,100]},{"t":79.80859375,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.812},"o":{"x":0.333,"y":0},"t":63,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.188},"t":74,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":79.80859375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0,1,0.965,0.5,0,0.994,0.982,1,0,0.988,1,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 222","hd":false},{"ty":"tr","p":{"a":0,"k":[-20.391,-40.798]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":63,"op":80,"st":-65,"bm":0},{"ddd":0,"ind":46,"ty":3,"nm":"Null 1139","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-23.123},"p":{"a":0,"k":[103,244,0]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"Слой 173","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[304.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":71.221,"s":[377.741]},{"t":90,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.622},"o":{"x":0.185,"y":0.672},"t":64,"s":[-2.408,18.596,0],"to":[-30.107,-20.395,0],"ti":[35.232,28.026,0]},{"t":90,"s":[-89.065,-60.086,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.555,"s":[169.773,190.667,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"manetka 34","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.771],"y":[1]},"o":{"x":[0.635],"y":[0.2]},"t":64,"s":[388.455]},{"t":89,"s":[26.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.327},"o":{"x":0.185,"y":0.491},"t":64,"s":[20.593,26.676,0],"to":[-15.317,-16.795,0],"ti":[39.053,-38.488,0]},{"t":90,"s":[-85.145,33.324,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[125.075,125.075,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 223","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 224","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-93,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"manetka 33","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.057]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[42.837]},{"t":89,"s":[253.966]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.355},"o":{"x":0.185,"y":0.471},"t":64,"s":[22.886,36.409,0],"to":[34.223,5.898,0],"ti":[15.333,-39.291,0]},{"t":89,"s":[50.772,154.046,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[104.075,104.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 225","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 226","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-93,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[42.837]},{"t":88.5546875,"s":[304.601]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.794},"t":64,"s":[-8.653,-1.032,0],"to":[-3.978,-0.285,0],"ti":[30.367,-35.988,0]},{"t":90,"s":[-86.634,58.963,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.555,"s":[211.915,226.656,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.803321748621,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[253.109]},{"t":85,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.557},"o":{"x":0.185,"y":0.788},"t":64,"s":[20.822,33.211,0],"to":[27.949,-12.707,0],"ti":[1.711,-67.816,0]},{"t":85,"s":[85.41,115.361,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-81.669,217.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[170.253,179.285,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":85,"st":-90,"bm":0},{"ddd":0,"ind":52,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[42.837]},{"t":80,"s":[253.109]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.459},"o":{"x":0.185,"y":0.963},"t":64,"s":[22.848,-22.214,0],"to":[27.949,-12.707,0],"ti":[-16.879,-27.067,0]},{"t":80,"s":[112.686,7.316,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69.334,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.666,"s":[198.096,261.738,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":53,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[42.837]},{"t":79,"s":[253.109]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.435},"o":{"x":0.184,"y":1},"t":64,"s":[-11.974,3.799,0],"to":[27.949,-12.707,0],"ti":[-11.666,-44.126,0]},{"t":79,"s":[59.274,47.852,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[198.096,261.738,100]},{"t":79,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.931580068551,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":85,"st":-90,"bm":0},{"ddd":0,"ind":54,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":0,"k":-25.458},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-4.268,-84.587,0],"to":[7.357,14.879,0],"ti":[9.866,-20.372,0]},{"t":89,"s":[-6.474,-18.092,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77.889,"s":[156.328,156.328,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":89,"st":63,"bm":0},{"ddd":0,"ind":55,"ty":4,"nm":"manetka 32","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[177.68]},{"t":83,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.585},"o":{"x":0.185,"y":0.739},"t":64,"s":[-23.152,-11.554,0],"to":[5.651,-23.369,0],"ti":[22.838,41.153,0]},{"t":83,"s":[-35.427,-92.196,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[120.421,120.421,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 227","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 228","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-91,"bm":0},{"ddd":0,"ind":56,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[304.601]},{"t":90,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.683},"o":{"x":0.185,"y":0.564},"t":64,"s":[-24.437,0.991,0],"to":[-5.237,-39.817,0],"ti":[-24.38,7.324,0]},{"t":90,"s":[54.143,-106.669,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.557,"s":[241.952,287.197,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":57,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[304.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.972]},"t":74.4,"s":[55.46]},{"t":90,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.627},"o":{"x":0.185,"y":0.664},"t":64,"s":[0.879,4.76,0],"to":[29.338,2.613,0],"ti":[-3.445,-39.667,0]},{"t":90,"s":[63.1,97.753,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.439,"s":[171.277,171.73,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":58,"ty":4,"nm":"Blesk 29","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[203.216]},{"t":82,"s":[55.778]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-30.935,76.539,0],"to":[2.689,-11.99,0],"ti":[-2.689,11.99,0]},{"t":82,"s":[-14.803,4.6,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":72,"s":[159.443,159.443,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":82,"st":48,"bm":0},{"ddd":0,"ind":59,"ty":4,"nm":"zvezda 8","parent":46,"sr":1,"ks":{"r":{"a":0,"k":28.467},"p":{"a":0,"k":[-1.681,5.053,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[46.023,46.023,100]},{"t":83,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,1,0.564705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":83,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":83,"st":-61,"bm":0},{"ddd":0,"ind":60,"ty":4,"nm":"Zvezda svet 8","parent":46,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[100]},{"t":83,"s":[0]}]},"r":{"a":0,"k":65.484},"p":{"a":0,"k":[-5.977,11.639,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77,"s":[52.788,52.788,100]},{"t":83,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0,1,0.706,0.5,0,1,0.659,1,0,1,0.612,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 229","hd":false},{"ty":"tr","p":{"a":0,"k":[-20.391,-40.798]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":89,"st":-61,"bm":0},{"ddd":0,"ind":61,"ty":4,"nm":"ZVEZDA 14","parent":62,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[79.997]},{"t":46,"s":[123.151]}]},"p":{"a":0,"k":[-5.578,204.735,0]},"a":{"a":0,"k":[159.035,247.474,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 230","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 231","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":62,"ty":4,"nm":"samolet 14","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[1.01]},"o":{"x":[0.279],"y":[0.003]},"t":5,"s":[-45.318]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[-81.998]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[-113.189]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[-163.883]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[-116.657]},{"t":64,"s":[-145.838]}]},"p":{"a":1,"k":[{"i":{"x":0.653,"y":0.754},"o":{"x":0.319,"y":0.537},"t":5,"s":[184.901,235.454,0],"to":[-6.495,-12.384,0],"ti":[32.424,1.763,0]},{"i":{"x":0.651,"y":0.529},"o":{"x":0.315,"y":0.422},"t":19,"s":[127.355,198.061,0],"to":[-27.713,-0.216,0],"ti":[16.389,-12.57,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.194,"y":1},"t":43,"s":[72.101,228.574,0],"to":[0.259,12.247,0],"ti":[-1.059,-0.131,0]},{"t":69,"s":[85.432,230.169,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.691,0.648,0.636],"y":[1,1,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[0.002,0.003,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[1.045,1.015,3.022]},"o":{"x":[0.222,0.222,0.33],"y":[0.014,0.005,2.065]},"t":13,"s":[77.337,77.3,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.43,0.397,0.431],"y":[-0.132,0,-0.872]},"t":32,"s":[61.228,46.2,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[84.022,84,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 232","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 233","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":63,"ty":4,"nm":"konfetti 30","sr":1,"ks":{"r":{"a":0,"k":-533.156},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[199.027,219.921,0],"to":[-29.823,-26.758,0],"ti":[60.259,50.827,0]},{"t":37,"s":[93.828,93.713,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[115.802,101.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-84.986,107.099,100]},{"t":37,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":64,"ty":4,"nm":"konfetti 29","sr":1,"ks":{"r":{"a":0,"k":-595.854},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[199.027,219.921,0],"to":[-29.823,-26.758,0],"ti":[60.259,50.827,0]},{"t":41,"s":[51.259,237.31,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[81.626,71.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[-81.018,102.099,100]},{"t":41,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":65,"ty":4,"nm":"konfetti 28","sr":1,"ks":{"r":{"a":0,"k":-533.156},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[186.705,268.595,0],"to":[-26.42,1.674,0],"ti":[36.882,-31.066,0]},{"t":37,"s":[18.112,274.43,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[88.462,77.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-77.051,97.099,100]},{"t":37,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.9623989928,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":66,"ty":4,"nm":"konfetti 26","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[224.579,204.201,0],"to":[-29.823,-26.758,0],"ti":[10.798,44.859,0]},{"t":37,"s":[174.412,60.574,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[93.018,81.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-104.019,130.302,100]},{"t":37,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":67,"ty":4,"nm":"konfetti 25","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":9,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[28.033,6.078,0]},{"t":43,"s":[63.507,259.127,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[108.967,95.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-63.306,79.302,100]},{"t":43,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.9623989928,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":9,"op":44,"st":-142,"bm":0},{"ddd":0,"ind":68,"ty":4,"nm":"konfetti 24","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[17.907,36.376,0]},{"t":37,"s":[44.491,137.567,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[132.89,116.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-100.826,126.302,100]},{"t":37,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":69,"ty":4,"nm":"konfetti 23","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":10,"s":[196.792,281.174,0],"to":[-23.737,27.028,0],"ti":[36.289,-7.22,0]},{"t":44,"s":[71.719,326.868,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[145.422,127.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[-122.379,153.302,100]},{"t":44,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.9623989928,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":10,"op":45,"st":-141,"bm":0},{"ddd":0,"ind":70,"ty":4,"nm":"konfetti 22","sr":1,"ks":{"r":{"a":0,"k":-911.551},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[191.815,265.451,0],"to":[-18.89,31.09,0],"ti":[20.381,-96.056,0]},{"t":37,"s":[77.609,378.427,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[145.422,127.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-134.354,168.302,100]},{"t":37,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":71,"ty":4,"nm":"konfetti 21","sr":1,"ks":{"r":{"a":0,"k":-455.465},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[201.123,223.328,0],"to":[-26.42,1.674,0],"ti":[14.729,43.615,0]},{"t":54,"s":[139.55,133.681,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[146.561,128.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-146.881,185.099,100]},{"t":54,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333333333,0.404253611845,0.087843135759,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.601430257161,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":72,"ty":4,"nm":"konfetti 20","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":18,"s":[224.579,204.201,0],"to":[-29.823,-26.758,0],"ti":[10.798,44.859,0]},{"t":52,"s":[174.412,60.574,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[149.978,131.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-109.607,137.302,100]},{"t":52,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.796954884249,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":18,"op":53,"st":-133,"bm":0},{"ddd":0,"ind":73,"ty":4,"nm":"konfetti 19","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":24,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[28.033,6.078,0]},{"t":58,"s":[63.507,259.127,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[146.561,128.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[-123.178,154.302,100]},{"t":58,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.977439491422,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":24,"op":59,"st":-127,"bm":0},{"ddd":0,"ind":74,"ty":4,"nm":"konfetti 18","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":18,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[17.907,36.376,0]},{"t":52,"s":[44.491,137.567,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[156.814,137.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-131.161,164.302,100]},{"t":52,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":18,"op":53,"st":-133,"bm":0},{"ddd":0,"ind":75,"ty":4,"nm":"konfetti 17","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":34,"s":[196.792,281.174,0],"to":[-23.737,27.028,0],"ti":[36.289,-7.22,0]},{"t":68,"s":[71.719,326.868,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[175.041,153.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[-155.109,194.302,100]},{"t":68,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.631511015051,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":34,"op":69,"st":-117,"bm":0},{"ddd":0,"ind":76,"ty":4,"nm":"konfetti 16","sr":1,"ks":{"r":{"a":0,"k":-911.551},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":18,"s":[191.815,265.451,0],"to":[-18.89,31.09,0],"ti":[20.381,-96.056,0]},{"t":52,"s":[77.609,378.427,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[152.257,133.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-119.985,150.302,100]},{"t":52,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":18,"op":53,"st":-133,"bm":0},{"ddd":0,"ind":77,"ty":4,"nm":"Spiral 25","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":17,"s":[-152.477]},{"t":47,"s":[-140.949]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":12,"s":[211.761,238.65,0],"to":[-35.945,-32.268,0],"ti":[11.188,35.285,0]},{"t":47,"s":[113.188,112.985,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":12,"s":[0,0,100]},{"t":20,"s":[37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":12,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":34,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.435294087728,0.807335528205,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":12,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":34,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.014825066398,0.62771061916,0.945098039216,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":24.691,"s":[0]},{"t":48.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":19.846,"s":[100]},{"t":41,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":12,"op":48,"st":-58,"bm":0},{"ddd":0,"ind":78,"ty":4,"nm":"Spiral 24","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":8,"s":[400.285]},{"t":38,"s":[388.758]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":3,"s":[167.913,277.667,0],"to":[-32.442,-15.749,0],"ti":[27.547,-2.215,0]},{"t":38,"s":[53.246,244.961,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":3,"s":[0,0,100]},{"t":10.615234375,"s":[-27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":3,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":25,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":3,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":25,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":15.691,"s":[0]},{"t":39.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":10.846,"s":[100]},{"t":32,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":3,"op":39,"st":-67,"bm":0},{"ddd":0,"ind":79,"ty":4,"nm":"ZVEZDA 15","parent":80,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[258.173]},{"t":46,"s":[336.416]}]},"p":{"a":0,"k":[-22.987,200.669,0]},"a":{"a":0,"k":[159.035,247.474,0]},"s":{"a":0,"k":[100,-100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 234","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 235","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":80,"ty":4,"nm":"samolet 15","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[0.986]},"o":{"x":[0.279],"y":[-0.004]},"t":5,"s":[49.419]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[74.889]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[108.283]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[197.784]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[139.448]},{"t":63,"s":[179.643]}]},"p":{"a":1,"k":[{"i":{"x":0.652,"y":0.78},"o":{"x":0.317,"y":0.537},"t":5,"s":[330.088,238.455,0],"to":[7.988,-12.112,0],"ti":[-32.197,4.032,0]},{"i":{"x":0.652,"y":0.525},"o":{"x":0.316,"y":0.373},"t":19,"s":[392.22,207.491,0],"to":[21.524,-1.197,0],"ti":[-0.974,-3.686,0]},{"i":{"x":0.379,"y":1},"o":{"x":0.346,"y":1},"t":43,"s":[454.563,224.487,0],"to":[-3.127,-1.24,0],"ti":[1.044,-0.221,0]},{"t":69,"s":[421.423,229.079,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.906,0.774,0.636],"y":[1.002,0.996,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[-0.051,0.051,0]},"t":5,"s":[-25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[0.874,1.03,3.022]},"o":{"x":[0.222,0.222,0.33],"y":[0.507,-0.03,2.065]},"t":13,"s":[-72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.43,0.43,0.431],"y":[0.009,0.024,-0.872]},"t":32,"s":[-70,45.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[-59,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[-85,85,100]},{"i":{"x":[0.798,0.798,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[-64,64,100]},{"t":61,"s":[-70,70,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 236","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 237","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":81,"ty":4,"nm":"konfetti 45","sr":1,"ks":{"r":{"a":0,"k":528.25},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[309.678,215.18,0],"to":[27.425,-29.211,0],"ti":[-55.69,55.795,0]},{"t":40,"s":[403.697,80.436,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-161.37,141.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[151.642,191.099,100]},{"t":40,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":82,"ty":4,"nm":"konfetti 44","sr":1,"ks":{"r":{"a":0,"k":590.947},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":10,"s":[309.678,215.18,0],"to":[27.425,-29.211,0],"ti":[-55.69,55.795,0]},{"t":44,"s":[458.392,219.866,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[-144.282,126.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[159.577,201.099,100]},{"t":44,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":10,"op":45,"st":-141,"bm":0},{"ddd":0,"ind":83,"ty":4,"nm":"konfetti 42","sr":1,"ks":{"r":{"a":0,"k":450.558},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":8,"s":[307.881,218.754,0],"to":[26.466,-0.592,0],"ti":[-10.944,44.715,0]},{"t":42,"s":[361.561,124.169,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[-139.726,122.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[107.998,136.099,100]},{"t":42,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,1,0.917277915805,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":8,"op":43,"st":-143,"bm":0},{"ddd":0,"ind":84,"ty":4,"nm":"konfetti 41","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[282.875,201.703,0],"to":[27.425,-29.211,0],"ti":[-6.921,45.618,0]},{"t":40,"s":[320.573,54.312,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-145.422,127.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[150.32,188.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":85,"ty":4,"nm":"konfetti 40","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":12,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-27.41,8.454,0]},{"t":46,"s":[448.055,242.651,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[-171.623,150.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[113.598,142.302,100]},{"t":46,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.947358733532,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":12,"op":47,"st":-139,"bm":0},{"ddd":0,"ind":86,"ty":4,"nm":"konfetti 39","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-14.73,37.775,0]},{"t":40,"s":[456.603,119.909,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-179.598,157.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[107.212,134.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":87,"ty":4,"nm":"konfetti 38","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":13,"s":[317.144,276.018,0],"to":[25.962,24.898,0],"ti":[-36.773,-4.089,0]},{"t":47,"s":[445.667,310.845,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[-121.718,106.845,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33,"s":[121.581,152.302,100]},{"t":47,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.751834106445,0.360784283806,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":13,"op":48,"st":-138,"bm":0},{"ddd":0,"ind":88,"ty":4,"nm":"konfetti 37","sr":1,"ks":{"r":{"a":0,"k":906.645},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[320.758,259.926,0],"to":[21.48,29.361,0],"ti":[-28.523,-93.961,0]},{"t":40,"s":[444.209,362.719,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-155.674,136.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[119.186,149.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.50980386173,0.867358637791,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":89,"ty":4,"nm":"konfetti 36","sr":1,"ks":{"r":{"a":0,"k":450.558},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":23,"s":[326.881,201.754,0],"to":[26.466,-0.592,0],"ti":[-10.944,44.715,0]},{"t":57,"s":[361.561,124.169,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[-187.572,164.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[154.023,194.099,100]},{"t":57,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.042983466504,0.758414952895,0.843137254902,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.932318234911,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":23,"op":58,"st":-128,"bm":0},{"ddd":0,"ind":90,"ty":4,"nm":"konfetti 35","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[282.875,201.703,0],"to":[27.425,-29.211,0],"ti":[-6.921,45.618,0]},{"t":55,"s":[320.573,54.312,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-152.257,133.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[131.959,165.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":91,"ty":4,"nm":"konfetti 34","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":27,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-27.41,8.454,0]},{"t":61,"s":[448.055,242.651,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[-181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[131.959,165.302,100]},{"t":61,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.977439431583,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":27,"op":62,"st":-124,"bm":0},{"ddd":0,"ind":92,"ty":4,"nm":"konfetti 33","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-14.73,37.775,0]},{"t":55,"s":[456.603,119.909,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[164.689,206.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.932318414426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":93,"ty":4,"nm":"konfetti 32","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":37,"s":[317.144,276.018,0],"to":[25.962,24.898,0],"ti":[-36.773,-4.089,0]},{"t":71,"s":[445.667,310.845,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[-165.927,145.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[124.774,156.302,100]},{"t":71,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.390864981857,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":37,"op":72,"st":-114,"bm":0},{"ddd":0,"ind":94,"ty":4,"nm":"konfetti 31","sr":1,"ks":{"r":{"a":0,"k":906.645},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[354.758,277.926,0],"to":[21.48,29.361,0],"ti":[-28.523,-93.961,0]},{"t":55,"s":[444.209,362.719,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-167.066,146.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[146.328,183.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":95,"ty":4,"nm":"Spiral 27","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":18,"s":[147.57]},{"t":48,"s":[136.042]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":13,"s":[298.593,234.93,0],"to":[33.053,-35.224,0],"ti":[-8.129,36.113,0]},{"t":48,"s":[386.056,101.293,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":13,"s":[0,0,100]},{"t":20.615234375,"s":[-37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":13,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":35,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.435294087728,0.807335528205,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":13,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":35,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.014825066398,0.62771061916,0.945098039216,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":25.691,"s":[0]},{"t":49.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":20.846,"s":[100]},{"t":42,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":13,"op":49,"st":-57,"bm":0},{"ddd":0,"ind":96,"ty":4,"nm":"Spiral 26","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":11,"s":[-405.192]},{"t":41,"s":[-393.665]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":6,"s":[345.617,270.053,0],"to":[30.976,-18.466,0],"ti":[-27.635,0.149,0]},{"t":41,"s":[457.066,227.658,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":6,"s":[0,0,100]},{"t":13.615234375,"s":[27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":6,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":28,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":6,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":28,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":18.691,"s":[0]},{"t":42.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":13.846,"s":[100]},{"t":35,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":6,"op":42,"st":-64,"bm":0},{"ddd":0,"ind":97,"ty":4,"nm":"ZVEZDA 17","parent":98,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[79.997]},{"t":46,"s":[123.151]}]},"p":{"a":0,"k":[-5.578,204.735,0]},"a":{"a":0,"k":[159.035,247.474,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 238","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 239","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":98,"ty":4,"nm":"samolet 17","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[1.009]},"o":{"x":[0.279],"y":[0.002]},"t":5,"s":[-106.106]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[-147.838]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[-181.054]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[-105.641]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[-142.165]},{"t":64,"s":[-112.742]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.8},"o":{"x":0.335,"y":0.621},"t":5,"s":[212.816,323.001,0],"to":[-11.434,0.042,0],"ti":[21.887,-30.058,0]},{"i":{"x":0.652,"y":0.568},"o":{"x":0.442,"y":0.402},"t":19,"s":[160.478,356.131,0],"to":[-20.176,35.74,0],"ti":[-3.509,-9.643,0]},{"i":{"x":0.716,"y":0.991},"o":{"x":0.36,"y":1},"t":43,"s":[140.226,424.672,0],"to":[2.829,-11.782,0],"ti":[-0.521,0.932,0]},{"t":69,"s":[166.685,402.695,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.691,0.823,0.636],"y":[1,1,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[0.002,0.01,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[0.869,1.033,2.916]},"o":{"x":[0.222,0.222,0.33],"y":[-0.017,0.008,1.956]},"t":13,"s":[72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.525,0.525,0.431],"y":[-0.035,0.039,-1.018]},"t":31,"s":[77.235,46.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[75.02,75,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 240","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 241","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":99,"ty":4,"nm":"Spiral 31","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":20,"s":[332.421]},{"t":50,"s":[320.893]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":15,"s":[242.879,345.759,0],"to":[-26.812,24.117,0],"ti":[8.327,-26.351,0]},{"t":50,"s":[169.377,439.65,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":15,"s":[0,0,100]},{"t":22.615234375,"s":[-27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":15,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":37,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":15,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":37,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":27.691,"s":[0]},{"t":51.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":22.846,"s":[100]},{"t":44,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":15,"op":51,"st":-55,"bm":0},{"ddd":0,"ind":100,"ty":4,"nm":"Spiral 30","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":10,"s":[-220.341]},{"t":40,"s":[-208.813]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":5,"s":[223.26,290.441,0],"to":[-43.434,21.137,0],"ti":[36.9,2.932,0]},{"t":40,"s":[69.714,334.399,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"t":12.615234375,"s":[37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.98006920908,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.687750902363,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":17.691,"s":[0]},{"t":41.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12.846,"s":[100]},{"t":34,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":5,"op":41,"st":-65,"bm":0},{"ddd":0,"ind":101,"ty":4,"nm":"konfetti 75","sr":1,"ks":{"r":{"a":0,"k":-979.416},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[240.569,319.015,0],"to":[21.681,29.212,0],"ti":[-81.297,-55.073,0]},{"t":54,"s":[302.186,467.373,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-124.774,156.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.887197337431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":102,"ty":4,"nm":"konfetti 74","sr":1,"ks":{"r":{"a":0,"k":-869.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":36,"s":[257.009,320.33,0],"to":[16.092,32.172,0],"ti":[6.986,-36.335,0]},{"t":70,"s":[209.208,454.401,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[197.825,173.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-120.783,151.302,100]},{"t":70,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.972456748813,0.219607828178,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":36,"op":71,"st":-115,"bm":0},{"ddd":0,"ind":103,"ty":4,"nm":"konfetti 73","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[40.442,-2.881,0]},{"t":54,"s":[66.6,407.294,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[164.788,144.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-131.161,164.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":104,"ty":4,"nm":"konfetti 72","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":26,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[16.193,-23.676,0]},{"t":60,"s":[186.365,435.484,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33,"s":[170.484,149.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[-138.345,173.302,100]},{"t":60,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.556309060489,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":26,"op":61,"st":-125,"bm":0},{"ddd":0,"ind":105,"ty":4,"nm":"konfetti 71","sr":1,"ks":{"r":{"a":0,"k":-869.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[196.18,265.587,0],"to":[-36.023,17.542,0],"ti":[45.621,6.901,0]},{"t":54,"s":[44.236,257.938,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[176.18,154.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-141.538,177.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":106,"ty":4,"nm":"konfetti 70","sr":1,"ks":{"r":{"a":0,"k":-523.33},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":22,"s":[205.058,294.521,0],"to":[-8.404,25.103,0],"ti":[45.95,2.791,0]},{"t":56,"s":[98.819,317.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[177.319,155.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[-156.403,197.099,100]},{"t":56,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":22,"op":57,"st":-129,"bm":0},{"ddd":0,"ind":107,"ty":4,"nm":"konfetti 69","sr":1,"ks":{"r":{"a":0,"k":-979.416},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[240.569,319.015,0],"to":[21.681,29.212,0],"ti":[-81.297,-55.073,0]},{"t":39,"s":[302.186,467.373,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[167.066,146.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-164.689,206.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":108,"ty":4,"nm":"konfetti 68","sr":1,"ks":{"r":{"a":0,"k":-768.836},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":12,"s":[257.009,320.33,0],"to":[16.092,32.172,0],"ti":[6.986,-36.335,0]},{"t":46,"s":[252.208,453.401,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[164.788,144.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[-127.967,160.302,100]},{"t":46,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.751834106445,0.360784283806,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":12,"op":47,"st":-139,"bm":0},{"ddd":0,"ind":109,"ty":4,"nm":"konfetti 67","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[40.442,-2.881,0]},{"t":39,"s":[66.6,407.294,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[157.953,138.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-127.967,160.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.902237477022,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":110,"ty":4,"nm":"konfetti 66","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":11,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[16.193,-23.676,0]},{"t":45,"s":[76.365,477.484,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[180.737,158.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[-140.74,176.302,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":11,"op":46,"st":-140,"bm":0},{"ddd":0,"ind":111,"ty":4,"nm":"konfetti 65","sr":1,"ks":{"r":{"a":0,"k":-869.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[196.18,265.587,0],"to":[-36.023,17.542,0],"ti":[45.621,6.901,0]},{"t":39,"s":[44.236,257.938,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-120.783,151.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":112,"ty":4,"nm":"konfetti 64","sr":1,"ks":{"r":{"a":0,"k":-523.33},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[205.058,294.521,0],"to":[-8.404,25.103,0],"ti":[45.95,2.791,0]},{"t":41,"s":[98.819,317.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[149.978,131.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[-151.642,191.099,100]},{"t":41,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":113,"ty":4,"nm":"konfetti 63","sr":1,"ks":{"r":{"a":0,"k":-601.021},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[241.556,324.934,0],"to":[-8.404,25.103,0],"ti":[-14.879,-45.869,0]},{"t":39,"s":[175.942,494.834,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[171.623,150.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-108.792,137.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.977439491422,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":114,"ty":4,"nm":"konfetti 62","sr":1,"ks":{"r":{"a":0,"k":-663.719},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":9,"s":[201.113,295.179,0],"to":[-36.023,17.542,0],"ti":[69.786,-36.666,0]},{"t":43,"s":[161.541,438.609,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[154.535,135.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-165.926,209.099,100]},{"t":43,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":9,"op":44,"st":-142,"bm":0},{"ddd":0,"ind":115,"ty":4,"nm":"konfetti 61","sr":1,"ks":{"r":{"a":0,"k":-601.021},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[188.113,329.179,0],"to":[-36.023,17.542,0],"ti":[69.786,-36.666,0]},{"t":39,"s":[33.568,416.07,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[172.762,151.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-178.622,225.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":116,"ty":4,"nm":"ZVEZDA 16","parent":117,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[-71.42]},{"t":46,"s":[2.67]}]},"p":{"a":0,"k":[-20.331,198.348,0]},"a":{"a":0,"k":[159.035,247.474,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 242","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 243","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":117,"ty":4,"nm":"samolet 16","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.638],"y":[0.727]},"o":{"x":[0.295],"y":[0.002]},"t":5,"s":[26.746]},{"i":{"x":[0.668],"y":[1.064]},"o":{"x":[0.326],"y":[2.93]},"t":13,"s":[-3.167]},{"i":{"x":[0.813],"y":[1]},"o":{"x":[0.357],"y":[-0.004]},"t":22,"s":[-5.988]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[-6.579]},{"i":{"x":[0.805],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":45,"s":[33.574]},{"i":{"x":[0.794],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":53,"s":[-19.589]},{"t":64,"s":[3.194]}]},"p":{"a":1,"k":[{"i":{"x":0.651,"y":0.917},"o":{"x":0.317,"y":0.471},"t":5,"s":[262.183,178.677,0],"to":[-0.59,-13.663,0],"ti":[2.172,34.625,0]},{"i":{"x":0.801,"y":0},"o":{"x":0.317,"y":0.575},"t":19,"s":[259.773,97.912,0],"to":[-1.196,-23.906,0],"ti":[4.456,6.509,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.169,"y":1},"t":43,"s":[257.835,81.336,0],"to":[0.054,14.269,0],"ti":[-0.214,-1.045,0]},{"t":69,"s":[267.316,91.362,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.862,0.862,0.636],"y":[0.999,1.001,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[0,0.006,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[1.144,0.958,2.916]},"o":{"x":[0.222,0.222,0.33],"y":[-0.02,0.002,1.956]},"t":13,"s":[72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.43,0.43,0.431],"y":[0.012,-0.029,-1.018]},"t":31,"s":[77.235,46.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.798,0.798,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[84.022,84,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 244","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 245","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":118,"ty":4,"nm":"Spiral 29","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":10,"s":[471.636]},{"t":40,"s":[460.108]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":5,"s":[207.302,179.467,0],"to":[4.548,-35.775,0],"ti":[10.908,25.392,0]},{"t":40,"s":[201.623,60.362,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"t":12.615234375,"s":[-27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":17.691,"s":[0]},{"t":41.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12.846,"s":[100]},{"t":34,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":5,"op":41,"st":-65,"bm":0},{"ddd":0,"ind":119,"ty":4,"nm":"Spiral 28","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":10,"s":[-81.126]},{"t":40,"s":[-69.598]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":5,"s":[258.292,208.536,0],"to":[19.079,-44.376,0],"ti":[-29.854,21.884,0]},{"t":40,"s":[345.838,74.953,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"t":12.615234375,"s":[37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.014825066398,0.945098039216,0.05860266218,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.686274509804,0.032295301849,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":17.691,"s":[0]},{"t":41.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12.846,"s":[100]},{"t":34,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":5,"op":41,"st":-65,"bm":0},{"ddd":0,"ind":120,"ty":4,"nm":"konfetti 60","sr":1,"ks":{"r":{"a":0,"k":-840.201},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[226.52,198.207,0],"to":[-35.498,-7.956,0],"ti":[97.53,-11.406,0]},{"t":54,"s":[82.956,126.125,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[157.953,138.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-123.976,155.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":121,"ty":4,"nm":"konfetti 59","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":36,"s":[213.214,207.951,0],"to":[-33.199,-13.848,0],"ti":[18.445,32.075,0]},{"t":70,"s":[129.924,104.057,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[169.345,148.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-142.337,178.302,100]},{"t":70,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.781914505304,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":36,"op":71,"st":-115,"bm":0},{"ddd":0,"ind":122,"ty":4,"nm":"konfetti 58","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[-28.74,28.599,0]},{"t":54,"s":[300.579,17.725,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-143.933,180.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":123,"ty":4,"nm":"konfetti 57","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":26,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[3.205,28.504,0]},{"t":60,"s":[191.482,74.614,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33,"s":[168.206,147.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[-123.976,155.302,100]},{"t":60,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.556309060489,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":26,"op":61,"st":-125,"bm":0},{"ddd":0,"ind":124,"ty":4,"nm":"konfetti 56","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[295.031,209.665,0],"to":[15.817,-36.814,0],"ti":[-39.051,24.576,0]},{"t":54,"s":[415.074,116.203,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[176.18,154.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-164.689,206.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.887197337431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":125,"ty":4,"nm":"konfetti 55","sr":1,"ks":{"r":{"a":0,"k":-384.115},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":22,"s":[269.408,164.557,0],"to":[-10.035,-24.497,0],"ti":[-36.615,27.902,0]},{"t":56,"s":[334.658,106.55,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[-160.371,202.099,100]},{"t":56,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":22,"op":57,"st":-129,"bm":0},{"ddd":0,"ind":126,"ty":4,"nm":"konfetti 54","sr":1,"ks":{"r":{"a":0,"k":-840.201},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[226.52,198.207,0],"to":[-35.498,-7.956,0],"ti":[97.53,-11.406,0]},{"t":39,"s":[82.956,126.125,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[159.092,139.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-150.32,188.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":127,"ty":4,"nm":"konfetti 53","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":12,"s":[213.214,207.951,0],"to":[-33.199,-13.848,0],"ti":[18.445,32.075,0]},{"t":46,"s":[129.924,104.057,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[176.18,154.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[-139.942,175.302,100]},{"t":46,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":12,"op":47,"st":-139,"bm":0},{"ddd":0,"ind":128,"ty":4,"nm":"konfetti 52","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[-28.74,28.599,0]},{"t":39,"s":[300.579,17.725,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-146.328,183.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.766874246036,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":129,"ty":4,"nm":"konfetti 51","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":11,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[3.205,28.504,0]},{"t":45,"s":[191.482,74.614,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[211.495,185.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[-164.689,206.302,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":11,"op":46,"st":-140,"bm":0},{"ddd":0,"ind":130,"ty":4,"nm":"konfetti 50","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[295.031,209.665,0],"to":[15.817,-36.814,0],"ti":[-39.051,24.576,0]},{"t":39,"s":[415.074,116.203,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[157.953,138.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-164.689,206.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":131,"ty":4,"nm":"konfetti 49","sr":1,"ks":{"r":{"a":0,"k":-384.115},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[269.408,193.557,0],"to":[-10.035,-24.497,0],"ti":[-36.615,27.902,0]},{"t":41,"s":[334.658,106.55,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[170.484,149.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[-142.913,180.099,100]},{"t":41,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":132,"ty":4,"nm":"konfetti 48","sr":1,"ks":{"r":{"a":0,"k":-343.43},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[221.907,194.371,0],"to":[-10.035,-24.497,0],"ti":[41.229,25.011,0]},{"t":39,"s":[160.524,25.129,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[143.143,125.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-181.003,228.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.962399052639,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":133,"ty":4,"nm":"konfetti 47","sr":1,"ks":{"r":{"a":0,"k":-524.504},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":9,"s":[271.966,190.482,0],"to":[15.817,-36.814,0],"ti":[-28.889,73.348,0]},{"t":43,"s":[208.237,56.032,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[186.433,163.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-174.655,220.099,100]},{"t":43,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":9,"op":44,"st":-142,"bm":0},{"ddd":0,"ind":134,"ty":4,"nm":"konfetti 46","sr":1,"ks":{"r":{"a":0,"k":-461.806},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[271.966,190.482,0],"to":[15.817,-36.814,0],"ti":[-28.889,73.348,0]},{"t":39,"s":[357.907,50.447,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-174.655,220.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":135,"ty":4,"nm":"ZVEZDA 13","parent":136,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[79.997]},{"t":46,"s":[123.151]}]},"p":{"a":0,"k":[-5.578,204.735,0]},"a":{"a":0,"k":[159.035,247.474,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[2.285,-4.802],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[0.326,0.656],[-0.04,0.272],[0,0],[6.166,1.812],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-1.944,4.085],[0,0],[-1.236,1.211],[0,0],[-1.257,7.912],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-0.649,0.33],[-0.122,-0.245],[0,0],[-3.398,-3.594],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.022,-27.622],[-12.989,-23.914],[-5.233,-28.121],[9.422,-29.733],[63.935,-40.256],[74.003,-39.25],[80.271,-33.077],[74.627,0.396],[69.484,6.312],[15.868,6.066],[60.868,26.43],[64.792,35.761],[55.711,74.587],[49.655,77.673],[7.888,50.594],[5.74,49.395],[-12.093,39.836],[-16.018,36.993],[-17.784,36.402],[-17.909,35.607],[-21.125,33.333],[-27.333,26.503],[-33.932,22.76],[-33.035,20.04],[-35.099,18.938],[-44.939,12.209],[-73.949,-6.341],[-71.861,-19.71],[-73.371,-19.12],[-64.346,-22.404],[-29.528,-26.548]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[104.674,7.197],[109.748,5.625],[111.32,10.699],[20.96,22.87],[7.428,24.199],[-31.051,27.942],[-35.274,24.719],[-32.051,20.497],[6.429,16.754],[14.313,19.368]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 246","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-9.706,-5.272],[-0.77,0.306],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[2.683,1.457],[19.497,-3.53],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-51.516,40.267],[-40.02,46.244],[58.261,-9.68],[65.928,-9.471],[57.085,-11.96],[2.956,-1.565],[-12.166,-0.049],[-29.785,0.252],[-36.006,1.798],[-71.285,5.735],[-78.565,8.327],[-80.562,21.713]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[0.326,0.656],[-0.04,0.272],[0,0],[7.82,2.18],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-0.843,8.004],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-0.649,0.33],[-0.122,-0.245],[0,0],[-1.927,-2.399],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-22.8,-27.845],[-13.123,-24.311],[-5.499,-28.03],[10.314,-28.853],[63.935,-40.256],[73.913,-39.515],[79.915,-33.252],[74.627,0.396],[69.307,6.667],[15.776,6.48],[60.868,26.43],[64.792,35.761],[55.712,74.587],[49.655,77.673],[7.888,50.594],[5.74,49.395],[-12.093,39.836],[-16.018,36.993],[-17.784,36.402],[-17.909,35.607],[-21.125,33.333],[-27.333,26.503],[-33.932,22.76],[-33.035,20.04],[-35.099,18.938],[-44.939,12.209],[-73.949,-6.341],[-71.861,-19.71],[-72.927,-19.566],[-64.035,-22.362],[-29.661,-26.503]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 247","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":136,"ty":4,"nm":"samolet 13","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[0.993]},"o":{"x":[0.279],"y":[-0.002]},"t":5,"s":[97.495]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[148.312]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[177.469]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[220.487]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[268.456]},{"t":63,"s":[222.176]}]},"p":{"a":1,"k":[{"i":{"x":0.65,"y":0.786},"o":{"x":0.315,"y":0.617},"t":5,"s":[301.833,322.076,0],"to":[14.66,-0.837,0],"ti":[-15.209,-21.663,0]},{"i":{"x":0.655,"y":0.401},"o":{"x":0.319,"y":0.255},"t":19,"s":[354.618,348.665,0],"to":[16.855,28.895,0],"ti":[2.899,-9.844,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.16,"y":1},"t":43,"s":[375.822,425.846,0],"to":[-3.56,-11.582,0],"ti":[0.578,0.897,0]},{"t":69,"s":[358.518,409.879,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.774,0.774,0.636],"y":[0.996,0.997,1]},"o":{"x":[0.529,0.529,0.286],"y":[0.002,0.004,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[1.016,1.018,1]},"o":{"x":[0.222,0.222,0.33],"y":[0.083,-0.013,0]},"t":13,"s":[72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.525,0.525,0.431],"y":[0.003,0.003,0]},"t":31,"s":[77.235,46.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[75.02,75,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 248","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 249","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":73,"st":-27,"bm":0},{"ddd":0,"ind":137,"ty":4,"nm":"Spiral 23","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":5,"s":[-336.006]},{"t":35,"s":[-324.478]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":0,"s":[274.707,344.763,0],"to":[28.268,22.393,0],"ti":[-9.959,-25.779,0]},{"t":35,"s":[353.936,433.875,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":7.615234375,"s":[27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":12.691,"s":[0]},{"t":36.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":7.846,"s":[100]},{"t":29,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":36,"st":-70,"bm":0},{"ddd":0,"ind":138,"ty":4,"nm":"Spiral 22","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":5,"s":[216.756]},{"t":35,"s":[205.229]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":0,"s":[290.83,288.327,0],"to":[44.67,18.38,0],"ti":[-36.644,5.233,0]},{"t":35,"s":[446.823,322.598,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":7.615234375,"s":[-37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.98006920908,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.687750902363,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":12.691,"s":[0]},{"t":36.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":7.846,"s":[100]},{"t":29,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":36,"st":-70,"bm":0},{"ddd":0,"ind":139,"ty":4,"nm":"konfetti 15","sr":1,"ks":{"r":{"a":0,"k":975.831},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":15,"s":[275.34,317.927,0],"to":[-19.812,30.511,0],"ti":[77.694,-60.048,0]},{"t":49,"s":[223.121,469.847,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-208.078,182.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[164.689,206.302,100]},{"t":49,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":15,"op":50,"st":-136,"bm":0},{"ddd":0,"ind":140,"ty":4,"nm":"konfetti 14","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":31,"s":[259.015,320.267,0],"to":[-14.049,33.115,0],"ti":[-9.244,-35.827,0]},{"t":65,"s":[272.127,452.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[114.397,143.302,100]},{"t":65,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.631511015051,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":66,"st":-120,"bm":0},{"ddd":0,"ind":141,"ty":4,"nm":"konfetti 13","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":15,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-40.543,-0.346,0]},{"t":49,"s":[454.489,395.156,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[164.689,206.302,100]},{"t":49,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":15,"op":50,"st":-136,"bm":0},{"ddd":0,"ind":142,"ty":4,"nm":"konfetti 12","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-17.641,-22.617,0]},{"t":55,"s":[336.721,430.779,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[164.689,206.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.556309060489,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":143,"ty":4,"nm":"konfetti 11","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":15,"s":[316.303,261.828,0],"to":[37.05,15.255,0],"ti":[-45.101,9.74,0]},{"t":49,"s":[467.471,244.694,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[164.689,206.302,100]},{"t":49,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":15,"op":50,"st":-136,"bm":0},{"ddd":0,"ind":144,"ty":4,"nm":"konfetti 10","sr":1,"ks":{"r":{"a":0,"k":519.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":17,"s":[309.251,291.261,0],"to":[9.957,24.529,0],"ti":[-45.686,5.658,0]},{"t":51,"s":[416.737,307.829,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[-161.37,141.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[142.913,180.099,100]},{"t":51,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":17,"op":52,"st":-134,"bm":0},{"ddd":0,"ind":145,"ty":4,"nm":"konfetti 3","sr":1,"ks":{"r":{"a":0,"k":975.831},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[275.34,317.927,0],"to":[-19.812,30.511,0],"ti":[77.694,-60.048,0]},{"t":34,"s":[223.121,469.847,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-163.649,143.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[164.689,206.302,100]},{"t":34,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":146,"ty":4,"nm":"konfetti 5","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[259.015,320.267,0],"to":[-14.049,33.115,0],"ti":[-9.244,-35.827,0]},{"t":41,"s":[272.127,452.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[164.689,206.302,100]},{"t":41,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":147,"ty":4,"nm":"konfetti 9","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-40.543,-0.346,0]},{"t":34,"s":[454.489,395.156,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-170.484,149.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[164.689,206.302,100]},{"t":34,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":148,"ty":4,"nm":"konfetti 8","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-17.641,-22.617,0]},{"t":40,"s":[336.721,430.779,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[164.689,206.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":149,"ty":4,"nm":"konfetti 2","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[316.303,261.828,0],"to":[37.05,15.255,0],"ti":[-45.101,9.74,0]},{"t":34,"s":[467.471,244.694,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[164.689,206.302,100]},{"t":34,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":150,"ty":4,"nm":"konfetti 7","sr":1,"ks":{"r":{"a":0,"k":519.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":2,"s":[309.251,291.261,0],"to":[9.957,24.529,0],"ti":[-45.686,5.658,0]},{"t":36,"s":[416.737,307.829,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":2,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[-138.586,121.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[148.468,187.099,100]},{"t":36,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":2,"op":37,"st":-149,"bm":0},{"ddd":0,"ind":151,"ty":4,"nm":"konfetti 4","sr":1,"ks":{"r":{"a":0,"k":597.436},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[274.726,323.896,0],"to":[9.957,24.529,0],"ti":[11.982,-46.71,0]},{"t":34,"s":[352.583,501.275,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-162.51,142.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[171.48,216.099,100]},{"t":34,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":152,"ty":4,"nm":"konfetti 6","sr":1,"ks":{"r":{"a":0,"k":660.134},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":4,"s":[313.229,291.67,0],"to":[37.05,15.255,0],"ti":[-71.942,-32.231,0]},{"t":38,"s":[361.692,432.345,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":4,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[160.371,202.099,100]},{"t":38,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":4,"op":39,"st":-147,"bm":0},{"ddd":0,"ind":153,"ty":4,"nm":"konfetti","sr":1,"ks":{"r":{"a":0,"k":597.436},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[313.229,291.67,0],"to":[37.05,15.255,0],"ti":[-71.942,-32.231,0]},{"t":34,"s":[472.587,331.676,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-179.598,157.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[158.784,200.099,100]},{"t":34,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":154,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"t":40,"s":[0]}]},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[16.82,-13.456],[0,0],[8,-24],[0,0],[-12.649,-12.649],[0,0],[-21,-17],[0,0],[-35,-2],[0,0],[1.612,29.024],[-33,6],[-1.838,15.926],[0,0],[16,12],[-14,16],[9,14],[0,0],[13,-2]],"o":[[0,0],[-10,8],[0,0],[-8,24],[0,0],[8,8],[0,0],[21,17],[0,0],[40.945,2.34],[0,0],[-1,-18],[-1,0],[3,-26],[0,0],[-16,-12],[-31,29],[-11.148,-17.341],[0,0],[-13,2]],"v":[[-167,-197],[-94,-59],[-163,-54],[-118,8],[-243,77],[-102,82],[-105,140],[-50,125],[2,240],[69,118],[137,141],[111,70],[241,33],[109,-19],[135,-61],[83,-61],[166,-185],[26,-116],[0,-173],[-28,-116]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.743990789675,0.298039185767,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.992,0.282,1,0.181,0.996,0.265,0.889,0.363,1,0.247,0.779,0.681,1,0.124,0.848,1,1,0,0.918,0.2,0,0.279,0.44,0.357,0.88,0.679,0.44,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[207,11]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 250","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":155,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"r":{"a":0,"k":268.483},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.231,-200.916],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":156,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"r":{"a":0,"k":176.847},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[222.721,-169.861],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":157,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"r":{"a":0,"k":88.301},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[131.315,-241.227],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":158,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[130,-227],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":159,"ty":3,"nm":"Null 1140","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-8.376},"p":{"a":0,"k":[159,407,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":160,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":70.666,"s":[350.007]},{"t":88,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.72},"o":{"x":0.185,"y":0.498},"t":64,"s":[389.547,413.574,0],"to":[-36.139,-4.041,0],"ti":[40.066,-63.969,0]},{"t":88,"s":[258.627,486.157,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[131.485,147.667,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":161,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":86.666015625,"s":[276.867]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.361},"o":{"x":0.163,"y":1},"t":64,"s":[374.885,399.107,0],"to":[-3.654,1.599,0],"ti":[10.131,-45.986,0]},{"t":88,"s":[347.998,461.819,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[105.329,112.656,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.803321748621,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":162,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[225.375]},{"t":85,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.793},"t":64,"s":[416.909,415.7,0],"to":[18.824,-24.254,0],"ti":[-10.846,-84.473,0]},{"t":85,"s":[487.15,474.972,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-59.119,157.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[141.765,149.285,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":85,"st":-90,"bm":0},{"ddd":0,"ind":163,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":89,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.501},"o":{"x":0.185,"y":0.887},"t":64,"s":[392.909,365.7,0],"to":[28.824,-2.754,0],"ti":[-27.536,-16.102,0]},{"t":89,"s":[499.669,387.029,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-79.002,196.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[144.36,190.738,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":164,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.739]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[-1.453]},"t":79,"s":[250.814]},{"t":88,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.446},"o":{"x":0.185,"y":0.985},"t":64,"s":[374.193,404.929,0],"to":[6.324,-14.754,0],"ti":[0.14,-36.628,0]},{"t":88,"s":[387.757,497.765,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-69.375,172.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[161.011,212.738,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.931580248066,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":165,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":88,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.534},"o":{"x":0.185,"y":0.828},"t":64,"s":[374.193,404.929,0],"to":[18.824,-24.254,0],"ti":[-30.86,-33.628,0]},{"t":88,"s":[475.757,439.265,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[161.011,212.738,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-69.375,172.946,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":166,"ty":4,"nm":"Blesk 32","sr":1,"ks":{"r":{"a":0,"k":-53.192},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[339.882,323.111,0],"to":[13.436,9.746,0],"ti":[-0.748,-22.623,0]},{"t":82,"s":[368.874,382.993,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":74,"s":[156.328,156.328,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":89,"st":63,"bm":0},{"ddd":0,"ind":167,"ty":4,"nm":"manetka 37","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[-0.052]},"t":64,"s":[226.232]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.429},"o":{"x":0.185,"y":0.417},"t":64,"s":[373.05,414.429,0],"to":[44.491,4.017,0],"ti":[-8.449,-27.643,0]},{"t":89,"s":[478.527,494.093,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[141.075,141.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 251","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 252","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-93,"bm":0},{"ddd":0,"ind":168,"ty":4,"nm":"manetka 36","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.052]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[15.103]},{"t":87,"s":[226.232]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.375},"o":{"x":0.185,"y":0.456},"t":64,"s":[410.05,397.429,0],"to":[-18.509,-57.983,0],"ti":[-31.449,8.357,0]},{"t":87,"s":[486.527,322.093,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[104.075,104.075,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 253","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 254","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-93,"bm":0},{"ddd":0,"ind":169,"ty":4,"nm":"manetka 35","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[149.946]},{"t":83,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.75},"o":{"x":0.185,"y":0.445},"t":64,"s":[363.195,429.519,0],"to":[-2.432,-26.956,0],"ti":[50.972,2.748,0]},{"t":83,"s":[261.711,344.544,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72.334,"s":[177.421,177.421,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 255","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 256","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-91,"bm":0},{"ddd":0,"ind":170,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.654},"o":{"x":0.185,"y":0.615},"t":64,"s":[326.855,383.244,0],"to":[-50.165,11.195,0],"ti":[21.829,-46.171,0]},{"t":89,"s":[220.792,443.639,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[166.973,198.197,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.764844228707,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":171,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.624},"o":{"x":0.185,"y":0.669},"t":64,"s":[360.355,376.744,0],"to":[-7.665,-39.305,0],"ti":[-25.171,9.829,0]},{"t":89,"s":[412.292,278.639,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[166.973,198.197,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":172,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.972]},"t":74,"s":[27.726]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.175},"o":{"x":0.126,"y":1},"t":64,"s":[371.855,407.244,0],"to":[-3.718,-13.17,0],"ti":[5.076,-13.025,0]},{"t":89,"s":[325.031,404.74,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[171.277,171.73,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":173,"ty":4,"nm":"Blesk 31","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[175.482]},{"t":82,"s":[28.044]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[393.005,432.028,0],"to":[-7.131,-3.583,0],"ti":[7.131,3.583,0]},{"t":82,"s":[350.217,410.531,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":72,"s":[159.443,159.443,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":82,"st":48,"bm":0},{"ddd":0,"ind":174,"ty":4,"nm":"zvezda 9","sr":1,"ks":{"r":{"a":0,"k":0.733},"p":{"a":0,"k":[383.887,401.249,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[46.023,46.023,100]},{"t":83,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.964705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":83,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":83,"st":-61,"bm":0},{"ddd":0,"ind":175,"ty":4,"nm":"Zvezda svet 9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[100]},{"t":83,"s":[0]}]},"r":{"a":0,"k":37.75},"p":{"a":0,"k":[383.15,409.077,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77,"s":[52.788,52.788,100]},{"t":83,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.988,0,0.5,1,0.965,0,1,1,0.941,0,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 257","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":83,"st":-61,"bm":0},{"ddd":0,"ind":176,"ty":4,"nm":"Blesk 26","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-160.379]},{"t":32,"s":[-12.942]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[196.78,336.956,0],"to":[-11.75,2.667,0],"ti":[11.75,-2.667,0]},{"t":32,"s":[126.28,352.956,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[-101.169,101.169,100]},{"t":32,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":8,"op":32,"st":-5,"bm":0},{"ddd":0,"ind":177,"ty":4,"nm":"Blesk 7","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-160.379]},{"t":32,"s":[-12.942]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[293.78,197.956,0],"to":[5.25,-6.167,0],"ti":[-5.25,6.167,0]},{"t":32,"s":[325.28,160.956,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[-155.169,155.169,100]},{"t":32,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":8,"op":32,"st":-5,"bm":0},{"ddd":0,"ind":178,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.998]},"o":{"x":[0.405],"y":[0.006]},"t":7.285,"s":[224.555]},{"t":18,"s":[158.279]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.692},"t":3,"s":[330.879,229.853,0],"to":[34.552,3.21,0],"ti":[-56.851,15.113,0]},{"t":18,"s":[468.305,207.731,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.285,"s":[92.754,92.754,100]},{"t":18,"s":[5.32,140.393,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.182929723403,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":18,"st":3,"bm":0},{"ddd":0,"ind":179,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.995]},"o":{"x":[0.405],"y":[0.012]},"t":5.535,"s":[224.555]},{"t":15.673828125,"s":[194.219]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.604},"t":3,"s":[336.093,293.074,0],"to":[42.377,7.767,0],"ti":[0.31,-28.402,0]},{"t":18,"s":[462.607,382.139,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.285,"s":[66.196,66.196,100]},{"t":18,"s":[-20,146.949,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.968166097005,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":18,"st":3,"bm":0},{"ddd":0,"ind":180,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[1.006]},"o":{"x":[0.405],"y":[-0.015]},"t":5.535,"s":[224.555]},{"t":15.673828125,"s":[248.913]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.554},"t":3,"s":[283.558,305.163,0],"to":[75.379,80.787,0],"ti":[35.835,-5.797,0]},{"t":18,"s":[300.098,449.494,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.285,"s":[85.596,85.596,100]},{"t":18,"s":[0.77,111.855,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.498039245605,0.988235353956,0.086274509804,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":18},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":18,"st":3,"bm":0},{"ddd":0,"ind":181,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.997]},"o":{"x":[0.405],"y":[0.007]},"t":5.666,"s":[98]},{"t":18.78125,"s":[31.724]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.581},"t":3,"s":[195.303,220.26,0],"to":[-18,-29.667,0],"ti":[46,36.667,0]},{"t":18.78125,"s":[76.803,103.76,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.51,"s":[60.628,60.628,100]},{"t":18.78125,"s":[0.741,59.508,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.182929723403,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":18},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":182,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18.78125,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.995]},"o":{"x":[0.405],"y":[0.012]},"t":5.666,"s":[98]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":16.334,"s":[67.664]},{"t":18.78125,"s":[94.142]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.756},"t":3,"s":[252.303,165.26,0],"to":[-19,-38.667,0],"ti":[-23,16.667,0]},{"t":18.78125,"s":[245.803,43.76,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.51,"s":[88.196,88.196,100]},{"t":18.78125,"s":[-1.563,70.464,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.968166097005,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":183,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[1.003]},"o":{"x":[0.405],"y":[-0.007]},"t":5.705,"s":[98]},{"t":19,"s":[164.813]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.446},"t":3,"s":[293.303,200.26,0],"to":[20,-108.667,0],"ti":[-26,-25.333,0]},{"t":19,"s":[459.803,121.76,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[90.196,90.196,100]},{"t":19,"s":[-1.707,74.473,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.490196108351,0.972549079446,0.164705882353,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":184,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.997]},"o":{"x":[0.405],"y":[0.007]},"t":5.705,"s":[-34.436]},{"t":19,"s":[-100.711]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.551},"t":3,"s":[254.579,326.913,0],"to":[-32.749,22.303,0],"ti":[-41.978,-90.691,0]},{"t":19,"s":[237.206,485.893,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[80.628,80.628,100]},{"t":19,"s":[-5.699,91,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.182929723403,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":185,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.376],"y":[-0.018]},"t":5.705,"s":[-34.436]},{"t":19,"s":[-10.928]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.574},"t":3,"s":[191.526,319.957,0],"to":[-16.717,65.114,0],"ti":[27.82,5.729,0]},{"t":19,"s":[47.781,377.01,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[118.196,118.196,100]},{"t":19,"s":[26.737,118.196,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.968166097005,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":186,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[1.005]},"o":{"x":[0.405],"y":[-0.013]},"t":5.705,"s":[-34.436]},{"t":19,"s":[1.052]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.513},"t":3,"s":[193.691,271.081,0],"to":[-93.695,14.564,0],"ti":[-1.153,36.283,0]},{"t":19,"s":[51.408,181.167,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[73.196,73.196,100]},{"t":19,"s":[-6.575,86.765,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"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":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.416378245634,1,0.098039208206,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":187,"ty":4,"nm":"zvezda svet 1","sr":1,"ks":{"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":0,"s":[207.066,207.066,100]},{"t":7.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":6,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.998431384563,1,0.866666674614,1]},{"t":6,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":7},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":7,"st":-9,"bm":0},{"ddd":0,"ind":188,"ty":4,"nm":"zvezda svet 3","sr":1,"ks":{"o":{"a":0,"k":46},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":0,"s":[207.066,207.066,100]},{"t":7.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":6,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.989388619217,1,0.098039208206,1]},{"t":6,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":23},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":7,"st":-9,"bm":0},{"ddd":0,"ind":189,"ty":4,"nm":"zvezda svet 14","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[40]},{"t":14,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":7,"s":[207.066,207.066,100]},{"t":14.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":7,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":14,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0.989388619217,1,0.098039208206,1]},{"t":14,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[40]},{"t":14,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":7,"op":14,"st":-2,"bm":0},{"ddd":0,"ind":190,"ty":4,"nm":"zvezda svet 13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[40]},{"t":11,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":4,"s":[207.066,207.066,100]},{"t":11.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":4,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":11,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[0.989388619217,1,0.098039208206,1]},{"t":11,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[40]},{"t":11,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":4,"op":11,"st":-5,"bm":0},{"ddd":0,"ind":191,"ty":4,"nm":"zvezda svet 12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[40]},{"t":9,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":2,"s":[207.066,207.066,100]},{"t":9.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":2,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":9,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[0.989388619217,1,0.098039208206,1]},{"t":9,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":2,"s":[40]},{"t":9,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":2,"op":9,"st":-7,"bm":0},{"ddd":0,"ind":192,"ty":4,"nm":"zvezda svet 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[40]},{"t":7,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":0,"s":[207.066,207.066,100]},{"t":7.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":7,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.989388619217,1,0.098039208206,1]},{"t":7,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[40]},{"t":7,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":7,"st":-9,"bm":0},{"ddd":0,"ind":193,"ty":4,"nm":"Luch sveta 13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-106.706},"p":{"a":0,"k":[245.145,273.42,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[32.49,-13.813],[51.426,-169.101],[5.538,-258.488],[-28.625,-160.829],[1.637,-3.608],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.309,1,0.974,0.563,0.479,1,0.949,0.125,0.739,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 258","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":194,"ty":4,"nm":"Luch sveta 12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":183.878},"p":{"a":0,"k":[268.492,272.287,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[33.082,-17.102],[46.045,-165.284],[14.903,-165.397],[-21.506,-158.195],[1.498,-7.758],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 259","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":195,"ty":4,"nm":"Luch sveta 11","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":122.287},"p":{"a":0,"k":[276.268,252.761,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[33.721,-14.881],[42.377,-169.937],[5.538,-258.488],[-25.945,-159.394],[0.826,-2.079],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.307,1,0.974,0.563,0.474,1,0.949,0.125,0.737,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 260","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":196,"ty":4,"nm":"Luch sveta 10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":45.668},"p":{"a":0,"k":[257.54,235.532,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[33.454,-15.989],[46.885,-179.865],[5.538,-258.488],[-27.97,-168.651],[0.242,-11.585],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 261","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":197,"ty":4,"nm":"Luch sveta 9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":10,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-50.074},"p":{"a":0,"k":[252.892,235.711,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[-157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[30.671,-11.928],[45.12,-169.727],[5.538,-258.488],[-18.275,-163.089],[2.656,-1.068],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.31,1,0.974,0.563,0.481,1,0.949,0.125,0.741,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 262","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":198,"ty":4,"nm":"Luch sveta 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-106.706},"p":{"a":0,"k":[245.145,273.42,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.309,1,0.974,0.563,0.479,1,0.949,0.125,0.739,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 263","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":199,"ty":4,"nm":"Luch sveta 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":183.878},"p":{"a":0,"k":[268.492,272.287,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 264","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":200,"ty":4,"nm":"Luch sveta 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":122.287},"p":{"a":0,"k":[276.268,252.761,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.307,1,0.974,0.563,0.474,1,0.949,0.125,0.737,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 265","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":201,"ty":4,"nm":"Luch sveta 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":45.668},"p":{"a":0,"k":[257.54,235.532,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 266","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":202,"ty":4,"nm":"Luch sveta 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-50.074},"p":{"a":0,"k":[252.892,235.711,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[-157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[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]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[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]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[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]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.31,1,0.974,0.563,0.481,1,0.949,0.125,0.741,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 267","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":203,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11.902,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12.732,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18.537,"s":[100]},{"t":21.853515625,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"s":{"a":0,"k":[75.063,75.063,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[7.63,12.716],[14,-33],[-21,-43],[-20.229,19.616],[-0.112,109.698],[7.797,-7.631],[4.022,-6.911],[14.599,-10.388],[13.34,0.037],[15.243,9.298],[-7.687,24.54],[0.73,2.776],[7.842,6.659],[-4.345,14.316],[-5.841,3.114],[-13.823,-0.41],[-7.686,-6.903],[-6.148,-14.105],[4.014,-4.363],[0.045,2.152]],"o":[[-18,-30],[-14,33],[21,43],[16.845,-16.335],[0,-0.137],[-4.509,4.413],[-2.089,2.757],[-13.836,14.229],[-12.502,-0.035],[-9.11,-5.557],[3.241,-10.347],[-0.565,-2.147],[-4.417,-3.75],[4.344,-14.316],[4.413,-2.353],[19.019,0.564],[3.305,2.089],[4.47,10.254],[15.005,-2.032],[-1.55,-74.835]],"v":[[313.604,-295.275],[-300.282,-290.611],[-306.275,297.94],[304.604,309.604],[325.58,10.323],[79.779,7.244],[66.535,25.386],[58.672,85.991],[-1.726,83.562],[-57.208,87.287],[-67.187,41.321],[-56.017,24.867],[-75.119,13.991],[-95.934,-21.654],[-43.38,-43.609],[-2.033,-92.154],[39.326,-44.72],[90.451,-23.576],[79.916,7.028],[325.489,6.493]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.917646998985,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.991,1,0.263,0.292,0.991,1,0.263,0.585,0.991,1,0.263,0.792,0.992,1,0.263,1,0.992,1,0.263,0,0,0.139,0,0.278,0,0.432,0.33,0.587,0.66,0.876,0.33,1,0]}},"s":{"a":0,"k":[2,2]},"e":{"a":0,"k":[321.94,5.987]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 268","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":22,"st":-8,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/stars_send.json b/TMessagesProj/src/main/res/raw/stars_send.json new file mode 100644 index 000000000..d737d67a7 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/stars_send.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":140,"w":512,"h":512,"nm":"Prem Star Move 6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 2","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[259,267,0]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.481,0.481,0.3],"y":[0,0,0]},"t":14,"s":[100,100,100]},{"i":{"x":[0.568,0.568,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":67,"s":[112,112,100]},{"t":110,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Star Main","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.766],"y":[0.974]},"o":{"x":[0.449],"y":[0]},"t":14,"s":[-14]},{"i":{"x":[0.473],"y":[0.884]},"o":{"x":[0.086],"y":[-0.023]},"t":23,"s":[12]},{"i":{"x":[0.762],"y":[1]},"o":{"x":[0.465],"y":[-0.42]},"t":36,"s":[-4]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.341],"y":[0]},"t":56,"s":[2]},{"i":{"x":[0.84],"y":[1]},"o":{"x":[1],"y":[0]},"t":80,"s":[-5]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.311],"y":[0]},"t":113,"s":[20]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":127,"s":[-2]},{"t":138,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.41,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[-2.939,-7.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.6,"y":0.871},"o":{"x":0.582,"y":0},"t":14,"s":[-49.939,-15.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.947},"o":{"x":0.5,"y":0.229},"t":31,"s":[25.061,-1.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.942},"o":{"x":0.5,"y":0.085},"t":54,"s":[-44.939,-21.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.685,"y":0.939},"o":{"x":0.5,"y":0.086},"t":78,"s":[32.587,-5.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.961},"o":{"x":0.7,"y":0.102},"t":102,"s":[-56.939,3.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.299,"y":1},"o":{"x":0.211,"y":0.038},"t":119,"s":[27.061,2.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":129,"s":[-4.939,-13.668,0],"to":[0,0,0],"ti":[0,0,0]},{"t":139,"s":[-2.939,-7.668,0]}]},"a":{"a":0,"k":[0.061,3.332,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.41,0.41,0.41],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":5,"s":[105,95,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.582,0.582,0.582],"y":[0,0,0]},"t":14,"s":[95,105,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":31,"s":[105,95,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":54,"s":[95,105,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":78,"s":[105,95,100]},{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":102,"s":[95,105,100]},{"i":{"x":[0.51,0.51,0.51],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":110,"s":[110,88,100]},{"i":{"x":[0.299,0.299,0.299],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":119,"s":[92,108,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":129,"s":[103,98,100]},{"t":139,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.365,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-160.353,-21.808],[-59.929,-27.356],[-59.783,-27.348],[-49.876,-27.78]],"c":false}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-101.489,-109.455],[50.336,-69.786],[50.363,-69.803],[50.75,-69.351]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-160.353,-21.808],[-49.865,-27.886],[-49.72,-27.878],[-49.876,-27.78]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-101.489,-109.455],[50.336,-69.786],[50.363,-69.803],[50.75,-69.351]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0,0],[0,0],[-0.398,0.543],[0,0]],"o":[[0,0],[0.789,-0.13],[0,0],[0,0]],"v":[[-124.757,-82.678],[-35.133,-66.919],[-0.878,-61.071],[18.338,-59.168]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":122,"s":[{"i":[[0,0],[0,0],[-5.099,9.023],[0,0]],"o":[[0,0],[10.098,-2.161],[0,0],[0,0]],"v":[[-165.102,-42.752],[-73.877,-56.85],[-44.041,-76.213],[-6.416,-153.714]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":123,"s":[{"i":[[0,0],[0,0],[-5.105,9.01],[0,0]],"o":[[0,0],[10.092,-2.138],[0,0],[0,0]],"v":[[-156.761,-43.622],[-68.056,-55.46],[-37.593,-75.02],[2.989,-150.073]],"c":false}]},{"t":133,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.365],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":11,"s":[17]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":28,"s":[5]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":51,"s":[14]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":98,"s":[14]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[16]},{"t":122,"s":[17]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":28,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":51,"s":[70]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[100]},{"i":{"x":[0.52],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":98,"s":[70]},{"t":122,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[4.536,0.898],[0,0],[1.5,0.009],[1.9,0.026],[0,0],[10.009,-0.844],[0,0],[1.231,-6.792],[-1.739,-0.736],[0,0],[-12.212,2.009],[0,0],[-1.716,-2.436],[-0.155,-0.293],[-21.112,3.146]],"o":[[-7.445,0.134],[0,0],[-0.8,-0.001],[-2.7,-0.016],[0,0],[0,0],[0,0],[-1.696,0.196],[-4.177,9.621],[0,0],[3.87,1.598],[0,0],[3.474,-0.596],[0.202,0.291],[8.522,-0.984],[0,0]],"v":[[75.983,-37.957],[49.009,-35.76],[18.304,-33.369],[5.057,-33.05],[-1.884,-32.424],[-38.157,-30.302],[-71.791,-28.108],[-160.933,-25.456],[-172.798,-20.003],[-160.408,-3.83],[-152.795,0.611],[-113.395,0.769],[53.673,-20.883],[62.176,-18.996],[62.689,-18.118],[163.596,-42.187]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[8.436,1.476],[0,0],[1.5,0.01],[1.9,0.029],[0,0],[0,0],[0,0],[1.6,-1.391],[-4.3,-2.384],[0,0],[-12.3,1.559],[0,0],[-2.528,-4.569],[-0.223,-0.546],[-9.597,5.244]],"o":[[-12.088,-1.27],[0,0],[-0.8,-0.001],[-2.7,-0.018],[0,0],[0,0],[0,0],[-2.6,0.199],[-2.8,2.517],[0,0],[9.6,7.246],[0,0],[5.576,-0.75],[0.297,0.546],[1.463,-0.904],[0,0]],"v":[[76.477,-41.662],[47.571,-44.223],[10.756,-47.485],[6.967,-47.964],[-2.752,-48.728],[-46.484,-52.864],[-73.559,-54.867],[-162.268,-63.742],[-168.968,-61.491],[-166.268,-51.424],[-135.191,-23.984],[-98.199,-14.26],[63.486,-25.925],[77.018,-19.446],[77.761,-17.81],[146.771,-36.073]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[4.536,0.898],[0,0],[1.5,0.009],[1.9,0.026],[0,0],[10.009,-0.844],[0,0],[1.231,-6.792],[-1.739,-0.736],[0,0],[-12.212,2.009],[0,0],[-1.716,-2.436],[-0.155,-0.293],[-21.112,3.146]],"o":[[-7.445,0.134],[0,0],[-0.8,-0.001],[-2.7,-0.016],[0,0],[0,0],[0,0],[-1.696,0.196],[-4.177,9.621],[0,0],[3.87,1.598],[0,0],[3.474,-0.596],[0.202,0.291],[8.522,-0.984],[0,0]],"v":[[75.983,-37.957],[49.009,-35.76],[18.304,-33.369],[5.057,-33.05],[-1.884,-32.424],[-38.157,-30.302],[-71.791,-28.108],[-160.933,-25.456],[-172.798,-20.003],[-160.408,-3.83],[-152.795,0.611],[-113.395,0.769],[53.673,-20.883],[62.176,-18.996],[62.689,-18.118],[163.596,-42.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":98,"s":[{"i":[[0,0],[8.436,1.476],[0,0],[1.5,0.01],[1.9,0.029],[0,0],[0,0],[0,0],[1.6,-1.391],[-4.3,-2.384],[0,0],[-12.3,1.559],[0,0],[-2.528,-4.569],[-0.223,-0.546],[-9.597,5.244]],"o":[[-12.088,-1.27],[0,0],[-0.8,-0.001],[-2.7,-0.018],[0,0],[0,0],[0,0],[-2.6,0.199],[-2.8,2.517],[0,0],[9.6,7.246],[0,0],[5.576,-0.75],[0.297,0.546],[1.463,-0.904],[0,0]],"v":[[76.477,-41.662],[47.571,-44.223],[10.756,-47.485],[6.967,-47.964],[-2.752,-48.728],[-46.484,-52.864],[-73.559,-54.867],[-162.268,-63.742],[-168.968,-61.491],[-166.268,-51.424],[-135.191,-23.984],[-98.199,-14.26],[63.486,-25.925],[77.018,-19.446],[77.761,-17.81],[146.771,-36.073]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0,0],[8.501,1.784],[0,0],[1.556,0.043],[1.946,-0.232],[0,0],[0.797,-0.124],[0,0],[1.654,-1.166],[-4.489,-1.97],[0,0],[-12.783,1.311],[0,0],[-2.681,-3.798],[-0.236,-0.454],[-11.392,5.38]],"o":[[-12.509,-1.033],[0,0],[-0.836,-0.098],[-2.799,-0.077],[0,0],[-0.338,0.568],[0,0],[-2.702,0.177],[-2.894,2.11],[0,0],[10.021,5.81],[0,0],[5.915,-0.624],[0.316,0.454],[3.433,-1.658],[0,0]],"v":[[101.787,-39.946],[57.573,-31.975],[18.188,-38.774],[14.258,-39.334],[4.207,-39.636],[-40.197,-38.182],[-68.26,-38.472],[-160.374,-43.903],[-167.326,-41.997],[-164.446,-33.614],[-131.813,-11.759],[-93.577,-4.081],[52.621,0.187],[66.47,14.683],[67.259,16.044],[186.339,-13.715]],"c":true}]},{"i":{"x":0.9,"y":1},"o":{"x":0.3,"y":0},"t":122,"s":[{"i":[[0,0],[5.195,11.541],[0,0],[1.484,0.629],[1.575,-4.215],[0,0],[10.207,-2.064],[0,0],[1.619,-2.243],[-4.483,-3.668],[0,0],[-12.652,2.092],[0,0],[-2.489,-5.349],[-0.22,-0.639],[-27.933,25.035]],"o":[[-11.64,-1.574],[0,0],[-0.87,-1.619],[-2.668,-1.069],[0,0],[-4.329,9.443],[0,0],[-2.675,0.38],[-2.832,4.056],[0,0],[10.006,8.044],[0,0],[5.49,-0.878],[0.293,0.639],[19.765,-12.535],[0,0]],"v":[[72.747,-64.357],[45.715,-85.655],[-0.738,-160.224],[-4.513,-163.631],[-13.792,-159.278],[-50.486,-82.718],[-78.647,-64.408],[-165.84,-51.547],[-172.696,-47.812],[-169.669,-29.939],[-134.858,-2.041],[-98.682,5.967],[3.603,-9.084],[19.146,-2.336],[19.436,1.098],[112.294,-64.269]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.1,"y":0},"t":123,"s":[{"i":[[0,0],[5.201,11.525],[0,0],[1.485,0.631],[1.585,-4.205],[0,0],[10.201,-2.04],[0,0],[1.522,-2.305],[-4.629,-3.472],[0,0],[-12.541,2.615],[0,0],[-4.873,-10.376],[-0.229,-0.665],[-28.029,24.916]],"o":[[-11.654,-1.572],[0,0],[-0.868,-1.619],[-2.669,-1.073],[0,0],[-4.334,9.429],[0,0],[-2.654,0.491],[-2.656,4.164],[0,0],[10.326,7.607],[0,0],[5.729,-0.914],[0.311,0.662],[20.623,-13.045],[0,0]],"v":[[75.817,-61.467],[49.543,-86.728],[9.397,-157.217],[5.625,-160.627],[-3.674,-156.3],[-46.038,-82.287],[-72.573,-62.596],[-160.936,-50.065],[-167.623,-46.053],[-163.962,-30.342],[-132.511,-7.01],[-103.058,7.214],[3.79,-4.392],[23.689,6.753],[23.049,5.979],[115.919,-58.72]],"c":true}]},{"t":133,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":11,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":106,"s":[0]},{"t":122,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.41,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":12,"s":[{"i":[[-2.358,4.807],[0,0],[0,0],[-9.522,-4.534],[-1.814,-3.809],[0,0],[-7.074,-0.907],[0,0],[1.324,-11.25],[3.265,-3.265],[0,0],[-0.453,-3.628],[0,0],[9.063,-2.288],[4.172,2.267],[0,0],[4.988,-2.63],[0,0],[5.042,10.085],[-0.726,5.079],[0,0],[-17.231,8.888],[0,0],[16.614,-4.327],[0,0],[11.518,9.432],[0,0],[-7.462,9.23],[-5.351,0.726],[0,0]],"o":[[0,0],[0,0],[4.716,-9.16],[3.718,1.814],[0,0],[4.423,11.793],[0,0],[11.88,1.451],[-0.544,4.625],[0,0],[-2.63,2.63],[0,0],[1.542,12.424],[-4.625,0.544],[0,0],[-6.348,-3.265],[0,0],[-9.976,5.169],[-1.904,-3.809],[0,0],[4.899,-16.76],[0,0],[15.65,-12.576],[0,0],[-14.692,2.086],[0,0],[-8.797,-6.892],[3.446,-4.262],[0,0],[5.26,-0.544]],"v":[[-51.918,-67.483],[-31.884,-109.017],[-11.85,-150.552],[3.469,-161.051],[10.929,-148.505],[47.553,-73.539],[75.775,-51.95],[150.598,-43.581],[170.533,-31.778],[161.799,-18.729],[92.791,46.751],[89.979,56.001],[103.031,147.532],[92.682,168.128],[78.549,164.34],[10.856,126.608],[-11.326,125.027],[-78.918,159.969],[-102.675,160.533],[-101.98,142.673],[-96.411,106.67],[-59.132,71.174],[14.656,32.053],[5.241,-0.278],[-97.779,14.83],[-133.903,3.511],[-164.246,-20.961],[-169.331,-38.599],[-152.785,-42.781],[-74.668,-53.057]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.685,-1.014],[3.323,-2.717],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.537,0.665],[5.777,3.334],[0,0],[-14.716,3.843],[0,0],[25.169,-4.132],[0,0],[4.72,1.583],[0,0],[0.109,3.451],[-3.552,0.394],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[9.267,-0.792],[-0.937,1.387],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.198,2.614],[-10.402,-0.6],[0,0],[2.478,-3.091],[0,0],[18.642,-5.659],[0,0],[-14.842,2.034],[0,0],[-4.231,-2.538],[-0.097,-3.072],[0,0],[5.357,-0.287]],"v":[[-60.725,-32.175],[-39.48,-33.258],[-18.234,-34.34],[16.973,-35.598],[16.5,-34.942],[58.242,-37.463],[68.153,-37.588],[145.089,-41.221],[166.816,-42.229],[155.193,-32.381],[104.899,1.678],[103.917,2.656],[73.739,22.347],[73.456,22.562],[73.035,22.904],[72.401,23.341],[44.464,41.414],[14.473,59.827],[-19.528,72.001],[-43.843,62.879],[-92.071,32.095],[-57.971,20.11],[63.118,-9.411],[54.389,-28.862],[-112.468,-10.288],[-154.071,-9.932],[-164.065,-13.536],[-173.927,-24.868],[-157.635,-28.29],[-71.553,-32.356]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.516,-9.156],[3.141,-3.181],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.306,1.117],[2.892,15.404],[0,0],[-24.126,9.096],[0,0],[28.671,-1.78],[0,0],[12.618,12.351],[0,0],[-9.177,7.131],[-14.19,-4.68],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[14.295,3.769],[4.102,10.684],[0,0],[-2.376,2.37],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-12.044,10.852],[-10.326,-1.829],[0,0],[-1.422,-8.733],[0,0],[22.409,-8.738],[0,0],[-14.887,1.939],[0,0],[-6.312,-8.613],[4.238,-3.293],[0,0],[0,0]],"v":[[-41.901,-97.259],[-21.502,-91.633],[-1.103,-86.007],[32.821,-77.159],[33.13,-77.138],[69.76,-67.046],[87.225,-62.366],[160.866,-42.206],[187.615,-24.225],[173.626,4.464],[124.466,57.509],[117.061,65.917],[95.307,90.885],[74.457,114.292],[60.875,128.737],[49.862,139.689],[21.066,171.991],[8.03,185.093],[-17.864,199.414],[-36.727,177.907],[-63.19,91.489],[-45.264,58.32],[63.504,15.536],[51.459,-20.758],[-65.147,-16.168],[-111.12,-27.048],[-160.683,-96.727],[-161.995,-122.567],[-136.124,-122.933],[-65.06,-103.125]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.685,-1.014],[3.323,-2.717],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.537,0.665],[5.777,3.334],[0,0],[-14.716,3.843],[0,0],[25.169,-4.132],[0,0],[4.72,1.583],[0,0],[0.109,3.451],[-3.552,0.394],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[9.267,-0.792],[-0.937,1.387],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.198,2.614],[-10.402,-0.6],[0,0],[2.478,-3.091],[0,0],[18.642,-5.659],[0,0],[-14.842,2.034],[0,0],[-4.231,-2.538],[-0.097,-3.072],[0,0],[5.357,-0.287]],"v":[[-60.725,-32.175],[-39.48,-33.258],[-18.234,-34.34],[16.973,-35.598],[16.5,-34.942],[58.242,-37.463],[68.153,-37.588],[145.089,-41.221],[166.816,-42.229],[155.193,-32.381],[104.899,1.678],[103.917,2.656],[73.739,22.347],[73.456,22.562],[73.035,22.904],[72.401,23.341],[44.464,41.414],[14.473,59.827],[-19.528,72.001],[-43.843,62.879],[-92.071,32.095],[-57.971,20.11],[63.118,-9.411],[54.389,-28.862],[-112.468,-10.288],[-154.071,-9.932],[-164.065,-13.536],[-173.927,-24.868],[-157.635,-28.29],[-71.553,-32.356]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.516,-9.156],[3.141,-3.181],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.306,1.117],[2.892,15.404],[0,0],[-24.126,9.096],[0,0],[28.671,-1.78],[0,0],[12.618,12.351],[0,0],[-9.177,7.131],[-14.19,-4.68],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[14.295,3.769],[4.102,10.684],[0,0],[-2.376,2.37],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-12.044,10.852],[-10.326,-1.829],[0,0],[-1.422,-8.733],[0,0],[22.409,-8.738],[0,0],[-14.887,1.939],[0,0],[-6.312,-8.613],[4.238,-3.293],[0,0],[0,0]],"v":[[-41.901,-97.259],[-21.502,-91.633],[-1.103,-86.007],[32.821,-77.159],[33.13,-77.138],[69.76,-67.046],[87.225,-62.366],[160.866,-42.206],[187.615,-24.225],[173.626,4.464],[124.466,57.509],[117.061,65.917],[95.307,90.885],[74.457,114.292],[60.875,128.737],[49.862,139.689],[21.066,171.991],[8.03,185.093],[-17.864,199.414],[-36.727,177.907],[-63.19,91.489],[-45.264,58.32],[63.504,15.536],[51.459,-20.758],[-65.147,-16.168],[-111.12,-27.048],[-160.683,-96.727],[-161.995,-122.567],[-136.124,-122.933],[-65.06,-103.125]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.06,0.373],[0,0],[-0.481,0.355],[0,0],[0.014,0.122],[0.371,0.009],[0,0],[0.406,0.641],[-3.361,-6.252],[3.137,-2.135],[0.123,-0.24],[0,0],[0.797,-0.115],[0,0],[0.12,-0.128],[-0.363,-0.193],[0,0],[-0.98,0.147],[6.051,0.762],[2.52,10.116],[0.646,-0.256],[-23.151,6.204],[0.18,-0.985],[34.493,-1.782],[-0.098,-0.082],[11.778,8.553],[0,0],[-9.49,4.572],[-13.617,-3.192],[-0.173,0.029]],"o":[[0,0],[-0.075,-0.466],[0,0],[0.102,-0.095],[-0.035,-0.296],[0,0],[-0.91,-0.087],[13.718,2.571],[3.869,7.197],[-0.162,-0.05],[-2.28,1.616],[-0.338,0.524],[0,0],[-0.208,0.028],[-0.2,0.214],[0,0],[0.808,0.422],[-5.676,4.959],[-4.408,-0.339],[0.323,0.501],[-1.364,-5.957],[-1.127,0.449],[21.504,-5.96],[-0.022,0.111],[-14.038,1.538],[0,0],[-5.276,-6.183],[4.067,-2.246],[0.158,0.064],[0.376,-0.07]],"v":[[-20.846,-70.366],[-2.967,-67.624],[16.091,-63.903],[50.728,-56.53],[51.15,-56.916],[85.454,-49.715],[98.925,-47.456],[166.291,-34.254],[194.637,-24.271],[184.754,0.712],[136.962,39.427],[126.425,47.641],[103.635,64.997],[76.497,85.287],[62.832,94.37],[50.896,103.65],[27.017,122.011],[11.835,132.504],[-11.412,141.486],[-26.104,129.911],[-55.194,64.87],[-36.144,47.012],[53.755,17.206],[40.489,-11.969],[-60.11,-9.961],[-104.388,-19.633],[-141.216,-64.185],[-150.524,-90.948],[-112.164,-86.454],[-44.33,-74.543]],"c":true}]},{"i":{"x":0.9,"y":1},"o":{"x":0.7,"y":0},"t":122,"s":[{"i":[[-2.148,4.904],[0,0],[0,0],[-4.918,-2.716],[-1.977,-3.727],[0,0],[-7.106,-0.601],[0,0],[0.836,-11.296],[3.121,-3.403],[0,0],[-0.61,-3.605],[0,0],[8.956,-2.677],[4.266,2.085],[0,0],[4.87,-2.843],[0,0],[5.473,9.858],[-0.505,5.105],[0,0],[-16.831,9.624],[0,0],[12.488,-3.836],[0,0],[11.512,9.439],[0,0],[-7.468,9.225],[-5.351,0.722],[0,0]],"o":[[0,0],[0,0],[0.809,-4.005],[3.793,1.651],[0,0],[4.928,11.591],[0,0],[11.932,0.936],[-0.344,4.644],[0,0],[-2.514,2.741],[0,0],[2.077,12.346],[-4.597,0.743],[0,0],[-6.483,-2.988],[0,0],[-9.743,5.595],[-2.067,-3.723],[0,0],[4.171,-16.956],[0,0],[11.484,-10.075],[0,0],[-14.693,2.077],[0,0],[-8.793,-6.898],[3.449,-4.26],[0,0],[5.26,-0.541]],"v":[[-51.778,-81.665],[-32.882,-119.983],[-13.986,-158.301],[-3.927,-164.012],[5.326,-151.599],[45.151,-83.92],[67.966,-65.078],[142.656,-64.435],[164.63,-52.313],[155.345,-35.603],[91.125,42.98],[88.716,52.343],[101.555,132.878],[90.376,154.47],[76.092,151.296],[11.888,124.333],[-10.34,123.711],[-73.566,156.178],[-97.806,157.038],[-96.74,136.367],[-90.674,101.579],[-57.221,64.344],[14.195,15.178],[5.976,-9.091],[-104.147,6.55],[-140.264,-4.791],[-165.848,-28.007],[-168.692,-49.636],[-159.147,-53.093],[-82.517,-62.801]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.1,"y":0},"t":123,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-2.696,-5.313],[6.82,-3.489],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[5.948,-0.872],[3.41,6.82],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[101.929,147.184],[95.967,65.205],[102.889,38.812],[170.775,-39.525],[173.075,-46.226],[164.015,-56.571],[79.81,-61.475],[52.533,-80.017],[10.193,-155.281],[5.794,-158.881],[-2.706,-154.781],[-44.513,-81.222],[-72.938,-60.093],[-157.539,-47.343],[-164.239,-43.943],[-161.539,-28.743],[-132.608,-4.389],[-104.694,7.154],[5.868,-4.9],[22.32,3.529],[13.21,24.676],[-65.015,74.262],[-93.71,112.928],[-98.861,155.274],[-96.961,161.474],[-85.561,164.074],[-15.385,126],[14.815,126.6],[85.529,159.284],[93.229,160.284]],"c":true}]},{"t":133,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":12,"s":[93.279,197.903],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[66.277,144.932],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[41.865,136.366],"to":[0,0],"ti":[0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[66.277,144.932],"to":[0,0],"ti":[0,0]},{"i":{"x":0.52,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[36.463,131.019],"to":[0,0],"ti":[0,0]},{"t":122,"s":[93.279,197.903]}]},"e":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":12,"s":[-47.232,-173.304],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[5.793,-57.521],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[-14.848,-161.832],"to":[0,0],"ti":[0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[5.793,-57.521],"to":[0,0],"ti":[0,0]},{"i":{"x":0.52,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[-14.848,-161.832],"to":[0,0],"ti":[0,0]},{"t":122,"s":[-47.232,-173.304]}]},"t":1,"nm":"Gradient_xiyQ7W5iHE","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.907,-9.584],[3.6,-3.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.923,0.827],[6.259,4.418],[0,0],[-24.924,4.565],[0,0],[9.296,-1.378],[0,0],[5.114,2.098],[0,0],[-4.892,12.483],[-3.849,0.522],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[8.973,-0.122],[-2.543,3.082],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.465,3.464],[-15.014,-1.041],[0,0],[-23.917,-21.932],[0,0],[9.917,-2.261],[0,0],[-16.082,2.695],[0,0],[-4.584,-3.364],[3.118,-7.958],[0,0],[5.804,-0.381]],"v":[[-64.527,-38.242],[-18.829,-39.819],[18.773,-41.773],[18.57,-41.426],[62.166,-43.544],[75.549,-44.799],[171.452,-48.297],[180.932,-33.736],[173.103,-25.282],[118.861,20.138],[118.145,20.373],[89.829,43.763],[87.752,45.687],[84.659,48.761],[80,52.684],[53.92,72.83],[21.928,97.808],[-15.49,114.443],[-41.789,105.609],[-101.603,56.999],[-68.485,15.706],[55.538,-12.972],[54.066,-19.766],[-118.955,8.83],[-160.488,5.271],[-168.759,0.885],[-188.114,-22.984],[-171.472,-32.477],[-76.567,-37.959]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.971,-10.206],[3.418,-3.461],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[12.236,4.275],[3.264,11.943],[0,0],[-26.253,9.898],[0,0],[10.008,-0.334],[0,0],[13.731,13.44],[0,0],[-9.986,7.759],[-15.441,-5.092],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[15.556,4.102],[4.232,14.538],[0,0],[-2.585,2.579],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-13.106,11.809],[-16.718,-5.841],[0,0],[-1.547,-9.503],[0,0],[5.935,-3.539],[0,0],[-16.2,2.11],[0,0],[-6.869,-9.372],[4.612,-3.583],[0,0],[0,0]],"v":[[-46.584,-109.176],[-2.188,-96.933],[34.727,-87.304],[35.063,-87.281],[74.923,-76.299],[93.928,-71.207],[174.062,-49.27],[202.803,-28.476],[190.565,2.935],[138.567,62.503],[130.509,71.652],[106.837,98.823],[84.148,124.293],[69.369,140.012],[57.385,151.93],[26.049,187.08],[11.864,201.337],[-26.979,213.735],[-55.199,179.102],[-79.873,93.063],[-59.293,50.035],[60.695,3.582],[55.075,-8.916],[-55.373,-1.367],[-118.968,-14.076],[-176.989,-100.667],[-174.629,-135.546],[-149.115,-137.114],[-71.785,-115.56]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.907,-9.584],[3.6,-3.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.923,0.827],[6.259,4.418],[0,0],[-24.924,4.565],[0,0],[9.296,-1.378],[0,0],[5.114,2.098],[0,0],[-4.892,12.483],[-3.849,0.522],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[8.973,-0.122],[-2.543,3.082],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.465,3.464],[-15.014,-1.041],[0,0],[-23.917,-21.932],[0,0],[9.917,-2.261],[0,0],[-16.082,2.695],[0,0],[-4.584,-3.364],[3.118,-7.958],[0,0],[5.804,-0.381]],"v":[[-64.527,-38.242],[-18.829,-39.819],[18.773,-41.773],[18.57,-41.426],[62.166,-43.544],[75.549,-44.799],[171.452,-48.297],[180.932,-33.736],[173.103,-25.282],[118.861,20.138],[118.145,20.373],[89.829,43.763],[87.752,45.687],[84.659,48.761],[80,52.684],[53.92,72.83],[21.928,97.808],[-15.49,114.443],[-41.789,105.609],[-101.603,56.999],[-68.485,15.706],[55.538,-12.972],[54.066,-19.766],[-118.955,8.83],[-160.488,5.271],[-168.759,0.885],[-188.114,-22.984],[-171.472,-32.477],[-76.567,-37.959]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.971,-10.206],[3.418,-3.461],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[12.236,4.275],[3.264,11.943],[0,0],[-26.253,9.898],[0,0],[10.008,-0.334],[0,0],[13.731,13.44],[0,0],[-9.986,7.759],[-15.441,-5.092],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[15.556,4.102],[4.232,14.538],[0,0],[-2.585,2.579],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-13.106,11.809],[-16.718,-5.841],[0,0],[-1.547,-9.503],[0,0],[5.935,-3.539],[0,0],[-16.2,2.11],[0,0],[-6.869,-9.372],[4.612,-3.583],[0,0],[0,0]],"v":[[-46.584,-109.176],[-2.188,-96.933],[34.727,-87.304],[35.063,-87.281],[74.923,-76.299],[93.928,-71.207],[174.062,-49.27],[202.803,-28.476],[190.565,2.935],[138.567,62.503],[130.509,71.652],[106.837,98.823],[84.148,124.293],[69.369,140.012],[57.385,151.93],[26.049,187.08],[11.864,201.337],[-26.979,213.735],[-55.199,179.102],[-79.873,93.063],[-59.293,50.035],[60.695,3.582],[55.075,-8.916],[-55.373,-1.367],[-118.968,-14.076],[-176.989,-100.667],[-174.629,-135.546],[-149.115,-137.114],[-71.785,-115.56]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-0.195,0.334],[0,0],[-0.812,-0.271],[-0.171,-0.256],[0,0],[-0.586,-0.063],[0,0],[-2.827,-8.327],[3.524,-2.804],[0,0],[-0.038,-0.252],[0,0],[1.015,-0.107],[0.346,0.158],[0,0],[0.413,-0.183],[0,0],[12.159,3.86],[3.072,9.176],[0,0],[-26.62,7.931],[0,0],[10.167,-0.31],[0,0],[14.246,10.53],[0,0],[-10.196,6.408],[-15.288,-3.687],[0,0]],"o":[[0,0],[0.34,-0.658],[0.317,0.109],[0,0],[0.263,0.454],[0,0],[15.919,3.055],[4.051,11.064],[0,0],[-2.699,2.088],[0,0],[0.128,0.864],[-0.383,0.038],[0,0],[-0.526,-0.227],[0,0],[-13.403,9.084],[-16.2,-4.58],[0,0],[-1.244,-8.491],[0,0],[6.079,-2.804],[0,0],[-16.836,1.772],[0,0],[-7.407,-7.361],[4.709,-2.959],[0,0],[0.463,-0.062]],"v":[[-41.307,-80.332],[2.53,-72.969],[41.264,-65.451],[42.409,-64.848],[86.485,-55.819],[107.242,-51.45],[186.769,-36.016],[217.176,-18.438],[205.043,5.691],[149.702,54.838],[141.737,62.24],[116.671,83.884],[92.172,104.328],[78.005,115.149],[64.014,126.593],[32.637,152.528],[13.283,165.559],[-26.387,174.094],[-53.693,147.613],[-76.927,81.332],[-54.457,46.226],[54.996,10.683],[49.445,1.147],[-52.378,6.394],[-117.189,-3.675],[-175.798,-69.317],[-173.953,-97.256],[-148.246,-99.098],[-66.832,-84.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":122,"s":[{"i":[[-2.501,5.561],[0,0],[-10.398,-4.505],[-2.187,-4.258],[0,0],[-7.504,-1.049],[0,0],[0.305,-13.101],[3.131,-4.107],[0,0],[-0.481,-4.197],[0,0],[12.987,-1.784],[4.425,2.623],[0,0],[5.291,-3.043],[0,0],[5.348,11.664],[-0.77,5.875],[0,0],[-18.278,10.282],[0,0],[7.215,-1.049],[0,0],[13.236,10.588],[0,0],[-8.334,10.878],[-6.069,0.987],[0,0]],"o":[[0,0],[4.348,-10.935],[4.063,1.809],[0,0],[3.367,7.554],[0,0],[12.69,0.412],[-0.125,5.386],[0,0],[-2.79,3.043],[0,0],[1.635,14.374],[-4.906,0.63],[0,0],[-6.734,-3.777],[0,0],[-10.582,5.98],[-2.02,-4.407],[0,0],[3.078,-24.446],[0,0],[4.906,-3.148],[0,0],[-16.663,2.819],[0,0],[-10.105,-7.727],[3.85,-5.025],[0,0],[5.969,-0.775]],"v":[[-63.473,-91.846],[-26.953,-169.576],[0.944,-181.691],[11.468,-171.938],[60.049,-93.629],[76.403,-81.249],[159.537,-80.284],[181.947,-53.98],[176.963,-38.624],[107.283,46.858],[104.301,57.56],[118.012,144.33],[96.174,173.707],[81.167,171.084],[7.619,141.496],[-9.12,140.971],[-82.617,182.52],[-113.305,172.133],[-116.191,157.234],[-110.515,112.014],[-75.691,56.826],[-1.903,10.013],[-3.923,4.976],[-99.564,23.536],[-147.477,10.121],[-183.752,-19.314],[-187.542,-55.627],[-171.398,-66.301],[-78.399,-80.843]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":123,"s":[{"i":[[-2.504,5.553],[0,0],[-10.401,-4.52],[-2.182,-4.256],[0,0],[-7.513,-1.048],[0,0],[0.341,-13.079],[3.145,-4.092],[0,0],[-0.482,-4.191],[0,0],[13.003,-1.781],[4.43,2.619],[0,0],[5.297,-3.038],[0,0],[5.355,11.647],[-0.771,5.867],[0,0],[-18.3,10.268],[0,0],[7.224,-1.048],[23.627,-0.372],[13.657,10.011],[0,0],[-7.86,11.201],[-6.016,1.238],[0,0]],"o":[[0,0],[4.373,-10.91],[4.064,1.815],[0,0],[3.371,7.544],[0,0],[12.703,0.448],[-0.14,5.377],[0,0],[-2.793,3.038],[0,0],[1.637,14.354],[-4.912,0.629],[0,0],[-6.742,-3.772],[0,0],[-10.595,5.972],[-2.023,-4.4],[0,0],[3.082,-24.412],[0,0],[4.912,-3.143],[0,0],[-15.631,0.246],[0,0],[-10.411,-7.287],[3.631,-5.174],[0,0],[5.925,-1.022]],"v":[[-59.041,-91.402],[-16.83,-166.61],[11.121,-178.649],[21.639,-168.889],[67.58,-88.402],[83.953,-76.039],[165.238,-73.054],[187.602,-46.725],[182.573,-31.407],[112.358,53.11],[109.372,63.797],[118.037,148.767],[96.173,178.103],[81.148,175.484],[7.637,141.563],[-9.122,141.039],[-82.707,182.528],[-113.432,172.156],[-116.322,157.278],[-110.639,112.122],[-73.278,57.538],[2.18,14.185],[0.157,9.156],[-101.766,22.977],[-145.613,7.391],[-177.572,-19.154],[-182.883,-55.223],[-167.218,-66.547],[-76.063,-78.948]],"c":true}]},{"t":133,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_og3ukSNqC9","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[0,1,0.714,0,0.5,0.95,0.572,0,1,0.901,0.431,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[0,1,0.714,0,0.5,0.95,0.572,0,1,0.901,0.431,0]},{"t":113,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_WU2RY3KFCA","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":173,"st":-7,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/stars_topup.json b/TMessagesProj/src/main/res/raw/stars_topup.json new file mode 100644 index 000000000..c04633491 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/stars_topup.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":109,"w":512,"h":512,"nm":"Prem Star Move 2","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 3","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[256,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[282,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[233,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[256,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[263,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[287.249,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[287.249,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[286,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[233.498,256,0],"to":[0,0,0],"ti":[0,0,0]},{"t":71,"s":[256,256,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":17,"s":[100,100,100]},{"i":{"x":[0.9,0.9,0.9],"y":[1,1,1]},"o":{"x":[0.9,0.9,0.9],"y":[0,0,0]},"t":49,"s":[116,100,100]},{"t":78,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Star Simple","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[-0.163,-1.32,0]},"a":{"a":0,"k":[1.049,-1.084,0]},"s":{"a":0,"k":[89.232,89.232,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[6.444,-4.125],[0,0],[5.822,9.428],[-1.293,5.317],[-5.032,15.493],[0,0],[0,0],[-7.133,8.444],[-5.201,0.425],[0,0],[-2.808,7.082],[0,0],[-10.143,-4.169],[-2.013,-5.077],[0,0],[-7.477,-0.611],[0,0],[0.876,-11.101],[3.883,-3.459],[0,0],[-1.673,-7.261],[0,0],[10.649,-2.543],[4.483,2.87],[0,0]],"o":[[0,0],[-9.26,5.928],[-2.864,-4.638],[0,0],[6.87,-15.529],[-19.738,-13.421],[-8.293,-7.262],[3.402,-4.028],[0,0],[7.477,-0.611],[0,0],[4.094,-10.328],[4.986,2.049],[0,0],[2.808,7.082],[0,0],[10.903,0.892],[-0.413,5.237],[0,0],[-5.513,4.911],[0,0],[2.498,10.843],[-5.156,1.231],[0,0],[-6.444,-4.125]],"v":[[-10.769,136.774],[-99.891,193.826],[-127.2,187.488],[-129.658,171.908],[-98.269,67.114],[-103.081,44.495],[-192.748,-28.449],[-194.849,-56.887],[-181.419,-63.839],[-75.773,-72.478],[-58.992,-85.031],[-18.593,-186.939],[7.186,-198.091],[18.139,-186.939],[58.539,-85.031],[75.319,-72.478],[181.525,-63.793],[199.681,-42.078],[192.981,-28.516],[111.229,44.314],[104.988,64.095],[129.986,172.613],[115.227,196.851],[100.163,194.29],[10.315,136.774]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[8.731,-5.608],[0,0],[7.889,12.818],[-1.752,7.229],[-6.818,21.063],[0,0],[0,0],[-9.665,11.479],[-7.048,0.578],[0,0],[-3.804,9.628],[0,0],[-13.744,-5.667],[-2.727,-6.902],[0,0],[-10.131,-0.831],[0,0],[1.187,-15.092],[5.262,-4.703],[0,0],[-2.267,-9.872],[0,0],[14.43,-3.458],[6.075,3.902],[0,0]],"o":[[0,0],[-12.547,8.059],[-3.88,-6.305],[0,0],[9.309,-21.112],[-26.745,-18.245],[-11.237,-9.873],[4.61,-5.476],[0,0],[10.131,-0.831],[0,0],[5.548,-14.04],[6.757,2.786],[0,0],[3.804,9.628],[0,0],[14.774,1.212],[-0.56,7.119],[0,0],[-7.47,6.677],[0,0],[3.384,14.741],[-6.986,1.674],[0,0],[-8.732,-5.608]],"v":[[-14.92,186.395],[-122.282,248.287],[-159.285,239.671],[-162.616,218.491],[-133.483,91.692],[-140.004,60.942],[-248.446,-34.869],[-251.293,-73.531],[-233.095,-82.981],[-108.961,-98.169],[-86.224,-115.235],[-25.075,-212.451],[9.855,-227.612],[24.696,-212.451],[88.527,-115.015],[111.264,-97.949],[236.042,-83.241],[260.644,-53.719],[251.565,-35.281],[150.386,60.695],[141.93,87.588],[167.764,218.087],[147.764,251.038],[127.352,247.556],[13.648,186.395]],"c":true}]},{"t":96,"s":[{"i":[[9.294,-6.094],[0,0],[8.397,13.927],[-1.865,7.855],[-7.257,22.886],[0,0],[0,0],[-10.287,12.473],[-7.502,0.628],[0,0],[-4.049,10.461],[0,0],[-14.629,-6.158],[-2.903,-7.5],[0,0],[-10.784,-0.903],[0,0],[1.263,-16.399],[5.601,-5.11],[0,0],[-2.413,-10.727],[0,0],[15.359,-3.757],[6.466,4.239],[0,0]],"o":[[0,0],[-13.356,8.757],[-4.13,-6.851],[0,0],[9.908,-22.94],[-28.468,-19.825],[-11.961,-10.728],[4.907,-5.95],[0,0],[10.784,-0.903],[0,0],[5.905,-15.256],[7.192,3.027],[0,0],[4.049,10.461],[0,0],[15.725,1.317],[-0.596,7.736],[0,0],[-7.951,7.255],[0,0],[3.602,16.017],[-7.436,1.819],[0,0],[-9.294,-6.094]],"v":[[-13.56,206.52],[-137.885,270.574],[-177.271,261.211],[-180.817,238.198],[-149.987,89.53],[-156.928,56.118],[-265.006,-49.562],[-268.036,-91.571],[-248.667,-101.839],[-117.541,-116.674],[-93.339,-135.217],[-27.137,-276.378],[10.044,-292.851],[25.841,-276.378],[88.456,-135.39],[112.658,-116.848],[249.131,-100.224],[275.317,-68.146],[265.653,-48.112],[165.566,55.661],[156.566,84.882],[182.452,235.839],[161.165,271.642],[139.437,267.859],[16.849,206.52]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[46.036]},{"t":96,"s":[3]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Star","bm":0,"hd":false}],"ip":76,"op":97,"st":69,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Star Flash","parent":4,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":67,"s":[0]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":78,"s":[80]},{"t":101,"s":[0]}]},"p":{"a":0,"k":[0.061,187.015,0]},"a":{"a":0,"k":[0.061,187.015,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.96862745098,0.788235294118,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.969273585899,0.788235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Star Main","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.659],"y":[0]},"t":26,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":54,"s":[-3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":69,"s":[3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":82,"s":[-2]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":92,"s":[1]},{"t":105,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0.061,187.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.5,"y":0},"t":17,"s":[0.061,229.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.9,"y":1},"o":{"x":0.9,"y":0},"t":47,"s":[0.061,80.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.1,"y":0},"t":76,"s":[0.061,235.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":86,"s":[0.061,169.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.6,"y":1},"o":{"x":0.3,"y":0},"t":96,"s":[0.061,195.015,0],"to":[0,0,0],"ti":[0,0,0]},{"t":108,"s":[0.061,187.015,0]}]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":17,"s":[120,80,100]},{"i":{"x":[0.9,0.9,0.9],"y":[1,1,1]},"o":{"x":[0.9,0.9,0.9],"y":[0,0,0]},"t":49,"s":[82.941,90,100]},{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.1,0.1,0.1],"y":[0,0,0]},"t":78,"s":[115,85,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":86,"s":[94,106,100]},{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":96,"s":[102,98,100]},{"t":108,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[0,0],[-1.838,8.6],[0,0]],"o":[[0,0],[9.004,0.427],[0,0],[0,0]],"v":[[-49.271,-52.376],[-27.366,-47.901],[-12.379,-64.077],[-0.293,-146.496]],"c":false}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[0,0],[-0.417,8.239],[0,0]],"o":[[0,0],[4.762,-3.148],[0,0],[0,0]],"v":[[-45.562,-26.278],[-18.391,-41.97],[-8.922,-67.631],[-0.143,-146.408]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[-5.818,9.761],[0,0]],"o":[[0,0],[15.726,-1.964],[0,0],[0,0]],"v":[[-164.959,-34],[-76.665,-44.805],[-43.687,-66.258],[-2.574,-152.03]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.333},"t":57,"s":[{"i":[[0,0],[0,0],[-3.07,8.647],[0,0]],"o":[[0,0],[17.534,3.754],[0,0],[0,0]],"v":[[-94.961,-59.143],[-53.679,-47.176],[-25.132,-66.202],[-1.432,-152.108]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[0,0],[-1.743,5.934],[0,0]],"o":[[0,0],[4.612,-2.095],[0,0],[0,0]],"v":[[-16.584,-62.254],[-6.975,-60.133],[-1.799,-71.821],[-1.052,-152.135]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[0,0],[0,0],[-0.511,18.014],[0,0]],"o":[[0,0],[6.199,-1.887],[0,0],[0,0]],"v":[[-33.069,-33.03],[-16.819,-41.953],[-2.877,-69.26],[-0.766,-152.154]],"c":false}]},{"t":71,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.59],"y":[0]},"t":62,"s":[0]},{"t":71,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[1.873,11],[0,0],[0.52,0.7],[0.659,-3.9],[0,0],[3.468,-1.3],[0,0],[0.555,-2.1],[-1.491,-3.6],[0,0],[-4.266,1.7],[0,0],[-0.841,-6.7],[-0.074,-0.8],[-7.043,17.746]],"o":[[-4.196,-1.5],[0,0],[-0.277,-1.6],[-0.936,-1.2],[0,0],[-1.561,9],[0,0],[-0.902,0.3],[-0.971,3.8],[0,0],[3.329,7.9],[0,0],[1.854,-1.1],[0.099,0.8],[7.654,-5.303],[0,0]],"v":[[26.348,-44.405],[16.603,-64.705],[1.66,-158],[0.377,-161.5],[-3.056,-158],[-18.593,-70],[-26.639,-53.4],[-54.09,-59.74],[-56.414,-56.34],[-55.477,-41.14],[-43.894,-13.74],[-32.276,-3.64],[-7.253,0.763],[-2.753,10.263],[-2.527,27.232],[51.064,-24.345]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[-0.439,11],[0,0],[-0.122,0.7],[-0.155,-3.9],[0,0],[-0.813,-1.3],[0,0],[-0.13,-2.1],[0.35,-3.6],[0,0],[1.909,-1.014],[0,0],[3.869,-6.034],[0.036,-0.8],[0.047,7.658]],"o":[[0.984,-1.5],[0,0],[0.065,-1.6],[0.22,-1.2],[0,0],[0.366,9],[0,0],[0.211,0.3],[0.228,3.8],[0,0],[-0.781,7.9],[0,0],[-1.111,-0.231],[-0.376,0.576],[-0.436,-7.54],[0,0]],"v":[[-5.981,-44.726],[-4.386,-62.162],[-1.315,-158],[-1.014,-161.5],[-0.209,-158],[3.434,-70],[6.2,-59.131],[14.256,-67.654],[14.801,-64.254],[13.58,-49.062],[13.053,-24.195],[9.296,-10.119],[4.171,0.665],[-8.226,10.254],[-9.126,2.574],[-9.794,-25.593]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-1.98,11],[0,0],[-0.55,0.7],[-0.697,-3.9],[0,0],[-3.667,-1.3],[0,0],[-0.587,-2.1],[1.577,-3.6],[0,0],[6.025,-2.824],[0,0],[14.431,-8.908],[0.11,-0.8],[3.504,24.21]],"o":[[4.438,-1.5],[0,0],[0.293,-1.6],[0.99,-1.2],[0,0],[1.65,9],[0,0],[0.953,0.3],[1.027,3.8],[0,0],[-3.521,7.9],[0,0],[-3.088,0.348],[-0.692,0.427],[-4.469,-7.884],[0,0]],"v":[[-27.534,-44.94],[-18.378,-60.467],[-3.299,-158],[-1.942,-161.5],[1.689,-158],[18.119,-70],[28.093,-62.951],[59.82,-72.93],[62.277,-69.53],[59.619,-54.342],[51.017,-31.166],[37.011,-14.438],[11.788,0.6],[-39.479,31.726],[-44.486,12.295],[-52.652,-27.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[0,0],[-5.447,11],[0,0],[-1.513,0.7],[-1.917,-3.9],[0,0],[-10.088,-1.3],[0,0],[0,0],[0,0],[0,0],[7.057,0.528],[0,0],[22.068,-11.67],[0.303,-0.8],[-13.933,8.718]],"o":[[12.206,-1.5],[0,0],[0.807,-1.6],[2.724,-1.2],[0,0],[4.539,9],[0,0],[0,0],[0,0],[0,0],[-3.891,0.904],[0,0],[-10.496,4.709],[-0.792,0.419],[-16.155,-11.705],[0,0]],"v":[[-78.073,-52.5],[-49.726,-72.8],[-7.761,-158],[-4.029,-161.5],[5.958,-158],[51.152,-70],[74.555,-53.4],[115.999,-47.571],[115.598,-47.686],[115.374,-47.163],[26.546,3.344],[19.494,3.539],[-11.2,-0.448],[-97.294,46.308],[-151.891,-8.518],[-168.038,-40.688]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,0],[-3.323,11],[0,0],[-0.923,0.7],[-1.169,-3.9],[0,0],[-6.153,-1.3],[0,0],[0,0],[0,0],[0,0],[5.669,1.7],[0,0],[27.988,-6.069],[0.185,-0.8],[-15.765,2.57]],"o":[[7.446,-1.5],[0,0],[0.492,-1.6],[1.662,-1.2],[0,0],[2.769,9],[0,0],[1.198,0.3],[0,0],[0,0],[0,0],[0,0],[-4.615,-1.1],[-0.818,0.177],[-13.502,-21.471],[0,0]],"v":[[-47.917,-52.5],[-30.625,-72.8],[-5.027,-158],[-2.75,-161.5],[3.342,-158],[30.612,-64.199],[43.555,-43.695],[67.122,-34.203],[66.58,-35.425],[77.237,-31.077],[30.624,11.849],[28.873,11.419],[24.769,11.538],[-56.567,31.259],[-81.562,-14.291],[-95.236,-64.407]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[-0.831,11],[0,0],[-0.231,0.7],[-0.292,-3.9],[0,0],[-1.538,-1.3],[0,0],[-0.07,-2.1],[0.187,-3.6],[0,0],[0.535,1.7],[0,0],[0.523,-6.7],[0.046,-0.8],[4.784,21.1]],"o":[[1.861,-1.5],[0,0],[0.123,-1.6],[0.415,-1.2],[0,0],[0.692,9],[0,0],[0.113,0.3],[0.122,3.8],[0,0],[-0.418,7.9],[0,0],[-1.154,-1.1],[-0.062,0.8],[-13.974,-19.331],[0,0]],"v":[[-12.592,-54.637],[-8.27,-74.937],[-1.819,-158],[-1.25,-161.5],[0.273,-158],[7.042,-62.117],[10.438,-43.408],[12.239,-28.53],[12.531,-25.13],[11.987,-13.948],[11.411,8.566],[10.207,18.672],[3.645,13.849],[0.845,23.349],[0.276,29.883],[-16.201,-58.863]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[1.662,11],[0,0],[0.462,0.7],[0.585,-3.9],[0,0],[3.077,-1.3],[0,0],[0.598,-2.1],[-1.608,-3.6],[0,0],[-4.599,1.7],[0,0],[-1.046,-6.7],[-0.092,-0.8],[-9.57,21.1]],"o":[[-3.723,-1.5],[0,0],[-0.246,-1.6],[-0.831,-1.2],[0,0],[-1.385,9],[0,0],[-0.972,0.3],[-1.047,3.8],[0,0],[3.589,7.9],[0,0],[2.308,-1.1],[0.123,0.8],[2.416,-17.878],[0,0]],"v":[[22.732,-56.774],[14.086,-77.074],[1.389,-158],[0.25,-161.5],[-2.796,-158],[-16.528,-60.035],[-24.238,-41.762],[-56.094,-28.32],[-58.599,-24.92],[-57.462,-12.206],[-44.974,15.194],[-32.449,25.294],[-17.479,16.159],[-11.879,25.659],[-11.82,30.54],[27.106,-58.642]],"c":true}]},{"t":71,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":26,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":35,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":62,"s":[0]},{"t":63,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0.277,6.4],[0,0],[-2.22,6.1],[0,0],[0,2.1],[1.699,0.6],[0,0],[1.873,11],[0,0],[0.555,0.7],[0.659,-4],[0,0],[3.468,-1.3],[0,0],[0.551,-2.097],[-1.491,-3.6],[0,0],[-4.266,1.7],[0,0],[-0.828,-6.702],[2.126,-4.4],[0,0],[0.832,-16.9],[0,0],[-0.451,-1.4],[-1.526,2.2],[0,0],[-3.156,-5],[0,0],[-0.798,0.5]],"o":[[0,0],[-0.347,-8],[0,0],[0.52,-1.5],[0,-5.1],[0,0],[-4.196,-1.5],[0,0],[-0.277,-1.6],[-0.728,-1],[0,0],[-1.561,9],[0,0],[-0.902,0.3],[-0.936,3.5],[0,0],[3.329,7.9],[0,0],[1.854,-1.1],[1.063,8.6],[0,0],[-5.202,7.7],[0,0],[-0.104,1.9],[1.144,3.7],[0,0],[3.607,-5.3],[0,0],[0.728,1.1],[1.734,-1.2]],"v":[[35.404,155.7],[31.347,62.9],[34.191,41.5],[51.597,-9.886],[52.395,-16.586],[49.516,-25.186],[26.348,-44.405],[16.603,-64.705],[1.66,-158],[0.134,-161.6],[-2.813,-157.5],[-18.593,-70],[-26.639,-53.4],[-54.09,-59.74],[-56.414,-56.34],[-55.477,-41.14],[-43.894,-13.74],[-32.276,-3.64],[-7.253,0.763],[-2.753,10.263],[-4.756,33.563],[-23.408,61.743],[-30.886,100.678],[-32.663,141.929],[-32.004,148.13],[-28.05,150.729],[-5.831,127.5],[4.643,128.1],[29.717,167.8],[32.387,168.8]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[-0.293,6.4],[0,0],[2.347,6.1],[0,0],[0,2.1],[-1.797,0.6],[0,0],[-1.98,11],[0,0],[-0.587,0.7],[-0.697,-4],[0,0],[-3.667,-1.3],[0,0],[-0.595,-2.093],[1.577,-3.6],[0,0],[5.747,-2.826],[0,0],[1.052,-5.053],[-3.154,-4.4],[0,0],[-0.88,-16.9],[0,0],[0.012,-1.479],[1.063,0.482],[0,0],[3.337,-5],[0,0],[0.844,0.5]],"o":[[0,0],[0.367,-8],[0,0],[-0.55,-1.5],[0,-5.1],[0,0],[4.438,-1.5],[0,0],[0.293,-1.6],[0.77,-1],[0,0],[1.65,9],[0,0],[0.953,0.3],[0.99,3.5],[0,0],[-3.521,7.9],[0,0],[-2.534,0.618],[-1.783,8.56],[0,0],[5.501,7.7],[0,0],[0.11,1.9],[-0.012,1.411],[0,0],[-3.814,-5.3],[0,0],[-0.77,1.1],[-1.834,-1.2]],"v":[[-38.983,155.7],[-34.692,62.9],[-37.699,41.5],[-52.63,-13.807],[-53.474,-20.507],[-50.43,-29.107],[-27.534,-44.94],[-18.378,-60.467],[-3.299,-158],[-1.685,-161.6],[1.432,-157.5],[18.119,-70],[28.093,-62.951],[59.82,-72.93],[62.277,-69.53],[59.619,-54.343],[51.017,-31.166],[37.011,-14.438],[11.788,0.6],[0.954,8.741],[3.925,32.041],[24.549,57.293],[30.999,95.27],[33.664,137.368],[34.009,143.575],[32.605,146.594],[4.623,127.5],[-6.453,128.1],[-32.968,167.8],[-35.792,168.8]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[-0.807,6.4],[0,0],[6.456,6.1],[0,0],[0,2.1],[-4.943,0.6],[0,0],[-5.447,11],[0,0],[-1.614,0.7],[-1.917,-4],[0,0],[-10.088,-1.3],[0,0],[-1.627,-2.09],[4.338,-3.6],[0,0],[12.408,1.7],[0,0],[3.43,-6.7],[-8.675,-4.4],[0,0],[-2.421,-16.9],[0,0],[1.311,-1.4],[4.439,2.2],[0,0],[9.18,-5],[0,0],[2.32,0.5]],"o":[[0,0],[1.009,-8],[0,0],[-1.513,-1.5],[0,-5.1],[0,0],[12.206,-1.5],[0,0],[0.807,-1.6],[2.118,-1],[0,0],[4.539,9],[0,0],[2.623,0.3],[2.724,3.5],[0,0],[-9.684,7.9],[0,0],[-7.566,-1.1],[-4.338,8.6],[0,0],[15.132,7.7],[0,0],[0.303,1.9],[-3.329,3.7],[0,0],[-10.491,-5.3],[0,0],[-2.118,1.1],[-5.044,-1.2]],"v":[[-105.915,155.7],[-94.112,62.9],[-102.384,41.5],[-171.687,-26.6],[-174.007,-33.3],[-165.634,-41.9],[-78.073,-52.5],[-49.726,-72.8],[-7.761,-158],[-3.322,-161.6],[5.252,-157.5],[51.151,-70],[74.555,-53.4],[163.025,-41.4],[169.783,-38],[167.06,-22.8],[133.367,4.6],[99.573,14.7],[-5.239,-0.3],[-23.599,9.2],[-15.428,32.5],[69.108,75.5],[97.051,114.7],[103.003,157.3],[101.086,163.5],[89.586,166.1],[14.029,127.5],[-16.436,128.1],[-89.371,167.8],[-97.139,168.8]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-0.492,6.4],[0,0],[3.938,6.1],[0,0],[0,2.1],[-3.015,0.6],[0,0],[-3.323,11],[0,0],[-0.985,0.7],[-1.169,-4],[0,0],[-6.154,-1.3],[0,0],[-0.744,-2.093],[1.982,-3.6],[0,0],[5.669,1.7],[0,0],[2.092,-6.7],[-5.292,-4.4],[0,0],[-1.477,-16.9],[0,0],[0.8,-1.4],[2.708,2.2],[0,0],[5.6,-5],[0,0],[1.415,0.5]],"o":[[0,0],[0.615,-8],[0,0],[-0.923,-1.5],[0,-5.1],[0,0],[7.446,-1.5],[0,0],[0.492,-1.6],[1.292,-1],[0,0],[2.769,9],[0,0],[1.198,0.3],[1.244,3.5],[0,0],[-4.425,7.9],[0,0],[-4.615,-1.1],[-2.646,8.6],[0,0],[9.23,7.7],[0,0],[0.185,1.9],[-2.031,3.7],[0,0],[-6.4,-5.3],[0,0],[-1.292,1.1],[-3.077,-1.2]],"v":[[-64.249,143.044],[-56.697,43.389],[-61.743,21.989],[-101.246,-50.48],[-102.661,-57.18],[-97.554,-65.78],[-47.917,-52.5],[-30.625,-72.8],[-5.027,-158],[-2.319,-161.6],[2.911,-157.5],[30.611,-64.199],[43.555,-43.695],[86.158,-28.331],[89.246,-24.931],[88.3,-15.531],[73.366,2.904],[57.925,13.004],[24.769,11.538],[13.569,21.038],[18.554,44.338],[42.803,79.242],[58.529,122.083],[61.003,165.159],[59.834,171.359],[52.818,173.959],[7.885,134.883],[-10.319,128.1],[-54.158,155.144],[-58.896,156.144]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[-0.123,6.4],[0,0],[0.984,6.1],[0,0],[0,2.1],[-0.754,0.6],[0,0],[-0.831,11],[0,0],[-0.246,0.7],[-0.292,-4],[0,0],[-1.538,-1.3],[0,0],[-0.074,-2.095],[0.187,-3.6],[0,0],[0.535,1.7],[0,0],[0.523,-6.7],[-1.323,-4.4],[0,0],[-0.369,-16.9],[0,0],[0.2,-1.4],[0.677,2.2],[0,0],[1.4,-5],[0,0],[0.354,0.5]],"o":[[0,0],[0.154,-8],[0,0],[-0.231,-1.5],[0,-5.1],[0,0],[1.861,-1.5],[0,0],[0.123,-1.6],[0.323,-1],[0,0],[0.692,9],[0,0],[0.113,0.3],[0.117,3.5],[0,0],[-0.418,7.9],[0,0],[-1.154,-1.1],[-0.661,8.6],[0,0],[2.307,7.7],[0,0],[0.046,1.9],[-0.508,3.7],[0,0],[-1.6,-5.3],[0,0],[-0.323,1.1],[-0.769,-1.2]],"v":[[-13.094,141.614],[-9.012,49.826],[-11.756,26.716],[-17.368,-51.293],[-19.24,-58.308],[-18.479,-66.64],[-12.592,-54.637],[-8.27,-74.937],[-1.819,-158],[-1.142,-161.6],[0.165,-157.5],[7.042,-62.117],[10.438,-43.408],[12.239,-28.53],[12.531,-25.13],[11.987,-13.948],[11.411,8.566],[10.207,18.672],[3.645,13.849],[0.845,23.349],[2.091,46.649],[10.265,77.885],[14.74,121.29],[14.821,164.23],[14.529,170.43],[12.775,173.03],[1.232,132.773],[-3.142,128.1],[-12.322,152.556],[-11.982,153.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0.246,6.4],[0,0],[-1.969,6.1],[0,0],[0,2.1],[1.508,0.6],[0,0],[1.662,11],[0,0],[0.492,0.7],[0.585,-4],[0,0],[3.077,-1.3],[0,0],[0.595,-2.097],[-1.608,-3.6],[0,0],[-4.599,1.7],[0,0],[-1.046,-6.7],[2.646,-4.4],[0,0],[0.738,-16.9],[0,0],[-0.4,-1.4],[-1.354,2.2],[0,0],[-2.8,-5],[0,0],[-0.708,0.5]],"o":[[0,0],[-0.308,-8],[0,0],[0.462,-1.5],[0,-5.1],[0,0],[-3.723,-1.5],[0,0],[-0.246,-1.6],[-0.646,-1],[0,0],[-1.385,9],[0,0],[-0.972,0.3],[-1.01,3.5],[0,0],[3.589,7.9],[0,0],[2.308,-1.1],[1.323,8.6],[0,0],[-4.616,7.7],[0,0],[-0.092,1.9],[1.015,3.7],[0,0],[3.2,-5.3],[0,0],[0.646,1.1],[1.539,-1.2]],"v":[[30.352,143.356],[26.473,55.981],[28.996,34.581],[55.339,-52.925],[56.047,-59.625],[53.493,-68.225],[22.732,-56.774],[14.086,-77.074],[1.389,-158],[0.035,-161.6],[-2.581,-157.5],[-16.528,-60.035],[-24.238,-41.762],[-56.094,-28.32],[-58.599,-24.92],[-57.462,-12.206],[-44.974,15.194],[-32.449,25.294],[-17.479,16.159],[-11.879,25.659],[-14.372,48.959],[-22.273,76.527],[-29.049,120.497],[-31.36,163.301],[-30.775,169.501],[-27.268,172.101],[-5.421,130.664],[4.035,128.1],[25.305,155.456],[27.675,156.456]],"c":true}]},{"t":71,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_zWsUUlgrZd","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":26,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":35,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":62,"s":[0]},{"t":63,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[-0.902,5.3],[0,0],[-3.641,-5],[-0.694,-4.2],[0,0],[-2.705,-1],[0,0],[0.533,-12.402],[1.248,-3.6],[0,0],[-0.173,-4],[0,0],[4.682,-1.7],[1.595,2.5],[0,0],[1.907,-2.9],[0,0],[1.955,11.107],[-0.277,5.6],[0,0],[-6.589,9.8],[0,0],[1.854,-1],[0,0],[4.404,10.4],[0,0],[-2.835,10.193],[-2.046,0.8],[0,0]],"o":[[0,0],[1.803,-10.1],[1.422,2],[0,0],[1.214,7.2],[0,0],[4.543,1.6],[-0.208,5.1],[0,0],[-1.006,2.9],[0,0],[0.59,13.7],[-1.769,0.6],[0,0],[-2.428,-3.6],[0,0],[-3.815,5.7],[-0.728,-4.2],[0,0],[1.11,-23.3],[0,0],[1.261,-3],[0,0],[-5.618,2.3],[0,0],[-3.364,-7.6],[1.318,-4.7],[0,0],[2.011,-0.6]],"v":[[-23.275,-78.7],[-7.565,-168.7],[2.735,-178.3],[6.307,-168.3],[21.771,-72.305],[27.666,-60.505],[51.493,-41.286],[58.741,-14.186],[56.487,-0.086],[38.283,53.5],[37.208,63.7],[41.196,158.8],[33.324,186.8],[27.913,184.3],[2.354,143.7],[-3.68,143.2],[-31.745,169.307],[-42.809,159.407],[-43.849,145.207],[-41.803,102.107],[-29.248,49.507],[-7.55,21.963],[-8.069,17.163],[-32.137,11.46],[-48.194,-2.44],[-60.263,-31.34],[-61.373,-66.04],[-55.893,-75.84],[-27.506,-69.2]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0.954,5.3],[0,0],[3.851,-5],[0.733,-4.2],[0,0],[2.861,-1],[0,0],[-0.522,-12.403],[-1.32,-3.6],[0,0],[0.183,-4],[0,0],[-4.951,-1.7],[-1.687,2.5],[0,0],[-2.017,-2.9],[0,0],[-2.026,11.114],[0.293,5.6],[0,0],[6.968,9.8],[0,0],[-2.751,-1],[0,0],[-1.423,4.278],[0,0],[3.027,10.184],[2.164,0.8],[0,0]],"o":[[0,0],[-1.907,-10.1],[-1.504,2],[0,0],[-1.284,7.2],[0,0],[-4.804,1.6],[0.22,5.1],[0,0],[1.064,2.9],[0,0],[-0.623,13.7],[1.87,0.6],[0,0],[2.567,-3.6],[0,0],[4.034,5.7],[0.77,-4.2],[0,0],[-1.174,-23.3],[0,0],[-1.87,-3],[0,0],[7.182,-5.168],[0,0],[3.557,-7.6],[-1.394,-4.7],[0,0],[-2.127,-0.6]],"v":[[23.07,-78.7],[6.456,-168.7],[-4.436,-178.3],[-8.213,-168.3],[-23.843,-68.067],[-30.077,-56.267],[-52.52,-45.207],[-60.185,-18.107],[-57.801,-4.007],[-42.027,53.5],[-40.89,63.7],[-45.107,158.8],[-36.782,186.8],[-31.061,184.3],[-4.032,143.7],[2.349,143.2],[29.749,164.193],[41.448,154.293],[42.548,140.093],[40.361,96.461],[27.085,43.861],[8.069,20.441],[8.839,15.641],[36.605,-1.73],[57.5,-18.523],[66.348,-44.53],[67.521,-79.23],[61.727,-89.03],[27.616,-78.23]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[2.623,5.3],[0,0],[10.592,-5],[2.018,-4.2],[0,0],[7.868,-1],[0,0],[-1.472,-12.405],[-3.632,-3.6],[0,0],[0.504,-4],[0,0],[-13.618,-1.7],[-4.64,2.5],[0,0],[-5.548,-2.9],[0,0],[-5.609,11.12],[0.807,5.6],[0,0],[19.167,9.8],[0,0],[-7.566,-1],[0,0],[-12.811,10.4],[0,0],[8.3,10.177],[5.952,0.8],[0,0]],"o":[[0,0],[-5.246,-10.1],[-4.136,2],[0,0],[-3.531,7.2],[0,0],[-13.215,1.6],[0.605,5.1],[0,0],[2.925,2.9],[0,0],[-1.715,13.7],[5.145,0.6],[0,0],[7.061,-3.6],[0,0],[11.097,5.7],[2.118,-4.2],[0,0],[-3.228,-23.3],[0,0],[-5.145,-3],[0,0],[16.342,2.3],[0,0],[9.785,-7.6],[-3.833,-4.7],[0,0],[-5.851,-0.6]],"v":[[64.77,-78.7],[19.072,-168.7],[-10.888,-178.3],[-21.279,-168.3],[-64.757,-80.4],[-81.906,-68.6],[-171.384,-58],[-192.468,-30.9],[-185.911,-16.8],[-114.288,53.5],[-111.16,63.7],[-122.761,158.8],[-99.862,186.8],[-84.125,184.3],[-9.779,143.7],[7.774,143.2],[84.845,182.8],[117.024,172.9],[120.051,158.7],[114.099,115.6],[77.581,63],[-4.029,20.9],[-1.91,16.1],[99.169,29.8],[145.875,15.9],[180.981,-13],[184.209,-47.7],[168.27,-57.5],[77.077,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[1.6,5.3],[0,0],[6.461,-5],[1.231,-4.2],[0,0],[4.8,-1],[0,0],[-0.89,-12.404],[-2.215,-3.6],[0,0],[0.308,-4],[0,0],[-8.307,-1.7],[-2.831,2.5],[0,0],[-3.384,-2.9],[0,0],[-3.414,11.116],[0.492,5.6],[0,0],[8.521,12.168],[0,0],[-4.615,-1],[0,0],[-5.854,10.4],[0,0],[3.795,10.182],[2.719,0.8],[0,0]],"o":[[0,0],[-3.2,-10.1],[-2.523,2],[0,0],[-2.154,7.2],[0,0],[-8.061,1.6],[0.369,5.1],[0,0],[1.785,2.9],[0,0],[-1.046,13.7],[3.138,0.6],[0,0],[4.307,-3.6],[0,0],[6.769,5.7],[1.292,-4.2],[0,0],[-1.969,-23.3],[0,0],[-3.138,-3],[0,0],[7.467,2.3],[0,0],[4.471,-7.6],[-1.752,-4.7],[0,0],[-3.569,-0.6]],"v":[[38.919,-72.899],[11.342,-168.7],[-6.934,-178.3],[-13.272,-168.3],[-39.794,-80.4],[-49.177,-73.044],[-101.061,-81.879],[-113.922,-54.78],[-109.923,-40.68],[-69.004,33.989],[-67.097,44.189],[-74.526,146.144],[-60.557,174.144],[-50.958,171.644],[-6.257,143.7],[4.45,143.2],[49.926,190.659],[69.556,180.759],[71.402,166.559],[68.928,122.983],[49.584,68.4],[25.507,32.738],[26.799,27.938],[57.741,28.104],[79.081,14.204],[94.66,-5.731],[95.837,-34.631],[88.554,-44.431],[45.093,-59.495]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[-0.8,5.3],[0,0],[-3.231,-5],[-0.615,-4.2],[0,0],[-2.4,-1],[0,0],[0.476,-12.402],[1.108,-3.6],[0,0],[-0.154,-4],[0,0],[4.154,-1.7],[1.415,2.5],[0,0],[1.692,-2.9],[0,0],[1.737,11.107],[-0.246,5.6],[0,0],[-5.846,9.8],[0,0],[2.308,-1],[0,0],[4.748,10.4],[0,0],[-3.06,10.192],[-2.206,0.8],[0,0]],"o":[[0,0],[1.6,-10.1],[1.262,2],[0,0],[1.077,7.2],[0,0],[4.031,1.6],[-0.185,5.1],[0,0],[-0.892,2.9],[0,0],[0.523,13.7],[-1.569,0.6],[0,0],[-2.154,-3.6],[0,0],[-3.385,5.7],[-0.646,-4.2],[0,0],[0.985,-23.3],[0,0],[1.569,-3],[0,0],[-6.057,2.3],[0,0],[-3.627,-7.6],[1.421,-4.7],[0,0],[1.785,-0.6]],"v":[[-20.682,-68.735],[-6.796,-168.7],[2.342,-178.3],[5.512,-168.3],[18.67,-84.674],[24.363,-74.779],[55.247,-84.325],[61.678,-57.225],[59.678,-43.125],[32.627,46.581],[31.673,56.781],[35.49,146.456],[28.505,174.456],[23.705,171.956],[2.004,143.7],[-3.35,143.2],[-25.821,188.801],[-35.637,178.901],[-36.56,164.701],[-34.249,121.397],[-24.91,61.89],[-17.849,37.359],[-18.495,32.559],[-32.299,40.394],[-49.61,26.494],[-62.622,-2.406],[-63.946,-34.62],[-58.038,-44.42],[-25.007,-57.562]],"c":true}]},{"t":71,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_TGjBON7hdL","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[0,0.956,0.607,0,0.5,0.911,0.524,0,1,0.867,0.442,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[0,0.956,0.607,0,0.5,0.911,0.524,0,1,0.867,0.442,0]},{"t":64,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_D2Kwxh51FL","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Star Back","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[0.061,187.016,0]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":0,"k":[100.001,99.999,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[-0.981,5.3],[0,0],[0,0],[-0.755,-4.2],[0,0],[-2.943,-1],[0,0],[0.551,-12.403],[1.358,-3.6],[0,0],[-0.189,-4],[0,0],[8.605,1.578],[1.736,2.5],[0,0],[2.075,-2.9],[0,0],[0,0],[0,0],[0,0],[-4.167,9.8],[0,0],[0.605,0.872],[0,0],[4.792,10.4],[1.813,13.205],[-3.107,10.185],[-2.226,0.8],[0,0]],"o":[[0,0],[1.962,-10.1],[0,0],[0,0],[1.321,7.2],[0,0],[4.943,1.6],[-0.226,5.1],[0,0],[-1.094,2.9],[0,0],[-7.138,2.855],[-1.924,0.6],[0,0],[-2.641,-3.6],[0,0],[-4.503,-1.054],[0,0],[0,0],[1.207,-23.3],[0,0],[1.118,-3],[0,0],[-2.671,-2.389],[0,0],[-2.237,-16.3],[1.434,-4.7],[0,0],[2.188,-0.6]],"v":[[-62.584,-78.957],[-44.325,-172.732],[-20.381,-182.847],[-1.143,-177.405],[-13.575,-72.562],[-7.161,-60.762],[18.762,-41.543],[26.648,-14.443],[24.195,-0.343],[4.39,53.243],[3.22,63.443],[35.29,185.036],[-1.006,186.543],[-6.892,184.043],[-34.7,143.443],[-45.089,170.725],[-80.479,166.875],[-86.434,155.907],[-86.984,140.629],[-85.34,98.877],[-75.267,48.164],[-66.803,25.19],[-67.597,17.96],[-74.91,13.092],[-93.746,-3.514],[-102.826,-31.597],[-102.695,-70.341],[-96.733,-80.141],[-62.049,-75.382]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[5.366,0.863],[0,0],[0,0],[-0.282,-4.2],[0,0],[-1.101,-1],[0,0],[0.206,-12.403],[0.508,-3.6],[0,0],[-0.071,-4],[0,0],[0,0],[0,0],[0,0],[0,0],[0.211,17.124],[-0.113,3.314],[0.208,2.24],[0,0],[-2.681,9.8],[0,0],[-0.204,0.123],[0,0],[0.7,9.221],[1.926,7.923],[-1.162,10.185],[-0.833,0.8],[0,0]],"o":[[0,0],[0.415,-12.562],[0,0],[0,0],[0.494,7.2],[0,0],[1.849,1.6],[-0.085,5.1],[0,0],[-0.409,2.9],[0,0],[1.053,14.374],[0,0],[0,0],[0,0],[0,0],[-0.074,-6.03],[0.059,-1.748],[0,0],[0.452,-23.3],[0,0],[0.175,-3],[0,0],[0.141,-2.224],[0,0],[0.143,-12.82],[0.536,-4.7],[0,0],[0.818,-0.6]],"v":[[-52.75,-82.065],[-51.37,-177.563],[-25.079,-187.176],[-1.634,-178.285],[-2.065,-70.123],[0.334,-58.323],[-1.2,-37.861],[-0.069,-14.781],[-0.392,3.335],[1.382,55.316],[0.945,65.516],[5.844,181.109],[-27.105,188.395],[-26.87,188.579],[-45.695,185.557],[-47.093,185.282],[-64.074,164.073],[-65.415,138.132],[-65.831,123.015],[-64.964,97.911],[-63.535,46.166],[-63.642,22.412],[-63.862,16.155],[-63.807,7.129],[-64.353,-9.531],[-65.136,-36.77],[-65.588,-71.47],[-63.358,-81.27],[-11.058,-79.672]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-1.313,0.124],[0,0],[0,0],[0.241,-4.2],[0,0],[0.938,-1],[0,0],[-0.176,-12.403],[-0.433,-3.6],[0,0],[0.06,-4],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.18,17.124],[0.096,3.314],[-0.177,2.24],[0,0],[0.058,9.8],[0,0],[0.018,0.123],[0,0],[-0.063,9.221],[-0.042,7.923],[0.99,10.185],[0.71,0.8],[0,0]],"o":[[0,0],[-0.625,-10.1],[0,0],[0,0],[-0.421,7.2],[0,0],[-1.576,1.6],[0.072,5.1],[0,0],[0.349,2.9],[0,0],[-0.898,14.374],[0,0],[0,0],[0,0],[0,0],[0.063,-6.03],[-0.051,-1.748],[0,0],[-0.385,-23.3],[0,0],[-0.016,-3],[0,0],[-0.013,-2.224],[0,0],[-0.003,-12.82],[-0.457,-4.7],[0,0],[-0.698,-0.6]],"v":[[52.336,-93.551],[49.003,-174.786],[25.912,-182.913],[0.849,-178.285],[1.216,-70.123],[-0.829,-58.323],[0.478,-37.861],[-0.486,-14.781],[-0.211,3.335],[-1.723,55.316],[-1.35,65.516],[-8.083,181.366],[19.973,188.926],[20.413,188.979],[44.775,187.43],[45.967,187.155],[61.57,169.41],[62.225,144.551],[62.58,129.434],[61.858,97.874],[55.959,46.381],[61.462,23.437],[61.482,17.179],[61.313,6.345],[61.38,-9.555],[61.453,-36.808],[62.299,-87.786],[60.343,-95.718],[16.507,-83.896]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0.954,5.3],[0,0],[9.558,-0.194],[0.733,-4.2],[0,0],[2.861,-1],[0,0],[-0.522,-12.403],[-1.32,-3.6],[0,0],[0.183,-4],[0,0],[-7.039,0.611],[-1.687,2.5],[0,0],[-2.017,-2.9],[0,0],[-0.663,6.645],[0.293,5.6],[0,0],[6.968,9.8],[0,0],[-2.751,-1],[0,0],[-3.116,7.453],[-3.143,15.043],[3.027,10.184],[2.164,0.8],[0,0]],"o":[[0,0],[-1.907,-10.1],[-8.888,0.181],[0,0],[-1.284,7.2],[0,0],[-4.804,1.6],[0.22,5.1],[0,0],[1.064,2.9],[0,0],[-0.007,2.709],[7.039,-0.611],[0,0],[2.567,-3.6],[0,0],[5.458,-0.905],[0.424,-4.249],[0,0],[-1.174,-23.3],[0,0],[-1.87,-3],[0,0],[7.746,-6.229],[0,0],[2.865,-13.713],[-1.394,-4.7],[0,0],[-2.127,-0.6]],"v":[[64.541,-85.305],[49.001,-170.516],[31.183,-183.088],[-0.895,-179.668],[8.973,-69.954],[2.739,-58.154],[-19.704,-47.093],[-27.369,-19.993],[-24.985,-5.893],[-9.211,51.613],[-8.074,61.813],[-37.264,186.214],[-13.021,187.504],[10.966,177.699],[28.784,141.813],[34.948,168.669],[67.292,162.075],[80.383,151.919],[81.483,137.719],[79.297,94.088],[66.021,41.488],[55.322,20.784],[56.092,15.985],[74.393,0.403],[90.316,-20.41],[104.752,-50.095],[105.926,-84.795],[100.131,-94.595],[69.984,-92.796]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":39,"s":[{"i":[[1.49,5.3],[0,0],[8.258,0.011],[1.146,-4.2],[0,0],[4.469,-1],[0,0],[-0.836,-12.403],[-2.062,-3.6],[0,0],[0.286,-4],[0,0],[-9.079,-0.178],[-2.635,2.5],[0,0],[-3.151,-2.9],[0,0],[-2.299,8.172],[0.458,5.6],[0,0],[9.722,10.05],[0,0],[-4.297,-1],[0,0],[-6.283,8.458],[-2.025,9.91],[4.717,10.183],[3.38,0.8],[0,0]],"o":[[0,0],[-2.979,-10.1],[-9.317,0.618],[0,0],[-2.005,7.2],[0,0],[-7.505,1.6],[0.344,5.1],[0,0],[1.661,2.9],[0,0],[-0.577,6.46],[6.251,-0.198],[0,0],[4.01,-3.6],[0,0],[7.973,-1.188],[0.98,-4.232],[0,0],[-1.833,-23.3],[0,0],[-2.922,-3],[0,0],[10.444,-3.318],[0,0],[5.111,-11.627],[-2.177,-4.7],[0,0],[-3.323,-0.6]],"v":[[66.704,-80.363],[40.746,-169.664],[19.559,-182.542],[-4.097,-178.738],[-8.718,-73.254],[-18.458,-61.454],[-62.777,-50.551],[-74.751,-23.451],[-71.027,-9.351],[-36.962,52.522],[-35.186,62.722],[-61.807,186.082],[-34.969,188.575],[-13.936,183.377],[22.391,142.722],[52.921,174.228],[74.249,172.903],[97.3,159.7],[99.019,145.5],[95.624,102.05],[76.806,49.47],[40.809,26.937],[42.013,22.137],[86.303,17.043],[113.976,-7.754],[131.391,-34.748],[133.224,-69.448],[124.173,-79.248],[73.74,-76.812]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[2.623,5.3],[0,0],[10.592,-5],[2.018,-4.2],[0,0],[7.868,-1],[0,0],[-1.472,-12.405],[-3.632,-3.6],[0,0],[0.504,-4],[0,0],[-13.618,-1.7],[-4.64,2.5],[0,0],[-5.548,-2.9],[0,0],[-5.609,11.12],[0.807,5.6],[0,0],[19.167,9.8],[0,0],[-7.566,-1],[0,0],[-12.811,10.4],[0,0],[8.3,10.177],[5.952,0.8],[0,0]],"o":[[0,0],[-5.246,-10.1],[-4.136,2],[0,0],[-3.531,7.2],[0,0],[-13.215,1.6],[0.605,5.1],[0,0],[2.925,2.9],[0,0],[-1.715,13.7],[5.145,0.6],[0,0],[7.061,-3.6],[0,0],[11.097,5.7],[2.118,-4.2],[0,0],[-3.228,-23.3],[0,0],[-5.145,-3],[0,0],[16.342,2.3],[0,0],[9.785,-7.6],[-3.833,-4.7],[0,0],[-5.851,-0.6]],"v":[[64.77,-78.7],[19.072,-168.7],[-10.888,-178.3],[-21.279,-168.3],[-64.757,-80.4],[-81.906,-68.6],[-171.384,-58],[-192.468,-30.9],[-185.911,-16.8],[-114.288,53.5],[-111.16,63.7],[-122.761,158.8],[-99.862,186.8],[-84.125,184.3],[-9.779,143.7],[7.774,143.2],[84.845,182.8],[117.024,172.9],[120.051,158.7],[114.099,115.6],[77.581,63],[-4.029,20.9],[-1.91,16.1],[99.169,29.8],[145.875,15.9],[180.981,-13],[184.209,-47.7],[168.27,-57.5],[77.077,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[1.6,5.3],[0,0],[6.461,-5],[1.231,-4.2],[0,0],[4.8,-1],[0,0],[-3.826,-11.023],[-2.215,-3.6],[0,0],[0.308,-4],[0,0],[-11.299,-4.267],[-4.523,-1.033],[0,0],[-3.384,-2.9],[0,0],[-9.088,-3.097],[0.492,5.6],[0,0],[11.692,9.8],[0,0],[-4.615,-1],[0,0],[-5.854,10.4],[0,0],[3.794,10.182],[2.719,0.8],[0,0]],"o":[[0,0],[-3.2,-10.1],[-2.523,2],[0,0],[-2.154,7.2],[0,0],[-16.682,4.978],[1.677,4.831],[0,0],[1.785,2.9],[0,0],[-1.046,13.7],[3.138,0.6],[0,0],[4.307,-3.6],[0,0],[6.769,5.7],[4.159,1.418],[0,0],[-1.969,-23.3],[0,0],[-3.138,-3],[0,0],[7.467,2.3],[0,0],[4.471,-7.6],[-1.752,-4.7],[0,0],[-3.569,-0.6]],"v":[[-3.591,-82.734],[3.346,-178.308],[-50.226,-183.942],[-56.564,-173.942],[-82.304,-90.235],[-91.687,-82.879],[-143.788,-87.496],[-155.394,-40.783],[-151.394,-26.683],[-111.768,51.098],[-109.86,61.298],[-117.225,140],[-103.379,170.373],[-92.047,172.708],[-60.241,175.37],[-38.06,133.365],[1.219,180.282],[32.442,192.573],[55.956,191.766],[26.418,113.148],[4.143,60.548],[-45.26,11.065],[-43.967,6.265],[12.381,18.67],[36.111,13.334],[52.151,-15.566],[53.327,-44.466],[46.045,-54.266],[2.584,-69.33]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[1.358,5.3],[0,0],[7.587,-1.06],[1.511,-6.881],[0,0],[0.96,-0.2],[0,0],[-1.056,-10.469],[-0.892,-6.838],[0,0],[0.062,-0.8],[0,0],[-9.588,-4.267],[-3.838,-1.033],[0,0],[-3.815,0.489],[0,0],[-1.818,-0.619],[0.098,1.12],[0,0],[2.792,15.953],[0,0],[-3.916,-1],[0,0],[-1.171,2.08],[0,0],[-0.447,6.254],[2.308,0.8],[0,0]],"o":[[0,0],[-2.715,-10.1],[-6.435,0.199],[0,0],[4.101,4.045],[0,0],[-3.336,0.995],[0.477,4.978],[0,0],[0.357,0.58],[0,0],[-0.888,13.7],[2.663,0.6],[0,0],[7.118,-0.377],[0,0],[1.354,1.14],[0.832,0.284],[0,0],[-1.671,-23.3],[0,0],[-2.663,-3],[0,0],[1.493,0.46],[0,0],[0.487,-7.459],[0.728,-4.712],[0,0],[-3.029,-0.6]],"v":[[-2.482,-83.124],[0.279,-178.521],[-30.03,-187.592],[-52.283,-179.699],[-67.397,-92.546],[-33.333,-84.205],[-79.538,-94.016],[-85.966,-78.279],[-83.683,-17.64],[-74.511,51.149],[-73.936,61.55],[-75.526,141.58],[-64.986,181.714],[-51.988,184.088],[-34.62,186.427],[-14.824,178.431],[3.27,188.624],[10.153,191.552],[15.015,190.783],[7.16,110.026],[-0.565,57.98],[-10.616,16.089],[-9.519,11.289],[-1.613,14.522],[5.056,5.63],[8.152,-17.016],[9.055,-40.391],[7.063,-51.631],[0.882,-66.554]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[1.297,5.3],[0,0],[7.869,-0.075],[1.581,-7.551],[0,0],[0,0],[0,0],[-0.364,-10.331],[-0.561,-7.648],[0,0],[0,0],[0,0],[-9.16,-4.267],[-3.666,-1.033],[0,0],[-3.923,1.336],[0,0],[0,0],[0,0],[0,0],[0.567,17.492],[0,0],[-3.742,-1],[0,0],[0,0],[0,0],[-1.508,5.272],[2.205,0.8],[0,0]],"o":[[0,0],[-2.594,-10.1],[-7.413,-0.252],[0,0],[5.664,3.257],[0,0],[0,0],[0.177,5.015],[0,0],[0,0],[0,0],[-0.848,13.7],[2.544,0.6],[0,0],[7.82,0.429],[0,0],[0,0],[0,0],[0,0],[-1.596,-23.3],[0,0],[-2.544,-3],[0,0],[0,0],[0,0],[-0.509,-7.424],[1.348,-4.715],[0,0],[-2.893,-0.6]],"v":[[-2.205,-83.221],[-0.487,-178.574],[-24.981,-188.505],[-51.212,-181.139],[-64.922,-84.079],[-19.996,-75.491],[-64.727,-86.601],[-69.862,-78.608],[-66.755,-15.379],[-65.196,51.162],[-64.955,61.613],[-65.101,141.975],[-55.387,184.549],[-41.974,186.933],[-28.214,189.191],[-9.016,189.698],[3.782,190.71],[4.581,191.296],[4.78,190.537],[2.345,109.245],[-1.742,57.338],[-1.955,17.345],[-0.907,12.545],[-5.111,13.485],[-2.707,3.705],[-2.847,-17.378],[-2.013,-39.373],[-2.682,-50.972],[0.456,-65.86]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[-1.223,5.3],[0,0],[-7.418,-0.075],[-1.491,-7.551],[0,0],[0,0],[0,0],[2.924,-11.023],[1.693,-3.6],[0,0],[0,0],[0,0],[8.636,-4.267],[3.456,-1.033],[0,0],[3.698,1.336],[0,0],[0,0],[0,0],[0,0],[-0.535,17.492],[0,0],[3.527,-1],[0,0],[0,0],[0,0],[1.421,5.272],[-2.078,0.8],[0,0]],"o":[[0,0],[2.445,-10.1],[6.988,-0.252],[0,0],[0.582,0.624],[0,0],[0,0],[-1.281,4.831],[0,0],[0,0],[0,0],[0.799,13.7],[-2.398,0.6],[0,0],[-7.373,0.429],[0,0],[0,0],[0,0],[0,0],[1.505,-23.3],[0,0],[2.398,-3],[0,0],[0,0],[0,0],[0.479,-7.424],[-1.271,-4.715],[0,0],[2.728,-0.6]],"v":[[4.751,-83.236],[3.132,-178.589],[26.223,-188.52],[50.952,-181.154],[58.514,-90.931],[18.652,-83.616],[61.118,-90.047],[71.375,-62.196],[64.567,-14.848],[64.136,51.147],[63.908,61.597],[64.045,141.96],[54.888,184.534],[42.243,186.918],[29.271,189.176],[11.172,189.683],[-0.893,190.695],[-1.646,191.281],[-1.834,190.522],[0.462,109.23],[4.315,57.323],[4.516,17.33],[3.528,12.53],[7.491,13.47],[5.225,3.69],[5.357,-17.393],[4.57,-39.388],[5.201,-50.987],[2.243,-65.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[-1.011,5.3],[0,0],[-5.325,-2.538],[-1.053,-5.875],[0,0],[-1.2,-0.5],[0,0],[1.687,-11.713],[1.4,-3.6],[0,0],[-0.077,-2],[0,0],[6.581,-4.532],[5.735,-0.714],[0,0],[2.695,-0.782],[0,0],[5.245,1.672],[-0.123,2.8],[0,0],[-3.191,13.646],[0,0],[2.918,-1],[0,0],[2.374,5.2],[0,0],[-0.829,7.729],[-2.142,0.8],[0,0]],"o":[[0,0],[2.023,-10.1],[4.125,0.874],[0,0],[0.235,1.785],[0,0],[2.015,0.8],[-0.733,4.965],[0,0],[-0.446,1.45],[0,0],[0.661,13.7],[-1.984,0.6],[0,0],[-4.763,-1.585],[0,0],[-1.692,2.85],[-2.024,-0.645],[0,0],[1.245,-23.3],[0,0],[1.984,-3],[0,0],[-3.029,1.15],[0,0],[-1.574,-7.512],[0.075,-4.708],[0,0],[2.256,-0.6]],"v":[[6.107,-78.987],[0.369,-178.24],[31.88,-186.895],[45.829,-178.212],[58.404,-88.113],[36.748,-83.593],[76.845,-88.301],[85.058,-63.885],[80.655,-33.161],[64.67,41.935],[64.08,52.26],[67.627,140.316],[61.067,176.236],[44.01,180.248],[29.198,181.622],[18.083,167.58],[3.812,185.471],[-15.25,190.357],[-12.883,174.391],[-2.821,112.312],[4.675,60.058],[16.455,16.113],[15.638,11.313],[1.668,23.93],[-8.12,12.09],[-14.56,-12.901],[-15.616,-40.006],[-12.346,-50.705],[2.69,-64.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[-0.8,5.3],[0,0],[-3.231,-5],[-0.615,-4.2],[0,0],[-2.4,-1],[0,0],[0.449,-12.403],[1.108,-3.6],[0,0],[-0.154,-4],[0,0],[4.527,-4.796],[8.013,-0.394],[0,0],[1.692,-2.9],[0,0],[10.491,3.345],[-0.246,5.6],[0,0],[-5.846,9.8],[0,0],[2.308,-1],[0,0],[4.748,10.4],[0,0],[-3.079,10.186],[-2.206,0.8],[0,0]],"o":[[0,0],[1.6,-10.1],[1.262,2],[0,0],[1.077,7.2],[0,0],[4.031,1.6],[-0.185,5.1],[0,0],[-0.892,2.9],[0,0],[0.523,13.7],[-1.569,0.6],[0,0],[-2.154,-3.6],[0,0],[-3.385,5.7],[-4.049,-1.291],[0,0],[0.985,-23.3],[0,0],[1.569,-3],[0,0],[-6.057,2.3],[0,0],[-3.627,-7.6],[1.421,-4.7],[0,0],[1.785,-0.6]],"v":[[7.462,-74.738],[-2.395,-177.89],[40.255,-185.334],[43.424,-175.334],[54.207,-99.937],[65.965,-86.709],[91.308,-89.177],[98.742,-65.575],[96.742,-51.475],[67.367,32.137],[66.413,42.338],[71.208,138.672],[67.246,167.938],[45.778,173.578],[29.125,174.069],[24.995,145.477],[8.518,180.248],[-28.854,189.434],[-23.932,158.259],[-6.105,115.394],[5.034,62.793],[28.394,14.897],[27.748,10.097],[-8.025,20.583],[-26.566,12.057],[-34.477,-8.409],[-35.802,-40.623],[-29.894,-50.423],[3.137,-63.565]],"c":true}]},{"t":71,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_ILexhnwGkU","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[0,1,0.813,0.218,0.5,1,0.73,0.145,1,1,0.647,0.072]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[0,0.898,0.556,0,0.5,0.844,0.461,0,1,0.791,0.366,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[0,0.898,0.556,0,0.5,0.844,0.461,0,1,0.791,0.366,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[0,1,0.813,0.218,0.5,1,0.73,0.145,1,1,0.647,0.072]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"t":68,"s":[0,0.898,0.556,0,0.5,0.844,0.461,0,1,0.791,0.366,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_jwoM2CR32N","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":26,"op":70,"st":0,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/superripple_effect.agsl b/TMessagesProj/src/main/res/raw/superripple_effect.agsl new file mode 100644 index 000000000..db157a08a --- /dev/null +++ b/TMessagesProj/src/main/res/raw/superripple_effect.agsl @@ -0,0 +1,66 @@ +uniform shader img; + +uniform float density; +uniform float2 size; +uniform int count; +uniform float4 radius; + +uniform float[7] t; +uniform float[7] centerX; +uniform float[7] centerY; +uniform float[7] intensity; + +float sdfRoundedBox(in float2 p, in float2 s, in float4 r) { + r.xy = (p.x > 0.0) ? r.xy : r.zw; + r.x = (p.y > 0.0) ? r.x : r.y; + float2 q = abs(p) - s + r.x; + return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x; +} + +float3 rippleOffset_ios(float2 position, float2 center, float intensity, float time) { + float speed = (intensity > 1.0 ? 1200.0 : 1500.0) * density; + float frequency = (intensity > 1.0 ? 17.0 : 15.0); + float amplitude = (intensity > 1.0 ? 15.0 : 30.0) * density * intensity; + float decay = intensity > 1.0 ? 5.5 : 10.0; + + float dist = length(position - center); + if (dist < 9.0 * density) return float3(0.0); + + float delay = dist / speed; + time -= delay; + time = max(0.0, time); + + float rippleAmount = amplitude * sin(frequency * time) * exp(-decay * time); + float absRippleAmount = abs(rippleAmount); + if (rippleAmount < 0.0) { + rippleAmount = -absRippleAmount; + } else { + rippleAmount = absRippleAmount; + } + + if (dist <= 80.0 * density) { + rippleAmount *= mix(0.4, 1.0, clamp((dist - 60.0 * density) / (20.0 * density), 0.0, 1.0)); + } + + return float3( + normalize(position - center) * rippleAmount, + (intensity > 1.0 ? 0.17 : 0.11) * (rippleAmount / amplitude) + ); +} + +half4 main(in float2 fragCoord) { + float add = 0.0; + float2 offset = float2(0.0); + for (int i = 0; i < 7; ++i) { + if (i >= count) break; + float3 ripple = rippleOffset_ios(fragCoord, float2(centerX[i], centerY[i]), intensity[i], t[i]); + offset += ripple.xy; + add += ripple.z; + } + float2 uv = fragCoord / size; + uv *= size; + uv += offset; + if (sdfRoundedBox(uv - size * .5, size * .5, radius) > 0.0) + return half4(0.0, 0.0, 0.0, 1.0); + return img.eval(uv) + half4(add, add, add, 1.); +} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/webview_app_ext.js b/TMessagesProj/src/main/res/raw/webview_app_ext.js new file mode 100644 index 000000000..1f156218f --- /dev/null +++ b/TMessagesProj/src/main/res/raw/webview_app_ext.js @@ -0,0 +1,112 @@ +/* + * Telegram-Android browser extension for Mini Apps + * + * # Gestures + * This script captures whether touch event is consumed by a website, to otherwise apply + * down or right gesture. Use `event.preventDefault()` at `touchstart` to prevent those gestures. + * It is recommended to do `event.preventDefault()` when dragging or swiping is expected to be + * handled by a website. + * + * Since some websites don't do that, the script also captures `style` and `class` changes to + * hierarchy of a touch element, and does equivalent of `preventDefault` if those changes happen + * while `touchstart` or `touchmove` events. + */ + +if (!window.__tg__webview_set) { + window.__tg__webview_set = true; + (function () { + const DEBUG = $DEBUG$; + + // Touch gestures hacks + let prevented = false; + let awaitingResponse = false; + let touchElement = null; + let mutatedWhileTouch = false; + let whiletouchstart = false, whiletouchmove = false; + document.addEventListener('touchstart', e => { + touchElement = e.target; + awaitingResponse = true; + whiletouchstart = true; + }, true); + document.addEventListener('touchstart', e => { + whiletouchstart = false; + }, false); + document.addEventListener('touchmove', e => { + whiletouchstart = false; + whiletouchmove = true; + if (awaitingResponse) { + setTimeout(() => { + if (awaitingResponse) { + if (window.TelegramWebviewProxy) { + const allowScrollX = !prevented && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !mutatedWhileTouch; + const allowScrollY = !prevented && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !mutatedWhileTouch; + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "touchmove": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch }); + } + window.TelegramWebviewProxy.postEvent('web_app_allow_scroll', JSON.stringify([ allowScrollX, allowScrollY ])); + } + prevented = false; + awaitingResponse = false; + } + mutatedWhileTouch = false; + }, 16); + } + }, true); + document.addEventListener('touchmove', e => { + whiletouchmove = false; + }, false); + document.addEventListener('scroll', e => { + if (!e.target) return; + const allowScrollX = e.target.scrollLeft == 0 && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !prevented && !mutatedWhileTouch; + const allowScrollY = e.target.scrollTop == 0 && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !prevented && !mutatedWhileTouch; + if (DEBUG) { + console.log('tgbrowser scroll on' + e.target + ' scrollLeft=' + e.target.scrollLeft + ' scrollTop=' + e.target.scrollTop); + } + if (awaitingResponse) { + if (window.TelegramWebviewProxy) { + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "scroll": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch, scrollLeft: e.target.scrollLeft, scrollTop: e.target.scrollTop }); + } + window.TelegramWebviewProxy.postEvent('web_app_allow_scroll', JSON.stringify([allowScrollX, allowScrollY])); + } + awaitingResponse = false; + } + prevented = false; + mutatedWhileTouch = false; + }, true); + if (TouchEvent) { + const originalPreventDefault = TouchEvent.prototype.preventDefault; + TouchEvent.prototype.preventDefault = function () { + prevented = true; + originalPreventDefault.call(this); + }; + const originalStopPropagation = TouchEvent.prototype.stopPropagation; + TouchEvent.prototype.stopPropagation = function () { + if (this.type === 'touchmove') { + whiletouchmove = false; + } else if (this.type === 'touchstart') { + whiletouchstart = false; + } + originalStopPropagation.call(this); + }; + } + const isParentOf = (e, p) => { + if (!e || !p) return false; + if (e == p) return true; + return isParentOf(e.parentElement, p); + } + new MutationObserver(mutationList => { + const isTouchElement = touchElement && !![...(mutationList||[])] + .filter(r => r && (r.attributeName === 'style' || r.attributeName === 'class')) + .map(r => r.target) + .filter(e => !!e && e != document.body && e != document.documentElement) + .find(e => isParentOf(touchElement, e)); + if (isTouchElement) { // && (whiletouchstart || whiletouchmove)) { + if (DEBUG) { + console.log('tgbrowser mutation detected', mutationList); + } + mutatedWhileTouch = true; + } + }).observe(document, { attributes: true, childList: true, subtree: true }); + })(); +}; \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/webview_ext.js b/TMessagesProj/src/main/res/raw/webview_ext.js new file mode 100644 index 000000000..91c683373 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/webview_ext.js @@ -0,0 +1,242 @@ +/* + * Telegram-Android browser extension + * + * # Gestures + * This script captures whether touch event is consumed by a website, to otherwise apply + * down or right gesture. Use `event.preventDefault()` at `touchstart` to prevent those gestures. + * It is recommended to do `event.preventDefault()` when dragging or swiping is expected to be + * handled by a website. + * + * You can also globally disable swipes for X and/or Y with tags: + * - + * - + * Please, use these tags as the last resort, as it disables convenient back and close + * gestures, degrading user experience. + * + * Since some websites don't do that, the script also captures `style` and `class` changes to + * hierarchy of a touch element, and does equivalent of `preventDefault` if those changes happen + * while `touchstart` or `touchmove` events. + * + * === feature is hidden under debug button === + * # Action Bar and Navigation Bar colors + * Top action bar and bottom navigation bar colors are defined with: + * - — action bar, usually an accent color + * - — action bar, usually an accent color + * - — navigation bar + * - — navigation bar + * - `background-color` css style — fallback + * `media` attribute on is also supported, feel free to use `prefers-color-scheme` + */ + +if (!window.__tg__webview_set) { + window.__tg__webview_set = true; + (function () { + const DEBUG = $DEBUG$; + + // Touch gestures hacks + const isImageViewer = () => { + if (!document.body.children || document.body.children.length != 1) return false; + const img = document.querySelector('body > img'); + return img && img.tagName && img.tagName.toLowerCase() === 'img' && img.src === window.location.href; + } + const swipesDisabled = axis => + (document.querySelector(`meta[name="tg:swipes:${axis}"]`)||{}).content === 'none'; + let prevented = false; + let awaitingResponse = false; + let touchElement = null; + let mutatedWhileTouch = false; + let whiletouchstart = false, whiletouchmove = false; + document.addEventListener('touchstart', e => { + touchElement = e.target; + awaitingResponse = true; + whiletouchstart = true; + if (isImageViewer()) { + if (window.TelegramWebview) { + const allowScrollX = window.visualViewport && window.visualViewport.offsetLeft == 0 && !swipesDisabled('x'); + const allowScrollY = window.visualViewport && window.visualViewport.offsetTop == 0 && !swipesDisabled('y'); + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "touchstart": x=' + allowScrollX + ' y=' + allowScrollY + ' inside image viewer'); + } + window.TelegramWebview.post('allowScroll', JSON.stringify([ allowScrollX, allowScrollY ])); + } + awaitingResponse = false; + } + }, true); + document.addEventListener('touchstart', e => { + whiletouchstart = false; + }, false); + document.addEventListener('touchmove', e => { + whiletouchstart = false; + whiletouchmove = true; + if (awaitingResponse) { + setTimeout(() => { + if (awaitingResponse) { + if (window.TelegramWebview) { + const allowScrollX = !prevented && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !mutatedWhileTouch && !swipesDisabled('x'); + const allowScrollY = !prevented && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !mutatedWhileTouch && !swipesDisabled('y'); + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "touchmove": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch }); + } + window.TelegramWebview.post('allowScroll', JSON.stringify([ allowScrollX, allowScrollY ])); + } + prevented = false; + awaitingResponse = false; + } + mutatedWhileTouch = false; + }, 16); + } + }, true); + document.addEventListener('touchmove', e => { + whiletouchmove = false; + }, false); + document.addEventListener('scroll', e => { + if (!e.target) return; + const allowScrollX = e.target.scrollLeft == 0 && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !prevented && !mutatedWhileTouch && !swipesDisabled('x'); + const allowScrollY = e.target.scrollTop == 0 && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !prevented && !mutatedWhileTouch && !swipesDisabled('y'); + if (DEBUG) { + console.log('tgbrowser scroll on' + e.target + ' scrollLeft=' + e.target.scrollLeft + ' scrollTop=' + e.target.scrollTop); + } + if (awaitingResponse) { + if (window.TelegramWebview) { + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "scroll": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch, scrollLeft: e.target.scrollLeft, scrollTop: e.target.scrollTop }); + } + window.TelegramWebview.post('allowScroll', JSON.stringify([allowScrollX, allowScrollY])); + } + awaitingResponse = false; + } + prevented = false; + mutatedWhileTouch = false; + }, true); + if (TouchEvent) { + const originalPreventDefault = TouchEvent.prototype.preventDefault; + TouchEvent.prototype.preventDefault = function () { + prevented = true; + originalPreventDefault.call(this); + }; + const originalStopPropagation = TouchEvent.prototype.stopPropagation; + TouchEvent.prototype.stopPropagation = function () { + if (this.type === 'touchmove') { + whiletouchmove = false; + } else if (this.type === 'touchstart') { + whiletouchstart = false; + } + originalStopPropagation.call(this); + }; + } + const isParentOf = (e, p) => { + if (!e || !p) return false; + if (e == p) return true; + return isParentOf(e.parentElement, p); + } + new MutationObserver(mutationList => { + const isTouchElement = touchElement && !![...(mutationList||[])] + .filter(r => r && (r.attributeName === 'style' || r.attributeName === 'class')) + .map(r => r.target) + .filter(e => !!e && e != document.body && e != document.documentElement) + .find(e => isParentOf(touchElement, e)); + if (isTouchElement) { // && (whiletouchstart || whiletouchmove)) { + if (DEBUG) { + console.log('tgbrowser mutation detected', mutationList); + } + mutatedWhileTouch = true; + } + }).observe(document, { attributes: true, childList: true, subtree: true }); + + // Retrieving colors + const __tg__backgroundColor = () => { + try { + return window.getComputedStyle(document.body, null).getPropertyValue('background-color'); + } catch (e) { + return null; + } + } + const __tg__metaColor = name => + [...document.querySelectorAll(`meta[name="${name}"]`)] + .filter(meta => !meta.media || window.matchMedia && window.matchMedia(meta.media).matches) + .map(meta => meta.content)[0]; + const __tg__cssColorToRGBA = color => { + if (!color) return null; + if (color[0] === '#') { + let hex = color.slice(1); + if (hex.length === 3 || hex.length === 4) { + hex = hex.split('').map(char => char + char).join(''); + } + return [parseInt(hex.slice(0,2), 16), parseInt(hex.slice(2,4), 16), parseInt(hex.slice(4,6), 16), hex.length <= 6 ? 1 : parseInt(hex.slice(6,8), 16) / 255]; + } + const colorMatch = color.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/); + if (colorMatch) { + return [parseInt(colorMatch[1]), parseInt(colorMatch[2]), parseInt(colorMatch[3]), colorMatch[4] ? parseFloat(colorMatch[4]) : 1]; + } + return null; + }; + let __tg__lastActionBarColor, __tg__lastNavigationBarColor; + window.__tg__postColorsChange = () => { + const actionBarColor = JSON.stringify(__tg__cssColorToRGBA( + __tg__metaColor("tg:theme-accent") || + __tg__metaColor("theme-color") || + __tg__backgroundColor() + )); + const navigationBarColor = JSON.stringify(__tg__cssColorToRGBA( + __tg__metaColor("tg:theme-background") || + __tg__metaColor("theme-background-color") || + __tg__backgroundColor() + )); + if (window.TelegramWebview) { + if (actionBarColor != __tg__lastActionBarColor) { + if (DEBUG) { + console.log('tgbrowser actionbar color', actionBarColor); + } + window.TelegramWebview.post("actionBarColor", __tg__lastActionBarColor = actionBarColor); + } + if (navigationBarColor != __tg__lastNavigationBarColor) { + if (DEBUG) { + console.log('tgbrowser navbar color', navigationBarColor); + } + window.TelegramWebview.post("navigationBarColor", __tg__lastNavigationBarColor = navigationBarColor); + } + } + }; + const __tg__colorsObserver = new MutationObserver(() => { + window.__tg__postColorsChange(); + setTimeout(window.__tg__postColorsChange, 500); + }); + window.__tg__listenColors = () => { + [ + document, + document.body, + ...document.querySelectorAll('meta[name="tg:theme-accent"]'), + ...document.querySelectorAll('meta[name="tg:theme-background"]'), + ...document.querySelectorAll('meta[name="theme-color"]'), + ...document.querySelectorAll('meta[name="theme-background-color"]') + ].filter(e => !!e).map(e => __tg__colorsObserver.observe(e, { attributes: true })); + if (window.matchMedia) { + window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', () => window.__tg__postColorsChange()); + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => window.__tg__postColorsChange()); + } + }; + window.__tg__listenColors(); + window.addEventListener('ready', __tg__listenColors, true); + window.__tg__postColorsChange(); + })(); +}; + +setTimeout(function () { + const site_name = ( + (document.querySelector('meta[property="og:site_name"]') || {}).content || + (document.querySelector('meta[property="og:title"]') || {}).content + ); + if (window.TelegramWebview && window.TelegramWebview.post) { + if (site_name) { + window.TelegramWebview.post('siteName', site_name); + } else { + window.TelegramWebview.post('siteNameEmpty'); + } + } + if (window.__tg__listenColors) { + window.__tg__listenColors(); + } + if (window.__tg__postColorsChange) { + window.__tg__postColorsChange(); + } +}, 10); \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/webview_share.js b/TMessagesProj/src/main/res/raw/webview_share.js new file mode 100644 index 000000000..0bd50d92f --- /dev/null +++ b/TMessagesProj/src/main/res/raw/webview_share.js @@ -0,0 +1,43 @@ +// polyfill for web share api +if (window.navigator && !window.navigator.canShare) { + window.navigator.canShare = () => true; +} +if (window.navigator && !window.navigator.share) { + window.navigator.share = data => { + if (window.navigator.__share__receive) { + return new Promise((_, reject) => reject(new DOMException("Other sharing operations are in progress", "InvalidStateError"))) + } + if (typeof data !== 'object' || !data.url && !data.title && !data.text && !data.files) { + return new Promise((_, reject) => reject(new DOMException("share(...) receives only object with either url, title, text or files", "TypeError"))) + } + if (!window.TelegramWebview) { + return new Promise((_, reject) => reject(new DOMException("Must be handling a user gesture to perform a share", "NotAllowedError"))) + } + const { url, title, text } = data + const file = (Array.isArray(data.file) ? data.file[0] : data.file) || data.files && data.files[0] + if (file && file.arrayBuffer && file.size < 1024 * 1024 * 3) { + file.arrayBuffer().then(buffer => { + const bytes = Array.from(new Uint8Array(buffer)) + const filename = file.name + const filetype = file.type + window.TelegramWebview.resolveShare(JSON.stringify({ url, title, text }), bytes, filename, filetype); + }) + } else { + window.TelegramWebview.resolveShare(JSON.stringify({ url, title, text }), null, null, null); + } + return new Promise((resolve, reject) => { + window.navigator.__share__receive = reason => { + window.navigator.__share__receive = undefined; + if (!reason) { + resolve(); + } else if (reason === 'security') { + reject(new DOMException("Must be handling a user gesture to perform a share", "NotAllowedError")); + } else if (reason === 'abort') { + reject(new DOMException("The operation was aborted.", "AbortError")); + } else { + reject(new DOMException("", "DataError")); + } + }; + }); + }; +} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/ids.xml b/TMessagesProj/src/main/res/values/ids.xml index a8de4da73..d6a6c8e79 100644 --- a/TMessagesProj/src/main/res/values/ids.xml +++ b/TMessagesProj/src/main/res/values/ids.xml @@ -34,8 +34,10 @@ + + diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 3f0dffa5d..da7924089 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -157,6 +157,8 @@ Set Emoji Status Change Status Settings + Refresh + Search %s or type URL Contacts New Group yesterday @@ -547,6 +549,7 @@ Restricted users Administrators Channel Settings + Balance Delete Channel Delete channel Wait! Deleting this channel will remove all members and all messages will be lost. Delete the channel anyway? @@ -640,6 +643,7 @@ Members will be notified when you post Members will receive a silent notification Sign Messages + Show Authors\' Profiles Add names of the admins to the messages they post. Admin Rights Custom title @@ -756,6 +760,7 @@ Link Tap to add a permanent link Choose photo + Create a sticker from a photo Add Image Choose photo or video Set new photo @@ -959,6 +964,8 @@ un1 disabled group invites un1 enabled signatures un1 disabled signatures + un1 enabled authors\' profiles + un1 disabled authors\' profiles changed permissions for %1$s\n\nDuration: %2$s changed default permissions Send stickers & GIFs @@ -2574,8 +2581,6 @@ Link Previews Link previews will be generated on Telegram servers. We do not store data about the links you send. Secret chats - In-App Browser - Open external links within the app Direct Share Show recent chats in Android share menu Emoji @@ -2604,6 +2609,7 @@ Clear sent media cache Call settings Clear WebView cache + Clear WebView cookies Enable WebView debug Disable WebView debug Debug enabled! @@ -3372,9 +3378,6 @@ Clear search history? Are you sure you want to clear your search history? Do you want to remove this chat from your search history? - Do you want to remove these %1$d chats from your search history? - Do you want to remove these %1$d chats from your search history? - Do you want to remove these %1$d chats from your search history? Do you want to remove these %1$d chats from your search history? Clear search history Remove from search history @@ -3875,7 +3878,10 @@ You disabled the auto-delete timer un1 joined the group via invite link un1 joined the group via folder invite link + un1 joined the channel via invite link + un1 joined the channel via folder invite link un1 removed un2 + un1 refunded back %1$s un1 left the group un1 added un2 un1 removed the group photo @@ -4144,6 +4150,7 @@ **Telegram** needs camera access so that you can take photos and videos. Tap Settings -> Permissions, and turn **Camera** on. **Telegram** needs camera and microphone access so that you can send video messages. Tap Settings -> Permissions, and turn **Microphone** and **Camera** on. Telegram needs access to your location so that you can share it with your friends. + Telegram needs access to your location so that you can add your current weather widget to a story. Telegram needs access to your location. **Telegram** needs access to location so that you can share it with your friends. Tap Settings -> Permissions, and turn **Location** on. **Telegram** needs access to location so that you can find people nearby. Tap Settings -> Permissions, and turn **Location** on. @@ -4634,7 +4641,8 @@ %1$s is currently not broadcasting live stream data to Telegram. Manage Invite Links - You can create additional invite links that have a limited time or number of uses + You can create additional invite links that have a limited time or number of uses. + You can create additional invite links that have a limited time, number of uses or require a paid subscription. Anyone on Telegram will be able to join your group by following this link. Anyone on Telegram will be able to join your channel by following this link. Edit link @@ -4666,6 +4674,7 @@ Create a New Link Delete All Revoked Links No one joined + No one subscribed Limit reached Everyone on Telegram can scan this code to join your group. This will delete link. @@ -4704,25 +4713,13 @@ Leave %d communities Leave %d communities - Do you want remove these **%d documents** from Downloads? Do you want remove this document from Downloads? - Do you want remove these **%d documents** from Downloads? - Do you want remove these **%d documents** from Downloads? - Do you want remove these **%d documents** from Downloads? Do you want remove these **%d documents** from Downloads? - Remove %d documents Remove %d document - Remove %d documents - Remove %d documents - Remove %d documents Remove %d documents - Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days. Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s day. - Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days. - Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days. - Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days. Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days. Messages for %1$s days deleted @@ -4732,24 +4729,12 @@ Messages for %1$s days deleted Messages for %1$s days deleted - Delete %1$s days Delete %1$s day - Delete %1$s days - Delete %1$s days - Delete %1$s days Delete %1$s days - un1 are speaking un1 is speaking - un1 are speaking - un1 are speaking - un1 are speaking un1 are speaking - Delete %1$d backgrounds Delete background - Delete %1$d backgrounds - Delete %1$d backgrounds - Delete %1$d backgrounds Delete %1$d backgrounds %1$d recipients %1$d recipient @@ -5786,6 +5771,7 @@ Create a New Theme Approve New Members Turn this on if you want users to join only after they are approved by an admin. + You can\'t enable admin approval for links that require a monthly fee. No join requests %1$s, %2$s %1$s, %2$s and %3$s @@ -6093,12 +6079,20 @@ Remove **%1$s** from suggestions? Allow **%1$s** to access to your location?\n\nThe developer of **%1$s** will be able to access your location when this web app is open. Allow **%1$s** to access to your location?\n\nThe developer of **%1$s** will be able to access your location when this web app is open.\n\nGo to Settings > Permissions and turn **Location** on to share location data. + Allow **%1$s** to access to your location?\n\n**%1$s** will be able to access your location when this website is open. + Allow **%1$s** to access to your location?\n\n**%1$s** will be able to access your location when this website is open.\n\nGo to Settings > Permissions and turn **Location** on to share location data. Allow **%1$s** to access to your microphone?\n\nThe developer of **%1$s** will be able to access your microphone when this web app is open. Allow **%1$s** to access to your microphone?\n\nThe developer of **%1$s** will be able to access your microphone when this web app is open.\n\nEnable microphone access in Settings > Permissions > Microphone. + Allow **%1$s** to access to your microphone?\n\n**%1$s** will be able to access your microphone when this website is open. + Allow **%1$s** to access to your microphone?\n\n**%1$s** will be able to access your microphone when this website is open.\n\nEnable microphone access in Settings > Permissions > Microphone. Allow **%1$s** to access to your camera?\n\nThe developer of **%1$s** will be able to access your camera when this web app is open. Allow **%1$s** to access to your camera?\n\nThe developer of **%1$s** will be able to access your camera when this web app is open.\n\nEnable camera access in Settings > Permissions > Camera. + Allow **%1$s** to access to your camera?\n\n**%1$s** will be able to access your camera when this website is open. + Allow **%1$s** to access to your camera?\n\n**%1$s** will be able to access your camera when this website is open.\n\nEnable camera access in Settings > Permissions > Camera. Allow **%1$s** to access to your camera and microphone?\n\nThe developer of **%1$s** will be able to access your camera and microphone when this web app is open. Allow **%1$s** to access to your camera and microphone?\n\nThe developer of **%1$s** will be able to access your camera and microphone when this web app is open.\n\nEnable camera access in Settings > Permissions > Camera. + Allow **%1$s** to access to your camera and microphone?\n\n**%1$s** will be able to access your camera and microphone when this website is open. + Allow **%1$s** to access to your camera and microphone?\n\n**%1$s** will be able to access your camera and microphone when this website is open.\n\nEnable camera access in Settings > Permissions > Camera. Length must be under %s seconds. Size must be under %s Kb. File must be mp3 or ogg format. @@ -6346,7 +6340,7 @@ Members of the group can’t add any reactions to messages. Clear recent emoji Do you want to clear your recent reaction emoji from suggestions? - Subscribe to **Telegram Premium** to be able to comment on behalf of your channels in group chats. + Subscribe to **Telegram Premium** to be able to comment on behalf of your channels in any group chat. Open Set status until… Set Status @@ -6362,6 +6356,8 @@ Add any of thousands emojis next to your name to display current activity. Real-Time Translation Real-time translation of channels and chats into other languages. + Message Effects + Add over 500 animated effects to private messages. Wallpaper for Both Sides Set custom wallpapers for you and your chat partner. Name and Profile Colors @@ -6566,14 +6562,8 @@ Are you sure you want to delete cached data for selected chats? Are you sure you want to delete cached data for selected chat? to apply the self-destruct timer - will have the self-destruct timer - will have the self-destruct timer - will have the self-destruct timer - will have the self-destruct timer - will remove the self-destruct timer - will remove the self-destruct timer - will remove the self-destruct timer - will remove the self-destruct timer + will have the self-destruct timer + will remove the self-destruct timer Disable Auto-Delete Draw Sticker @@ -7079,7 +7069,8 @@ Wallpaper Set a new chat Wallpaper Set a same chat Wallpaper - You will connect to this bot\'s website to launch its web app. + By launching this mini app, you agree to the **Terms of Service for Mini Apps**. + https://telegram.org/tos/stars More about this bot Tap to view this theme in the day mode. Tap to view this theme in the night mode. @@ -7252,6 +7243,7 @@ Archive Stories Archive Stories Edit Story + Edit Preview Who can see Everyone Close Friends @@ -7389,6 +7381,7 @@ Archived Stories Saved Stories New Story + Story Cover Edit Repost Allow Screenshots @@ -8690,9 +8683,12 @@ Telegram shares %1$d%% of the revenue from ads displayed in your channel. **Learn more >** Available balance You can collect your reward using Fragment, a third-party platform used by advertisers to pay for ads. **Learn more >** - Funds from your total balance become available for spending on ads and rewards 21 days after they are earned. - https://telegram.org/tos/content-creator-rewards - TON from your total balance become available for spending on ads and rewards 21 days after they are earned. + Stars from your total balance become available for spending on ads and rewards 21 days after they are earned. + https://telegram.org/tos/stars/ + TON from your total balance become available for spending on ads and rewards 3 days after they are earned. + https://telegram.org/tos/content-creator-rewards + Stars and TON from your total balance become available for spending on ads and rewards 21 and 3 days respectively after they are earned. + https://telegram.org/tos/content-creator-rewards https://telegram.org/tos/content-creator-rewards https://telegram.org/tos/content-creator-rewards In the coming weeks you will be able to collect your reward using Fragment, a third-party platform used by advertisers to pay ads. **Learn more >** @@ -8928,11 +8924,25 @@ Enter your PIN or use a fingerprint Enter your PIN Telegram Locked + Show 18+ Content + Do not hide media that contain content suitable only for adults + 18+ Content + Confirm that you are over 18 years old and update your settings to see potentially explicit and sensitive content. Confirm + 18+ Content + 18+ + 18+ Content + 18+ Content + This media may contain sensitive content suitable only for adults. Do you still want to view it? + This chat may contain sensitive content suitable only for adults. Do you still want to view it? + Always show 18+ media + View Anyway + You can update the visibility of sensitive media in **Chat Settings > Show 18+ Content** Your Stars Telegram Stars Buy Stars to unlock content and service\nin miniapps on Telegram. Choose package + Gift Stars to Friends %d Star %d Stars By proceeding and purchasing Stars, you agree with the **Terms and Conditions**. @@ -8942,6 +8952,8 @@ Incoming Outgoing In-App Purchase + Unknown User + https://fragment.com/stars Stars Top-Up Bot In-App Purchase Ads @@ -8962,6 +8974,11 @@ %d Star Needed %d Stars Needed Buy **Stars** and use them on **%s** and other miniapps. + Buy **Stars** and subscribe to **%s** and other channels. + Buy **Stars** to keep your subscription for **%s**. + Buy **Stars** to send paid reactions to **%s** and other channels. + Buy **Stars** to keep your channel subscriptions. + Buy **Stars** to keep your channel subscriptions. Move Caption Up Move Caption Down Add Fact Check @@ -9035,7 +9052,7 @@ To Front %d Story found %d Stories found - View stories with #%s + View stories with %s Limit Reached You can’t add more than %d links to a story. Next withdrawal will be available in **%s**. @@ -9050,6 +9067,7 @@ %d Star %d Stars Media + Post Paid Content Enter unlock cost Users will have to transfer this amount of Stars to your channel in order to view this media. **Learn more >** @@ -9074,5 +9092,249 @@ Do you want to unlock %2$s in **%3$s** for **%1$d stars**? Do you want to unlock %2$s and %3$s in **%4$s** for **%1$d star**? Do you want to unlock %2$s and %3$s in **%4$s** for **%1$d stars**? + Do you want to unlock %2$s from **%3$s** for **%1$d star**? + Do you want to unlock %2$s from **%3$s** for **%1$d stars**? + Do you want to unlock %2$s and %3$s from **%4$s** for **%1$d star**? + Do you want to unlock %2$s and %3$s from **%4$s** for **%1$d stars**? ⭐️ %s + Gift Stars + With Stars, **%s** will be able to unlock content and services on Telegram. + **See Examples >** + %d Star + %d Stars + With Stars, **%s** is able to unlock content and services on Telegram. + Use Stars to unlock content and services on Telegram. + View + Received Gift + Sent Gift + Stars Gift Sent! + **%1$d Star** sent as gift to %2$s. + **%1$d Stars** sent as gift to %2$s. + Webpage + Oops... + Failed to load page. + Failed to load **%s**. + Downloading... + Downloading %s... + Download file + Start downloading **%s**? + Start downloading **%1$s** (%2$s)? + Download + Recent searches + Bookmarks + Clear + Clear recent searches? + Do you want to clear your recent search queries? + Search Engine + Search and auto-complete in browser search bar + Open in Telegram + Open in... + Apps + Open App + By launching this mini app, you agree to the **Terms of Service for Mini Apps.** + https://telegram.org/tos/mini-apps + By publishing this mini app, you agree to the **Telegram Terms of Service for Developers.** + https://telegram.org/tos/mini-apps + Preview + No Preview + Upload up to %d screenshot and video demos for your mini app. + Upload up to %d screenshots and video demos for your mini app. + Add preview + no images yet + %d image + %d images + This preview will be displayed for all users except those for whom you provide a translated version. + This preview will be displayed for all users who have %s set as their language. + Create a Translation + Delete this Translation + Add a Translation + Add Preview + General + Add Translation + or + Reorder + Delete %s + Select + Unselect + Delete Preview + Are you sure you want to delete this preview? + Delete Previews + Are you sure you want to delete %d previews? + Are you sure you want to delete %d preview? + Are you sure you want to delete %d previews? + Are you sure you want to delete %d previews? + Are you sure you want to delete %d previews? + Are you sure you want to delete %d previews? + %d preview deleted + %d previews deleted + Add + Bots + Apps you use + Popular apps + Examples + %d user + %d users + Apps history + Do you want to remove %s from your apps usage history? + Bookmark + Link added to Bookmarks in **Saved Messages**. + Google + https://www.google.com/search?q= + https://suggestqueries.google.com/complete/search?client=chrome&q= + https://policies.google.com/privacy + DuckDuckGo + https://duckduckgo.com/?q= + https://duckduckgo.com/ac/?q= + https://duckduckgo.com/privacy + Bing + https://www.bing.com/search?q= + https://api.bing.com/osjson.aspx?query= + https://privacy.microsoft.com/en-us/privacystatement + Yahoo + https://search.yahoo.com/search?p= + https://sugg.search.yahoo.net/sg/?output=json&nresults=10&command= + https://legal.yahoo.com/us/en/yahoo/privacy/index.html + Brave Search + https://search.brave.com/search?q= + https://search.brave.com/api/suggest?q= + https://search.brave.com/help/privacy-policy + reserved + reserved + reserved + reserved + reserved + reserved + reserved + reserved + Web Browser + Enable In-App Browser + Open external links in + New Pages within Telegram + New Tabs in External Browser + You can choose to open external link without leaving Telegram. + Open links inside Telegram without starting an external browser. + Clear Cache + Clear Cookies + Are you sure you want to clear browser cache%s? + Are you sure you want to clear browser cookies%s?\n\nThis might log you out from website account sessions. + Delete all cookies and cache from the Telegram in-app browser and miniapps. + View History + Clear History + %d page + %d pages + Are you sure you want to clear browser history since %s? + Never open in the in-app browser + Add Website + Remove + Clear List + Telegram will always open links from these websites in the external browser. + Add Website + Enter a domain that you don’t want to be opened in the in-app browser. + Enter URL + In-App Browser + Open external links within the app + Search Engine + Search Engine is used in address bar to open search and auto-complete. + Open in Browser + Do you want to open this link in your default browser? + Always open links from **%s** in browser + Telegram will now open links from this website in the external browser. You can change this in **Settings.** + Edit Cover + Choose a frame from the story to show in your Profile. + Edit Cover + Save Cover + Bookmarks + History + No history yet + No search results + No bookmarks found + Go Forward + Privacy Policy + Require Monthly Fee + Stars Amount per month + Stars Amount per 5 minutes + ~%s/month + ~%s/5min + Charge a subscription fee from people joining your channel via this link. + https://telegram.org/tos/stars + If you need to change the subscription fee, create a new invite link with different price. + Subscription fee + ⭐️%1$d/month + you get approximately %1$s monthly + Subscribe to the Channel + Do you want to subscribe to **%2$s** for **%1$d Star** per month? + Do you want to subscribe to **%2$s** for **%1$d Stars** per month? + Do you want to subscribe to **%2$s** for **%1$d Star** per %3$s? + Do you want to subscribe to **%2$s** for **%1$d Stars** per %3$s? + Subscribe + By subscribing you agree to the **Terms of Service**. + https://telegram.org/tos/stars + Subscription successful! + %1$d Star transferred to **%2$s**. + %1$d Stars transferred to **%2$s**. + Monthly subscription fee + By sending Stars you agree to the **Terms of Service**. + https://telegram.org/tos/stars + renews on %s + expires on %s + expired on %s + cancelled + expired + Subscription + ⭐️%1$d/month + Subscription + Subscribed + Renews + Expires + Expired + You have cancelled your subscription. + Renew Subscription + Subscribe Again + Cancel Subscription + If you cancel now, you will still be able to access your subscription until %s. + Your subscription expired on %s. + Join Channel + You left channel, but you can still get back until %s. + ⭐️%1$d Stars needed for %2$s + Insufficient funds to cover your subscription. + Subscriber + appx. %1$s per month + Subscribed + Expired + Renews + per month + Stars sent! + You reacted with **%d** star. + You reacted with **%d** stars. + Undo + Star Reaction + Choose how many stars you want to send to **%s** to support this post. + You sent **%1$d** Star to support this post. + You sent **%1$d** Stars to support this post. + Top Senders + Show me in Top Senders + Anonymous + Send ⭐️%s + TOP + Star Reaction + Enable Paid Reactions + Switch this on to let your subscribers set paid reactions with Telegram Stars, which you will be able to withdraw later as TON. + https://telegram.org/tos/stars/ + Add names of admins to the messages they post. + Add names and photos of admins to the messages they post, linking to their profiles. + You can create additional invite links that have limited time, number of users or require a paid subscription. + You can create additional invite links that have limited time and number of users. + To + Monthly subscription fee + My subscriptions + Show More + You have enough stars at the moment. + Topup Anyway + https://telegram.org/privacy-tpa + %d expired subscription + %d expired subscriptions + Subscription cancelled + You will still have access to the channel until **%s**. + Subscription renewed + You renewed your subscription to **%s**. \ No newline at end of file diff --git a/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml b/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml index 32aeed367..641590bac 100644 --- a/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml +++ b/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml @@ -5,7 +5,10 @@ android:installLocation="auto"> - + @@ -16,6 +19,10 @@ - + \ No newline at end of file diff --git a/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java b/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java index e98608497..2f95fc732 100644 --- a/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java +++ b/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java @@ -11,6 +11,7 @@ import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; +import androidx.core.app.ServiceCompat; import org.telegram.messenger.web.R; import org.telegram.tgnet.TL_smsjobs; diff --git a/gradle.properties b/gradle.properties index 52f2a351e..18b41aeb3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,8 +13,8 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true #Sat Mar 12 05:53:50 MSK 2016 -APP_VERSION_CODE=4945 -APP_VERSION_NAME=10.14.5 +APP_VERSION_CODE=5143 +APP_VERSION_NAME=11.0.0 APP_PACKAGE=org.telegram.messenger IS_PRIVATE=false RELEASE_KEY_PASSWORD=android