From bf9cebc7fb208be4e8edc35ec26c898123f944b9 Mon Sep 17 00:00:00 2001 From: lihongwei Date: Wed, 22 Jan 2025 18:44:29 +0800 Subject: [PATCH] =?UTF-8?q?V1.0.1=EF=BC=882=EF=BC=89=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 15 + FingerKeyboard.test.jks | Bin 0 -> 2730 bytes app/.gitignore | 1 + app/FingerKeyboard.jks | Bin 0 -> 2612 bytes app/FingerKeyboardtest.jks | Bin 0 -> 2644 bytes app/build.gradle.kts | 62 + app/proguard-rules.pro | 28 + .../ExampleInstrumentedTest.java | 26 + app/src/main/AndroidManifest.xml | 55 + app/src/main/assets/keyboard.json | 5556 +++++++++++++++++ .../example/fingerkeyboard/HomeActivity.java | 44 + .../com/example/fingerkeyboard/KeyBoard.java | 41 + .../example/fingerkeyboard/MainActivity.java | 257 + .../fingerkeyboard/PreviewActivity.java | 188 + .../com/example/fingerkeyboard/Readfile.java | 32 + .../fingerkeyboard/SettingActivity.java | 99 + .../fingerkeyboard/adapter/ThumbAdapter.java | 105 + .../example/fingerkeyboard/data/ListName.java | 24 + .../example/fingerkeyboard/data/MyData.java | 40 + .../fragment/AestheticFragment.java | 36 + .../fingerkeyboard/fragment/CoolFragment.java | 36 + .../fingerkeyboard/fragment/CuteFragment.java | 39 + .../fragment/FestivalFragment.java | 39 + .../fragment/GravityFragment.java | 40 + .../fingerkeyboard/fragment/LoveFragment.java | 36 + .../fingerkeyboard/fragment/NeonFragment.java | 36 + .../fragment/SuperFragment.java | 36 + .../listener/DownloadCallback.java | 8 + .../listener/UnzipCallback.java | 6 + .../fingerkeyboard/tool/CustomViewConfig.java | 195 + .../example/fingerkeyboard/tool/DrawIcon.kt | 52 + .../example/fingerkeyboard/tool/KeyBoard.java | 850 +++ .../fingerkeyboard/tool/KeyBoardView.java | 1359 ++++ .../fingerkeyboard/tool/MyKeyBoardView.java | 167 + .../fingerkeyboard/tool/MyService.java | 200 + .../example/fingerkeyboard/tool/MyTools.java | 258 + .../fingerkeyboard/tool/SpaceItem.java | 56 + .../fingerkeyboard/tool/customerText.java | 44 + .../res/drawable/btn_download_background.xml | 7 + app/src/main/res/drawable/btn_main_normal.xml | 8 + .../main/res/drawable/btn_main_selected.xml | 8 + app/src/main/res/drawable/de_keyboard_bg.xml | 6 + app/src/main/res/drawable/del_icon.xml | 9 + .../main/res/drawable/home_tab_selector.xml | 6 + .../res/drawable/ic_launcher_background.xml | 170 + .../res/drawable/ic_launcher_foreground.xml | 30 + app/src/main/res/drawable/ico_shift_lit.xml | 9 + app/src/main/res/drawable/icon_back.xml | 9 + app/src/main/res/drawable/icon_download.xml | 15 + .../main/res/drawable/iv_back_background.xml | 8 + app/src/main/res/drawable/step_background.xml | 7 + .../res/drawable/step_background_selected.xml | 7 + app/src/main/res/drawable/step_selector.xml | 6 + app/src/main/res/layout/activity_home.xml | 40 + app/src/main/res/layout/activity_main.xml | 113 + app/src/main/res/layout/activity_preview.xml | 94 + app/src/main/res/layout/activity_setting.xml | 66 + .../main/res/layout/customer_input_view.xml | 17 + .../main/res/layout/fragment_aesthetic.xml | 21 + app/src/main/res/layout/fragment_cool.xml | 21 + app/src/main/res/layout/fragment_cute.xml | 21 + app/src/main/res/layout/fragment_festival.xml | 21 + app/src/main/res/layout/fragment_gravity.xml | 21 + app/src/main/res/layout/fragment_love.xml | 21 + app/src/main/res/layout/fragment_neon.xml | 21 + app/src/main/res/layout/fragment_super.xml | 21 + app/src/main/res/layout/list_thumb.xml | 18 + app/src/main/res/menu/main.xml | 14 + app/src/main/res/mipmap-hdpi/down.png | Bin 0 -> 2302 bytes app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes app/src/main/res/mipmap-hdpi/logo.png | Bin 0 -> 58504 bytes app/src/main/res/mipmap-hdpi/setting.png | Bin 0 -> 464 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes app/src/main/res/values-night/themes.xml | 7 + app/src/main/res/values/array.xml | 9 + app/src/main/res/values/colors.xml | 12 + app/src/main/res/values/strings.xml | 11 + app/src/main/res/values/style.xml | 81 + app/src/main/res/values/themes.xml | 8 + app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + app/src/main/res/xml/im.xml | 11 + app/src/main/res/xml/view_1.xml | 149 + app/src/main/res/xml/view_2.xml | 148 + app/src/main/res/xml/view_3.xml | 154 + .../fingerkeyboard/ExampleUnitTest.java | 17 + build.gradle.kts | 6 + gradle.properties | 23 + gradle/libs.versions.toml | 24 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 + gradlew.bat | 89 + keystore.properties | 6 + settings.gradle.kts | 22 + 103 files changed, 11901 insertions(+) create mode 100644 .gitignore create mode 100644 FingerKeyboard.test.jks create mode 100644 app/.gitignore create mode 100644 app/FingerKeyboard.jks create mode 100644 app/FingerKeyboardtest.jks create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/example/fingerkeyboard/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/assets/keyboard.json create mode 100644 app/src/main/java/com/example/fingerkeyboard/HomeActivity.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/KeyBoard.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/MainActivity.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/Readfile.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/SettingActivity.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/data/ListName.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/data/MyData.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/MyService.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/MyTools.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java create mode 100644 app/src/main/java/com/example/fingerkeyboard/tool/customerText.java create mode 100644 app/src/main/res/drawable/btn_download_background.xml create mode 100644 app/src/main/res/drawable/btn_main_normal.xml create mode 100644 app/src/main/res/drawable/btn_main_selected.xml create mode 100644 app/src/main/res/drawable/de_keyboard_bg.xml create mode 100644 app/src/main/res/drawable/del_icon.xml create mode 100644 app/src/main/res/drawable/home_tab_selector.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ico_shift_lit.xml create mode 100644 app/src/main/res/drawable/icon_back.xml create mode 100644 app/src/main/res/drawable/icon_download.xml create mode 100644 app/src/main/res/drawable/iv_back_background.xml create mode 100644 app/src/main/res/drawable/step_background.xml create mode 100644 app/src/main/res/drawable/step_background_selected.xml create mode 100644 app/src/main/res/drawable/step_selector.xml create mode 100644 app/src/main/res/layout/activity_home.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_preview.xml create mode 100644 app/src/main/res/layout/activity_setting.xml create mode 100644 app/src/main/res/layout/customer_input_view.xml create mode 100644 app/src/main/res/layout/fragment_aesthetic.xml create mode 100644 app/src/main/res/layout/fragment_cool.xml create mode 100644 app/src/main/res/layout/fragment_cute.xml create mode 100644 app/src/main/res/layout/fragment_festival.xml create mode 100644 app/src/main/res/layout/fragment_gravity.xml create mode 100644 app/src/main/res/layout/fragment_love.xml create mode 100644 app/src/main/res/layout/fragment_neon.xml create mode 100644 app/src/main/res/layout/fragment_super.xml create mode 100644 app/src/main/res/layout/list_thumb.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/mipmap-hdpi/down.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-hdpi/logo.png create mode 100644 app/src/main/res/mipmap-hdpi/setting.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/array.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/style.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/main/res/xml/im.xml create mode 100644 app/src/main/res/xml/view_1.xml create mode 100644 app/src/main/res/xml/view_2.xml create mode 100644 app/src/main/res/xml/view_3.xml create mode 100644 app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 keystore.properties create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/FingerKeyboard.test.jks b/FingerKeyboard.test.jks new file mode 100644 index 0000000000000000000000000000000000000000..cc52faa255224ee2f4bc8210a5e5e5b0b4fe6821 GIT binary patch literal 2730 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 literal 0 HcmV?d00001 diff --git a/app/FingerKeyboardtest.jks b/app/FingerKeyboardtest.jks new file mode 100644 index 0000000000000000000000000000000000000000..dffa5d0c6ac92cffaa084224f9558ff034052302 GIT binary patch literal 2644 zcma);S5y-U5{45OK&+hS_ecFAPGiUyP=70RopovfmCLlAK2svVb$dU|5`y4=4 zU=a~Q0}&zAU-A-~2(J7u3!Dogg0p_f8NccQ%c=idu|t7OMMSXHFHr;S_4@+Mfxd>u z{ynmzjd!mdG*qi1;b9|8Ow!y;Km?kdh3(&oOb{>tEy@CMB^dxc znL$8V5I3Q8>sa~0Pe$ji{q%8IvN(tc8uM~+Axo6S=fr4?M-a;OlyGRV^(WeQq?~}H z)dXc-5l$T&iXFx8zG86w=3699+xIqj78tiDSKFa+?*-ycR#r70lTWhf?Ak7?DtNCBMF?FH#_N`^xjzVoOXn5p$^FA7l~Gjkq~>H8!VMklOp1T1;Qd4-t3_a;e< zaX~xzUa8QNgA!y-DfRIuZOMF1@LO2o^EMJ`Rx>jowCrg3Rpzm~2cJXuv|bpwH`liI z=yTzwb7}B7pjn2T-~FP$P$X#sgwODPFJW1|M^&r~f1A9vZ@fic7BOjdolRcNe&@ld zM&Fq7@-vmj!CC8TlulqC+Th{ErVSNo2>(`U>Ck&MWf)h@3`*Zh_wMIbil{_+H{XvK zVVZwoCZ};-B4WRFKldKrSmNaYdOw8H-1ft0=!r^Fl0Bn&Ki0eB1n+kySM=j# zkba(6e073CY{R#Hebkk>@q`+YrdNf+evX>dE8Ql?-odF7DYjxc+qms6IJP);CNI*q z$4davyi(<5Vo>+OaSO#}G2aaBb651edg_Z*N)n)WcFCe{$=F}-g51^OkV&dRTs_i} zhUJ1}i}=V!CiwZx`K54=);i)#ddZ(^C;f_x6i!Tr(nb6ya4X7~1Ni>UGG zOP91N9$sEl@2lQ0*8&yaJUkKFYOTPjwPC}nG(hLI8@?09YM#~!7Z#*V;=5DH-3%Eq zmTVE7xn*ck+Zu&EiMoFchzTa7+`IEheXLmfsRH@Uh=?w`4)u(2c_EVI_*KnTOk5rz z&_iY`uQsih`dNQ(g*T$a<)D3t&Gi_Xni2GX;-RafxTU-$Etx_pycRIDeVs|thS6@) z8+ve&Bf#G`kN}%xLFq1m1uJ1$qbm&0PelS+lEk|Ed|zc6*Jqjlr^_I|ApPC~Vr{ph z8>dSP)%pE-I)C`|@6&{)=f;gwU_Zef63C48$qVK8MSdV##> z2AozY;2eF1opv#B1~$9#auf-~H=mEDQk-?{dh{R&4FUHYFsqoDcIYjCfShC!Tbd5k zP*~AdbW{6#Z>?%6MzSx(c*s_{1`qEkBv`&Cjz5_!Kx@T85R#?B`?UfxO!ys{Xd8{omQ_Y zZ?t4KJ*_UOo%(SlipX44CNSjZY}hdWfHMCa-w~ynMjXL)m<=kz5X;Jqn?~%SUoN)n z3?O&)-?Qmyypq@s2i<+1Frdq1=%&KENx=lktI}ZFlkdo~aPwWul6CjdZ)T6;#!ahA zzfD!Fdk5x7yGt!9fA~nc;4fdes3%e!_y?lTiBvlZ&4Lkdg10;R5w$aGUCR{xFu9`m zxArnoA!d2wZbpkbCX-M#Jai97qvx{iV0njE=DFRbw^_g@Y93buFMbwG7yP43G=!csh z)2w-zP(!}dW2=e4S!;knvBha;&ErPWOZL)q>52V5 zZBMO%J0U^)6x8KdKX$@9AHQeA-opio2OEQddQ_z}fF!c|5$U_-2faUiBk|ui9|y2p z64eQvxZ_lufFfjna5m;@NT1!oZila6C9F?JX+R>v_aIXlhz0E^`?MW9?bjS90+#Jw z72O(hVjtRWJD9aTM3-FRMSVrP(rw83_OYY3h|XS4WAWi<(2>8+XIG!RGv^7n0Zu$S24(Y>t5j%v@MAg4$%Q<9M~Mi>=%+WuU6*hEyrc z=rz}Dg3xDO)iOhMZd4ZL{c3ZB^e&T~sdNn5du^qM(f08xBzsTLmG_m16DqB9F4-@t zfe?X|pMIEH({p!ENI@aeq-CLu*Ndt4woG1Uz+XrD-J!-;ge#+DJz|}_eQS7Jx?YOJ zbS639L$|kkqso?LD{cMD%r(JB!*vVr!!~{&z+lYb8{|oTesting documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.fingerkeyboard", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a71134b --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/keyboard.json b/app/src/main/assets/keyboard.json new file mode 100644 index 0000000..eb6901e --- /dev/null +++ b/app/src/main/assets/keyboard.json @@ -0,0 +1,5556 @@ +[ + { + "className": "love", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0cd3014dfe1299673a425ebc66ec2ba3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/21858a3a2b1370dd2dcdacf4289046da.jpg", + "title": "Love Parrots", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/05cdbfe6c9781ad45af02e2a1fe1656c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/322a787af26b11c6b7954b8ba4490bdc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/23af1dd3335933ea0b0caa0ca4770ce6.jpg", + "title": "Sunset Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4facae6abdb7bf01743cd971a9017b52.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/60d09cb601d85f74a8689c7ea8db4b38.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/635dcd5b39d67d31afe5527419e33b9f.jpg", + "title": "Angel Devil Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0a3d998d998a9cf3f3ccfd6bef7b16cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/98fd518bda7fabda7faa93b151768d15.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0a266b474469b3c2332352a7262ab06.jpg", + "title": "Glitter Rainbow Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b8ee85deca13b494488c339af09afc22.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ce53c34b35bf78d72b919e5194c7413.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/164cb1a1c461be5cc5fda03dd0206654.jpg", + "title": "Purple Love Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/afcaab63c0a30297d85f2243061aaba4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c5951c713f76a16db46119d4c38e381f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/795d371368577bd42c1cb516b55982f0.jpg", + "title": "Romantic Heart Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/29e297b50cbdf05204bd27485359643c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/756349e863ff4719a2b0fd8899dda4ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1d154c71316e7c59e3b0084ab5286c88.jpg", + "title": "Sun Moon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7f4b339bb79ae371a7beae5a9afaff1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/177ef878ccac5b1c62950ef530616379.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48aa3f6963a0052f34b976c36d2ade21.jpg", + "title": "Red Valentine Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/db83f68e68cd0497716dc046d715b7d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f345a4977b9b62e43413a9ce2c18323d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9d5808fc0a119cdbf1aacf242c4b74b.jpg", + "title": "Pink Doodle Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c7aa936e42c622732cbf6b2340f2e422.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0e50d33331b1ca53732164241b301cb2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0dd3045d8097f0eb782a4c494f9e05b.jpg", + "title": "Puppy Kitty Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c424b4120ff33d2ea4f87e098a5302dd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cdeb7ac588ffd351a1cf28eef1377f29.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8bee8fa2ce265a3e12477d89f86014a4.jpg", + "title": "Red 3D Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/22c56f5cfa3e40561a5cc3e270791907.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/26fb1dd3ed3b885dbff1f6c26b322416.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2dab2458f6da3ffc9f71ee8f9e33b428.jpg", + "title": "Blue Love Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fdb57f770b282269bb242f0b52ccbe28.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2e4f96492a02ed12f231b39e75619496.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/edb07e0e247100d146d64f635f41a28c.jpg", + "title": "Pink Love Mirror", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/748ddd6cb623c0f4676f348bd115ebb2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc5213434d6c0362814a25f1a934fd5a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/13048bcbe6b1ba377cefbe790660f51e.jpg", + "title": "Love Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b05cda047a56286ddb3d8f4a9aa52fd7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3fc1c83f59179702fbcb7a64c08d2d7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c5c6a01a0b3a4805b13b6c33ffa79ca.jpg", + "title": "Sparkle Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a882bc3d4312022446ef29674543352b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e6848e37732e25e37ea80eee5130c08d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a9ef0cdbc04f4dc5210a125b58e9a7e.jpg", + "title": "Glitter Heart Coral", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ff33d571b054fe99e4dd4cfc687e6bd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ba97361c79a9639d3c6099e219c2b43.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/97a1d4230c053cec2a187d9c39e5b449.jpg", + "title": "Love Heart Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c96cedb306c2b6295e902a42a3539c27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8f1353c226c502ce1cef770103cbc1c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69c5c402b5568e47d9ac36e174c26b77.jpg", + "title": "Aesthetic Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33877b62fc70196ebcbf14a734fc995a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff93f73a242d8391ad44f65f2866a9e9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f04768a2b777d7f168895923af8aef2e.jpg", + "title": "Neon Love Light", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ab2c4ad6e6312d78ddb5407e31c1f641.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9a8f1b966039fa110cce4c86a2e3edf5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/896bb09a18d114841fc32483e752b2bf.jpg", + "title": "Cute Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d940466fa31e30df1c60f80c2b2c79b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b2d89c2f81ca6d6a4a6cbcbecf8a39e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ef8fd0c3f6a4723fd092a7fd33f77494.jpg", + "title": "Graffiti Rose Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7c58f283c8755c99d0abe8950f5c7d1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a05cb6aa0c4d5b4fee04a1534bc6ea04.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/580c7d0997c93ca57a6c4c62fd85d6d8.jpg", + "title": "Pink Neon Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7aab01a381bf315210813cba67afaa0d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/82f6ab84adc7a9f621d5a66ab07bcb87.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3528ab9f0ec9022f1ac0b61a040a32c4.jpg", + "title": "Neon Light Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8afbd8f60b302a69e6e7581807002626.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4a8ceb2b8b082b744c8823fe1f34b5dc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/581b74289fd52181777b34bc9f476b76.jpg", + "title": "Red Hearts 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7c6f0f7796761d67074749242691c46a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3e38f0128ad8b2d6c19f20b536e0792.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337c48b1d04a66c8c662fe8fac7d1f96.jpg", + "title": "Shy Love Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73c74526b80ec6b00e4aea35b8b3cf10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4281984af73c48808ec381a2eb03842f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f56ae964777d071c10fb82268b72360.jpg", + "title": "Lovely Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1a1eb9cb1234641b6e7ad2ec3307fd04.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/abd43be8531db0a72b1db27293454fb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e74ef3977541c33c72ee00db9ad5fb7d.jpg", + "title": "Love Balloon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/255fc373390574160e87e4cdb588e4dc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/07351b748fa7f2ba6f3ef884002e733c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/52dcbc054c8b8794ceaff7a6f7eb98d2.jpg", + "title": "Colorful Crystal Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d215e2d40ab4c5638878f55c58899f54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d555577385bebaf3f1c9d48fe88e0998.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/435665abee707a3a7fddd5d6a61b57ab.jpg", + "title": "Cat Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e0139f2d561a09a6dd0d5485ddc0e05.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a94584cb8ffc7c9fd8edc5e7f644fb62.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/80e6151a3587253513dbe6c6ffb58997.jpg", + "title": "Shining Twin Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4a707c5c0ed8c0f75db9f2ce02f7c5c1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2aff11564a49dedcff9255a51228d694.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ada3855bfce57d155528d56d229e72c.jpg", + "title": "Love Heart Lollipop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e5349b50a623e8e9cba9a2829c95682.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc61592ff75190347e8840cc6637f43b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/61555a1baaad3ea85194ed431af92172.jpg", + "title": "Neon Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/553a163368a028f07ea83b381f436434.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b39a4718a097019fa9bb91984b638d91.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4a83f452037c1c1e0be2bbfca73613f1.jpg", + "title": "Love Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cd69f48f9c719bc070d232808cd119b2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/50a6b9028c17f689e980535ab33c5284.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/472e91317bc96a393695dc0e852a8625.jpg", + "title": "Love And Peace", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ffbe44dbe2b011c19a63ca430daab3d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad0b8e69a433285a8fd9ae23e857d4ab.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/febb8cef9ae8d2e6e318bba37d1d0b3e.jpg", + "title": "Pink Love Balloons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5b9f3b02886fc935438448ca149fb8ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a4c378e32b413949f02cd93847a764f7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f50c4d26af82ab8ecf2388e39602328f.jpg", + "title": "Dog Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed5963803a2b00d078a682dab3a1737f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2e5d1512f63e4c9ea2378d7a33365250.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e467146a07ae9557ea5b493b1f6d324c.jpg", + "title": "Galaxy Marble Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e2f7d694adf3ec22f35aa7a4ff52643a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ac6410743ea9048cdb299b800a26dd60.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/85698dc949cd380f1822bcf7182e8a44.jpg", + "title": "Bright Blue Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d9176e756817915375663be035096fba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ecc75487e7038bd6c7dd72ea74d3d4b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ae613b256996ca888628571e074b387.jpg", + "title": "Parrot Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37ae31adf1e9c1541cf04e99e63790d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/283b5e61bf797c138e19cc2e47fa718f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/72897d23e69b92e20285f867d9e2f81d.jpg", + "title": "Love Pet Life", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f0c78374e37a43deacb280f16cbc4e8d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ab39f35c65e0e8f3ceb9397bb6fe472.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/323d398d38ab6d198aea4912376c1a9d.jpg", + "title": "Cute Bunny Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a0bffe36ae759d94538044f645fb0a81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cc3169c2853c7c6ef76aa341262ab803.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a82105f908e63a5c1fed450f855f22e1.jpg", + "title": "Neon Finger Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a75373cf46ec40dd8c3f09a15967f417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44f47f5cfb02411fb4077b66c3ed058c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bcb7e8bf064260ce689a6473e445e08f.jpg", + "title": "Red Love Valentines", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/633eb4f7ca16374728a20eb3655abc63.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4671747ba8117a3bff1a5af7cb3957a7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7495c81c2c3ca2ab97608e49667e8d30.jpg", + "title": "Rose Gold Pearls", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e1bb2bbfc63359656d2d9626b9cbfa4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc5a25565b3cbbd7ca4759d41503e14a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0dea2ab904a92e76f13a9f92ebed2f57.jpg", + "title": "XOXO", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb4abe2a966e99ce4cc00edf66ca18b6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dfea248800b350c85c3b0704d59e3843.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03314742fe2a1be29e9d500c72a39e67.jpg", + "title": "Pink Glitter Heart 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93bbefb657fa054f6845387dab56ea0c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/767ffc55088e4cc1f6026592e172894f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/823e682de86a7df3d301e38fad16897e.jpg", + "title": "Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/32058e9dc1e0ad2c94cdc7250f5abf3c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e6c4e8c4bc2184507789d738c943df0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/be1a546d76c1a08b85547fbcda7fc136.jpg", + "title": "Pink RGB Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5de85592a7e96862a81e56f1dae7e21f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d830c6ec0ab22a851d84c37bbb9f964.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8774e8fcc8c0dfa4089ba630c4b36092.jpg", + "title": "Neon Romantic Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b1a2723340145b9972c46e32211738fc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa652fd752b83b4be2ee795592ce8686.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bba3f6325628052e4ad5f277c04e8782.jpg", + "title": "Love Couple Cats", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ef3574260b228ac18c3d942be156421.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/95459ffa27560a8d832b8e0bd68d839f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d14101bd18d88fe38c8926da51f5c527.jpg", + "title": "Love Heart Kpop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73234e4d1f8229a91085dc77e3bc01c2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ec1fdf2f65f56b35bd20e3ec37d0a4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1f16466b0c02d7e12e88bd852965d6b6.jpg", + "title": "Valentine Lovelight", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e9781ed97d96bb1ede09b4324da4666.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2678a9d60a6deafcb0ce39611aab4ada.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/04aa21e32769749d30c107a193729ac3.jpg", + "title": "Love Penguin Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c694af4caa592c54dcaf7d0da8a373fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e396b0112a3fe5ef2bdd423418dfef1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc0f081e2d2d314917fdc855f315e6ef.jpg", + "title": "Love Panda Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/579033fa6a038b04a5495a2e82632039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9113d3554aff19a708934018360ab389.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cd61f43a46d90f956e6eade6bd0caf5.jpg", + "title": "Teddy Loving Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4414f4e03dfa1501d89e11151b4ae1db.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed744dce1f269d5d678bd3aee07fc142.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/46debd656f7ab1fdc2045b74defb26df.jpg", + "title": "Sparkle Glitter Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b7602f6dc1710c392a7fb0c0d87f3f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/121ffd309cf6f20cc6e54e03f2bc713b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ca595c01a89db6d51c893e54e7e48c9.jpg", + "title": "Black Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e89c30a80f329f04c8f770cdaf3a8b6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb68c9429c1f43e6377c1f5b4b45355d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc16ae2a6687588003f42509ab3ccbea.jpg", + "title": "Red Valentine Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c1e0698ef820eb14be84697024885e7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9fc4ce4bed6c72fcee3d03f726473731.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc3c6ea8a9a42d6af7c08cdb9a0607ea.jpg", + "title": "Bear Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e83c5e33f8f5356178aa7de4dd6975f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/967541749f2f1442db1e9a23e95421a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9493c05cfdb60a75bc0d6ea3651992ce.jpg", + "title": "Cute Moon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/efc2ee720eb22b534f44656ac50d34c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ab39f35c65e0e8f3ceb9397bb6fe472.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/323d398d38ab6d198aea4912376c1a9d.jpg", + "title": "Cute Bunny Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a0bffe36ae759d94538044f645fb0a81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cc3169c2853c7c6ef76aa341262ab803.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a82105f908e63a5c1fed450f855f22e1.jpg", + "title": "Neon Finger Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a75373cf46ec40dd8c3f09a15967f417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44f47f5cfb02411fb4077b66c3ed058c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bcb7e8bf064260ce689a6473e445e08f.jpg", + "title": "Red Love Valentines", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/633eb4f7ca16374728a20eb3655abc63.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4671747ba8117a3bff1a5af7cb3957a7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7495c81c2c3ca2ab97608e49667e8d30.jpg", + "title": "Rose Gold Pearls", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e1bb2bbfc63359656d2d9626b9cbfa4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc5a25565b3cbbd7ca4759d41503e14a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0dea2ab904a92e76f13a9f92ebed2f57.jpg", + "title": "XOXO", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb4abe2a966e99ce4cc00edf66ca18b6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dfea248800b350c85c3b0704d59e3843.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03314742fe2a1be29e9d500c72a39e67.jpg", + "title": "Pink Glitter Heart 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93bbefb657fa054f6845387dab56ea0c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/767ffc55088e4cc1f6026592e172894f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/823e682de86a7df3d301e38fad16897e.jpg", + "title": "Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/32058e9dc1e0ad2c94cdc7250f5abf3c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e6c4e8c4bc2184507789d738c943df0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/be1a546d76c1a08b85547fbcda7fc136.jpg", + "title": "Pink RGB Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5de85592a7e96862a81e56f1dae7e21f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d830c6ec0ab22a851d84c37bbb9f964.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8774e8fcc8c0dfa4089ba630c4b36092.jpg", + "title": "Neon Romantic Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b1a2723340145b9972c46e32211738fc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa652fd752b83b4be2ee795592ce8686.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bba3f6325628052e4ad5f277c04e8782.jpg", + "title": "Love Couple Cats", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ef3574260b228ac18c3d942be156421.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/95459ffa27560a8d832b8e0bd68d839f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d14101bd18d88fe38c8926da51f5c527.jpg", + "title": "Love Heart Kpop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73234e4d1f8229a91085dc77e3bc01c2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ec1fdf2f65f56b35bd20e3ec37d0a4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1f16466b0c02d7e12e88bd852965d6b6.jpg", + "title": "Valentine Lovelight", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e9781ed97d96bb1ede09b4324da4666.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2678a9d60a6deafcb0ce39611aab4ada.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/04aa21e32769749d30c107a193729ac3.jpg", + "title": "Love Penguin Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c694af4caa592c54dcaf7d0da8a373fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e396b0112a3fe5ef2bdd423418dfef1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc0f081e2d2d314917fdc855f315e6ef.jpg", + "title": "Love Panda Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/579033fa6a038b04a5495a2e82632039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9113d3554aff19a708934018360ab389.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cd61f43a46d90f956e6eade6bd0caf5.jpg", + "title": "Teddy Loving Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4414f4e03dfa1501d89e11151b4ae1db.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed744dce1f269d5d678bd3aee07fc142.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/46debd656f7ab1fdc2045b74defb26df.jpg", + "title": "Sparkle Glitter Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b7602f6dc1710c392a7fb0c0d87f3f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/121ffd309cf6f20cc6e54e03f2bc713b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ca595c01a89db6d51c893e54e7e48c9.jpg", + "title": "Black Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e89c30a80f329f04c8f770cdaf3a8b6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb68c9429c1f43e6377c1f5b4b45355d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc16ae2a6687588003f42509ab3ccbea.jpg", + "title": "Red Valentine Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c1e0698ef820eb14be84697024885e7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9fc4ce4bed6c72fcee3d03f726473731.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc3c6ea8a9a42d6af7c08cdb9a0607ea.jpg", + "title": "Bear Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e83c5e33f8f5356178aa7de4dd6975f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/967541749f2f1442db1e9a23e95421a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9493c05cfdb60a75bc0d6ea3651992ce.jpg", + "title": "Cute Moon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/efc2ee720eb22b534f44656ac50d34c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dd5fbcddfdff76b7d58a1568082c9d21.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c0c704ac8282ec17a437d2e3dd704f4c.jpg", + "title": "Sunset Lovers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a9d6762f2f8a846a5fb2f260f0c5a198.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/841d6f969f2064b467f1eaca5a0325f3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/500e5885cd29272651b799422515cbdf.jpg", + "title": "Couple Love Story", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3eec6ce21ffeb7c1658dd37a14f76a3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fe736d082251fa6d97db8c58986cab2c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2098b91375ff1b51076c8c9192ddd697.jpg", + "title": "Teddy Bear Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cfdf48db3b5058462ec3e32c465db6e2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10c36eb5a7a8172000ef2a154deebcb1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd6579a161d6b82d9b547bcde8d02116.jpg", + "title": "Diamond Purple Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/53885d9bdb51dc6c60b95fbdcb495558.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a64fee9a9dac129120193107e3cb231a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f7db9a6e3f57b0acf8ce59c8f0bed461.jpg", + "title": "Doodle Red Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37958199700cc8d96ddad8dceda8ab80.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4823dbbc77b6e21d154422525f4805f5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc3c1e87255f20ee235af745eeb0be17.jpg", + "title": "Fairy Lights Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/47f7270d2ae94de74a5ee11b7ea3d198.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/caf8614e167ddc17487ced306c66776a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1c56ad42b17cb01c911c0d0d17167f97.jpg", + "title": "Pink Couple Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5490bf09d1924309238005051096807c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bb46509d8625dae56eed4408733322d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d80d1ea5f5eda60782cbe132d0455ba9.jpg", + "title": "Lovely Red Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e5df650faccb66e7ce224dc7e1856418.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3adc4c3d10994ea70a010da23648104d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/73849c532ebe3ca7f1500e791083750f.jpg", + "title": "Bear Couple Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/638fa021a26e55dbc3a96b3d17015f06.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3f960095f31247dbc0db4ebcd31c2657.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0013e3260579e190e0fa29e4761d5877.jpg", + "title": "Love Red Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f49631ec32225bf8a7f8dd49c2370fb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0d8ae325a6ecbc356a1d3b76beca32fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b40d5a5ac0c06c1b5544b1fc8f99095f.jpg", + "title": "Neon Light Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/35855c73a0ee0071c5ae0f0e56357510.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b6fba1f3955eaae9c4bf88d2d8b9d11.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b01a2187b9142a50183152cebbfc2c16.jpg", + "title": "Red Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc59e2baa61fd6840010d3851e981c81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b0b9567e1ae90ddeb135745b1365b5b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/43621e0f82a4764931cdfefb17a6e1ac.jpg", + "title": "Neon Streaks Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/91114c6c2cc25d287773d624bc1b64bc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/68013a4751d5ab8fa799952a4c38c871.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f082befb417770957e62417ea462332c.jpg", + "title": "True Love Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b38a26a89634807b4dfbbb06b8e1a61a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e2ac82ef4c9bffb97ba3000660fa569a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/339187477dc314f27d37aa6e3d033081.jpg", + "title": "Love Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/663df7425d314df83bc46b75528075e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a794436515ba6cdc92bcc8d59fac7def.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e09382ca186536d9e92ac55e9b0ff345.jpg", + "title": "Pink Heart Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33bd498a8118935a64bd643e2b3f8df0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0068d3a3ff6c14fa4204e5b96384ae4a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f55e6ea21c2c0ff9264e61a75ae046e0.jpg", + "title": "Yellow Couple Lover", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/802e5f7d2fc1cadb8d19164d6cded733.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dcdda4fc64e23afd1e78ebfa7fcd491c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8955fde338d34013859d8a391e4f501f.jpg", + "title": "Purple Doodle Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9ef09792a772bc0813d31de9538c1297.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/16da56b7c6bab5dcfa5f832d956d1ca8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f5e2f25a24bb45f7fd348f14845ca1ef.jpg", + "title": "Bubble Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d842b752aca13d74f01d446c9efa4dc7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3c71d7c3766e441b9dbbe13bd04452e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6f4d665077e0a2499cf572afa5ab2cb7.jpg", + "title": "Sexy Love Lips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/83e852b8503d697abc324800111f766c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cac72a50cdcbdd36119dbdc47ffac9d6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2a64bcda6842dcaeea8604af26874b45.jpg", + "title": "Parrots Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3e541d8ed0bf3ed6470cd348795b9182.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a8bc295c764c040f3bec026f9e6c6d62.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/313a5c7f756c70ebbe4aba2e3193badb.jpg", + "title": "Transparent Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af5797dec108055a9936dd1a5ab9ecf9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42397e7f5caa7cfcfde15c069cfdf6b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0e92526487439b64944a456839e54c6.jpg", + "title": "Neon Red Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f246376590b509c63173963c71335535.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f488f10ec3593ed3f545770d6d386db4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f63666b958b6aea4137536b1d50b03fd.jpg", + "title": "Black Gold Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/36e55a59fb80a515e6f977900c08a6e1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/770fb6d3810b764a623724d991c7775f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5105aa6cfc9aa2a9e3c44bbf14f3b2ae.jpg", + "title": "Purple Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd0ed1d65feae6e0f21a56924e9b6015.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3335bffc14452db55ffb53c11eb1b6e8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d63b01a6be5a46ec57c497be44936344.jpg", + "title": "USA Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9fe6f443a3e140b1503a21566960639.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f90d13aae661b3ba7236aef6628c6d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/80c4a8642943f4b1eb562716cc1f6068.jpg", + "title": "Fairy Lights Heart 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e28ffc76f76632e34bae5bd815adbca3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2ff613db906187cfefbc5ee1238c948c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/386136fdfcda7d7806ff01991cb8d51b.jpg", + "title": "Neon Hand Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3901b0fe1c7ff7e752a8c747a0552cc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/33bb0254df22b4c7b8a45c8012c8507d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1fd21a804dae285c0d435ff01a9eb52c.jpg", + "title": "Neon Heart Lights 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0995dcb1673b19ed6fcc3e89c8b54e1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7619668cb63a40175bbf4fc80fa6bf39.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d2420b778f5dc024858cdcec9e0b53e6.jpg", + "title": "Love Birds Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e843ad02ed8c058bf2dbf3c42f79935f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b5ba0a920158a3a8c0b3d8fdb98b717.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f135b1a8cb6aafbfa28dfdc0459b1fe2.jpg", + "title": "Cactus Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/44dd8646e8a7cfb63639bd18ecc9d0d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f12701a341921f6788b87bb1f8cd7e64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4fcfc083c377b653a298df082f4b4028.jpg", + "title": "Cute Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/65455c53286533a1b7de336d0fb256fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/88d1f4f88ce82925957905c51cf9aa26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/157d372d6ebd87ec10d0f9d31f1f2e1e.jpg", + "title": "Cross Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/916370723b3b60f62efae752d7591039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/005d254e1b2f675723c0eca69a5ae020.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cc53f596a170e545ec14e5a62593bbf.jpg", + "title": "Rose Gold Marble Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c33e66e6281de12ba2bd9459ca5ddfcd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cac9728dcb632c387d90ad911a737e72.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/92cd223af4b01e54cd1b5e9b31cbcc70.jpg", + "title": "Neon Pink Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6db73f2c4286ff6d8ae767f2bfd3c8f9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2254766caef14736d7a783b84f249e64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1a0596d424cf013bab4b19cfaf72eb8e.jpg", + "title": "Emoji Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dd7c5fde1bc76b02be5dc566225f8754.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/facc6aded38e054aba98a2c8839986d3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7fe6e38b38598ab04e9332ccd3b0c281.jpg", + "title": "Glitter Emoji Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc1c3e41a6029d01793cef5cd5a4e62d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/23ae98a16bc696d939821d376bdcec5a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3a77de6bf075e8ae257c866dec46333a.jpg", + "title": "Fairy Lights Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b26a10ebcfc9bf28ce99b91c10139afd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/905895c61803623e17888ea655aa4ff7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5a3bbd4795fc15bec6075114ea22c185.jpg", + "title": "Grim Reaper Skull Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c79357f5d02ec6a1b4b128ec622e578e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ffbb4be389b0557885f07f1df5a5594b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/32eb87ed6a725286b5fca63f91e7c939.jpg", + "title": "Neon Blue Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b97abba35134ff1de476bfc399ae68cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3ecb0be64972dc7d1cbaf8c35eba4cbe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86049b96b196c0894ad07c64db1be4b8.jpg", + "title": "Love You Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/082482741d8c81290b276355c3dc4b1d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/98e99f52957a700c33b0bb598b09cf16.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7cb0e3a0978acfbd5b1a44ccfd8129c0.jpg", + "title": "Doodle Pink Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6bf53db168e318f415b80fdcd9ebd525.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f0415e98234e3c81e1b939ed6d247d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4e46c11a200b664fccefc86499e36ec6.jpg", + "title": "Love Sweets", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8d7b061b994b4615d4b9d202e2db8646.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1c717f202676dd3a3388e79a8e02e6d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66fcc417a0d8fbd75c376b9eec2453ae.jpg", + "title": "Lovely Ragged Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51f4c9c699b7db37ee6e18e57ac884b4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/762f005d7b9a01193a35626201223f31.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/522b79ce9b60fd4da075ebfc81621e40.jpg", + "title": "Cute Birds Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6a29220be7995facaee31c8904ff7d2d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7401f32670f06f0249cb7202ccd23685.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d71c9ab6f0b2bf10aa156f42362e1c0f.jpg", + "title": "Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af977a101d7dea4c4e7877e1dd5b8d69.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa479881b7b82941d275e0e0c1c35cc2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37c7d921e85672618823c1c94b7390ad.jpg", + "title": "Valentine Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0f6ee79e5601dd0540616cbbd51ac98.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/54b9b431a24455df198de8f5826560aa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6bd55ffc38c331492f8d778229a8ebb2.jpg", + "title": "Pastel Blue Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd9d2e985ec8d01b869f584cd2c78432.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8e472772f568cc79ffff4a4b2e3afc77.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a77100efe5f2bb872122c1a53551ea9.jpg", + "title": "Neon Heart Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8745dbdb9359c1782561b522c0aae5da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b3ab689aaf812a61fd7a4efdf66e0be1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/edc8f72de11ab73f7c63ff2d6e866b2b.jpg", + "title": "Love Pink Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4dbc7a8724ffee17464f51fc9f99b43.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c42c7acb0606eedb6a2b18270a06c83.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f6a8ff31c981e514c1962a54fbe5b7f.jpg", + "title": "Pink Love Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7307d616bbf33111ac2efed0ce2fb16a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5fa2c51cab09488a4ae1070924c12cc3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/89f26e6d81a3edc29bc1d39a87e949dd.jpg", + "title": "Rose Gold Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/eb7fd32f8f3f82d43b5b01522a3e31e6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/90717cd2ea4c240b08a51e49aeb3d764.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e4f0e11222bd3102d146c3af5b863a2.jpg", + "title": "Sweet Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40378b72ad77ee8f8644e7c68ef5b220.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/357accac25c7e5bfe4b25470d1e90169.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc5f22ebb04336f927c0f59c68343aef.jpg", + "title": "Lovely Teddy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd34f0ff89109933f97bd4962abb74e7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c5d3e19ef62423528f5fc477b689983.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69849b2c5d44cf0441d408aae2e799ff.jpg", + "title": "Rose Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/205ac8d389c0997a03a9fd239d7797f7.7z" + } + ] + }, + { + "className": "festival", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3ce935f39cfa4bf877370e7166523e0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9b79cbc3b678e9a7e63d334ea66fc7c.jpg", + "title": "Neon Christmas Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1d3a383e77eb647e2556090591f7dbb2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b9d4b9c85d15ee4ee14f7b6463a3eb28.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/532039d5c4cafdf5bec47efbc49ae7b3.jpg", + "title": "Xmas Nightmare Jack", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/47d2f5bf2ee689487249063680745f7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/09000571d64d35ee73201c991b90820c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9bb7697389c5f955eea3b9588e48b84.jpg", + "title": "Xmas Crystal Melody", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8aa0dc2aee6975a676266e6b5d82afda.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e611444bb8f5c320201681b157999a9b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fbdc422a14eb6061b6c68f420af4872c.webp", + "title": "Cute Xmas Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1feffec760891fcd014ee8f932284eab.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6555d0781a1e780e7fe98bf9ac193008.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d66fb64c7440c2cab67ece493e522410.jpg", + "title": "Dab Xmas Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/284f18cff4f716a2f93ec9643dc67be0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b1660e51a8365bcd7ddd7fd5edf5b660.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7234993b12877171b146598274df09ec.jpg", + "title": "Xmas Candy Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7b2a115a7765519af080acb5cac5b78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/15267c95054f38702374ac0ae2c616cb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3067e6a337a77f71633497feb48189a6.jpg", + "title": "Merry Xmas Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d8389d945d8492100757882acef71b39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f42ce29bb56f9390bdb10f241a94d086.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cd99bd4d5b3cca913882eca0ed6c8c32.jpg", + "title": "Cool Dark Xmas Jack", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06d2f27e94e4e603a2950cc172a66db8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6712cbd2ebf9b2f76da5e78fac5415d8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bca73e99c4be52841bf1bbb2dc5abc8a.jpg", + "title": "Red Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/077ae89e2171637381e8f1b32a7578bb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/69433cef1acb4ffc6619084480dcf259.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/04905d4acd96521c99349ac80f5ccd67.jpg", + "title": "Santa Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2bc39e79ba2f51ef49f48979312227f4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3c6beefca929cd57b35f10b26813eb88.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/796c554d25c1888f6e36a03b46087855.jpg", + "title": "Christmas Winter", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1d4da8f56caaa7df5e0a187bcabf53fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e435c6491dd5e6c2eaa29149e9d424b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ec3bbb428189e261eafd9840114b75a6.jpg", + "title": "Cute Christmas Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/068d97467b0bcfd0a7c5f044fd9b8ff1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6073cc7540970949bd5070a3872abfe2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4ec4384b181ae3f545b8375123636f76.jpg", + "title": "Gold Red Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/528adbec5c8aeb85a1a3373c9eaaf251.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cff8f9d7c442abb2fe1367f95d58ad40.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4b02affefebd4f191fda9793beb52491.jpg", + "title": "Neon Green Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/446e939a87db1f7c22aa919c18c22a79.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e91d5d40f7e5e6a193b87f9f11fcfdf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d18643c702d48162bd94a72eb604d16c.jpg", + "title": "Holy Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3365cb0188de232b108f5a0e2d53623a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0fc1e3943ab3edc9d7ad3e87e03ef179.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f526f8b31d5a1267861523def2581028.jpg", + "title": "Merry Xmas Sing", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/df5b90d13da2980304620fe5fffb15af.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/673f55b4a42ca04b015baa5409d91218.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6b781adb466b5491a0a645878f1dc724.jpg", + "title": "Blue Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0a7dd6a854bfb322ce57d72e9618e732.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5335da4ecf1dcdd771a669a3889f83cd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4991b730f675b7d9c0abf3d067e03261.jpg", + "title": "Pink Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b22622e1f6004fc5c3fe73b472d6e10d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3fc950182ba60e5adff0210ed648919a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3171a189276882c9c6b0bf9aed0d0397.jpg", + "title": "Christmas Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77c14644be20a072560b66218d94f6bc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c78ae979e5e04aaa2027467abefddb2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d374e35e2ec98e232d40ce2f39056f05.jpg", + "title": "Happy Red Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b6eee778b20cd5e3641fff0ea48383c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f1cdbce7e9b9a39983bedf75df2f6c88.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/045f6ad9edb171db2d323515bc443785.jpg", + "title": "Easter Eggs", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f153b5fa94783cbc8f66a43f89d5b426.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1cfd3df641d2fa72698698fffd80c6cd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8926ae97fe603ab93e43c79e05f21b2e.jpg", + "title": "Easter Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e6b071b06c2bff2f46a5536f6bcbd087.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6dde6426d1b25c9870a9a79ea1b85ed8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c7d8b03c95efc99d6cff5f5f54e051b.jpg", + "title": "Gingerbread Man", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a740dc95c27b22f4f596d27387e38cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4356ce1276e3c47255959915ef8eae6b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e62a83791a3167b214f6416eb186cd63.jpg", + "title": "Christmas Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f42134b69475bb5cd979c979bb5cae51.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b8109d0cfe7f7e4b0ee06b94a9af41b2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8da393af3f9d17bd8ea77e402a497c0a.jpg", + "title": "Cute Dab Santa", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0fefead63c1f5465f21437b0301d7473.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b37ebba34f8545c7c04b398cc3a65a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/50171678471296c09361ac157b0e8396.jpg", + "title": "Crystal Xmas Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/87e10652534a4499abd2f18833902a9d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e1a69fdaaed427f254d6fffe1c71f4d9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6333e892ab576039c9e42075ace842e7.jpg", + "title": "Christmas Kiss", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f13edff9cdd11c87bfd49dc07d32011d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/65c1b7ca8f5793b08b7ec8c9d50a0ddb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f3224f0b24703bf5c5cf18dc38f17d9f.jpg", + "title": "Christmas Santa", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33cdf721aeb9319bf16f004246aed924.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9f2512e169510242944052c60b9c7397.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/08e8fc46200c51804d77534a6cba866f.jpg", + "title": "Simple Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/11a65795f86fa972106cc76e6ec4555a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/43e8a93ccfb292319dfe66a9f76aebb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d8ca648a6fb12c681d5920119c3a9c1.jpg", + "title": "Xmas Reindeer", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e78ce92d929920a0f8332d714701986a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/849bd30c285b8d867edb34d000ca5773.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2d0da581b8df5f38f4bf3ae901bd052e.jpg", + "title": "Heart Thanksgiving", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/50b084003b78b8ee399222dae674f006.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f5ebbe872c5e92ebe8c05e1c39a72a97.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/98257e9be6e38db0d25863ce11e90b8b.jpg", + "title": "Thanksgiving Day New", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/126b5c2ea9411393363590295fe1260c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/78aeccc61c9ec1bdbd3f99bed8451228.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b1e2bd991cd77d6dce5d3ebdc66f754a.jpg", + "title": "Thanksgiving Happy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f6c5f794e3e387a3bd99052e96d6de.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1d3be9b2a619b7672f504d9b7e29a22.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/87dc90e357df17be7dcdd0b3af343409.jpg", + "title": "Happy Emoji Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e2459f99f2fcb894fb8c57ee6cc1a79d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a22952633f0a468fe78f525e23fa7f8d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8eb843f4b96fc3e650accab08d7b2d00.jpg", + "title": "Happy Donut Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5043470e1534fb34ac92ab989644a54b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba48b358d7823e1df3455899271f6d5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b27f033718c7de706c12da2da338d0e3.webp", + "title": "Social Media Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a1998af1a233675edef2c8a7b3b22e1c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/71ec86e3ad2856f4817c875de1c5a67d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/93f46bbc41c19d47fbfc6cebddbda21e.jpg", + "title": "Ramadan Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/21ff7bbaae36f35ee9f833af39c1ceef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3b07f5676f8f4c0c32ee41a0afc098b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/55befa02f19a8caa012034327f8807d5.jpg", + "title": "Ramadan Golden Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5d5f4627d234442c9e83e5250bb8c546.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9cb1b4e7bfb896184655a64523c2029b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d3259e47d9ee402d09d20a5f30deda2.jpg", + "title": "Allah Ramadan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a1806530138b4ae3c51ce57246bab19f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cb57d028efa1347092d323f219baafbb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b1f65698cab142ecd55c1cff37f01f0a.jpg", + "title": "Green Gold Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b6b027ffe94d325ab64103777b1f49d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84341c423e0b7f4a121bc4861c540757.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a400243498f601016b23ac7d572407bc.jpg", + "title": "Ramadan Moon Indonesia", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6a3f0441cd09b5f4905a084c2991999.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7981682dc49bfbf8b0a31002da867ede.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2ca022dc3e196e906f6c8f27f198a513.jpg", + "title": "Fireworks 2021", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/57cab3856282661e89244fe3f8959b25.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4ee527b1cd82af5205e5037f106b8a49.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7b5d2685e31a57b30efb37916d2fb695.jpg", + "title": "Happy 2021", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/620d5863ba00656903d9c0e1fbe60cf2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a366adebb63b5c100058ba479a8c761d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0190fb765110e25940629e1537f6f63e.jpg", + "title": "Neon New Year 2021", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7057b637787a3aeaa926769f299f5e0b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/73dec6b2408fe86293a252c42b289bd5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9a922f63edd1a7bbb3e7774ec48735e0.jpg", + "title": "Creepy Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f04ed8506987849aa196489e47b4f94.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4d6bb7c153472c19d341b8228320d95e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/79cc9ba9a6faa66bfd556cc94f1e2c35.jpg", + "title": "Happy Day of Families", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e8f29e95a1b2b02cbe331d828e26e1c5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/abb81288af5d254dbd2bd7437a6709b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c22beaae1ba0cd8007f0a288aac8cc5e.jpg", + "title": "Galaxy Jack O Lantern", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1ccacaede9a346589b11937f7ea4b287.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cb6a7d1e4cf46e31e6f3a81337a7b7f1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/514eb8d51c0d6d12704759a1760765aa.webp", + "title": "Cute Halloween Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/79556ff8aaff1b2bebdf83362ed1d268.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/53bc39fe07feb84f8b3fc6441af4fcd9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1b7f4e5aaef92116a1abaf828c852116.jpg", + "title": "Cute Pumpkin Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fba09b8fef0c2db7739075b5d7770031.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ba271510391831b590c252f4afab6ae.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/620f490d867d7a0b03c3c215f4bf9838.jpg", + "title": "Super Dad", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/eb10438c56468af053c4f2b212c33984.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00da7798ca9ac8ef08233a4f1aa7b4e1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c2b101308946e5c6aa947628944facbf.jpg", + "title": "Best Friends Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa28923e536796fec3d5f45c5833f932.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2376ad9c926163189196b5b738f60d21.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9894497e299b41379296b4201bf185a5.jpg", + "title": "Happy Mothers Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/05ed3425821e6f8b58abea68aab7d8af.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d6caf256c7ff9eec3f4da0677e5a4113.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d73e23fa37f6a2e9b13a42247f9e6f5b.jpg", + "title": "Gold Ramadan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9c4e0753794c0fbc09ac00e53ca10fcf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e60f152a31c7a6febd9f8dc563e07d0e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/876251a04ad8b1a99ef0651f1e169898.jpg", + "title": "Glitter Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5986738bd8149caf013e4a14b308b5c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3742047a6474fb4e1d741dccd13c88ec.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5646776d158a4a9ee6133349a7623f0.jpg", + "title": "Happy New Year 2023", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1199225afe1180fd7b6e244913059c28.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5eaaff5d0274e0fa6644796aa13a4587.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e731558518dc8c74ef299fe8cb54d8c2.jpg", + "title": "New Year Firework2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/411b543f6a6876d27fb29fb4b33e1111.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2e04ce25b6d0cc1551761b7b74273318.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/006a119ab145b60ae66432493d749923.jpg", + "title": "Gold 2022 New Year", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e414fa5ba88e5b82af1d4cb6447d42b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0092c65c718b806559d52f21d0f751b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/01fe293ad37906759bfd8105a8d8039c.jpg", + "title": "Valentine Firework", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/62bc1b4de0782746c17fd000886ebd54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7972b85a7656c553e64829eed7ee8383.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c926ecdfc722ac1a9ca03d61fcd616a.webp", + "title": "Gorgeous Firework", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/87c478fbcd904b0c738fb3d89ea0ed9f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35c3224403223ed027877afad7413dc4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/682ec2b2e4f7fdf6b5c1e661054ca018.jpg", + "title": "Cool Firework", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/926cdac1b9a5ea2ca36712857af9f17d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0704f73d450b1ba2d585245b8b93d601.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e6af4203b762857eef35ae34cda2d19a.webp", + "title": "Cute Halloween Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d3185a18d4309a89b74bde3e768e290e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c96de3cd68f111e8667e9a988dafc8c8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e034cc42b28b73655523b2313c1b5e92.webp", + "title": "Cool Colorful Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7c979bba1259eff87ebe958722c3bc2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47e0244b8d31591737023dd30ae8e335.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/44c7cd6ddfd72c90755e0062778a91e4.webp", + "title": "Spooky Zombie Hand", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/093e2c6cb33ae5b0f07256d9e0f29dd0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5336bae6e874a930a04b660102bf0ff3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0481eb42f646a64ef5b6395884dda792.webp", + "title": "Cute Neon Pumpkin Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7eca268d1f19054abce066ca51a70609.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b33f3cf4674a3abe1ab312e24a01d826.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/41d06997994ae4d9db70c3d92203eb34.webp", + "title": "Cute Halloween Kuromi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/221403065a349f27a886647339756d3e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6616e848c7624eff88d5cd6bd7246f9c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0bf56ab055be5e5be17f14693a7e39fe.webp", + "title": "Cute Halloween Simpson", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d40f0c84dac456c0b7a8277f1c0b73a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/660af5731173413885435ae3bfe2c414.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce48fa4694894306fa77c560b192505f.webp", + "title": "Cute Spooky LV", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/36a87ff425fc48c37ee14917223a1c32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/52708233243988b6089154f0f2804960.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/616c112245cf0f2063000c0e980eb705.webp", + "title": "Cute Witch Cat Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/56d41e00d7a650e99290c0ccf8e23fd1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2dbe46f926b545808e818eee83811723.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2489ab89329ee9f986bfb8f548353f4a.webp", + "title": "Pumpkin Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2682f13adf94284d4e961890934529f8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/780c160685e07dd0514f00c99d6b04b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f30341670765eb79e62d1e0e1a552c1.webp", + "title": "Cute Stitch In Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8674a08fa178ecfe49f88a778b11c424.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/28e4320eb48b2859ac595c2c65d614e0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0450f20b31def98e8d776e93d11d8949.webp", + "title": "Cute Halloween Nezuko", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b0026ddfaca777ae7ec83955b7405086.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1e4647a70b6f16802d8c31d477eaec2d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/51e6daa599dc2c55c85f882762b94921.webp", + "title": "Cute Ghost Cat Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58d7d8b06736f4e91e2b4c6b20ccf7c1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b2682d1031e35944222f700e7b6aa198.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/841673d826537fb9e3a52b439a313515.jpg", + "title": "Halloween Molang", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9866d719b7f08a1c4cac67839f4cbaf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ea2efcb433aa1f39bbfb91213d0b683c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/91d26cbcb5c45b03a50f01056a9208e0.jpg", + "title": "Halloween Party", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e16798ca15447a9fec38c39369f3456e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/20dd80674df46779c528487898467495.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af6ccee323249e49e7f23e4699ab9f00.jpg", + "title": "Cute Halloween Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/03fe6186e018399059fdb6f6148bd692.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a3382574189302304411a63acad1b816.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2871ab4c863e1e5f3da8e526106fe7f9.jpg", + "title": "Halloween Maskman", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2659f1012d1eefecba2d290186056bd2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fea5b8f428e5aa6235494a63dde19d10.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b264eaaf49a181b4bc7e7f5e82bba24c.jpg", + "title": "Tartan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c66058d0af81f6342b21b2675cdfc242.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f23148a9f6bf96dec08917b829a34639.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d79d040d6ba0dcb5380eec3f60a9a122.jpg", + "title": "Halloween Pumpkins", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9f30716d53528896cf60d4054c245510.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80a3dab47b018247b87a43fa1ec5ed0d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eda1daf9e2826ad91b6375772ab90a69.jpg", + "title": "Hispanic Heritage", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/18647b01f6b35a513f6632f52800f133.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ec08cc42c953fa193e90b0b9f0677816.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb48bdc5434551f43101e15124c92f76.jpg", + "title": "Halloween Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/170de090443441c76daccc566a42cc6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/899a7ffa8092a9a0c814326906a1a4fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4ff3661b7d6da8e76c45e3b0b2c4e763.jpg", + "title": "Happy Labor Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f859f98a2df5416c15cc5666a6c1358.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b65ce98497ba893c58640d248caba204.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/104e4589dae17e7a0eedd43a9fb1f17d.jpg", + "title": "Evil Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58b472dc6d73ab1074e6ae7b19fc9b6f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a70c663c1775adc54b67ea469b7c8bf7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b182ad7ef1c9578689f3e5fcc511370c.jpg", + "title": "Halloween Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ae69a17c7a3409b71127348f5ccc481f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/327950127cac6e7fa4400056f77754fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6d5efeb7eaecba2327267a20602eaa0d.jpg", + "title": "Halloween Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4504392579ea3d0028a4635b317e6f5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e132f8d24e68044d295b51259826f18.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8da9c5aa23a546419dd6f0891c94cdf7.jpg", + "title": "Gloomy Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4eb4f2fb3b4a3c96769c02d97d044bfa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed7eb5c75d1b5aaea0be79ac5d954019.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6995c343db7cfa1689040bf68cb87ebe.jpg", + "title": "Carnival Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fae60a5725c6ca85edb358ab2f0e1970.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/af1b45ffdf70adfbcf5e74a9e52ea244.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8ad20e6ccb5cb91f86e23d7f859e1a40.jpg", + "title": "Mystic Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a5e201e681f6a1bc1be4790dedc1f86f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ec08cc42c953fa193e90b0b9f0677816.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb48bdc5434551f43101e15124c92f76.jpg", + "title": "Halloween Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/170de090443441c76daccc566a42cc6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/899a7ffa8092a9a0c814326906a1a4fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4ff3661b7d6da8e76c45e3b0b2c4e763.jpg", + "title": "Happy Labor Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f859f98a2df5416c15cc5666a6c1358.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b65ce98497ba893c58640d248caba204.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/104e4589dae17e7a0eedd43a9fb1f17d.jpg", + "title": "Evil Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58b472dc6d73ab1074e6ae7b19fc9b6f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a70c663c1775adc54b67ea469b7c8bf7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b182ad7ef1c9578689f3e5fcc511370c.jpg", + "title": "Halloween Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ae69a17c7a3409b71127348f5ccc481f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/327950127cac6e7fa4400056f77754fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6d5efeb7eaecba2327267a20602eaa0d.jpg", + "title": "Halloween Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4504392579ea3d0028a4635b317e6f5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e132f8d24e68044d295b51259826f18.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8da9c5aa23a546419dd6f0891c94cdf7.jpg", + "title": "Gloomy Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4eb4f2fb3b4a3c96769c02d97d044bfa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed7eb5c75d1b5aaea0be79ac5d954019.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6995c343db7cfa1689040bf68cb87ebe.jpg", + "title": "Carnival Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fae60a5725c6ca85edb358ab2f0e1970.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/af1b45ffdf70adfbcf5e74a9e52ea244.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8ad20e6ccb5cb91f86e23d7f859e1a40.jpg", + "title": "Mystic Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a5e201e681f6a1bc1be4790dedc1f86f.7z" + } + ] + }, + { + "className": "cute", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76027c67a53547dfb16a9731279a6d71.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8b3da62ff0940f3f4a86954ef0097d88.jpg", + "title": "Cute Nike Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f407943410e18c86ddf001e96319aa5b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c50627dc1ab995d94982df4d9976ed8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/faf7abc48ac971ca89998b38a52242a4.webp", + "title": "Pink Strawberry", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45727d54cf59bb7e0be26268cf57cbca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/415b84a5d098f495a15aeb378098e80e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8e97e2629a1da74ed5a5b9fad56b03cf.webp", + "title": "Cute Powerpuff Girls", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f756638f24ec008b6acbcdc5ab8c05a5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9a8f1b966039fa110cce4c86a2e3edf5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/896bb09a18d114841fc32483e752b2bf.jpg", + "title": "Cute Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d940466fa31e30df1c60f80c2b2c79b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b263fb8b2d2e7eca4bbdcc75b7bbe987.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d99dcf1d9175a8c5d55d2367c199014.webp", + "title": "Cute Ice Kuromi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/31ef783f5466bd76ffdb73e946d1e623.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/92ebd4d986fc1a8b5c91c9eb3495a42b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fa32f7847cb4c7cd94f2053824f43557.jpg", + "title": "Cute Bubblegum Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7e8c7c5191fed1ba6b39454a11c440a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1df9aea825939137e35e2775fec69d8a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f7947248fae07435c8ada5b91f11bebd.jpg", + "title": "Love Simba Nala", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/710dabd7c9c7c14ff59ffc1141f6a7f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3e38f0128ad8b2d6c19f20b536e0792.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337c48b1d04a66c8c662fe8fac7d1f96.jpg", + "title": "Shy Love Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73c74526b80ec6b00e4aea35b8b3cf10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b229b7f18a721abbb022298f644c7e48.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3659ea237954edee888248bff739a280.webp", + "title": "Cute Kuromi Melody", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c4d30e090e6f7f523a1e51d53763a5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f84b3cb680318c4074da87e12083ed94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c076eecc5b5df13a322a1a9f36e5c5f1.webp", + "title": "Cute Vampire Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/69fa7b620bca6178c3b0b66df5cdbf39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e1cab9141900726c0c14fe4adace8725.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/62a667571d748b81d8bb0767cc6c1f20.jpg", + "title": "Cute White Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c13b6813ebff77644478783841569658.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0e50d33331b1ca53732164241b301cb2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0dd3045d8097f0eb782a4c494f9e05b.jpg", + "title": "Puppy Kitty Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c424b4120ff33d2ea4f87e098a5302dd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f0911330138ab2aefd817f6f4cd6dfe8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e69690c9bbdd790ead6b3b534b45125.webp", + "title": "Kawaii Teddy Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b774f04456a54ce20935d579c635a46d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b2d89c2f81ca6d6a4a6cbcbecf8a39e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ef8fd0c3f6a4723fd092a7fd33f77494.jpg", + "title": "Graffiti Rose Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7c58f283c8755c99d0abe8950f5c7d1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b720e45d7dd5596181fad14348727e26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3643137dfb678a8a27386930494f6a5a.webp", + "title": "Unicorn Cinnamoroll", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/68ae7d1854287becbe72eaa5c606941e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc61592ff75190347e8840cc6637f43b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/61555a1baaad3ea85194ed431af92172.jpg", + "title": "Neon Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/553a163368a028f07ea83b381f436434.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa26e4376140ab38a2eca11f1ccb9dda.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0becd6bbe9abf1868bbea1ce8e5425f5.webp", + "title": "Cute Cup Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7520bd95a4782a371ea4cb8904e4cbaf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1d725cc37d4e868089e3b14fafc3dc96.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7f6971c44a4bce70afc514e7f39b546b.jpg", + "title": "Fluffy Cute Dog", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e731b589a8ed55bdc9298a308c8a3a19.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/edaabdbc4c6de2b988beac5f892bcb80.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c605035a32b74b86a58bd757869d580b.jpg", + "title": "Avocado Lover", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1a67aa31fcbd97e633e00aa03b96e14.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b859fb53bdaf2fd9aa8f4c8153d660d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a753a480c59529048755015ed2517d0b.jpg", + "title": "Shy Love Pink Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/57205a43944e525d6d540e500ed0e154.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/90a12cc84857a96273602a92961df5a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ad596bf4755d04561512383ce72a689f.jpg", + "title": "Cute Wings Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b9dff3256bba9dcc9ecc7dc9197c9859.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aabd1dd3889bf0df2dfd0da007a6e3d0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8902e129db9bc7ba8b37856e0c079a3e.jpg", + "title": "Lovely Teddy Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cc9be5e3ae6566bba62ba0d13e0ae0bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ab9d14ba12ec49a14d556138f854c74.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9c9f2b1a6f2b8b8828b9aed7180f8a1b.jpg", + "title": "Alone Goose Duck", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e2761f5db41bfc2bfae6b119313544a4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a4b23b94c2af732b9958bedc1a6b5caa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6b783e2c48c9e7b39303e2cfc2aa3d38.jpg", + "title": "Melody Kuromi Cute", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d65d472e890b7eaef9c9742a4abd2ad5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/efe190ef19aa5212bbdb83e4638150c4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03d6d31d0af5ab7e512c6983f3f1b47b.webp", + "title": "Funny Cat Club", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5b321cbb4c65b4b8ee2cf171a5cb139e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6f36584e416aebddd3e6da3e1f17fa14.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f871dd2f9dba4f88266df1a046731f3.jpg", + "title": "Cute Wizard Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d361a84be9e3e49ff10b6e3c0c9c0155.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d4f8b3656d52dee52bd94389cb74b289.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6b7732d287d5f4243d700fbb4377ab7b.jpg", + "title": "Paint Cute Rabbit", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/11337088473912e3e3e84e7281698694.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c94318db3c4e003f0770624b8b8fbeb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aec5e10386fd5d3649190d07bdb5fbe3.jpg", + "title": "Pink Bunny Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a90389bb0d8b6af4e38cdf965df2fb1a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b7b80ab8508ca83495b296b42363fbf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9136096f2c1d42c350a7857323e43f2f.jpg", + "title": "Cute Dino Kitties", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d4cb2ca505d3005e9fa82118b0a05a48.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/604920e5f45a9e7f27d2cf8d5589c76a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a3aa9c0d2f3dd39a381c847287e0321.webp", + "title": "Cute Pink Sanrio", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e5703ed3a3191d373b2298274ab9abda.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5a5b571662fa4560bad718d80ce113a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e306a662c2512a36fac9fd8fcf12f2e3.jpg", + "title": "Cute Star Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d9b0a78eda9fc02579704cf39614a5d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3cae657b1bcb1269b9dde09e61e13566.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/726cfbf0f7abf997f90e4cf21b511f17.jpg", + "title": "Pearl Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a49b60eb5bbe7ec487322ad62c597338.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c1506d5b7ec2e349a5e9164598a7a226.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ed050649b725e18baa028623f0308366.jpg", + "title": "Cartoon Corgi Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9ae1f6911c31d6eac0704b0f488f1190.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e515686a23a6909f236c9bc83f1cfa9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/89fa1ebe0ff6344ac3d72484d9e15ce0.jpg", + "title": "Cute Reading Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3756571cfbff4da4d03e3fc30539210.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0177ef98ae9c6e35d1a0d81310ab6fe1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5cdbcca91af8a67ddd8f603daac28064.jpg", + "title": "Pink Berry Cheers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/66d8bb162ed9156d3a8a193fbdcae5d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/20eb3766ae60eab54072876f830a5678.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9df8e1d791848a4afa030a85e87e0f05.jpg", + "title": "Cute MonaLisa Duck", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b39c7f006374c2b76392e29e13ba3dac.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2fd7d8c4bfdecda5bae113c45b86dffe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/caae02188d1154def2c573f301b11754.jpg", + "title": "Cute Zombie Melody", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7b565d403c0c95f33b7b5061e4f8c81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ae204fa8a50d797b4553990428203fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e55ce9808d3ef1180be712fe7ebb9e72.jpg", + "title": "Kawaii Teddy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d3aae90fbac4d3421f6a727a3a965ab9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d44e551a968cf4ed7ca93926ba872b81.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b70a6c248006902ab4292fa77af8b692.jpg", + "title": "Cute Love Alpaca", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f3c0a25862331fb0f2f06455a6bc636.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e396b0112a3fe5ef2bdd423418dfef1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc0f081e2d2d314917fdc855f315e6ef.jpg", + "title": "Love Panda Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/579033fa6a038b04a5495a2e82632039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f44956652f5c2ecf9cf6f005c24cb6c7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2317cfbd254c45b9ad6be026452b7a4a.jpg", + "title": "Cute Gothic Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6290936403bd580b1ad7e6926476316d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/11bca2e1b6d84053b5ff9b13af5cfa79.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0189ed802c0d62b3cecd4a8a96c01e07.jpg", + "title": "Beard Puss Cute", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7576fa61b846b669dbc92751cca8d07.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/91b4a304452374f59ca203966f0e3a99.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c20fcaabfa46b83a931c52ea2be11c25.jpg", + "title": "Cute Kitten Paw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e9017e4eab0be9a7ceb0db1264c6e9b2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f12701a341921f6788b87bb1f8cd7e64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4fcfc083c377b653a298df082f4b4028.jpg", + "title": "Cute Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/65455c53286533a1b7de336d0fb256fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e701aea9b556314b4f0e7d7b01c3e301.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c2cd70c7ecbaea1ca8d3599c78c8f549.jpg", + "title": "Kpop Whale Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6ca4ae888174a73e63276ccd4e48414e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5d70b2e5e2b06e2c454707856a4cd2ca.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0ec041963000089c1da4435f25efeec6.jpg", + "title": "Pink Panda Sleepy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa0d3186b0bf4a6dcea1bfd440681af3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d42dba6ff266770e8ec8aba9c99adb1a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b70a9de83312d51bb231b0a8d2a1b6a1.jpg", + "title": "Cute Pink Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9508c0f2680f6756ed9e1fcbc737488e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/43a315fb1ccac3bab2371e157f14378d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/df103be0b15ca7b32c7f59107f5d55f7.jpg", + "title": "Pink Unicorn Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fded01e258c2dbb69a7704cc29645229.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80f57e0be8bfc64c7685784588139ece.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05a03b13efbb3d9469b314dce4d0fb69.jpg", + "title": "Pink Cute Macaron", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/087f9f5b57b03e4193d84afc643dfdc4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b13b6bd1ad1d0b1f3b2628ae78bacb4a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f3b335f3906cbac6788d961a1929e951.jpg", + "title": "Adorable Akita Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c62110e27800f61438c821a83e6c7952.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/285a115cce6284e68a32cf6ac8ef29d8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d65e474ca3e7489bf3f09e9e1d164acf.jpg", + "title": "Fluffy Innocent Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/57bfd3d91c3bd7382b560d1cac4750a9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4f11f0fa6b6e1b42375e5ece259ceb94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/12be0d421c42b3cbafa35bb5877678bc.jpg", + "title": "Teacup Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7e64e51f24c71eaa5942382931654317.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ccd3410c47d19e7567cddac01bd09a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8517d18fac0d6a37838d6cf9b48e6fa8.jpg", + "title": "Cute Hamster", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bca24dbc02333b9d1d9c4993f2a56299.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9c874b561ef8dd6a8fa827bf9fefea8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5e67e42c7003522bb59f076f5df217f.jpg", + "title": "Flower Tiara Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b333d8638cb38c536b738e9be6326eb8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5419cdcc68f7a11899ce03b088e1ca39.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/476ffeda1543b11f10af0c11ca1e02f5.jpg", + "title": "Cute Cartoon Poodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3f7a42c48a671a9471e37fc50d659fa1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c5ba9bc6a45586b70afc4bd0aac25d3e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/adcc2935ed833a6d437fff121ea9fb46.jpg", + "title": "Happy Cute Panda", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4ed3f8d3105a773ee0ef765e42f2e5e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/128b24e5b0f2b6ddfb737bf4a17e27f9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7334b272eb56672f585724f891e9c36d.jpg", + "title": "Cute Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/906a65135447e72bacfe9e74b540e2dc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ab39f35c65e0e8f3ceb9397bb6fe472.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/323d398d38ab6d198aea4912376c1a9d.jpg", + "title": "Cute Bunny Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a0bffe36ae759d94538044f645fb0a81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/96edad68da8a0e2531f9d521b5344be0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e71e529db2847d8d885ee67e3b24de0d.jpg", + "title": "Cutie Hamster", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa127373edbdd55616767bb1a44930a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/baefbf8c828bf6ec8cd66dffddb07d03.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/83dc9786011403a46c024e4b1dc66ddf.jpg", + "title": "Aesthetic Sky Paint", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/504fb72b09b8fb60230376bcb94380ca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bea4ae323296e12f0cb49c1049911f39.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ae3b075ddd2ba69a4ff3cdd7838ade6.jpg", + "title": "Pink Strawberry Milk", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a44333b1c78172a3f2e3ebee47b59735.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/081ea7c4b17a24a6b3d465de1017c810.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/068cbd33b8d6577b40cffe476d34a3f2.jpg", + "title": "Colorful Cute Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8825e099785f84b9bea7787a9c237a06.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fc92393e24d15fc52f6235feb7d730a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/615f96f6cc928883acffa22cb61b154b.jpg", + "title": "Aesthetic Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c30556b0d9636b247bb8c505de1e4748.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9054934efc0877f0204af2c67d04952a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/deee93fdfc247961e298118287a43ce4.jpg", + "title": "Cool Funny Pizza", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e6e30ce26289e31a057855acab015e41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ca27a3ff3f84606db1c5cb5aa37a1a20.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/829435f2c2732a8d88e01affda5443c5.jpg", + "title": "Cute Pug Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fd65960d6ad57e3e4d8ef96929e3b545.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b6ce505156da57e0af8de51515be2a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d7e9a001e66e19e869d5e418dbcbd0a3.jpg", + "title": "Galaxy Sky Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4da2d5f7b9fa24e151a5f299d59f852.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/980c0f77736c0e235ec4c3939f5d24b5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/743c88ede8829a9aa3c372e927f214b1.jpg", + "title": "Glitter Black Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cf6e553e10d162470bb75af77d62f574.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/91996541a31eccb8337fec99d9c53bf2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e025a3d17444883ef6351005c722168.jpg", + "title": "Sleeping Cute Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d3482854be6f3ac0772e5cd007d2400.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dff0d0635510690e42fcdb8122d3e962.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e3ecc5bbdf4a78b8960abfccbf1a81cb.jpg", + "title": "Lucky Clover", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85c77d8439ebbdad4fea1b71b94fb322.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c9bb5219ea7e7e4192e58ba67181c743.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8825b6e00ca9be30d2128ca2c9784249.jpg", + "title": "Pink Unicorn Toy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e2287336aba28c7d305feeaa3186b80.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66240fbfb0080b5b4d255adcab9e6fdd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c33dfa038c680d91bb4c058a1603ba08.jpg", + "title": "Cool Space Dabbing", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ba411a5c079cf2b3d44e7cad7dee9e34.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb1ab46d610f2e1ef7384e94ffc11005.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8defffc75048a0467c95dc7b2dcdba6b.jpg", + "title": "Pink Lollipop Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/606c38e2cb9b77f40cf9f322073b7218.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ff87158d97fd75f4737d2fcbfbfd5c1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d04b3a4fe02f503f91170a2ee3383bb8.jpg", + "title": "Cute Fluffy Cloud", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/437eb8a0d24a294af97ca09d007437a4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/88ae945fc014cce22c09be151e5e9cc8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fa0d4c68d621975f1e3e65c0c8505d17.jpg", + "title": "Purple Galaxy Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6ff2eccd36c8c247d097e3b2d56f51f9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f0085b49156175d2abe444498f3bd181.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e5ffcf2fdc1faddac40728cfb13a1089.jpg", + "title": "Cute Cartoon Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/91dd8cbf71d030801c2b0e15a3ae94b1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1b3fdacb0b7823a5d909cba51d911887.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0e9ea274370cd2ac1c5be1e1097d4e4a.jpg", + "title": "Pink Roller Skate", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3493c43bddf72c3d80458b740919eb10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c022bd66602bc00ebda4a7cef7919ff.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8eb6898356bbda67180324e6031066b0.jpg", + "title": "Glitter Pink Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/97c5d6ecdc4f0e22f7661bbd19932ef1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/604242426795195578ec70310b70e685.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/394013dba51de4f5645a406bc1a49a12.jpg", + "title": "Stylish Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6deac75de4f1075c24681aa8c88eb8b9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b77c2740281fd30051e204933574d32e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bd864645511d10d370c499c206047647.jpg", + "title": "Burney Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e8058ea173fcbe9b377ebb58e554935a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3e9009d2ce65dd907ea5db40c12d8b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af13db64b741acde94b5b71467013bf8.jpg", + "title": "Pink Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e95d3f226c244d025e4afdc653e6f40a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99187af7a43a32c160a7586e4e36e79d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/953bb62fdc77c5f17b6154d53f62542f.jpg", + "title": "Cute Teacup Puppie", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/71ef69626dff9437f469e0bfa69799bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e0f8d365fe9058de861f843b097604b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a38678e05f199f42b2555d92ace3a301.jpg", + "title": "Rainbow Jet Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/568d18d4204f29fb16e3526c6b064f84.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc5e9f0236b8154afb486a157551859a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0b589f99164560c10811e239bfa0bf01.jpg", + "title": "Daisy Pink SMS", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/02bc8d969fd3bed6458c19648003df15.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d511c3f49a9a091c81c2875347de9f78.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69150d22ad3f3bfca1dde552ad07aca7.jpg", + "title": "Funny Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9274b087c60a0abf29dd4e590dc2ca23.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7d9d4289e33f8a474393defa3cf10f65.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/51ddeb8054546205beacd8e8d8de5504.jpg", + "title": "Unicorn Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5d09a97ef6879ba2e1d3d33a7aea6079.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b5bb1e55c39fee5a13a52b3924c6e1b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/982917fc6f16eb181ceab9fb977f5252.jpg", + "title": "Avocado Dab", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/08ee8a158303ecf4d462f777336c9ba7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8126fa8769d85380fc1256320f58f0a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1407737269148effe5b59566883dc66e.jpg", + "title": "Galaxy Cute Panda", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb2836a95a3fd84d11071ee53f74875e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eec29b15c889a4a62b8e3fc784b1778f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e1d607060610fa12b6d291d7a3dbd9d3.jpg", + "title": "Cute Rainbow Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33937d8a43eb5c701582c42fc2877f92.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4281984af73c48808ec381a2eb03842f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f56ae964777d071c10fb82268b72360.jpg", + "title": "Lovely Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1a1eb9cb1234641b6e7ad2ec3307fd04.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a2a959f8ae5ffd25bd93842919457f95.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/17c45049482a0268ccc071283036ff46.jpg", + "title": "Pink Bunny Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b270d383966705f9503e9dd1e18ca87c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05763c38485911a666975ed80c93228c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0bd0fd9d4ff7fc2d5b307e11759665cd.jpg", + "title": "Strawberry Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/edeea7169fb87c715eb05f9b92f71ed3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b39a4718a097019fa9bb91984b638d91.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4a83f452037c1c1e0be2bbfca73613f1.jpg", + "title": "Love Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cd69f48f9c719bc070d232808cd119b2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/67f69b5b57a9974f9973fc6f830fdc11.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2e81180a605b237949b1b1149c781d93.jpg", + "title": "Happy Penguin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d01a42a0668d6a8e929fe9d34022366.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a026ec1ce90c98203e12e8970a501aed.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f306cdbddc805d2f83e9c2ec81d1126e.jpg", + "title": "Pastel Cloud Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/53fff19fe8fdfb2d9b1089c5219b3444.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35abe5cd059e6cea8f2b38123a4bf073.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/189062824385476c996185e6fabe628c.jpg", + "title": "Rainbow Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/26095396266090293fe4c90590b506e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47e8247f2606dbc8e8a26f8c284bbcb3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6f1dcae011eaa16c29f0a7103efae04b.jpg", + "title": "Blue Macaw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/755d5b8144a66c330e00a8c3eaf0d531.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c3819124b9f2d6f9c8f1ee8bace1ddf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c243c98b766f9a9301b8e9ee31d55d52.jpg", + "title": "Rainbow Galaxy Cake", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12e8c13357205fc29251ce89ba2996a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8042520dc717d652680e2fd13016def1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5d5c4785e66ffb16a266cbbaa00a084.jpg", + "title": "Pink Glam Tower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a50564e1e8945f06be5561767fe6f56a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f9d696389c084814efbbdc126fc59030.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66b158d4c2f61d318b406e053f31124a.jpg", + "title": "Pink Tulips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c8afb241ab07c2cfd74bbf012b37f396.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5c11e1cd9b724768b5266a1765fb8a80.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/78c743014c431d7ea54b7a47c4f5c603.jpg", + "title": "Snowy Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/868fec2b56de994c4bc2dfc2f4420061.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/060334373b88aaaff3ce4911f7025d5a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c82fc4a36f61a1e9d66e26c6f14901d6.jpg", + "title": "White Cute Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d65f705a4b2b0a63bcd3aee655dd6804.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/49b65fe79ad09406da249b8c2c768fe1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fae719be8b313c3cce70968991c190da.jpg", + "title": "Beautiful Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c2b111eacd459398fb1d6bae669fb2a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10e454c35a582f1b7fd99613acd6912d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ec69f889e5619dfe230157b3084d976.jpg", + "title": "Neon Sad Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d2581fac351c95318c03ef73562d14b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24b4939de0e8f6d23efae243d3bf1102.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a075da373135444e0ee5e074e08a423.jpg", + "title": "Pastel Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/79dee00721f8fd051f322baea5d07726.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ecc75487e7038bd6c7dd72ea74d3d4b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ae613b256996ca888628571e074b387.jpg", + "title": "Parrot Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37ae31adf1e9c1541cf04e99e63790d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/796a929dfc5c774d23970f2c46ecb3b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2f19a151f618c88af688d211648b4825.jpg", + "title": "Pink Tulips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a577589a75c9c06ca5b242ec3f731835.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6c888fbd36431ae699a0097ade4e5530.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/152850ea47a60c9c5cf804aded1f581c.jpg", + "title": "Cute Bow Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b61037c131e3f960a863493c024cd5c5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/34682147142747823dd7a6ce5c927d61.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34e3777d30e90d5e2537dea41d7c0845.jpg", + "title": "Pizza Party", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/15d3edb95b69307f10468f1a208e3517.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b102b4ff40e28c19c5284131595d36d0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a455959f4ba19ef8264fa8bb599acd8.jpg", + "title": "Cute Piggy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/add2b24b2a888f9a272e7376518d4655.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/18d026b3b400cbafb2669f142aad39c0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe4b4d0011472f5970e2885f60314246.jpg", + "title": "Pink Cotton Candy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fe1711772698a775ab20f4bd3c441d99.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eeffd0c594d1b7044b060449ec7a4715.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d72365aedb9414f5174348e55e5d3623.jpg", + "title": "Cutie Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/377ae4cbdbc897a73b4259b620132c01.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/088d80df94a3fd2702098da65bc4decd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6851ab1eecc6231226ff302ba7310f8f.jpg", + "title": "Happy Corgi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cad4a3af8adfcf383a2810c16bfb831f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cf8230edf1839b20071db7c33623868a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f99b462eccce85eb65c968f1f2510566.jpg", + "title": "White Cute Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06e836cc24e02243584c6c13c4cfedd6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f98073ce34d29e3754fc7150f67cb776.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d4fb2469679ab54533ccee078dc2708.jpg", + "title": "Galaxy Playful Panda", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f65862a82d01a94247c1941dd753590e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/492fa1573934563798d0c79568232531.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/418ae2cfd37bf9ac0280e213757f1522.jpg", + "title": "Cute Puppy Pom", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/71036704fed642da39281b76e9c1700b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2858b2278bad3df4f1af1b6edf99435f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c6550ae79acfb892c8c570dd53273768.jpg", + "title": "Cat Thumbs Up", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/934270354fbdd93abdb7e61c0d448737.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84e7ed1062e0993a57697c6dc303e7dc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/668f867314b34c2367a3c10dbc21e320.jpg", + "title": "Pink Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1efebcc4212b7783cc2e434f952415f2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff271f63f42daecef4aac97e34550271.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e6b71c11ea277f1e412133f74ce236cf.jpg", + "title": "Smiley Flower Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ea052642226a7a3cbe123754b1d8bab5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/72b877143fe28f99231d1bb067cace66.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/baf84b54e696be8ba29b1c1c65418d9e.jpg", + "title": "Parakeet Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0623e18666b97fdf401e5e7a2af7a39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/93a86d8273cddfea10af18bb709000c4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6d76eaa1a18efd023c95156c8992f646.jpg", + "title": "Pretty Sloth", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7fc57b7ee780b96fd4e8bff70b5763d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/22514f23d7c80121faedffc925b2d7e3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2970ed509539dc70a5a284c60cc1f8c4.jpg", + "title": "Cute Galaxy Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bf91c92dadb529e5ae2ba1d33396c549.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a148d326eb26a4dda8db84d12c125e91.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6f3997f20c5390d4fdde3dc9e60572ce.jpg", + "title": "Pink Pineapples", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/852386a4418e9d24cba64e30dd37d6d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84aa8ba27f308f1f3b86c326bce0d8a1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/927ea8af09e4dce88ff72aa46bca7c4c.jpg", + "title": "Cute Tongue Pug", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2500193c403d4d925a07b12149806323.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e4e030f4a64e29c4da5ca10371023be9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afbcb5c7a84fd8444458b9a5fe0869b4.jpg", + "title": "Fashion Alpaca", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/19780999d9dfb9d7283681f0f9328aca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eb41d4d32572d68bad43872b0887d641.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aa557cb09012006d622fed6b586dcf0e.jpg", + "title": "Cute Pink Smiley", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/54146a81b5bff1b29755360ec259860d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d00e3b22ad96670abbf1ae70f4f0a3f2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fecf8e7dbe0d35e645b4dbfe355b01a0.jpg", + "title": "Glitter Gold Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ab2ac2c35b8fa2d3b243091d4896f7b9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/09c5ef252e0067a37c40a13faae73d56.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a1b9ea7a0bca8270a2025f6f4c539df.jpg", + "title": "Pink Cute Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33ef456f53a9f263056c2f66d88c7e88.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d04539cea7997b60516a5f06866b3c17.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/92d406285d76bcabbd92662301188cc8.jpg", + "title": "Pastel Cotton Candy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/389744d38e40eccbe5321c76d3357c36.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05b2eba00e87dd47c290adfdcadd4979.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6148b9341c205cada4205fb2613b83e7.jpg", + "title": "Angelic Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3cd3f08256cfbd3409333dd811d81ba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1320a2b93381a08a05aebd996f921eff.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/153a8ab6eb78b96e811bda7d5a7c5511.jpg", + "title": "Glitter Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5fd2e8090d9f3cff2672e0a622e1ad27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1029f46c40e5b005408470d05dabfad6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/26b99ada15375d7ba9f5a0848396597f.jpg", + "title": "Romantic Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc78115ef660fdcb9d8f020f71506c0e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e03436c7f6a61c455250716b23ea078c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2aa3383ed3627758001c4d3b528343da.jpg", + "title": "Chilling Chilis", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77d9f86bf98e53be602df0af3b1fc812.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24cec57e118b9b6b22584747129d5af4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e91e509e73465951609f810278ec9c3c.jpg", + "title": "Watercolor Pineapple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ad5aeb56a7b1d7343451a21719e7b7ef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bd64de80f6e290ccc816802ce8c2809d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/646cdbc561f08e35a31d257e3857b994.jpg", + "title": "Floral Bear Cup", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/886a8aea35e468fe65558a0e819045cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1bb0167eb3bb2f9b4726f324ee38460.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9608d6e52800a271ffb58efe1f3acd80.jpg", + "title": "Glitter Macaroons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f4b2b928a8cdf1803da7bfc1bcdeb78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80d4a9551abe298fd77891b99b6d0885.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c20c61c67766b6eb6b6747a9c7b6ef62.jpg", + "title": "Kitty Paws", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a88c8e958e1fd3d0faf7e5511084fca6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/283b5e61bf797c138e19cc2e47fa718f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/72897d23e69b92e20285f867d9e2f81d.jpg", + "title": "Love Pet Life", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f0c78374e37a43deacb280f16cbc4e8d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f5c04fc50792f4b88693624953995753.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/60af3509a57d17279055969f6f3ac684.jpg", + "title": "Funny Cat Face", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/016e837c297900507d7b5be03d4211a5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e2ac82ef4c9bffb97ba3000660fa569a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/339187477dc314f27d37aa6e3d033081.jpg", + "title": "Love Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/663df7425d314df83bc46b75528075e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/caf8614e167ddc17487ced306c66776a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1c56ad42b17cb01c911c0d0d17167f97.jpg", + "title": "Pink Couple Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5490bf09d1924309238005051096807c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/decd4dcd3c2df3adb34d886b9cc2bd2f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/61448e510b830707607b8bc630452c48.jpg", + "title": "Cute White Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d20d4fad1e9886dbc58360b0fbe0fd53.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f10b4949ce7dbd83a61c13828411d315.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a32631b40c72e74df808f1e299475153.jpg", + "title": "Cute Unicorn Fluffy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5fbb9afabe4b222b27a99cd5d12e69b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d6dadbd63d679c9ca20ba1fef49f7e6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/35a542872fa665ba51a89866079a5708.jpg", + "title": "Watermelon Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1b33e74932f508dd8919a5f7df8463e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1c717f202676dd3a3388e79a8e02e6d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66fcc417a0d8fbd75c376b9eec2453ae.jpg", + "title": "Lovely Ragged Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51f4c9c699b7db37ee6e18e57ac884b4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10d6816cff519d3c80052e5034222130.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e9ba4a3a7cc79f6551bb7d45b8c37d4.jpg", + "title": "Chubby Puppy Tongue", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85ba45ec82feff202f5b5306c7a19240.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f7a93b32eb458f345d597920cb9c02f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4558dfe1fa88f753ede7d540a8ae68fa.jpg", + "title": "Galaxy Cute Smile Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9d40ff6b717fcd74305b014adb5e8df5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bea134c74c5eb2f464c186d5ae1bf7cc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e6b6096af4efd989a93df342a4777394.jpg", + "title": "Flower Bicycle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4c8afde7e0e3409d898d57aa209da710.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/793de94b6b963aed5ea805ae995d9a46.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8919e02391afea65e66150cfc19d598b.jpg", + "title": "Cute White Dog", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b4ff3f7eaa7c62b5649aa17f428d86df.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/428e2ac96d29f039e3652c973201ec36.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e00200750728f63d28dadd4cd4eab6ba.jpg", + "title": "Floral Cyan Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/26999a9b79c24fa56731e4f7b074b725.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d8724afb7199541fcdfbb69e4aea1d4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8c5057b71df2f1e15724b5f7cc00e0e6.jpg", + "title": "Cute Llama", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/97140f4992e9d19f5ab0a16b309363ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d350883b9b5650490b0dc0c3bcd0f5a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cad32ed9805f08a9342513ac768174b4.jpg", + "title": "Rainbow Butterflies", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9c996c6ac40d9b0a57708f143b16cac2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2f4875c9ded4fef743c37e1ba000dd09.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8fdf6f6103ce6fef61b70ef57cb0e699.jpg", + "title": "Cute Innocent Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5c17d8b2d5a6c4d3ca52108a0cc76ee7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/75518931697d7970027f9e2850ec864a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/28672c47ee17c791d01228f315eb5823.jpg", + "title": "Pink Cute Corgi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/610741c38cacc86da6e30139c7c9986b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/68f675938d544e88122f7527786fe808.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/160c87ff653e588997af81038e8f4767.jpg", + "title": "Cute Circus Elephant", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/83ad65082a86955834932b2d62efdaa5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c7fa7c64d43224e49e55989520ee0c84.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37f420e172afd5c44acad07e6384b87b.jpg", + "title": "Glitter Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7dd8cd6f5d76999d3b2172b3bd0c6297.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc26098b74f95ac49a4846b9d56be2d9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/06eeb7f8e72d1f58c6d068b272bed384.jpg", + "title": "Summer Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da946583097e94fd3eadaf2c69312ffb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad4fbc9d106eabb4c46ad8c101b41f2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2bb328c679f768b83c41756a7bc28654.jpg", + "title": "Cute Mushrooms", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/454e754c41492134cbbebe35f7d9533d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7701d34e13a04834cb0bdc4262705e5e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/095bbf070ffc80db98d7111659fafc25.jpg", + "title": "Candy Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/11042a5a3e062120fcc63ccff8460ab7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4216760c1057181596049e1c748a4199.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/60fde2478da4de86f251425bc6f4852b.jpg", + "title": "Cute Big Eyes Puss", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0227219a3f9fcef9044dc7a282bf9378.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6dde6426d1b25c9870a9a79ea1b85ed8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c7d8b03c95efc99d6cff5f5f54e051b.jpg", + "title": "Gingerbread Man", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a740dc95c27b22f4f596d27387e38cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/880c79f4a39681016737aa38c9a8f491.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e7c7c97690cfbe9c9c1493b1faf17f4.jpg", + "title": "Pink Cat Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/30e248ef2c6d9f1b90a0255695672846.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/89d898ba0d1257d4287a8a5548992d87.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f056f8ad8102f1754fb6997c9017a301.jpg", + "title": "Rainbow Pinwheel", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/df5e6e69ebdec08ba6763d62013d3f50.7z" + } + ] + }, + { + "className": "gravity", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8379d2f98ac8efd25ff3e876e2d6356f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c22f1ded0493b39af61fce5ab3631503.jpg", + "title": "Broken Hearts Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5fca72596b5a5c2f192100160018007.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/acb31983442f2553d339cd17b036e38e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/47b8ad6c1289648fc4d601a7866728af.webp", + "title": "Skull King Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5e565d9bc553269dd3bf3c6f66c78a39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35ec9b5d5c32b50456f144c8a71e090a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b49ed3d5f0c9777761c8b8a667eeb444.jpg", + "title": "Gravity Sad Emojis", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af190067bfe19b3415a80219d095aae8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/009717f7821e1b3056bfa2bbe4a04543.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/538c8d7a82e6ff2220e692c14e799d88.jpg", + "title": "Gold Diamond Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dce369948b78754d3b0e5cb5291aafed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47623b3cc27dfc0b3b765ce0b0ec45d4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a6e960e5f774d61c0b04ed252542e73.jpg", + "title": "Pink Roses Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77481a60b2bba8e63a9f2e0e97fb38a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ee67b8a6e8b3833a7e5ff58563ae501.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b458f7c397b9bfec2efc257249f0cd09.jpg", + "title": "LED Lights Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24d3774dac352c435d21b76599514adf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/62a63936d535585e9a833621d67d48e8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/33957e59ee44af2ab586f096d936bab1.jpg", + "title": "Love Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c519089b14f1c5e9c7c604e2a8e80e4d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/27fcacd2851ec08537bbaccc28afb637.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe86ba64017450e52af42f7b7648305e.jpg", + "title": "Cool Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bac34a61f99804094bde8c66642454ff.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24b8388768cb3d561e49ad811229d005.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8470739680b5af725996a895b180597e.jpg", + "title": "Galaxy Weed Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ffecb7f0f1324cffd353765284e1b64.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f5b62ab1dc95ec8785ec05a5481944a7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9425b1e07dc501ca62e7493334ae1286.jpg", + "title": "Gravity Water Ice", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8b461489319a034318572fdc20cccb17.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8269783a50d34f7c6aeb28d39e8d05d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8bbd24595c4ebdbb3c01c1dd1f3d2890.jpg", + "title": "Snowflake Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/71809cf2683774f69f622c26648a52d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1df34cd5fd7e963f2d713b87732e7b04.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5a5f00eb95871a695fbbf6ea1df834a3.jpg", + "title": "Funny Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/76abcffb4606d7d3565cfa95f029de9d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c76369d1afa79f34142cebf116a16b80.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/63d0a9fd32147fcb6c7f68756fb7d7e9.jpg", + "title": "Pink Bow Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3953ab0a5337223fbaade485316463d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1c7c6e16cb2713a16d706abcab107175.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67e010871dc07f3cae0ae2a6d4bd59bc.jpg", + "title": "Neon Dice Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45c727361ee7fd0c779ea41a7b9ada3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4bca0c3325596b551535d06dc14d47a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cf99a2c420610c96f186bbc18c7b39e6.jpg", + "title": "Pink Pearl Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/89680faca4b29a4b9d07140af2d77a8c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ef39ebee379e24616d242a3d1db3bbb8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/664d2bfc49340bae4184ac3e0e232f3f.jpg", + "title": "Christmas Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1a9c53d2ebd5ddce34405d93bfda6444.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0156b62a020c9aa38c6e47c55d2f86b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0bf116b986754794318931224361710d.jpg", + "title": "Color Candy Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e5fd8eb1357ec5c612bf91fe58b45a6f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/927b5f397b592fcf7b29d3fdcc2c5f09.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/de76f850f8be2fa23dbd8bb91b03e167.jpg", + "title": "Neon Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1c0168bd4a8b1b48c86e00a1b7168886.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eb4abff4831a3841fa5f8d08ebd281bf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/50d7e818b0f61b845e9d4383e8c6fcf8.jpg", + "title": "Happy Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51cea96a5e87786a9c5926b2a469d02e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e354a924b960c202691b205f33ee8b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1734355d4edecf29197cf40723c436a2.jpg", + "title": "Diamond Live Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/baaf7a2905d5d4841b824a31aed178d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/393bf1e6aec4651a64a752a6f8fe58f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9173438c70a5ae2df4edccfdae1138af.jpg", + "title": "Rasta Weed Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f1643b1093d94b53917dae25895e6511.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/732a08d2817ca777cf046a4692236a6d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/30547c49435d173db5e8af32f0d10fbf.jpg", + "title": "Cry Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6064073e8a9e26927a379847f1ab33b5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/69ca06593f40d0b0f78128d2740bfed0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6524fb6100f85d909b4b8f0a1a1100ef.jpg", + "title": "Golden Dollar Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8bfbc1ae70502f247a4be1d14a2c978f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ef14e4f3d9fb653508a8cf110e1fff94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc9aad66b686bf839f1ad2b036e07c11.jpg", + "title": "Gold Allah 3D Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da24c7cdf2c4d4f58590cb21a1136915.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/49c29cf5bee124a04a04b4f2e35aaf18.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ec81ae8f6af8dc77be3c0b045aa5164f.jpg", + "title": "Neon Hearts Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bcdcb9f3e91a598a02a078d92d7ffd7b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba7edb5474c22916786703017563afd4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e7aafe7b2d089d38158fe72c61a16c2.jpg", + "title": "Pink Butterfly Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e9088fb1b2d764e201e67ea561becbcc.7z" + } + ] + }, + { + "className": "neon", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/60e77ebcd281c671ab8d30f4615bd2a6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a46782b68ffcbabcb2955fb6a62a24cc.jpg", + "title": "Cool Neon Wednesday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/59ee83901a0baf53c41a47558ddd7246.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a483ef7572a6470d17f1ee6a8662cbbc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6eb009e07c7b67591df7adef294faf2a.jpg", + "title": "Colorful Neon LED", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fef5bcf9a6ec27db563aff836168795c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/18644be1fd15e56659d43e492218c4b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dfc915aed9997f9e6613fcaca2ee0da3.jpg", + "title": "Cyber Girl Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7b292eb7f42707cb10bdba591f9ab595.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a75f2cad0509270343db40eb19e88d5b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe7c74057ba92bf89f49fdb4b730a7b1.jpg", + "title": "Pink Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f7ecc575cfb6ca33d48edd67415bb43e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b7b24c5938141e8e8bde0b237384b159.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337f290404725f4ae7ac1c686e65a098.jpg", + "title": "Neon Dark Sasuke", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/370c4e08fada63e7677aa46bdf657a41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0a712190ddffabefb6c578eb639c407a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a0f67730d24b9713e0434169430f1d36.jpg", + "title": "Galaxy Deer Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2dd772a8e056808e512d9aff6e312223.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c1b317e62b5d21c7600bb0f1904e1d4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc241262b4887fa4a1a441d2e0a37265.jpg", + "title": "Love LED Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0dee57c3241c8ec6d2de8acb20d50435.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cbea38f0e67bbe65bd751fa4d652471f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e4b348cca86ba85a630ae8da0ebff427.jpg", + "title": "Smoke Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3ca052f525d62a83a29aa7ffb20065ad.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3beaaa673ee268a430d693ecb47b03a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f735afd7b6aa6dbd62d2281d3e6d817.jpg", + "title": "Neon Green SMS", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/32b96dc24e956ba09fa17cc85488704c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b97c94371564b94bdf3daeddbc13aee.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afb44702ec15535ad3b043a1341041a2.jpg", + "title": "LED", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/56ed64ff598806b83fae7231ff9ec8d7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed684b67855a99f9b55f95d8e383c8c4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2401acf64b80f5a7a8454fbef3d0c377.jpg", + "title": "Neon Nike Green", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/94a104a30e894c8bd6aa3879b7d4a728.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a0472c6ee4169ac7263e0ddc819599bb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3819bc8f3eac85c49da446314e5f333e.jpg", + "title": "Neon Smokey Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b51bb61639f824bfc53bcc0bfa132499.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7f2d676137b23f7fee546a9a0ed3ef88.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/140ad668c6833bacdbaa21d2b9555755.jpg", + "title": "Neon Blue Jordan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12cad8361c422d05c5f1f176409775aa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/536a7bf24ae63b1290145d39ed94d3e2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/909a92b3101346f052c7d5a94d58d46d.jpg", + "title": "LED Cool Cat DJ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d70fc6078648745c400fe3612877a841.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ba97361c79a9639d3c6099e219c2b43.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/97a1d4230c053cec2a187d9c39e5b449.jpg", + "title": "Love Heart Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c96cedb306c2b6295e902a42a3539c27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/48826884c166464602123f683d7456e6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/72b6b5ffb54fc82eba9e7f854acda4b8.jpg", + "title": "Neon Sonic Knuckles", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f714799c51d26cb71c5b79537cf12a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/60d09cb601d85f74a8689c7ea8db4b38.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/635dcd5b39d67d31afe5527419e33b9f.jpg", + "title": "Angel Devil Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0a3d998d998a9cf3f3ccfd6bef7b16cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1fecde3558ed806bc19c584ff7a832cb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a58d1e69100b0b32c76ed0ceab11145.jpg", + "title": "LED Neon Glow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a3bc09bb7ca55fcd468ef39b0621a1f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b663ebafd26af8bbfb5ba8139c414ce6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8803b55c925274318861fe2b3e17d3d6.jpg", + "title": "Cute Neon Spidy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ae23d32406914f3940cbf1fabab46c6a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/606ef23a0315bfa4347a8a2b4ff92e93.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34f3bd478f7ccf52527066b0adfdca46.jpg", + "title": "Neon Drips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed66ce259f5f49c0906e5f33ae9c250b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad05d91bc8f49781cb67a2500db8c8e5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e25b5ada432407df76e07ce3c062a22c.jpg", + "title": "Neon Blue Kakashi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/76550924f45dd98e8f838062b719ba86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/df9b5c458ba1d961bd679e30717d45a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a93e9f47517baa0993573afcec4c648.jpg", + "title": "Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f5ba85b65236bbc8b90a309a4d670e54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f2caf67a12c7a224366b321d26cd155.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0067adb5cd933ae5327137ec7f6f75e3.jpg", + "title": "Neon Rick Morty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7683cda31e1bc26b053166e745879bf6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8f3ac6a49e6f52fb87549ee2b30e9e8c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/661b2523f2289de48078cb53752ce7f1.jpg", + "title": "LED Gradient", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bbe08eaddd7da0678926947156fe6620.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/de158b337e61826fb58096a34ea75de3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/528b7213e01aebd098b79939d62bbac4.jpg", + "title": "Poison Neon Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/845368ab910660a876f2aaaa9eb6fb5d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b437a0cac998109d39dfa9166534b311.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b7e53a86bfc422e70b4adf66f5a82a75.jpg", + "title": "LED Laser Beam", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3c3974d58c977fd557ef90f78d6a5e05.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fc563fe4be5d5dfa1452f5542e71842d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6a430219fb6de51e5523f9f34abe3615.jpg", + "title": "Purple Neon Kuromi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b7b62b0aed4ca04d16bfd76337232b15.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/efb809ab7a4575009bf57ede2b6c3e30.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8372a894bb2dce6d007fe41c0ad51f74.jpg", + "title": "Cool Neon Gengar", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/488423d05be6e411d0b8adb7f64ba97b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d832c8361d0f5b52785ba9b79156c649.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/31a5ccbe1aad0c20bd8d7c98e8b8b7c8.jpg", + "title": "Neon Monster Claw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9e31ee77acc6eb9ccb85eb6432f11d02.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/deabf9be9608345c2a553be34de81350.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ba516c97c483ffc404f0a5636cf9515c.jpg", + "title": "Cool Neon Hero Dabi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/07131d0d1000f506273a806932e3cc5f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c7aad7f3a29e53cd0624fc26dd37c260.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2e00e0b39595c2daaf41fa0f3a3ab13a.jpg", + "title": "Neon Voodoo Doll", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a995ca2134f585fd94f1c348acbbb781.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d546793dd7e668416f535595ae5aec4a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/467bbe0048ab6f12ad0962ef4a8df143.jpg", + "title": "Neon Cool Itachi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/90bb0e08d2902dfd069b5a9e19ce7f27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6a3896f2f0fce5b3ae97d28f2643aa52.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/23ed7aaefb5cb96adb0a3871d88d5b69.jpg", + "title": "Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ce1502902b0634b7b70280f95b17c83f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c30ed4e01fef2ef5a9148f03507f6b74.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/41dafde53c8fc63331bda6bd2828cb27.jpg", + "title": "Neon Obito Naruto", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f11beaa10ea194543d5bae717657103.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6c99d50624ccc3817c9cc22d037735b7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/53bc8b35dfdc3d33048a62e75b04cdf8.jpg", + "title": "Neon Devil Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/81252e015d5c2b691df1d4a80f9000de.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9e310b631d40242d1e7b192e78380d46.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9dfc2e65f04d6074ffb73ab55c5a386f.jpg", + "title": "Neon Revengers Mikey", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7a63cc8d4ff044f8bdad7a480968683d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1439573bad0fc52cfd24a68538ff977.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/909ec2a5c6e99359de9977b2afa1b851.jpg", + "title": "Luminous Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9d6dfb81a5b6bac2635cf8cf3c51fea2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/81eec40333da5ea79d08810a414a8149.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2dcb78903c70b53336bdc590c8eaf045.jpg", + "title": "Neon Future Yuno", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3588201b9dd092d09a0ebde912d93f03.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/350bcd61eb74ad3b56d34f37a1191458.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ff3689dcdedffbb2b8d8a8739fc9590.jpg", + "title": "Sparkle Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/043e51135b9105eda2ff2fecb112e90e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a05cb6aa0c4d5b4fee04a1534bc6ea04.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/580c7d0997c93ca57a6c4c62fd85d6d8.jpg", + "title": "Pink Neon Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7aab01a381bf315210813cba67afaa0d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3589f8ad6c27961b588b2e3cbd0c00a9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce253563206cade3223d16f00cd748cf.jpg", + "title": "Neon Pink Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48571d44f1075922ffd5d73260455417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/03c6e8b3b016357ccd94092f26e82688.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/15d2e42a5bc5e5e34c5b0d0add4f568e.jpg", + "title": "Neon Ice Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/13ffc8913f513d8b1afed704a3a7c08f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66726987937e0f6d01db107eb5de071b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/15fd8c8a57e8ef58a2c2bba56a110740.jpg", + "title": "Neon Light Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4424ff85338f7635e1b98caaeba58ca4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/573323a347ae7dd8d627e81a783773ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7ab41bfb62838b5e1316ec4327e68f96.jpg", + "title": "Neon Cyan Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6288db468e0c40e7aca66a8d2eef1e69.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10e454c35a582f1b7fd99613acd6912d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ec69f889e5619dfe230157b3084d976.jpg", + "title": "Neon Sad Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d2581fac351c95318c03ef73562d14b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1944d1117925d6a2fe3798f485093153.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c8d2b9a67c15bff8c1361364b74e1ce1.jpg", + "title": "Ice Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/adb6ce4bbf8a2d399159d3c2648077c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/027c3a8d51b22f0551412f8de2cb7f15.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b01f0e993542de81222e3b7c11dd77a6.jpg", + "title": "Glow Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/be71e44e9b7ce4c366314f748d4359d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84b5a0ae0b0ef8d554cc021cb4178774.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/155c1ec717e5109f14e86623cb14a4d7.jpg", + "title": "Neon Party Time", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/703e7dea86b92271165e12cb48f2c774.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3bb487dcc21229a024e901502058ab67.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b16cedf4809360c7b7e3cbca82a86124.jpg", + "title": "Neon Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1285906dc99219c01d1daac6615ebfb9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3fc1c83f59179702fbcb7a64c08d2d7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c5c6a01a0b3a4805b13b6c33ffa79ca.jpg", + "title": "Sparkle Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a882bc3d4312022446ef29674543352b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7d550de0e0a5a89ee1edbd3b2ccf3b79.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b0571e339a6263a11e438e6d03d99487.jpg", + "title": "Rainbow Neon Stones", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/572c8d42638f125bc9d8ca89f970ad3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb51149ccf5d34f183fd55aa53d550b7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05668a1223504be51052b428159ad635.jpg", + "title": "Cool Neon Dragon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6b6e408f0d7b4378c556f8799a4fd11.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f6340d722496ef89b25636fe4f8e7a14.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e3c84ac1bf4b65bc361b87eac8d39bee.jpg", + "title": "Glow Dreamcatcher", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8e213591dc9ad001af977eb7b5c47beb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/772ec54e339f8a55556d6cd819684899.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/997cc6e7bdf9b2ff65dea51c8acbfe53.jpg", + "title": "Purple Rosy Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dc1fd9c15a0a4a6521ff7921b5985843.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80dae432335427803240048ee96f7453.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b5a11f52c33269cba0fa328214c18338.jpg", + "title": "Bright Neon Flash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ba327a22b874dcf1ae1d7d530ea4899e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3b840166fddf0c49ae2ea83ff57f2a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4570d7925b569b09606e21bc4e8e7912.jpg", + "title": "Red Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/21c2f402c398453959aa717c3ad774c6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0229346c5b6b8a70e4f47fb63d63c1fc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c046f8d7dd9e69ba66eb8f3fb4b60d41.jpg", + "title": "Neon Glow Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3a72b3e1997b88878a9286c2c34bb3c0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2719969ee966f9c4ff434b261cf20462.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34e92e4e7aff9fa538ef4a0c1db0f7e6.jpg", + "title": "Neon Urban", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9591367b7cd0a79b32ee6c7e0c6254b0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b1f1ee39dbfd446b3a53671efd0af5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a0c4c798e513d1d897290d42b31449cd.jpg", + "title": "Neon Blue Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f32526079893a191ea53ceec0f2b7806.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5178d308fe7c72a9cc58502e6a3882b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/91193ccf4623c3d26a1ef9f365d9e8e8.jpg", + "title": "Heart USA Flag", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/02b3fa83f300a8165702aa7e10969b41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fe7d5573f8263aca3b81214ceeb5537b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c1373139ebf540430ca4eb099897d9ae.jpg", + "title": "RGB Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a68c793e6d4b42498010121e713aa78c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/03fcf4459503010badcab966c2bac474.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0ebb8a152de114e7aab243ccb21b7aa.jpg", + "title": "Cool Neon Blue Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dadf0750e963b158cb1beaa73b07a40a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc61f797773baa2644bfe463e8437455.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5f52e012e5e33b7968ed025b33f94f1e.jpg", + "title": "Neon Light Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6d472b643915a702b2db736a73b4018e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/967541749f2f1442db1e9a23e95421a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9493c05cfdb60a75bc0d6ea3651992ce.jpg", + "title": "Cute Moon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/efc2ee720eb22b534f44656ac50d34c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/af85cd5e893f4a40e4c3155c32d84bc4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3bd981a4ce41c94e0b972c0d3e816758.jpg", + "title": "Fantasy Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/55b948e86e5af2bb0801186dfd5e5b9b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/578f7f6ab799fbb336df6935643ba57a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c4471ad2ae420529ba1edf5aa263b9f.jpg", + "title": "Neon Cyan Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6012c087d825917986123ec62f75300a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e8a6b98517cf18cb804413d2d948a68.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/08d3a65f3a0abf105459a22a6e179167.jpg", + "title": "LED Heart Balloons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e35161ee313ac776fe6fdf89b62b7ba4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42f097a61e4aaee26c2b856417a2f697.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7da8d2ce889ae0d3adecb46c42643e98.jpg", + "title": "Melting Galaxy Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f2cc295a8f03b5ec60bfc4f7c8f632.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba004cb3d80a65fed4a8220cd37be833.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f0924a165d5dce38c7747c7f59f1f851.jpg", + "title": "Neon Wolf New", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cf515a6bc962a9bf0971f7e04c99aa4b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb0fd902928eaac49cb138cf0b28bf51.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f96e163819b52bdb27e3ed54903d0770.jpg", + "title": "Rainbow Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8e1f48eaaea01ed0e13bc14234907973.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c257244a09e277b5232535b921fefedc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c439b833d45f24c9c4d2fdc5990942cc.jpg", + "title": "Red Rose Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12c31ac3d38f33adeeea1817b945b609.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c9e192ed5631354cff7d23b41c30ecba.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/17bae1e387c327f37e592b51d5be6543.jpg", + "title": "Neon Holy Cross", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f953b30582797c1ddd70f52b80164e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7309156fbbf837fbb9f3dd82a105e1ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a4e2be7942ccb406c0e0fbc20d0e4297.jpg", + "title": "Neon Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7af5d923d8c9ab250c3733c1dbd3acdb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c6cf67aab7f57291ca85566078ed5173.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/215749c43967782628ba022f22791897.jpg", + "title": "Shiny Sparkle Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1541dd0c96fe87f0ed658dc8d6b72cff.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/daba26b7884488963a089dd4e887b39b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f4f678ff1e4fbcb63762254b6a7c9c5f.jpg", + "title": "Super Neon 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d69633fc9ab32012aac45d218964bb3e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/02192f2cc92ffa57531f4aec6917b12f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a51b0136c56954221f7666729e3726d4.jpg", + "title": "Dreamy Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0dc013fbc9c9787f8c69cfb87dff670f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d694c14dea1c80d53487d7398fba7e17.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd6ccfc106681610cc9a7bd6672be8ea.jpeg", + "title": "Hologram Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ccb91288b32a0b0143ec24d2fd571982.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cc3169c2853c7c6ef76aa341262ab803.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a82105f908e63a5c1fed450f855f22e1.jpg", + "title": "Neon Finger Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a75373cf46ec40dd8c3f09a15967f417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8ee74aafd96dfe8999d14716421a8785.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6834f9f0c4f47f4b4676b5fcd9cbacb3.jpg", + "title": "Blue Neon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fbc31a0ca907fdfe3b7ffeba70e90d09.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ff3ab70e73b2f2010dc51082a2810ec.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/285f465e37b821111674ce1b525666c2.jpg", + "title": "Neon Pink Lips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/196222b8795affa20a75bb4cea50f9bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7b1b1cfa708df3f5db2acd7d27528607.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ff8444f58fec022f1a2fa3cfc61e6ad8.jpg", + "title": "Neon Galaxy Infinity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6221c03540253a179766a3de5ef4114a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9d3d502269bff424c24a82913581a585.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2f7b150d555a1a4fa059e808f717888f.jpg", + "title": "Neon Parrot", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4f1b07d5bff8a6d702b9663668f408b5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6f2ac1821ab819191cbe87876b0ce702.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1389697dee2a2e4b766236b8b6904ed1.jpg", + "title": "Sneaky Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5762b6214e99d62de3059abf5cfd9944.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5eebf6fc6d9caf5ca98484312ef18fcb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4e352413da42e754653db793fc0f5771.jpg", + "title": "Sparkle Neon Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/92bb466f82c45b1877f3c18e18467884.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c6a4c38c296e63bc92fad932e6a7e8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ee2cf23b3b28608dbb4d8dd407efc04f.jpg", + "title": "Neon Pink Flowers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3b89ec5ffe89b3d69004cacfcd2b16b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f88b189f63a4b19fec1f9ecf0d98de3c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ff596a859df67ec98a2c8cd26356a6c7.jpg", + "title": "Neon Leaves", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ca20175a65183c14b0a4376fe555f920.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5036c290ef1cda9387694cc283df998b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d30381f56dda08241a7ca109c0cd16b.jpg", + "title": "Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a39ac15685fab2a55667886d4a820ec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e3cb0620103287d77b4d334a63dfcd6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/01793f1c984f37850b904476bbe892f9.jpg", + "title": "Neon Army Bomb", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1c08957865041d7e8dd5491b38a9c3c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/53dc66f5232099cf41903dfba6ac66d6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3bf915a6b5c52e49896bdc5e62909d94.jpg", + "title": "Neon Blue Cross", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0cc4d6085ad22e41a110acb776ce63c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42397e7f5caa7cfcfde15c069cfdf6b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0e92526487439b64944a456839e54c6.jpg", + "title": "Neon Red Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f246376590b509c63173963c71335535.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a27d7bf9f82251b2c2df853b437ad8ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f11ac41de479581a950380183082ed00.jpg", + "title": "Neon Flash Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85f5d84f28235aefc9e7e86a74255255.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e8e724c7a91d8a349fdce0cf214d489e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6278ecade528079d8417dafa80df70fc.jpg", + "title": "Galaxy Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed9486794b6c0a45579c069d670bd0fb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d0c177cd40f4a89203b2f82fc40d7d0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/caf8935e9933b891067f2d9b93b04b96.jpg", + "title": "Neon Purple Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da9d1a8beec78b72b87376df2d84f7c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b9452bcd5226ee38df98e2b4d9353268.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/295eca202fdec34943aba77b274bfe02.jpg", + "title": "Neon Hello Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b547c39e7a27826f443dcd835a796f9a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0d8ae325a6ecbc356a1d3b76beca32fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b40d5a5ac0c06c1b5544b1fc8f99095f.jpg", + "title": "Neon Light Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/35855c73a0ee0071c5ae0f0e56357510.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b6391f1325cb4537ff3522e6cbaf6403.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aec6f96c99078241efa50ef1e5409263.jpg", + "title": "Neon Zodiac Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4caf1c07958c6c44e4a86700fd7aa233.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fbdb3fe93acc4bfd81f67f693c35e5a1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/383b98b2a6faa75d8d37af078a3f5838.jpg", + "title": "Neon Magic Star", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b66bd61e63b9d2cbf654a73f945cdfd2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/533c870869233c53a682f440181a0dd8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/26fdc1720c24082830bd8636caa8a11f.jpg", + "title": "Neon Green Tech 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a8a823cd5c13d1b79fb7e46be8c328ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0efdfca0ebfe535fa24746ae00d671cf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6543f6a165ba97f05c8304537f07ece4.jpg", + "title": "Pink Neon Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0c329de9cc35532911064c993186101f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6083fb212d0982441eccaef9ea2a2f2a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7be18b06d9b2c8cdfe410d66f6efa896.jpg", + "title": "Neon Blue Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9de6251a8e40f9bf06a6c185800397b8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/67ddef1241e92f2ebff89304df38b728.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a89cd91038a3da4085f8709a4e18a224.jpg", + "title": "Purple Neon Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/04392ea481f44ae0dd921ca015578b81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/40210b800ef3b49c177a3e3eb71ae40c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4dc6c76c53ddfff8c8e44c2ce943e2d4.jpg", + "title": "Neon Headphones", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c99b4d797f3e7b23d91531cb2afe4b58.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/770fb6d3810b764a623724d991c7775f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5105aa6cfc9aa2a9e3c44bbf14f3b2ae.jpg", + "title": "Purple Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd0ed1d65feae6e0f21a56924e9b6015.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8720f300f071e95b3133057f005db425.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f8828bbb1a4055bdbd27c60fcd136f54.jpg", + "title": "Neon Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/545c8a96e798d61ee42ad7fe084b3a1e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fab28c214324af274da9717f0c8294e3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/512121c23ec24e96acc0998524da6a44.jpg", + "title": "Pink Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/577d8fb6f2bc2f3937f7d3e857144e9e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/46c9e0eb2c77806737f72eec10ba9367.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/552b1cc242120f12c0eef752cb3dc4b3.jpg", + "title": "Neon Transparent", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/969cd0abd029c050539e6a3139357f8e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff0387dca37f3e90d93be3b0f0856a4f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/287b412557d858c35499ea1fdca62a45.jpg", + "title": "Shiny Neon Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10bd981d1434e89da71cea540c9e9f71.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2ff613db906187cfefbc5ee1238c948c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/386136fdfcda7d7806ff01991cb8d51b.jpg", + "title": "Neon Hand Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3901b0fe1c7ff7e752a8c747a0552cc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/33bb0254df22b4c7b8a45c8012c8507d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1fd21a804dae285c0d435ff01a9eb52c.jpg", + "title": "Neon Heart Lights 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0995dcb1673b19ed6fcc3e89c8b54e1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d4ee2c35d9feae0f69c4ac7d9b0f510e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a41733c55a507c30928185fb6bf1a2ae.jpg", + "title": "Neon Butterflies", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2545d4b7f5c9cba1fd53865ffcc74dc2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44e34be19666a583db34cafd2ccba178.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aa40c5f3242b2bd266cad581f6333f0f.jpg", + "title": "Shiny Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48fa60fea2649b06176da567d300f27c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6931deeb705ad69734e337a2176c6fc1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b2f9e21a031b016c37b99443a9ae4aef.jpg", + "title": "Neon Universe Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8da5bc53cce5b56bd50ff3c012c8f835.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/856943de44c33187695d941d78c8981b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8f259b1b59e4233cc78b8a0aac63c46f.jpg", + "title": "Neon Heart Wings 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a239773db1ef8d383357e581643ae99d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa78aba6163a459155fa2a56532aac41.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0aca5ac61afb8fc0b57370389ddbf90c.jpg", + "title": "Neon Lips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51b7c9ee0480459da40ef4c5acccbb9b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eea7e08e70115bb86119c791498b42fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3488a923522c254482c753a13454b55e.jpg", + "title": "Neon Heart Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f7d24431707410d1e3f2d381ccc7c39c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cac9728dcb632c387d90ad911a737e72.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/92cd223af4b01e54cd1b5e9b31cbcc70.jpg", + "title": "Neon Pink Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6db73f2c4286ff6d8ae767f2bfd3c8f9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c86396a76942b6637c84b27a26b7bb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/91db1a952af766d731f24b2cf4989637.jpg", + "title": "Neon Flash Color Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8a1eb5714d1c5581a7f3fa68aa0ccba7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f7dddba03625953a94d8fb404b6362b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/90ec348f135dc4ba430e295e95832a6b.jpg", + "title": "Purple Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/056cdb3922ec089ea5fb98390354ec32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a056ed1c68b0115bc8d55937ff1f50c9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/382fa16b1d81c720edba3535ac80cf6b.jpg", + "title": "Neon Feathers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/577efbe36031556bdfbe4d59051d6148.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9ca563465c8657f1e5ec5a30ff5eb4f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/83122e82faf5883b718d4dd56a77e7e2.jpg", + "title": "Blue Neon Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/317ac6eeeeebefe97dff37bc3c5b1d78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa745f2c7fb83294d9235e642c0c0d92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48739dd26072ea77e949d463d9748e91.jpg", + "title": "Black Neon Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/367349c394f79532673ba10edad65851.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f19a6154041a137614e2cf4d16bd5859.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afc64eaf173efb47849bf676bc5bdd47.jpg", + "title": "Blue Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40cc4728bc050fd0873320845802e94e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bbd160986fc12fd0a855ae5a150d8fbe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c4197e756e12a39f69643c065ff9287c.jpg", + "title": "Neon Purple Bright", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b82bf2b3313fba885fa9227ee407422.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76e022b002a44788a7a0fe87dfd77a42.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd00cb8a904731454f87e7211f810194.jpg", + "title": "Thunder Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ae0bd4ef1a787cddfd990d7eb68aa0a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c2db2a5ead2c11906c0e1e50b6fb1f59.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/382e19612a97dc18b4025f4dc91fc114.jpg", + "title": "Pink Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9183521a149612bd660e0ce338315942.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f906814f6d0117bd3b31a986a2bf8c26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4b74180a0b2b2eb92665e02f9ee373f4.jpg", + "title": "Purple Glow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2433f84d7cc6abd09c47c482e448fa94.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/64d84860f2472714b5003d7a9d4745ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af56c91462fdf1a0008da551a4d42911.jpg", + "title": "Neon Cool Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24e1db3bd670218af54e14b088ee2aeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e29a32d1bcbd2c26897a892dd82a365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e291b627e01d51445a7ab1ff6a3c2ba.jpg", + "title": "Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5041e519ee091d422ed30c8bba10f5ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8e472772f568cc79ffff4a4b2e3afc77.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a77100efe5f2bb872122c1a53551ea9.jpg", + "title": "Neon Heart Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8745dbdb9359c1782561b522c0aae5da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c4ede265acd471d38da6b0a0ea1256f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9664fee2a58a4a8e46bcf236b86b8040.jpg", + "title": "Blue Neon Tech Beam", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ee0da096bae4970c6b766e5a6e068e0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa745f2c7fb83294d9235e642c0c0d92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48739dd26072ea77e949d463d9748e91.jpg", + "title": "Black Neon Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/367349c394f79532673ba10edad65851.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f19a6154041a137614e2cf4d16bd5859.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afc64eaf173efb47849bf676bc5bdd47.jpg", + "title": "Blue Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40cc4728bc050fd0873320845802e94e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bbd160986fc12fd0a855ae5a150d8fbe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c4197e756e12a39f69643c065ff9287c.jpg", + "title": "Neon Purple Bright", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b82bf2b3313fba885fa9227ee407422.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76e022b002a44788a7a0fe87dfd77a42.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd00cb8a904731454f87e7211f810194.jpg", + "title": "Thunder Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ae0bd4ef1a787cddfd990d7eb68aa0a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c2db2a5ead2c11906c0e1e50b6fb1f59.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/382e19612a97dc18b4025f4dc91fc114.jpg", + "title": "Pink Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9183521a149612bd660e0ce338315942.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f906814f6d0117bd3b31a986a2bf8c26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4b74180a0b2b2eb92665e02f9ee373f4.jpg", + "title": "Purple Glow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2433f84d7cc6abd09c47c482e448fa94.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/64d84860f2472714b5003d7a9d4745ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af56c91462fdf1a0008da551a4d42911.jpg", + "title": "Neon Cool Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24e1db3bd670218af54e14b088ee2aeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e29a32d1bcbd2c26897a892dd82a365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e291b627e01d51445a7ab1ff6a3c2ba.jpg", + "title": "Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5041e519ee091d422ed30c8bba10f5ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8e472772f568cc79ffff4a4b2e3afc77.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a77100efe5f2bb872122c1a53551ea9.jpg", + "title": "Neon Heart Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8745dbdb9359c1782561b522c0aae5da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c4ede265acd471d38da6b0a0ea1256f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9664fee2a58a4a8e46bcf236b86b8040.jpg", + "title": "Blue Neon Tech Beam", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ee0da096bae4970c6b766e5a6e068e0.7z" + } + ] + }, + { + "className": "cool", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/56aeb0b3f484debe1adc5dfe72000a3a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c8334dac14fc0499dd6f2a1f7645582c.webp", + "title": "AIGC Horror Face", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d256de70b9b9f10c57b1710ff39034d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76e022b002a44788a7a0fe87dfd77a42.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd00cb8a904731454f87e7211f810194.jpg", + "title": "Thunder Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ae0bd4ef1a787cddfd990d7eb68aa0a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/12cbe10458486410deb0e0d7c3d9ecbf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8e55766f14333a37c603f3e840c01cfc.webp", + "title": "Cool Racing Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7876f7469971061af083ae2b8d1a613b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/be711497a974f3dda81d107bd244c799.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/da0323f5ce23630b9990062c48cf02b4.jpg", + "title": "Dark Wednesday Adams", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/47992e828666d65d72c8ebb754b7dcab.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e1a2a2820955823179458b660f962ddf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b50c5ec68d7aedd2830142793b6f8ba5.jpg", + "title": "Cool Supreme Kakashi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3dab8d819cf8589f360d7268464dc091.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/07c718681d021e55af1334a46c8fe4e1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5cdc3aa96f3b6ce2f9796ef88b9f25c2.webp", + "title": "Cool Fire Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/67d62603af552efc41cb13ba40130998.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/95f08956fe4760d50f44da6707024543.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c26773c9889344c4cfa440562e45ff2.jpg", + "title": "Zombie Skull 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7438744feabf3ab871209d121fe0c62e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a39574ca0fe4af8898cf649eda785198.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d8cecddd87e1468d3768e2b364e61c63.webp", + "title": "Cool Supreme Goku", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/68d540805df27db11b5ad4a6aab103bc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3905d1c93415fac07843600c8c63bdd0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b406fdd9e76d2c796fee839a09475081.jpg", + "title": "Ghost Lovers Kiss", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/867c8972f344fdd0838383f66943b617.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3cdc96a78cb98f3fa2f636a6e06a8755.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8dfeb33f9f06925da460ee6b783ae118.webp", + "title": "AIGC Cool Street Boy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/60ae18f18e1881346ca7a1573689b0d1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/022a797f909cf3a8ae735936b99f29bd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5fb18d7c1235a4c7a22533549a09d566.jpg", + "title": "Cool Tokyo Ghoul", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5604212dbbd85a71dd212da87a81a8d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d135496be33ab7ddd6ab2983c62c7e45.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd6227a24ed15965754361688065ef12.webp", + "title": "Cool Fire Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b90f7cd1c63839ae902ea510420853c3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d92051b7b94110cab3a245503932a351.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a819327dfa112f9e86250f6325e87777.jpg", + "title": "Dragon Ball Saiyan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a14da81e5b70d78c29e7522bb4fb05ef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a77c1e3384947d403730c24e987878f8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/071245025b0ebf3e38d53064af0297dd.jpg", + "title": "Green Rick Morty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1b623be76e2f55db8a85cc282b9df8fa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a0b99c40e1c32d8eda3fca5a83b4584f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e0b1c6b6e65739d1195408e5f501717.jpg", + "title": "Neon Thunder Sasuke", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e256da87115618b9bbce2cb57eae56c5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24b35a7bd02066173767de78741f731d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aad4dbaf0c78e16188ff52e5281a101b.jpg", + "title": "Zombie Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/56993bda392595bdef43b77efb0d8c60.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e747a0e22258790a593acb4496ca876e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/081e65ef9eef2fd97fb8e0b1af447030.jpg", + "title": "Sad Simpson Nike", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e0c271782ebf5495f97cb3cef52e3524.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/98f0673511e03a3ec593db83e64269ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34a22286b89a5313e6bdcf3859278f43.jpg", + "title": "Green Neon Check", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7d865fa5d872b508a40b405d12e04968.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00dc67ef068c51366b050e04df058f40.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c06a25972f1e94d12419757da0d4a04d.jpg", + "title": "Gold Allahu Free", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cafff2d4d25dc57e5f6be794ff570ded.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4c1d9da5bf3b19a9684ba5a1312a31f6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/202074ea9e72cb4efa152eb46200aff1.jpg", + "title": "Cool Kakashi Naruto", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/028c883129ad8ca296ea2a00100a5d86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/51f78b4b9da17780d93d4d76b40cee4e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e880da55872419a5968c0bbdbd4077b9.jpg", + "title": "Zombie Monster Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/74ae8ce6b379a3daf3caa1ac3fa09169.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a51fb7167682e3ecc38bbc5c3480bc7b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5d21c102c0618087f14ba5ade775289d.jpg", + "title": "Sad Tear Simpson", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b0d3fb30fb073ffdccefad344308f16f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e7967fde707961b6462ac00536bd0a43.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/715dbdfe900bdc2fb802cec981eee8a5.jpg", + "title": "Golden Dollar Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/883a7599e21c89582de8904fea9887c7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/209db77434032f26696fc1977af5da01.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1e81a774be6b44cda2f61c6923ee78b1.jpg", + "title": "Cool Hero Deku", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f420f4c1b905b43d2e7d8d83b18b8bfb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a674c95a8f73dbf2707124a0dac96d38.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a3c5878a147829c1351cca1df44ec8db.jpg", + "title": "Wild Lion Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c31c6eef12fd87f8c21348869d1fa943.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5674c27e52412d5a8a96a949135e3be5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e93e4920103ec58c1d869b9467bb364d.jpg", + "title": "Neon Bred Jordan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c6ec2ef2aa6aba7a232dceb175d99908.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00437359726c5333f9ff752a9e3fb00e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0487eccb7d5aa97a7ce164c2cb2fdd75.jpg", + "title": "Fire Ice Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d27f33bbb3aef331bd62117a916d73a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ac2cdb5a76b7d86306cff649083f553c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d46db4da862649d2db7baf5939471852.jpg", + "title": "Fire Naruto", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e513b654995f6529c9868cc6cea98288.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9815612cb7f87552e1a152ce63d4bded.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0228a8658fb9caec0b6e75cbd74a7b33.jpg", + "title": "Angel Devil", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/15010a1cda9f283b8a22bea544445484.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d25728cdacb23221281d20ffe7774a96.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d79553c376879466345221d93c12657a.jpg", + "title": "Blue Dark Wednesday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/22e6f10345153c6f6a839caf9fc46dbb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d30faf7b2b8c60f8ab1d559541671bcb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/140cf1227124a053db8aad3ea735bb4e.jpg", + "title": "Blue Sky Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b9b3898a0a42f3beef9142639fd42b18.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e7d76acbbf8c74f4e5455bb807dfc366.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d4475ed2c7ad791e081e0b584687b45d.jpg", + "title": "Racing Red Sports Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7c127f396d5bc03bf2a688c029c6c592.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e8b924b23dbcffc8e23d558c80693bbd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f5f3d698a66475aaeb200c97a1999f0.jpg", + "title": "Luxury Gold", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/99580efba06827f7c24fb93d7596b227.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5036c290ef1cda9387694cc283df998b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d30381f56dda08241a7ca109c0cd16b.jpg", + "title": "Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a39ac15685fab2a55667886d4a820ec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/30424578a50d18bb640a58aaff93591a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d3de6101883877ace09fb5184f0e813.jpg", + "title": "Purple Wolf Guardian", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40e8d667758b060dccda3854adfe114a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c30dc4eba98a4d0940b32f7022315e08.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e271c81e6adc63e16e25a397ad7515f8.jpg", + "title": "Fierce Cheetah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bfe466632f7730cac12d6cfb29988bc9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/90400a156916052f5ca10545d9585384.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2ff6f33f48f0a237e57ec2aaf199139b.jpg", + "title": "Galaxy Howling Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2e1a587e17904d3427aa67d729d05b3b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/606ef23a0315bfa4347a8a2b4ff92e93.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34f3bd478f7ccf52527066b0adfdca46.jpg", + "title": "Neon Drips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed66ce259f5f49c0906e5f33ae9c250b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c7ca43830a07cdcabe62a1a0b4a8273.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8d28b3c0bb8c769862ca06c67a9558de.jpg", + "title": "Silver Metal Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00db68520a7471c906f1b2229a9c92bb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ee7b421a3890b8430a45f04b30c60730.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1fd6b5f5fee27f230f2dce067eba8fba.jpg", + "title": "Smoke Iron Claw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bf19436bc753535b9ccee66c1b1ac7ce.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7683199087fb612b1c2d02ae1c8769fb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ec9e82402ddc082b427acbd844e06178.jpg", + "title": "Dark Horror Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3e9aa2c49567b4bae0d541144c878ca4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66e7d95164f152764e0f99488bcafdfe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/efe9897a38fcdfc923b1d12d19759090.jpg", + "title": "Purple Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7487bdcc53df39a297b1947bf8a0ec9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c5f468a4d921fe83e38ca33f07b3f53.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4f9326479b2965dd4ed50e8d65650643.jpg", + "title": "Rainbow Mosaic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9b0fac643c21f337d1b56204ab2393b4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bf13f4aa245f651f8589a1e8baba04c2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/88b252f857e2261949d6d03918773fa1.jpg", + "title": "Brazil Music Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7e4938a000c214b71bfcb836de5fcfa9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0e70a0027200033e3c5dee7e0da6f238.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/464567c0070e803426d1ca9a97b6b40d.jpg", + "title": "Ocean Whale", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/90c7ab0ada0b90c8c7f9e13317041470.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5c0f05e6c269a77e8ee8f842ebd45300.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d508a8c76a43c8a11b671a44d4313ed.jpg", + "title": "Color Glitch Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8a982c13700c2c6492c363d660fb1056.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e50ce94aa8b7382536e3aea411a8720f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc641b9e5a0a8881016ff4b86ddd1181.jpg", + "title": "Neon Glitch Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7a97d2845e9c3692e51c9a0c438414ff.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f51440cb8c5c9e1afdb816a4c8b5a37a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6315b49f58bb49c6c7301f2192fcd572.jpg", + "title": "Howling Wolf Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7ec35a450feedba3f95d25a5876f5faa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f1365fd7f4c0ef2d80ab8a0b79b733e1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69ccd9d074efbf50b046086f9490e9d2.jpg", + "title": "Glow Moon Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/91238fa0b61c988e3abbd304411f5825.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ac4dd30f376735ddb70bb5cae4ff53a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03de85b305ecc191f460984450063261.jpg", + "title": "Neon Tiger Queen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e61ce3163377f1e894335ea2ed53b0d7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a272594861d241198a97a49cd5080276.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5fc18a8dcf0ccdd68698f7ded3ac6919.jpg", + "title": "Purple Thunder Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f16941fe6e751881a2d35c74bb441b7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8688346ec3657c862dc5955f2c94de96.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0aa33e3cb9930a68f044849f5c9fdf5d.jpg", + "title": "Glitter Lux Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/19a60fb29d5a8f8e79ec22b126f370a2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba2b7c733c8b8cc64e4eb50f7651dbce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337acbbcffee1f148346759804d17c63.jpg", + "title": "Cute Gym Donut", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0c113a7aeec0f4738fc2f6cd9298e509.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/92f5b7b77ddcb833be876c56d5933eac.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0e3635abb3cfbb6e65ade6acc7ead6f.jpg", + "title": "Galaxy White Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00c8bff8f6b6bce0d975654d5b487de4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e77230f1e2385a4706c74e5e8e5fbe9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8f71579575ad1833c28e7ed717cb8560.jpg", + "title": "Neon Futuristic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a47ce5750d24690c91dc1b60b66fa998.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/51b34d41c740e0e83dcfe00400fd4498.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/615ac24908573ad44d743bfe10ff0d85.jpg", + "title": "Neon Pink Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fb6790cd9857b475794e19620f1e7eca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/04e8c707b3f1a88395616f485a51f2f6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fecc38e7ab6c8f68af2cf102f663b579.jpg", + "title": "Evil Cat Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06c2f03e101515bc832bc82e77e8fae0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a03e014ffabf2f11f9483eb0861643c8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a670ef150da775f1fcbcc56d79082f3e.jpg", + "title": "Smoke Colorful Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/966bbe1cfb8aeb5fecb80c30bf1a3284.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc6c18818ed6809510eb63e703b16569.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a6d7c538b7b7fa3b7157aac1931c7995.jpg", + "title": "Fiery Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/803cee106ab7d42b290d9b320566e060.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/88303158a2c1bb9b7348d93a173f8cb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/70de5bcbc771dea080e50b57d9fd3a95.jpg", + "title": "Neon Ghost Crew", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c66998bb6a34de2412783cf917cce32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e9942d0d5d759aba96edd9d56f968d64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/961cd4279bc72ed415a7f5ab3a298439.jpg", + "title": "Fire Evil Eye", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/95bd2faafcfdb2f06eba59dd5f9070c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99bf90739c218110a92c1a757694806f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bee666edf804f914ed02aa783595977a.jpg", + "title": "Deity Dragon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c7ed0100d483a450ed6fe88e3c557b55.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99d0bf4eaf4150f5e5167d363e0c1271.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0b375019c4b6860917dcf9a225f86b8a.jpg", + "title": "Angel Demon Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e765cdd891d39f21be1bb09202635adb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa745f2c7fb83294d9235e642c0c0d92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48739dd26072ea77e949d463d9748e91.jpg", + "title": "Black Neon Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/367349c394f79532673ba10edad65851.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f3ddc5a195c706bd82ac89a4ce22dd92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d4079031783d623a4e21a34f5f7e019e.jpg", + "title": "Neon Green Monster", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/175692ebfc3ff5618fe6798ed5bf74cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5842613534c10e29fcac0c2a32f12832.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/02a91b2f24c79be5a3416fb05a9872b1.jpg", + "title": "Silver Cross", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c505a3c23fd201acaa9f37c46615b427.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1254967870b7b9d6936ec24cefe9e943.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/68e88c5a39b45b121918531acae20e21.jpg", + "title": "Burning Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8cc8ba34ec2d82f47a30e9400c79fa86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eb0263b15fb8d890cb7a732a08f1e225.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ac79415ac61ad000ef570db857958c5.jpg", + "title": "Black Red Crack", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e0ced4cd9a010920e6f7cf077a4921a3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/305332a7f5b04978373d582659f5b4a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dce50953ce466e62141445c9cb85aab1.jpg", + "title": "Fire Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cb01acce62928ba383ac2321518510f4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ecc14cbebc4e151a9d9fe9fef7227314.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05fa5a2eb72ada7ca6d378ef939aec9c.jpg", + "title": "Color Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93a337cdbf86bbef672892399ec63da0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/551530799c053b83f4531d5e6ddcfd53.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a63e4ac462e1e5e42ac1b66860ce89b.jpg", + "title": "Fiery Hot Music", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af4311b37127475e4ee5bd43616f4d45.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed6e707b4255fd423a1da9cdadaad37c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f5785fc9267f6d9135263e77a3597970.jpg", + "title": "Glass Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/854c532810b913c48225d705120dcf56.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b8b5a2a5b5508b90378af1beb309db4c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ac8d5875810ab6a6103932ddd06589fa.jpg", + "title": "Purple Marble Grain", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/05fe5ba700f5f8db67662e70638222a5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7a175649b35d8d1760bdc866d795911c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/113087b9b66c7cb9b153bde1d58b2378.jpg", + "title": "Sky Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f8d917c9b0f0d9dfed3ace2ead1b827c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/187b29bd011016c9f72c99f3422e221c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bc24a3290151c51d6867d25da6d88c34.jpg", + "title": "Purple Planets", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/db6d8a77a30536664defdb62c2bd57ee.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a9fd24d6c0d8a955016260182adb76b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5325f98a2a58493c7fcf3a51cf09d50a.jpg", + "title": "Red Black Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/afb8fb760ca80ca5ab2bce5fb2f4af8f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ec4c5451fc1a62eb54bb8ee73d077f05.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/116fe2c7f839eb96562250ad7f109af6.jpg", + "title": "Flaming Fire", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/447c7946fbdef9c379e8a831eea05b99.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/de56023fdb761fe14d2d0f2f8fddde5f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1dd88c27e5d35a51f1c9b5f6d3f5f811.jpg", + "title": "Sparkle Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00039b8e69b440ad57e58449a573f938.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff8a4de791a714788df2d8bf4b46a200.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/07bd1337320239001eba00f565691cd7.jpg", + "title": "Deadly Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fd3efd0f8373732724cf9bcb9fc79c21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3679aa18a8e3fd2cb02607ce8ae2e53.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d20a5c9d208621f10e0ab6976e4b4c6d.jpg", + "title": "Wolf Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8121bf80c8685f0f4a8a92f332047a78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0dc535ac4b52d4723cf5d28ef142f95f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b723751a7c05bc7cf24b3eae50cf0b54.jpg", + "title": "Crystal Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d1d6f79df377c9b55de74b9823987f21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/da33353a717bdc05bb85088cace65605.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a57a1a4100f5342e6f722eb0ccb3d25f.jpg", + "title": "Praise Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/079b5826666e68a0bf54f1ebb7c35232.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/551be5d92e87eedf52598d0a22dfeda4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6df14f8b0f43585e8a2a1cff8ff3130b.jpg", + "title": "Dark Rose 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/204fba0b4a43822e7531baf39f43dd30.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9cb1b4e7bfb896184655a64523c2029b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d3259e47d9ee402d09d20a5f30deda2.jpg", + "title": "Allah Ramadan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a1806530138b4ae3c51ce57246bab19f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c3dff7a82482ad340b52611c091f89a1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/988f8a20efc33c8d5a39e1407140474b.jpg", + "title": "Flaming Horse", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3335ead0bf98298d61cdb16c59bef588.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f6340d722496ef89b25636fe4f8e7a14.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e3c84ac1bf4b65bc361b87eac8d39bee.jpg", + "title": "Glow Dreamcatcher", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8e213591dc9ad001af977eb7b5c47beb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99e5905c033b1a8190ce3899303d3685.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a79200422839f4e35c34c1285b836ce6.jpg", + "title": "Creepy Demon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b237879e3199ceca9cef44aa878a17cc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8af676d76c4849f56d96c8b9f32d2adf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/291928e9de08856260e4e4408a868eca.jpg", + "title": "Dreamy Purple Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c9f85619cbbd88106d430d3068da530.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/156124299a8d398354559271847d1287.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7c04630e14bbf2b4cebcaa0a51146bf1.jpg", + "title": "Gold Kaligrafi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f0befe0a8b1e493fb6bdb94c4ef0b21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7d550de0e0a5a89ee1edbd3b2ccf3b79.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b0571e339a6263a11e438e6d03d99487.jpg", + "title": "Rainbow Neon Stones", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/572c8d42638f125bc9d8ca89f970ad3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a5dd9535edbfaa7c33d1ba5816f41d56.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/53ccaf913cdfbb10b741804ec6067a24.jpg", + "title": "Golden Eagle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ce6b15fd4d6c6ed11dde2311cd15b771.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/97791fe6d72194cf0c50d1e5429e6eae.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8ac86b8235ecfa2b28e4ebdcfb9ac34b.jpg", + "title": "Pink Shiny Foil", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/95c3ebf77a6f2b8802cda3b97d23355d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b97ca36400123b680ca48fae8ea2e585.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b3b4719d4a02c4947b160a759d622a2c.jpg", + "title": "Black Pink Diamonds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0c46b2e1150a93153e149993d5b0a024.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b1f1ee39dbfd446b3a53671efd0af5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a0c4c798e513d1d897290d42b31449cd.jpg", + "title": "Neon Blue Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f32526079893a191ea53ceec0f2b7806.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/915ed65f274ede4f7d61e80751838d59.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/395345cca59f2d4a73373a4fe93e6b38.jpg", + "title": "Stonehenge Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2c9ae5969b29e8992adaaad424002700.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80dae432335427803240048ee96f7453.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b5a11f52c33269cba0fa328214c18338.jpg", + "title": "Bright Neon Flash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ba327a22b874dcf1ae1d7d530ea4899e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3b840166fddf0c49ae2ea83ff57f2a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4570d7925b569b09606e21bc4e8e7912.jpg", + "title": "Red Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/21c2f402c398453959aa717c3ad774c6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/26eec06f177547b571a305b2e105a905.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e51438bb52cfad7e0adef9d1e4613c0d.jpg", + "title": "Rainbow Color Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c9597a431b46fd21af6e81d94fb9b15f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a7dcf435e7044940e48e080543ab7c9e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af08b8fd873e0f1cc78d1ffa59352344.jpg", + "title": "Bitcoin Dollar", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/74c0769ac297d24c93e0034d67032fa6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/03fcf4459503010badcab966c2bac474.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0ebb8a152de114e7aab243ccb21b7aa.jpg", + "title": "Cool Neon Blue Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dadf0750e963b158cb1beaa73b07a40a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/854bfedeaf1b6ea986eeb33571022106.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3272114671129ebba7b90028eca35084.jpg", + "title": "Lonely Man Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c9b5e131845cf907114ff7ef29e3cf44.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a0b17dd8462625cf30d84e3f115bd01c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/28e4410bf8eef424713e08f72317cf61.jpg", + "title": "Happy Face Melt", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77cf58a4d7c06232ee94ba37132aa861.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/87a38d464b1f6da2e47c0cd91b04d77e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3cf9237b75502cd9e57399fbbcb72e42.jpg", + "title": "Scary Zombie Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9dda3ee26eedd3ace3ef4ab637c6986.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e19a672fc6d01717c703666e9cdf5a55.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0c8290111bff66fc4652f4428a1d87ac.jpg", + "title": "Fire Blue Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c9f31dac88569a6086f949657b5639f1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d89f4e28d17951d6f37994b56193e2eb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d23fb0d22e6378828e4e9197a8606737.jpg", + "title": "Diamond Laser", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3783abb3a92271b8c2493246d61063eb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dec042ba81c145c6a6ebe8e420335365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6097ac5fcc1d0e426dc784e19f6f4e6b.webp", + "title": "Cracked Kitty Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b84519c9438570a58a345e76c4b5ad9f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c184ca602aacaa41bdf7ce526921741.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/388070873d3c188fbe92b5e4a915378c.jpg", + "title": "Fiery Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/64ddc76672645a7bca64201775da6e14.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/202fd9ce689facaff01bd7644c610b7d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/747db4efbc82d20e8b5400226a9f0fb6.jpg", + "title": "Glitter Star Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c06fae5abab3bee5609a117cd8819522.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/61b17ed32c27b3d88d15a1de6a9f5db7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb0fca57b0855c5d07b43210144f9952.jpg", + "title": "Glitter Rainbow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7dc4bcd773b6fc767ecc130cf780237c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fcc31a906c3686a6a752da9e3cfeef3e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37ccdcd546c99fadd65755d1a230d208.jpg", + "title": "Graffiti Skull Paint", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f5542126aa03c9022a7d0bf19bd6443.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5a0c3489d4f4507550e5e185ce3b3def.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e44740dee7877e32eba14319ab659b6.jpg", + "title": "Neon Glow Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/17437bdf6da76535d74794d610b6a599.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/288db496a0e2d5b8be45c829726dca94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/80088a6e4efadfbaa097e5acb3fa5a4e.jpg", + "title": "Neon Broken Glass", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b50be1257359a83d3fe41a3360d390ca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b86b1ea41b81369d74798d1c2cd49e2c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d99f25aeaa5a4b9437e1a7ab3fce4bb5.jpg", + "title": "Roses Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/22b356c08bf11e1f15e59410ff94eff4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b116af76b10202ada0e757ec6a495d64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f600ef1e2dce255959feb81870731aa.jpg", + "title": "Angel Devil Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3cc668e4ac2f24b6a84b17073e45ab6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/febff19a100613b59a935782d24d61c0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c656a8c6c4f51c3cdbcbd049f00b264c.jpg", + "title": "Fierce Tiger Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/92fb4cba62bcc037393ae12a8717e9a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e11814bf8d342a39145e2a16065df05e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bc55c1e378bad6a2a593353ebf3525dc.jpg", + "title": "Pineapple Teen Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/42668c9f45ad320c9af61bd5e60bcf35.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4fccdc6b62a42a7412f633b5cb109c02.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ecfc9589fad5736db521a49db26f898.jpg", + "title": "Golden Spider", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6fda625fb1e327be4728db3152029740.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6a3896f2f0fce5b3ae97d28f2643aa52.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/23ed7aaefb5cb96adb0a3871d88d5b69.jpg", + "title": "Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ce1502902b0634b7b70280f95b17c83f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/972148a1fc04bc6b2b28d2a9cb164514.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f1931fc13e60a1329a199405c40f42fd.jpg", + "title": "Galaxy Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc888cadbd874c6258e6360c1c2146c7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/edceaf6c6a46c75360f667a34bff7296.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3589e6e778bfa143acfa4bb014d47822.jpg", + "title": "Shattered Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6fda3699ca297a1e57e7f5e47c5b30f1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/350bcd61eb74ad3b56d34f37a1191458.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ff3689dcdedffbb2b8d8a8739fc9590.jpg", + "title": "Sparkle Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/043e51135b9105eda2ff2fecb112e90e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/143eaad35d9dd1ebc19ed659bf57ac65.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2b81206c158970c5b7d544611c3a05fc.jpg", + "title": "Broken Heart Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4c85a102798b2ffa6bf76aa7017aef25.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a830014891452c6b06dc5fe3f5e8b439.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5547e6f9bb0153cb9215ebc68d2f296c.jpg", + "title": "Galaxy Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/512392566d4ac7173c6be2e5652e63f5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05cf15822d11f314ed99962b5b1b5de1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/822b9de2c26fb21683a428fd0fca4337.jpg", + "title": "Dreamcatcher Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/425134be463ddad37f5289fc329cb572.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/182ae1927d490ea1e40feb775d062744.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/229f0a8ac3b9ac0572f010d6b129c237.jpg", + "title": "Colorful Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/517a96f0b8b1018dbc45d64e4782e939.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/342bb9714e21e1484cbf7c1e21b9e429.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1d846b20508ffca4ea1bb89137152869.jpg", + "title": "Glowing Money", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1161e18995703fe889888cfe2a0deb42.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b1a2697af0ec7869e2623f3e87d16554.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c01bd559ea7aba0c7f4bdcabe9df5e40.jpg", + "title": "Neon Smile Sun", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1f476bb0cdd0fc65f639e3aad3e11cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42f097a61e4aaee26c2b856417a2f697.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7da8d2ce889ae0d3adecb46c42643e98.jpg", + "title": "Melting Galaxy Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f2cc295a8f03b5ec60bfc4f7c8f632.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/21b814373b688464ff3d6d1c183e1c4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/815e25e881252138c70f9d2c2d05a48a.jpg", + "title": "Jesus Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ee395919d8dc56e7362431f27a16159e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/439f7cb43564aa43ec2198f12345edfe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/933407a8b63439531c7c6be8db1f74e5.jpg", + "title": "Golden Money", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f17b2302257214c21466929e7b97f02f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3589f8ad6c27961b588b2e3cbd0c00a9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce253563206cade3223d16f00cd748cf.jpg", + "title": "Neon Pink Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48571d44f1075922ffd5d73260455417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a73d2aeca99c2bd725dc9351d08addd2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8743e39702e91ef72de07e89a6abf8c1.jpg", + "title": "Roaring Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/97e522978e8b831a843b9df64ece119a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3270a077340e5571bf874aada130b9fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/65bb624a95e4a3507c236360f358ad4d.jpg", + "title": "Cracked Tiger Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5c6e5b5d841a33c4b83cece19e0560a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/63011180e8fe09f32cd7889ce87df979.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9326415eb45948f270a0bed91b608a9a.jpg", + "title": "Tiger Flames", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cc48393100b1814e10a98dd8986baaf4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4a8a7b0243761d0bf5156512a91dfb9b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f1b36d7123a6e1bfbfc749c52550ccd.jpg", + "title": "Color Splash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/207106af281fd60323049945989a50da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d6b325e35e471ca976deb8278e6e6356.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c1bd826f6a875a34e4eabf4e6969e1e9.jpg", + "title": "Blue Cybertech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/72b34c1925d2e79b41f32fcf7974cf21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/389f2a895ae5381f80cfdf2af462f11c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d15fa9040cde83f1528a15ce529fe31a.jpg", + "title": "Neon Blue Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/38314d5a4c3591bf94d55443e52f907f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6f2ac1821ab819191cbe87876b0ce702.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1389697dee2a2e4b766236b8b6904ed1.jpg", + "title": "Sneaky Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5762b6214e99d62de3059abf5cfd9944.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a13ce8f2714f7732192558921195ee90.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb8711846d914ec79c1d5bb6c1805c87.jpg", + "title": "Scary Lightning Wolf 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb4a4299a235fe93d438c532ede5a2b5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7ce351111fc1eb6960db3dbcdea6f9ed.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/11ff8988f7a966fa8675e875427123ce.jpg", + "title": "Speed Racing Sports Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/741bc4f2d0c8bd1b290be8a0602dc523.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66169a5330657cda20ec5dd677149c62.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/50e0510ffaa2eb590123cd48163252eb.jpg", + "title": "Chess Queen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a506776fdeae8c8cbb1d704a44a7a35d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/77ef17047a0d72df9622e68c4b83d3e2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cfaa4f8d5c172d569775c5778a912778.jpg", + "title": "Doodle Heart Beat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24a04c8952456e97404da109087ae6ba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/83b678b4bec9823b1b0db07c6dce7ec2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0ddfa727a93f9fee99c915a21e59d2b8.jpg", + "title": "Trippy Cash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dfd4c1593c3479a942a0fb08f27ce2ba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ed0b23a287f894b6778224c712e3c8a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4458c62590501afdb8f62affcbbb5df1.jpg", + "title": "Flying Dollars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8254e18fd4cee6240cabbd0f773b51fa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fe5a1e27f0e7b6a7ad01e4ccbfe735ee.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/648705bd23c3dafc56d98bac61d95253.jpg", + "title": "Lightning Neon Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/03f000474660e0b9aafcd2fa0a26670e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00148091c74d5f0b635b88796359e2d2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d1bbeb422d5a92617d86535f38e5ac5.jpg", + "title": "Black Sports Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9db18c75c0b0c035f183f24023dffee.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e60f152a31c7a6febd9f8dc563e07d0e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/876251a04ad8b1a99ef0651f1e169898.jpg", + "title": "Glitter Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5986738bd8149caf013e4a14b308b5c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/82486e5f2169e844c81bbb2104ac090a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7560b40822a0954783289c83cd3f62bd.jpg", + "title": "Evil Skull Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/96df9afcb0461a01047ffc2f2812e38c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/32e731ec6d4a3501f9a17fae5197cb63.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5dcefaa9d880cc781e835119194ed9d3.jpg", + "title": "Magic Neon Symbols", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/69f4fdcc36ea861e07729dbad7cc50fc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f45c1ddbf33052edfd30429bb818ac0a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/74ad7923f719d63a6e8bd5669452d34a.jpg", + "title": "Evil Owl Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/174073110c4b78e370030f0ab00b12d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e6bd7fc38c5841a243f1bd1552890e09.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4d77f3a5f4fde9c6624c31f03f4d183c.jpg", + "title": "Cracked 3D Glass", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d217d1c367683a54fc72e2c831fe6765.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e888083c04108ec2e61ba638844c5f5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9bfcf139a9e4cc6d0a2e6b93972853dd.jpg", + "title": "Neon Wolf Blue", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3a6b404bf4e287710211c1084f1e72a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1e01a1250b5556ce63ed3396803421ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5e101f4ce9078432b138856babf743a2.jpg", + "title": "Wild Tiger Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/913df83cdf3494608c04c0a0988dc032.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fd17ec9790ee711cd2346bfbf012d6f8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c1603a3d1178cfe2846fa887b3b08de.jpg", + "title": "Black Business SMS", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6625501bbd3ee3f31a2b02baf487ee8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8297aa2ccf3c721d6e1959ffbc1f34c5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc529f66c11c1121df354d1c54b4efbd.jpg", + "title": "Rich Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e75e68f97d7c3f02cc1aa096bc132e8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/146e9aa948af7e9cf95ba5c05ee9d6be.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3b77b0eb358cd5713d77a00ed706e556.jpg", + "title": "Street Art Graffiti", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/888eb786f6e01b9ec555b0ddc7e1e060.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8fae8c41931be7a7cec52090724df6e4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2971bf1e31fbc78c44f70f1560eecefc.jpg", + "title": "Neon Gamer", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a13865d3e1b61b990dcf105b28b4df2e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/448588f178547b801387fc8d61e7b068.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2f87c8a306fc52daf14cd88f0c617d78.jpg", + "title": "Angry Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8711ff791fdbcdb734e39786c3f11665.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/64d84860f2472714b5003d7a9d4745ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af56c91462fdf1a0008da551a4d42911.jpg", + "title": "Neon Cool Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24e1db3bd670218af54e14b088ee2aeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/23776e23a391ab11ac9dbab798b0c5c5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c884355ac190127e294579483e13fe0.jpg", + "title": "Neon Owl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c118dfb357980334725f719c27a266d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5c8af8963ad360c9fada2798cc65f142.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c5daf6890ca14611be3144a86a0a75d.jpg", + "title": "Burning Dollars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4b8d884c9ed71d593e01172928b40cec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/16feaae54216cb6f810a52e5f6cbfef7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a2b0896b53b208c51db2a6f885ca8654.jpg", + "title": "Fire Skull DJ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3fe64a58533e49add4bd118d0ae13a3d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bf75dfa955385946b4619952fd470d03.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/95af0eba2a2b70d02455bfd786fb08c2.jpg", + "title": "Cool Dark Vampire", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8a673887629c6e9d1917949432bdce86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc5c9a434b45dc3f844efc523359b787.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bfd95b92163a26910ea15fcfed9e7370.jpg", + "title": "Cool Broken Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/200a62a1341813f2fda33394d10a9814.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/790c2b9b40cceade8c000360883107d8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c8f8237116502d836e4bd6d8410f636f.jpg", + "title": "Cool Fire Phoenix", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45fc9a51c94ef2fb0a9c9309e35e6311.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1f84b11d26f7c8429faca40b8c316969.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5f1556b98a73c77f3cdfc47a96c9ca31.jpg", + "title": "NYC Landscape", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/108c4b919002cd5126266f86283de330.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/48c7500d35d431f26f278cf03449d4ab.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/98e72c2d325ad995a6ab7bc62f19a6f9.jpg", + "title": "Savior Jesus Christ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/72a0db75dafde6ac7cdf0ac1f75d2979.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b8ae69d91517610f3646bc2cd21305a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a788e1430b5323be0a19ef716f45b4c.jpg", + "title": "Neon Night Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d07b386353b51f03fb414207dcccc9d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b2839a00ecbe120b48fba736c52de5ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/817258f27395ca31b0b94fd3578e88de.jpg", + "title": "Fire Hell Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06cef663736ae025400cfd1d403eb2ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66963cd89d5426bcd008815b3ba295a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86aa770567464af5f2e598474a9c05ad.jpg", + "title": "Neon Skull Life", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f9b2cfbb0dafc33498584c59f8bc0f2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/319230c437ed9e591a0ce54b374adb78.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/11de193e7dec4aaa786b16802de7ba9b.jpg", + "title": "Crown Skull King", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fb638c6bc1fc3e34d59514e02d48a2e2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/155be45ce01c1046e01011cd69ee7fe6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c64cd156d1786d6a870a338c24095213.jpg", + "title": "Silky Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da017ac1ca66b45c3914f9ef55ebb372.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e6020ea727903fb6c9790cde5c76cbd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7e44b762f09dc55598d0c91b60f7784d.jpg", + "title": "Neon CyberPunk Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa8b37cf6369b33f7bee25e11b4e15a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b3dc15fdcc6b00685bc2c12f8dc64f87.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/99ad8d1943749c2cfdcf594747a06e01.jpg", + "title": "Blue Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77c348d7ce1edc54f239f1ac6971204a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb103c3c8545bea6db6f40c1c34283cf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9a1f1633dce457889e0e4434529d0ce4.jpg", + "title": "Skull Rose Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/72854f4c931c02d57b7661c5d88cb3cd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d85142bc1b8e3c3e0819caa4e346ef9e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5eb79ad4e8bd0f2cea06d0c359520b7.jpg", + "title": "Golden Dollar Sign", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a917e87d9c29bdf8ce00a4720401a7fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cd0cbb1278f7b4d6e358ab406888ceb0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/735d08998bba839217d4caf0c8a14bc7.jpg", + "title": "Green Neon Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/845f6fc1f8beb21228a2d0a957ed9437.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/497283963645fdbad89228d8c66bc842.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2d7d3035e887d86f804682e22de29bce.jpg", + "title": "Rose Gold Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40e24a5d7d60536581f435db6b124800.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2fa12a82185e296236f090b7121fe9c1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f66192213d82dacf605b6c19416c7dbc.jpg", + "title": "Neon Wolf 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3096b39975b3296d8c14d76c31673b43.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b6ced4a2fe2f38d14fcd73d7f2ead6b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86326f899313428a80e1f48760eeda47.jpg", + "title": "Neon Devil Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45a3637ba460b71b2ce36edb07c8c4dc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f7d324947a4545ae1bf37e72359e5efe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/95d5cacd730e3a0e539786d615e8c254.jpg", + "title": "Angry Face 3D Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a59b2e87eec1803cc75d2a32b05c4149.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2d98a2e561fcd93f02da290862cf3fe9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e9191c341d43072ed3866ca8d2509aa5.jpg", + "title": "Sparkle Flash Chat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/326f356d357ebdb430ecccf861a1ff5b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b31c90d2050f62166a51980252b7b43f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/889b4f435a117066a87ac99a84a78c63.jpg", + "title": "Fiery Ghost Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f4cb01f32898f08a85151dfafc56293.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f19a6154041a137614e2cf4d16bd5859.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afc64eaf173efb47849bf676bc5bdd47.jpg", + "title": "Blue Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40cc4728bc050fd0873320845802e94e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c83269c1a72dedd5e97d1b3d04fd8a97.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5da70574dd527d76a8315a7d0abf6bc6.jpg", + "title": "Neon Tech 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4b2696a94bbd9445a48a9f86544a84a9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8584591c0c58feaa35da287f19492d16.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5d6c6d13dbe7d5d5545adcd4d9e0de58.jpg", + "title": "Evil Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3832fdc4f52dcfcddf3845911b11c62c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eafb41a4c5e51765fb9c6504e47101bb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c2c478cb809bd64af3d794fae0cee515.jpg", + "title": "Angry Owl Art", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e98c5bb9ebe82e8546de70a0835c1ced.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba004cb3d80a65fed4a8220cd37be833.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f0924a165d5dce38c7747c7f59f1f851.jpg", + "title": "Neon Wolf New", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cf515a6bc962a9bf0971f7e04c99aa4b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e9ae6d6daeda0ee9f077f04364e1070a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a63c8a45966b816d0baf086c7519c5a6.jpg", + "title": "Devil Owl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c90b0fed7d5044da811c4669700c886a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cf300e66d566036bd399f7e9465e9894.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b73a2b091bed3174ad62f69d96ee4689.jpg", + "title": "Red Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/597d649628a5d4c24562cc21d1d9da81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3107427c8edfe7c5d79468dae8b006bf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1623a0ede4dc54c2eddb2bd6d3368789.jpg", + "title": "Black White Business", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/946c870a8ce3eb31619d9f40f1254d32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2cbfd957cd9d6c9f3d6f4a7e41f31b40.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a8fae213dca3406b8a9d5d4f2527e78e.jpg", + "title": "Flaming Ice Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/164a8d1c0ec18c6dd1bce5c03620be05.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0249ec0370bb5da3cbe8536e877a26ca.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e3d963be86957e7b13ffd13cfe1459b.jpg", + "title": "Galaxy Wild Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9b21164bf134840f95b5091223c75ded.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d249d3beddc844e1ae842983de1e515.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb8a01fdb5274fbd56802c79976b4fa7.jpg", + "title": "Blue Flame Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3ec96e847d647255508058c265c0905.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b7b530ba73626f6702f2fbebb655fc2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9393c92305e8b04b670ab9e3130a8b3.jpg", + "title": "Colorful Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/036552d2c4752d30104cd06df1ebb43d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cb89f8513f923a8219b201169a62af11.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb2ede30008a2bfb73bfca43da7aca76.jpg", + "title": "Holy Jesus", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a32e19a78ef22ea4eb5b99e99542e54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f8e4f9bfb79b3e8ff934c7629751ce92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/830856e28e91d9c3002026d275aab0bb.jpg", + "title": "Fire Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dd145aaaa3e0b69566ea8c9b922352dd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/df9b5c458ba1d961bd679e30717d45a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a93e9f47517baa0993573afcec4c648.jpg", + "title": "Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f5ba85b65236bbc8b90a309a4d670e54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2f118176376d3f6520b1d4ca19ed6c95.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fca05bdb436222d656edfe3ac779f2cc.jpg", + "title": "Fire Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1aef032533a13b19c5c389199a8efecb.7z" + } + ] + }, + { + "className": "aesthetic", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5a1e32722734f96dac3af1c1787ea82d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4be60a99fff098ccb0227fdb8d8710fc.jpg", + "title": "Neon Aesthetic Leaf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/090b80c4b18461a533c64374f79e49ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4c137123d8954b9f0c42370a47cdf19b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5032efebb5b43b9e08ef748b520ba2e6.jpg", + "title": "Aesthetic Anime Boy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45c5cd1cfa15a6992c7618f7ed6d306e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9cb82c077c9407c0cceb60f84e88b5db.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0dd052a1289b0923c41adfaf4058a3f8.jpg", + "title": "Sunflowers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d6f8dc13755fba3a1e8f17e113775f58.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/38d502ef45d00188f9e1f81f51ff33f9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c67aa3b644cf60ec98926205c91e92a.jpg", + "title": "Beach Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c07610fa2045f81a886625c82d83c391.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a9364cb0f146cff1b07261a5e937ac13.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/39a66782bc0cf969771963b0e7d07e5d.jpg", + "title": "Aesthetic Kpop Crew", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9c4622f05f74bcbde96ec9b1c20e71d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/61aa7fdf6fed85359584f85128bf783b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67e7c741acff6cc95d0b7162ad8c69e6.webp", + "title": "Aesthetic Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c5130053a04005adddf931cbc942f0d8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d3422ba176b011da4d777814a2dbe92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ea4e70e3a3a8a1846628dc93c44479f.jpg", + "title": "Tropical Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/28a3631a4c1a36bca55e60304eb3a518.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e40391a20f033b072cb093ecfef2435.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d6d9782318aec5185c3aa20fe587e664.jpg", + "title": "Aesthetic Light Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/89e567f85c9bba26f92fff156f0aff48.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d36066d7b9f088685a57034809e476b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03c474bbbde469e391b1728ef12ca4a1.jpg", + "title": "Pink Aesthetic David", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/642749095fff3b297d95f854e00f27ec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/61013a3c1a7d01f1786a175e02ccdb90.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2d08db82229391d6e6eddcf1966d314b.jpg", + "title": "Dreamy Light Jar", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8280ea0cd77f22f20166597c211ba30f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c50627dc1ab995d94982df4d9976ed8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/faf7abc48ac971ca89998b38a52242a4.webp", + "title": "Pink Strawberry", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45727d54cf59bb7e0be26268cf57cbca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84c36c28ba4769cb9551bb35c17a6ec4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7087d0a8fdb7011305f4cc2d50821068.jpg", + "title": "Aesthetic Whale", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b32a62b14269b0cda288edfc861965d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5411111c88d2bf9c4d96858633f7e2c0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/20ca287189ab12beadbb053a10687e0a.jpg", + "title": "Aesthetic Night Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c2c04415b22498aed22ad892bf949ca3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a4317fe1c99daa1695fbc28dffcd81a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/13eb5b924ae354cb8c63c4bf3b2fae4d.jpg", + "title": "Starry Moon Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/17b93efcb07574de5c5bba548cfa58af.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c1f064f743a43a2bcd6531c3e289664.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b509c884a059915bf9ce0b1cda9733a6.jpg", + "title": "Aesthetic Wheel", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/606f657b0f9e62821935ba8216626978.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1db4929cb3c4e33ef140605a1721aa3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e1d6d17e887cb181a4327cf3aeddf6fe.jpg", + "title": "Glitter Rainbow Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9ce06da3215efde3717819a5af2bebb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bd19714ce39b1ed851fa592404ea0a17.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2e1d0b435f8fd02a5c68220977bf5706.jpg", + "title": "Sky Star", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/015ae930cc9879c698139bd8d0ff12ad.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d305a2d7e9e1ed897c52d0dc1a202b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/704de58e94e6eaaf9286be2a322bf217.jpg", + "title": "Aesthetic Sketch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/103c5971b1a807f8b895940b9d5984d8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8f19bff38ee204dcb417215da354790.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/56dee29372cf14586b7325e188decbc3.jpg", + "title": "Butterfly Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dcae551f0a2a9a8b7844f6fcf2a3391a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/738acde59113ecefea20f8a565d89cf1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bb945e174a7143e0957e1bd41471f7b8.jpg", + "title": "Doodle Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bbb9d553da0e461cc00afcecc4890d82.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a65f1dac6fe9b78c9635dcd2d6508166.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1114cde9a0e12c68ae93819d5211f2ae.jpg", + "title": "Aesthetic Cloud Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8f244be6cbcfcf0db2806491d99cce20.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f6926619c5679d1934142462212a644.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c569e2f0df48ba3c5d40e751084075b6.jpg", + "title": "Aesthetic Glitter Sea", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/704631c10d3c739f3f2aa0a413b34f41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/28ee37a65fb9714fdcfd9096685718bc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d39f2a81c7f1801da12b46c4e23e6149.jpg", + "title": "Sakura Floral", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8372a8cc84ab71fb251c6de089ecfaa2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b5b28bed773bcefef5a740d20d7613d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a3d5f394024cfb9c6a3c1d176f061a54.jpg", + "title": "Aesthetic Moon Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d2519b27585f6234dde620b9608ae1b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4472a9eed40ec0636e8ed9aa837ddf52.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/da4eda4d697f31be89ae29ea79c8b46a.jpg", + "title": "Aesthetic Sun Rise", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0b864b37acb698c661a7c72a53608c71.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05c58eda91d700fa20220e9b8a21f4b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/362f20ab3dd301fe4e1c1215105d16ae.jpg", + "title": "Water Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b0edb6615c3ddf835a64a9230555b26f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6bf8fbb341b1289477bcf5e7eb926f13.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/88eb7dceb5b62fa7a4144d9765ab0038.jpg", + "title": "Dew Aesthetic Leaf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/95b747fc5be7bec83aaa414854ccf7f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a8f1a8f3c74f38cb0661fc4428e8d70d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/563268aeecde871deeb947ca27beb984.jpg", + "title": "Aesthetic Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b428ba347504294c30e7179755b381da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad05c074a5a66912248a379ce2367f5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c3ed38fecae89fd122b797c8b2c67b9.jpg", + "title": "Splash Red Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fca114e46fb200ca26661b6ec6f123ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/abc2ac65ff08cde24a5b58ae362bc0d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/383e50803095fc6405112f3bea6b7734.jpg", + "title": "Paradise Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/998e36eb6c76de8bbd7c4af3ca549db5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fc92393e24d15fc52f6235feb7d730a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/615f96f6cc928883acffa22cb61b154b.jpg", + "title": "Aesthetic Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c30556b0d9636b247bb8c505de1e4748.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4fd977ee1904707dede3f8742a66e74b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6bf01675a51213d0e4b2ca167cde4cf0.jpg", + "title": "Aesthetic Pink Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bba6882521c03d7de7e059e68f3bde8d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8f1353c226c502ce1cef770103cbc1c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69c5c402b5568e47d9ac36e174c26b77.jpg", + "title": "Aesthetic Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33877b62fc70196ebcbf14a734fc995a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a9938bda6d1d64693a6ec8bdf2f561fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/52897e142722432e4cc58a4f90c36b77.jpg", + "title": "Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3bc85be0efa083d090d3db17e1b86c9e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa7dbe8b73054893999be9856e94b8c9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67df1cf41e84804a37ec055ee418c5d0.jpg", + "title": "Aesthetic Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1d9eed2445cf50e56ae5b781b039d4a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aac3611337d42620bde1e24ee6f773f8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7193a8943af46f12d0ab2424e4804afb.jpg", + "title": "Night Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7ba858338cbc32f923ec93e7a00e38d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c3bac7bcdc9ddc46b3875d15c59f1c10.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/98bb92fc5243bedee7a206a2d02383a5.jpg", + "title": "Aesthetic Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c17edbe606e1c67c0a5d2ce7f8398645.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/89dfb945f65fafc0c5d07659b7ea57a4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b4f6d7f4d0f6a50899e3f96afe1f2c38.jpg", + "title": "Purple Sky Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37ed4c67acaaeb842898d07b958d71b1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eeabdf7767a949488a199ef7df7a26b0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67df3bcf2b2ce256858a8f117d667f72.jpg", + "title": "Nature Starry Camp", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5126b4a73f12bca1d7d90772e0e38d95.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2a2e37016000246ccec9aeae9192ed2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5b2a2c33d152c5138c2109198ec5eaec.jpg", + "title": "Photo Feathers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4e788c2de0a080cab3bac8bd8553ed87.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6231808161096c3a3d72fee968eff52e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a29041c9cb543056c92044bd71e70490.jpg", + "title": "Pink Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9feb2494597135b65eef37ae0f2174a9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0cd9dda2c45af8071a9dea3c946d49b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d0e4da7178c0a97c83578e509bba97a.jpg", + "title": "Purple Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0840c227cc397ae6686c3069562b8ff7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d82831eb92bd5ea7bcb807d5bc9dd38b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/987dc9dd0c5686238b46a13361ded3fe.jpg", + "title": "Snowy Winter Walk", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ceccced0912e7b9c62cf930600bb32c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ca4a87a5250f2c912f049993f8c1525a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d73d24d854a3fbc028ebe89f4f08f0c2.jpg", + "title": "Heavenly Doves", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/03482171f11021a91fae94f2b7470918.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/34a0ae7e807ed88aca0d882f95f77b21.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/45280bd8bf9bbff747f60075b58b6c91.jpg", + "title": "Sunset Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/18b5a21710bee3ef5341072fc3803b7d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e4716b5ddc7938c363e086062c0f5ee.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/144837afd536e176cfb013a225051124.jpg", + "title": "Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/878dcb244b714c1abc16e00697385025.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/86ac761ff9ee169ec08e88bfedb76375.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f8ef55124b349214276712aab479162c.jpg", + "title": "Bright Sunflower Fields", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dfb752d12747ac2d0257bd26f573b8d6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1bd79fcf3411598f3498668a23edc481.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e5415fa0cfb48cacd15de66688d0a716.jpg", + "title": "Purple Rose Bouquet", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e02a69857c5d08df6f454c71c503c1a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c6199f97259e4aad14fea4ea9684026b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/55bafd147a491451f0ff19feac264eb1.jpg", + "title": "World Travel", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c2bb1fdf3de4d64512ed8a818bc91644.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c1fa63c6efd757e520cdea15007d595.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb8e23054a8e3c7ac6265aa1fed0a1d9.jpg", + "title": "Kiwi Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8183ef1b6527da0459ab99afdb253a77.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1a71dbbc7b1a2c2986955155fb2498f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f6e063ee631956bc61794cf76d07b59c.jpg", + "title": "Beach Skyline", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b99cf039ed231f88dbb5cf9d66f38bea.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/df84654025b95805a65a8ca5c1f5eb63.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/459f9eedc884df5980116ef538a0e2fc.jpg", + "title": "Blue Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/250502c4df9c753858b2944762b1162c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8af676d76c4849f56d96c8b9f32d2adf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/291928e9de08856260e4e4408a868eca.jpg", + "title": "Dreamy Purple Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c9f85619cbbd88106d430d3068da530.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d30faf7b2b8c60f8ab1d559541671bcb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/140cf1227124a053db8aad3ea735bb4e.jpg", + "title": "Blue Sky Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b9b3898a0a42f3beef9142639fd42b18.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e1efd5518e1b1f666c6a3f1da581c9b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1d896c43104eb86aa3aa51ba40bcb5d6.jpg", + "title": "Sunny Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f085c78a4a47ccd6ce8d7f497f3039ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f27495ac5d26af6293c245decfe02aaa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/10f59084e3a7483703f641e7d7719003.jpg", + "title": "Pink Orchids", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/221b883b657b6dded6dd527450024f65.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f9d696389c084814efbbdc126fc59030.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66b158d4c2f61d318b406e053f31124a.jpg", + "title": "Pink Tulips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c8afb241ab07c2cfd74bbf012b37f396.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b2771cd586003c36f43ab1a7dfbf0b48.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c81873dfeeb88dd7b761a1ed52692e2f.jpg", + "title": "Sunshine Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2f550b4ac80ffcca077f7895e2c49b99.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8785939e5edbb08287734a94911a8985.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/24fccc853bf63161b0be8cdf0ae94a12.jpg", + "title": "Sunset Ocean", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6c5f01619fb115aa3c73457c54c82c97.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ab46e8105f48e41be221d88c4b4ea439.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b679118950beeff1108185acb1ab5dff.jpg", + "title": "Rainbow Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1b0bf474bf0a0eabe40517a4afe0e9f5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fce2d0f2e8ac8748825193d16ff12691.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0c295f9a0bd481ae67bf0866442a71fb.jpg", + "title": "Avocado Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ac21bb692b86c5e57963df4e4e08bd4a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b65c82cd27b10160440b84a100176c92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1e6b407e1ddc2e718642bd6eb4a15c0b.jpg", + "title": "Palm Tree Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f774153ed16e9c670047c895e6114b7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f8d68dfa780161da140e67a243afe68.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3fe6e9b2ff0888efc534cb6496e05921.jpg", + "title": "God Bless You", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/720fc5e929749e50d0c2f416340efafc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f682a73784968b80ccab63a4444b0713.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/45a97cc940148994015bd996e31f44e8.jpg", + "title": "Pink Clouds Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/69d7e363c073319d7907d1f7856df8ac.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0ef0063194e44ed69a81168bffe502ef.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/992443f6cda7103800f21e7800f7c55e.jpg", + "title": "Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c4c87e82bbe03560d30980c5be6b7ebb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4c81e476ad6ae631e64ee244187cd18c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe41cdfbb3cb1e1773e87bb91efeb5d9.jpg", + "title": "Sunset Holiday2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c3ee8b92c47aa1d6eacbd3ce6abe816d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3cead83fa388d89dbac0eb19b2e25eea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ba1b8e3684fca37c4cf24a2d76fdd309.jpg", + "title": "Soft Pink Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bbfd9b77ec269a272427f1f62c64318b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e2ffc9fb2f3724c9534bdddd0524bd6d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc710c897eabf90c86d0013ebb161bac.jpg", + "title": "Summer Fruit Drinks", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c373737f0c13dde9fa9d74bce228486a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e773bf9b71252d67c858ac6d92412ab.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86486f2e85832e296c56fd3159e5798e.jpg", + "title": "Flower Wallpaper", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fce3ee4851f9d533c416414be4ad23ef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b3db1bf3577e09b96ef902cc53fa15e0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/90db80de3ce5ad651a0bb344086927d7.jpg", + "title": "Zen Mood", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/38e252608699d2ddcd5f4cc3d538f65c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e4fbf3b984826df769a88bdd92aea5c6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/381c6913b1dd524cac0e3e0d9a44a246.jpg", + "title": "Summer Lemon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0bfa371f2bee59ee5bb8017e92cbc6f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fdee42b90157a5c3c7a63a931903dcc8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/479181ec7aa8549e74fab1f0fec80884.jpg", + "title": "Glowing Pearl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/caffe8eb905a2ca4b7dcc189b085c00d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d77dd0c0d829bb7c5beb5b86977696d6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d872cfb1d9654ad815067cd4336fbc8.jpg", + "title": "Autumn Lake", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93a7704251e1269020b6f19b15c7642c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6bd10b36d2dd706354322e3e18de470.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d6ad8e4995733cb227e9adc92aeae727.jpg", + "title": "Colorful Pebbles", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d651a539ce8f5f602bf26eebaad32a46.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/58f1cce28cb955210522dedec159ab2f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8339e990415b60dc4e74a5ca9e05cb5f.jpg", + "title": "North Winter Light", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/01f808d8e58127fd00d3e9bf12056052.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e61419fbc88e5a89041d3273d75dfc08.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cead175666a76b22d186201e1146dce.jpg", + "title": "Dandelion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a8e525fb173d4a4c34d0e01b2ca530f8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb927555302b4ac1ad54ec1ec6dd6e2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69e581447fad074b9e22d75ca14613c2.jpg", + "title": "Bright Pink Floral", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6c5b14af61db890ee5ed9196c4b415e9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8ad3c4eaae181bac7a1426aa4b3dc83a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/188452581ee33d1e9deed446b3540582.jpg", + "title": "Vintage Holiday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2dc1fbd0e0559146a1a5484e8628d66b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4ba860cc1a5b9e0dd178e92764654bb5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb466808aab5ca62bcb2c32778aa9a81.jpg", + "title": "Beach Vacation", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/eed5423de36b6d02c1215d38bf76783e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/575ecc3dc36918cd6ba29dc07711fb93.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/21ed394030dd26e630585a94b7d27be2.jpg", + "title": "Sakura Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/217b65ae4bfe4940740a1ccba82204e3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bf8b68d26dca5b245d9ff3a450bc1b92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e11dece672a40c8084ce5054db8d35d.jpg", + "title": "Morning Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4e61fd12e3e0d2de383f24a996f3d9d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/304bd79e6058e0640cc4f31eadc4f6af.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05113ea6f92bac6c741397dd9ff005cd.jpg", + "title": "Glamour Pink Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f499b124ae94e4e53d469a0e33f54f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ddef58557535a35ac0656d769a857688.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7e05a73f1b11afc1c18949761abb0715.jpg", + "title": "Ocean Love Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b486a7a6aa6a6b6882164e5e3fa6dba3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1cf74db507f6618315438027803f5e1e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c1d6f7a3bde3e927649c962c06a8784f.jpg", + "title": "Bright Flowers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7e6683a31f26efe5bcb87770ff96529.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/68013a4751d5ab8fa799952a4c38c871.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f082befb417770957e62417ea462332c.jpg", + "title": "True Love Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b38a26a89634807b4dfbbb06b8e1a61a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ffb31445ca13282212ba594ff38d872.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/efa769d211eb17961061fbb1cf6075a1.jpg", + "title": "Sunset Dolphins", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7464cf3b1171ae954d60ef1fac60d402.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/83807f64de72813d0fadee337cedcc22.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7ea17410d178556b0b6304534a0a5a40.jpg", + "title": "Wooden Flower Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/796f2d2d6191873195911a3ae8a01f5a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad4fbc9d106eabb4c46ad8c101b41f2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2bb328c679f768b83c41756a7bc28654.jpg", + "title": "Cute Mushrooms", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/454e754c41492134cbbebe35f7d9533d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ea2c502152c63c367732ce5022211681.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/13eef641ffff41591c1d536d333ae667.jpg", + "title": "Autumn Nature", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/265d8b320a7be56f848997001e84808f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c095a87a5f6a78908f67935a3173a33c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e026c18a6a071b3f95418c2da3cbe8a1.jpg", + "title": "Dainty Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/703e1aa2327e47eefb7091cc0a5dd3bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/31a05ecd7dd7cfb3e730c4e83d591619.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1e644294acff725c053c4a93be9d72f3.jpg", + "title": "Ocean Rocks", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1412e169a774cead32169682a495ef7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/deff95beb537e7b04fdc2e06f675bead.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd17116d85307cc89697c9610e090412.jpg", + "title": "Good Morning Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/caaaa8b114e33726ff4b7fc922ab7bb7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e0f6c1c409a421aaadab1789c7c91a5d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f7069e7dec869a1ce5f0832c2e714cf6.jpg", + "title": "Cactus Garden", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6a117e20480933758c597e3ba3d201d8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b81e9df6497c3b638cddd3505dc94199.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4eefa881f66a9dc128bcdea63e43b72f.jpg", + "title": "Sunset Beach Leisure", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4a26f61dfafe672676dce4ebe2aef2e3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa35717ce65dcedd69f4ea910a86b66d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/334f1d54c86cedfb696e77ec6406ff6e.jpg", + "title": "Purple Sunset Beach", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6d5ccc71296b38d615132e4600348e0d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6a6cdd9ac9d38b52393aaa1a67170b0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/07dad500890755f323f77124d86aa018.jpg", + "title": "Tropical Beach", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed22634fb6c9d97688ea7aa081371de6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a409e9c6a101e50284f14264f12242c5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ea7d12cd85d6a6235a3ebc55c177a246.jpg", + "title": "Happy Floral Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/42794f75a983cf97e5c76ddfc2e473d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4ea3ffdd90b4f892b0c0cbce1b27588a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1b50cd04d017b7f6d260a46f32229201.jpg", + "title": "Watercolor Strawberry", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0930879b663268137c13c1a310fc141a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ff87158d97fd75f4737d2fcbfbfd5c1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d04b3a4fe02f503f91170a2ee3383bb8.jpg", + "title": "Cute Fluffy Cloud", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/437eb8a0d24a294af97ca09d007437a4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8564ede5e6007f0bce058e07bcad5abd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/41e86a2cf0d6324cf9426450ee18868b.jpg", + "title": "Red Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58dc0023b52b3bac724e827838aaf2fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d30de76e4179c425a90235574bd8feec.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a91cd9bc9162d8c410a3c72606d490b6.jpg", + "title": "Flowers Cyan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3e481f95eba6ebb74018d4d53118d942.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1d412160691c3213a35210c03516f7ff.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8fc02658593c79b8a91879eba814c7c0.jpg", + "title": "Night Sky Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f8a2224d6bd745e3d88ec54e3bd2a13b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44e34be19666a583db34cafd2ccba178.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aa40c5f3242b2bd266cad581f6333f0f.jpg", + "title": "Shiny Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48fa60fea2649b06176da567d300f27c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47d825bc07c21bec2c0db8ee773ddb24.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/647cfdf811848512b66fbf6e8099f41b.jpg", + "title": "Ocean Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85781a51979ce95e19eabacc4268328c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c4db66b07d02db19801b7aae5a39f8bf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/964b0816c8dd799b560da77740aba0ac.jpg", + "title": "Heart Cactus", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/16a34626f1cb9ee96bc395e96f3e1fd8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/765dbb9173d1f30e686d1dc8be76b165.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5a91424c6fc87c032c37f06cb3422eb9.jpg", + "title": "Aurora Skies", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/405a2a98970b5cd0cc95822a1e06781c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/962b5ea4f5de5a4ae59f97bad897f091.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/690dcc89ea6d9c483577f822cdea0769.jpg", + "title": "Pretty Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9382fa42c8bab1235651d385648af7ee.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b895a16f6014c9127f6ce9e9ca03561.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/001798ae8d9aa5f16df222ae1a4261f1.jpg", + "title": "Blue Sky Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/131304d6d34d76e109df2950040c797f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ddb53aa6c5c7a13122d26c67d14168e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0466475d956c0a9f9a1df41a796f3a77.jpg", + "title": "Roses Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2f178fbcdaf00bad50bb73f760a0d943.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c86b403d36efea87a2c73d09d37d2782.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/36f48df57effcf1908ab5475c96b8750.jpg", + "title": "Color Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51a3aa5c85add61beea054fb31b6af81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c4e72f235f3a7d1e2cc9ae3931233b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a7f936f7d599d22ff74ee51f07a11ba2.jpg", + "title": "Relaxing Summer Holiday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/96634bf694597c1d560598c309c3dd28.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/41f03d596ed1935e76f4cab0d434d03c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/53776bdec0e9edc3cb3876cabdcc2724.jpg", + "title": "Sunflower Field", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/687f358bab6a0d1a24d7fc46083d38f1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e29a32d1bcbd2c26897a892dd82a365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e291b627e01d51445a7ab1ff6a3c2ba.jpg", + "title": "Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5041e519ee091d422ed30c8bba10f5ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4a30000f1a757105c280aa3a34e31567.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/89db73c77aad72ee49020a02ea65b531.jpg", + "title": "Simple Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/525f3a818e2a7df75a91b028851b1d46.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e57b9a807fa8865ccdb9528e00866e08.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/576bde2b0dfe1db6f7f8c9542685a94c.jpg", + "title": "Colorful Waterdrop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00142d5e702f361b17116777791af603.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3734dd2d1d868db768057e82270e88f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/78abeb6e105745decf6f14d0c42411c7.jpg", + "title": "Colorful Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a2d223212d96904d02db2d6fa77ebb15.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c0a4db53299d7e5667e81518b0f182fb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d5a170c118642106d8fdd80e19c0584.jpg", + "title": "Marble Red Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5a5a71fd0e671788dbf4dadfbe245952.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/12b553c69f0299bc5e99b224cd29bdf3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d054d2cfdd78168a9fb59bac16311c29.jpg", + "title": "Water Drop 3D Glass", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/594ca3dfef4b31d39d636e16e8ff4858.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/23e5abff2737c30858354353e9fd5570.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/55e92975356b493cd7a196c486be2a1a.jpg", + "title": "Summer Sun Beach", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd5bee65de1d09b1285988891f6edb35.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/58e5851676d7a846ebb30785ce8e9c9e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/682a3f00cf32a3e0a5bef99ddd470d2f.jpg", + "title": "Sunset Holiday Seaside", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/998c359f861531e5583bb2caeed9d397.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6974cef444c3f372b7d0b158f98cef73.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/073e58ae676949d4a7cbcd41556197d7.jpg", + "title": "Blue raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ad785f999dc6863bf4285bc4aed8ca9.7z" + } + ] + }, + { + "className": "super theme", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aba8cb2fd066580194a3fb838ca9a7e7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d40617e0ff32ef86ed251aac742a0c3a.webp", + "title": "Pastel Simple Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bfeb64913c9b7b9c9d650054b7044aaa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2b8b22f56b4bd95d63e7b43e5a8df0f9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/22c4e9f906834a3a449e68114c6674b9.webp", + "title": "3D NotePad", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dd87f317131a4fdd0ccf26493aa84333.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1e967d355a7f797010867612a4c2cf07.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/723f2153230a59f3103dbeb21b98abf3.jpg", + "title": "Graffiti Street Wall", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/161b1cfaeb4593ffd9fa29fc0c5545a3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/78d85f99e4818dd488968b959b628b19.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b24c8bed0ff148893e28eac580651520.jpg", + "title": "Love Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3b95f45fb08e4f47270e39b8268d0981.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8df8c8e00355dd55afbbf5b359e064f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce15be7a2c57f260faa57a14baa4d017.jpg", + "title": "Cancer Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/746a3e0e2a7ef8eb463a341f462c3eeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f3fb5617504206e0d3f27de4954c1295.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2ba9c4fee6f9fd83011b059eb1f29dda.jpg", + "title": "Cool Black Metal", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fb5634ea81993e75a15efbf406b2ef93.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b0cb58226917a93a4be8e5ec8ad885e8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/30016222f115cbb874170227c0d9eacd.jpg", + "title": "Green Candy Color", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/825141b4fc920bbf81c53e827debc5cb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c97062c8e363d8ca3a5919cd88200108.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c81492e70629068f541dcf3b31b802c6.jpg", + "title": "Love Neon Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/35f8178b6bf1624d2ae2d7fea4845600.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f939b2a722f3fac4dc0a3f406086ba9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7738566b2335c56f70749e4d7863de3e.jpg", + "title": "Palm Tree Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7bc1be2ffe40410c126f23c0923a63b8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ee67b8a6e8b3833a7e5ff58563ae501.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b458f7c397b9bfec2efc257249f0cd09.jpg", + "title": "LED Lights Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24d3774dac352c435d21b76599514adf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/049f7af4ae9e8d251c3672bd139e2de2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37b091687b7bed38e3d43d1084d52843.jpg", + "title": "Pastel Sweet Cookie", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9dae21130e5748466a03c76b360806ab.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6e0954234ae12f773293ebed0d078cd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d9e136b926e6c14a0159b0a24b51e46.jpg", + "title": "Purple Beach Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c2f40362e286e3c63b25b783d0468f82.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c7ede13b0e494f6470d02e2d7f35e58d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/db43851144d22a7ce74a56b6527602bb.jpg", + "title": "Color Metal black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c74ac813975ba8e83ec043218298e7e0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/74a825c9ffde55e228da3753a6b2fe3b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e396f765bf8a8d2ed8be645193c346cc.jpg", + "title": "Pink Sweet Candy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e62e666cd830654d6c261e2ab75bcc1b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/db8b8e84bf7702e21c2a3f1cf3acd8fb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4faea3dad37d83d2a8129e8d2c614b84.jpg", + "title": "Neon Glow Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b36afa11ef954cd239168d5d7c0fd29f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/957f5042913a3cf726168b5578648af0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2a6a6003c783f4e5cd173227ee947e0c.jpg", + "title": "Pink Candy Color", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/64639f34ceacc25d7dec51fee09621bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f2d9be05d7646a91fe655643d30028a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9ff2c75892bf1aed3369281bab692b5f.jpg", + "title": "Neon Lights Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1cf907bb59f5dbc6b659c4d331950606.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b862dfaedc7d44584956174a57dc86fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f2857b77386443011fc1c2ceb2c395fb.jpg", + "title": "Funny Emoji Party", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/20ed5748746a58f248e44c36d90f535b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8a8d7b3e46626f1f0a0c8a499490ea4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e1f2e5d9238274566586d31415f7378.jpg", + "title": "Cool Neon Glitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1c65096f0a57d8da30da66f0219b3635.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8414752d65f1ccd9788e6a720f718194.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fcd5785bfb4e07e8654224baa6ca18dc.jpg", + "title": "Ombre Grey", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/066241ccaaf8a66af40858bab4db176b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f8620061952e066e406a3eede83f01cc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/51088c822351c13e9c09e689fe690d49.jpg", + "title": "Galaxy Sparkle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0b0ea81df17f8a5d0531786fa008c710.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0b8f250eee988b3c80dca4abca7d386a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7cc49fe0b00b2b434dd63018b921ae1c.jpg", + "title": "Rainbow Colors", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e365eb34c52fe371247ddba5f4adf9c1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/acb88181e3e5865df708af35edba4893.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/237e24e77946fdb2be590867b7e7e3ec.jpg", + "title": "Libra Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f447b7586312273e1124c6649b94d281.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4b08806efa681f4bfb295b15ee5a0689.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6259cdb4c7da266c80c6f1592a4b9101.jpg", + "title": "Galaxy Color 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ca75a8e72d346248f58210eaae1f5d45.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d8fdbaa632a3a0b5f097cbb58db6e6fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/33413134b6b259b84f841d3946ea569d.jpg", + "title": "Rose Gold Diamonds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3080731fea4235792a025deb2a662b66.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6c2cc3914ed7de760535412d38f0b3cf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d3db25022411f1cbfaa13ba7cb0bcd3.jpg", + "title": "Shining Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6332edd6df4a092787de53fc5de4e2e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35f046a366f6ea14a710bb7fb94a57b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/644a246ec79fe7a2db7281152946f773.jpg", + "title": "Rose Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/125a8b3e8331c533a76a0d59834a51fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/831dfb9e3cd53a3dc62cdfde0fe66b81.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/be32fce0e9e05a94b946598285142501.jpg", + "title": "Metallic Drip Color", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4e65c58cd1b5146acec999a09baf7e77.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/942548ec61a902e33338247fa6bee80f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cdedd01bddec28cbb0f868f7e5578b07.jpg", + "title": "Neon Light LED", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4dcaf8f818bb2d7821196016fd99a12.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ca339d5f865ca158cfaa1f26e086d237.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9fb99fe1a963f19561a2d682488b17ca.jpg", + "title": "Earth Marble", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c452c97a82393b2a16f43cf37cc31fcb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/92cd9f722bdfeda8f7db5d1bb605fb72.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e9eb8c50315a194e8456b159cb6bc77.jpg", + "title": "Beautiful Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bed932d13a73e70304f02f395aa68ff0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6fe91882d8a07422d43920db6c46670.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/007333711d2e73b6d589ef38f7a17330.jpg", + "title": "Neon Led", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d358fd9a25d8c11627f2c956a0fad5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/de27e75ea86c9d4f7f9f31c87b1c4e49.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5de498a246279e77caa990c308e78f9b.jpg", + "title": "Pink Glitter Crystal", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24636d6b318d85e1db9c5ddf683f827d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e9df560c4e5fc7b2e490bc8f2a9e43a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/db7f62bb255a6d75866eebc42965259d.jpg", + "title": "Black Crystal Color ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f393dfeba924fe75d58ef4cd29ca01c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/21f88b441bd80bc930a595f4fc7069b4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7c69a8db76c26e78ce40009457e8cf4f.jpg", + "title": "Pink Blue Glitter", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12018e8e1a71d962f226ee399226430d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4af051b6187c2ce872792c8ac5275a60.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d5630de0c39a113cc639aed5eed9dda8.jpg", + "title": "Rainbow Holograph", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c5a1acc3055bf63ca3d5eacfa2c5651b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0428a1d89be9367dc3ed53ba3ba33a7d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0904b17618d5973a6a82a812d33b40c3.jpg", + "title": "Love Balloons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/86bcfd66909831f8adce69a06da90141.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e9c2beae96dd22493ec0af84c8b1c2a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a434ac0092c8d4932352e89211e96be2.jpg", + "title": "Galaxy Panda Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/863dcbeb9dbab2a5af6b0e092f067a10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f7dddba03625953a94d8fb404b6362b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/90ec348f135dc4ba430e295e95832a6b.jpg", + "title": "Purple Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/056cdb3922ec089ea5fb98390354ec32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4cffe143f130cad4969f064a6d2efaf3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48a1b175105a3afee8427dcab02d74f4.jpg", + "title": "Taurus Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e106d12ef16da2ad73d1d8e7f862ad44.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0d63ba44cff3f25075b7a37a2b57f678.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/21f6d32e22f89fb0de90d734cb9a550a.jpg", + "title": "Rainbow Gradient Glitter", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/81ce97931a29c60394fbe844c5abfcd8.7z" + } + ] + } +] \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/HomeActivity.java b/app/src/main/java/com/example/fingerkeyboard/HomeActivity.java new file mode 100644 index 0000000..406f6ab --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/HomeActivity.java @@ -0,0 +1,44 @@ +package com.example.fingerkeyboard; + +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; + +import com.example.fingerkeyboard.R; +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class HomeActivity extends AppCompatActivity { + private CountDownTimer countDownTimer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home); + countDownTimer = new CountDownTimer(1000,500) { + @Override + public void onTick(long millisUntilFinished) { + + } + + @Override + public void onFinish() { + Intent intent = new Intent(HomeActivity.this,MainActivity.class); + startActivity(intent); + finishAffinity(); + } + }; + goCount(); + } + + public void goCount(){countDownTimer.start();} + + @Override + protected void onDestroy() { + super.onDestroy(); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/KeyBoard.java b/app/src/main/java/com/example/fingerkeyboard/KeyBoard.java new file mode 100644 index 0000000..a0312fe --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/KeyBoard.java @@ -0,0 +1,41 @@ +package com.example.fingerkeyboard; + +import android.app.Application; + +import com.example.fingerkeyboard.data.ListName; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +public class KeyBoard extends Application { + public static KeyBoard app; + public static List listNames; + private boolean isinit = false; + + @Override + public void onCreate() { + super.onCreate(); + app = this; + try { + InputStream open = getAssets().open("keyboard.json"); + String covertStr = Readfile.getCovertStr(open); + if (!covertStr.isEmpty()) { + Gson gson = new Gson(); + listNames = gson.fromJson(covertStr, new TypeToken>() { + }.getType()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public static List getuserList() { + + if(listNames != null){ + return listNames; + } + return listNames; + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/MainActivity.java b/app/src/main/java/com/example/fingerkeyboard/MainActivity.java new file mode 100644 index 0000000..e581223 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/MainActivity.java @@ -0,0 +1,257 @@ +package com.example.fingerkeyboard; + +import android.content.Intent; +import android.os.Bundle; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.Toast; + + +import androidx.appcompat.app.AppCompatActivity; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; +import com.example.fingerkeyboard.R; + +import com.example.fingerkeyboard.fragment.AestheticFragment; +import com.example.fingerkeyboard.fragment.CoolFragment; +import com.example.fingerkeyboard.fragment.CuteFragment; +import com.example.fingerkeyboard.fragment.FestivalFragment; +import com.example.fingerkeyboard.fragment.GravityFragment; +import com.example.fingerkeyboard.fragment.LoveFragment; +import com.example.fingerkeyboard.fragment.NeonFragment; +import com.example.fingerkeyboard.fragment.SuperFragment; + +public class MainActivity extends AppCompatActivity implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { + + protected Button btn_love,btn_festival,btn_cute,btn_category; + private ImageView image_set; +// private Fragment lovefragment,festivalfragment,cutefragment,gravityfragment,neonfragment,coolFragment,aestheticfragment,superfragment; + + private LoveFragment lovefragment; + private FestivalFragment festivalfragment; + private CuteFragment cutefragment; + private GravityFragment gravityfragment; + private NeonFragment neonfragment; + private CoolFragment coolFragment; + private SuperFragment superfragment; + + private AestheticFragment aestheticfragment; + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + initfindview(); + goLoveFragment(); + + } + + private void initfindview(){ + btn_love = (Button) findViewById(R.id.btn_love); + btn_love.setSelected(true); + btn_festival = (Button) findViewById(R.id.btn_festival); + btn_cute = (Button) findViewById(R.id.btn_cute); + btn_category = (Button)findViewById(R.id.btn_category); + image_set = (ImageView)findViewById(R.id.image_set); + btn_love.setOnClickListener(this); + btn_festival.setOnClickListener(this); + btn_cute.setOnClickListener(this); + btn_category.setOnClickListener(this); + image_set.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.btn_love: + setBtn(); + btn_love.setSelected(true); + goLoveFragment(); + break; + case R.id.btn_festival: + setBtn(); + btn_festival.setSelected(true); + goFestivalFragment(); + break; + case R.id.btn_cute: + setBtn(); + btn_cute.setSelected(true); + goCuteFragment(); + break; + case R.id.btn_category: + setBtn(); + btn_category.setSelected(true); + PopupMenu popup = new PopupMenu(this, v); + MenuInflater inflater = popup.getMenuInflater(); + inflater.inflate(R.menu.main, popup.getMenu()); + popup.setOnMenuItemClickListener(this); + popup.show(); + break; + case R.id.image_set: + Intent intent = new Intent(MainActivity.this, SettingActivity.class); + startActivity(intent); + default: + break; + + } + } + private void setBtn(){ + btn_love.setSelected(false); + btn_festival.setSelected(false); + btn_cute.setSelected(false); + btn_category.setSelected(false); + } + @Override + public boolean onMenuItemClick(MenuItem item) { + // TODO Auto-generated method stub + switch (item.getItemId()) { + case R.id.m_gravity: + setmenu(); + + goGravityFragment(); + break; + case R.id.m_neon: + setmenu(); + goNeonFragment(); + case R.id.m_cool: + setmenu(); + goCoolFragment(); + break; + case R.id.m_aesthetic: + setmenu(); + goAestheticFragment(); + break; + case R.id.m_super: + setmenu(); + goSuperFragment(); + break; + default: + break; + } + return false; + } + private void setmenu(){ + btn_love.setSelected(false); + btn_festival.setSelected(false); + btn_cute.setSelected(false); + btn_category.setSelected(false); + } + private void goLoveFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if(lovefragment == null){ + lovefragment = new LoveFragment(); + transaction.add(R.id.bottom_layout,lovefragment); + } + hideFragment(transaction); + transaction.show(lovefragment); + transaction.commit(); + } + private void goFestivalFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if(festivalfragment == null){ + festivalfragment = new FestivalFragment(); + transaction.add(R.id.bottom_layout,festivalfragment); + } + hideFragment(transaction); + transaction.show(festivalfragment); + transaction.commit(); + } + private void goCuteFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if(cutefragment == null){ + cutefragment = new CuteFragment(); + transaction.add(R.id.bottom_layout,cutefragment); + } + hideFragment(transaction); + transaction.show(cutefragment); + transaction.commit(); + } + private void goGravityFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( gravityfragment== null){ + gravityfragment = new GravityFragment(); + transaction.add(R.id.bottom_layout,gravityfragment); + } + hideFragment(transaction); + transaction.show(gravityfragment); + transaction.commit(); + } + + private void goNeonFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( neonfragment== null){ + neonfragment = new NeonFragment(); + transaction.add(R.id.bottom_layout,neonfragment); + } + hideFragment(transaction); + transaction.show(neonfragment); + transaction.commit(); + } + private void goCoolFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( coolFragment== null){ + coolFragment = new CoolFragment(); + transaction.add(R.id.bottom_layout,coolFragment); + } + hideFragment(transaction); + transaction.show(coolFragment); + transaction.commit(); + } + private void goAestheticFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( aestheticfragment== null){ + aestheticfragment = new AestheticFragment(); + transaction.add(R.id.bottom_layout,aestheticfragment); + } + hideFragment(transaction); + transaction.show(aestheticfragment); + transaction.commit(); + } + private void goSuperFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( superfragment== null){ + superfragment = new SuperFragment(); + transaction.add(R.id.bottom_layout,superfragment); + } + hideFragment(transaction); + transaction.show(superfragment); + transaction.commit(); + } + + + + private void hideFragment(FragmentTransaction transaction){ + if(lovefragment != null){ + transaction.hide(lovefragment); + } + if(festivalfragment != null){ + transaction.hide(festivalfragment); + } + if(cutefragment != null){ + transaction.hide(cutefragment); + } + if(gravityfragment != null){ + transaction.hide(gravityfragment); + } + if(neonfragment != null){ + transaction.hide(neonfragment); + } + if(coolFragment != null){ + transaction.hide(coolFragment); + } + if(aestheticfragment != null){ + transaction.hide(aestheticfragment); + } + if(superfragment != null){ + transaction.hide(superfragment); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java b/app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java new file mode 100644 index 0000000..f6f10da --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java @@ -0,0 +1,188 @@ +package com.example.fingerkeyboard; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.fingerkeyboard.listener.DownloadCallback; +import com.example.fingerkeyboard.listener.UnzipCallback; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; +import com.example.fingerkeyboard.tool.MyTools; + +import java.io.File; +import com.example.fingerkeyboard.R; + +public class PreviewActivity extends AppCompatActivity { + private ImageView imageViewBack; + private ImageView imageViewPreview; + private TextView textViewName; + private LinearLayout linearLayoutDown; + private ProgressBar progressBarDownload; + private ProgressBar progressBarPreview; + private String url; + private String name; + private String preview; + public static String KEY_NAME = "key_name"; + public static String KEY_URL = "key_url"; + public static String KEY_PRE = "key_pre"; + private String unzipPath; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_preview); + initView(); //ui属性 + progressBarPreview.setVisibility(View.VISIBLE);//将进度条设置成可见状态 + onGetData(); //获取数据 + + } + public void initView(){ + imageViewBack = findViewById(R.id.image_view_back_id); + imageViewPreview = findViewById(R.id.image_view_preview_id); + textViewName = findViewById(R.id.text_view_name_id); + linearLayoutDown = findViewById(R.id.linear_layout_download_id); + progressBarPreview = findViewById(R.id.progress_bar_preview_id); + progressBarDownload = findViewById(R.id.progress_bar_download_id); + } + + //获取数据 + public void onGetData(){ + Intent intent = getIntent(); + name = intent.getStringExtra(KEY_NAME); + url = intent.getStringExtra(KEY_URL); + preview = intent.getStringExtra(KEY_PRE); + textViewName.setText(name); + Glide.with(this).load(preview).addListener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { + progressBarPreview.setVisibility(View.GONE);//将进度条设置成不可见状态 + return false; + } + + @Override + public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { + progressBarPreview.setVisibility(View.GONE);//将进度条设置成不可见状态 + return false; + } + }).into(imageViewPreview); + + File cacheDir = this.getCacheDir(); + unzipPath = cacheDir + "/" + name; + + Log.d("--------------------","----------name+"+name); + setListener(); + } + + //点击事件 + private void setListener(){ + linearLayoutDown.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setAction(); + } + }); + imageViewBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d("--------------------","----------finish"); + finish(); + } + }); + } + + @Override + public void onBackPressed() { + //按下返回键,实现日志打印 + super.onBackPressed(); + Log.d("-------","--------onBackPressed "); + } + + private void setAction() { + if (!MyTools.isStep1() || !MyTools.isStep2()) { + AlertDialog alertDialog2 = new AlertDialog.Builder(this) + .setTitle("Worn") + .setMessage(getString(R.string.text_hint)) + .setIcon(R.mipmap.logo) + .setPositiveButton("yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Intent intent = new Intent(PreviewActivity.this,SettingActivity.class); + startActivity(intent); + } + }) + .setNegativeButton("cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + + } + }) + .create(); + alertDialog2.show(); + return; + } + + goApply(); + } + + private void goApply() { + progressBarDownload.setVisibility(View.VISIBLE); + String skinPathByName = MyTools.getSkinPathByName(name); + Log.d("----skinPathByName","------skinPathByName+"+skinPathByName); + if (!skinPathByName.isEmpty()) { + setCurrentKeyboardSkin(skinPathByName); + progressBarDownload.setVisibility(View.GONE); + Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); + finish(); + return; + } + MyTools.downloadZip(url, this, new DownloadCallback() { + @Override + public void onDownloadCall(boolean successful, File resource) { + if (successful) { + MyTools.unzipFile(unzipPath, resource, new UnzipCallback() { + + @Override + public void onUnzipCall(boolean successful, String resDirPath) { + progressBarDownload.setVisibility(View.GONE); + if (successful) { + MyTools.saveSkinByName(name, resDirPath); + setCurrentKeyboardSkin(resDirPath); + Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); + finish(); + } + + } + }); + } else { + progressBarDownload.setVisibility(View.GONE); + } + + } + }); + } + + private void setCurrentKeyboardSkin(String resDirPath) { + Log.d("---","----path"+resDirPath); + MyTools.saveSkin(resDirPath); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/Readfile.java b/app/src/main/java/com/example/fingerkeyboard/Readfile.java new file mode 100644 index 0000000..75ee673 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/Readfile.java @@ -0,0 +1,32 @@ +package com.example.fingerkeyboard; + + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; + +public class Readfile { + public static String getCovertStr(InputStream stream) { + String covertStr = ""; + try { + StringWriter writer = new StringWriter(); + char[] buffer = new char[stream.available()]; + Reader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)); + int a = 0; + while ((a = reader.read(buffer)) != -1) { + writer.write(buffer, 0, a); + } + covertStr = writer.toString(); + } catch (IOException e) { + return covertStr; + } + return covertStr; + } + + +} diff --git a/app/src/main/java/com/example/fingerkeyboard/SettingActivity.java b/app/src/main/java/com/example/fingerkeyboard/SettingActivity.java new file mode 100644 index 0000000..36e2301 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/SettingActivity.java @@ -0,0 +1,99 @@ +package com.example.fingerkeyboard; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import com.example.fingerkeyboard.R; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.fingerkeyboard.tool.MyTools; + + +public class SettingActivity extends AppCompatActivity { + + private BroadcastReceiver broadcastReceiver; + + private ImageView imageViewBack; + + private TextView textViewStep1; + private TextView textViewStep2; + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setting); + initView(); + + + //在运行时注册一个广播接收者,以便接收输入法改变的广播消息。 + broadcastReceiver = new inputReceive(); + registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_INPUT_METHOD_CHANGED)); + + + refreshStatus(); + setListener(); + } + + private void initView(){ + imageViewBack = findViewById(R.id.image_view_back_id); + textViewStep1 = findViewById(R.id.textview_step1); + textViewStep2 = findViewById(R.id.textview_step2); + } + + private void setListener(){ + imageViewBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + finish(); + } + }); + textViewStep1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MyTools.goSetStep1(SettingActivity.this); + + } + }); + textViewStep2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MyTools.goSetStep2(); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(broadcastReceiver); + } + + private void refreshStatus() { + textViewStep2.setSelected(MyTools.isStep2()); + textViewStep1.setSelected(MyTools.isStep1()); + + } + + @Override + protected void onResume() { + super.onResume(); + refreshStatus(); + } + + class inputReceive extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + refreshStatus(); + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java b/app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java new file mode 100644 index 0000000..26f21a6 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java @@ -0,0 +1,105 @@ +package com.example.fingerkeyboard.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; +import com.example.fingerkeyboard.PreviewActivity; + +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.data.MyData; + + +import java.util.ArrayList; +import java.util.List; + +public class ThumbAdapter extends RecyclerView.Adapter { + private Context adapter_context; + List< MyData > myDataList = new ArrayList<>(); + + //private List myDataList; + public ThumbAdapter(Context context,List list){ + adapter_context = context; + myDataList = list; + } + + @Override + public void onBindViewHolder(@NonNull ThumbViewHolder holder, int position) { + + MyData myData = myDataList.get(position); //获取位置 + String thumbnail = myData.getThumb(); //获取缩略图 + Glide.with(adapter_context).load(thumbnail) + .error(R.mipmap.ic_launcher) + .listener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { + return false; + } + + @Override + public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { + return false; + } + }) + .into(holder.getImageViewThumb()); + holder.getConstraintLayout().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(adapter_context, PreviewActivity.class); + intent.putExtra(PreviewActivity.KEY_NAME,myData.getResourseName()); + intent.putExtra(PreviewActivity.KEY_URL,myData.getZipUrl()); + intent.putExtra(PreviewActivity.KEY_PRE,myData.getPreview()); + adapter_context.startActivity(intent); + } + }); + } + + + + public static final class ThumbViewHolder extends RecyclerView.ViewHolder{ + private ImageView imageViewThumb; + private ConstraintLayout constraintLayout; + + public ThumbViewHolder(@NonNull View itemView) { + super(itemView); + imageViewThumb = itemView.findViewById(R.id.image_view_key_id); + constraintLayout = itemView.findViewById(R.id.constraint_layout_id); + } + + public ImageView getImageViewThumb() { + return imageViewThumb; + } + + public ConstraintLayout getConstraintLayout() { + return constraintLayout; + } + } + + @Override + public int getItemCount() { + return myDataList.size(); + } + + @NonNull + @Override + public ThumbViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemview = LayoutInflater.from(adapter_context).inflate(R.layout.list_thumb,parent,false); + ThumbViewHolder thumbViewHolder = new ThumbViewHolder(itemview); + return thumbViewHolder; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/data/ListName.java b/app/src/main/java/com/example/fingerkeyboard/data/ListName.java new file mode 100644 index 0000000..52f68cd --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/data/ListName.java @@ -0,0 +1,24 @@ +package com.example.fingerkeyboard.data; + +import java.util.List; + +public class ListName { + private String classname; + private List list; + + public void setClassname(String classname) { + this.classname = classname; + } + + public void setList(List list) { + this.list = list; + } + + public String getClassname() { + return classname; + } + + public List getList() { + return list; + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/data/MyData.java b/app/src/main/java/com/example/fingerkeyboard/data/MyData.java new file mode 100644 index 0000000..7d69296 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/data/MyData.java @@ -0,0 +1,40 @@ +package com.example.fingerkeyboard.data; + +public class MyData { + private String title; + private String thumb; + private String zipUrl; + private String preview; + + public void setResourseName(String resourseName) { + this.title = resourseName; + } + + public void setThumb(String thumb) { + this.thumb = thumb; + } + + public void setZipUrl(String zipUrl) { + this.zipUrl = zipUrl; + } + + public void setPreview(String preview) { + this.preview = preview; + } + + public String getResourseName() { + return title; + } + + public String getThumb() { + return thumb; + } + + public String getZipUrl() { + return zipUrl; + } + + public String getPreview() { + return preview; + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java new file mode 100644 index 0000000..159c362 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; + +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; +import com.example.fingerkeyboard.R; + +import java.util.List; + +public class AestheticFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(6).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java new file mode 100644 index 0000000..3e0dade --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; + +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; +import com.example.fingerkeyboard.R; + +import java.util.List; + +public class CoolFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_gravity, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(5).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java new file mode 100644 index 0000000..e8d6c89 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java @@ -0,0 +1,39 @@ +package com.example.fingerkeyboard.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + + +public class CuteFragment extends Fragment { + private RecyclerView recyclerView; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_cute, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(2).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java new file mode 100644 index 0000000..f89c394 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java @@ -0,0 +1,39 @@ +package com.example.fingerkeyboard.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + +public class FestivalFragment extends Fragment { + private RecyclerView recyclerView; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(1).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java new file mode 100644 index 0000000..64e944f --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java @@ -0,0 +1,40 @@ +package com.example.fingerkeyboard.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + + +public class GravityFragment extends Fragment { + private RecyclerView recyclerView; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_gravity, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(3).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java new file mode 100644 index 0000000..e5cf48a --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + +public class LoveFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_love, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(0).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java new file mode 100644 index 0000000..4b6db05 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + + +public class NeonFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(4).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java new file mode 100644 index 0000000..2c2a640 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + +public class SuperFragment extends Fragment { + private RecyclerView recyclerView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(7).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java b/app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java new file mode 100644 index 0000000..60fc218 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java @@ -0,0 +1,8 @@ +package com.example.fingerkeyboard.listener; + +import java.io.File; + +public interface DownloadCallback { + + void onDownloadCall(boolean successful, File resource); +} diff --git a/app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java b/app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java new file mode 100644 index 0000000..91e69d7 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java @@ -0,0 +1,6 @@ +package com.example.fingerkeyboard.listener; + +public interface UnzipCallback { + + void onUnzipCall(boolean successful, String resDirPath); +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java b/app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java new file mode 100644 index 0000000..ce56080 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java @@ -0,0 +1,195 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; +import android.util.Log; +import android.util.Xml; + +import androidx.core.content.ContextCompat; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.File; +import java.io.IOException; +import java.io.StringReader; +import java.util.Objects; + +public class CustomViewConfig { + private String Bg_action_normal = "btn_keyboard_key_functional_normal.9.png"; + private String jpg_BG = "keyboard_background.jpg"; + + private String jpg_BG_new = "keyboard_background.png"; + private String color_normal_key = "key_text_color_normal"; + private String color_action_key = "key_text_color_functional"; + private String Bg_pressed = "btn_keyboard_key_normal_pressed.9.png"; + private String Bg_normal = "btn_keyboard_key_normal_normal.9.png"; + private String path_drawxh = "/drawable-xhdpi-v4/"; + private String path_drawxxh = "/drawable-xxhdpi-v4/"; + private String path_color = "/colors.xml"; + private String icon_del = "sym_keyboard_delete_normal.png"; + private String icon_shift = "sym_keyboard_shift.png"; + private String Bg_action_pressed = "btn_keyboard_key_functional_pressed.9.png"; + private String icon_shift_lock = "sym_keyboard_shift_locked.png"; + + private String Bg_space_normal = "btn_keyboard_spacekey_normal_normal.9.png"; + private String Bg_space_pressed = "btn_keyboard_spacekey_normal_pressed.9.png"; + + + private Drawable BgActionDraw; + private Drawable BgSpaceDraw; + private Drawable BgNormalDraw; + private Drawable iconShift = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + private Drawable iconDel = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.del_icon); + private Drawable BG = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.de_keyboard_bg); + + private int keyNoramlcolor = com.example.fingerkeyboard.KeyBoard.app.getResources().getColor(R.color.white, null); + + private int keyActioncolor = com.example.fingerkeyboard.KeyBoard.app.getResources().getColor(R.color.white, null); + + private Drawable iconShiftLock = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + + public Drawable getBG() {return BG;} + + public Drawable getBgActionDraw() { + return BgActionDraw; + } + + public Drawable getBgSpaceDraw() { + return BgSpaceDraw; + } + + public Drawable getBgNormalDraw() { + return BgNormalDraw; + } + + public Drawable getIconShift() { + return iconShift; + } + + public Drawable getIconDel() { + return iconDel; + } + + public Drawable getIconShiftLock() { + return iconShiftLock; + } + + public int getKeyNoramlcolor() { + return keyNoramlcolor; + } + + public int getKeyActioncolor() { + return keyActioncolor; + } + + public void init(){ + + iconShift = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + iconDel = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.del_icon); + BG = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.de_keyboard_bg); + iconShiftLock = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + + keyNoramlcolor = com.example.fingerkeyboard.KeyBoard.app.getResources().getColor(R.color.white, null); + + Drawable drawable1 = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app,R.mipmap.logo); + Drawable drawable2 = ContextCompat.getDrawable(KeyBoard.app,R.mipmap.logo); + + + StateListDrawable state = MyTools.getStatus(drawable2,drawable1);//首先创建了一个StateListDrawable对象status。 + BgActionDraw = state; + BgNormalDraw = state; + BgSpaceDraw = state; + } + + //获取键盘未按下时背景 + private Drawable getKeyBackGround(Context context, String resDirPath, String drawName) + { + String filePath = resDirPath+path_drawxh+drawName; //文件路径 + File file = new File(filePath); + if (!file.exists()) { + return null; + } + BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), BitmapFactory.decodeFile(filePath)); + return bitmapDrawable; + } + private Drawable getBackGround(Context context,String resDirPath) + { + String filePath = resDirPath+path_drawxxh+jpg_BG; + if (!new File(filePath).exists()) { + filePath = resDirPath+path_drawxxh+jpg_BG_new; + } + + //BitmapDrawable 是对位图(Bitmap)的一种包装。它允许将一个 Bitmap 对象包装成一个可绘制的资源,以便在 Android 应用中使用 + BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), BitmapFactory.decodeFile(filePath)); + return bitmapDrawable; + } + + private void updateKeyColor(String resDirPath) { + + String colorXmlPath = resDirPath+path_color; + File file = new File(colorXmlPath); + if (!file.exists()) { + return; + } + try { + XmlPullParser xmlPullParser = Xml.newPullParser(); + + String s = MyTools.parseString(file); + xmlPullParser.setInput(new StringReader(s)); + xmlPullParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); + int eventT = xmlPullParser.getEventType(); + while (eventT != XmlPullParser.END_DOCUMENT) { + if (eventT == XmlPullParser.START_TAG && (Objects.equals(xmlPullParser.getName(), "color") || Objects.equals(xmlPullParser.getName(), "item"))) { + String value = xmlPullParser.getAttributeValue(null, "name"); + if (value != null && value.equals(color_normal_key)) { + keyNoramlcolor = Color.parseColor(xmlPullParser.nextText()); + + } + if (value != null && value.equals(color_action_key)) { + keyActioncolor = Color.parseColor(xmlPullParser.nextText()); + + } + } + eventT = xmlPullParser.next(); + } + }catch (XmlPullParserException exception){ + + } catch (IOException e) { + throw new RuntimeException(e); + } + + + } + + public void updateConfig( Context con) { + String resDirPath = MyTools.getSkin(); + Log.d("---","----updateConfig"+resDirPath); + updateKeyColor(resDirPath); + BG = getBackGround(con, resDirPath); + + Drawable keyBackGround = getKeyBackGround(con, resDirPath, Bg_normal); + Drawable keyBackGround1 = getKeyBackGround(con, resDirPath, Bg_pressed); + BgNormalDraw = MyTools.getStatus(keyBackGround, keyBackGround1); + + Drawable keyBackGround2 = getKeyBackGround(con, resDirPath, Bg_action_normal); + Drawable keyBackGround3 = getKeyBackGround(con, resDirPath, Bg_action_pressed); + BgActionDraw = MyTools.getStatus(keyBackGround2, keyBackGround3); + + Drawable keyBackGround4 = getKeyBackGround(con, resDirPath, Bg_space_normal); + Drawable keyBackGround5 = getKeyBackGround(con, resDirPath, Bg_space_pressed); + BgSpaceDraw = MyTools.getStatus(keyBackGround4, keyBackGround5); + + iconDel = getKeyBackGround(con, resDirPath, icon_del); + iconShift = getKeyBackGround(con, resDirPath, icon_shift); + iconShiftLock = getKeyBackGround(con, resDirPath, icon_shift_lock); + + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt b/app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt new file mode 100644 index 0000000..8fe112f --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt @@ -0,0 +1,52 @@ +package com.example.fingerkeyboard.tool + +import android.graphics.Canvas +import android.graphics.Rect +import android.graphics.drawable.Drawable + +object DrawIcon { + public fun onDrawKeyIcon(currentKey: KeyBoard.Key, + drawKeyIcon: Drawable, + myCanvas: Canvas, + myKeyBoardView:MyKeyBoardView + ){ + drawKeyIcon.apply { + currentKey.icon = this + + var icon_w = currentKey.icon.intrinsicWidth.toFloat() + var icon_wr = icon_w / currentKey.width.toFloat() + var icon_h = currentKey.icon.intrinsicHeight.toFloat() + var icon_hr = icon_h / currentKey.height.toFloat() + + + var tep1 = 0f + var tep2 = 0f + if (icon_wr > icon_hr) { + tep2 = icon_wr + tep1 = icon_wr.coerceAtLeast(0.5f) + + } else { + tep2 = icon_hr + tep1 = icon_hr.coerceAtLeast(0.5f) + + } + icon_h = (icon_h / tep2) * tep1 + icon_w = (icon_w / tep2) * tep1 + currentKey.icon.let { + it.bounds = Rect().apply { + + top = + (currentKey.y + myKeyBoardView.paddingTop + (currentKey.height - icon_h) / 2f).toInt() + left = + (currentKey.x + myKeyBoardView.paddingLeft + (currentKey.width - icon_w) / 2f).toInt() + bottom = (top + icon_h).toInt() + right = (left + icon_w).toInt() + + } + it.draw(myCanvas) + } + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java new file mode 100644 index 0000000..211377f --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java @@ -0,0 +1,850 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.TypedValue; +import android.util.Xml; + +import androidx.annotation.XmlRes; + +import com.example.fingerkeyboard.R; + +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +public class KeyBoard { + + static final String TAG = "Keyboard"; + + // Keyboard XML Tags + private static final String TAG_KEYBOARD = "Keyboard"; + private static final String TAG_ROW = "Row"; + private static final String TAG_KEY = "Key"; + + public static final int EDGE_LEFT = 0x01; + public static final int EDGE_RIGHT = 0x02; + public static final int EDGE_TOP = 0x04; + public static final int EDGE_BOTTOM = 0x08; + + public static final int KEYCODE_SHIFT = -1; + public static final int KEYCODE_MODE_CHANGE = -2; + public static final int KEYCODE_CANCEL = -3; + public static final int KEYCODE_DONE = -4; + public static final int KEYCODE_DELETE = -5; + public static final int KEYCODE_ALT = -6; + public static final int KEYCODE_BLANK = 32; + public static final int KEYCODE_SHIFT_123 = -360; + public static final int KEYCODE_SHIFT_SYMBOL = -361; + + + /** Keyboard label **/ + private CharSequence mLabel; + + /** Horizontal gap default for all rows */ + private int mDefaultHorizontalGap; + + /** Default key width */ + private int mDefaultWidth; + + /** Default key height */ + private int mDefaultHeight; + + /** Default gap between rows */ + private int mDefaultVerticalGap; + + /** Is the keyboard in the shifted state */ + private boolean mShifted; + + /** Key instance for the shift key, if present */ + private Key[] mShiftKeys = { null, null }; + + /** Key index for the shift key, if present */ + private int[] mShiftKeyIndices = {-1, -1}; + + /** Current key width, while loading the keyboard */ + private int mKeyWidth; + + /** Current key height, while loading the keyboard */ + private int mKeyHeight; + + /** Total height of the keyboard, including the padding and keys */ + private int mTotalHeight; + + /** + * Total width of the keyboard, including left side gaps and keys, but not any gaps on the + * right side. + */ + private int mTotalWidth; + + /** List of keys in this keyboard */ + private List mKeys; + + /** List of modifier keys such as Shift & Alt, if any */ + private List mModifierKeys; + + /** Width of the screen available to fit the keyboard */ + private int mDisplayWidth; + + /** Height of the screen */ + private int mDisplayHeight; + + /** Keyboard mode, or zero, if none. */ + private int mKeyboardMode; + + // Variables for pre-computing nearest keys. + + private static final int GRID_WIDTH = 10; + private static final int GRID_HEIGHT = 5; + private static final int GRID_SIZE = GRID_WIDTH * GRID_HEIGHT; + private int mCellWidth; + private int mCellHeight; + private int[][] mGridNeighbors; + private int mProximityThreshold; + /** Number of key widths from current touch point to search for nearest keys. */ + private static float SEARCH_DISTANCE = 1.8f; + + private ArrayList rows = new ArrayList<>(); + + + public static class Row { + /** Default width of a key in this row. */ + public int defaultWidth; + /** Default height of a key in this row. */ + public int defaultHeight; + /** Default horizontal gap between keys in this row. */ + public int defaultHorizontalGap; + /** Vertical gap following this row. */ + public int verticalGap; + + ArrayList mKeys = new ArrayList<>(); + + + public int rowEdgeFlags; + + /** The keyboard mode for this row */ + public int mode; + + private KeyBoard parent; + + public Row(KeyBoard parent) { + this.parent = parent; + } + + public Row(Resources res, KeyBoard parent, XmlResourceParser parser) { + this.parent = parent; + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_view); + defaultWidth = getDimensionOrFraction(a, + R.styleable.style_view_android_keyWidth, + parent.mDisplayWidth, parent.mDefaultWidth); + defaultHeight = getDimensionOrFraction(a, + R.styleable.style_view_android_keyHeight, + parent.mDisplayHeight, parent.mDefaultHeight); + defaultHorizontalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_horizontalGap, + parent.mDisplayWidth, parent.mDefaultHorizontalGap); + verticalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_verticalGap, + parent.mDisplayHeight, parent.mDefaultVerticalGap); + a.recycle(); + a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_row); + rowEdgeFlags = a.getInt(R.styleable.style_row_android_rowEdgeFlags, 0); + mode = a.getResourceId(R.styleable.style_row_android_keyboardMode, + 0); + } + } + + /** + * Class for describing the position and characteristics of a single key in the keyboard. + * + * @attr ref android.R.styleable#King_Keyboard_keyWidth + * @attr ref android.R.styleable#King_Keyboard_keyHeight + * @attr ref android.R.styleable#King_Keyboard_horizontalGap + * @attr ref android.R.styleable#King_Keyboard_Key_codes + * @attr ref android.R.styleable#King_Keyboard_Key_keyIcon + * @attr ref android.R.styleable#King_Keyboard_Key_keyLabel + * @attr ref android.R.styleable#King_Keyboard_Key_iconPreview + * @attr ref android.R.styleable#King_Keyboard_Key_isSticky + * @attr ref android.R.styleable#King_Keyboard_Key_isRepeatable + * @attr ref android.R.styleable#King_Keyboard_Key_isModifier + * @attr ref android.R.styleable#King_Keyboard_Key_popupKeyboard + * @attr ref android.R.styleable#King_Keyboard_Key_popupCharacters + * @attr ref android.R.styleable#King_Keyboard_Key_keyOutputText + * @attr ref android.R.styleable#King_Keyboard_Key_keyEdgeFlags + */ + public static class Key { + /** + * All the key codes (unicode or custom code) that this key could generate, zero'th + * being the most important. + */ + public int[] codes; + + /** Label to display */ + public CharSequence label; + + /** Icon to display instead of a label. Icon takes precedence over a label */ + public Drawable icon; + /** Preview version of the icon, for the preview popup */ + public Drawable iconPreview; + /** Width of the key, not including the gap */ + public int width; + /** Height of the key, not including the gap */ + public int height; + /** The horizontal gap before this key */ + public int gap; + /** Whether this key is sticky, i.e., a toggle key */ + public boolean sticky; + /** X coordinate of the key in the keyboard layout */ + public int x; + /** Y coordinate of the key in the keyboard layout */ + public int y; + /** The current pressed state of this key */ + public boolean pressed; + /** If this is a sticky key, is it on? */ + public boolean on; + /** Text to output when pressed. This can be multiple characters, like ".com" */ + public CharSequence text; + /** Popup characters */ + public CharSequence popupCharacters; + + /** + * Flags that specify the anchoring to edges of the keyboard for detecting touch events + * that are just out of the boundary of the key. This is a bit mask of + * {@link KeyBoard#EDGE_LEFT}, {@link KeyBoard#EDGE_RIGHT}, {@link KeyBoard#EDGE_TOP} and + * {@link KeyBoard#EDGE_BOTTOM}. + */ + public int edgeFlags; + /** Whether this is a modifier key, such as Shift or Alt */ + public boolean modifier; + /** The keyboard that this key belongs to */ + private KeyBoard keyboard; + /** + * If this key pops up a mini keyboard, this is the resource id for the XML layout for that + * keyboard. + */ + public int popupResId; + /** Whether this key repeats itself when held down */ + public boolean repeatable; + + + private final static int[] KEY_STATE_NORMAL_ON = { + android.R.attr.state_checkable, + android.R.attr.state_checked + }; + + private final static int[] KEY_STATE_PRESSED_ON = { + android.R.attr.state_pressed, + android.R.attr.state_checkable, + android.R.attr.state_checked + }; + + private final static int[] KEY_STATE_NORMAL_OFF = { + android.R.attr.state_checkable + }; + + private final static int[] KEY_STATE_PRESSED_OFF = { + android.R.attr.state_pressed, + android.R.attr.state_checkable + }; + + private final static int[] KEY_STATE_NORMAL = { + }; + + private final static int[] KEY_STATE_PRESSED = { + android.R.attr.state_pressed + }; + + /** Create an empty key with no attributes. */ + public Key(Row parent) { + keyboard = parent.parent; + height = parent.defaultHeight; + width = parent.defaultWidth; + gap = parent.defaultHorizontalGap; + edgeFlags = parent.rowEdgeFlags; + } + + /** Create a key with the given top-left coordinate and extract its attributes from + * the XML parser. + * @param res resources associated with the caller's context + * @param parent the row that this key belongs to. The row must already be attached to + * a {@link KeyBoard}. + * @param x the x coordinate of the top-left + * @param y the y coordinate of the top-left + * @param parser the XML parser containing the attributes for this key + */ + public Key(Resources res, Row parent, int x, int y, XmlResourceParser parser) { + this(parent); + + this.x = x; + this.y = y; + + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_view); + + width = getDimensionOrFraction(a, + R.styleable.style_view_android_keyWidth, + keyboard.mDisplayWidth, parent.defaultWidth); + height = getDimensionOrFraction(a, + R.styleable.style_view_android_keyHeight, + keyboard.mDisplayHeight, parent.defaultHeight); + gap = getDimensionOrFraction(a, + R.styleable.style_view_android_horizontalGap, + keyboard.mDisplayWidth, parent.defaultHorizontalGap); + a.recycle(); + a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_key); + this.x += gap; + TypedValue codesValue = new TypedValue(); + a.getValue(R.styleable.style_key_android_codes, + codesValue); + if (codesValue.type == TypedValue.TYPE_INT_DEC + || codesValue.type == TypedValue.TYPE_INT_HEX) { + codes = new int[] { codesValue.data }; + } else if (codesValue.type == TypedValue.TYPE_STRING) { + codes = parseCSV(codesValue.string.toString()); + } + + iconPreview = a.getDrawable(R.styleable.style_key_android_iconPreview); + if (iconPreview != null) { + iconPreview.setBounds(0, 0, iconPreview.getIntrinsicWidth(), + iconPreview.getIntrinsicHeight()); + } + popupCharacters = a.getText( + R.styleable.style_key_android_popupCharacters); + popupResId = a.getResourceId( + R.styleable.style_key_android_popupKeyboard, 0); + repeatable = a.getBoolean( + R.styleable.style_key_android_isRepeatable, false); + modifier = a.getBoolean( + R.styleable.style_key_android_isModifier, false); + sticky = a.getBoolean( + R.styleable.style_key_android_isSticky, false); + edgeFlags = a.getInt(R.styleable.style_key_android_keyEdgeFlags, 0); + edgeFlags |= parent.rowEdgeFlags; + + icon = a.getDrawable( + R.styleable.style_key_android_keyIcon); + if (icon != null) { + icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight()); + } + label = a.getText(R.styleable.style_key_android_keyLabel); + text = a.getText(R.styleable.style_key_android_keyOutputText); + + if (codes == null && !TextUtils.isEmpty(label)) { + codes = new int[] { label.charAt(0) }; + } + a.recycle(); + } + + /** + * Informs the key that it has been pressed, in case it needs to change its appearance or + * state. + * @see #onReleased(boolean) + */ + public void onPressed() { + pressed = !pressed; + } + + /** + * Changes the pressed state of the key. + * + *

Toggled state of the key will be flipped when all the following conditions are + * fulfilled:

+ * + *
    + *
  • This is a sticky key, that is, {@link #sticky} is {@code true}. + *
  • The parameter {@code inside} is {@code true}. + *
  • {@link android.os.Build.VERSION#SDK_INT} is greater than + * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1}. + *
+ * + * @param inside whether the finger was released inside the key. Works only on Android M and + * later. See the method document for details. + * @see #onPressed() + */ + public void onReleased(boolean inside) { + pressed = !pressed; + if (sticky && inside) { + on = !on; + } + } + + int[] parseCSV(String value) { + int count = 0; + int lastIndex = 0; + if (value.length() > 0) { + count++; + while ((lastIndex = value.indexOf(",", lastIndex + 1)) > 0) { + count++; + } + } + int[] values = new int[count]; + count = 0; + StringTokenizer st = new StringTokenizer(value, ","); + while (st.hasMoreTokens()) { + try { + values[count++] = Integer.parseInt(st.nextToken()); + } catch (NumberFormatException nfe) { + Log.e(TAG, "Error parsing keycodes " + value); + } + } + return values; + } + + /** + * Detects if a point falls inside this key. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return whether or not the point falls inside the key. If the key is attached to an edge, + * it will assume that all points between the key and the edge are considered to be inside + * the key. + */ + public boolean isInside(int x, int y) { + boolean leftEdge = (edgeFlags & EDGE_LEFT) > 0; + boolean rightEdge = (edgeFlags & EDGE_RIGHT) > 0; + boolean topEdge = (edgeFlags & EDGE_TOP) > 0; + boolean bottomEdge = (edgeFlags & EDGE_BOTTOM) > 0; + if ((x >= this.x || (leftEdge && x <= this.x + this.width)) + && (x < this.x + this.width || (rightEdge && x >= this.x)) + && (y >= this.y || (topEdge && y <= this.y + this.height)) + && (y < this.y + this.height || (bottomEdge && y >= this.y))) { + return true; + } else { + return false; + } + } + + /** + * Returns the square of the distance between the center of the key and the given point. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return the square of the distance of the point from the center of the key + */ + public int squaredDistanceFrom(int x, int y) { + int xDist = this.x + width / 2 - x; + int yDist = this.y + height / 2 - y; + return xDist * xDist + yDist * yDist; + } + + /** + * Returns the drawable state for the key, based on the current state and type of the key. + * @return the drawable state of the key. + * @see android.graphics.drawable.StateListDrawable#setState(int[]) + */ + public int[] getCurrentDrawableState() { + int[] states = KEY_STATE_NORMAL; + + if (on) { + if (pressed) { + states = KEY_STATE_PRESSED_ON; + } else { + states = KEY_STATE_NORMAL_ON; + } + } else { + if (sticky) { + if (pressed) { + states = KEY_STATE_PRESSED_OFF; + } else { + states = KEY_STATE_NORMAL_OFF; + } + } else { + if (pressed) { + states = KEY_STATE_PRESSED; + } + } + } + return states; + } + } + + /** + * Creates a keyboard from the given xml key layout file. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + */ + public KeyBoard(Context context, int xmlLayoutResId) { + this(context, xmlLayoutResId, 0); + } + + /** + * Creates a keyboard from the given xml key layout file. Weeds out rows + * that have a keyboard mode defined but don't match the specified mode. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + * @param modeId keyboard mode identifier + * @param width sets width of keyboard + * @param height sets height of keyboard + */ + public KeyBoard(Context context, @XmlRes int xmlLayoutResId, int modeId, int width, + int height) { + mDisplayWidth = width; + mDisplayHeight = height; + + mDefaultHorizontalGap = 0; + mDefaultWidth = mDisplayWidth / 10; + mDefaultVerticalGap = 0; + mDefaultHeight = mDefaultWidth; + mKeys = new ArrayList<>(); + mModifierKeys = new ArrayList<>(); + mKeyboardMode = modeId; + loadKeyboard(context, context.getResources().getXml(xmlLayoutResId)); + } + + /** + * Creates a keyboard from the given xml key layout file. Weeds out rows + * that have a keyboard mode defined but don't match the specified mode. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + * @param modeId keyboard mode identifier + */ + public KeyBoard(Context context, @XmlRes int xmlLayoutResId, int modeId) { + DisplayMetrics dm = context.getResources().getDisplayMetrics(); + mDisplayWidth = dm.widthPixels; + mDisplayHeight = dm.heightPixels; + //Log.v(TAG, "keyboard's display metrics:" + dm); + + mDefaultHorizontalGap = 0; + mDefaultWidth = mDisplayWidth / 10; + mDefaultVerticalGap = 0; + mDefaultHeight = mDefaultWidth; + mKeys = new ArrayList<>(); + mModifierKeys = new ArrayList<>(); + mKeyboardMode = modeId; + loadKeyboard(context, context.getResources().getXml(xmlLayoutResId)); + } + + public KeyBoard(Context context, int layoutTemplateResId, + CharSequence characters, int columns, int horizontalPadding) { + this(context, layoutTemplateResId); + int x = 0; + int y = 0; + int column = 0; + mTotalWidth = 0; + + Row row = new Row(this); + row.defaultHeight = mDefaultHeight; + row.defaultWidth = mDefaultWidth; + row.defaultHorizontalGap = mDefaultHorizontalGap; + row.verticalGap = mDefaultVerticalGap; + row.rowEdgeFlags = EDGE_TOP | EDGE_BOTTOM; + final int maxColumns = columns == -1 ? Integer.MAX_VALUE : columns; + for (int i = 0; i < characters.length(); i++) { + char c = characters.charAt(i); + if (column >= maxColumns + || x + mDefaultWidth + horizontalPadding > mDisplayWidth) { + x = 0; + y += mDefaultVerticalGap + mDefaultHeight; + column = 0; + } + final Key key = new Key(row); + key.x = x; + key.y = y; + key.label = String.valueOf(c); + key.codes = new int[] { c }; + column++; + x += key.width + key.gap; + mKeys.add(key); + row.mKeys.add(key); + if (x > mTotalWidth) { + mTotalWidth = x; + } + } + mTotalHeight = y + mDefaultHeight; + rows.add(row); + } + + final void resize(int newWidth, int newHeight) { + int numRows = rows.size(); + for (int rowIndex = 0; rowIndex < numRows; ++rowIndex) { + Row row = rows.get(rowIndex); + int numKeys = row.mKeys.size(); + int totalGap = 0; + int totalWidth = 0; + for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) { + Key key = row.mKeys.get(keyIndex); + if (keyIndex > 0) { + totalGap += key.gap; + } + totalWidth += key.width; + } + if (totalGap + totalWidth > newWidth) { + int x = 0; + float scaleFactor = (float)(newWidth - totalGap) / totalWidth; + for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) { + Key key = row.mKeys.get(keyIndex); + key.width *= scaleFactor; + key.x = x; + x += key.width + key.gap; + } + } + } + mTotalWidth = newWidth; + // TODO: This does not adjust the vertical placement according to the new size. + // The main problem in the previous code was horizontal placement/size, but we should + // also recalculate the vertical sizes/positions when we get this resize call. + } + + public List getKeys() { + return mKeys; + } + + public List getModifierKeys() { + return mModifierKeys; + } + + protected int getHorizontalGap() { + return mDefaultHorizontalGap; + } + + protected void setHorizontalGap(int gap) { + mDefaultHorizontalGap = gap; + } + + protected int getVerticalGap() { + return mDefaultVerticalGap; + } + + protected void setVerticalGap(int gap) { + mDefaultVerticalGap = gap; + } + + protected int getKeyHeight() { + return mDefaultHeight; + } + + protected void setKeyHeight(int height) { + mDefaultHeight = height; + } + + protected int getKeyWidth() { + return mDefaultWidth; + } + + protected void setKeyWidth(int width) { + mDefaultWidth = width; + } + + /** + * Returns the total height of the keyboard + * @return the total height of the keyboard + */ + public int getHeight() { + return mTotalHeight; + } + + public int getMinWidth() { + return mTotalWidth; + } + + public boolean setShifted(boolean shiftState) { + for (Key shiftKey : mShiftKeys) { + if (shiftKey != null) { + shiftKey.on = shiftState; + } + } + if (mShifted != shiftState) { + mShifted = shiftState; + return true; + } + return false; + } + + public boolean isShifted() { + return mShifted; + } + + /** + * @hide + */ + public int[] getShiftKeyIndices() { + return mShiftKeyIndices; + } + + public int getShiftKeyIndex() { + return mShiftKeyIndices[0]; + } + + private void computeNearestNeighbors() { + // Round-up so we don't have any pixels outside the grid + mCellWidth = (getMinWidth() + GRID_WIDTH - 1) / GRID_WIDTH; + mCellHeight = (getHeight() + GRID_HEIGHT - 1) / GRID_HEIGHT; + mGridNeighbors = new int[GRID_SIZE][]; + int[] indices = new int[mKeys.size()]; + final int gridWidth = GRID_WIDTH * mCellWidth; + final int gridHeight = GRID_HEIGHT * mCellHeight; + for (int x = 0; x < gridWidth; x += mCellWidth) { + for (int y = 0; y < gridHeight; y += mCellHeight) { + int count = 0; + for (int i = 0; i < mKeys.size(); i++) { + final Key key = mKeys.get(i); + if (key.squaredDistanceFrom(x, y) < mProximityThreshold || + key.squaredDistanceFrom(x + mCellWidth - 1, y) < mProximityThreshold || + key.squaredDistanceFrom(x + mCellWidth - 1, y + mCellHeight - 1) + < mProximityThreshold || + key.squaredDistanceFrom(x, y + mCellHeight - 1) < mProximityThreshold) { + indices[count++] = i; + } + } + int [] cell = new int[count]; + System.arraycopy(indices, 0, cell, 0, count); + mGridNeighbors[(y / mCellHeight) * GRID_WIDTH + (x / mCellWidth)] = cell; + } + } + } + + /** + * Returns the indices of the keys that are closest to the given point. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return the array of integer indices for the nearest keys to the given point. If the given + * point is out of range, then an array of size zero is returned. + */ + public int[] getNearestKeys(int x, int y) { + if (mGridNeighbors == null) computeNearestNeighbors(); + if (x >= 0 && x < getMinWidth() && y >= 0 && y < getHeight()) { + int index = (y / mCellHeight) * GRID_WIDTH + (x / mCellWidth); + if (index < GRID_SIZE) { + return mGridNeighbors[index]; + } + } + return new int[0]; + } + + protected Row createRowFromXml(Resources res, XmlResourceParser parser) { + return new Row(res, this, parser); + } + + protected Key createKeyFromXml(Resources res, Row parent, int x, int y, + XmlResourceParser parser) { + return new Key(res, parent, x, y, parser); + } + + private void loadKeyboard(Context context, XmlResourceParser parser) { + boolean inKey = false; + boolean inRow = false; + boolean leftMostKey = false; + int row = 0; + int x = 0; + int y = 0; + Key key = null; + Row currentRow = null; + Resources res = context.getResources(); + boolean skipRow = false; + + try { + int event; + while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { + if (event == XmlResourceParser.START_TAG) { + String tag = parser.getName(); + if (TAG_ROW.equals(tag)) { + inRow = true; + x = 0; + currentRow = createRowFromXml(res, parser); + rows.add(currentRow); + skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode; + if (skipRow) { + skipToEndOfRow(parser); + inRow = false; + } + } else if (TAG_KEY.equals(tag)) { + inKey = true; + key = createKeyFromXml(res, currentRow, x, y, parser); + mKeys.add(key); + if (key.codes[0] == KEYCODE_SHIFT) { + // Find available shift key slot and put this shift key in it + for (int i = 0; i < mShiftKeys.length; i++) { + if (mShiftKeys[i] == null) { + mShiftKeys[i] = key; + mShiftKeyIndices[i] = mKeys.size()-1; + break; + } + } + mModifierKeys.add(key); + } else if (key.codes[0] == KEYCODE_ALT) { + mModifierKeys.add(key); + } + currentRow.mKeys.add(key); + } else if (TAG_KEYBOARD.equals(tag)) { + parseKeyboardAttributes(res, parser); + } + } else if (event == XmlResourceParser.END_TAG) { + if (inKey) { + inKey = false; + x += key.gap + key.width; + if (x > mTotalWidth) { + mTotalWidth = x; + } + } else if (inRow) { + inRow = false; + y += currentRow.verticalGap; + y += currentRow.defaultHeight; + row++; + } else { + // TODO: error or extend? + } + } + } + } catch (Exception e) { + Log.e(TAG, "Parse error:" + e); + e.printStackTrace(); + } + mTotalHeight = y - mDefaultVerticalGap; + } + + private void skipToEndOfRow(XmlResourceParser parser) + throws XmlPullParserException, IOException { + int event; + while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { + if (event == XmlResourceParser.END_TAG + && parser.getName().equals(TAG_ROW)) { + break; + } + } + } + + private void parseKeyboardAttributes(Resources res, XmlResourceParser parser) { + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_view); + + mDefaultWidth = getDimensionOrFraction(a, + R.styleable.style_view_android_keyWidth, + mDisplayWidth, mDisplayWidth / 10); + mDefaultHeight = getDimensionOrFraction(a, + R.styleable.style_view_android_keyHeight, + mDisplayHeight, 50); + mDefaultHorizontalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_horizontalGap, + mDisplayWidth, 0); + mDefaultVerticalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_verticalGap, + mDisplayHeight, 0); + mProximityThreshold = (int) (mDefaultWidth * SEARCH_DISTANCE); + mProximityThreshold = mProximityThreshold * mProximityThreshold; // Square it for comparison + a.recycle(); + } + + static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) { + TypedValue value = a.peekValue(index); + if (value == null) return defValue; + if (value.type == TypedValue.TYPE_DIMENSION) { + return a.getDimensionPixelOffset(index, defValue); + } else if (value.type == TypedValue.TYPE_FRACTION) { + // Round it to avoid values like 47.9999 from getting truncated + return Math.round(a.getFraction(index, base, base, defValue)); + } + return defValue; + } +} + + diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java new file mode 100644 index 0000000..249a1c2 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java @@ -0,0 +1,1359 @@ +package com.example.fingerkeyboard.tool; + + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.GestureDetector; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.widget.PopupWindow; +import android.widget.TextView; + + +import com.example.fingerkeyboard.R; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class KeyBoardView extends View implements View.OnClickListener { + + + public interface OnKeyboardActionListener { + + + void onPress(int primaryCode); + + + void onRelease(int primaryCode); + + void onKey(int primaryCode, int[] keyCodes); + + void onText(CharSequence text); + + + void swipeLeft(); + + + void swipeRight(); + + + void swipeDown(); + + + void swipeUp(); + } + + private static final boolean DEBUG = false; + private static final int NOT_A_KEY = -1; + private static final int[] KEY_DELETE = { KeyBoard.KEYCODE_DELETE }; + private static final int[] LONG_PRESSABLE_STATE_SET = { R.styleable.Style_Pre_state_android_state_long_pressable }; + + private Context mContext; + private KeyBoard mKeyboard; + private int mCurrentKeyIndex = NOT_A_KEY; + + private int mLabelTextSize; + private int mKeyTextSize; + private int mKeyTextColor; + private float mShadowRadius; + private int mShadowColor; + + + private TextView mPreviewText; + private PopupWindow mPreviewPopup; + private int mPreviewTextSizeLarge; + private int mPreviewOffset; + private int mPreviewHeight; + // Working variable + private final int[] mCoordinates = new int[2]; + + private PopupWindow mPopupKeyboard; + private View mMiniKeyboardContainer; + private KeyBoardView mMiniKeyboard; + private boolean mMiniKeyboardOnScreen; + private View mPopupParent; + private int mMiniKeyboardOffsetX; + private int mMiniKeyboardOffsetY; + private Map mMiniKeyboardCache; + private KeyBoard.Key[] mKeys; + + + private OnKeyboardActionListener mKeyboardActionListener; + + private static final int MSG_SHOW_PREVIEW = 1; + private static final int MSG_REMOVE_PREVIEW = 2; + private static final int MSG_REPEAT = 3; + private static final int MSG_LONGPRESS = 4; + + private static final int DELAY_BEFORE_PREVIEW = 0; + private static final int DELAY_AFTER_PREVIEW = 70; + private static final int DEBOUNCE_TIME = 70; + + private int mVerticalCorrection; + private int mProximityThreshold; + + private boolean mPreviewCentered = false; + private boolean mShowPreview = true; + private boolean mShowTouchPoints = true; + private int mPopupPreviewX; + private int mPopupPreviewY; + + private int mLastX; + private int mLastY; + private int mStartX; + private int mStartY; + + private boolean mProximityCorrectOn; + + private Paint mPaint; + private Rect mPadding; + + private long mDownTime; + private long mLastMoveTime; + private int mLastKey; + private int mLastCodeX; + private int mLastCodeY; + private int mCurrentKey = NOT_A_KEY; + private int mDownKey = NOT_A_KEY; + private long mLastKeyTime; + private long mCurrentKeyTime; + private int[] mKeyIndices = new int[12]; + private GestureDetector mGestureDetector; + private int mPopupX; + private int mPopupY; + private int mRepeatKeyIndex = NOT_A_KEY; + private int mPopupLayout; + private boolean mAbortKey; + private KeyBoard.Key mInvalidatedKey; + private Rect mClipRegion = new Rect(0, 0, 0, 0); + private boolean mPossiblePoly; + private SwipeTracker mSwipeTracker = new SwipeTracker(); + private int mSwipeThreshold; + private boolean mDisambiguateSwipe; + + // 用于处理多个指针的变量 + private int mOldPointerCount = 1; + private float mOldPointerX; + private float mOldPointerY; + + private Drawable mKeyBackground; + + private static final int REPEAT_INTERVAL = 50; // ~20 keys per second + private static final int REPEAT_START_DELAY = 300; + private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout(); + + private static int MAX_NEARBY_KEYS = 12; + private int[] mDistances = new int[MAX_NEARBY_KEYS]; + + // For multi-tap + private int mLastSentIndex; + private int mTapCount; + private long mLastTapTime; + private boolean mInMultiTap; + private static final int MULTITAP_INTERVAL = 600; // milliseconds + private StringBuilder mPreviewLabel = new StringBuilder(1); + + //键盘位图重绘 + private boolean mDrawPending; + // 键盘位图中的脏区域 + private Rect mDirtyRect = new Rect(); + //用于更快的键盘位图 + private Bitmap mBuffer; + //键盘是否刚更改,以便可以重新分配 mBuffer。 + private boolean mKeyboardChanged; + /** The canvas for the above mutable keyboard bitmap */ + private Canvas mCanvas; + + /** The audio manager for accessibility support */ + private AudioManager mAudioManager; + + // 是否宣布了在启用辅助功能时耳机听到密码的要求。 + private boolean mHeadsetRequiredToHearPasswordsAnnounced; + + Handler mHandler; + + public KeyBoardView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public KeyBoardView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public KeyBoardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + mContext = context; + TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.style_view_keyboard, defStyleAttr, defStyleRes); + + LayoutInflater inflate = + (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + int previewLayout = 0; + int keyTextSize = 0; + + int n = a.getIndexCount(); + + for (int i = 0; i < n; i++) { + int attr = a.getIndex(i); + + if (attr == R.styleable.style_view_keyboard_android_keyBackground) { + mKeyBackground = a.getDrawable(attr); + } else if (attr == R.styleable.style_view_keyboard_android_verticalCorrection) { + mVerticalCorrection = a.getDimensionPixelOffset(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_keyPreviewLayout) { + previewLayout = a.getResourceId(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_keyPreviewOffset) { + mPreviewOffset = a.getDimensionPixelOffset(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_keyPreviewHeight) { + mPreviewHeight = a.getDimensionPixelSize(attr, 80); + } else if (attr == R.styleable.style_view_keyboard_android_keyTextSize) { + mKeyTextSize = a.getDimensionPixelSize(attr, 18); + } else if (attr == R.styleable.style_view_keyboard_android_keyTextColor) { + mKeyTextColor = a.getColor(attr, 0xFF333333); + } else if (attr == R.styleable.style_view_keyboard_android_labelTextSize) { + mLabelTextSize = a.getDimensionPixelSize(attr, 14); + } else if (attr == R.styleable.style_view_keyboard_android_popupLayout) { + mPopupLayout = a.getResourceId(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_shadowColor) { + mShadowColor = a.getColor(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_shadowRadius) { + mShadowRadius = a.getFloat(attr, 0f); + } + } + + mPreviewPopup = new PopupWindow(context); + if (previewLayout != 0) { + mPreviewText = (TextView) inflate.inflate(previewLayout, null); + mPreviewTextSizeLarge = (int) mPreviewText.getTextSize(); + mPreviewPopup.setContentView(mPreviewText); + mPreviewPopup.setBackgroundDrawable(null); + } else { + mShowPreview = false; + } + + mPreviewPopup.setTouchable(false); + + mPopupKeyboard = new PopupWindow(context); + mPopupKeyboard.setBackgroundDrawable(null); + + + mPopupParent = this; + + + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setTextSize(keyTextSize); + mPaint.setTextAlign(Paint.Align.CENTER); + mPaint.setAlpha(255); + + mPadding = new Rect(0, 0, 0, 0); + mMiniKeyboardCache = new HashMap(); + mKeyBackground.getPadding(mPadding); + + mSwipeThreshold = (int) (500 * getResources().getDisplayMetrics().density); + + + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + + resetMultiTap(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + initGestureDetector(); + if (mHandler == null) { + mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_SHOW_PREVIEW: + showKey(msg.arg1); + break; + case MSG_REMOVE_PREVIEW: + mPreviewText.setVisibility(INVISIBLE); + break; + case MSG_REPEAT: + if (repeatKey()) { + Message repeat = Message.obtain(this, MSG_REPEAT); + sendMessageDelayed(repeat, REPEAT_INTERVAL); + } + break; + case MSG_LONGPRESS: + openPopupIfRequired((MotionEvent) msg.obj); + break; + } + } + }; + } + } + + private void initGestureDetector() { + if (mGestureDetector == null) { + mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onFling(MotionEvent me1, MotionEvent me2, + float velocityX, float velocityY) { + if (mPossiblePoly) return false; + final float absX = Math.abs(velocityX); + final float absY = Math.abs(velocityY); + float deltaX = me2.getX() - me1.getX(); + float deltaY = me2.getY() - me1.getY(); + int travelX = getWidth() / 2; // Half the keyboard width + int travelY = getHeight() / 2; // Half the keyboard height + mSwipeTracker.computeCurrentVelocity(1000); + final float endingVelocityX = mSwipeTracker.getXVelocity(); + final float endingVelocityY = mSwipeTracker.getYVelocity(); + boolean sendDownKey = false; + if (velocityX > mSwipeThreshold && absY < absX && deltaX > travelX) { + if (mDisambiguateSwipe && endingVelocityX < velocityX / 4) { + sendDownKey = true; + } else { + swipeRight(); + return true; + } + } else if (velocityX < -mSwipeThreshold && absY < absX && deltaX < -travelX) { + if (mDisambiguateSwipe && endingVelocityX > velocityX / 4) { + sendDownKey = true; + } else { + swipeLeft(); + return true; + } + } else if (velocityY < -mSwipeThreshold && absX < absY && deltaY < -travelY) { + if (mDisambiguateSwipe && endingVelocityY > velocityY / 4) { + sendDownKey = true; + } else { + swipeUp(); + return true; + } + } else if (velocityY > mSwipeThreshold && absX < absY / 2 && deltaY > travelY) { + if (mDisambiguateSwipe && endingVelocityY < velocityY / 4) { + sendDownKey = true; + } else { + swipeDown(); + return true; + } + } + + if (sendDownKey) { + detectAndSendKey(mDownKey, mStartX, mStartY, me1.getEventTime()); + } + return false; + } + }); + + mGestureDetector.setIsLongpressEnabled(false); + } + } + + public void setOnKeyboardActionListener(OnKeyboardActionListener listener) { + mKeyboardActionListener = listener; + } + + protected OnKeyboardActionListener getOnKeyboardActionListener() { + return mKeyboardActionListener; + } + + + public void setKeyboard(KeyBoard keyboard) { + if (mKeyboard != null) { + showPreview(NOT_A_KEY); + } + // Remove any pending messages + removeMessages(); + mKeyboard = keyboard; + List keys = mKeyboard.getKeys(); + mKeys = keys.toArray(new KeyBoard.Key[keys.size()]); + requestLayout(); + // Hint to reallocate the buffer if the size changed(重新分配缓冲区) + mKeyboardChanged = true; + invalidateAllKeys(); + computeProximityThreshold(keyboard); + mMiniKeyboardCache.clear(); // Not really necessary to do every time, but will free up views + // 切换到其他键盘应中止任何挂起的键,以便键不会传递到旧键盘或新键盘 + mAbortKey = true; // 直到下一个动作 + } + + + public KeyBoard getKeyboard() { + return mKeyboard; + } + + + public boolean setShifted(boolean shifted) { + if (mKeyboard != null) { + if (mKeyboard.setShifted(shifted)) { + // 整个键盘可能需要重新绘制 + invalidateAllKeys(); + return true; + } + } + return false; + } + + + public boolean isShifted() { + if (mKeyboard != null) { + return mKeyboard.isShifted(); + } + return false; + } + + + public void setPreviewEnabled(boolean previewEnabled) { + mShowPreview = previewEnabled; + } + + /** + * Returns the enabled state of the key feedback popup. + * @return whether or not the key feedback popup is enabled + * @see #setPreviewEnabled(boolean) + */ + public boolean isPreviewEnabled() { + return mShowPreview; + } + + public void setVerticalCorrection(int verticalOffset) { + + } + public void setPopupParent(View v) { + mPopupParent = v; + } + + public void setPopupOffset(int x, int y) { + mMiniKeyboardOffsetX = x; + mMiniKeyboardOffsetY = y; + if (mPreviewPopup.isShowing()) { + mPreviewPopup.dismiss(); + } + } + + public void setProximityCorrectionEnabled(boolean enabled) { + mProximityCorrectOn = enabled; + } + + + + //如果启用了邻近校正,则返回 true。 + public boolean isProximityCorrectionEnabled() { + return mProximityCorrectOn; + } + + /** + * Popup keyboard close button clicked. + * @hide + */ + public void onClick(View v) { + dismissPopupKeyboard(); + } + + private CharSequence adjustCase(CharSequence label) { + if (mKeyboard.isShifted() && label != null && label.length() < 3 + && Character.isLowerCase(label.charAt(0))) { + label = label.toString().toUpperCase(); + } + return label; + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // Round up a little + if (mKeyboard == null) { + setMeasuredDimension(getPaddingLeft() + getPaddingRight(), getPaddingTop() + getPaddingBottom()); + } else { + int width = mKeyboard.getMinWidth() + getPaddingLeft() + getPaddingRight(); + if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) { + width = MeasureSpec.getSize(widthMeasureSpec); + } + setMeasuredDimension(width, mKeyboard.getHeight() + getPaddingTop() + getPaddingBottom()); + } + } + + /* + 计算相邻键之间的平均距离(水平和垂直) + 并将其平方以获得接近阈值。在这里和计算中使用一个正方形 + 与按键中心的触摸距离,以避免取平方根。 + * @param keyboard + */ + private void computeProximityThreshold(KeyBoard keyboard) { + if (keyboard == null) return; + final KeyBoard.Key[] keys = mKeys; + if (keys == null) return; + int length = keys.length; + int dimensionSum = 0; + for (int i = 0; i < length; i++) { + KeyBoard.Key key = keys[i]; + dimensionSum += Math.min(key.width, key.height) + key.gap; + } + if (dimensionSum < 0 || length == 0) return; + mProximityThreshold = (int) (dimensionSum * 1.4f / length); + mProximityThreshold *= mProximityThreshold; // Square it + } + + @Override + public void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if (mKeyboard != null) { + mKeyboard.resize(w, h); + } + // Release the buffer, if any and it will be reallocated on the next draw + mBuffer = null; + } + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + + } + + private void onBufferDraw() { + if (mBuffer == null || mKeyboardChanged) { + if (mBuffer == null || mKeyboardChanged && + (mBuffer.getWidth() != getWidth() || mBuffer.getHeight() != getHeight())) { + // Make sure our bitmap is at least 1x1 + final int width = Math.max(1, getWidth()); + final int height = Math.max(1, getHeight()); + mBuffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + mCanvas = new Canvas(mBuffer); + } + invalidateAllKeys(); + mKeyboardChanged = false; + } + + if (mKeyboard == null) return; + + mCanvas.save(); + final Canvas canvas = mCanvas; + canvas.clipRect(mDirtyRect); + + final Paint paint = mPaint; + final Drawable keyBackground = mKeyBackground; + final Rect clipRegion = mClipRegion; + final Rect padding = mPadding; + final int kbdPaddingLeft = getPaddingLeft(); + final int kbdPaddingTop = getPaddingTop(); + final KeyBoard.Key[] keys = mKeys; + final KeyBoard.Key invalidKey = mInvalidatedKey; + + paint.setColor(mKeyTextColor); + boolean drawSingleKey = false; + if (invalidKey != null && canvas.getClipBounds(clipRegion)) { + + if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && + invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && + invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && + invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { + drawSingleKey = true; + } + } + canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); + final int keyCount = keys.length; + for (int i = 0; i < keyCount; i++) { + final KeyBoard.Key key = keys[i]; + if (drawSingleKey && invalidKey != key) { + continue; + } + int[] drawableState = key.getCurrentDrawableState(); + keyBackground.setState(drawableState); + + // 按下 shift 键,则将字符切换为大写 + String label = key.label == null? null : adjustCase(key.label).toString(); + + final Rect bounds = keyBackground.getBounds(); + if (key.width != bounds.right || + key.height != bounds.bottom) { + keyBackground.setBounds(0, 0, key.width, key.height); + } + canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); + keyBackground.draw(canvas); + + if (label != null) { + // For characters, 使用大号字体. 对于像done标签, use small font. + if (label.length() > 1 && key.codes.length < 2) { + paint.setTextSize(mLabelTextSize); + paint.setTypeface(Typeface.DEFAULT_BOLD); + } else { + paint.setTextSize(mKeyTextSize); + paint.setTypeface(Typeface.DEFAULT); + } + // 为文本绘制投影 + paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor); + // 绘制文本 + canvas.drawText(label, + (key.width - padding.left - padding.right) / 2 + + padding.left, + (key.height - padding.top - padding.bottom) / 2 + + (paint.getTextSize() - paint.descent()) / 2 + padding.top, + paint); + // Turn off drop shadow + paint.setShadowLayer(0, 0, 0, 0); + } else if (key.icon != null) { + final int drawableX = (key.width - padding.left - padding.right + - key.icon.getIntrinsicWidth()) / 2 + padding.left; + final int drawableY = (key.height - padding.top - padding.bottom + - key.icon.getIntrinsicHeight()) / 2 + padding.top; + canvas.translate(drawableX, drawableY); + key.icon.setBounds(0, 0, + key.icon.getIntrinsicWidth(), key.icon.getIntrinsicHeight()); + key.icon.draw(canvas); + canvas.translate(-drawableX, -drawableY); + } + canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop); + } + mInvalidatedKey = null; + // Overlay a dark rectangle to dim the keyboard + if (mMiniKeyboardOnScreen) { +// paint.setColor((int) (mBackgroundDimAmount * 0xFF) << 24); + canvas.drawRect(0, 0, getWidth(), getHeight(), paint); + } + + if (DEBUG && mShowTouchPoints) { + paint.setAlpha(128); + paint.setColor(0xFFFF0000); + canvas.drawCircle(mStartX, mStartY, 3, paint); + canvas.drawLine(mStartX, mStartY, mLastX, mLastY, paint); + paint.setColor(0xFF0000FF); + canvas.drawCircle(mLastX, mLastY, 3, paint); + paint.setColor(0xFF00FF00); + canvas.drawCircle((mStartX + mLastX) / 2, (mStartY + mLastY) / 2, 2, paint); + } + mCanvas.restore(); + mDrawPending = false; + mDirtyRect.setEmpty(); + } + + private int getKeyIndices(int x, int y, int[] allKeys) { + final KeyBoard.Key[] keys = mKeys; + int primaryIndex = NOT_A_KEY; + int closestKey = NOT_A_KEY; + int closestKeyDist = mProximityThreshold + 1; + Arrays.fill(mDistances, Integer.MAX_VALUE); + int [] nearestKeyIndices = mKeyboard.getNearestKeys(x, y); + final int keyCount = nearestKeyIndices.length; + for (int i = 0; i < keyCount; i++) { + final KeyBoard.Key key = keys[nearestKeyIndices[i]]; + int dist = 0; + boolean isInside = key.isInside(x,y); + if (isInside) { + primaryIndex = nearestKeyIndices[i]; + } + + if (((mProximityCorrectOn + && (dist = key.squaredDistanceFrom(x, y)) < mProximityThreshold) + || isInside) + && key.codes[0] > 32) { + // Find insertion point + final int nCodes = key.codes.length; + if (dist < closestKeyDist) { + closestKeyDist = dist; + closestKey = nearestKeyIndices[i]; + } + + if (allKeys == null) continue; + + for (int j = 0; j < mDistances.length; j++) { + if (mDistances[j] > dist) { + // Make space for nCodes codes + System.arraycopy(mDistances, j, mDistances, j + nCodes, + mDistances.length - j - nCodes); + System.arraycopy(allKeys, j, allKeys, j + nCodes, + allKeys.length - j - nCodes); + for (int c = 0; c < nCodes; c++) { + allKeys[j + c] = key.codes[c]; + mDistances[j + c] = dist; + } + break; + } + } + } + } + if (primaryIndex == NOT_A_KEY) { + primaryIndex = closestKey; + } + return primaryIndex; + } + + private void detectAndSendKey(int index, int x, int y, long eventTime) { + if (index != NOT_A_KEY && index < mKeys.length) { + final KeyBoard.Key key = mKeys[index]; + if (key.text != null) { + mKeyboardActionListener.onText(key.text); + mKeyboardActionListener.onRelease(NOT_A_KEY); + } else { + int code = key.codes[0]; + //TextEntryState.keyPressedAt(key, x, y); + int[] codes = new int[MAX_NEARBY_KEYS]; + Arrays.fill(codes, NOT_A_KEY); + getKeyIndices(x, y, codes); + // Multi-tap + if (mInMultiTap) { + if (mTapCount != -1) { + mKeyboardActionListener.onKey(KeyBoard.KEYCODE_DELETE, KEY_DELETE); + } else { + mTapCount = 0; + } + code = key.codes[mTapCount]; + } + mKeyboardActionListener.onKey(code, codes); + mKeyboardActionListener.onRelease(code); + } + mLastSentIndex = index; + mLastTapTime = eventTime; + } + } + + + private CharSequence getPreviewText(KeyBoard.Key key) { + if (mInMultiTap) { + // Multi-tap + mPreviewLabel.setLength(0); + mPreviewLabel.append((char) key.codes[mTapCount < 0 ? 0 : mTapCount]); + return adjustCase(mPreviewLabel); + } else { + return adjustCase(key.label); + } + } + + private void showPreview(int keyIndex) { + int oldKeyIndex = mCurrentKeyIndex; + final PopupWindow previewPopup = mPreviewPopup; + + mCurrentKeyIndex = keyIndex; + // 松开旧键并按新键 + final KeyBoard.Key[] keys = mKeys; + if (oldKeyIndex != mCurrentKeyIndex) { + if (oldKeyIndex != NOT_A_KEY && keys.length > oldKeyIndex) { + KeyBoard.Key oldKey = keys[oldKeyIndex]; + oldKey.onReleased(mCurrentKeyIndex == NOT_A_KEY); + invalidateKey(oldKeyIndex); + final int keyCode = oldKey.codes[0]; + } + if (mCurrentKeyIndex != NOT_A_KEY && keys.length > mCurrentKeyIndex) { + KeyBoard.Key newKey = keys[mCurrentKeyIndex]; + newKey.onPressed(); + invalidateKey(mCurrentKeyIndex); + final int keyCode = newKey.codes[0]; + } + } + // If key changed and preview is on ... + if (oldKeyIndex != mCurrentKeyIndex && mShowPreview) { + mHandler.removeMessages(MSG_SHOW_PREVIEW); + if (previewPopup.isShowing()) { + if (keyIndex == NOT_A_KEY) { + mHandler.sendMessageDelayed(mHandler + .obtainMessage(MSG_REMOVE_PREVIEW), + DELAY_AFTER_PREVIEW); + } + } + if (keyIndex != NOT_A_KEY) { + if (previewPopup.isShowing() && mPreviewText.getVisibility() == VISIBLE) { + + showKey(keyIndex); + } else { + mHandler.sendMessageDelayed( + mHandler.obtainMessage(MSG_SHOW_PREVIEW, keyIndex, 0), + DELAY_BEFORE_PREVIEW); + } + } + } + } + + private void showKey(final int keyIndex) { + final PopupWindow previewPopup = mPreviewPopup; + final KeyBoard.Key[] keys = mKeys; + if (keyIndex < 0 || keyIndex >= mKeys.length) return; + KeyBoard.Key key = keys[keyIndex]; + if (key.icon != null) { + mPreviewText.setCompoundDrawables(null, null, null, + key.iconPreview != null ? key.iconPreview : key.icon); + mPreviewText.setText(null); + } else { + mPreviewText.setCompoundDrawables(null, null, null, null); + mPreviewText.setText(getPreviewText(key)); + if (key.label!=null && key.label.length() > 1 && key.codes.length < 2) { + mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mKeyTextSize); + mPreviewText.setTypeface(Typeface.DEFAULT_BOLD); + } else { + mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mPreviewTextSizeLarge); + mPreviewText.setTypeface(Typeface.DEFAULT); + } + } + mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); + int popupWidth = Math.max(mPreviewText.getMeasuredWidth(), key.width + + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight()); + final int popupHeight = mPreviewHeight; + ViewGroup.LayoutParams lp = mPreviewText.getLayoutParams(); + if (lp != null) { + lp.width = popupWidth; + lp.height = popupHeight; + } + if (!mPreviewCentered) { + mPopupPreviewX = key.x - mPreviewText.getPaddingLeft() + getPaddingLeft(); + mPopupPreviewY = key.y - popupHeight + mPreviewOffset; + } else { + + mPopupPreviewX = 160 - mPreviewText.getMeasuredWidth() / 2; + mPopupPreviewY = - mPreviewText.getMeasuredHeight(); + } + mHandler.removeMessages(MSG_REMOVE_PREVIEW); + getLocationInWindow(mCoordinates); + mCoordinates[0] += mMiniKeyboardOffsetX; // Offset may be zero + mCoordinates[1] += mMiniKeyboardOffsetY; // Offset may be zero + + + mPreviewText.getBackground().setState( + key.popupResId != 0 ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET); + mPopupPreviewX += mCoordinates[0]; + mPopupPreviewY += mCoordinates[1]; + + + getLocationOnScreen(mCoordinates); + if (mPopupPreviewY + mCoordinates[1] < 0) { + + if (key.x + key.width <= getWidth() / 2) { + mPopupPreviewX += (int) (key.width * 2.5); + } else { + mPopupPreviewX -= (int) (key.width * 2.5); + } + mPopupPreviewY += popupHeight; + } + + if (previewPopup.isShowing()) { + previewPopup.update(mPopupPreviewX, mPopupPreviewY, + popupWidth, popupHeight); + } else { + previewPopup.setWidth(popupWidth); + previewPopup.setHeight(popupHeight); + previewPopup.showAtLocation(mPopupParent, Gravity.NO_GRAVITY, + mPopupPreviewX, mPopupPreviewY); + } + mPreviewText.setVisibility(VISIBLE); + } + + + public void invalidateAllKeys() { + mDirtyRect.union(0, 0, getWidth(), getHeight()); + mDrawPending = true; + invalidate(); + } + + + public void invalidateKey(int keyIndex) { + if (mKeys == null) return; + if (keyIndex < 0 || keyIndex >= mKeys.length) { + return; + } + final KeyBoard.Key key = mKeys[keyIndex]; + mInvalidatedKey = key; + mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), + key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); + onBufferDraw(); + invalidate(key.x + getPaddingLeft(), key.y + getPaddingTop(), + key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); + } + + private boolean openPopupIfRequired(MotionEvent me) { + // Check if we have a popup layout specified first. + if (mPopupLayout == 0) { + return false; + } + if (mCurrentKey < 0 || mCurrentKey >= mKeys.length) { + return false; + } + + KeyBoard.Key popupKey = mKeys[mCurrentKey]; + boolean result = onLongPress(popupKey); + if (result) { + mAbortKey = true; + showPreview(NOT_A_KEY); + } + return result; + } + + protected boolean onLongPress(KeyBoard.Key popupKey) { + int popupKeyboardId = popupKey.popupResId; + + if (popupKeyboardId != 0) { + mMiniKeyboardContainer = mMiniKeyboardCache.get(popupKey); + if (mMiniKeyboardContainer == null) { + LayoutInflater inflater = (LayoutInflater) getContext().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + mMiniKeyboardContainer = inflater.inflate(mPopupLayout, null); + mMiniKeyboard = mMiniKeyboardContainer.findViewById( + R.id.my_keyboard_view); + mMiniKeyboard.setOnKeyboardActionListener(new OnKeyboardActionListener() { + public void onKey(int primaryCode, int[] keyCodes) { + mKeyboardActionListener.onKey(primaryCode, keyCodes); + dismissPopupKeyboard(); + } + + public void onText(CharSequence text) { + mKeyboardActionListener.onText(text); + dismissPopupKeyboard(); + } + + public void swipeLeft() { } + public void swipeRight() { } + public void swipeUp() { } + public void swipeDown() { } + public void onPress(int primaryCode) { + mKeyboardActionListener.onPress(primaryCode); + } + public void onRelease(int primaryCode) { + mKeyboardActionListener.onRelease(primaryCode); + } + }); + + KeyBoard keyboard; + if (popupKey.popupCharacters != null) { + keyboard = new KeyBoard(getContext(), popupKeyboardId, + popupKey.popupCharacters, -1, getPaddingLeft() + getPaddingRight()); + } else { + keyboard = new KeyBoard(getContext(), popupKeyboardId); + } + mMiniKeyboard.setKeyboard(keyboard); + mMiniKeyboard.setPopupParent(this); + mMiniKeyboardContainer.measure( + MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST)); + + mMiniKeyboardCache.put(popupKey, mMiniKeyboardContainer); + } else { + mMiniKeyboard = mMiniKeyboardContainer.findViewById( + R.id.my_keyboard_view); + } + getLocationInWindow(mCoordinates); + mPopupX = popupKey.x + getPaddingLeft(); + mPopupY = popupKey.y + getPaddingTop(); + mPopupX = mPopupX + popupKey.width - mMiniKeyboardContainer.getMeasuredWidth(); + mPopupY = mPopupY - mMiniKeyboardContainer.getMeasuredHeight(); + final int x = mPopupX + mMiniKeyboardContainer.getPaddingRight() + mCoordinates[0]; + final int y = mPopupY + mMiniKeyboardContainer.getPaddingBottom() + mCoordinates[1]; + mMiniKeyboard.setPopupOffset(x < 0 ? 0 : x, y); + mMiniKeyboard.setShifted(isShifted()); + mPopupKeyboard.setContentView(mMiniKeyboardContainer); + mPopupKeyboard.setWidth(mMiniKeyboardContainer.getMeasuredWidth()); + mPopupKeyboard.setHeight(mMiniKeyboardContainer.getMeasuredHeight()); + mPopupKeyboard.showAtLocation(this, Gravity.NO_GRAVITY, x, y); + mMiniKeyboardOnScreen = true; + + invalidateAllKeys(); + return true; + } + return false; + } + + + + @Override + public boolean onTouchEvent(MotionEvent me) { + // Convert multi-pointer up/down events to single up/down events to + // deal with the typical multi-pointer behavior of two-thumb typing + final int pointerCount = me.getPointerCount(); + final int action = me.getAction(); + boolean result = false; + final long now = me.getEventTime(); + + if (pointerCount != mOldPointerCount) { + if (pointerCount == 1) { + // Send a down event for the latest pointer + MotionEvent down = MotionEvent.obtain(now, now, MotionEvent.ACTION_DOWN, + me.getX(), me.getY(), me.getMetaState()); + result = onModifiedTouchEvent(down, false); + down.recycle(); + // If it's an up action, then deliver the up as well. + if (action == MotionEvent.ACTION_UP) { + result = onModifiedTouchEvent(me, true); + } + } else { + // Send an up event for the last pointer + MotionEvent up = MotionEvent.obtain(now, now, MotionEvent.ACTION_UP, + mOldPointerX, mOldPointerY, me.getMetaState()); + result = onModifiedTouchEvent(up, true); + up.recycle(); + } + } else { + if (pointerCount == 1) { + result = onModifiedTouchEvent(me, false); + mOldPointerX = me.getX(); + mOldPointerY = me.getY(); + } else { + // Don't do anything when 2 pointers are down and moving. + result = true; + } + } + mOldPointerCount = pointerCount; + + + return result; + } + + private boolean onModifiedTouchEvent(MotionEvent me, boolean possiblePoly) { + int touchX = (int) me.getX() - getPaddingLeft(); + int touchY = (int) me.getY() - getPaddingTop(); + if (touchY >= -mVerticalCorrection) + touchY += mVerticalCorrection; + final int action = me.getAction(); + final long eventTime = me.getEventTime(); + int keyIndex = getKeyIndices(touchX, touchY, null); + mPossiblePoly = possiblePoly; + + // Track the last few movements to look for spurious swipes. + if (action == MotionEvent.ACTION_DOWN) mSwipeTracker.clear(); + mSwipeTracker.addMovement(me); + + // Ignore all motion events until a DOWN. + if (mAbortKey + && action != MotionEvent.ACTION_DOWN && action != MotionEvent.ACTION_CANCEL) { + mRepeatKeyIndex = NOT_A_KEY; + return true; + } + + if (mGestureDetector.onTouchEvent(me)) { + showPreview(NOT_A_KEY); + mHandler.removeMessages(MSG_REPEAT); + mHandler.removeMessages(MSG_LONGPRESS); + return true; + } + + // Needs to be called after the gesture detector gets a turn, as it may have + // displayed the mini keyboard + if (mMiniKeyboardOnScreen && action != MotionEvent.ACTION_CANCEL) { + mRepeatKeyIndex = NOT_A_KEY; + return true; + } + + switch (action) { + case MotionEvent.ACTION_DOWN: + mAbortKey = false; + mStartX = touchX; + mStartY = touchY; + mLastCodeX = touchX; + mLastCodeY = touchY; + mLastKeyTime = 0; + mCurrentKeyTime = 0; + mLastKey = NOT_A_KEY; + mCurrentKey = keyIndex; + mDownKey = keyIndex; + mDownTime = me.getEventTime(); + mLastMoveTime = mDownTime; + checkMultiTap(eventTime, keyIndex); + mKeyboardActionListener.onPress(keyIndex != NOT_A_KEY ? + mKeys[keyIndex].codes[0] : 0); + if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) { + mRepeatKeyIndex = mCurrentKey; + Message msg = mHandler.obtainMessage(MSG_REPEAT); + mHandler.sendMessageDelayed(msg, REPEAT_START_DELAY); + repeatKey(); + // Delivering the key could have caused an abort + if (mAbortKey) { + mRepeatKeyIndex = NOT_A_KEY; + break; + } + } + if (mCurrentKey != NOT_A_KEY) { + Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me); + mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT); + } + showPreview(keyIndex); + break; + + case MotionEvent.ACTION_MOVE: + boolean continueLongPress = false; + if (keyIndex != NOT_A_KEY) { + if (mCurrentKey == NOT_A_KEY) { + mCurrentKey = keyIndex; + mCurrentKeyTime = eventTime - mDownTime; + } else { + if (keyIndex == mCurrentKey) { + mCurrentKeyTime += eventTime - mLastMoveTime; + continueLongPress = true; + } else if (mRepeatKeyIndex == NOT_A_KEY) { + resetMultiTap(); + mLastKey = mCurrentKey; + mLastCodeX = mLastX; + mLastCodeY = mLastY; + mLastKeyTime = + mCurrentKeyTime + eventTime - mLastMoveTime; + mCurrentKey = keyIndex; + mCurrentKeyTime = 0; + } + } + } + if (!continueLongPress) { + // Cancel old longpress + mHandler.removeMessages(MSG_LONGPRESS); + // Start new longpress if key has changed + if (keyIndex != NOT_A_KEY) { + Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me); + mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT); + } + } + showPreview(mCurrentKey); + mLastMoveTime = eventTime; + break; + + case MotionEvent.ACTION_UP: + removeMessages(); + if (keyIndex == mCurrentKey) { + mCurrentKeyTime += eventTime - mLastMoveTime; + } else { + resetMultiTap(); + mLastKey = mCurrentKey; + mLastKeyTime = mCurrentKeyTime + eventTime - mLastMoveTime; + mCurrentKey = keyIndex; + mCurrentKeyTime = 0; + } + if (mCurrentKeyTime < mLastKeyTime && mCurrentKeyTime < DEBOUNCE_TIME + && mLastKey != NOT_A_KEY) { + mCurrentKey = mLastKey; + touchX = mLastCodeX; + touchY = mLastCodeY; + } + showPreview(NOT_A_KEY); + Arrays.fill(mKeyIndices, NOT_A_KEY); + // If we're not on a repeating key (which sends on a DOWN event) + if (mRepeatKeyIndex == NOT_A_KEY && !mMiniKeyboardOnScreen && !mAbortKey) { + detectAndSendKey(mCurrentKey, touchX, touchY, eventTime); + } + invalidateKey(keyIndex); + mRepeatKeyIndex = NOT_A_KEY; + break; + case MotionEvent.ACTION_CANCEL: + removeMessages(); + dismissPopupKeyboard(); + mAbortKey = true; + showPreview(NOT_A_KEY); + invalidateKey(mCurrentKey); + break; + } + mLastX = touchX; + mLastY = touchY; + return true; + } + + private boolean repeatKey() { + if(mRepeatKeyIndex != NOT_A_KEY){ + KeyBoard.Key key = mKeys[mRepeatKeyIndex]; + detectAndSendKey(mCurrentKey, key.x, key.y, mLastTapTime); + return true; + } + return false; + } + + protected void swipeRight() { + mKeyboardActionListener.swipeRight(); + } + + protected void swipeLeft() { + mKeyboardActionListener.swipeLeft(); + } + + protected void swipeUp() { + mKeyboardActionListener.swipeUp(); + } + + protected void swipeDown() { + mKeyboardActionListener.swipeDown(); + } + + public void closing() { + if (mPreviewPopup.isShowing()) { + mPreviewPopup.dismiss(); + } + removeMessages(); + + dismissPopupKeyboard(); + mBuffer = null; + mCanvas = null; + mMiniKeyboardCache.clear(); + } + + private void removeMessages() { + if (mHandler != null) { + mHandler.removeMessages(MSG_REPEAT); + mHandler.removeMessages(MSG_LONGPRESS); + mHandler.removeMessages(MSG_SHOW_PREVIEW); + } + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + closing(); + } + + private void dismissPopupKeyboard() { + if (mPopupKeyboard.isShowing()) { + mPopupKeyboard.dismiss(); + mMiniKeyboardOnScreen = false; + invalidateAllKeys(); + } + } + + public boolean handleBack() { + if (mPopupKeyboard.isShowing()) { + dismissPopupKeyboard(); + return true; + } + return false; + } + + private void resetMultiTap() { + mLastSentIndex = NOT_A_KEY; + mTapCount = 0; + mLastTapTime = -1; + mInMultiTap = false; + } + + private void checkMultiTap(long eventTime, int keyIndex) { + if (keyIndex == NOT_A_KEY) return; + KeyBoard.Key key = mKeys[keyIndex]; + if (key.codes.length > 1) { + mInMultiTap = true; + if (eventTime < mLastTapTime + MULTITAP_INTERVAL + && keyIndex == mLastSentIndex) { + mTapCount = (mTapCount + 1) % key.codes.length; + return; + } else { + mTapCount = -1; + return; + } + } + if (eventTime > mLastTapTime + MULTITAP_INTERVAL || keyIndex != mLastSentIndex) { + resetMultiTap(); + } + } + + private static class SwipeTracker { + + static final int NUM_PAST = 4; + static final int LONGEST_PAST_TIME = 200; + + final float mPastX[] = new float[NUM_PAST]; + final float mPastY[] = new float[NUM_PAST]; + final long mPastTime[] = new long[NUM_PAST]; + + float mYVelocity; + float mXVelocity; + + public void clear() { + mPastTime[0] = 0; + } + + public void addMovement(MotionEvent ev) { + long time = ev.getEventTime(); + final int N = ev.getHistorySize(); + for (int i=0; i= 0) { + final int start = drop+1; + final int count = NUM_PAST-drop-1; + System.arraycopy(pastX, start, pastX, 0, count); + System.arraycopy(pastY, start, pastY, 0, count); + System.arraycopy(pastTime, start, pastTime, 0, count); + i -= (drop+1); + } + pastX[i] = x; + pastY[i] = y; + pastTime[i] = time; + i++; + if (i < NUM_PAST) { + pastTime[i] = 0; + } + } + + public void computeCurrentVelocity(int units) { + computeCurrentVelocity(units, Float.MAX_VALUE); + } + + public void computeCurrentVelocity(int units, float maxVelocity) { + final float[] pastX = mPastX; + final float[] pastY = mPastY; + final long[] pastTime = mPastTime; + + final float oldestX = pastX[0]; + final float oldestY = pastY[0]; + final long oldestTime = pastTime[0]; + float accumX = 0; + float accumY = 0; + int N=0; + while (N < NUM_PAST) { + if (pastTime[N] == 0) { + break; + } + N++; + } + + for (int i=1; i < N; i++) { + final int dur = (int)(pastTime[i] - oldestTime); + if (dur == 0) continue; + float dist = pastX[i] - oldestX; + float vel = (dist/dur) * units; // pixels/frame. + if (accumX == 0) accumX = vel; + else accumX = (accumX + vel) * .5f; + + dist = pastY[i] - oldestY; + vel = (dist/dur) * units; // pixels/frame. + if (accumY == 0) accumY = vel; + else accumY = (accumY + vel) * .5f; + } + mXVelocity = accumX < 0.0f ? Math.max(accumX, -maxVelocity) + : Math.min(accumX, maxVelocity); + mYVelocity = accumY < 0.0f ? Math.max(accumY, -maxVelocity) + : Math.min(accumY, maxVelocity); + } + + public float getXVelocity() { + return mXVelocity; + } + + public float getYVelocity() { + return mYVelocity; + } + } +} + diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java b/app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java new file mode 100644 index 0000000..1330821 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java @@ -0,0 +1,167 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; + +import java.util.List; + +public class MyKeyBoardView extends KeyBoardView{ + private CustomViewConfig config = new CustomViewConfig(); + private int shift_status = 0; + private int viewType = 0; + + private Context context; + + public void setShift_status(int shift_status) { + this.shift_status = shift_status; + } + + public int getShift_status() { + return shift_status; + } + + public void setViewType(int viewType) { + this.viewType = viewType; + } + + public int getViewType() { + return viewType; + } + + public MyKeyBoardView(Context context, AttributeSet attrs) { + + super(context, attrs); + initView(); + } + + public MyKeyBoardView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(); + } + + public MyKeyBoardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + initView(); + } + + + private Paint mPaint; + private int leftPressedColor = 0xFFFF0000; + private int rightPressedColor = 0xFFAA0000; + private int action = -10; + private Paint paint = new Paint(); + private Path pathLeft = new Path(); + + + private void initView() { + config.init(); + context = getContext(); + mPaint = new Paint(); + mPaint.setTextAlign(Paint.Align.CENTER); + float textSize = MyTools.spToPpx(16f, context); + mPaint.setTextSize(textSize); + mPaint.setColor(config.getKeyNoramlcolor()); + } + + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + + + KeyBoard keyboard = getKeyboard(); + List keys = keyboard.getKeys(); + for (int r = 0; r < keys.size(); r++) { + KeyBoard.Key key = keys.get(r); + int code = key.codes[0]; + + mPaint.setColor(config.getKeyActioncolor()); + if (code == KeyBoard.KEYCODE_MODE_CHANGE) { + + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + onDrawLabel(key, canvas); + + } else if (code == KeyBoard.KEYCODE_SHIFT) { + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + DrawIcon.INSTANCE.onDrawKeyIcon(key, getShiftDraw(), canvas, this); + + } else if (code == KeyBoard.KEYCODE_SHIFT_123) { + + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); +// DrawIcon.INSTANCE.onDrawKeyIcon(key, getShiftDraw(), canvas, this); + onDrawLabel(key, canvas); + + } else if (code == KeyBoard.KEYCODE_SHIFT_SYMBOL) { + + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); +// DrawIcon.INSTANCE.onDrawKeyIcon(key, getShiftDraw(), canvas, this); + onDrawLabel(key, canvas); + + } else if (code == KeyBoard.KEYCODE_DONE) { + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + onDrawLabel(key, canvas); + } else if (code == KeyBoard.KEYCODE_DELETE) { + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + DrawIcon.INSTANCE.onDrawKeyIcon(key, config.getIconDel(), canvas, this); + onDrawLabel(key, canvas); + } else { + mPaint.setColor(config.getKeyNoramlcolor()); + onDrawKeyBackground(key, config.getBgNormalDraw(), canvas); + onDrawLabel(key, canvas); + } + } + + + + } + + + + + public void updateConfigView(Context con) { + config.updateConfig(con); + setBackground(config.getBG()); + invalidateAllKeys(); + + } + + private Drawable getShiftDraw() { + if (shift_status == 0) { + return config.getIconShift(); + } else if (shift_status == 1) { + return config.getIconShiftLock(); + } else { + return config.getIconShiftLock(); + } + } + + + private void onDrawKeyBackground(KeyBoard.Key myKey, + Drawable keyBG, + Canvas canvas) { + if (keyBG != null) { + Rect rect = new Rect(myKey.x + getPaddingLeft(), myKey.y + getPaddingTop(), myKey.width + myKey.x + getPaddingLeft(), myKey.height + myKey.y + getPaddingTop()); + keyBG.setBounds(rect); + keyBG.setState(myKey.getCurrentDrawableState()); + keyBG.draw(canvas); + } + } + + private void onDrawLabel( + KeyBoard.Key myKey, + Canvas canvas) { + boolean b = myKey.label == null || myKey.label == ""; + if (!b) { + float y1 = myKey.y + getPaddingRight() + (myKey.height/ 2f) + ((mPaint.getTextSize() - mPaint.descent()) / 2f); + float x1 = myKey.x + getPaddingLeft() + ((myKey.width / 2f)); + canvas.drawText(myKey.label.toString(), x1, y1, mPaint); + + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/MyService.java b/app/src/main/java/com/example/fingerkeyboard/tool/MyService.java new file mode 100644 index 0000000..431ef74 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/MyService.java @@ -0,0 +1,200 @@ +package com.example.fingerkeyboard.tool; + +import android.inputmethodservice.InputMethodService; +import android.os.SystemClock; +import android.view.LayoutInflater; +import android.view.View; +import android.view.inputmethod.EditorInfo; + + +import com.example.fingerkeyboard.R; + +import java.util.List; + +public class MyService extends InputMethodService implements KeyBoardView.OnKeyboardActionListener{ + private long last_click = -1L; + + + private int[] ViewXmls = new int[3]; + + private boolean is_double = false; + + private MyKeyBoardView myKeyBoardView; + + + + + + + @Override + public View onCreateInputView() { + ViewXmls[0] = R.xml.view_1; + ViewXmls[1] = R.xml.view_2; + ViewXmls[2] = R.xml.view_3; + + View inputView = LayoutInflater.from(this).inflate(R.layout.customer_input_view, null, false); + + + myKeyBoardView = (MyKeyBoardView) inputView.findViewById(R.id.my_keyboard_view); + myKeyBoardView.setPreviewEnabled(false); + + + myKeyBoardView.setKeyboard(new KeyBoard(this, ViewXmls[0]));//将自定义的键盘布局到KeyBoard上 + myKeyBoardView.setOnKeyboardActionListener(this);//设置键盘事件监听器方法 + return inputView; + } + + + + + @Override + public void onWindowShown() { + super.onWindowShown(); + myKeyBoardView.updateConfigView(this); + } + + + + @Override + public void onPress(int primaryCode) {//双击 + if(primaryCode == KeyBoard.KEYCODE_SHIFT){ + if(300 > SystemClock.elapsedRealtime() - last_click){ + is_double = true; + + } + last_click = SystemClock.elapsedRealtime(); + + } + + } + + @Override + public void onRelease(int primaryCode) { + + } + + + + private void switchCapital(Boolean toCapital, KeyBoard keyboard) { + + List keys = keyboard.getKeys(); + for(int n=1;n parseJsonString(String jsonString) { + List myDataArrayList = new ArrayList<>(); + try { + JSONObject string1 = new JSONObject(jsonString); + JSONArray list = string1.getJSONArray("list"); + for (int g = 0; g < list.length(); g++) { + MyData myData = new MyData(); + JSONObject item = list.getJSONObject(g); + String preview = item.getString("preview"); + String thumb = item.getString("thumb"); + String title = item.getString("title"); + String zipUrl = item.getString("zipUrl"); + myData.setPreview(String.valueOf(preview)); + myData.setThumb(thumb); + myData.setZipUrl(zipUrl); + myData.setResourseName(title); + myDataArrayList.add(myData); + } + return myDataArrayList; + } catch (JSONException jsonException) { + return null; + } + } + + public static void goSetStep2() { + methodManager.showInputMethodPicker(); + } + public static boolean isStep2() { + String string = Settings.Secure.getString(KeyBoard.app.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); + if (string.startsWith(KeyBoard.app.getPackageName())) { + return true; + } else { + return false; + } + } + + public static void goSetStep1(Context context) { + Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS); + context.startActivity(intent); + } + + public static boolean isStep1() { + for (InputMethodInfo inputMethodInfo : methodManager.getEnabledInputMethodList()) { + if (inputMethodInfo.getId().startsWith(KeyBoard.app.getPackageName())) { + return true; + } + } + return false; + } + + public static void downloadZip(String url, Context context, DownloadCallback callback) { + + Glide.with(context) + .asFile() + .load(url) + .addListener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { + callback.onDownloadCall(false, null); + return false; + } + + @Override + public boolean onResourceReady(@NonNull File resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { + callback.onDownloadCall(true, resource); + return false; + } + } + ).preload(); + + + } + + public static void unzipFile( + String unzipPath, + File resource, + UnzipCallback unzipCallback + ) { + if (!resource.exists()) { + unzipCallback.onUnzipCall(false, ""); + return; + } + String itemFilePath = ""; + + RandomAccessFileOutStream outStream = null; + IInArchive openInArchive; + RandomAccessFileInStream randomAccessFileInStream; + try { + randomAccessFileInStream = new RandomAccessFileInStream(new RandomAccessFile(resource, "r")); + openInArchive = SevenZip.openInArchive( + ArchiveFormat.SEVEN_ZIP, + randomAccessFileInStream + ); + + ISimpleInArchiveItem[] archiveItems = openInArchive.getSimpleInterface().getArchiveItems(); + for (int d = 0; d < archiveItems.length; d++) { + ISimpleInArchiveItem simple = archiveItems[d]; + File file = new File(unzipPath, simple.getPath()); + if (!simple.isFolder()) { + outStream = new RandomAccessFileOutStream(new RandomAccessFile(file, "rw")); + simple.extractSlow(outStream); + itemFilePath = file.getPath(); + + } else { + boolean mkdirs = file.mkdirs(); + } + } + randomAccessFileInStream.close(); + openInArchive.close(); + if (outStream != null) { + outStream.close(); + } + int res = itemFilePath.indexOf("res"); + String substring = itemFilePath.substring(0, res + 3); + unzipCallback.onUnzipCall(true, substring); + + } catch (FileNotFoundException | SevenZipException e) { + unzipCallback.onUnzipCall(false, ""); + + } catch (IOException e) { + unzipCallback.onUnzipCall(false, ""); + throw new RuntimeException(e); + } + + + } + + +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java b/app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java new file mode 100644 index 0000000..8e9224a --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java @@ -0,0 +1,56 @@ +package com.example.fingerkeyboard.tool; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +public class SpaceItem extends RecyclerView.ItemDecoration { + private int ex_space = 0; + private int v_space = 0; + private int h_space = 0; + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + + int position = parent.getChildAdapterPosition(view); + int spanSize = 1; + int spanIndex = 0; + int spanCount = 1; + + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + + if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager layoutManager1 = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = layoutManager1.getSpanCount(); + spanSize = layoutManager1.getSpanSizeLookup().getSpanSize(position); + spanIndex = layoutParams.getSpanIndex(); + + } + + + if (spanSize == spanCount) { + outRect.left = v_space + ex_space; + outRect.right = v_space + ex_space; + outRect.bottom = h_space; + } else { + int itemAllSpacing = (v_space * (spanCount + 1) + ex_space * 2) / spanCount; + int left = v_space * (spanIndex + 1) - itemAllSpacing * spanIndex + ex_space; + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h_space; + } + + } + + public SpaceItem(int v_space, int h_space, int ex_space) { + this.ex_space = ex_space; + this.h_space = h_space; + this.v_space = v_space; + + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/customerText.java b/app/src/main/java/com/example/fingerkeyboard/tool/customerText.java new file mode 100644 index 0000000..dfc9d49 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/customerText.java @@ -0,0 +1,44 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class customerText extends androidx.appcompat.widget.AppCompatTextView { + + + public customerText(@NonNull Context context) { + super(context); + } + + public customerText(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public customerText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + CharSequence text = getText(); + + } +} diff --git a/app/src/main/res/drawable/btn_download_background.xml b/app/src/main/res/drawable/btn_download_background.xml new file mode 100644 index 0000000..70988e1 --- /dev/null +++ b/app/src/main/res/drawable/btn_download_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_main_normal.xml b/app/src/main/res/drawable/btn_main_normal.xml new file mode 100644 index 0000000..26744e5 --- /dev/null +++ b/app/src/main/res/drawable/btn_main_normal.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_main_selected.xml b/app/src/main/res/drawable/btn_main_selected.xml new file mode 100644 index 0000000..7135697 --- /dev/null +++ b/app/src/main/res/drawable/btn_main_selected.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/de_keyboard_bg.xml b/app/src/main/res/drawable/de_keyboard_bg.xml new file mode 100644 index 0000000..7e0c160 --- /dev/null +++ b/app/src/main/res/drawable/de_keyboard_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/del_icon.xml b/app/src/main/res/drawable/del_icon.xml new file mode 100644 index 0000000..1c653c8 --- /dev/null +++ b/app/src/main/res/drawable/del_icon.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/home_tab_selector.xml b/app/src/main/res/drawable/home_tab_selector.xml new file mode 100644 index 0000000..f682937 --- /dev/null +++ b/app/src/main/res/drawable/home_tab_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ico_shift_lit.xml b/app/src/main/res/drawable/ico_shift_lit.xml new file mode 100644 index 0000000..858c5ef --- /dev/null +++ b/app/src/main/res/drawable/ico_shift_lit.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_back.xml b/app/src/main/res/drawable/icon_back.xml new file mode 100644 index 0000000..aa1e2cf --- /dev/null +++ b/app/src/main/res/drawable/icon_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_download.xml b/app/src/main/res/drawable/icon_download.xml new file mode 100644 index 0000000..ec67a29 --- /dev/null +++ b/app/src/main/res/drawable/icon_download.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/iv_back_background.xml b/app/src/main/res/drawable/iv_back_background.xml new file mode 100644 index 0000000..79e977a --- /dev/null +++ b/app/src/main/res/drawable/iv_back_background.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/step_background.xml b/app/src/main/res/drawable/step_background.xml new file mode 100644 index 0000000..70988e1 --- /dev/null +++ b/app/src/main/res/drawable/step_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/step_background_selected.xml b/app/src/main/res/drawable/step_background_selected.xml new file mode 100644 index 0000000..40a6b83 --- /dev/null +++ b/app/src/main/res/drawable/step_background_selected.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/step_selector.xml b/app/src/main/res/drawable/step_selector.xml new file mode 100644 index 0000000..49be956 --- /dev/null +++ b/app/src/main/res/drawable/step_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..bbc16cc --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,40 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..ac84fc5 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml new file mode 100644 index 0000000..7fba293 --- /dev/null +++ b/app/src/main/res/layout/activity_preview.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..e2be7a3 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/customer_input_view.xml b/app/src/main/res/layout/customer_input_view.xml new file mode 100644 index 0000000..cb62a53 --- /dev/null +++ b/app/src/main/res/layout/customer_input_view.xml @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_aesthetic.xml b/app/src/main/res/layout/fragment_aesthetic.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_aesthetic.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_cool.xml b/app/src/main/res/layout/fragment_cool.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_cool.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_cute.xml b/app/src/main/res/layout/fragment_cute.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_cute.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_festival.xml b/app/src/main/res/layout/fragment_festival.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_festival.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_gravity.xml b/app/src/main/res/layout/fragment_gravity.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_gravity.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_love.xml b/app/src/main/res/layout/fragment_love.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_love.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_neon.xml b/app/src/main/res/layout/fragment_neon.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_neon.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_super.xml b/app/src/main/res/layout/fragment_super.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_super.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_thumb.xml b/app/src/main/res/layout/list_thumb.xml new file mode 100644 index 0000000..679f899 --- /dev/null +++ b/app/src/main/res/layout/list_thumb.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..da6d363 --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/app/src/main/res/mipmap-hdpi/down.png b/app/src/main/res/mipmap-hdpi/down.png new file mode 100644 index 0000000000000000000000000000000000000000..d8428079ac5b98046eec0d5231d191ffb7bfd4ae GIT binary patch literal 2302 zcmeHJ`#02S93G5(M=oPrioUI{Z73;3Xj-Gby39qAIVHkSVN>HaB5dO_g=kIF5X~{A zZP5i|i6+e$ZL~uosYvK%W+%#hYLZ#@yXWkmu)pj%{qVle=REK8eBSeUetF-#J-bPU z`d0cV6v~i7-cCcX{htLaLH3$J;bjE05@{rFl&~8dMWKK@lMZ(d#}lBbq07a-deb`A;Q*BvlXSi z41<4xKnVr{uIXs+2OvPEqYd1*%*-r6nYR5=a1%mf@#G%H)14@oF?3zu8wIn`UG6bx z?6<@JcL-N};M;@a<59PoIthzz2Cd_BuUjpD-$orRdpdeN!}Ghzn8536ZKjH3fr;Jn zI?sxYQ8QtWgO1y_yKeCEHJGwdYE1m?de=%m3S`#=v%{x*r}I9{r?)J6zCFPAxoZ+3 z9+vvq{}p3XLi^eq>|D%p3`$H)oFyndKjn?39vdm_%N?2ivT?eEAx^1rMBe~LMBzrc zt>Q!8W*RtLG+5xbchaHfxa)vI_XZ!VMSsb}o6FLc=PY4*y7fH3pSLKl1Gk)laiw@e z#e2J@(Qp({UK-9IrATi!)syX6gOh4&@qw<+n!I==Z$u(d z`K%9uV`F2byEUKQwp|QsHlVz^;&BT+SLLu+>>t1#j#W?28Q!zfs(ki+hc4BpJ%Rpp zA%4@zi@3htezLxcRODM&O6F8{Nh#?u4S%ik)#P?1Mc}e!wgl|GI`hAfAJ#9buCwfyxDfv zR(N8Oxs*VCXHf?E1xKrvWk*Ihh7H%?smwJQTc=Z1y-szPJ@WBM>1R7^=7XzBio_-n z43NU$LAeFN%hZsQC8Y&Fom=j*M zKT!}7S$`{ulgzC4#@cn%>STd2iogPh+^bq)T;<3As;r{AzxYH1oJ8r^aApxWSAT53 zExC=t1|#*Ps~EcGgf zh-5bSDOdbp)oJtXK{)x5goZ)Sokw6ZTgydJ#lhvTM0uhK|31}?5Qn@eHb6bpRUf^Q zskxU2DG%FzjYhqkm3+NG#*Grlt-4YF)d%eYZ9@K z&qlBtejIb5a1ZA|d}wxSXc`Zaog}!xe;yXM<6(}aP6YeW(i0Pic2+4v^UJ2!A#E)H z4yN8f-dBjPP(`-9&Y%nD?>KCLEgnf9ScfVETflR&dEG&yW;6CWa4}ij>}$_*JGnT) z>Yf{!P61oQC1u$F)b4#H%+WQ!et_Yn5KIairnt1P>6ua@Vpulk9a|xeEmgbiz|(w1KOajE4!PTd_)1AiWgD zKBC-qq8oYE2&m$IyG-ciT+by}Ep&oWrlJu8eY5^&F)ipNYLh-|#+tauhXzI2v3tAF HJDmMD@`B^T literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2dfe3d1ba5cf3ee31b3ecc1ced89044a1f3b7a9 GIT binary patch literal 2898 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/logo.png b/app/src/main/res/mipmap-hdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..46979fc485f9bd3ffe344d319b1b986c964cb54b GIT binary patch literal 58504 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

l47>eP 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%0At3RUx1ycfhtu|s2djZWxYINIa+%1+VQv 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/setting.png b/app/src/main/res/mipmap-hdpi/setting.png new file mode 100644 index 0000000000000000000000000000000000000000..61b9bd90f43a60748b84e20ab4c109c75006b706 GIT binary patch literal 464 zcmV;>0WbcEP)=*eeNQkLnsjvHLXc z^p^R#8Wi>YYFaB^W?2CR@Kaf(qUHsmndJoxJZ~SvPK?Nu1bT#Eg&Y^fvEvi6U{w=X zhxKG8i8X>CJO~-~qD}&8x~ccP_el0wqXkg7XQA0v@}MCXY61FS(#|jB_3{fMnSPa9 zImNRW(Jbkkejy@s)R@m{$~TB`uH=jiw?NBf9t^`YakcAXH>tPVTwo#fh*2 zh!RFWD}=f}O4kF&672*p;nfmI7g5|*VocbvtG!N#PKp=0a(ZJyWXlQ@$$zA7^rk2X zu00R(sofuS@8|H}=uf|hDvvOuSxB?q^dw=kKk3}T#^@8cN`9lkjOjQ40000B%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!TQj4N+cqN`nQhxvX7dAV-`K|Ub$-q+H-5I?Tx0g9jWxd@A|?POE8`3b8fO$T))xP* z(X?&brZw({`)WU&rdAs1iTa0x6F@PIxJ&&L|dpySV!ID|iUhjCcKz(@mE z!x@~W#3H<)4Ae(4eQJRk`Iz3<1)6^m)0b_4_TRZ+cz#eD3f8V;2r-1fE!F}W zEi0MEkTTx}8i1{`l_6vo0(Vuh0HD$I4SjZ=?^?k82R51bC)2D_{y8mi_?X^=U?2|F{Vr7s!k(AZC$O#ZMyavHhlQ7 zUR~QXuH~#o#>(b$u4?s~HLF*3IcF7023AlwAYudn0FV~|odGH^05AYPEfR)8p`i{n zwg3zPVp{+wOsxKc>)(pMupKF!Y2HoUqQ3|Yu|8lwR=?5zZuhG6J?H`bSNk_wPoM{u zSL{c@pY7+c2kck>`^q1^^gR0QB7Y?KUD{vz-uVX~;V-rW)PDcI)$_UjgVV?S?=oLR zf4}zz{#*R_{LkiJ#0RdQLNC^2Vp%JPEUvG9ra2BVZ92(p9h7Ka@!yf9(lj#}>+|u* z;^_?KWdzkM`6gqPo9;;r6&JEa)}R3X{(CWv?NvgLeOTq$cZXqf7|sPImi-7cS8DCN zGf;DVt3Am`>hH3{4-WzH43Ftx)SofNe^-#|0HdCo<+8Qs!}TZP{HH8~z5n`ExcHuT zDL1m&|DVpIy=xsLO>8k92HcmfSKhflQ0H~9=^-{#!I1g(;+44xw~=* zxvNz35vfsQE)@)Zsp*6_GjYD};Squ83<_?^SbALb{a`j<0Gn%6JY!zhp=Fg}Ga2|8 z52e1WU%^L1}15Ex0fF$e@eCT(()_P zvV?CA%#Sy08_U6VPt4EtmVQraWJX` zh=N|WQ>LgrvF~R&qOfB$!%D3cGv?;Xh_z$z7k&s4N)$WYf*k=|*jCEkO19{h_(%W4 zPuOqbCw`SeAX*R}UUsbVsgtuG?xs(#Ikx9`JZoQFz0n*7ZG@Fv@kZk`gzO$HoA9kN z8U5{-yY zvV{`&WKU2$mZeoBmiJrEdzUZAv1sRxpePdg1)F*X^Y)zp^Y*R;;z~vOv-z&)&G)JQ{m!C9cmziu1^nHA z`#`0c>@PnQ9CJKgC5NjJD8HM3|KC(g5nnCq$n0Gsu_DXk36@ql%npEye|?%RmG)

FJ$wK}0tWNB{uH;AM~i literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..948a3070fe34c611c42c0d3ad3013a0dce358be0 GIT binary patch literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&il$0000G0001A003VA06|PpNH75a00DqwTbm-~ zullQTcXxO9ki!OCRx^i?oR|n!<8G0=kI^!JSjFi-LL*`V;ET0H2IXfU0*i>o6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f GIT binary patch literal 3918 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�(p-{x$&=IACIfoAR!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0xPs?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeNo!9>IaV6aUZ*?W>} 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

UmY2RIYtNPVDpE$%vda+HD#3m z&VuXJ{BK&Qe+rBa7eq}Q(bq|tn(RrJAk|ztj2(i{d>nmQnM?;HF2k&9sA6up5tmjl z7lySlzMbifH17-m-Lwa_F&e7nOH?ESi3#ckR3tsM+jsck3`oG!uMS}|eAwVXv>}qxwq?QY%QJ0}r@^;fhuUA9W z*BVl>TGo&N004@xSiwDUXUvp51sVmqO3m)=B55aPwf@0=e}cN+$-BdKxY`YrT_4)0 z_d10#i44Q*rFr8MC>*)v$EJvz``(pb{e&*6k+b zsMz%($|1+8hn8c2?P(l@;Rb&CsZeYoCI3?2!LqjbwPXW3z4G$Qfj=cT5Yb%vY0(AX oeb?AaKtwrnc|$|zzw9vfvn^aJJ!zd)XFXqqy0000001=f@-~a#s literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..d67a3a0 --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml new file mode 100644 index 0000000..d278977 --- /dev/null +++ b/app/src/main/res/values/array.xml @@ -0,0 +1,9 @@ + + + + neon + cool + aesthetic + btn_super + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..1732fe9 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,12 @@ + + + #FF000000 + #FFFFFFFF + #8E63DA + #C3AFE6 + #80FFFFFF + #80787373 + #8E63DA + #BC9BF6 + #DCDCDC + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..8936f1e --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,11 @@ + + Finger Keyboard + Step One + Step Two + For normal use, please enter the setting to complete the setting steps. + Apply the keyboard skin successfully + Settings + + Hello blank fragment + + \ No newline at end of file diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml new file mode 100644 index 0000000..dbbad75 --- /dev/null +++ b/app/src/main/res/values/style.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..de3b1e5 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..fa0f996 --- /dev/null +++ b/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..9ee9997 --- /dev/null +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/im.xml b/app/src/main/res/xml/im.xml new file mode 100644 index 0000000..aeaa192 --- /dev/null +++ b/app/src/main/res/xml/im.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/view_1.xml b/app/src/main/res/xml/view_1.xml new file mode 100644 index 0000000..5f11dac --- /dev/null +++ b/app/src/main/res/xml/view_1.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/view_2.xml b/app/src/main/res/xml/view_2.xml new file mode 100644 index 0000000..ab093d8 --- /dev/null +++ b/app/src/main/res/xml/view_2.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/view_3.xml b/app/src/main/res/xml/view_3.xml new file mode 100644 index 0000000..eaf0ef4 --- /dev/null +++ b/app/src/main/res/xml/view_3.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java b/app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java new file mode 100644 index 0000000..083f791 --- /dev/null +++ b/app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.example.fingerkeyboard; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..5f3e9e5 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,6 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.jetbrains.kotlin.android) apply false + +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..f9d6d06 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true +android.nonFinalResIds=false +android.enableR8.fullMode=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..2d44564 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,24 @@ +[versions] +agp = "8.4.0" +junit = "4.13.2" +junitVersion = "1.1.5" +espressoCore = "3.5.1" +appcompat = "1.7.0" +material = "1.12.0" +kotlin = "2.0.0" +activity = "1.9.0" +constraintlayout = "2.1.4" + +[libraries] +junit = { group = "junit", name = "junit", version.ref = "junit" } +ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } +constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 zcma&O1CT9Y(k9%tZQHhO+qUh#ZQHhO+qmuS+qP|E@9xZO?0h@l{(r>DQ>P;GjjD{w zH}lENr;dU&FbEU?00aa80D$0M0RRB{U*7-#kbjS|qAG&4l5%47zyJ#WrfA#1$1Ctx zf&Z_d{GW=lf^w2#qRJ|CvSJUi(^E3iv~=^Z(zH}F)3Z%V3`@+rNB7gTVU{Bb~90p|f+0(v;nz01EG7yDMX9@S~__vVgv%rS$+?IH+oZ03D5zYrv|^ zC1J)SruYHmCki$jLBlTaE5&dFG9-kq3!^i>^UQL`%gn6)jz54$WDmeYdsBE9;PqZ_ zoGd=P4+|(-u4U1dbAVQrFWoNgNd;0nrghPFbQrJctO>nwDdI`Q^i0XJDUYm|T|RWc zZ3^Qgo_Qk$%Fvjj-G}1NB#ZJqIkh;kX%V{THPqOyiq)d)0+(r9o(qKlSp*hmK#iIY zA^)Vr$-Hz<#SF=0@tL@;dCQsm`V9s1vYNq}K1B)!XSK?=I1)tX+bUV52$YQu*0%fnWEukW>mxkz+%3-S!oguE8u#MGzST8_Dy^#U?fA@S#K$S@9msUiX!gd_ow>08w5)nX{-KxqMOo7d?k2&?Vf z&diGDtZr(0cwPe9z9FAUSD9KC)7(n^lMWuayCfxzy8EZsns%OEblHFSzP=cL6}?J| z0U$H!4S_TVjj<`6dy^2j`V`)mC;cB%* z8{>_%E1^FH!*{>4a7*C1v>~1*@TMcLK{7nEQ!_igZC}ikJ$*<$yHy>7)oy79A~#xE zWavoJOIOC$5b6*q*F_qN1>2#MY)AXVyr$6x4b=$x^*aqF*L?vmj>Mgv+|ITnw_BoW zO?jwHvNy^prH{9$rrik1#fhyU^MpFqF2fYEt(;4`Q&XWOGDH8k6M=%@fics4ajI;st# zCU^r1CK&|jzUhRMv;+W~6N;u<;#DI6cCw-otsc@IsN3MoSD^O`eNflIoR~l4*&-%RBYk@gb^|-JXs&~KuSEmMxB}xSb z@K76cXD=Y|=I&SNC2E+>Zg?R6E%DGCH5J1nU!A|@eX9oS(WPaMm==k2s_ueCqdZw| z&hqHp)47`c{BgwgvY2{xz%OIkY1xDwkw!<0veB#yF4ZKJyabhyyVS`gZepcFIk%e2 zTcrmt2@-8`7i-@5Nz>oQWFuMC_KlroCl(PLSodswHqJ3fn<;gxg9=}~3x_L3P`9Sn zChIf}8vCHvTriz~T2~FamRi?rh?>3bX1j}%bLH+uFX+p&+^aXbOK7clZxdU~6Uxgy z8R=obwO4dL%pmVo*Ktf=lH6hnlz_5k3cG;m8lgaPp~?eD!Yn2kf)tU6PF{kLyn|oI@eQ`F z3IF7~Blqg8-uwUuWZScRKn%c2_}dXB6Dx_&xR*n9M9LXasJhtZdr$vBY!rP{c@=)& z#!?L$2UrkvClwQO>U*fSMs67oSj2mxiJ$t;E|>q%Kh_GzzWWO&3;ufU%2z%ucBU8H z3WIwr$n)cfCXR&>tyB7BcSInK>=ByZA%;cVEJhcg<#6N{aZC4>K41XF>ZgjG`z_u& zGY?;Ad?-sgiOnI`oppF1o1Gurqbi*;#x2>+SSV6|1^G@ooVy@fg?wyf@0Y!UZ4!}nGuLeC^l)6pwkh|oRY`s1Pm$>zZ3u-83T|9 zGaKJIV3_x+u1>cRibsaJpJqhcm%?0-L;2 zitBrdRxNmb0OO2J%Y&Ym(6*`_P3&&5Bw157{o7LFguvxC$4&zTy#U=W*l&(Q2MNO} zfaUwYm{XtILD$3864IA_nn34oVa_g^FRuHL5wdUd)+W-p-iWCKe8m_cMHk+=? zeKX)M?Dt(|{r5t7IenkAXo%&EXIb-i^w+0CX0D=xApC=|Xy(`xy+QG^UyFe z+#J6h_&T5i#sV)hj3D4WN%z;2+jJcZxcI3*CHXGmOF3^)JD5j&wfX)e?-|V0GPuA+ zQFot%aEqGNJJHn$!_}#PaAvQ^{3-Ye7b}rWwrUmX53(|~i0v{}G_sI9uDch_brX&6 zWl5Ndj-AYg(W9CGfQf<6!YmY>Ey)+uYd_JNXH=>|`OH-CDCmcH(0%iD_aLlNHKH z7bcW-^5+QV$jK?R*)wZ>r9t}loM@XN&M-Pw=F#xn(;u3!(3SXXY^@=aoj70;_=QE9 zGghsG3ekq#N||u{4We_25U=y#T*S{4I{++Ku)> zQ!DZW;pVcn>b;&g2;YE#+V`v*Bl&Y-i@X6D*OpNA{G@JAXho&aOk(_j^weW{#3X5Y z%$q_wpb07EYPdmyH(1^09i$ca{O<}7) zRWncXdSPgBE%BM#by!E>tdnc$8RwUJg1*x($6$}ae$e9Knj8gvVZe#bLi!<+&BkFj zg@nOpDneyc+hU9P-;jmOSMN|*H#>^Ez#?;%C3hg_65leSUm;iz)UkW)jX#p)e&S&M z1|a?wDzV5NVnlhRBCd_;F87wp>6c<&nkgvC+!@KGiIqWY4l}=&1w7|r6{oBN8xyzh zG$b#2=RJp_iq6)#t5%yLkKx(0@D=C3w+oiXtSuaQ%I1WIb-eiE$d~!)b@|4XLy!CZ z9p=t=%3ad@Ep+<9003D2KZ5VyP~_n$=;~r&YUg5UZ0KVD&tR1DHy9x)qWtKJp#Kq# zP*8p#W(8JJ_*h_3W}FlvRam?<4Z+-H77^$Lvi+#vmhL9J zJ<1SV45xi;SrO2f=-OB(7#iNA5)x1uNC-yNxUw|!00vcW2PufRm>e~toH;M0Q85MQLWd?3O{i8H+5VkR@l9Dg-ma ze2fZ%>G(u5(k9EHj2L6!;(KZ8%8|*-1V|B#EagbF(rc+5iL_5;Eu)L4Z-V;0HfK4d z*{utLse_rvHZeQ>V5H=f78M3Ntg1BPxFCVD{HbNA6?9*^YIq;B-DJd{Ca2L#)qWP? zvX^NhFmX?CTWw&Ns}lgs;r3i+Bq@y}Ul+U%pzOS0Fcv9~aB(0!>GT0)NO?p=25LjN z2bh>6RhgqD7bQj#k-KOm@JLgMa6>%-ok1WpOe)FS^XOU{c?d5shG(lIn3GiVBxmg`u%-j=)^v&pX1JecJics3&jvPI)mDut52? z3jEA)DM%}BYbxxKrizVYwq?(P&19EXlwD9^-6J+4!}9{ywR9Gk42jjAURAF&EO|~N z)?s>$Da@ikI4|^z0e{r`J8zIs>SpM~Vn^{3fArRu;?+43>lD+^XtUcY1HidJwnR6+ z!;oG2=B6Z_=M%*{z-RaHc(n|1RTKQdNjjV!Pn9lFt^4w|AeN06*j}ZyhqZ^!-=cyGP_ShV1rGxkx8t zB;8`h!S{LD%ot``700d0@Grql(DTt4Awgmi+Yr0@#jbe=2#UkK%rv=OLqF)9D7D1j z!~McAwMYkeaL$~kI~90)5vBhBzWYc3Cj1WI0RS`z000R8-@ET0dA~*r(gSiCJmQMN&4%1D zyVNf0?}sBH8zNbBLn>~(W{d3%@kL_eQ6jEcR{l>C|JK z(R-fA!z|TTRG40|zv}7E@PqCAXP3n`;%|SCQ|ZS%ym$I{`}t3KPL&^l5`3>yah4*6 zifO#{VNz3)?ZL$be;NEaAk9b#{tV?V7 zP|wf5YA*1;s<)9A4~l3BHzG&HH`1xNr#%){4xZ!jq%o=7nN*wMuXlFV{HaiQLJ`5G zBhDi#D(m`Q1pLh@Tq+L;OwuC52RdW7b8}~60WCOK5iYMUad9}7aWBuILb({5=z~YF zt?*Jr5NG+WadM{mDL>GyiByCuR)hd zA=HM?J6l1Xv0Dl+LW@w$OTcEoOda^nFCw*Sy^I@$sSuneMl{4ys)|RY#9&NxW4S)9 zq|%83IpslTLoz~&vTo!Ga@?rj_kw{|k{nv+w&Ku?fyk4Ki4I?);M|5Axm)t+BaE)D zm(`AQ#k^DWrjbuXoJf2{Aj^KT zFb1zMSqxq|vceV+Mf-)$oPflsO$@*A0n0Z!R{&(xh8s}=;t(lIy zv$S8x>m;vQNHuRzoaOo?eiWFe{0;$s`Bc+Osz~}Van${u;g(su`3lJ^TEfo~nERfP z)?aFzpDgnLYiERsKPu|0tq4l2wT)Atr6Qb%m-AUn6HnCue*yWICp7TjW$@sO zm5rm4aTcPQ(rfi7a`xP7cKCFrJD}*&_~xgLyr^-bmsL}y;A5P|al8J3WUoBSjqu%v zxC;mK!g(7r6RRJ852Z~feoC&sD3(6}^5-uLK8o)9{8L_%%rItZK9C){UxB|;G>JbP zsRRtS4-3B*5c+K2kvmgZK8472%l>3cntWUOVHxB|{Ay~aOg5RN;{PJgeVD*H%ac+y!h#wi%o2bF2Ca8IyMyH{>4#{E_8u^@+l-+n=V}Sq?$O z{091@v%Bd*3pk0^2UtiF9Z+(a@wy6 zUdw8J*ze$K#=$48IBi1U%;hmhO>lu!uU;+RS}p&6@rQila7WftH->*A4=5W|Fmtze z)7E}jh@cbmr9iup^i%*(uF%LG&!+Fyl@LFA-}Ca#bxRfDJAiR2dt6644TaYw1Ma79 zt8&DYj31j^5WPNf5P&{)J?WlCe@<3u^78wnd(Ja4^a>{^Tw}W>|Cjt^If|7l^l)^Q zbz|7~CF(k_9~n|h;ysZ+jHzkXf(*O*@5m zLzUmbHp=x!Q|!9NVXyipZ3)^GuIG$k;D)EK!a5=8MFLI_lpf`HPKl=-Ww%z8H_0$j ztJ||IfFG1lE9nmQ0+jPQy zCBdKkjArH@K7jVcMNz);Q(Q^R{d5G?-kk;Uu_IXSyWB)~KGIizZL(^&qF;|1PI7!E zTP`%l)gpX|OFn&)M%txpQ2F!hdA~hX1Cm5)IrdljqzRg!f{mN%G~H1&oqe`5eJCIF zHdD7O;AX-{XEV(a`gBFJ9ews#CVS2y!&>Cm_dm3C8*n3MA*e67(WC?uP@8TXuMroq z{#w$%z@CBIkRM7?}Xib+>hRjy?%G!fiw8! z8(gB+8J~KOU}yO7UGm&1g_MDJ$IXS!`+*b*QW2x)9>K~Y*E&bYMnjl6h!{17_8d!%&9D`a7r&LKZjC<&XOvTRaKJ1 zUY@hl5^R&kZl3lU3njk`3dPzxj$2foOL26r(9zsVF3n_F#v)s5vv3@dgs|lP#eylq62{<-vczqP!RpVBTgI>@O6&sU>W|do17+#OzQ7o5A$ICH z?GqwqnK^n2%LR;$^oZM;)+>$X3s2n}2jZ7CdWIW0lnGK-b#EG01)P@aU`pg}th&J-TrU`tIpb5t((0eu|!u zQz+3ZiOQ^?RxxK4;zs=l8q!-n7X{@jSwK(iqNFiRColuEOg}!7cyZi`iBX4g1pNBj zAPzL?P^Ljhn;1$r8?bc=#n|Ed7wB&oHcw()&*k#SS#h}jO?ZB246EGItsz*;^&tzp zu^YJ0=lwsi`eP_pU8}6JA7MS;9pfD;DsSsLo~ogzMNP70@@;Fm8f0^;>$Z>~}GWRw!W5J3tNX*^2+1f3hz{~rIzJo z6W%J(H!g-eI_J1>0juX$X4Cl6i+3wbc~k146UIX&G22}WE>0ga#WLsn9tY(&29zBvH1$`iWtTe zG2jYl@P!P)eb<5DsR72BdI7-zP&cZNI{7q3e@?N8IKc4DE#UVr->|-ryuJXk^u^>4 z$3wE~=q390;XuOQP~TNoDR?#|NSPJ%sTMInA6*rJ%go|=YjGe!B>z6u$IhgQSwoV* zjy3F2#I>uK{42{&IqP59)Y(1*Z>>#W8rCf4_eVsH)`v!P#^;BgzKDR`ARGEZzkNX+ zJUQu=*-ol=Xqqt5=`=pA@BIn@6a9G8C{c&`i^(i+BxQO9?YZ3iu%$$da&Kb?2kCCo zo7t$UpSFWqmydXf@l3bVJ=%K?SSw)|?srhJ-1ZdFu*5QhL$~-IQS!K1s@XzAtv6*Y zl8@(5BlWYLt1yAWy?rMD&bwze8bC3-GfNH=p zynNFCdxyX?K&G(ZZ)afguQ2|r;XoV^=^(;Cku#qYn4Lus`UeKt6rAlFo_rU`|Rq z&G?~iWMBio<78of-2X(ZYHx~=U0Vz4btyXkctMKdc9UM!vYr~B-(>)(Hc|D zMzkN4!PBg%tZoh+=Gba!0++d193gbMk2&krfDgcbx0jI92cq?FFESVg0D$>F+bil} zY~$)|>1HZsX=5sAZ2WgPB5P=8X#TI+NQ(M~GqyVB53c6IdX=k>Wu@A0Svf5#?uHaF zsYn|koIi3$(%GZ2+G+7Fv^lHTb#5b8sAHSTnL^qWZLM<(1|9|QFw9pnRU{svj}_Al zL)b9>fN{QiA($8peNEJyy`(a{&uh-T4_kdZFIVsKKVM(?05}76EEz?#W za^fiZOAd14IJ4zLX-n7Lq0qlQ^lW8Cvz4UKkV9~P}>sq0?xD3vg+$4vLm~C(+ zM{-3Z#qnZ09bJ>}j?6ry^h+@PfaD7*jZxBEY4)UG&daWb??6)TP+|3#Z&?GL?1i+280CFsE|vIXQbm| zM}Pk!U`U5NsNbyKzkrul-DzwB{X?n3E6?TUHr{M&+R*2%yOiXdW-_2Yd6?38M9Vy^ z*lE%gA{wwoSR~vN0=no}tP2Ul5Gk5M(Xq`$nw#ndFk`tcpd5A=Idue`XZ!FS>Q zG^0w#>P4pPG+*NC9gLP4x2m=cKP}YuS!l^?sHSFftZy{4CoQrb_ z^20(NnG`wAhMI=eq)SsIE~&Gp9Ne0nD4%Xiu|0Fj1UFk?6avDqjdXz{O1nKao*46y zT8~iA%Exu=G#{x=KD;_C&M+Zx4+n`sHT>^>=-1YM;H<72k>$py1?F3#T1*ef9mLZw z5naLQr?n7K;2l+{_uIw*_1nsTn~I|kkCgrn;|G~##hM;9l7Jy$yJfmk+&}W@JeKcF zx@@Woiz8qdi|D%aH3XTx5*wDlbs?dC1_nrFpm^QbG@wM=i2?Zg;$VK!c^Dp8<}BTI zyRhAq@#%2pGV49*Y5_mV4+OICP|%I(dQ7x=6Ob}>EjnB_-_18*xrY?b%-yEDT(wrO z9RY2QT0`_OpGfMObKHV;QLVnrK%mc?$WAdIT`kJQT^n%GuzE7|9@k3ci5fYOh(287 zuIbg!GB3xLg$YN=n)^pHGB0jH+_iIiC=nUcD;G6LuJsjn2VI1cyZx=a?ShCsF==QK z;q~*m&}L<-cb+mDDXzvvrRsybcgQ;Vg21P(uLv5I+eGc7o7tc6`;OA9{soHFOz zT~2?>Ts}gprIX$wRBb4yE>ot<8+*Bv`qbSDv*VtRi|cyWS>)Fjs>fkNOH-+PX&4(~ z&)T8Zam2L6puQl?;5zg9h<}k4#|yH9czHw;1jw-pwBM*O2hUR6yvHATrI%^mvs9q_ z&ccT0>f#eDG<^WG^q@oVqlJrhxH)dcq2cty@l3~|5#UDdExyXUmLQ}f4#;6fI{f^t zDCsgIJ~0`af%YR%Ma5VQq-p21k`vaBu6WE?66+5=XUd%Ay%D$irN>5LhluRWt7 zov-=f>QbMk*G##&DTQyou$s7UqjjW@k6=!I@!k+S{pP8R(2=e@io;N8E`EOB;OGoI zw6Q+{X1_I{OO0HPpBz!X!@`5YQ2)t{+!?M_iH25X(d~-Zx~cXnS9z>u?+If|iNJbx zyFU2d1!ITX64D|lE0Z{dLRqL1Ajj=CCMfC4lD3&mYR_R_VZ>_7_~|<^o*%_&jevU+ zQ4|qzci=0}Jydw|LXLCrOl1_P6Xf@c0$ieK2^7@A9UbF{@V_0p%lqW|L?5k>bVM8|p5v&2g;~r>B8uo<4N+`B zH{J)h;SYiIVx@#jI&p-v3dwL5QNV1oxPr8J%ooezTnLW>i*3Isb49%5i!&ac_dEXv zvXmVUck^QHmyrF8>CGXijC_R-y(Qr{3Zt~EmW)-nC!tiH`wlw5D*W7Pip;T?&j%kX z6DkZX4&}iw>hE(boLyjOoupf6JpvBG8}jIh!!VhnD0>}KSMMo{1#uU6kiFcA04~|7 zVO8eI&x1`g4CZ<2cYUI(n#wz2MtVFHx47yE5eL~8bot~>EHbevSt}LLMQX?odD{Ux zJMnam{d)W4da{l7&y-JrgiU~qY3$~}_F#G7|MxT)e;G{U`In&?`j<5D->}cb{}{T(4DF0BOk-=1195KB-E*o@c?`>y#4=dMtYtSY=&L{!TAjFVcq0y@AH`vH! z$41+u!Ld&}F^COPgL(EE{0X7LY&%D7-(?!kjFF7=qw<;`V{nwWBq<)1QiGJgUc^Vz ztMUlq1bZqKn17|6x6iAHbWc~l1HcmAxr%$Puv!znW)!JiukwIrqQ00|H$Z)OmGG@= zv%A8*4cq}(?qn4rN6o`$Y))(MyXr8R<2S^J+v(wmFmtac!%VOfN?&(8Nr!T@kV`N; z*Q33V3t`^rN&aBiHet)18wy{*wi1=W!B%B-Q6}SCrUl$~Hl{@!95ydml@FK8P=u4s z4e*7gV2s=YxEvskw2Ju!2%{8h01rx-3`NCPc(O zH&J0VH5etNB2KY6k4R@2Wvl^Ck$MoR3=)|SEclT2ccJ!RI9Nuter7u9@;sWf-%um;GfI!=eEIQ2l2p_YWUd{|6EG ze{yO6;lMc>;2tPrsNdi@&1K6(1;|$xe8vLgiouj%QD%gYk`4p{Ktv9|j+!OF-P?@p z;}SV|oIK)iwlBs+`ROXkhd&NK zzo__r!B>tOXpBJMDcv!Mq54P+n4(@dijL^EpO1wdg~q+!DT3lB<>9AANSe!T1XgC=J^)IP0XEZ()_vpu!!3HQyJhwh?r`Ae%Yr~b% zO*NY9t9#qWa@GCPYOF9aron7thfWT`eujS4`t2uG6)~JRTI;f(ZuoRQwjZjp5Pg34 z)rp$)Kr?R+KdJ;IO;pM{$6|2y=k_siqvp%)2||cHTe|b5Ht8&A{wazGNca zX$Ol?H)E_R@SDi~4{d-|8nGFhZPW;Cts1;08TwUvLLv&_2$O6Vt=M)X;g%HUr$&06 zISZb(6)Q3%?;3r~*3~USIg=HcJhFtHhIV(siOwV&QkQe#J%H9&E21!C*d@ln3E@J* zVqRO^<)V^ky-R|%{(9`l-(JXq9J)1r$`uQ8a}$vr9E^nNiI*thK8=&UZ0dsFN_eSl z(q~lnD?EymWLsNa3|1{CRPW60>DSkY9YQ;$4o3W7Ms&@&lv9eH!tk~N&dhqX&>K@} zi1g~GqglxkZ5pEFkllJ)Ta1I^c&Bt6#r(QLQ02yHTaJB~- zCcE=5tmi`UA>@P=1LBfBiqk)HB4t8D?02;9eXj~kVPwv?m{5&!&TFYhu>3=_ zsGmYZ^mo*-j69-42y&Jj0cBLLEulNRZ9vXE)8~mt9C#;tZs;=#M=1*hebkS;7(aGf zcs7zH(I8Eui9UU4L--))yy`&d&$In&VA2?DAEss4LAPCLd>-$i?lpXvn!gu^JJ$(DoUlc6wE98VLZ*z`QGQov5l4Fm_h?V-;mHLYDVOwKz7>e4+%AzeO>P6v}ndPW| zM>m#6Tnp7K?0mbK=>gV}=@k*0Mr_PVAgGMu$j+pWxzq4MAa&jpCDU&-5eH27Iz>m^ zax1?*HhG%pJ((tkR(V(O(L%7v7L%!_X->IjS3H5kuXQT2!ow(;%FDE>16&3r){!ex zhf==oJ!}YU89C9@mfDq!P3S4yx$aGB?rbtVH?sHpg?J5C->!_FHM%Hl3#D4eplxzQ zRA+<@LD%LKSkTk2NyWCg7u=$%F#;SIL44~S_OGR}JqX}X+=bc@swpiClB`Zbz|f!4 z7Ysah7OkR8liXfI`}IIwtEoL}(URrGe;IM8%{>b1SsqXh)~w}P>yiFRaE>}rEnNkT z!HXZUtxUp1NmFm)Dm@-{FI^aRQqpSkz}ZSyKR%Y}YHNzBk)ZIp} zMtS=aMvkgWKm9&oTcU0?S|L~CDqA+sHpOxwnswF-fEG)cXCzUR?ps@tZa$=O)=L+5 zf%m58cq8g_o}3?Bhh+c!w4(7AjxwQ3>WnVi<{{38g7yFboo>q|+7qs<$8CPXUFAN< zG&}BHbbyQ5n|qqSr?U~GY{@GJ{(Jny{bMaOG{|IkUj7tj^9pa9|FB_<+KHLxSxR;@ zHpS$4V)PP+tx}22fWx(Ku9y+}Ap;VZqD0AZW4gCDTPCG=zgJmF{|x;(rvdM|2|9a}cex6xrMkERnkE;}jvU-kmzd%_J50$M`lIPCKf+^*zL=@LW`1SaEc%=m zQ+lT06Gw+wVwvQ9fZ~#qd430v2HndFsBa9WjD0P}K(rZYdAt^5WQIvb%D^Q|pkVE^ zte$&#~zmULFACGfS#g=2OLOnIf2Of-k!(BIHjs77nr!5Q1*I9 z1%?=~#Oss!rV~?-6Gm~BWJiA4mJ5TY&iPm_$)H1_rTltuU1F3I(qTQ^U$S>%$l z)Wx1}R?ij0idp@8w-p!Oz{&*W;v*IA;JFHA9%nUvVDy7Q8woheC#|8QuDZb-L_5@R zOqHwrh|mVL9b=+$nJxM`3eE{O$sCt$UK^2@L$R(r^-_+z?lOo+me-VW=Zw z-Bn>$4ovfWd%SPY`ab-u9{INc*k2h+yH%toDHIyqQ zO68=u`N}RIIs7lsn1D){)~%>ByF<>i@qFb<-axvu(Z+6t7v<^z&gm9McRB~BIaDn$ z#xSGT!rzgad8o>~kyj#h1?7g96tOcCJniQ+*#=b7wPio>|6a1Z?_(TS{)KrPe}(8j z!#&A=k(&Pj^F;r)CI=Z{LVu>uj!_W1q4b`N1}E(i%;BWjbEcnD=mv$FL$l?zS6bW!{$7j1GR5ocn94P2u{ z70tAAcpqtQo<@cXw~@i-@6B23;317|l~S>CB?hR5qJ%J3EFgyBdJd^fHZu7AzHF(BQ!tyAz^L0`X z23S4Fe{2X$W0$zu9gm%rg~A>ijaE#GlYlrF9$ds^QtaszE#4M(OLVP2O-;XdT(XIC zatwzF*)1c+t~c{L=fMG8Z=k5lv>U0;C{caN1NItnuSMp)6G3mbahu>E#sj&oy94KC zpH}8oEw{G@N3pvHhp{^-YaZeH;K+T_1AUv;IKD<=mv^&Ueegrb!yf`4VlRl$M?wsl zZyFol(2|_QM`e_2lYSABpKR{{NlxlDSYQNkS;J66aT#MSiTx~;tUmvs-b*CrR4w=f z8+0;*th6kfZ3|5!Icx3RV11sp=?`0Jy3Fs0N4GZQMN=8HmT6%x9@{Dza)k}UwL6JT zHRDh;%!XwXr6yuuy`4;Xsn0zlR$k%r%9abS1;_v?`HX_hI|+EibVnlyE@3aL5vhQq zlIG?tN^w@0(v9M*&L+{_+RQZw=o|&BRPGB>e5=ys7H`nc8nx)|-g;s7mRc7hg{GJC zAe^vCIJhajmm7C6g! zL&!WAQ~5d_5)00?w_*|*H>3$loHrvFbitw#WvLB!JASO?#5Ig5$Ys10n>e4|3d;tS zELJ0|R4n3Az(Fl3-r^QiV_C;)lQ1_CW{5bKS15U|E9?ZgLec@%kXr84>5jV2a5v=w z?pB1GPdxD$IQL4)G||B_lI+A=08MUFFR4MxfGOu07vfIm+j=z9tp~5i_6jb`tR>qV z$#`=BQ*jpCjm$F0+F)L%xRlnS%#&gro6PiRfu^l!EVan|r3y}AHJQOORGx4~ z&<)3=K-tx518DZyp%|!EqpU!+X3Et7n2AaC5(AtrkW>_57i}$eqs$rupubg0a1+WO zGHZKLN2L0D;ab%{_S1Plm|hx8R?O14*w*f&2&bB050n!R2by zw!@XOQx$SqZ5I<(Qu$V6g>o#A!JVwErWv#(Pjx=KeS0@hxr4?13zj#oWwPS(7Ro|v z>Mp@Kmxo79q|}!5qtX2-O@U&&@6s~!I&)1WQIl?lTnh6UdKT_1R640S4~f=_xoN3- zI+O)$R@RjV$F=>Ti7BlnG1-cFKCC(t|Qjm{SalS~V-tX#+2ekRhwmN zZr`8{QF6y~Z!D|{=1*2D-JUa<(1Z=;!Ei!KiRNH?o{p5o3crFF=_pX9O-YyJchr$~ zRC`+G+8kx~fD2k*ZIiiIGR<8r&M@3H?%JVOfE>)})7ScOd&?OjgAGT@WVNSCZ8N(p zuQG~76GE3%(%h1*vUXg$vH{ua0b`sQ4f0*y=u~lgyb^!#CcPJa2mkSEHGLsnO^kb$ zru5_l#nu=Y{rSMWiYx?nO{8I!gH+?wEj~UM?IrG}E|bRIBUM>UlY<`T1EHpRr36vv zBi&dG8oxS|J$!zoaq{+JpJy+O^W(nt*|#g32bd&K^w-t>!Vu9N!k9eA8r!Xc{utY> zg9aZ(D2E0gL#W0MdjwES-7~Wa8iubPrd?8-$C4BP?*wok&O8+ykOx{P=Izx+G~hM8 z*9?BYz!T8~dzcZr#ux8kS7u7r@A#DogBH8km8Ry4slyie^n|GrTbO|cLhpqgMdsjX zJ_LdmM#I&4LqqsOUIXK8gW;V0B(7^$y#h3h>J0k^WJfAMeYek%Y-Dcb_+0zPJez!GM zAmJ1u;*rK=FNM0Nf}Y!!P9c4)HIkMnq^b;JFd!S3?_Qi2G#LIQ)TF|iHl~WKK6JmK zbv7rPE6VkYr_%_BT}CK8h=?%pk@3cz(UrZ{@h40%XgThP*-Oeo`T0eq9 zA8BnWZKzCy5e&&_GEsU4*;_k}(8l_&al5K-V*BFM=O~;MgRkYsOs%9eOY6s6AtE*<7GQAR2ulC3RAJrG_P1iQK5Z~&B z&f8X<>yJV6)oDGIlS$Y*D^Rj(cszTy5c81a5IwBr`BtnC6_e`ArI8CaTX_%rx7;cn zR-0?J_LFg*?(#n~G8cXut(1nVF0Oka$A$1FGcERU<^ggx;p@CZc?3UB41RY+wLS`LWFNSs~YP zuw1@DNN3lTd|jDL7gjBsd9}wIw}4xT2+8dBQzI00m<@?c2L%>}QLfK5%r!a-iII`p zX@`VEUH)uj^$;7jVUYdADQ2k*!1O3WdfgF?OMtUXNpQ1}QINamBTKDuv19^{$`8A1 zeq%q*O0mi@(%sZU>Xdb0Ru96CFqk9-L3pzLVsMQ`Xpa~N6CR{9Rm2)A|CI21L(%GW zh&)Y$BNHa=FD+=mBw3{qTgw)j0b!Eahs!rZnpu)z!!E$*eXE~##yaXz`KE5(nQM`s zD!$vW9XH)iMxu9R>r$VlLk9oIR%HxpUiW=BK@4U)|1WNQ=mz9a z^!KkO=>GaJ!GBXm{KJj^;kh-MkUlEQ%lza`-G&}C5y1>La1sR6hT=d*NeCnuK%_LV zOXt$}iP6(YJKc9j-Fxq~*ItVUqljQ8?oaysB-EYtFQp9oxZ|5m0^Hq(qV!S+hq#g( z?|i*H2MIr^Kxgz+3vIljQ*Feejy6S4v~jKEPTF~Qhq!(ms5>NGtRgO5vfPPc4Z^AM zTj!`5xEreIN)vaNxa|q6qWdg>+T`Ol0Uz)ckXBXEGvPNEL3R8hB3=C5`@=SYgAju1 z!)UBr{2~=~xa{b8>x2@C7weRAEuatC)3pkRhT#pMPTpSbA|tan%U7NGMvzmF?c!V8 z=pEWxbdXbTAGtWTyI?Fml%lEr-^AE}w#l(<7OIw;ctw}imYax&vR4UYNJZK6P7ZOd zP87XfhnUHxCUHhM@b*NbTi#(-8|wcv%3BGNs#zRCVV(W?1Qj6^PPQa<{yaBwZ`+<`w|;rqUY_C z&AeyKwwf*q#OW-F()lir=T^<^wjK65Lif$puuU5+tk$;e_EJ;Lu+pH>=-8=PDhkBg z8cWt%@$Sc#C6F$Vd+0507;{OOyT7Hs%nKS88q-W!$f~9*WGBpHGgNp}=C*7!RiZ5s zn1L_DbKF@B8kwhDiLKRB@lsXVVLK|ph=w%_`#owlf@s@V(pa`GY$8h%;-#h@TsO|Y8V=n@*!Rog7<7Cid%apR|x zOjhHCyfbIt%+*PCveTEcuiDi%Wx;O;+K=W?OFUV%)%~6;gl?<0%)?snDDqIvkHF{ zyI02)+lI9ov42^hL>ZRrh*HhjF9B$A@=H94iaBESBF=eC_KT$8A@uB^6$~o?3Wm5t1OIaqF^~><2?4e3c&)@wKn9bD? zoeCs;H>b8DL^F&>Xw-xjZEUFFTv>JD^O#1E#)CMBaG4DX9bD(Wtc8Rzq}9soQ8`jf zeSnHOL}<+WVSKp4kkq&?SbETjq6yr@4%SAqOG=9E(3YeLG9dtV+8vmzq+6PFPk{L; z(&d++iu=^F%b+ea$i2UeTC{R*0Isk;vFK!no<;L+(`y`3&H-~VTdKROkdyowo1iqR zbVW(3`+(PQ2>TKY>N!jGmGo7oeoB8O|P_!Ic@ zZ^;3dnuXo;WJ?S+)%P>{Hcg!Jz#2SI(s&dY4QAy_vRlmOh)QHvs_7c&zkJCmJGVvV zX;Mtb>QE+xp`KyciG$Cn*0?AK%-a|=o!+7x&&yzHQOS>8=B*R=niSnta^Pxp1`=md z#;$pS$4WCT?mbiCYU?FcHGZ#)kHVJTTBt^%XE(Q};aaO=Zik0UgLcc0I(tUpt(>|& zcxB_|fxCF7>&~5eJ=Dpn&5Aj{A^cV^^}(7w#p;HG&Q)EaN~~EqrE1qKrMAc&WXIE;>@<&)5;gD2?={Xf@Mvn@OJKw=8Mgn z!JUFMwD+s==JpjhroT&d{$kQAy%+d`a*XxDEVxy3`NHzmITrE`o!;5ClXNPb4t*8P zzAivdr{j_v!=9!^?T3y?gzmqDWX6mkzhIzJ-3S{T5bcCFMr&RPDryMcdwbBuZbsgN zGrp@^i?rcfN7v0NKGzDPGE#4yszxu=I_`MI%Z|10nFjU-UjQXXA?k8Pk|OE<(?ae) zE%vG#eZAlj*E7_3dx#Zz4kMLj>H^;}33UAankJiDy5ZvEhrjr`!9eMD8COp}U*hP+ zF}KIYx@pkccIgyxFm#LNw~G&`;o&5)2`5aogs`1~7cMZQ7zj!%L4E`2yzlQN6REX20&O<9 zKV6fyr)TScJPPzNTC2gL+0x#=u>(({{D7j)c-%tvqls3#Y?Z1m zV5WUE)zdJ{$p>yX;^P!UcXP?UD~YM;IRa#Rs5~l+*$&nO(;Ers`G=0D!twR(0GF@c zHl9E5DQI}Oz74n zfKP>&$q0($T4y$6w(p=ERAFh+>n%iaeRA%!T%<^+pg?M)@ucY<&59$x9M#n+V&>}=nO9wCV{O~lg&v#+jcUj(tQ z`0u1YH)-`U$15a{pBkGyPL0THv1P|4e@pf@3IBZS4dVJPo#H>pWq%Lr0YS-SeWash z8R7=jb28KPMI|_lo#GEO|5B?N_e``H*23{~a!AmUJ+fb4HX-%QI@lSEUxKlGV7z7Q zSKw@-TR>@1RL%w{x}dW#k1NgW+q4yt2Xf1J62Bx*O^WG8OJ|FqI4&@d3_o8Id@*)4 zYrk=>@!wv~mh7YWv*bZhxqSmFh2Xq)o=m;%n$I?GSz49l1$xRpPu_^N(vZ>*>Z<04 z2+rP70oM=NDysd!@fQdM2OcyT?3T^Eb@lIC-UG=Bw{BjQ&P`KCv$AcJ;?`vdZ4){d z&gkoUK{$!$$K`3*O-jyM1~p-7T*qb)Ys>Myt^;#1&a%O@x8A+E>! zY8=eD`ZG)LVagDLBeHg>=atOG?Kr%h4B%E6m@J^C+U|y)XX@f z8oyJDW|9g=<#f<{JRr{y#~euMnv)`7j=%cHWLc}ngjq~7k**6%4u>Px&W%4D94(r* z+akunK}O0DC2A%Xo9jyF;DobX?!1I(7%}@7F>i%&nk*LMO)bMGg2N+1iqtg+r(70q zF5{Msgsm5GS7DT`kBsjMvOrkx&|EU!{{~gL4d2MWrAT=KBQ-^zQCUq{5PD1orxlIL zq;CvlWx#f1NWvh`hg011I%?T_s!e38l*lWVt|~z-PO4~~1g)SrJ|>*tXh=QfXT)%( z+ex+inPvD&O4Ur;JGz>$sUOnWdpSLcm1X%aQDw4{dB!cnj`^muI$CJ2%p&-kULVCE z>$eMR36kN$wCPR+OFDM3-U(VOrp9k3)lI&YVFqd;Kpz~K)@Fa&FRw}L(SoD z9B4a+hQzZT-BnVltst&=kq6Y(f^S4hIGNKYBgMxGJ^;2yrO}P3;r)(-I-CZ)26Y6? z&rzHI_1GCvGkgy-t1E;r^3Le30|%$ebDRu2+gdLG)r=A~Qz`}~&L@aGJ{}vVs_GE* zVUjFnzHiXfKQbpv&bR&}l2bzIjAooB)=-XNcYmrGmBh(&iu@o!^hn0^#}m2yZZUK8 zufVm7Gq0y`Mj;9b>`c?&PZkU0j4>IL=UL&-Lp3j&47B5pAW4JceG{!XCA)kT<%2nqCxj<)uy6XR_uws~>_MEKPOpAQ!H zkn>FKh)<9DwwS*|Y(q?$^N!6(51O0 z^JM~Ax{AI1Oj$fs-S5d4T7Z_i1?{%0SsIuQ&r8#(JA=2iLcTN+?>wOL532%&dMYkT z*T5xepC+V6zxhS@vNbMoi|i)=rpli@R9~P!39tWbSSb904ekv7D#quKbgFEMTb48P zuq(VJ+&L8aWU(_FCD$3^uD!YM%O^K(dvy~Wm2hUuh6bD|#(I39Xt>N1Y{ZqXL`Fg6 zKQ?T2htHN!(Bx;tV2bfTtIj7e)liN-29s1kew>v(D^@)#v;}C4-G=7x#;-dM4yRWm zyY`cS21ulzMK{PoaQ6xChEZ}o_#}X-o}<&0)$1#3we?+QeLt;aVCjeA)hn!}UaKt< zat1fHEx13y-rXNMvpUUmCVzocPmN~-Y4(YJvQ#db)4|%B!rBsgAe+*yor~}FrNH08 z3V!97S}D7d$zbSD{$z;@IYMxM6aHdypIuS*pr_U6;#Y!_?0i|&yU*@16l z*dcMqDQgfNBf}?quiu4e>H)yTVfsp#f+Du0@=Kc41QockXkCkvu>FBd6Q+@FL!(Yx z2`YuX#eMEiLEDhp+9uFqME_E^faV&~9qjBHJkIp~%$x^bN=N)K@kvSVEMdDuzA0sn z88CBG?`RX1@#hQNd`o^V{37)!w|nA)QfiYBE^m=yQKv-fQF+UCMcuEe1d4BH7$?>b zJl-r9@0^Ie=)guO1vOd=i$_4sz>y3x^R7n4ED!5oXL3@5**h(xr%Hv)_gILarO46q+MaDOF%ChaymKoI6JU5Pg;7#2n9-18|S1;AK+ zgsn6;k6-%!QD>D?cFy}8F;r@z8H9xN1jsOBw2vQONVqBVEbkiNUqgw~*!^##ht>w0 zUOykwH=$LwX2j&nLy=@{hr)2O&-wm-NyjW7n~Zs9UlH;P7iP3 zI}S(r0YFVYacnKH(+{*)Tbw)@;6>%=&Th=+Z6NHo_tR|JCI8TJiXv2N7ei7M^Q+RM z?9o`meH$5Yi;@9XaNR#jIK^&{N|DYNNbtdb)XW1Lv2k{E>;?F`#Pq|&_;gm~&~Zc9 zf+6ZE%{x4|{YdtE?a^gKyzr}dA>OxQv+pq|@IXL%WS0CiX!V zm$fCePA%lU{%pTKD7|5NJHeXg=I0jL@$tOF@K*MI$)f?om)D63K*M|r`gb9edD1~Y zc|w7N)Y%do7=0{RC|AziW7#am$)9jciRJ?IWl9PE{G3U+$%FcyKs_0Cgq`=K3@ttV z9g;M!3z~f_?P%y3-ph%vBMeS@p7P&Ea8M@97+%XEj*(1E6vHj==d zjsoviB>j^$_^OI_DEPvFkVo(BGRo%cJeD){6Uckei=~1}>sp299|IRjhXe)%?uP0I zF5+>?0#Ye}T^Y$u_rc4=lPcq4K^D(TZG-w30-YiEM=dcK+4#o*>lJ8&JLi+3UcpZk z!^?95S^C0ja^jwP`|{<+3cBVog$(mRdQmadS+Vh~z zS@|P}=|z3P6uS+&@QsMp0no9Od&27O&14zHXGAOEy zh~OKpymK5C%;LLb467@KgIiVwYbYd6wFxI{0-~MOGfTq$nBTB!{SrWmL9Hs}C&l&l#m?s*{tA?BHS4mVKHAVMqm63H<|c5n0~k)-kbg zXidai&9ZUy0~WFYYKT;oe~rytRk?)r8bptITsWj(@HLI;@=v5|XUnSls7$uaxFRL+ zRVMGuL3w}NbV1`^=Pw*0?>bm8+xfeY(1PikW*PB>>Tq(FR`91N0c2&>lL2sZo5=VD zQY{>7dh_TX98L2)n{2OV=T10~*YzX27i2Q7W86M4$?gZIXZaBq#sA*{PH8){|GUi;oM>e?ua7eF4WFuFYZSG| zze?srg|5Ti8Og{O zeFxuw9!U+zhyk?@w zjsA6(oKD=Ka;A>Ca)oPORxK+kxH#O@zhC!!XS4@=swnuMk>t+JmLmFiE^1aX3f<)D@`%K0FGK^gg1a1j>zi z2KhV>sjU7AX3F$SEqrXSC}fRx64GDoc%!u2Yag68Lw@w9v;xOONf@o)Lc|Uh3<21ctTYu-mFZuHk*+R{GjXHIGq3p)tFtQp%TYqD=j1&y)>@zxoxUJ!G@ zgI0XKmP6MNzw>nRxK$-Gbzs}dyfFzt>#5;f6oR27ql!%+{tr+(`(>%51|k`ML} zY4eE)Lxq|JMas(;JibNQds1bUB&r}ydMQXBY4x(^&fY_&LlQC)3hylc$~8&~|06-D z#T+%66rYbHX%^KuqJED_wuGB+=h`nWA!>1n0)3wZrBG3%`b^Ozv6__dNa@%V14|!D zQ?o$z5u0^8`giv%qE!BzZ!3j;BlDlJDk)h@9{nSQeEk!z9RGW) z${RSF3phEM*ce*>Xdp}585vj$|40=&S{S-GTiE?Op*vY&Lvr9}BO$XWy80IF+6@%n z5*2ueT_g@ofP#u5pxb7n*fv^Xtt7&?SRc{*2Ka-*!BuOpf}neHGCiHy$@Ka1^Dint z;DkmIL$-e)rj4o2WQV%Gy;Xg(_Bh#qeOsTM2f@KEe~4kJ8kNLQ+;(!j^bgJMcNhvklP5Z6I+9Fq@c&D~8Fb-4rmDT!MB5QC{Dsb;BharP*O;SF4& zc$wj-7Oep7#$WZN!1nznc@Vb<_Dn%ga-O#J(l=OGB`dy=Sy&$(5-n3zzu%d7E#^8`T@}V+5B;PP8J14#4cCPw-SQTdGa2gWL0*zKM z#DfSXs_iWOMt)0*+Y>Lkd=LlyoHjublNLefhKBv@JoC>P7N1_#> zv=mLWe96%EY;!ZGSQDbZWb#;tzqAGgx~uk+-$+2_8U`!ypbwXl z^2E-FkM1?lY@yt8=J3%QK+xaZ6ok=-y%=KXCD^0r!5vUneW>95PzCkOPO*t}p$;-> ze5j-BLT_;)cZQzR2CEsm@rU7GZfFtdp*a|g4wDr%8?2QkIGasRfDWT-Dvy*U{?IHT z*}wGnzdlSptl#ZF^sf)KT|BJs&kLG91^A6ls{CzFprZ6-Y!V0Xysh%9p%iMd7HLsS zN+^Un$tDV)T@i!v?3o0Fsx2qI(AX_$dDkBzQ@fRM%n zRXk6hb9Py#JXUs+7)w@eo;g%QQ95Yq!K_d=z{0dGS+pToEI6=Bo8+{k$7&Z zo4>PH(`ce8E-Ps&uv`NQ;U$%t;w~|@E3WVOCi~R4oj5wP?%<*1C%}Jq%a^q~T7u>K zML5AKfQDv6>PuT`{SrKHRAF+^&edg6+5R_#H?Lz3iGoWo#PCEd0DS;)2U({{X#zU^ zw_xv{4x7|t!S)>44J;KfA|DC?;uQ($l+5Vp7oeqf7{GBF9356nx|&B~gs+@N^gSdd zvb*>&W)|u#F{Z_b`f#GVtQ`pYv3#||N{xj1NgB<#=Odt6{eB%#9RLt5v zIi|0u70`#ai}9fJjKv7dE!9ZrOIX!3{$z_K5FBd-Kp-&e4(J$LD-)NMTp^_pB`RT; zftVVlK2g@+1Ahv2$D){@Y#cL#dUj9*&%#6 zd2m9{1NYp>)6=oAvqdCn5#cx{AJ%S8skUgMglu2*IAtd+z1>B&`MuEAS(D(<6X#Lj z?f4CFx$)M&$=7*>9v1ER4b6!SIz-m0e{o0BfkySREchp?WdVPpQCh!q$t>?rL!&Jg zd#heM;&~A}VEm8Dvy&P|J*eAV&w!&Nx6HFV&B8jJFVTmgLaswn!cx$&%JbTsloz!3 zMEz1d`k==`Ueub_JAy_&`!ogbwx27^ZXgFNAbx=g_I~5nO^r)}&myw~+yY*cJl4$I znNJ32M&K=0(2Dj_>@39`3=FX!v3nZHno_@q^!y}%(yw0PqOo=);6Y@&ylVe>nMOZ~ zd>j#QQSBn3oaWd;qy$&5(5H$Ayi)0haAYO6TH>FR?rhqHmNOO+(})NB zLI@B@v0)eq!ug`>G<@htRlp3n!EpU|n+G+AvXFrWSUsLMBfL*ZB`CRsIVHNTR&b?K zxBgsN0BjfB>UVcJ|x%=-zb%OV7lmZc& zxiupadZVF7)6QuhoY;;FK2b*qL0J-Rn-8!X4ZY$-ZSUXV5DFd7`T41c(#lAeLMoeT z4%g655v@7AqT!i@)Edt5JMbN(=Q-6{=L4iG8RA%}w;&pKmtWvI4?G9pVRp|RTw`g0 zD5c12B&A2&P6Ng~8WM2eIW=wxd?r7A*N+&!Be7PX3s|7~z=APxm=A?5 zt>xB4WG|*Td@VX{Rs)PV0|yK`oI3^xn(4c_j&vgxk_Y3o(-`_5o`V zRTghg6%l@(qodXN;dB#+OKJEEvhfcnc#BeO2|E(5df-!fKDZ!%9!^BJ_4)9P+9Dq5 zK1=(v?KmIp34r?z{NEWnLB3Px{XYwy-akun4F7xTRr2^zeYW{gcK9)>aJDdU5;w5@ zak=<+-PLH-|04pelTb%ULpuuuJC7DgyT@D|p{!V!0v3KpDnRjANN12q6SUR3mb9<- z>2r~IApQGhstZ!3*?5V z8#)hJ0TdZg0M-BK#nGFP>$i=qk82DO z7h;Ft!D5E15OgW)&%lej*?^1~2=*Z5$2VX>V{x8SC+{i10BbtUk9@I#Vi&hX)q

Q!LwySI{Bnv%Sm)yh{^sSVJ8&h_D-BJ_YZe5eCaAWU9b$O2c z$T|{vWVRtOL!xC0DTc(Qbe`ItNtt5hr<)VijD0{U;T#bUEp381_y`%ZIav?kuYG{iyYdEBPW=*xNSc;Rlt6~F4M`5G+VtOjc z*0qGzCb@gME5udTjJA-9O<&TWd~}ysBd(eVT1-H82-doyH9RST)|+Pb{o*;$j9Tjs zhU!IlsPsj8=(x3bAKJTopW3^6AKROHR^7wZ185wJGVhA~hEc|LP;k7NEz-@4p5o}F z`AD6naG3(n=NF9HTH81=F+Q|JOz$7wm9I<+#BSmB@o_cLt2GkW9|?7mM;r!JZp89l zbo!Hp8=n!XH1{GwaDU+k)pGp`C|cXkCU5%vcH)+v@0eK>%7gWxmuMu9YLlChA|_D@ zi#5zovN_!a-0?~pUV-Rj*1P)KwdU-LguR>YM&*Nen+ln8Q$?WFCJg%DY%K}2!!1FE zDv-A%Cbwo^p(lzac&_TZ-l#9kq`mhLcY3h9ZTUVCM(Ad&=EriQY5{jJv<5K&g|*Lk zgV%ILnf1%8V2B0E&;Sp4sYbYOvvMebLwYwzkRQ#F8GpTQq#uv=J`uaSJ34OWITeSGo6+-8Xw znCk*n{kdDEi)Hi&u^)~cs@iyCkFWB2SWZU|Uc%^43ZIZQ-vWNExCCtDWjqHs;;tWf$v{}0{p0Rvxkq``)*>+Akq%|Na zA`@~-Vfe|+(AIlqru+7Ceh4nsVmO9p9jc8}HX^W&ViBDXT+uXbT#R#idPn&L>+#b6 zflC-4C5-X;kUnR~L>PSLh*gvL68}RBsu#2l`s_9KjUWRhiqF`j)`y`2`YU(>3bdBj z?>iyjEhe-~$^I5!nn%B6Wh+I`FvLNvauve~eX<+Ipl&04 zT}};W&1a3%W?dJ2=N#0t?e+aK+%t}5q%jSLvp3jZ%?&F}nOOWr>+{GFIa%wO_2`et z=JzoRR~}iKuuR+azPI8;Gf9)z3kyA4EIOSl!sRR$DlW}0>&?GbgPojmjmnln;cTqCt=ADbE zZ8GAnoM+S1(5$i8^O4t`ue;vO4i}z0wz-QEIVe5_u03;}-!G1NyY8;h^}y;tzY}i5 zqQr#Ur3Fy8sSa$Q0ys+f`!`+>9WbvU_I`Sj;$4{S>O3?#inLHCrtLy~!s#WXV=oVP zeE93*Nc`PBi4q@%Ao$x4lw9vLHM!6mn3-b_cebF|n-2vt-zYVF_&sDE--J-P;2WHo z+@n2areE0o$LjvjlV2X7ZU@j+`{*8zq`JR3gKF#EW|#+{nMyo-a>nFFTg&vhyT=b} zDa8+v0(Dgx0yRL@ZXOYIlVSZ0|MFizy0VPW8;AfA5|pe!#j zX}Py^8fl5SyS4g1WSKKtnyP+_PoOwMMwu`(i@Z)diJp~U54*-miOchy7Z35eL>^M z4p<-aIxH4VUZgS783@H%M7P9hX>t{|RU7$n4T(brCG#h9e9p! z+o`i;EGGq3&pF;~5V~eBD}lC)>if$w%Vf}AFxGqO88|ApfHf&Bvu+xdG)@vuF}Yvk z)o;~k-%+0K0g+L`Wala!$=ZV|z$e%>f0%XoLib%)!R^RoS+{!#X?h-6uu zF&&KxORdZU&EwQFITIRLo(7TA3W}y6X{?Y%y2j0It!ekU#<)$qghZtpcS>L3uh`Uj z7GY;6f$9qKynP#oS3$$a{p^{D+0oJQ71`1?OAn_m8)UGZmj3l*ZI)`V-a>MKGGFG< z&^jg#Ok%(hhm>hSrZ5;Qga4u(?^i>GiW_j9%_7M>j(^|Om$#{k+^*ULnEgzW_1gCICtAD^WpC`A z{9&DXkG#01Xo)U$OC(L5Y$DQ|Q4C6CjUKk1UkPj$nXH##J{c8e#K|&{mA*;b$r0E4 zUNo0jthwA(c&N1l=PEe8Rw_8cEl|-eya9z&H3#n`B$t#+aJ03RFMzrV@gowbe8v(c zIFM60^0&lCFO10NU4w@|61xiZ4CVXeaKjd;d?sv52XM*lS8XiVjgWpRB;&U_C0g+`6B5V&w|O6B*_q zsATxL!M}+$He)1eOWECce#eS@2n^xhlB4<_Nn?yCVEQWDs(r`|@2GqLe<#(|&P0U? z$7V5IgpWf09uIf_RazRwC?qEqRaHyL?iiS05UiGesJy%^>-C{{ypTBI&B0-iUYhk> zIk<5xpsuV@g|z(AZD+C-;A!fTG=df1=<%nxy(a(IS+U{ME4ZbDEBtcD_3V=icT6*_ z)>|J?>&6%nvHhZERBtjK+s4xnut*@>GAmA5m*OTp$!^CHTr}vM4n(X1Q*;{e-Rd2BCF-u@1ZGm z!S8hJ6L=Gl4T_SDa7Xx|-{4mxveJg=ctf`BJ*fy!yF6Dz&?w(Q_6B}WQVtNI!BVBC zKfX<>7vd6C96}XAQmF-Jd?1Q4eTfRB3q7hCh0f!(JkdWT5<{iAE#dKy*Jxq&3a1@~ z8C||Dn2mFNyrUV|<-)C^_y7@8c2Fz+2jrae9deBDu;U}tJ{^xAdxCD248(k;dCJ%o z`y3sADe>U%suxwwv~8A1+R$VB=Q?%U?4joI$um;aH+eCrBqpn- z%79D_7rb;R-;-9RTrwi9dPlg8&@tfWhhZ(Vx&1PQ+6(huX`;M9x~LrW~~#3{j0Bh2kDU$}@!fFQej4VGkJv?M4rU^x!RU zEwhu$!CA_iDjFjrJa`aocySDX16?~;+wgav;}Zut6Mg%C4>}8FL?8)Kgwc(Qlj{@#2Pt0?G`$h7P#M+qoXtlV@d}%c&OzO+QYKK`kyXaK{U(O^2DyIXCZlNQjt0^8~8JzNGrIxhj}}M z&~QZlbx%t;MJ(Vux;2tgNKGlAqphLq%pd}JG9uoVHUo?|hN{pLQ6Em%r*+7t^<);X zm~6=qChlNAVXNN*Sow->*4;}T;l;D1I-5T{Bif@4_}=>l`tK;qqDdt5zvisCKhMAH z#r}`)7VW?LZqfdmXQ%zo5bJ00{Xb9^YKrk0Nf|oIW*K@(=`o2Vndz}ZDyk{!u}PVx zzd--+_WC*U{~DH3{?GI64IB+@On&@9X>EUAo&L+G{L^dozaI4C3G#2wr~hseW@K&g zKWs{uHu-9Je!3;4pE>eBltKUXb^*hG8I&413)$J&{D4N%7PcloU6bn%jPxJyQL?g* z9g+YFFEDiE`8rW^laCNzQmi7CTnPfwyg3VDHRAl>h=In6jeaVOP@!-CP60j3+#vpL zEYmh_oP0{-gTe7Or`L6x)6w?77QVi~jD8lWN@3RHcm80iV%M1A!+Y6iHM)05iC64tb$X2lV_%Txk@0l^hZqi^%Z?#- zE;LE0uFx)R08_S-#(wC=dS&}vj6P4>5ZWjhthP=*Hht&TdLtKDR;rXEX4*z0h74FA zMCINqrh3Vq;s%3MC1YL`{WjIAPkVL#3rj^9Pj9Ss7>7duy!9H0vYF%>1jh)EPqvlr6h%R%CxDsk| z!BACz7E%j?bm=pH6Eaw{+suniuY7C9Ut~1cWfOX9KW9=H><&kQlinPV3h9R>3nJvK z4L9(DRM=x;R&d#a@oFY7mB|m8h4692U5eYfcw|QKwqRsshN(q^v$4$)HgPpAJDJ`I zkqjq(8Cd!K!+wCd=d@w%~e$=gdUgD&wj$LQ1r>-E=O@c ze+Z$x{>6(JA-fNVr)X;*)40Eym1TtUZI1Pwwx1hUi+G1Jlk~vCYeXMNYtr)1?qwyg zsX_e*$h?380O00ou?0R@7-Fc59o$UvyVs4cUbujHUA>sH!}L54>`e` zHUx#Q+Hn&Og#YVOuo*niy*GU3rH;%f``nk#NN5-xrZ34NeH$l`4@t);4(+0|Z#I>Y z)~Kzs#exIAaf--65L0UHT_SvV8O2WYeD>Mq^Y6L!Xu8%vnpofG@w!}R7M28?i1*T&zp3X4^OMCY6(Dg<-! zXmcGQrRgHXGYre7GfTJ)rhl|rs%abKT_Nt24_Q``XH{88NVPW+`x4ZdrMuO0iZ0g` z%p}y};~T5gbb9SeL8BSc`SO#ixC$@QhXxZ=B}L`tP}&k?1oSPS=4%{UOHe0<_XWln zwbl5cn(j-qK`)vGHY5B5C|QZd5)W7c@{bNVXqJ!!n$^ufc?N9C-BF2QK1(kv++h!>$QbAjq)_b$$PcJdV+F7hz0Hu@ zqj+}m0qn{t^tD3DfBb~0B36|Q`bs*xs|$i^G4uNUEBl4g;op-;Wl~iThgga?+dL7s zUP(8lMO?g{GcYpDS{NM!UA8Hco?#}eNEioRBHy4`mq!Pd-9@-97|k$hpEX>xoX+dY zDr$wfm^P&}Wu{!%?)U_(%Mn79$(ywvu*kJ9r4u|MyYLI_67U7%6Gd_vb##Nerf@>& z8W11z$$~xEZt$dPG}+*IZky+os5Ju2eRi;1=rUEeIn>t-AzC_IGM-IXWK3^6QNU+2pe=MBn4I*R@A%-iLDCOHTE-O^wo$sL_h{dcPl=^muAQb`_BRm};=cy{qSkui;`WSsj9%c^+bIDQ z0`_?KX0<-=o!t{u(Ln)v>%VGL z0pC=GB7*AQ?N7N{ut*a%MH-tdtNmNC+Yf$|KS)BW(gQJ*z$d{+{j?(e&hgTy^2|AR9vx1Xre2fagGv0YXWqtNkg*v%40v?BJBt|f9wX5 z{QTlCM}b-0{mV?IG>TW_BdviUKhtosrBqdfq&Frdz>cF~yK{P@(w{Vr7z2qKFwLhc zQuogKO@~YwyS9%+d-zD7mJG~@?EFJLSn!a&mhE5$_4xBl&6QHMzL?CdzEnC~C3$X@ zvY!{_GR06ep5;<#cKCSJ%srxX=+pn?ywDwtJ2{TV;0DKBO2t++B(tIO4)Wh`rD13P z4fE$#%zkd=UzOB74gi=-*CuID&Z3zI^-`4U^S?dHxK8fP*;fE|a(KYMgMUo`THIS1f!*6dOI2 zFjC3O=-AL`6=9pp;`CYPTdVX z8(*?V&%QoipuH0>WKlL8A*zTKckD!paN@~hh zmXzm~qZhMGVdQGd=AG8&20HW0RGV8X{$9LldFZYm zE?}`Q3i?xJRz43S?VFMmqRyvWaS#(~Lempg9nTM$EFDP(Gzx#$r)W&lpFKqcAoJh-AxEw$-bjW>`_+gEi z2w`99#UbFZGiQjS8kj~@PGqpsPX`T{YOj`CaEqTFag;$jY z8_{Wzz>HXx&G*Dx<5skhpETxIdhKH?DtY@b9l8$l?UkM#J-Snmts7bd7xayKTFJ(u zyAT&@6cAYcs{PBfpqZa%sxhJ5nSZBPji?Zlf&}#L?t)vC4X5VLp%~fz2Sx<*oN<7` z?ge=k<=X7r<~F7Tvp9#HB{!mA!QWBOf%EiSJ6KIF8QZNjg&x~-%e*tflL(ji_S^sO ztmib1rp09uon}RcsFi#k)oLs@$?vs(i>5k3YN%$T(5Or(TZ5JW9mA6mIMD08=749$ z!d+l*iu{Il7^Yu}H;lgw=En1sJpCKPSqTCHy4(f&NPelr31^*l%KHq^QE>z>Ks_bH zjbD?({~8Din7IvZeJ>8Ey=e;I?thpzD=zE5UHeO|neioJwG;IyLk?xOz(yO&0DTU~ z^#)xcs|s>Flgmp;SmYJ4g(|HMu3v7#;c*Aa8iF#UZo7CvDq4>8#qLJ|YdZ!AsH%^_7N1IQjCro

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..6115a6f --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Jun 13 16:03:18 CST 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/keystore.properties b/keystore.properties new file mode 100644 index 0000000..28a88bb --- /dev/null +++ b/keystore.properties @@ -0,0 +1,6 @@ +app_name=Finger Keyboard +package_name=com.finger.keyboard.selection +keystoreFile=app/FingerKeyboard.jks +key_alias=key0 +key_store_password=FingerKeyboard +key_password=FingerKeyboard diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..c6f1619 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,22 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + maven{url = uri("https://artifacts.applovin.com/android")} + + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven("https://jitpack.io") + maven ("https://artifact.bytedance.com/repository/pangle") + } +} + +rootProject.name = "Finger Keyboard" +include(":app") + \ No newline at end of file