From 4ebc38d5f3193d72b3f5e7a854b8a8f914be037a Mon Sep 17 00:00:00 2001 From: KeelrLeek <156356974+KeelrLeek@users.noreply.github.com> Date: Tue, 15 Sep 2026 07:22:00 -0500 Subject: [PATCH] =?UTF-8?q?android:=20the=20falcon=20on=20the=20launcher?= =?UTF-8?q?=20=E2=80=94=20a=20real=20adaptive=20icon,=20with=20the=20monoc?= =?UTF-8?q?hrome=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The phone has been wearing tauri's logo. `tauri android init` writes the generated project's `res/` from its own template and never reads `src-tauri/icons/android/`, which has carried the falcon since 50afa6a, and the detour build runs cargo and Gradle directly — so nothing ever copied it across: the two dominant colours in the packaged `mipmap-xxxhdpi/ic_launcher.png` are `#24c8db` and `#ffc131`, tauri's own brand cyan and amber. `src-tauri/android/res/` is the app module's res now, tracked, and `build.sh` and `dev.sh` copy the whole tree into `gen/android` before Gradle, because that project is regenerated and gitignored and an asset that only lives there is an asset that disappears. It is a real adaptive icon: the kit's foreground and its **monochrome** layer at five densities, the legacy mipmaps under it, and the background as one `#FF05080B` colour resource rather than five identical flat PNGs, so the gradient being mocked separately replaces one file. The kit's own XML could not ship — it points every layer at `@drawable/` while shipping them as PNGs under `mipmap-*`, and in the generated project two of those three references resolve to Android Studio's template robot rather than failing — so the overlay's XML says `@mipmap/` and `@color/`, and its colour file takes the same name tauri's does, because two files declaring one colour is a hard aapt2 error. Losing the copy would be silent — the APK still builds, still installs, and wears the old logo with nothing in the log — so `verify-icon.sh` opens every APK both scripts make and reads the resources back out: the two `mipmap-anydpi-v26` XMLs present, and four PNG names at five densities byte for byte from the overlay. A release APK keeps neither the bytes nor the names — AGP re-encodes every PNG and shortens every resource path — so that path asks `aapt2 dump resources` what each name points at and compares pixel dimensions instead; 72×72 at hdpi still tells the kit's icon from tauri's 49×49. No walk step: a launcher icon is not reachable from inside the app, and the masking and the themed layer want a minute with the phone's home screen. --- ANDROID.md | 95 +++++++++++++ src-tauri/android/build.sh | 10 ++ src-tauri/android/dev.sh | 10 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 10 ++ .../mipmap-anydpi-v26/ic_launcher_round.xml | 10 ++ .../android/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2787 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3674 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 2079 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 2787 bytes .../android/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1783 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2342 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 1349 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1783 bytes .../android/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3804 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 4990 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 2859 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 3804 bytes .../android/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5848 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 7838 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 4479 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 5848 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7985 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 10687 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 6259 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 7985 bytes .../res/values/ic_launcher_background.xml | 5 + src-tauri/android/verify-icon.sh | 133 ++++++++++++++++++ 27 files changed, 273 insertions(+) create mode 100644 src-tauri/android/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 src-tauri/android/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 src-tauri/android/res/mipmap-hdpi/ic_launcher.png create mode 100644 src-tauri/android/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src-tauri/android/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 src-tauri/android/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 src-tauri/android/res/mipmap-mdpi/ic_launcher.png create mode 100644 src-tauri/android/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src-tauri/android/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 src-tauri/android/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 src-tauri/android/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src-tauri/android/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src-tauri/android/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 src-tauri/android/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 src-tauri/android/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src-tauri/android/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src-tauri/android/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 src-tauri/android/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 src-tauri/android/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src-tauri/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src-tauri/android/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 src-tauri/android/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 src-tauri/android/res/values/ic_launcher_background.xml create mode 100644 src-tauri/android/verify-icon.sh diff --git a/ANDROID.md b/ANDROID.md index e31939d..882427e 100644 --- a/ANDROID.md +++ b/ANDROID.md @@ -30,6 +30,7 @@ implements is `research/mobile-mockup/` (gitignored; see its README). | `src-tauri/tauri.android.conf.json` | merged over `tauri.conf.json` on Android: one window at `mobile.html`, no desktop resources, `minSdkVersion` 26 | | `src-tauri/gen/android/` | the generated Gradle project (`npx tauri android init`); `minSdk = 26`. Gitignored | | `src-tauri/android/build.sh`, `deploy.sh` | the detour build (below) and build → install → launch → screenshot | +| `src-tauri/android/res/` | the app module's own Android resources, tracked: the adaptive launcher icon, its monochrome layer, the legacy mipmaps and the one colour the background is. `build.sh` and `dev.sh` copy the whole tree into `gen/android/app/src/main/res/` before Gradle; `verify-icon.sh` reads it back out of the APK | | `src-tauri/src/android_glue.rs` | `JNI_OnLoad`: hands the JavaVM and app Context to `ndk-context` (cpal's AAudio backend needs it; tao 0.35 never fills it) | | `src-tauri/src/updater_mobile.rs` | the updater's stand-in on mobile (`#[cfg(mobile)] #[path]`) | | `src-tauri/src/lyric_align_stub.rs`, `vocal_sep_stub.rs` | stand-ins off Windows for the two Windows ML modules | @@ -1284,6 +1285,8 @@ cargo build --lib -p app --target aarch64-linux-android --features tauri/custom- # 1. strip the library's debug info (607 MB → 50 MB; the debug packaging keeps symbols) cp target/aarch64-linux-android/debug/libapp_lib.so src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a/ "%LOCALAPPDATA%\Android\Sdk\ndk\28.2.13676358\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-strip.exe" --strip-debug src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a/libapp_lib.so +# 1b. the app's own resources, over the generated project's (the launcher icon) +cp -r src-tauri/android/res/. src-tauri/gen/android/app/src/main/res/ # 2. package with Gradle, skipping the task that would redo the symlink cd src-tauri/gen/android && ./gradlew.bat assembleArm64Debug -x rustBuildArm64Debug ``` @@ -1477,6 +1480,98 @@ A command that has been renamed answers `No command found for plugin `, which lands in logcat rather than on screen: `adb logcat --pid=$(adb shell pidof com.soulstream.app)`. +## The launcher icon + +Until this round the phone wore **tauri's** logo. `tauri android init` writes +the generated project's `res/` from its own template and never reads +`src-tauri/icons/android/` — which has carried the falcon since `50afa6a` +— and the detour build runs cargo and Gradle directly, so nothing ever +copied it across. The two dominant colours in +`gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png` were `#24c8db` +and `#ffc131`: tauri's brand cyan and tauri's brand amber. + +`src-tauri/android/res/` is the app module's res, tracked, and `build.sh` and +`dev.sh` copy the whole tree into the generated project before Gradle runs. +It carries: + +- `mipmap-anydpi-v26/ic_launcher.xml` and `ic_launcher_round.xml` — the + adaptive icon: a foreground, a background, and a **monochrome** layer, which + is what Android 13's themed icons need and what tauri's generator has never + made; +- `mipmap-{m,h,xh,xxh,xxxh}dpi/` — `ic_launcher_foreground.png` and + `ic_launcher_monochrome.png` (108–432 px) from the kit's + `android/adaptive/res/`, and the legacy `ic_launcher.png` / + `ic_launcher_round.png` (48–192 px) from its `android/legacy/`; +- `values/ic_launcher_background.xml` — `#FF05080B`, the brand's night. + +Three things about it are not obvious. + +**The kit's own adaptive XML does not compile here.** Its +`android/adaptive/res/mipmap-anydpi-v26/*.xml` points every layer at +`@drawable/…`, and the kit ships those layers as PNGs under `mipmap-*` with +no `drawable-*` directory anywhere. That is worse than a missing resource: +the generated project still carries Android Studio's template vectors at +`drawable/ic_launcher_background.xml` and +`drawable-v24/ic_launcher_foreground.xml`, so two of the three references +resolve — to the green robot — and only `@drawable/ic_launcher_monochrome` +fails the build. The overlay's XML says `@mipmap/` for the two image layers +and `@color/` for the background instead. + +**The background is one colour resource, not five identical flat PNGs.** +A richer gradient is being mocked separately; when it is approved it replaces +one file, and the three XML references do not move. + +**The colour file is named `ic_launcher_background.xml` on purpose.** +`src-tauri/icons/android/values/ic_launcher_background.xml` declares the same +resource name (`#fff`), and two files in one `values/` directory declaring +one colour is a hard aapt2 error — `resource 'color/ic_launcher_background' +has a conflicting value`. Sharing the filename means the overlay overwrites +it rather than colliding with it, if a future `npx tauri android init` ever +copies it in. + +That leaves `src-tauri/icons/android/` a second, stale copy of these same +resource names: white background, no monochrome, hdpi at 49×49. Nothing on +Android reads it while the build is the detour — but `npx tauri icon` writes +it, and it should be brought to the kit before anyone builds through the CLI. + +### Checking it + +`verify-icon.sh` opens the APK `build.sh` has just made and reads the +resources back out. It checks the overlay's own two XMLs first, before the APK +is opened — a `` layer that a later edit drops is a failure too — +and then reads the APK, debug and release differently, because AGP hands them +to aapt2 differently: + +- **debug** — the packaging default for a debuggable build type is + `--no-crunch`, so every entry *is* the file on disk. Both + `res/mipmap-anydpi-v26/*.xml` must be in the APK, and all four PNG names at + all five densities must be byte for byte the overlay's. +- **release** (`--crunched`) — aapt2 re-encodes every PNG, *and* AGP's + resource optimization (`OptimizeResourcesTask` → `SHORTEN_RESOURCE_PATHS`) + renames the lot: an APK optimized here had no `res/mipmap-…` entry left at + all, only `res/Ag.png`. Neither the bytes nor the names survive, so the + check asks `aapt2 dump resources` what each name points at and compares the + pixel dimensions of whatever that is — 72×72 at hdpi still separates the + kit's legacy icon from tauri's 49×49. If the resource *names* have been + collapsed as well (that comes with resource shrinking, which this project + does not turn on), it says the icon is unchecked rather than claiming a + failure it cannot see. + +Both `build.sh` and `dev.sh` call it, so no APK this repo makes can quietly go +back to the old artwork. It costs about a second and a half on the 107 MB +debug APK. + +What it cannot check is what the icon looks like. `deploy.sh`'s `px-1.png` is +a screenshot of the app five seconds after launch; the launcher is not in it. +The one thing that may now differ there is the Android 12+ system splash, +which is drawn from the launcher icon — if a cold start ever runs past those +five seconds, that splash is the falcon on `#05080B` rather than tauri's mark. +**Adaptive masking and the monochrome layer can only be judged from the +phone's home screen**, which is a minute with the Pixel: the icon under the +launcher's mask, in the app drawer, in recents and in another app's share +sheet — and then Wallpaper & style → Themed icons on, to see the monochrome +layer take the wallpaper's colour. + ## Verifying ```bash diff --git a/src-tauri/android/build.sh b/src-tauri/android/build.sh index 2a97c3a..c2e5bbe 100644 --- a/src-tauri/android/build.sh +++ b/src-tauri/android/build.sh @@ -51,6 +51,15 @@ mkdir -p "$DEST" cp "$SO" "$DEST/libapp_lib.so" "$BIN/llvm-strip.exe" --strip-debug "$DEST/libapp_lib.so" ls -la "$DEST/libapp_lib.so" +# The launcher identity, into a project that cannot keep it: gen/android is +# regenerated by the tauri CLI and gitignored, and the detour build never runs +# that CLI, so the res it holds is still the one `android init` wrote — tauri's +# own logo. Everything under src-tauri/android/res/ is copied over it on every +# build. The whole tree, not a file list: a later round adding a resource adds +# a file there and this line does not change. +echo "== res overlay $(date +%T)" +test -d src-tauri/android/res || { echo "src-tauri/android/res is gone — the APK would wear tauri's logo and say nothing"; exit 1; } +cp -r src-tauri/android/res/. src-tauri/gen/android/app/src/main/res/ echo "== gradle $(date +%T)" cd src-tauri/gen/android ./gradlew.bat assemble$VARIANT -x rustBuild$VARIANT -q 2>&1 | grep -v "^$" | tail -20 || true @@ -82,4 +91,5 @@ else APK=src-tauri/gen/android/app/build/outputs/apk/arm64/debug/app-arm64-debug.apk fi ls -la "$APK" +bash src-tauri/android/verify-icon.sh "$APK" $([ "$REL" = "1" ] && echo --crunched) echo "== done $(date +%T)" diff --git a/src-tauri/android/dev.sh b/src-tauri/android/dev.sh index d5d0f23..9d85205 100644 --- a/src-tauri/android/dev.sh +++ b/src-tauri/android/dev.sh @@ -33,11 +33,21 @@ DEST=src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a mkdir -p "$DEST" cp "$SO" "$DEST/libapp_lib.so" "$BIN/llvm-strip.exe" --strip-debug "$DEST/libapp_lib.so" +# The launcher identity, into a project that cannot keep it: gen/android is +# regenerated by the tauri CLI and gitignored, and the detour build never runs +# that CLI, so the res it holds is still the one `android init` wrote — tauri's +# own logo. Everything under src-tauri/android/res/ is copied over it on every +# build. The whole tree, not a file list: a later round adding a resource adds +# a file there and this line does not change. +echo "== res overlay $(date +%T)" +test -d src-tauri/android/res || { echo "src-tauri/android/res is gone — the APK would wear tauri's logo and say nothing"; exit 1; } +cp -r src-tauri/android/res/. src-tauri/gen/android/app/src/main/res/ echo "== gradle $(date +%T)" cd src-tauri/gen/android ./gradlew.bat assembleArm64Debug -x rustBuildArm64Debug -q 2>&1 | grep -v "^$" | tail -20 || true cd /f/Coding/SoulStream APK=src-tauri/gen/android/app/build/outputs/apk/arm64/debug/app-arm64-debug.apk +bash src-tauri/android/verify-icon.sh "$APK" echo "== install $(date +%T)" "$ADB" install -r "$APK" 2>&1 | tail -1 "$ADB" shell pm grant com.soulstream.app android.permission.POST_NOTIFICATIONS 2>/dev/null || true diff --git a/src-tauri/android/res/mipmap-anydpi-v26/ic_launcher.xml b/src-tauri/android/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..ddfcdab --- /dev/null +++ b/src-tauri/android/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src-tauri/android/res/mipmap-anydpi-v26/ic_launcher_round.xml b/src-tauri/android/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..ddfcdab --- /dev/null +++ b/src-tauri/android/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src-tauri/android/res/mipmap-hdpi/ic_launcher.png b/src-tauri/android/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4933bd37e6c307508da3865fad1c113346399a16 GIT binary patch literal 2787 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 p0>vq$ED*5X&_q5pH6Q+mtIpZpkrB!W?r=t{h2n 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 ba0B-pQPFu<6ti<276C?jW@w783;zEA^}*?B literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-hdpi/ic_launcher_monochrome.png b/src-tauri/android/res/mipmap-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..80eca94c3ad561dbc4000c08903eaad2d62c8265 GIT binary patch literal 2079 zcmaKti9Ztz1IIV_eXVjW9&B^P$}K{U*$h#L=30*sIm<0gY&|8n%^Z)KNX`~QW7?~l z2qVH{VeVYHkIM1(`~mO#`TV}W@1O8}=;UZCDkLWa002Z$NbAeLUHUHqe80bA^OXE= z35Fv*ZUX=&V*di{X`-Y60Q>_e>x(Y2W2@tFJ>VOs85{6&wfi^mga(Ui5)ywQx?O9W zxP%_P;Ni8BC{K3LR=N6z1Qdd7DFl27N>O*tR*|8QOA!{qMpdqM@`a}~CF+{g`!Cxi zD{Olm#m?gwqch|D{R0}-lFYlx91Kj@2lFEZ0VOkgI0!1|e@=bEjbJg}WEft7bu#>$ zyN$aTt2QM13z!Me=fKShU0<)_f|H|AQtd)3{_ZZs5L_4IGXxmSkmIBg5Ux;80VBtS zYZ#Z#7!k=lAHuT^;>^)_YJh88lRDN*v*T+Jjv0r}C+N=Y&CitAAcoj-*bF^RI;_hu z)|79huk-XMD0zzD6t}`t%=MM8hu`2es$GtHss$`V`l|m{{0yK^x41j#p05;kcIJ%; zD&LF`*NPip^fAgA=&pb(BDL54k#6B37c?#e8D{`F7dbqf?b$W?%THLy?-^2yU3@di z%gHvzAo$%jl#F^oKE&^E;R@Ks`4G+gV64y_mnq7yA$X-QA*=K~O*@7h1-^l_g6HJp z*|?pPFb=|3gPJlWjf&}75&}{A4n&PU_NUD{-tobAH4Bn?!C~Ksp~BjgYQRZAsB%vu z$t)6pE%8y!4LcXED>gVaUBrwA&T}OYWBZ~QgN!R(=lI>RFTV7sCaa=b*jiALUM~SK zLPn9K(^_w_sl}DV_jqfuR5@D3o}P(n-${+|S>UhIYnCunpK69St3U}~wCsXLj!cHL zDnS|D9{>$6AbsYrN-Id5uHLD8LOA^mtG?a3m6qDEW{XqYzB(UZzGk14_Nt8|zm28&D0*+Xd$`iQuf$Qq!|`&I{Tz3C3Nax6${=-kuS)%l}E2TZ61rN)Ot`x-;vZ11)W7 z-)d%)iq_ty_zpm42tNh^u87! zsoFo8b+_J9H71=#q+(ok@1+|}vgnQUMGKC&F#^+V<|g$MCjSq7+PnuqY4F_s9ts@H zjrKGIZC-WwDX{j?e#xt?j2?0VtI3Y@vS*qbBAG7{B{SaexqcejTez(s@0W<{?QDDy zu!6BSFBRXD(t!kQdtM}0w7e?yGtJjRb3P>ABjtw#$_pmuQ~PejJ@E1Uyd0Qx>7f4^ zreeTclUE#=WanN&t(^5UHQB)o-cCHe40paarjP2b-(5yaa~+=k(KO_$DDOzlS~q{h zx(nXU1W)=b_dh|>uyyL|ACr`bqhSlC4~X5?@j)X5Fsc!kscJDxuU1GYPb0c91)B08)KQ+_S+zgF2K6}1ixAn+qf|_<}hu*Nw{hj-(*E)XT6TvIJ(70Ne7TR}) zA{=P@t`0Gu8&WdO%ShnOUDtnC>p$;@eENfzjZf)JAz*r4jEffTywfT?RJHFZO{uvx$1l&I;X;JITpD=IsqZ;i?*4O^QG>Rz@apVAja%|Z!fASy$zeJ4 z>sGQ*$KA8DRWY)2tg%qn&wiy!(otIy0WO|b7u?@zFFm?&!3`_bZa?a9QQ7M#)EST3 z56{{EY`a@Q)A%#2eohP{WddYf&B7H4%%$7PM(XP{pr(6NLNSeQMdH1G9EZ9uai^a$ zxF8I+RfGAIS$FAJUidyh@K_znw@NB@BKh%mB=x@PYA$q&`K5V+y=r$Cc1UVFFc4H)}F78iLIuxXI!oXC{{`0t B-FpB4 literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-hdpi/ic_launcher_round.png b/src-tauri/android/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4933bd37e6c307508da3865fad1c113346399a16 GIT binary patch literal 2787 zcmV<93LN!`P)ul}SWFRCwC$oOy6n)fvEl=Pqx5*J)6TTDj^mVes#V&t>d08Nv{RuLL5vHOqU=jiWRb8aI|(5PFUxyLUh?j{ z_wKw49A{Zki{ShJo5X81f zq^y*JQ%LrM+z?U4ht$>`AAqiYZx^Jmj}q>Nzo$m zMF9`=ATX^#!QzOn{DNT6-(f(y?j9>uJ`^yRULX>V3X?g8QM0e*F{R}W)$Y0tRc`4m za2mB_2&&ww+TFLdt3fuKCsQicRuJ*@N|8ZKG1)L`zHY5S9#4v;$WMAN901{!Dl74N zeN7g1ZbMV_*9F`}FBbuciY0wk#K>c9oc}UaZ=+A!KRd4`Q-6T%~YijJLQ_aPmF^I&Ovq+jT3&r6e zQdz-?=YB=~@nc;bKu*&TWOavu*ExJ7p7GZZmopW|(BVzTYWEj#>V*Yp@$o2jJ63&t z7hYJ55xU(~(U_ITjHqrGuF+XIGsoZ_GY;p-(I^f_v(Ff%C6xVZ3DPh~%FUy4?P~n_ zE4w&ulodjExFfMJK-)7ih@UhS?~Rjj3>$$^l#AUo^(T%KE-u8GH6G35rDXA2l)d-v zcX3-0p*!62s!>rC;-^i=H~S7;nPWPAx>XyZ=#`hK+VJ^z=LoJA8&CGNq(1f}_Cc4I z69+b}r}!_6FiOvSx1KWU1FoXb_mRg*o_i;V&UsI17zDO##J_R{wFe8L6G}uCj;b=? zndga{Jf*|u80CIK`}Yz2;=cs9ZzWPy8QoYbniuQ)$m5rU6D}$uxMMrDhxSu@pa7%f z3|CX42FN*L6v=t>+K%aiLCQbPr)tAG>W&_ct!O=37fQbKUTEpMrNqB-1*PvU#;gv; zW;zp{!AIboFtLS?wkZ1ZLMm2&64Oz<5|zl<<3Vvco9(MuvnuA{TrnV9S~^-nVh3D% z>p(rQbyK%UjIRigo}9vvKfR7EHLd-^N_DVR5-DuD27qjSPo-CZPIL zCrQf9LueX8Rf(IFgW_^gvv+qhjRC0MwG*N1xUq|m`zu1<9Kta$11+gxeonF5agV=- zq};h^abCiuXD|bSZmvO=#qdS%peDrQU%m{-&|%oq(l0Q*WD;+^ok&GFbw`i1$hQh9 zU-dDeZw?{=TfbCRQ!~F9ce?`V-3j`EI*KF4f~DK4%)f zyt{A?9tJ1~se+|YwRHn$mMo&~__y5y5P);oNCyA$RTP`8V?{61B(P-@{uRsGFM0`q zcj9EyA9@;l+8~f>BPj5%exK8eU&0L4#=aMel>4bKJVo4%lM$-gp^Bm-V-Sfma*3aE z6M9MtvaTMZ+z+z(cNH!?N%@+5RA(IS5#vEB2sGS7vq{RyqxMJv;j^b>8xTPK$>W3$ z6yTjW3B}&=6hcc#z@0UY#2K?l%AJcnJp&;nMpPxRCt)W!f#_6(7Cju>a#W2`VYX~e?X@eoCpM}-HmJ5C=za-LGtW-(BhM*J8={% zRMQY19NdjPIUU#Fu?>(=5JDwsVlLs*LP96@$L1K+mUynYj^ump$CG_+hu}1rjyOLc zH~z>_9VPF*MalAaKw79y7g>w8pm~!)f{+5F04X{2{9Oe1Z;M?GYN<_?YyVC4mtUYb z9N7A$AvCR1aD-G4s)M+3Ik+-LQMvs;SmAm!Pa>XCH=Kuq03nDQo5R`9mmniX>;t+m z{|anwjB`#N2h&3L`A}?*cHo@fKKI+1J_0>1g{qyOA?rh=Ouz3uoO2K2io*<6QT@%A zv2S9Rn)-2#%EU8a67drz;TSTaT{xm?TTt-Rn=wN*jDK@yBcPU3M8)iR?D|&TFlIIA zVsq<8St&KUcjEtaB^7H|A;V$p1BavPuD0ROpe^;Mk5Yf;Bz!4n3Sl<>s|*!;u0Z1$ul6&WzFR2d)E0cfX>2hXT&(Dvtl*=TvT8 z+a??kL;~d`Pnq9-Y!&D0nSdJ1&!X_n-+)OgI9QT!c?pT%yZsWWOt=RF0*s1M>I;uH zha&}ng6$0W!LLEIf6H}6N9YmDU)ulL^k#4X+(XBsI^FG8V8V6O9NE>gHAr*E1irznEw&pfazRzE7}V8-pHu`QkZSSt0(-A5gaD?}X15MJ)r; zkTQ5RUPbVXo`9k|34FboitVcy^u)`}R(nV@Le1e_1omtsuzNk#hrjwxP3a<)hoB|} zg#r?y@3n3NAZ~09abt5D(hPqwReRP^wQC*0y_<;CUftNqw2+cX&C;~#B7TJDOW`5Yv+r` zjtirtBEOE=@<;T=6qXnl4p;A20K(zwgA)Gse=be(b~s$Uzj^Ntuh*v;)(!zfdNUb` zJRGrU6A1*$+iGqyS}NAIUf$ef(uHkunw2}k;pzjHJe}z!i1DYZ8|$RX3R}VH!e=5mF9ltOCTkc3BN= p0>vq$ED*5X&_q5pH6qsYygZRCwCenr%#5*BQru=la@U8)Ji=VG6VrU3eKyVND1lDqCJ? z)s%#cByH8Iiqtjh+DzI$>_b1aAG&I-vP`P9Nz*iKlcuF_Qqpzg1!#h%lB`?Pq)7;j z(ga9XAZ-H}W5@5l_v{0y83R&CY{z*%UEOo;J^%kX&v{B(PF7V6AuH8Kna3x z00z<{8j{PvFmM!I?u*5O-Sc%6|Np{dvX$wIzDK|oGDxK49Yre7MWg-;3lcD7Ssqjb zZ-KCrks|#uORFmsgFI|_LwP>(CLBM3Pl}SZA2_lzULgbVp z)s>NmZ%_fy75!Hk0bWrS*-_Xv;(GuTqs8)V0nIlPw=pjt_tU#jva%NajS!;6XtY!- zXkz-LGP+Z5Ir$;!h0^pBbBIE-!8Y799!SjsD~)vY1Wdk$^N zi;PC`cD_sK{3jT!Rl(?ass^DF`nZpYgYV$&I)c=-^b#;wt=#qN z-(xB+o_~+{rtlm-z~sTd5%WyUjz)`0D0u8i^4D$xOhkuA8U5og@qKhGeS1L0V)##g zNN(L43^_UTs984F71cPmY{Pm_4ThW?;*(zVz!fyV58pq#2=@14U$p^K{%trLS}-~a z@O2-*pea| z248&^JsM8!3e1GTVWztNPN1h7qti8=oGbudV8G-kAh&iM&h=Xf4fGNC_%ue_GOWw* zMMyz*;c|=)7v57x)3X9|vaO;b>}$S@?Y;&qWt9kFNPri*3Q|SrMub$65skr@cA|$v zRPH_ma>kGLKi|xi^QTh30&_gH-%qfwm&uO9cskmMj*Os4g{*=*5Wx#)16razDnN5+uullM=FFy2Pk-G z=RC32_)X4<7qVKBNCG@SZdE-(HO-A^`##9P6#(+F8z#E;F|zli3^*71A1U7P0`ASbu5EI!co}{D zWyU&Rzu{8}Etypr$Gz)uZ{CIXL_3z!yD=>*nbjWpte>&Yy-Xb2j~4LX=x~~f65bSayV(wo6k?-#n>qD6v<%x9JZlUi)hsG9fd=*2>a z3Q}GDTawDlw+(39qtWn*Yu;8#Bp60ZHHz2{G)lN#2ny19-9}2j6z~~v6rKICSYTe$ Z_FrAxgeclL-QoZM002ovPDHLkV1h9(YPZaqv{w zZ=0e*000=zUos3d6-NUAz)3SBeS7@WTE2hUlku~?CnrxZDz#vAYXg&EMYe-?xmT38 z2Iq_GF6cpHKGyfV^3Eo(z{atmf3&L~9>F2=370LA)x=!`enpxE$@$T;&r>1JyPZw9 zTsn${CczLWX1lOV079zczrI2ZJ_JDlhrMay@dGf$k=em%-en?}Dr8Lx}qUtd#GoJ5*S`1Ce zbaFamVXB;<>+2cV&?P0D)*=j$q(|Mw*lzDcom@w2b;azmb&z6wS&6NZB%Ol?Q8Zj) zH9^h(caX9hmMS3Im3a4gO4A(@A6?O)5+M9M6o^5f59``fc2v&!REbZxUfrx|4L*2F z<`vt|#m`9ed>ng`(Fv|dy%EG657622U#KVzbxL;^72*7WK=``~M{`WiJNm`!stTzz zMA)5|!z63~piCnw5hLHJ%o9ur?5cSmVnLHVJRyPjkHnLT+QKyZ2YAhr`TKySjFwtX zixS}NB+TeiRNOm3Sz1!y7dGSIHQntSPTm$fARM|F?sMkO-TDWse4AgTQwSoYX9ziw z4GnCpTbtj5lgO>ecTs)fUrTI3`2R|i&)L_v`_+Ww3;)vxDi=#at<5i=l(?MQuMZ!4x<}u&WMh%AS4V& zphf~8u7nm<$?KJ9*OlmosudDxSdJ`t@aKSa^c@ z+aIrB*m`zN#V)Fa73ehB5lSF2_#rEk<}h{pOKQ9%cn7&|5~BzPZoubmZ|$Ps3of$)2A8Y7td!ll>D4TEPLgPprhiJ=d;wFV+wO& zH({Se4*ZlYpnG&+H)fR{P&p~8FnE)uFUv1|^vQpkT+&76bH_jS0N?^%S83@~)z6EC z5%O5@`#TI^x40o4p}iiiuVPk4L!vmD8x`frN#^(e7&yZtpa0b1Wa1t*7n=AYajW(q zQ%|KxUvq>nFMs`NO}vytRB<7pM>8O?@AOy^)W{#rU3nrZk`3gBx`L2>SRvys*)mvVfB*R0WbSSSuFCJ*> z&_9)sx#>$Z6nKk zH@87o{R0leE?GYuL~0vcCC-SD_ORO0d4Ht)S}SG^9jip@HTX+C^*k8C%#( z;KT_K#<~$iMJ%gW4 z2-)p-_A1h)Gk5-D8}p@G3d??VbCJl4LQSW;!}}O+w)<06P9rjt6fqj+=|f8bgqJFmV7Hu z51%o7;ww$oe;wugtw9$0SU+XKq;F!)=jialgMgakD^A}RjA;q>^L1ay^1W9(aLy;Z zYAb!0{%(VKcgHwrGV?t}LNHqFvUVLzS1?y*FRfvVb~|ZR7|2t0KWG4)58^O5tA^;6 z@Ulf;MIdW`N=vDi+H5i>p*SwR4EkQ)qGyd>-V%C^Eh`sl;;?4*G>Ch`cz8MYfgPGM zP%a;x;p=Q`FxURC39BJE6Xc5lv_YXalo)aeVerFT6JF* z0`~S&m!bo*u2?5G_7|Bc`hKuq?DZM}bwZ0VVLZZ%yA$9ixxwPY9)UxVi>RK|s*clfwmBg=dCt>vsdC zsJxDcjw_WF7hE!@w1uxs12gZ`bGv%={3$>9%^$AM*p=F(@cX3vG3*H9)`JP;R+490Z`V1SN zoYqy>HJ4P~hp-1rvKHcKf#e8Nhgmx^Y4`PSCHY4${tw1vj(Pn8A1}`i29KXUJ^(X> Kr4h-%o_en%SRCwC$oLg)aMHt6_$i<*kQHn*pv@P2pXycTMYyaifB{8Vs9KDW>4In zoY|f2+1YM${=a0Blg;j)lmGwB?#%anGa!TzLI@#*5JCtcgb+dqA%qY@2qDDC<%~T1 zh-2hKEVV!@Fk4dOpBsS#z}u1{-&_W40t&$Qz(h%sPv!v|1EUJSFF=E2$rmR8%Ye^9 zMiqcI;7rLg{EPz51MUFU0^KD>6@V6C0&otnFi$^zOcfY37MKHE4m1K+0Fy1}ZUa^V zTQM{OCC9`x>|hm?qhVk9%W`It;7^>LnGq z2q*1{Fsl_fRWjv=IT2>9l05liiN&nvBu#dYxFpVAWsV&V z-fJQQb^}|0lW|Ykm-euJpiWX|!v}%rJAtW=PlCN=OuJuFW+Oa+t}0=EQ0{sr8PNk~RjHf_e_!Qz;SsmExy+~)}JIwmJJN;Z(F7BZaP z-xr#fMP-SfPB78F1ZcJlPzt~zY8>YmayF}8bLmhB4X07tS z2@UJQBt<7WocoTX_G8{kOioK%Jm{;awYB(x2suNf$Iq|+F#Gw?-dJ8SVC5s?$ z2ZMLPZoxgV*$2FaibykKX-NF_m;#&aj#X4EP|758ngatmf{F4+7K07~ZvwZX#eTy& z-`Zs{XaKXL+e4Td5RLe9!16LCeF)q{PEsLaFs%$;klsL*)clQ9dV{tY*ibG1($OQl zMzK3oUnoWZ4U#|zA%qY@2qAqsYygZRCwCenr%#5*BQru=la@U8)Ji=VG6VrU3eKyVND1lDqCJ? z)s%#cByH8Iiqtjh+DzI$>_b1aAG&I-vP`P9Nz*iKlcuF_Qqpzg1!#h%lB`?Pq)7;j z(ga9XAZ-H}W5@5l_v{0y83R&CY{z*%UEOo;J^%kX&v{B(PF7V6AuH8Kna3x z00z<{8j{PvFmM!I?u*5O-Sc%6|Np{dvX$wIzDK|oGDxK49Yre7MWg-;3lcD7Ssqjb zZ-KCrks|#uORFmsgFI|_LwP>(CLBM3Pl}SZA2_lzULgbVp z)s>NmZ%_fy75!Hk0bWrS*-_Xv;(GuTqs8)V0nIlPw=pjt_tU#jva%NajS!;6XtY!- zXkz-LGP+Z5Ir$;!h0^pBbBIE-!8Y799!SjsD~)vY1Wdk$^N zi;PC`cD_sK{3jT!Rl(?ass^DF`nZpYgYV$&I)c=-^b#;wt=#qN z-(xB+o_~+{rtlm-z~sTd5%WyUjz)`0D0u8i^4D$xOhkuA8U5og@qKhGeS1L0V)##g zNN(L43^_UTs984F71cPmY{Pm_4ThW?;*(zVz!fyV58pq#2=@14U$p^K{%trLS}-~a z@O2-*pea| z248&^JsM8!3e1GTVWztNPN1h7qti8=oGbudV8G-kAh&iM&h=Xf4fGNC_%ue_GOWw* zMMyz*;c|=)7v57x)3X9|vaO;b>}$S@?Y;&qWt9kFNPri*3Q|SrMub$65skr@cA|$v zRPH_ma>kGLKi|xi^QTh30&_gH-%qfwm&uO9cskmMj*Os4g{*=*5Wx#)16razDnN5+uullM=FFy2Pk-G z=RC32_)X4<7qVKBNCG@SZdE-(HO-A^`##9P6#(+F8z#E;F|zli3^*71A1U7P0`ASbu5EI!co}{D zWyU&Rzu{8}Etypr$Gz)uZ{CIXL_3z!yD=>*nbjWpte>&Yy-Xb2j~4LX=x~~f65bSayV(wo6k?-#n>qD6v<%x9JZlUi)hsG9fd=*2>a z3Q}GDTawDlw+(39qtWn*Yu;8#Bp60ZHHz2{G)lN#2ny19-9}2j6z~~v6rKICSYTe$ Z_FrAxgeclL-QoZM002ovPDHLkV1h9(YPyj!8s8RCwC$oq2RrRi4K`_q}?xS1MJ6#UP8w(h!KUNx-H>1Q%%3 zcElOA$L_YfWzLy##xrBj(ROH^X?yg{v`)9%X}hOe$88j*T@Xkm3s1)`4Cpj;9w_bg}_x|qp_q)G$uVCP2Q7w)I3S28;20~5| zl2HiZ1T@mqqDUE#f*PbaD4^7U!gwUG9f%C1LDAnEG`oGaG{h=_yaR-rjDeIb2(bo5 zzNiO-y9b2;&2FECA)WxP&mewI`v^rotOtX|$s)j}S?y1P_-jDT;G2-ekn%Y_5_}j4 z510V6*)_#b;%fzBMh4RXcqS-O3}t0B+IFbl1ek2Lxxx@1AjI$tlwWIpXp+KM5etX6 zB}{FxtpbgZVKxX?FX} zP6DJMR%M`vtOX01^x{jze656!9vR%}z!3L!%mEh7YOlSR6Kj_7moe(zRk*GyAauBb z$_M`rBOD%VS=y{ef}>2T#c?%oQG#z7H;&QI%B?v_!*4RMRWB)Yx;J3?CkICvR zFe$L;VguebaWXk8@5H_E8c^DGNVKM!W2^s>SVR5!lciEFHc7!1;vxWD8!?jXMN7!O zZYh>=02 z$eYopjBMNf8MUvzjCI09yen?Oa_M*~e{%m|tDo-qA_`0S-OGUBd#zFvfS7Wl1O3aNhPm&5~s z3pZD#I{1zm`Q+aJ4_L;IOWwGzI!4WJp2fds*M%1gDckE!CPv)z19EP^6QL+cX)|=V zg2wmWq4m@MMaJW)q1IAT)L1NB`qM|rnz!IlzziKb+KU&YpUq6-7lj(pJU+QEpd(H<& zYpSVv;hD4qe{cv;l>X;v0M*uWGOc;z28?KwbhV@tU~)Ja`{?5+R%^fRiwFI^jDVA* zvn8E?cqoW#ZUN)}^(j=Rt6u?BkA!-?83OuaG8Q9RQ;mIE9+&<5uhG1Tm6`gBcN1&# zb-V6ax@J_NmjljsTAr z#o@sJMNx);#5H{uS@W;%)c5X1iwW-Ehu%lUL8#&Y*-LIfwb{E|w|`?A2ti`aCQ@~*XIa`< zPxFWCi8VH0xpXXQR#sQ}X4bGz%_HaL+ptZ`L+W~a%y6EHs#21GxX;Jv`~M#AcUBT> zY@~I|r2u$ASHTTEp0_RXncDuq4KhJ**Y>8#jJH!e5+O)j;S*kw&Krl=FdjPVnj|J z2P2-c1SGvKNN8pz|Na%U5nq*$1S`t0j=vnmV(D|yyyk^x36||kc_-M46X{|(~7VEPjP;FzAz_$Qz4HND)|2x{B0jfQvD5-2TB z_%@R}n_;)EBxl9#sE#a<3PLI%RX`!`Yoq?1SE+yhHH>gDy;YE2SBnww<2uIz%ejiD zEMvyvS$ZQ`^RLE;Mu{B%vd_uYh=d80?51h`JMC&~$`uHq0qsO6W;?F@`FIyDCv>EY zXhThU%g|880Zbk*w#icl+=j_JjI0F<@qYUjtYgQ6BGBvW&$%2absc~4=lDL~ieu_5 zGa}g*jy5RLegIgOa1S7uteMa2uToYUta=paGubWg#`{TzP$2k6bUX-dFpb6>lJ+`oAsu?pryUUx=- z6d)y`iUatzen#`=P3R4EJ;+@P6CV8?uDpUS;B&f-XhSuJ{^c&hCy%5r0Ua+)jDFxJ z1Dh9m0{<+vgKp5eeG7GOy+o+8qHEyi9m&*ZHehmiyMPY@Awh4drF`{mL~5(jXAbD* zIzmBO3qK}&=pdGH<1l%=NdsR<1tCmW$4(~a#+7I}mk`{)8$*wr{_FsHQv;rPH+2KQ zJ$`VJHDe)-g>NC_vGgRMGtYDKI87VgCv>nJQ?>{5s7tz)jrSLPqyng?d$)>x!gM@W z--LhfPGYU?b42*WVREkf3skGC3;6AAg67Uau{!V-7p6A>XJ$QHKG{UemQRTLd}zal zcgy!A4!(krYB#mxS-1kin8>;2_8!6SP;HvqOVieM z7Y_kvTCAy&Kxr|}AFikAgLQ-}kAfaU%Nc=cw)P8rWV=gJ9d3+(AAkAhps0*o_QRgR zKW*0B%W2&DF7dYJi;sXVlXf^vxbg_Cf7(pLAO9PF@fXAc0c@iuplG&)!0+hk=A6;g zfA})0-NnddKkhSj(d$p(KllX~Rb|{c(?fk$9Ue4H*LZW1*@8y@DS)UP1Qk#n{Fq zo)!-sFDLV&cE9S7;yr@j?$5pb0w2I%UX&RD{V_}KgkIANntOP^=auH|>oWu-`~}Pw zhAp_c_w+(Pt##KXqUUjeX2=sTeCc=5yq6>ed>M~%;`Jvk&UeHHV)pTQbHK$ zsdX=0(07oB3;|=l|5(z%_wC!pm%o3Q@QFiYwkk-#JO#@bvFzSX@MHcK{0Fv^J@=;m zY5bBc)V}vTzP*1UmG+8=lH%J|=HBsOC-_aDz0H?@Sk2@|*CceW-h7ItZR=>szz%lWP&fhi9Nb-NP2i4Y9e(EiC_=-2vT3m>)^fO{@Lu1!0DX24n zI0#Hl(UXT5eb*yhg0GH*nZM!-e8q*d?kOaAY~Rq_O+`{+5|R=GDS2{|bK& zwKRP42K67mj^0=eL;qN%Qj-Cj75G^yKA)CzNoS9*`|u^I-+YpII7s@K@~J5v32aj= z_7;T5PPNC2)|~+0_Ejiv)HmKtu|$HWi;SaI_TPzOB@6dJWR=WW6;& zRGe{$+pd%xq*i-My;PU9=~t1n^kA@90XTgO_eZ2;iDHm6v=2H?();QtL(MS*mEGyG zP){nKwjGyqbUj!CXXJDZL$6a+&5IBP8H@(i`8=&hgRk~>p0L$qacmQUnHi)81AAE- z3kM5;P;X0;VMQu`j+6}s4vG?M(1{ToaB)+YU)ZE(ht)pq9iV%@w&k67d~L zXi+{E3KdBq7b9hT2E4Bya7m2oW1-OJ{i=$Hg+iYTsa`FiB!l9BckbDvV7e+64sWN| z!-dab@p!b!i0Ln@s^&n5x#?2McwVHYl>ZTn1n-W=BlYJ#-8q5AjJUp071}x!F&3Ce zI-Y%)wBsT9fH-&P(co)9tnY+qKTWgSXJUv|NO=cBcruu``+0;|gCbw-h;T_bBRz04 zo2kD+N1W2QMFst-Xj!=RqI_yg6w*K z#VfIM?I`{AZG(u2Aapkd7-}etCL&^zGSJqv2$|hk2+K&bY$wO>9U)+-sHpZMsJ4jH zkMbe`7vZ4Hpe1+qx1tTP_l!BkFY<Im(`FoRAJJkacJJT`EQc@%~>^2~_Wi1v7!@r-N_(7l-fp^Xc#9cJn&1 zp{XU!L_Fh!JeJm%|O zsDb~{(9C*Z2uMAW8E?z_J1|bu#HCGwA1Pd(`zjM1dlf&a(}BKk-nFJ?=wkrZs@pek zB3&*;Af|>wH66H;b-`u>BG6jgJN(*IWsS)GCPki}>pam_r^fUDa8<98!l_zSsi_Gd z?)H|uwVFWc;oIQysGCQz!{w!N;-}U;=`P{P8|ResbIBFf!MdP1GNMoQPm`<fd!- zHgT&O#gv1$3#1Eu&HEpn2q{;`YqLaoA!FU%8BOyHuaqUB`pt+kMkfe-n0*iWrhX(c zDx2B6{Ji~vBj8pKTC^pZAfeRDfxc(R@4xLNButi9E}@&P>=tqyD`wrblXJe@O9shy zqZ~S=ocMy(OD`p3mZE8h?U2h`SvD$}aeKqlKLcmfr_b0K-+eH~LxL+|IA&b5VI=fv z>&2ra`#5iRn)vp^6$}meYucj22O|7wzc98qSqa5eG z$QP#=Xcf^PZbD?z-N7`7mrzGQj8`ki`bl5dl-$eJn>+SG-bTfcqCw$8ULr^|MOeLf zb*y!sW2OnM2vle5;}llI#PzEy(PPl^f6J_QSed4_nO<9Cby_TBscgow4>HpB{%klk zck-}jyO6-WDS}mIHKuHul%_t-RtDp|-9lF(l zKBH)_on}La9d2?%;q6#)VY2m0Trh-9qbmES8>NSugF4xHpAPavrL>; zqoXt(A?i+ml1t!bxSJ{7bAU;9)DKXR-1&VwqP7I+sA%GvHijM(D2gcbJNHw|HUkN^ zUb!ltd6h_NX1S24w%!IO!f$yIpfA*TaQk+Gg9SrU!7$S?h>wgajnOlA z;K1N7La2Z?AQchYTW4VCZ33n1dH;B)Nly>M2CCuZA^j zu9di1<}n`56Gb1dd=476-Z$?e8>3Ni3JWU1FbsNSF~QbW9)fw6eIAEA*7-*&uL1O- zAI7gVJ937^Fi2P$z4B~6r|W$Anue8Tt?uq}u~!7uG%qJ#Xymj+pgSJ#ZyEHf)&cQ- zb9U65$c`-d5!^Xzy57A!tAJQRzomNlXb=2(Oz5P$EWL-I>|hjmM5JN6K6ZBUvcZT? zUJF?Mrx$W(izw_VrcwLc`02x6bVK#!gLkG(n&**AbpBrZA(Fzm8XMAL*5(#n@pIxT zvf}f4-koKeJ!@?>ubnIVLzOmPpr7q(C>0#V81ICsHHW*JW8m_7!18G<)g^rCYN*cz z(QTEl6uG}L6K7^v-v!a4)Hjb zsT|!$>m+S0%-#8)pKPdrJVI9;)NBGWRj}u5gQ;8k5w5&dw@8{Qe6){IX{nj_Q8;AG zVCx?F-xwMz&@;whL>R*DRaP0XmE28U*qfCS(>nz5=HvOLh$Rh~i;>OrH5%D7o)iI& zZJ9~q+1$qsdh1tSoFwx0z;gUvZx$1^!BolEkfQP`8)UP)b3kdDnn_3{cE&cR_TMvD zQ>&`~k$0F6a2pA!8%FU*ubuPaJ1(^!!!IhY6lw&X(?l&Xu;&?DyY^h^p5ql|BWwe4 zeBo@P{v`d6-)=NJbrq4db{5^OHM56_LCLE>J*WiwaJ`zLIra1M?1p7*Wt(^GiV96X+93zAei5tWE7= z#II-TKB(ga?Yxk3OxYy~^LL)m1Ia%2?rwAslN-IRm&fM?2M%2&-%L_%r-!~aapet* zpeZnz|IBoms}G19grylT!XvPS1%N@vt}3-Lb~|TzEb4=5bAp=@%5jWy|Gdg=GQ0h3 zIc|fugz5Y}%`=LKy!tbm;-l|HEVm|ySgPB~o)|}v_YlHDO3w-&&WOXDlAXQKvc98I zTjc(@DZV+sh|?gR`7HESrRNSOED3i@Ik$^}gPZN4_(7NQ&Lb4-2E95^TvBj&FaF?U zk&H1d432_8+b{{Bw}%vQ(zZFMf2wM&f(ioXaAP6xkWx)C&h6(&?2JW9k<9cP9PnF& zgPGaCRZAFcq^*%NV35H0d5bav#?yJ&&Woj2;3#;%uxrM8wCp$srmgt#eb=U4ZQ)aD zuzHs+@tvRT&q$Av42{pUyCW@0nX7Zym)ZhsM8s5N!DJq+^@2gWeMzXdk8r>B9#_)- ze&bfe;B0gS{+Yvp;|wTzQG)!v?&Nbb$E0-wDGry=6COSHQyTj=zwMl~VhnTK)}G2i zgeq+H>mu&#{igG?+MZ{)vfyW~7RMMHhbQ*UkgpBWig5+t80NI7_rI)px_Y~|!P;25 zHar(Kf&py`VD5l?u!9)Xb}?BX^4@YhNeHDRaj<0c&$E97{}7y4_#*IMwH##ryW01M zbGN!NqF^d^87ET>xn?Akn{L}!^@2A&bAO${WRy!NG-^KIXPQ-rX|otmTsR|)Wbf;WI}!;3#MR) z+2^PIA3uCR@}>56y|OsM801*Pu^!bh7r4N-;=p2m8DYHX4*JcG!@!a@epD{?$~t|y z+=0vq0LjRxY58&{n1K*`4QxD7|58kj>Mf99PpOT`>?o5d{Jf==hpW(kW*L{+?g1|1 ze!4=ZqYD`H&uVRD_)mi@L_g|^_aNF~1-gGxP%pAzkYaAf#AD3iO1hN4i^wDy*^5JE zPuej{xhb?Z5u|ttvc#WQ4UV>G;DvQFHK-rIJ<9`fwz=Maya@hc+j$3L-p^cJj!KZP zc=bB>`O?DvZ10QqUD&-vO9j<~x~R4?v&o#Mw`=8wPUC-(p*u_;knZj`UGnFG;j|9# z!`FhaY7NE=hS$2Romdam!oquqP;vj(fHGhbfIl zQrTd1)%nh%bvVBjiK=q60d(kyr8l}cS@nQ}msU2Le-8ti+SHgg{}P3c0F*n#Yp?~^#aJB{0aUBX5$ zsG{^yT4Pug>7l9boli)w5Wy9n-@~<(I*-KElW)b5P#dSU^z4Hg{sze2aKwiI}S7Xy*9l zSGw|C``W_vdlK+`GMixD%5G(ci81<1k;TyUM)z{u$s>2=%k%FUi=(Eq5NEY%!1yA2 zgn|=KhpZKkIwID$LT+}0ESq+@_hK%220|AhNodCg;my@N9zSoSqqhKA6%5v~3aW2# zZ2=0(lye;J@QT)V000?PCjBx z{HB}Mu-W%L)No|dnSh9}kS{^9eDhK1%ey2`p5pwPOP6QDkdOBtT9#CNBoWX0DERN7P^SCsed`QflkiynY0 zE%s=b5sgJ%RnD4r#XFVyOs~@rSHE1pfOHu=x0`OU!rkjMe-&S#B+%vtjQ$UX^>rYF zoR*|QchXA1KK{_oNH|&cM4Ltxc5U=SmT4E6!M7Kj%u^*Q0o=2nkhGlZCe9|$6-P`f zZe&WS*MsnvJ+?9X9m08gyR>Q_Zw?Fuc`Tag7lDZDYSnm6w6sMiV#A%cUUkiaVTleDj z#oKSbfADXqBL6kk53+!a^6Le}dJo!!R>mwd0Oh=oZ9ejcXL{*fBTg(@`FXltBuf-A z)%yz0pL6z|*Z5t=2P}tMHuA$l>aFMtiB)pl4Ky0^ngeJ5U@f&~XBvf#a=kBKYqfSh zTBc&2SntjlkA(k0=L*$2fBA@HDK-dl=3cZ`Ut>ryrz*v67OuqGAdWS!(`8jJSntcZ z`su;!J+Sk=Bl~1>bxB)@z&YFh$BaFDPc%P?Q zWl=ep^SvB|MgflA6>s0EY3b*Rp$?_9+Wz6R*+JQw^IvUjfL&+QASFbe=Q)?S4Z z(KUX*^$qjcY9g98>8!G(5)^evXqP+NK`xk@*#+`P(VkGe2T-y^*Xe%W`P?a^ zl>8P~=M!+%{J3Gw$x_D0#s7hKoCoK1u8!S2fJ z$oWUnQ5u zw_KJBDNQ}ZPE@WTp?e+yU*0}cBYWs-e*2Lps|f%C2jYb~!@@_hpMj0P0TLF50S@GK z?jzL+h?U72&-u!fNj3HZss|W&=q`rzw&$Xrube-hntl50*Wcb4NuwgYuK9*0z@{}Xd<^_6+hQW*Bc0sNF1hZ6MT~EySLL6lcL&N>YP^0y7*yJ zk5=jKRLRx=pku6Ec^~@X F{{a7&i5>s| literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-xhdpi/ic_launcher_monochrome.png b/src-tauri/android/res/mipmap-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..b47d51d4744173239e2c153efc5c03b8f163df41 GIT binary patch literal 2859 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 G#{CcPv{`5X literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-xhdpi/ic_launcher_round.png b/src-tauri/android/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ad892fa503db2f11899204c70fc8b7016c3a8a18 GIT binary patch literal 3804 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 TtK_p~3JN0wGyTQ~&)@tXT~9XK literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/src-tauri/android/res/mipmap-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..099a899bbc02cb89f56813e5f68242d4055d9980 GIT binary patch literal 4479 zcmcgw=Tp-Q(+#17mI#Czq$hN#(xgfcC}8LvQMy7DOzqzr zsc;bl;eymiy;K2}qLkPB;r$n$**&u}J9Bo<&g_Sslj2}!1?5C=fDB(J6Xzb0((2X)G4lQ3YG1K2YTc za}NJve=(Vg$ZN30NH~?Zc)YaYU3U4F*(I7RNw`AxO3y*6 z%@{w*UD3Soz(rhu)qHkZ|M=Qa&Hls4Zv)eMzXu*^&JB6Q9J+a}49u>a82sLtJGq&K zM3ev5Nl)lBF>bqvsV?L;0B!iYUQbSxqJ>Fr2QZ`<>ZRQ(*`ukm5Ca%LL5J9}$%n3a zDxt?8M^a5;bG4M7dg>9oO`p@D*1<4g6^ZpnEGjKgRxHF$7IB%+R5ViG&>Dp;NQR zwC5D~-u>CMj>n1e3Xbo1T~fY*wEq!d(VzNE0>gedL`1P+HOXx~O zYn6c}8e^-I6?SWZON@OJeYLT#S?2v|QjSDD(s9qa3=1&0$B(`DC~N}WlAe`5a~PzG z4Mz5kN(i4Rf_hm!Go2Av2jQA@QXRKOJnqY|)85$3S@>)^plv3_fgk>ayIBs7FS7in zU|ycP;#kRT9bibocl0V#@iRFErZ%R}sZ3af7n)0;i7zk=g-rhZ;fAl1a!yX@5Cuc?$%5l~6xgofeBJF5*-E{rJv zLWm?3($87#z`8i=kyk$Ye@FrL35_Bg2~Rf9b#?B
  • ye8S-c+caKwF;<$z&OHQyD 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 literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-xxhdpi/ic_launcher_round.png b/src-tauri/android/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..14b5f59fd0a06a8387bb7c46bd82e7d039d98a8f GIT binary patch literal 5848 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

    a1L|6~wo3l|@HyPJKW1jw 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 literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/src-tauri/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..cab1ff2ab3ef9300e9e75ffbb5a979520fad5136 GIT binary patch literal 10687 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

    a1L|6~wo3l|@HyPJKW1jw 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 literal 0 HcmV?d00001 diff --git a/src-tauri/android/res/values/ic_launcher_background.xml b/src-tauri/android/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..60d681b --- /dev/null +++ b/src-tauri/android/res/values/ic_launcher_background.xml @@ -0,0 +1,5 @@ + + + + #FF05080B + diff --git a/src-tauri/android/verify-icon.sh b/src-tauri/android/verify-icon.sh new file mode 100644 index 0000000..914dded --- /dev/null +++ b/src-tauri/android/verify-icon.sh @@ -0,0 +1,133 @@ +#!/usr/bin/env bash +# Is the falcon actually in the APK? The way this loses is silent: gen/android +# is regenerated and gitignored, so a project rebuilt without the overlay copy +# still compiles, still installs, and wears tauri's logo again with nothing in +# the log. So every APK this repo makes is opened and read before it is +# installed. Called by build.sh and dev.sh; run it by hand on any APK. +# +# bash src-tauri/android/verify-icon.sh [--crunched] +# +# Debug and release are read DIFFERENTLY, because AGP treats their resources +# differently and both differences were measured on 2026-09-14: +# +# debug packaged with --no-crunch (AGP's default for the debuggable build +# type), so every entry is byte for byte the file on disk — checked +# against the real 107 MB APK. Names are names: res/mipmap-hdpi-v4/… +# release --crunched. Two things change. aapt2 re-encodes every PNG, so the +# bytes are no longer the file; and AGP's resource optimization +# (OptimizeResourcesTask → SHORTEN_RESOURCE_PATHS) renames the lot +# to res/Ag.png, so the names are gone as well — an APK optimized +# here had zero entries matching "res/mipmap". Nothing but the +# resource table can say what is what, so that is what is read: +# `aapt2 dump resources`, then the pixel dimensions of whatever it +# points at. 72x72 at hdpi still tells the kit's legacy icon from +# tauri's 49x49. +# +# If anyone ever sets isCrunchPngs = true on the debug build type, the debug +# path fails on byte-equality with the file named; --crunched is the answer. +set -uo pipefail +APK="${1:-}" +test -n "$APK" || { echo "usage: verify-icon.sh [--crunched]"; exit 2; } +# resolved before the cd, so a relative path typed by hand still means what it +# said; the repo root is where $RES is +[ -f "$APK" ] && APK="$(cd "$(dirname "$APK")" && pwd)/$(basename "$APK")" +# the repo this script is IN, not a drive letter. build.sh and dev.sh have +# already cd'd to /f/Coding/SoulStream and call this as +# src-tauri/android/verify-icon.sh, so ../.. lands on the same place they are +# — but a checkout on another letter, or an APK checked by hand from +# somewhere else, then compares against ITS OWN overlay rather than F:'s. +cd "$(dirname "$0")/../.." || { echo "cannot find the repo above $0"; exit 2; } +CRUNCH=0; [ "${2:-}" = "--crunched" ] && CRUNCH=1 +RES=src-tauri/android/res +DPI="mdpi hdpi xhdpi xxhdpi xxxhdpi" +NAMES="ic_launcher ic_launcher_round ic_launcher_foreground ic_launcher_monochrome" +bad() { echo "ICON CHECK FAILED: $*"; exit 1; } +test -f "$APK" || bad "no APK at $APK" +test -d "$RES" || bad "$RES is missing — there is nothing to check the APK against" + +# 1. the overlay itself, before the APK is opened. The monochrome layer is the +# one Android 13 tints for themed icons and the one tauri's generator has +# never made, so a later edit that drops it should not pass quietly. +for x in ic_launcher ic_launcher_round; do + test -f "$RES/mipmap-anydpi-v26/$x.xml" || bad "$RES/mipmap-anydpi-v26/$x.xml is missing from the overlay" + grep -q " layer — themed icons need one" +done +for d in $DPI; do for n in $NAMES; do + test -f "$RES/mipmap-$d/$n.png" || bad "$RES/mipmap-$d/$n.png is missing from the overlay" +done; done + +# the PNG header's width and height, eight bytes at offset 16 — the one thing +# about an image that survives being re-encoded. Printed as 72x72, so a failure +# reads as a size rather than as hex. +dims() { + local h + h="$(xxd -s 16 -l 8 -p)" + [ "${#h}" = 16 ] || { echo "unreadable"; return; } + printf '%dx%d\n' "$((16#${h:0:8}))" "$((16#${h:8:8}))" +} + +LIST="$(unzip -l "$APK")" || bad "cannot read $APK" + +if [ "$CRUNCH" = 0 ]; then + # 2. debug: the adaptive XMLs by name, then all twenty PNGs byte for byte. + # Nothing but the overlay makes a mipmap-anydpi-v26 file, so its absence + # is exactly the failure this script exists for. + for x in ic_launcher ic_launcher_round; do + echo "$LIST" | grep -q " res/mipmap-anydpi-v26/$x\.xml$" \ + || bad "res/mipmap-anydpi-v26/$x.xml is not in the APK — $RES never reached src-tauri/gen/android/app/src/main/res" + done + for d in $DPI; do for n in $NAMES; do + got="res/mipmap-$d-v4/$n.png" + echo "$LIST" | grep -q " $got$" || bad "$got is not in the APK" + unzip -p "$APK" "$got" | cmp -s - "$RES/mipmap-$d/$n.png" \ + || bad "$got in the APK is not $RES/mipmap-$d/$n.png — a stale res in gen/, the overlay lost a file, or this build crunched its PNGs (then: --crunched)" + done; done + echo "== icon: adaptive + monochrome, five densities, byte for byte from $RES" + exit 0 +fi + +# 3. release. Ask the resource table what the names point at, since the paths +# have very likely been shortened away. aapt2 is beside the zipalign and +# apksigner build.sh has just used. +SDKU="" +[ -n "${ANDROID_HOME:-}" ] && SDKU="$(cygpath -u "$ANDROID_HOME" 2>/dev/null || echo "")" +[ -z "$SDKU" ] && [ -n "${LOCALAPPDATA:-}" ] && SDKU="$(cygpath -u "$LOCALAPPDATA" 2>/dev/null || echo "")/Android/Sdk" +A2="$(ls -1 "$SDKU"/build-tools/*/aapt2.exe 2>/dev/null | sort -V | tail -1 || true)" +if [ -z "$A2" ]; then + echo "== icon: NOT CHECKED — no aapt2 under ${SDKU:-(no SDK path)}/build-tools." + echo " A release APK's resource paths are shortened (res/Ag.png), so names" + echo " alone cannot find the icon. Unverified here, not missing." + exit 0 +fi +# one line per file entry: " " +MAP="$("$A2" dump resources "$APK" | awk ' + /^[ \t]*resource 0x[0-9a-f]+ mipmap\// { split($3, a, "/"); cur = a[2]; next } + /^[ \t]*resource 0x/ { cur = ""; next } + cur != "" { for (i = 1; i <= NF; i++) if ($i ~ /^res\//) { cfg = $1; gsub(/[()]/, "", cfg); print cur, cfg, $i } } +')" || bad "aapt2 could not read the resource table of $APK" +# the other half of the same optimization pass: with resource shrinking on, +# aapt2 also collapses the NAMES, and then even the table cannot say which +# entry is the launcher icon +if echo "$MAP" | grep -q "0_resource_name_obfuscated"; then + echo "== icon: NOT CHECKED — this APK's resource names are collapsed" + echo " (aapt2 optimize --collapse-resource-names, which comes with resource" + echo " shrinking). Nothing left to match on. Unverified here, not missing." + exit 0 +fi +# the config is printed as "mdpi" or as "mdpi-v4" depending on the link's +# min-sdk — both seen on this machine from the same resource tree, so both are +# taken, and "anydpi" matches the "anydpi-v26" the adaptive icon lives in +look() { echo "$MAP" | awk -v n="$1" -v c="$2" '$1 == n && ($2 == c || $2 ~ "^" c "-v[0-9]+$") { print $3; exit }'; } +for x in ic_launcher ic_launcher_round; do + got="$(look "$x" anydpi)" + test -n "$got" || bad "mipmap/$x has no anydpi entry in this APK — the adaptive icon is not in it, so $RES never reached src-tauri/gen/android/app/src/main/res" +done +for d in $DPI; do for n in $NAMES; do + got="$(look "$n" "$d")" + test -n "$got" || bad "mipmap/$n has no $d entry in this APK" + a="$(unzip -p "$APK" "$got" | dims)" + b="$(dims < "$RES/mipmap-$d/$n.png")" + [ "$a" = "$b" ] || bad "mipmap/$n at $d ($got) is $a, not the overlay's $b" +done; done +echo "== icon: adaptive + monochrome, five densities, by resource table ($(basename "$(dirname "$A2")")); release re-encodes the bytes, so dimensions only"