From 10e5dd81e04fbbe6e4a77f06e5c2311e7503898d Mon Sep 17 00:00:00 2001 From: gogo <27868171+vzts@users.noreply.github.com> Date: Sun, 19 Jul 2026 09:18:45 +0900 Subject: [PATCH] =?UTF-8?q?fix(branding):=20regenerate=20raster=20favicons?= =?UTF-8?q?=20=E2=80=94=20white=20mark=20was=20shipped=20without=20its=20g?= =?UTF-8?q?radient=20tile=20(#7390)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(branding): regenerate raster favicons — white mark was shipped without its gradient tile favicon.ico, icon-512.png and apple-touch-icon.png contained only the white network mark on a transparent background: every opaque pixel was pure #FFFFFF, with no trace of the red gradient tile that favicon.svg and apple-touch-icon.svg define. On light browser tab strips and bookmark bars the icon therefore rendered as a blank white square. Regenerate all three assets from the canonical SVG sources: - favicon.ico: same 7 frames as before (16–256), each rasterized from the vector at native size, stored as PNG frames — 141 KB → 16 KB - icon-512.png: rendered from favicon.svg with the gradient tile - apple-touch-icon.png: rendered from apple-touch-icon.svg at the 180×180 size layout.tsx declares (the shipped file was 512×512) Add scripts/ad-hoc/generate-brand-icons.mjs so the raster assets can be reproduced from the SVGs (byte-identical) instead of drifting again. Co-Authored-By: Claude Fable 5 * fix(branding): keep standalone PNGs truecolor; palette-quantize only ICO frames Review feedback (gemini-code-assist): 8-bit palette quantization measurably clips the antialiased gradient on large assets — 1242 → 253 distinct colors at 512px. Make palette opt-in per render: ICO frames keep it (16 KB container), icon-512.png and apple-touch-icon.png are now truecolor (+9 KB total). Co-Authored-By: Claude Fable 5 --------- Co-authored-by: Claude Fable 5 --- public/apple-touch-icon.png | Bin 7230 -> 6275 bytes public/favicon.ico | Bin 141845 -> 16354 bytes public/icon-512.png | Bin 7230 -> 19579 bytes scripts/ad-hoc/generate-brand-icons.mjs | 77 ++++++++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 scripts/ad-hoc/generate-brand-icons.mjs diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index 4d4a0d1407f0f0db9dc10e3310d0c8893681cc5a..8e14a08a23d55384b4109ebf2bb9203fdf317f79 100644 GIT binary patch literal 6275 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 E0>SdMVE_OC diff --git a/public/favicon.ico b/public/favicon.ico index 1b6fbae4f347500cfaa64a8a81ca14027b1995d6..dd9ad553dc72e54ba48182d2284d0030afaffcfe 100644 GIT binary patch literal 16354 zcmajG2{=??|37?YkgcM{(uz_k740iC*6eHcWu}NETgnodv4p576+%Oc7KKu2HIyQ| z?CT7Ju`@Hq%$S*T-dmpcxqjFGeXrl&r7>r_&pl_p=d*oJ5QKunAz4`n{8fem&=3>? zL6EZY(z2l_1Pz0Anwm??j>{lOT^xe2*rny2;C<{02*Tr+mdTP3^m;7>5s6F7+m}O- z?`G)V&*J#jau9T97X;m~vN*LuYP}TLu)^3#-v;~zGk|0zM8K=s9vNG3_--q+(*~_} zcCC7++w|>fwXHe~><7)q84M-y34Lr->&ZjZHwONUL&U-Bd0!N=O!H+s)FjN_!h^|h zJ9{bi=eQj`R0l6+O(V0mY52}Vc3tymTF!i3vjFT2W*&d1Mc;0KkW7n6=sM*%6n%5z z-Xr?m?9s$DTKpZxk1AH>pW$mam_PqaWIi4tBn=ai<~w_a6YkRQJsL{5J9eMcW9&R~ z<6gVD+vtt7(eyk{S8uNse!i=he&ZhVXLTLMD%JbxC2;vxUbeBYT{cV~N=&>lk~o}@ zIJ`{qz>2S6i)5gYQ!oUH-B|pG@;jfi09G~{>+76WY}wP$VgCa!D@wJ-Cf&vAuF_9a zl-Pz66BCm*x${bG)6>K<#W=-3>fMm?>+d=F z=GCawU(fREtF2S-PdXyotFTdgS4&D({x(gD*Ox;-&!3e0yU$px*7i#|d!honch5`X zPhI5K2&3YgL)ziaKY3YOc#R^TR=(D1*-_Q6Wq5zf=Cbsit>B|U#s(Jpg}V5d|DSSG z2Ah@tm7D(4q~D<2x);mM%qM8E*0e0TbQkNcR?ECy->yU7zT3zMlvszMJ6e%cYP?g~9pmISyg4zV7+V`)DLH#yjt-z}evi{#ep|cwu4kMKQQnz?2roCioMRgW=cNEgg&x-(Wt!FEnoO zYCQeg4O(R4!1YxA)Xd=ZR9eE_zj~)fZ`|uOcAjf&Sr{3edil1~*qJvt-0yh_<}S>) zbo7P9be##9Yw1{+n&FR6juMjjQ`3UUY5wFCtERD8?{puyu{?v>wT*qAmnfmJG_T8J zc`pZoiNjZ7cq5||&x`nz(`}|MUFL3+PYPO%ou-OD_L{r#28TLLT{^*qGI5zLF6}aN zoqGRuvhYK@k<)x*>vYja?%+_L6`m3lHQ&@a@uIlLBZzwL^3;>pvtKJ<-onDj7~@L? z>qphZkoUU$07p$=U$Os13}VjP|(9{MNlJSi}%XW+G{Nwhc!B~ z;=%~NU|Fq66Yvfg>#b^;<7|D(x3v0nsM5AccI!BSNYn7>?4}nJNA{v z!a~Y|1(IPz4Zwxw*prS*jtZSlG9OX0-Ckk5uQVL0@*WmeOV9ORKQwwOVGx2?{1bOX*<1-F||Vf_>dVJc-0C+w@=}(;+78 z1c9?-L71dFK~|v^o^zM#hT$Hb`i9qKX6QO&Vq3thFH2)`{K9kg#BjIDh=q|9#j=}p zSm*o-Qp(j`Cx7_wi1wOnSe{tr9}wUNCw||)?B=rRs6hS+-z_xg@p4Ys7GcEmO2bpV z!#<5?2O(HQrRN*@x=Jwk_WxHD0kjBd{zDObujB^^LcjYDiVT{%4Vb(ByZMy$(QP zaB+=AyMf&jv{VD~(_RFaK@)cxfEiP_4ltk|KqEVVKy3!#{UX>bjsIV21d#JT@dk{) zghl{|0QLaj0r0Z~GXQTEc@bj;zy?4LxN!j{0UQF80hrXRW77!^F?I$Zv;;E%Zvgy^ zigoQ%Dseln#)%D#TK{MZe0Dx&Ta}{!Vtg=eM z)C{;^2hWF$XFh2*uN0Vmn7dB`*qE3a2#6H2=Xt|)W>sB}&Dpt{M%JH(E-QS8 zp~L*&_Brt0)?+;T833dveY-yEGu`K}^!kMGXJ$vAy=gUdp<3W(3rYqrhR+tfTbP)l zoevSrFoyiD_F3XuOq@qE^13{N2E4EIcwPe7MzKEAZ+&JoJ(qIvYX8M>0egO7a=I@d zvj1}QWYNdJryOT1syI{{Z-_os@`XRkXt%V@jGu|Xy|e@ zv$Tx$qk3U@bQmCabK5{@>|{=Uzk~NcP*ks(>sNXXv1al3!IIsYdm)pk5f$KT``sXlX-)S#{^c4I~k6CkYyxQ zG|3bYuB{Zt4<|ZsiIa2>U=?ICgz|r zyQ;jMeu)HKB1p|4^`t`v2H`fC+7*UR&Mf0dHud{IN-hgrsnW%|$oFBpZny`~k)UtOMv_QOBA9`D(eSc>gI_Ksf;1 z!KoLqUJIQ1G+-L=+ikS?3WxzP4LBE=#uC#k3EKZk+$D}#Vizzz5W0X`0N;RV0D}21 z-z>4qlD-9F{!f|#Qv#<3WCQ2~&;XcBpHIlZ#c%+l!ufe2huh~93SdsaWN~^a015%n z14N#A^{&t50zh6MPyvCBJ;()=FyI?LQ~rzQ?$_;fo>BfAn5SN+^Zj7JGl2lR0e=7? z-D7Dq->A3)ufw1HajQ~Vu*EInqV^`L6 zxL;)du5EMh;&k@3+Ia%YIQ#Pt@Ng}L4%|K}5VYN0_ zAp6|?7^U9<69CSjT_SYZoasO9$^7J0^sSyc4KlcX{fejtLozdm$J97U~H$I@l3I{k6FlCpCGm!V=cd`b~ z1^4?$PGsZ_`dtM|dm`rAQ!)+cQ7=BW4~)ZP}4E>1T16H&)*>$+FD%^b#q5U0aU8YvV{tsfdP22OXOv`rvQP5{?>Oa0OXpGEU^HPix;K7`_wi-!K zNlLoVQA3URI3JJm{+!Rja#Yx9H(k^&I$vX${Lw|Ug z9)dj51!Q;3gKc#0?yKcSZM>3~*pD%#R}xfqAr7{v=P{+`kdmF?vVy-_m?Uk&YM5gE@-mwvkN54{(@{q`rE4#B(uJZtdq(*YL81B0k2=I; zt!5+n(VKu(VQXatp~W%>OQNjsnPUVgoB~%zja6*}s+=DfGE^Bh@?{oq|3K2df`^^H`t~ z#bM^S6V!_B>5bF+-xj9j&0Xjfr-*h!*Q1t3ed*illoZ0IOtyLQ<@O=j-st-20GhaH z6tZ75)uP=dnPs*jvr6^e}AF%YfpwmFyTu<6WR&!IoO z^H!6M;iuJ7na#>Gl)Zx=^=zV4s`-evEtPnWB*o+nXo_vL0Y{IdDCZi7uT5>xXcpUv zksD&oe38}PnS%byb4nespjq$4$gE`@Nm2Lgy~9$=&7d6G>s+(<7t9)oy#Tiu#-xvZ zit$FbM+UtK%JIb+@r+WL>}{P!>m`Dke=}9xf7qf-A6*$pu9b9xr`GuSG`kB*Bt+om8d`}aWvAV zGkokY%P8pMYTQKKT~;rsv@h5fF)4VYMoL>n;`q+6kspV|NV4d%ic8vp!2FiXaJvc_ zrnus6`ktAh>K${xj@b5u^t1LH|Lg5i7gGJrPLy{o){CH^pl9`xj^ zP=j*m^r;liS3=4(O$5HL)U-{lk`zmT+|(70PP(jC1+ekI5hWgM#{VPAHp2uEC!z=c zLzKX10saEy1^g0t51569bz_)01H!7;T8t9O7z|)WkRZ~nL8Rk=U@(A;XeMsJ)hsa` z$aa8jYyaoRz)G+)7z7Y2U`ar8;6UK7!1#ceT6IqY(*^i+(0tLM0p_a0fUO`$S|saM zy+uE^=-*7;{<%9azAM-Y#sqBpM|&~bS=t92*k<6cIKCe6ivJf%1p_XzDj?IP$Oz0I zFezZw|JpVXc>)*rUsnCEX9Fi%@@$LY64n}UD7U+RzN?SZ-3LB9x0eDK7UpsR)$;lW z0Fi;H2LYm*IR`RMkcm12P#boFI-EXJsSbBFF^^*Q?hn@3N}naq4L_JB0v8n% zcJg6-{0_JnL_>YnXDMd`+w452a`K06XLQ(~8}tbU+}CA+>vi%Oh)4i-bb&rLmGKzZ z%gL;#Al994>!N4mQ7v(l^C4WyVCN}EkY$03(0B1FFoD2Wwi`N7d_qT}lGz~Wt*!@& zR==$W^G^f&PeZr4I|CS63-|f%KH$ngnAU571Ev?Gzr7|d^y{gB%Bh#50snTN3kJ59 z;&!pq={(@&RxsPrGK#ZLpKln*xPTM^QE}^O4+?ODuio`~U0#fSQy#Wk;zr_9I2}EM z;qec#E?7|dy8js2sXe>4vq2IqxAvjLgKGJ$q8To~yH7Rh8cbgJS>;>z6t2wYd8^c` zK82M#ygRuL`8<%B@t#fDPmWJa8jtJOKJlt70i*qgpH+@Rkjhb%!GnEx2wHY%k)O}^ ze|SibSZknIz9UuYh0&c|-;GK*@NR|2pY_h3Hd2irnuBZ~5&zr?e46si^rz=@n#M>sB-^ziC|KSeqyB_ zefTJ*s4F2x5i_7(vr`ijzOeS-_C%hwV-GZZVq;pfepn=~P1GD;=CLs;o}S_a4W7t< zJTbuYdALQ95+w5FWTF6L$Wy0AR&A?JLPnz7jveD|yE3>iu5G~mY5><<(bC3QTHmS* z^;DLQx~8z{WvRO}`AyQ_UAM?TP5Iu3Y6Qos&kEeST_Ywc7m6LN!>`OQWaLdwcXOKd{~Bp z8*J3M6m?0)GnwtQW|sGdlg>56*AV=ZHosCB$E=wZ+`izSq#Cv5ZimAS2JtRS;GNHr zmJ1ZoAGjBHJF2lOCbZ@TXEV^vfBPdK%wLYYW3J`n1w`=D@H+Dd!Lt6YZu--y7lpk%v@jX`XNzu)OL%58B9%AHf zsDbe2>;+4R$5BxxWNmrxr&+eWSc@Q3liGzBe3l3+^OY0JIup4I%2v{PTrNUegBpt5 zCHd}5q#bk|sj(HMd7vgEzniYTn82WKq4L~JS~M27eN~c`cixjqiqGZ9xM23(PkMum zT92j#WF+-zSZS|c7+6q0E|$b`1r({0*|~pNRrButF|lB9I!%6ZEcxLtaK2wxpuy8oDF*)=s#e>_LDiV7T&v9{o0%mgf(M) zNyKJXd+AnKKIQqZfPGQBKmC}G>QO|DkNBh-YYnAI zv>sm;vHQ!iIt5YXvWWHT#YTc{MMu7R=SA;T!|WS4D!o4&6SYiNuUruKcmEF!F;?Fb zhDP)%yte;veZ5XyO3$@T@|A`ayjj6>f%XtBdes@)*Mt_Od;ElC!tMFA2+uGsePvTr zYf7?|IN1_ID~bD5t$CA78vA)mM}>r-ew3<|HZ1pvTA7aVzi}%=Q|q9B@kHa+2N>&J zGZbVS@MYm5H_d_9a4Fn!Qe0Bd5Ty-bSf%*dyY)QL;H+4YSnYk^E3AECpMqAWJU~Kv)e~xO5uYfCKA*0$t2Y7R4aYTwo0l zdjDT#w-l2sMJ8ZwOR^5=yCqo%^xgke*@3~A#2pZHi&x-Z->=)y0f@U6U0X0Q5DtM% z7(@a<>j7B@)Et;LED(&PJ_P+eA&U(ZAIObC({HA@lt&!|u?Me@3Zj%&BS+9n1Q82p z$^oG_*YI~TJr8u@76xb_-<~S`2zrB@)-Ir=y3PhN-hKk&YvRoZke76y_MCbDg+mzx zZ9}T}mBkpp=pzt!APbpqYyr{t5Fr`#0BM(_2SVe9?`DH``_TCikkA0_2Eu=kPE*bW z^M*%(-kE;;i90Yf@$Ah=(*5y*cOBMeK!0!aK8Y3{&-h$ERZs$Q^$sIPAVr5$GRHxu z-0A#u;fJX=@4L<2faqhs|2kXv5wto-uEuwR#z9>(P@MxVzRdDppi9{w6xHeO2Qm-P zm7jW6*k^%j13{YG#f8D)E_*M~+6Qg^p~N(hxKNyYfXD@zJZMOQ)&uA|f~IA^z1K{B zA!tYroDCdHegGPty$)XEd9N1LpRw~|=kr3?Ecq8TJRSxa6$qKUuK;z~q<ocPbyL`g!$e+yb|0PrvJoUqpFnx0~VW8+`#tZq^`MrTflVn_o=sN zn)GHZ*lxSR@8wNTrhe{a*ErRFUUSF6cXerLca=R~JeY`|^JeT&6L^LZdpdd5el|_{o*8M9h+||xtEm8cssFS{JaQ!vo1EKZv*J7XR zG-?(fw9&6P82)XomC@RuSV%`lR>wfzz+lA(8&|8~TC@6XEq~=r>)+h}_?7ZG*qhp) zc5*~UD69;pgi^AP9SB_+E8ErkaDKY&ZE!;A)A{(;{%~{uB5A)Lags$fQ|5)YhI-U5 zZNR|iUaq+B?28RS7qw2Vw~GzvWS13p5Azq6eTq2b zN!@VJca1$ivhXwJWZZAU<8v7vTofwLf;}gQ=s9{@Y5lkjX$bST;!b422V>to$Xm@S z=I4<-9!$D)l+rD_;ri8-6ORHu^b4QvN1WTmDC;L%v8%)K{kattQ_lpP^P3p4Zk5mS zeBBtaG2gDU#UCN8ksJ#%*V3&rH8RX0hkP$QoR_Jsn-wlmEh9BvD@p92oV?MvZV1JD zkp4+nh@YdC6y3%%8kztpG zC%37*q77(>!rVB%ya98fSUHZl=S`C|Rghr*QzI`jdB>~UNN{&d))9rLa{HM@cM}`- zaZNQY8kybf`TU?>MpEY@ta1O&mU8z@^G2j}B@3fn7Y3)KR|`874)A`;W?^ufXuPgD zwzm}WbLVpHc0%~RWDUutGQ>pb^|R&@DP=l6jA*8)AUEAiy=vQ+`od=s8{~mX8W*6($&BPauhK=5p;F&4P^prsA^Zxi-ZfpqTN_#k-@5*DW(03GZns^Q|aLa z55X?0mARxnH&wrGf6I-5t_f=&6&*-?6l(VskrR6_@Yq0UxsuIamE0&@+)kN1=(Be6 zEuWmKJtnMuC@fOeH2;a)8qwIPpw6*8%Q_Z)p&j}0J?OAYZ-4F9Q=5^kVRU?yQX z8F3TpZ0=#D53yww%40OXoX@m|RXqoVtiM~(Sn?YoM`?| zwBxMb+lSOzv>}BY@Wv|kPAw*hc$jMjuEm-ehE&FJf?|=V$M2NK z(7H%3ZVa)Dm4aD|Uxv`_w{XoE;iz(6ZH=1SN4uEDjifbD4l?=Rz>{9D^m-ISxN1(| z<0s$HXtMG;V;icP*YVb;xn|cfEvQCDAE61RC=`7-^I0CgOc|mnxxSdp+;YG|m-h|2 zNh<0(ykkg&mkr&-=}&&yQhP>#6^)GQE7aJpR7n?8rUkU@cpN7sLD-1?h1e^ZxJV47 z=*hyyC(O&;Q9wF-HBgcxU+hsRSGuiCN5n_bI1%nU;^zguoo>of<>{hk?U;*~Q5%Th zUbcO>l-g|s#BWpJgGE(AVIE4gM2O+a&hu6hcGq&`f{w}-$5;4M(L zJS<-=LD-FMQ&L~87EE0m*C-T}J0FKj_u#d6K*JizRyeaQa5VGORy8DXzHRb^GEPpj zitLylaZC#}n1WS?57k_C{37)uUCfMuv0kZG=(|!)+wtNf4atlFjh+|i=PZIbWw(OF zlVH6%rUB}J;1E-#?WUc4vKn5JcR6X2fKrRcK! zeDCesz4D*i|8x+2RfH7%h>;;6-GvfrEZmCU8z!E?JCAKMgVicWY?JH_D!MtA22d@= zp#grQ;e5ZCdl!3)P1weLKSNq|mv|W2S@GiIMtR)Y7oXuqamorIFIF|TmTaO~vuE4= z3I)-dt;p0lg`ISz$Iv#Uaf@kbmSUtk{>7aI!cMl})Yja3LghN$?XiuLnj_@A1?(;K>?lGP;%R{XKettcrC*f@k5e-2mipND{r>6;Tiy z<)^HEjYQ*|BHf7}5VgX$Fvhe~4p;Pe24iyRskM=@_aaQpQx3HvmcNpTT&=Rj3*zAZJ(c`Wiy0^7yi0 z{s7rw`EY^^*4;{bFJOa&BZgXek@d1z-azaf7btbcfheYOPigw5m5egM=Kk>&%zS-|CG9i?3qZ4)=_sXITkf=V=<5VLCjRD%ipJd`#Ju6;z~N zR!|bw{Nmas#!scYMOTlttw0_vt2uWh{R{Q$N86&Fwt&Gf*lo|Obi$iW4Kf7hh~al* zu`8qCk)dZT3wu{?LgW{GOWD~Q6_KeI3M4JpjrRzTHvRY%F*P#f#EAmo84?mXqtqGJp6 zHCO~s$^cak4q1F}uqf(*llZ6Wfx5R?T3-j;18@@B7NBnm1T_%RUK zpjY~@y$V*=p9DU@9=MPp&_mS+z68u&_W92U zW^PL}0gK>}7QIEg@NXvI)UGZ1rx%9;Lf*`^5o-mG`ac@3OCAC|L^l=MQ&b94RG`Fxy#OIHySAy@`V0{G z;9T}T zzk`GtbZ5b{wV-^5;8%Y4!V%&ybR+HdWp zE1{Yysw)u}w@u|wLXF(%Ejn2Lp|w`4P9Idy9Ypm{T%DY+^UN=LRd}_&)%SocVF!*q zbEL26mAhM<#QmqOwuU+34C)#33_Dbhmz8&Nz7uCQT=bCHh~<@h7HoB#wyq_a4d*3n zUU-t%>#w%8K{3LoF;4yW)9rVR?px4r9jDKoB!mkXRfK7Q3?|a$#m(D)Af6}^r7J^m*JlM`}gl%?{P|p+4Yn8I2O0l z<3z07)A1M1@BgVV>nLLEFk-NQU>Gw0rq6&3TmO7=2Xlho zUG`^-Kx;XU&^qhw9dUJDHZh8P!#yg6ZtuVQ+iYla-3-IE@A?|}s=*O*Rq(j7I&5o^ z5)zfNqyIBIK&E&)t;Ar#(-;Bth*Rv5PwS2T5o1RUe z(8f%CpoA(}LVH1ekWQ((#|@17#4cLrY{%PQr2ALW^29Yy{^phpUhzA_q&m_XYi_o9 z{b{(Z1=rOzJQU0nD-JbIz9~aLuiQfL%0Iqq{p4~a>6oP@^Xd+*zK=gv!F9>HMdik~ zXFCqbed#uZE!8(t8|#*@kZ!yjgSZu$+J2ikUQWtv(niKA1(fW_^unRW3VNfN@&1p| zVPtYNZr|+Q? zAwNZ#aA%F+*v?9AtoklcxZ0*!MWm^F1pQnCR^rq4)7i}l(--d-lzUv>rL+jKLnj3&l-|!`u{G z!oF0B26PzS^Dc_$L}Y6$N43*%?m}#o0Td{hDTyL_qb3NW=%X|OSP7qyIEYk4K;;WN zUP10~tOF*MqDss{2ENA-*|>wKUV%(elrmv`^awdjN46NgwS`DRE{urkD3f)FSU9C+ zd6~E);w`V7ibOPgf$f#a?nEOvt!33N7mYHwSrtnpzq;A73eB7ll^7(;Jo~5{|k#}JuVVVTzm@BX7`_^LEX$P?ibInAX-0z2ni=lEsW1$zE z_Gx=rJq~#-S57O+*=^+$B$ffL{XxXeVehP_iRRE7Lc0WYHaHfixzl9@JwO4u)3b=MLRztL1nf$WW#zWLSufUaAI4XZ$49_~i3PD+C6Q%Lw-R1`jOUY+ zw`aww_zJhWV2^S$uWPS)ggD!`1eW6nLB1qvJzh}}85f(4B`uG#BUZ9xUQ{%x5tRf_ zXA{J#wUFp}zlp_-8{t%FjE-xyiOJiARpuHG1}G2%VexH>@j3Tcv83H_E|kr()P6L+ zdiMx*$1RL9G$Bw3)_m%n=3N$3HKRZbgX@_-kuY7oWED>i^@)z0HXo`}vpe^M`FzbJ zE2aOa=f0|R%JEH^xE;`#;CXsRMd0{@ix=UqH$>>TYy9n3zBA&E;40`H66Gh6WclUK z_cVqOadN~+ICG!kLM&+wfP`uRsm|T6bL#KMzpKD}UE%MxYU*#kJ&V{x1=FoT_V|7w zL+1nqbQvk^aM5dTj);9ao+U1t%j|HxEnXw9!s3hNGRgH$o(`YZrQ=o+Ysi@x#S41F zRe3Z2R|tnzqYxWG;@`d!)PRQ5UT&aqu?OwZUgdY3VpBMQ4qTNJ*%-wPjqAX z;1TK6U*sc7Ta*bhtI5X1_pF%$*Ib*}%7C@XGXi9%ChD1yU>R!l3?^*-cKou{02u1{ zO8qgC8F7_GYn0h=ata=ul*;{p9_mL1VkN`mZvbRv3U?e9#m^R?Jt+tp5w+s}L_ehv zL{`Qe6{w(?Gf4E|SR?SsWT!DPA#thPShVIeAtvPd9j*x4YMT6N*~<7-t`MC%ja-PA zQ2RaTAd2rJv@bJB#4{+yP16LIF|ntW`5ue}QG74KVb@;#hV@9S=nRZuybtTzd=M1J zQ@+fv9fq@Dyy9s>Z?W@Dg5b#FRSM(a_9|p;+@muD#_UHv8+l%h+_xPZ%z;~k0&Qy4 zX+RkF__)ueo~gW_K5o;U^W<5gkgQ4g3eEA092$<8$sh4|9}J1XsFg?a$qwt%YdenqRFVZLO!~Vs zXMely0H3mn$9em)E;6>UNCHczoPFyfm4j%<)MLI^TeHIjiZP?)($eY>n zLJ%x=`*&oSXc|QoyB*Pf`()pai;;3E6g99UUp^mxFe($O!Q~$eqN7Q^}zFGnEC~b9Wftil#0I#zW1S7+gMVF z(8ICZ_6wsifqf6JmW)xxN@29PW9@_sqNB%=R=nB`iUzhpAbyBD)UMFhIfRqvn;Jt+z`x&wEJ?GA5;=t2HRX+jsA>Z18))$tLk!q*4Tfu%n1kfXDc?o<8f4G_r@b6Z#$ieEV7xgUrwS??3D#nXbR^|cNNyA~BqK$-~) zEdubnoPl}1DpEcWUf~AqKxzw=stFp=BbZ3ExRS&pL`SZ?mcRlBXNd-~Fy9&Iw#B3(Q9$SeKL!BrIa z&z8I1uF2JJz-UU!g3DJkCV}EzLB}!4zPtG}_iAC0Axf7;z&LgwJ5zD$SWU#QOYR~u zo8T#{d=%-zcdd$J`idrwAf~(5Z&4bBJ-$QDJW8xR8&RkM+LDBHdcB?4a2ZasAaVtq zj>!drC@Vn>8X?@4JJ6%tDWo`~h&*JfZUHA)S*NrbdWgL88lrD^_}M`ID*?SBoIle> zLH|eK7+;HFnoxPTR}gg}rE!!^@QTH#K_?M1)1Zb=7QYHR9j$VZaYOzx(Zj-07GGSf z(-E=V*V43+|G*yNbzE4ujPXMkBAsQ;jz|inYf;gZ!X;nqSQ7p1pPN{S{Def!O1%#9 z`;8s#WRZUOx>%<>LVmsdsFqu=bIEcb+amQIUeIK{4n$o}QBN-j^wu(?VBBrd$j(4QZT;1P%f8y*-4980gGZx}|kwI#!S0-Nm zeE0!3`0E0 zCoCDo?u2Y37G_LWWEBQyLCcXoH?&b{Z(&g{_k)X2t(th;PY`+} zk*2cZHr35l%vC5z68b-L7la@DT!mTf+qTG`=e0b7Amk5h*|YmVwzvceLFM(Aex=)^8uwdlZmx{)H_45a*<8KbH;QYG5w9@J9Cwv=>3gQK2_?wizA@fJHjQgfYXqVSpE!1rbZ@anI{bM^%Mh`1Kx^T4tJ6)2} zJ}R$^C=nPGesVbN*cw+~*Q!eDtHYYdwOB6PKk?N?VdF*5AwEL}%-yonrPfK^UEleI z{6pU_TK?Lo#7nsg+$+~B=+30BQ4zxZZLj{aVe*+C9v9}uzW;HlBfB4ZdOxjxtwv(h z*1ExuhPwWK*!{9s^tyqrH4gq8c`DYcY}JL+V#hBVR=KUvg^sqKmpm}!`z?bv9-$*Q zyz-7;I^lUoRD@Olc;o_dtC(UySaw{Wj z-jEy~;NHNyRJ&`X79HIe(RP3IgWTPZ-ktw&NXW#r1ARA5jNa6~Zqf&VJ_|;)`FzQj z(;tUD`D$!Lm)_;($NGK|xIq^dGGno8bfdVb;gh$r9U@=W;a?Ld!?CEb607XFKW@S4acfxmW) z>k-~y)sPJVOV921Io={RdO-Dn2Q>?&)sFQm-EwHbd@bG2PRM^fW%M`KgZ^%Cwpa3v z-ERed=h3ikt@P6Co+fqm{(jH+J!|V#36An;)IBUDw%C;DCZ`(QEq!`>WVK+zSKfH~Q zYuDs%ua_EKINoR1gX<}s7Bq2FA-j$$6x4e2S8n+|nwbM1a`v;Vd zjsD-sA~Cgkf7Gec8J9D$4ZKQIrA6ahzbRYk=AB#jc2#-&bl$|YLmk=)Z!AcyHs$u! z*sB@G%NHH~Pp0EHW_4TltkjTq9tZwYEkkRr#wEV%9JU}uXc=)O=!08cLgV~9&bEx5 zv|xW#mv<9WI?Zq5Iwq{&j(uH!_e;DPzr1E_^lWl!b>rK&W9Ge4y?35kucg)-vG_{R zJlgwP-^98x%QlXA-(}ukI^oc@|E(F8R`K_8E<(M$_4dq;P4!BSieLV7#ZtP>Zxx*$ zzpj1MPr?30^8}ZVDp2oLqBVF@m-Q3#oa(mhoys>|c2?*!pjP_FW!ycAeZQkdp|q;4 zy53IQ@zs^V*BT9JxO&`x9&Ic1ndA|@wp2((?6f>Hmvd+4|R@xcmhs)hVUB9GRNy`s=yfKcCV*W@y0bIVWl~etX8> z>B%=d+bxP}IcD$e3TvmAe={WEykD5^{tX+X(N_3sF;9@sv;*4}Ts_KDl#a=Or=Pv;dn z7}G5AZhF$UjdTkaHd;~Y)RBDOq^yZ)6H_JedCW?;Wuc?p7B=**<-OZ0!nLQ{y3iok z=zn!P#zy43f4OD9Ph$2*7y2b{O2u9^ll#Y<>$~SdrE(?ScbPHSM~J?qORX5;dF1tq zcc;&Y{2|Zz&e5;m95#LK+h2tRj%ym{;XC*0?oKPZywj?Pu4`b(`IRYco(2Vaw?6l` zZ?9JtY`&ByH8s57YY}P9jZ72Ue`>drzbAKrPKueZ;S{!}oytq@FXeHA~q_+H;3ReOGMZd_a8Zp~Jm znp-SVo=bfD6x+8Yb zw8}@lRz1IT?0&_k+yAW6_<5rNZ~BLh>egia-B-2WKzo(UVidrRDC-m-4<4LbtH7ihbyN1vF3rMv>8o}VT2ckJ-0 z`#AFRI`=Z_R4F{_pTJWqL$_@$**h-|m)P5L;)Z8F6LKB@99}dFZntOJ?%4rupS|ZF z`Z(1u_)_j8uE#`c*XF64l)iLGvH43A+^WJNcyP4H&;PXjb6d>dnDaAtd|Ra9Ym?xXuB+v(*XoxogLaij3<^Dw zcvweVw~P&O)0Np(=F`u^I_GQt+G3z6@v|2i={_WHi z^SA%CFkw^g>ApYqj637kJ< zk=AeHszvVO!V9z-H@29+u4H(b4==AsSeP(y@#4b2RSr+@5_dMYf4W~_z@mo>;0 zvfQuUxU@>WdmlUT&?jm66_1H=H$40GY502aas&T*-e_<0<-0upNbE7KP2GdfLWVDB zAM>Eyw0C-LDLi}Z?uMP?>JI*BrT?S`rT)lQd06nCupc`f`!YQ#aPNs#H@tpIJ^DDr zyV8|wvsU`Fs6PCoq!aaT{&_@Qx^?E;+4J_j5$aRVpD=1<_%1(=Xvh%y`&#IB##b!7TjiX)jH*GuJUM< zO0(^EPrr?xm3XXnm7Ad+jdtm$-zO8=)hM1;drPZxH(ibwAZ5YnYZIn^pR{7|oAX+C zO=?td$(4km(-V{0|I}{$jQ1+vEK)`oT08yJqfctCDsOH|7IqwH;N9a|%9%ILy0`za zBS;f2+h6n*8Svc?%g&2n?Kdg z%C4JcO)OmJ$h|EU9=TU*Q{npYQ&&d!xbwg#HD&SI6~fUXZ|&SatU#?2slFq=(a*z) zuB+#CtQ6aFg5Y~pUrAW~<@te;pGLR*dr4@CA^Lf>UW?!NZ@gQWPR66lt^_svKd)8o zS3eq=7+Yv*wOpm|Qx#Vd2<>LsJu1HGXuu{1jcYzyTfeq`NNM?H}ABu3uoyR^vu*4cd@@NNmWp zxaSZ57g=<^TTFmZ_w#X27si|k4RP&PcCPoNRyX=&+#9^#`OrAG%UvFyn6@RZrw}Go zEwtzQ>woR3liuUQasKfe+DDE2wejhdiyzL(^JKz?KIw5gf9Voev)JR^-44AOn6P+6 zi_bf`g+(v+_-)+uTR+V3i+ZnVV%1j9c1EW9U7X)Fx%G|2GBnf8c;pc{!*{OVg(qzf zh7|A8Gd7>+N%z&ES0>Tr&lfbWA9#NGSfMIYgM8~<9=Ry4@xr22Qd>>bRZ1ScY4>Lb z@+HrsfoeyQ`X0yWV!L8=nPQdZZ;kcp8?o8H=#;i!~qr35a|6LuuCTxg)BFyU$ z^~s-gV>*S-xEU~fe?3DM&4RBX=1m&ZH2M5+jWjVarO4f+2ZZU^)mgxI24>X zH-7o{XH>TDmp?}Cc(ddFi!=9qe%*ck$~USHFIhIR+VnauUpK(5(<_^HyQi(6++??F zy<)poeq7Z*G_AYqo;FcWZY2rxj_W4;w(-i5uIsliy*od$^?Q}w$Gsmn?N!%rf9hV& zWzM5cxsHAqk=8Eo+~0o;{(5HP!o`<7^qc-DZQs(H(GLbMIP?3mwQELHJl?Uw^`TAU zruTh6txI6X@P8}zd_4aCjXzdi@3X0TaLt0JA0)Ktd}_xmy5X9q3z;%xcJfCF9T%0U zaNi?j?642tt(mxdSBuVZySD1KeVIHaspPa76RuA@mNaW+%@#Y}_%dqRll?W-U8iL# zRr0jXWnb=gY1{Ah=}I^9LSVDDO*c30HKhXOL$QPI^05q%kz9nRwt^nw4lXzYoB_@N zXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3^+9dI-O2X1E+S98*h*S z192}x``#i{BD|tJZcqu|>68p8V(UZOQwc{2Hwm{1CkXQiZxW<2!YQ5QM!&#-ET+{d ze~4f##nXXi1l|W;V9_~u$YS{#^SBEeLbd! zOXp-jjAI^>QL^}&%i?-Ke@*C|UURD%0~AM`#~Az15!5DJ6XL#rso~N|89)pP#R+E# zY7_1YaBt|OUURb<1BfBPldyxJHsRh7>jO*;mv&$Pe5!#Rnvzt=+6$(9Izdgs`heb6 zNs%2gOs6?%ho&4#g#mxvXdlMpiiFC9l7w7@O#Q)jINXk~mT-n}i*ScJ)*=ofVlwu0M~@LFTlMa z)(3E(pjGU%&Ht>9J8MtIWhu(679r=5a1!4noZHi2I~6wzS3S z%5-MC|IDVWk}}^huYXIhG+`W&<^p@!O**9*8_H|YjzjrxFaONxk#XCY^7jdrCd>u6 z9?-|jTzigooY_q>r~AK%IIuS1nh@uYqlMS3J+N6sPWB(;cPzo$g!_V$1hafQS^?Nh z$m#wgb{7cNCfplVCOBGn&DsN-2|3+=Tw9+bSevjufHfksd^=hJ*i6Xj{^unQ_7bd3 zSR=wcnxlo+tUa)qkkkDK2VW7aO>3zl)=JIt?PvvHvxuDTe=Xtx^SGr6>x5V<*7N9S z@ik`;vzug2_urK`m`SiSVXYWzbj}|C9O*yK4;DL;SaV-TP@Aw;jP-J-j6EA0nEfPk zy8nnHIKVhyYA(P!A=ZkqUM}??#;3DMxet`jasDG-3Jx$9Vm`z*5$+3cZ;15)tPx?I ztT92q-bd1@&wbWcnIEFeasC_V1FTQr-U#={SR;|1^N2jX6tOqb2XdVMW_VzHNRpL* z*`&O0o65gzesg~~1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n8Q=_L1p}tmTMQk`3Y&Nv z+B0A%wzMxF!H0l%3#$;y5eg8bHAt4%-a_7jRt&HhiqeZDo-fTI>?0%)@GKIzO!%F! zn9!Q=LSN9zMy}WX3{d=(=W%`7w}tS4U@kqO0=o$42l{uz3t}u?85-Xh{gXs%3mkgD`76c^?+W#eXQkL?9G4}AG|-dhG6f6 zYeMP1z}~iVeYP<`v5}wqxTmvs!hHcB18fVEX0<6cEdFEd9e9~OtPk)xK(i=XuUL!= z#{M5=@v?UoYef1vz0T96($qnk7q_&xWIMVzyM-GC`dR$&?+U6VjqGHmh!4vFo2j4 zutv9$pjFyOit`b)aDnTzfdRxs1fKV3mFAFQeLFUo%ByO?0E-Jr%+EIn_D*O(#fBul9c;^Y=csz7g!c#V4hfIF263~O zN){hcb|s1LN!Xh3{s68i^s$HJ$#EHw#R>DkK!PoO0Phdr9TL1t!q0uj4SOcbSgc5* z4`3XyW-h?{1L!|I_LNG+t94*8{jFRC8Z&hsxpo0lY&Z*WnzFb1NkV6!F7Y zfO|vC1+|;)IF>tjS{?_J#FV%?-<<2FN$%8g!2FU*S9co=-c% zS_1yI8{VtI^S1MZ%>+EF%}Q3=Vbpe ze&cVuS(|WQP?BKx_-L&VHWPBX|A-ylv9mVe-mo%3>u}j!KWrxCbpKx?4$cv*O;{hm z8j;=OqqRcVOvvf}=OqsI60A*FBf>hN*5R_de%MUN>HdR*uL#yAtP^6b)b8=oS|Mx} zk<gaV}gFYkE9moes$7&h+r(m(}89Lt@=Q=_-{-6>`_jC{WVNU1I+5M+D;{397 z9TwMwxG!*a_jA1cV*HDfJWEiUa9@CX!yM0_vlDk2Yd)T{!SiyW?2tK>t;ANBD}e6qeJ zajJ-ibgoGSvN6N@F_WyHGs$e1pZ{bo^HC`s?R?kUL%uP)^!CceEB!Y4%KXR}`~Dm6 z^y46WXMBJsY%{(PI>r$TqrJC7sXcjOwy=H5^Pk4wmm^gW1fdrphTtNUrT;0-7lf#` z8OYed|K|*F1~>zp0nPwtfHS}u;0$mEI0KH&0NtVCw(bQuw$;vWogvN*?Q?!l9nS*= z&se7DK$t<8P3S@>N|4S8$Me9sEs}Bj2IaRAo)K6|qs$&c6@oqn&h4$^SugUMk0kzf zfU$%aNaum$dEvYk5wGai%?bE^tFeUh0Amq92kabbkyAC_y25@7(9$`kwv`fuLI%UEiUSQo#o z#`l|zC0rNb+SFqHSsj_QtNoVxYe{*T&G5T4A%uYMja(<(AmF=0vk1NfJvWe+Bw0QD zt{pLup9h$eab1LKQ(L*$#C}VBwX`hrndCc!-wDRj2|Cb#U~vrObtsSXpdkVC0p?^} z7vb8}V!iNHR!=kgE#*{gd714cD1U%pE+Gced7!o(l%sm8V5LsY?YG1(wPj_Tj4(&M z>^R0EJ(p_R(W)G?gQPRtkME4&-cxPDd{Bg-6|JiE!Ulq~+mAW%JV9;3oQ&%t)jVlc z5H=8;-F}RnX9;Q(u8VMOsuiuO^}+^%v)hmBk(~s!3D>5$zE;hXRs~@L!P)JH4+98l zQwSAA9j$0pt(VzB(%J3Dy04mZ0QU#D$8j|Nozi}EG{z-K%&Degfcpd7<2VHO>?C3K zkaTwY!7KU^&Sk{mECJU=xHiT0bqRtLFXn%COSw&ycRKsQpTY-hV@?C#xVFRfb*3`e z&AGCDrG2#RRQ5A}4EW*DyfeF*bawlhA6#+19x305@EZZ|7#d6IbO3AHZ3r#|eH_fS!;inn0OL-SACtU6P@Ddxf_(`*1}{>p zY7cS8#*hY-zecb$AqF@P_&K18@&5`j&Pd{2wqFU>CX7YWeDGfjJZFjl;*9nEj+B3D zE%{Ur^8w~$eh!!-Tyad~3uE_kf~^VHMfz(~MKgTU2m{0y`YXmBj32fpT$|$lz({L+ zw~_&HMZn*$zd*1x;T{3^Xv${zwh;!v6~WSXqNs|&1paZKY@{{5Tgd>pA`~FR5^PPl zPsUn>vKhW@gaL3R;v15-CahIpy~s#we7BMTa3!KO$tMJB6V@uQUZmHjY=>_fW`OZU zGB4prg0%_jMf&%wNg8g9?={E(_!99h$%_O_6V{6w5qRG>$gt_1j5krXAZbYquwH~U zI~GIJjq#%f8Ibcwd7K9ri%iW2SgXK#5!UQD_Xb(DY^R(@%40sjoQ&%tT$|$EM%<&} zJ{fBjSTB-(e@c1F8snu6G5{V80QU#DN5g$GIG5J?DbL4zgG}1ClksX!+SUrM%^Bbf za0WO7oB_@NXTUNB%w3z{xFaWLwcmitII-Hhup` z%X5Zolk@M)_B-A8a}<5w>Fk&F9lT?J-}jnJC#Zl`-~Z9#93Wd*-*@-$K z#sR(?qUIdC)VOV>Z~jU*-emR8uj){ee~A|B*?*hqDAcBgeJr2to;htsL3? z?_bDmqP!;dTS%$J#T7n)W6a6m8`pNYzLt1L-qIx2*X-|KDD9(dyV`H5zt)yF;D=4T zGdo1R%}Hwd_b;@vpZVdeQsjmI{flf0pveC)lI9ZTWc@jpO{Tt-&5E2hB>BKZ0G`n? zTo-Zv?c57QPBAC0CKyZG=z#S8p`A_0(dvj-Hjm?a3NetM2R8lviyTd?O6O(#BMvwZ zFcx7xu=(#_s5BwR7bC9OIbc%ec%nD~oB_@NXMi)n8Q=_X1~>zp0nPwtfHUv{19VTR zeM<59uZ={H|MD?zM)LS6shDES<&!;hREGYiL<%XNp*B>Xq5mm`3fM{iQ=)gx$p-x! z=bHR4wwTeb?Eeg_GX77-8lf)Zf8=aPay~Pf&QO-&pgx~22qCP6G(iY3lur=^AGSX$ z^TzCv+bo7D!#uf2hyyp&YsjhuIO;Zw3iRi*-sNDT?01Q($!{ZFZ(AVjszfPS0*#~I)Z za0WO7S;hbj-Z}OegTi-AmUv&(hoJwC9!WhnSr&{eZix9u65nlHNVr5uBrGG8BIE@B zUCGZdf--@Fm->5(oKxV-Y)KpeF$XRR2tA-!t%iT33pxt?Gwp&#ha1!H>Yxa6my zyqS77w{J|px&5N8#Yy7be`5*fLRo@2brv6oPC|CKkG>jDFqSYL_z*1i&s+uQBxHB{ zxIS4!FqSYTVq7-oj>X5JlaSr*!-jVWhR%UR+K+J=Wi0m3Tm`0=WOldDI6yzZxd1LO zCSqLH`wnUEB-c%OaFC_#!yknW=!-ZXF(zSLmX6!occxF?2IaH7eFGdwJ~P{xty)Re zjxniKyIe14z#a@3>$md#_Grh^bjbY^^94x0PI!Z$|7L)=Uq7Zen*FxeBlnB)B?;pR z2MJdQR|$U*CKJjMq%qZ&HXW(1%%^IUhu_B1pLC!W;icg~<_mtayN_Tlfdi=@I8q#~ zv4wnLvBdAh)h3(^`g+#1=}2`%KP>$Y62=3E_>PLLT#EkVw^io}Y7@pp%nP!}{w%c#30q}uM;sDnNxJG&@V$V)K=8q`R4{$Dk2aJj52{wO6hPCCWl6;i+ z1LQF#VqU=9X!Cbm9Mx~7UF55hhfLeb@_d^!;7AN)cmK`K_7!bs>GOB=f$VHw(ROw| ze+LiQ*?t{rKarqJ*J(#nf<8|6K4+O;lG)jQc0Yg5?)LGl3(xzECI0-MKmRxR{GU3G zavaaJZEV~S>*1N_8e^T0_G|tA0c^GU`8(B>`|3v9r3pR+_$3`P#DVO%)$JS7t9GBP zeZ~Re5Kq8(pz8U*Ob4EuFC?gb|5sMm>h{(8YOI{X2E@#w=l^1TSCU}_Wm-l%^!-4q z_KoSaWIx#`^;1K6Q@X_R;Oq=RnG$J-55bfQlWm);Yf^C*9E5!Yo8JG;0y8yhLi8W+ zed66$Wx{xXF;TPjvs*EI6JhcDzu9fOJ=&M~4<67DRKNdgkMQFTp-7!9FX2>#2&=tfOL?q&m|X*N zB)??#H>UhX!ViR&Y`-JfYRDGR&T=HNhQ|`tT0uwt>Uj|H%_?7|Ic8&IFvAhq-69ksv2|7W@WQ$(vs09~#6f+D zXL+0Aev9zm7q`i-rNA`a+FFQ^ggNj9@>WkGSj#rlo2=25m37Q<$&P2GO={a>wuv%7NnG!Q5JCy< z2y_E(cpg*RhL+`Iww0s&W`g|s?I~?su|~IOS6-61<~Nq$gA@mA+R>^G z*#%yk6CM+cCBy-J$>Cxk+BDLb;j;ZW9~{+wHNS-mabWwKkZq3$#uCnH{e2iot-7*R zdSMR%@7u2>7)uzJFt$2s|AAe&Cx8#~IN+SdxP-CQ;cQ31m|dbo9MG3=KH!|jxP-A) zDrZ%YHLfJL&s1JxGhQn7rg+3LTa%Xh6}oY+XmM^!0>bGcpMs6?VO+LS{M!zvz4egiN zqI!KsR;MxLam`@#`Gu^kYW;@nG`3HsAN>JwK&(x!|A=*Pon!X-g;hJS^oS&X`7mD(S9G2W}jcE(U;X_MEemRv(GQG+BP-q$?S&@ z=+l^=jP^G*IZV46z7*hruby+$7@G8u8=~qw?O;Tg&_rm z5JPfInT-7*>82#kZ0MosLTnGOKVcg$P-T)d7U;LtN=1F9S4WBTi0zVbChbcXm>-7y z)QLR2z>mZi^Gj?OLhnb0#Cuw02@MI-ds+owp7*ritQ_QKmL+++@_beqAhub6WM9H( z1iP-Ci~2M1i+wDK$9t1ZCm_KFeR-5&d8K6aO-V%^T+;%QPMQ87+K=l$*Z>}+GP1nE z`YPM+N_tKbP7{I%O8@eS`@sWZp={r1eHHB&C4GMpSb`0D9%TM2+taJ1a@cROzKZsX zkd9*nmcWD5eiqb+4<8X=19$+JdVfu|jbp4FNn7hf7kB`dl3okix2nFv2dQ1yVCopN z(Nr0|0vrBgZHN-r&#w_m60n9R*=j=*CacQYC`S4Dg!2Tfmn2 zm!M3rLC=E?O_;1o`r#kW!!rbB0uP9VNgcKvgl+=X8ZaIy6Jmk>U`rDw>q0kyuG4h0 z2+D;1pueXxslKz~4=)E~E@36oWseo=x4!~*@nuJ^K{e&(wr zVVtpJY`>{8CY=)xGCiV%Z-CUUIUVw{VqI(N+cJN{UR&y8&M`Xw8{(MpBKmK(J}a-3 zVtteIzgR|!3EP(0WwO4qP5Cy{MbhZ}EtWBO{i~+Fygg-JRv-Quod3l#2CskB)K|8t z+*at2cxL6q<3S`}xc)^MbM=`XYo(~);PtPyIxVTEwSSh_;_PLKOX@`d8OtOo-nx|H zo<7N*f_DZAdMC^Nr4;n^(f^8!{Z`F@L>Z}0zG|eWpr}jmhHf3Tp-b`6v4nLBT9(kS zRY>a;?&{VlNQc3`ZY(Co%F}+lKd1j4hoLe|pX?YpA$@}%^YBu_asr!&<;PidW-G?6 zErhKE{Wq&g`VrVWd@mel3aAWp;5eQ=K?mAldYOFTxS~GOfpV;lQsS6&+(3PK`TSJ& zQ$ink9m-2(Sbe1w%U~RRPQZOUbm;3T%Np7i%l0CP`T*=OTAv+LNQ`690XyJ}zP?TPmT&lEnC2m6D|rvK~w2wn!zph|!g-nIdF8 zqzFZlJ!Wj#%FI{?XU_S(&!O)9{`q^ol$!HC&->Y*=lwj-du|;yGnQPeu$V+5Ngg`* z$8i!#0Q^&cv`7T}nz;6L7W@*sbkN3wM0&Le|3m&?$`&?>w1#x(kG&Sx+JAO>KZex7qKJZ(nW;3GNV%DSlxN_-^Mde!;-P#fAa8sjtID3`t?Je@2 z>xG6()>m&@baa3Ai>~nN3KbJx&vpK;oXBJ6)L%Lv`aFK@F~5}U&6wP>wq~nf@xZvA zAJvb2^soO_pRcRIj{oejgqSbitSNH)UwMINn{eE4&N!Pvv*26}@G7?*WByaPU$|+E zuTLPS<+5>3PPo$3>_5 z-CB@6Y2UiCGr!$C|EWGh<5SJ%O`mE4GPZ1H4`t63Ojl34Kg1F?Q*~?&24Kv>{^HWG z?wVBbF!-e3pXJ^oD+U;HW$x*3!=Q%g(F9C`%e;QO+Y&Mz(VL)j+q5>mk<3 zZV$^|mMVM9c#o9Iq3iZ-+oGf`ZVe@^)q`FI8f%^}UC$mC9eBGMDW~8+Kg*%V3b*Q3 zf2=RD4Jl85xNHoS3)%Kikm@)or?5iy%<6=<%(yL6_(tG|y$jv(X}QIa;n9SsqLXmm z`c;mbW=*WH%RhS%?T~SCfitwi!B8p>|AC8m=3;_2J^^2BImHP|sWlRi{EWb!Qx)CR zB}=RiJ9c@b9U1wxR)<4Zm5?~Ry+&I!Yp8ZzKcO>nv%m0DN2qMszcWkDj#s2KXtF{ZUOW735kl{rkq%7i z!tMJCT@M4trx+LIrQE#2!7Xb%eo>uvfz zz*osuFo=!*4)Hm&rH;R$VI1l|*<&~V2@v?WXyuzqD#WLMm_;ScD&~16jT%&8sq$no zLE9Sqm4Zj>ugt!ikJAwFzk5n zDCrk=a5b;$Mo=Bl-Tp-hmE4l;ols84F9uL~YPYdtds*Fl`EIJ=gz|w;Z$sS0uc-V6 zYyXa_A+$W|$r4oYjQJTq=08!o0`79ZVMlYRt4J1?&$*c&vbrY!w*G3W`7Werb|o$C zGC?>_K9xnu=*j%XefW`++rIl<1ha!4g{j!Ep*o>|dGO*Lmb!*>{E%54WgUF?gV<(x zqb)KOGOvzQ-kdyEz2v?;`r5zz3%rQ80!EB95Og*egz=w;b9$e+g!Y5U;~EY7r* z`AdK-_Ez-O@FS6Ow(v+i_SUjWtg!Ppb>#O{tFS(e;9kKH2o)%J&-kT1-=L{aR@A-ug8#x?HY~Pla7I03_CAHYQ-Cm60{=swguZ?-4PkP= z$3jy>RR=4W{{d%yLDhksa>b%_T4T!Q5w_=-P^i3=#+54r54e8g>2+P0t<`uV_3uvV zZAzDNb?))(PQSdqIpDVns*96)RmQKFZ&Sc-K8b=HYnH;lnPgu@9ZgJ3$o^RDu6PT& zxC;>tIW6|@W*yl(9I&n*KO8^WPSY$dQU3cxVo8Rcgx(LQrsMx|Azv0d|Fd3V;O~Zs z=p4jWpp*QcXL69;ew*&8o@I{%8-vuL8Cc+#j76b2E>`@usPpG6&EloPzZAv4gZ??Z zy<+p}-NVyg8O>)0@`HbAO(>kht9mR@BX=GCUU>nE_-$07@HlQ1u5~-nvy9l^sv?b! zc2f&Bui5NhyhDzE<_was=JcX}r7_y0874Ti$=A-s>z@&9&%bEv2w>-B&)$U2v%g~h z$kHxftpAMxm1q8*dTRWw=ybg_b}L*BmHkHg7otcv=Hr?tj1l@iz@PpPf|q$CXM@m( zAN!fv-Pv@c0kHtLITF`%CQne9jO~Hw%b5CY1H#egU63%vZ4@GzKNRw};Yx+n` zv;}5NPwTE+q3xAw9UgJ_fC*#^(dfwEsIGdPo2B;H#WG+#%upV*T0p}@9E-i%M7!^e zspD$IR!7zsq@)RYyPXK_x7^gU?W9#&JNw$frVmwwe5JdoOG&5jnD^&yHfl~dO*V@b z2jva>&Z=k|>`Kj4a1;z3+eWi^5aon336|r~GtVl1(d7-S$H~{BV8cKBJy}_<&Y6&5 zoA%Yz!E0B;(oYpH#_12Qq86@aReZh2*MG$-!ZC6;Ks^;TEQ~Cd_J3XZh?(KVzd?Mw z6{Uv-oj^Cvcw=qC-o#FAy!_JvNiW#5PN!GgXXeb*C=!G^ASc>oTAu(dm5zsl>$9HF->w2&7? zhT)Twn;UPAilyrRtRe_mi7u-p)rzEVub`PF&S*mFxLL-%X=0Q$xM9z{MJ<|BH?`d( zl>0l2YGc!l{85O}2(gb#&FJ#VdTS;wv$|-w2Zk^3%(Vm!b__JY0%s^VAVsgY^e1n1 z47Q&4Cw(>{Yj3U-!WAZzLq9Kcy4kkWp`2asHO3SpQ0ZzzXRpy1ckAMd2tt$*#~hMP zcdt_%3X2h(D{8H($>F=wh407QcAj}ctXhRDq)URUNaAv0P2m@7=I}sngV$Ur0d)zw ztb-gaYX(h0bz|3P}P$3WarfBg5F>j(U-xQfUM7 zJeR0@1h+n`M{bRvv`I~ZniXi_%{W_qMbb^hxCJIjTUR3-@1ADN+Ks?5hts0n?C~Lo z?C`os6emTp0^s z@oOPRKO(j%;MG1Ts~r_<0$G&^A>wy5>p3N99}Uv$PG3TvaksH|@gzM@(zSU@eMc>n zxbGLMpty2E0-g1EA>~f6s%aH)Rg05+@MfiiXt-v{KSP zX`~WP%7fb?YvYrrc8***JC{7e4*Rt#!%Dy~P!Xp+?hceG^$q)*OHSk`7!y46NBY+! zUdrhbX(dhp=Xx0#oAhXsR?RE#U=I6p(@(#aA>>;HL9ay}Y>ZRAj_sYNBOJ;7Shj)KF#^hrWfbpyr?lfBwyo(k*BAGY(~Hq%WCtxF z6s?5a-p8c>Y>%@XNYb-p$FbAa#_U^t;lc^WFyH>HnTGR2?h#t~X-{t}G|kNxrH?;Q zN}n8#vxtAPPZX#SB_l76t^NHS+^onJfsD9}`|8iatveIjDS?M4Kji4Isnx3Z^uk$d zbf$&b%uInY=W@L*=JI}~b8B9tuk%;n&Bt9jlFeU}`N&8_!>e8&S>3rm zIn(m!7eSUi(Cv#{hF#uX&u`OzD`Z`K%?_My7xCnj($YUvkCZXbB5KisS*;3okoUL1 zAtQ%&<|?Gt{8Uo=8PUr7dy?|BeQM%@t!DIVu2_Y_(j0GfQV{IPYxy4kbT_3#HonsP z$9r0!X34W94>s=Ocms!BSvE<%a@9L%bSfgVgoH?z!99;Ahs%=m{%PcyN%H-MRBntV zUo2-<@QP$eWz2O*|HTW@8(9rmZqw(2{G>oU)Xz-sA16cJ8HX{yHy7hxBYTQ5L{=je3;XbgM-Oav+)5>vgz4TOJi-yj?_xyjhTf(Ep zEO*1EgN;rp6D}v)6cedd19ft{y6cx987)s3v;8qU&Q7p3Eu%8(g`tRU_W5}jCBp}_ zn>(EP3^>iE`5`dba&6Q2SlnZN=WxXPHuM~edFlNMB zC+pdhpfGL=sYo6W8+((gnK@J6w(KQem!q>BvIRr{Y&vrDH^6uEM%)A;QLgt6pf1`x z9s7VJ_XO-f!5tywQw4L3L_(WcG|iUu*f&j@{p$P1a=%trUuLl-P&Z+Ks|c3fG%zzd z!#M4!!Be~mC*w%yb=N;L3f!W%CH1A&(?Al(oC4|KJ9@vR9|}WGHZMPY^5Ib`iKiC^ zpC#6JU_l#OirZf;Ut=s63iEk-N&xA?9DZEC^I2Fb;OaJBTqvx9FD+?xdRGm)U^V?j2I-O%~m1-twZnD^(M?u2qsD4|Ce!$oxG3TV^d0g{HaY8v$P@c_Rw9 zzlwerc6gIVMqJ-9>u|pIGA_P+uCcWqODt~2!K&e8uSViD-W(Bj)q3I~#_PBa+W|U$ zmQ&Z&@B4gUGKMM)MRUzJ0g(DU^Hno*e*(8Lv9z4!E{%E#;kttjK7jSSMMr0-Ym9~P zI*1yMs{!IEDSCdEy7OlGI+pt~)Jil+BVRBmf*WCmiE?HrshMOP?gjw2gxB(7*NHSP zx2%LT$k1Ikuo_2yZWD>O3cLNSQD6>*2yIh3sv!j zgUM9u&Lyn_FnU{^#a@TzhydIu*kCsm{wCil7j!R-E&wTVruUN;kTilDlzI=R*(`3EdiL-pOoz;(M0`gcH`SQ;h)$T zJ(zWvB7IPBP-aVTra`$Ci{a8hfP;~9Yv_FPg+LL=o10H11ws3oN=Dw7nF-#ToC0yh z)nxb&L(cR;@WPNuVCIE!*Mu;QdYg zUIg~OpJvk8Nddu7S4O{$D87Lv*x-xo*Rw(E9}62FupF2gu<)$g#4%5*>69X|sL3^E zdn|K1r)vkf`Fkm$W2Z#X(O!3uYhuqbP7Nm(@7k(bdFjL*=fXZY7JVIxONf3vSI*7C z$WwAp>#I&`b|3LZ0C?jOr$tuRCtgACYi)+nx50ps{7u=21jk$kY5^RfwDqagUmX~Y z4sGkFR($rRJgSkP@QNbfTp;Qbl~k*E_*?bncUq<)KgaGpJ&yX9QMVy>AV`=;(gc!z zK2g=@>14#+Yb`eHP4?V2LPNn}>i-g4D>nF&GQ*MkySw97TV7smW< zsKRHkk`LNU`~-drL_lv@jMpEOrKGviK$MzQNb|Rxgia4utL}wa?oOmdLg?5)%j+4h zq*!Ejv57?s!(IoSiO8DS@sllv3;^YG7eOyK0Yf{`CBL<~g>fpY#HVL$^~|1*EVv@| zgyev;%)~O(OE_o^i&kP4ix_k{eO*!bSa0=lm9c`TMVXR{jEF$`t$L`!Qs*;gU@hVV zh;UzpzDl?C3s%^$MO)O`$NPBE_u`E$)6E|mDt!->J=*v+CRT`l6ILRZv3YT=eJ$hP z=h9Cntd)fPEwgs(>|XEiWi3^9#wir8;?Q*g6JPPFG{s)K7Muw8DxB8vJK{Fw49|28 z>Y+*82u3AVxKC2?>mRaA{ZU9-9@KM+8BrK zX$)May7y3lr9k7{2-xs^n@AJ)!@Uia_w;$4VHQ;t9hTu*hdzm5OQYf$__5;{`{mV0 zhg>bOSxE>MCBZvqhU7Pu+_Wz|-~WSGWjXUDH$9+ZYC~n6KBnJb%YV~a)xk5D1cKa% zL@W}xvSp~;Z?&b-1K*C-$kW)}o~%)0i}2z>WeM!q#hlw%iN)oq6aiR3)y4w=K74``odisCsHb)?1^JlB0I&J6Hr=d8IwU?v&b}X=yAe5 zhQWBsaL`1d#D|=?(Q)cgn3=1B)H!M;`!iTR+z*}1pPZI_WO-nkGeWo3 zERw7-vx%0OWw9j@HQ+twR$$jRNwONtsijvVS@-{E8WJ9Tdc+3duOJDu^*NDIF-wKA zP&l7U2j>I|5)T~Nxt(IAjP!A{=~ZapV$xpsF+qrv|Kc9Ce;hau7JCJHKu2sfa2tC0 zHl;?1Pe=|F)WC&Uq<~f9OWXy}y%%J*sF7N4!pt}XfPL{6B*5Tz_*>?HX-K~i$(AF% zFOmXk6j3}ykONW>e!KEXGtx_8Y>n0osHoV6V+M@?{ZN<|CsZp&dfZESq)G*cNj;7Z zNTEPgKKIZ|u(di$b|$tKhaCUAyod5^emPfX-G7$LqkAtB%N3y(;2lF@*(L{vNQY1@ zF&R>3IrY40AUH*vvDnT)$vOG|{Mo{@QUHjln1BY9QUuMfR! zt}+cV?xvk{SlDR`q68v~H0lP<$cHa{8#^1x(&ELfSa?~QIQoRb9lWY&MywF<$IliB ziNU=&K*IDb)7ms7hvj~F0pMxG6lB3=xzjF@ z4g$O)rG-r>#L*-aj^<2TL^_1nz%VA597G6*&2qnh zGkSVAu2PE~9yA7mW{;cDJY!035J!x1rVfwNq}+P8b@>#oRnd1Mjw~h-O5!ICnGiy! za2bDHEY8pYmV?5KZR_T7Wt$?6z)ee|fmKv1*)O}A-A+a(28P+j_{CoQg+UK-g5XFm zM!A-brz0I0T4DyzYWh4pwk*K#K~4}b_P&F%C0u1PAE@pv5;T+~6s5F`nv9DMv{HN1 zYgnp#GXxC_v}SS}aZa%nkx1fA7B%;Xi_DMC@mHRrG9_@!8&%jhln{N%U(j(7b3v8K zNn=@@5P#=CJ63(^vp#o}P%>+-`7T^_L!m#|wW1cPH zA~P}k*);IQmp(cD3q&<6p3nsr-8ZILc`)~B9J1+IwfTHoQ3@nL06_lpBNt_~0^Y?U ze-iCDICLJ57wWM>k%WbaLUK53K>^KTc1^tYK%??5V;n6iuV@LbG3DT3qGp1^y1tJz zfG+CbMjHx?&x27aqmCZoAHHyDB(VR5!%nf9mT&yAxb%GrDiJq{HkXnFE*BPi3t&6c zVCkItRCnu?w6<1SA>CeAo#-sG9dOkE$1qMrlmU!^(nj)9w|7;hf$PV#NB{nUvlvKr zfzl-a&ie36{OdmI(!XW_=5F&_`qXGACTA(176Ig_JUv@_8)3KQ)C-7OtufGe?RmWY zcpV@Q2dGg!k={5Va~t+hq)>zbZpFYt%b8&60N?I0i`}nUUO)&BH}4mOjj-HxQF~{Z zBhMC=gY)nF^1N;et?6ch@~*~1xL;wptD?=|qzCx#Ed&99FLT9hTNKon%t0QF^Dl=N zcjX~#mD)U3ZM+n@d0uNHo|aFF&2qn8jZnx;^Z16951(rC@9j+YA3BA@n_h#a5k`ie zZD#n28lB3vKe|rz8jaG_GpS(-I$b9wsdMi$YYDcyuRzo0)yI1^B#G7QWR%}_cJwAo z92m9$H6M!@M31Nz=Wxvp=J876Mc2YbD`K1}ZqD2~T~hd`be|EshBX9N&h^kw&&$e~ z%g`Tyn+$EDoFd4pGjFGU5RNAFBABN}_?dF%He_;XS-d&i*S0<=qD%d=N|A8Q*(w2| zcnCCoL4PV>?wGps>w)`hH^EguM~_V^>HztL!fSc;;Gm6b-%@1q6jrWApR6iEZO#eq zP6#{}RntP$lt+80e)IS^-J7=a%*vd!PEWiW{AICa478Kb;J>hs3mcWwbY^2NJ!ABm z2xNa;s*4fLLT@o_2=}%?V?v;k(=mF@Oh(A=N)ZvuPL&p-D| zHVqol)_%M8^An-iTT$bAOY;`Op3}bdu+PEEV+9o#YR*dUFd~*pqjg8-Xjf&~NJ_le zN=r{HK$6(?I`+pr0bvTL#sh7P{FLK{n^nLt+>gomW(0!kNWAj(T%kqV4{$_?}--Zd};((laYO?d{o;%z+xh`EzS8DVc zG1}q!j@mu1ylIvdXImP$^q#t)o8c`4_f2_f%jaKvZ_Do!*+aGe(c34yufMjLcr3}Q zCqj8Sb#fS;9NCcYebAq4i6fj(#%$&pnqu!soz*>otxy+!mnTB-(vzqf;I>zi5g?ke zj^*00GBe9kWz1b3x4st@M5O?bHe^{FKAo8NKIuYjJYi02(G&AND#d2ZiTd^P-PRQm zPb(kyog)*bOoUbNn)Uc|+lKb%4Quk}H`FGI061ESebbc8G$ZFCU-G)i^pofluwOYf z07;tH4)xs=17A!xxQ?e5^$}*4PlDDHVOWj}su|zs7P*cO2J-C)5=of3DdCOm-@|_n zodTW1>z}H2w4;8Qb6(L)kU3kdV8b{CRgDqmJ$qK#EE2T@zq9EmweY_Ol& z(s}b;&HLJ50)3T*)Fkj7ttGh1YwatOB>saG;?aIY37n6C7k>|1&@rsp{lUqCYnp`N zrCf)968P1F!mg%<(Vx)=FqAM(^QAnYr3z&u9bP1}wK zt;yTIeIwj~DsBr{B8zeH^}rIDA}wGt`0h-+I>MqTBc7n6yylgy6IoK4P-8KCU+Q^K z^Z7XM-q}Y9!0XU0mjHG~-x#u9puDoT#= znD0jE&D#$>DJW{KF`3xTXkOQ-ni_(~v+PBL@Hj(&hd9*i*f&xq3w)He65!_JF66ww zjxP`BNUtlN?@%pd839rB*9Xj=$s0RXnUfW)Rdh25GVyXH0O{c(oS7wjCalVEzcvo7 zW8PGu(c#uy#Rp2OMf0dcMD<$m9GMC`-42`yGyb{Y@s#G#j2sj^S!k8^YMX_Z^9*$L z>*ORJz!<$$SHfXoeHjpK+jc!IUuqj*iZrNJ67kObY4#P|de`I_C0(vn!Wrg%cK(g8 zoR;K#!F$qDPjfmOF{6rf3p5iqL*_pVeyEp{0pgd@`8eb0i)w8_7)U=gdo(e2_oKWEAfj15Ky-0NL$i~I4$r^nlnGpN$k(0Wvlrcnmfs!D zLZHKbs6b{$lBVZfxhtJrtoDz26U=L7Ekro%Iv)4_a-D33KjjnRyYVZsQMnJPIl(mw zU-QmOJhIlC8pU172AD!DzB5?FB5HXVD`VJxvIijF!)MDw|la>yrN;EB7#aEF{ zKbc@mxHM^u@OI!db`Q$jG+zH$`={Ggy5rreUTI^pPK5LR1ZFPg1M*J9(b8k;y>li^ z>33S`7{E^-{zxa*2=dJ5vz~k<>|_(#cUaqC&)q5GX(aq^YWtlmqFWrs$p<|zKneD- zX+w1T%N?u__psRvccRBA%EkIbO$I!uf`tDhdVv%_ha5|ulvokzkcqM=Y@d|Y47(A zpy>L9dBhOi2;7ABBE2T1S%tM(CxCaad`mrfB1IvqNL}I7lOXVzf}E(Lrp;TKMmKbI z$(z1YP5jCtXa7qd_$q-js|sm;#!WQ?7Rq$`3F4Rl`4T+|95e}uNdFSqocjEQcUpPP zUzb? zxD2YqC6iffHuY;ptUL7i)e!Dh@E+Ad-VhfC^~a7|vW@5NUL^h4yyaMwq6VQG5iF`B zVL~8_*0gzjJQs}H_y%NEThHa`XB)|Co+jglcJr5m0;?GOp{TCiqJ{=7f1UOurWd~V zP*vvTqsxnqFE;ZW4Q$IX7Vw5=>|Y;SN*n>@dx(la6zv(CCgnFY^fcinbdhi(i0&;gqGv-x+NIP0UQ+Nwr;*hbnXJ6J`kVAu>>)5``862jT{-_)LYpVu&yGo@#Ltt~qugKEVM z=}({RG7gXJKA3U{9EGWaJUybU6%YpdOPYcg_PcjPYLB(PDgE8}7YX=Y>`a=e^b zP1?E)oVr~>`7E5^pQt?cn#eYzxjH4)nwCiXV$v-zfBVm}F^fB(?q~;a`_nTLq(-pu zfu}Eem^8v|WEt=qh3t@WK zLh(hjo1Lpl)#K#rlUlFCPQ;c0LD&;w%gsE$SJm|zcp1&BmwiKZZvhWvYs?W|Jy8fP z34!I}kRR`uc_h{v^qh{^&Wu>Py%g zft6}6ds3B}!ksoE9sIt*9uzS$l<-~?$6OEBj=0+}B^LQs#vCE9iK@L8(u_Mcyd4Lk zs3Jtynkl#eM++JjT91i5B^Z5s_B`PwyyYPnJiP^53mQJP?C&Ku&EVkWdf+?%g6RNi zCG!qB@$=0wTSAAT7BUae(=;~?RAsSqNk`9n%*=yzp09l?;B9Yu4-X=Un^YlkIhlv?iRY1wk8Z6oO$d43y7%XeGYyU838 zonAM?dr+I7`Zz4XB7V$eI@&sIEgzYF2O1Y)Uyq)+I8n8m7GRsZhxg{T%eTzikF$g! zN-x_NknQ(>Mu);OkW>6^yS?@>);ZB!l<>0o4l#%!6tqvS=AvmxS|aW8_x5?I7`vn!w-3g?1ijIUFNenje8#gyHm>nGDK10%AZG-=Jq z--YD_44=lyy2=#q55F4Qsr|D;cWuslknY5&?y!y+A30S3GepZ(1-4*;m`ahJvnZSS zW<|pxwJrezPn;uJnY`MT;{#(`ZU&-?Zbh_!O>}7hISNGG>+Ve2x)eJpTUT%SDZ3aij=J^eDPRvnaxCe4JXFc{{Fq-a*Xn+;^dQAO!?TPnSMrJpG|dB=fy>hX9y2)=?o{lgD`5UmW_ptb2}M@_%QIn4q>= z9IM>Xr#AN}^e!w$E&~DNoAUYD&nb(a7p)?pQ{C>iKo>76pv5o0yB~?9XFjlUee?No zZXlzZLH61~;zodyEZ2OpCO~(CY`b22j?T{Pxc?(0-a+~68>m?L1H-}rfxD? zKF_lCz<5j5uQ{XK**##Gt7^0HI@7=_|2wukkV6&tQ%AsX4JYN$)|vYnjI;0YQQZno zKByGHo@z+U)ejL3rh(gd<h1%(i!8c( z1VAI5h)lMA$?RZb@3BqWtU)Ea{uX=!i1mWZ5icz&Zx>H71UiMQ%X=7krhNbm6Ip;o zYS%$%A|V4=d@V6EzfhKe&09fyFbHq0=JH0IBPWe2w}4&%eJe3SL@(-bXJ-IM{8z)Z zs!*0Y3Ec>e)A_3*yHIUUt(i|>0SSk?L35de^>HGa3@*sH{BvmQZjp79_}W9b@I|o? zy3wEebWY&AhZ7@2Cn~6=htJF0z4xUNk^qx=MBD<7W%W#vhmL7rBdB3Rhk0OrwhWZ6 z)J#ef3WGp5ss@Y}u{BUJ9H=xlH~}gDJrZhnrQujiX_og+UO6>6j+ZGx5(Q%vfp4i< zx6SM`b_b3h0J9zFZD)?RJa!$V8Xb3_{i7Gkf5<#$6u7kc;sZJ~VG_Lu^I3FK4$KH0 z^)d(s6Ek?-k79c{c_=mV5J~#yCj#2~-gFxwvw&L3W%y=z;PaWaW#);da{jGg9 z*d3o70yKdM=^!w4l$xymvK~8nVlzH;ga^g=Dq6IGqF$;I(|-{dn_yRymKY+Q!ZS0J zpBdlJ=k!;KGK_pOVq}l{CMHZpu#6S6Gqslu)P97&Ffy{t@txwl06Aivv zGPZ&z3i5MoY178A{|S2z-nn1K)JNjMS(=*MPU*s#02<09Yz{iT5aLueJg zOFXE5QC+p|3$y|EClwi>iUy30p0`d>M|5h2QR=b`56vEcQBIk+F9k6K4bCd@MAw4d z?pnUS>bjMVZ7Yzv1}0g44;2A32=+roH>HF&`!y5}w7x>VhT+rj9JbZGn z2;^tfp;?P`Zk=ne4+u)&0+wVM(E-}n&B)l|l&hfsb!0A#Mh~!$%~_031m*&N1D;(3 zH`IdP$QeT6baim-6k)l8q8RoFRCeapo6n%aiNp}lIie{HYC5l++rDE)<*}4&5{P6u z(KEUL#<5RN2}RUM+5{@$V?Y*DC^04pj%QR?#8bBBW9z{bIvuMUJR%CN=fT>5iR$H4 zD^uIiiJ#(zz0YmSnPfx>$jx0043c#C$GOw7_KWTU;C=+&V}g@;#wG@Cpp*)fAYksc zQ#X z3SQ;Ude$2tos81>&xN4caEF+oRjQyiOJCw7x9piiyo<-I_KkovSPHEM6nL)y6o4|< z@aKexl9q{a)ZQ}NL6=t)1gqnQ{vNv&@L1NW6Xt*L>&8l?n^IzG%lby^JZ0s2K$zihFoH8C^aDSe#B7Q;;b7F)fkaXhEsiQq^4s2Cu%? zzlJl2qASw||GYiHzmhjVEyO=pJHN)IX!{upry%Db-=m&EbqE;^k4z$BN245}-_+Y*t zZNsBVa&7%lQLj;}-lU}Fl2?%tO&WT~4_`4C#NF2(H3u+`Z=IkUDK+yyIt<+C@0lU3 z>Q_&b;_b4!el%U}?R>&Qx~C|&Bqz2M;VgRgh!#An&_>&D6=>(hsK1U_6oi(80f zw$PdWQ_vS|54d0zx`iAJ>n5l4nwVp+oTHQk`My>g;s+p?)05T~CQevm`qhdXhn`BK z-+M71pt4LBbTvxdmNCp|{il7k|2p68Owc1$aC5$8CVy{X7zliF_Np|D7EES$B>s5h zxe>fR)yv$#iQTT?UIMP%lw*UN_FM>0e;gD0e2#J_;bV*SskEEVebCA2A#lT*^WttSJa9#( zSLdJ6QZAb!YT7y+Or>XxDm~-Ok#~fZ1wRfp<>`$ zTGx=Xi^FFgDKT2$c7-AV`wXI%zSCkiHGd^hd^6~vQP?9<4ImB>V0WU!6^Wlhx{>amt#`Jj1rfD1}ZG>^!!;nb2b5dx=W&}8{# zle)##YYp27)K{YoqnKS0xP8^`y@voH(gQ9en(f}E?0^X3EQ$+*vy3Q#!)>I`IRlOa zlqHaz-;Qi-=fnjoG@4)-*lEbNy?FOcg;+umhRE4j$e-<<9U(TfHjJE0kO=OmeX-8< z^}Ks^5*(^S;s4?CeDeIL%fa=m3<4W)6>K8lr@azrXA}PiH~GRy>NBSPq&M?dvfeT^ zfzg01K9ysfjX}1mf`%8Yx`<0YI^qy@3z-0H!!uSSMc5V3j+0)lnWhsMZ9$SugTlMq z1c>@)4u|?pkYgT6P8{{?)~wlHMs&F1LSafCnZWfjPr4-G0r$pH#VeSgKp_fwaOlNSZ(hFz7rf-6h|1{ycq7Y5RDOOkP1;na z&zU7dfEUH~kzWoq&*{sN6x>RQ3vs5t13+vB;-9pRgV6z^#0##G`F~N+-nn&99+?~{ zq!~CZyj&qlveR)SZK$t_BP9MEoQXS+v7;LD_%_5632cyTSk;dVd?Y)RhcKhZNxlRR zS0R&^3snkIeEwYFkjbFQ;=}xa`kURF1K6~4uThR<`Gn8HCMUI-<9~sRUqf~CrnnLf zlP3A@)@r#gA7n|e3jnBaNj1#X+hqOvNJR1v<-HitBawI z6?{EixNzML>fte!p8jDxgA~gWfLDVc|E62R(G1C8UJ)hS!X4QE$K5BF-jWTOQX6)8 z6Dk32-=(949bf;wmjy`m;6|5Vc7AYVz>y6xYx4!WKnV>uZ)(A+OKqN66GC@u*wwFb zZExdI4EXHkquEBYB$W961pInj&EmSt#5F3-2j~7ESf>b#Yx`rwaYNMF91?}lf&!ko z+tNpnt!ci#!-z{+D=X2tZR(lJWG$gw(k#tRjB@?B68_~8#QHW6s4ia%b%ut0Ow1*} zQZjy~4eaX1Cjw1ylbhTqN(yjE{3xJBc-tAU`oZbS#%r|!>5Mmf+SBNVz2VX?`Q6|B znoyMt-449n;>fG5hF&n7&iJo=RCnJfcqhRUZw`I?=1XI{E&ci>8^mw;8t_g^HfyIh zBp5mSpHV(F+c7&g5ivwhg4`Y;3MN_O#FqsOFlWqv@G+YWov)xkp1HEn1OaQBWB$w_ zCx@_&%SiG#>|S3SiE5pBzl6jl6dLCanEPYS7*C^2nQZ3|cV=i&XZrDyBu)p;;{u*> zJ-`0stlZkoVWfb~zdi?k9^8VQz$DjZ7<2KjSI`rf#rK*2VHzS4c3 z2K3hx;AY-poObN_eLF`cxZJ)mh7NB1;5sw!DZ4f2(CKqG;Z@lli@rJGtY5%Go@f4K zhVF6d!|2nu-Avhu>Hj>N<3ZP4>eM>kf4{#h>BseNN9O6m|Mr%HhGr?)R>x}TeP&YS zNc8WmSnPBCdsbfYU0%B_R3)b1#eW{uPWbIgSjYX>*0ZZbz%l<9=o|BGxR;fA??~N9iTgB^)^;)qDSZjKuQG+UCFXh2Yy``-#Sx zW0gIyRLmam?FG65gS-C4!8T_U9(eO4d99{|7?~J$THvXy6JN7nU0>8wO$nJJ^#6SA z#A^;SZJ#2f)|Y%tEqt+xP51PIV1an4DhL(P+B{;iR`cGNa5qEN>Bi>&JWWdv#CY$a z6=P$q_%~?ueMuxPSkDWX-l{?+!dze2E9zz>BIK&tzi8H<>h#-wrBrdOaYGD!njJE^ z_Fpm5y^3he1V@j1;xm_*JN19ktox`$cs61Qwq5}hG5GMIT4KiM(Z|}kVA&ny-<%8d z8Gxr-Bfp1*Y(2cAf+?p(TpK6!G_;cw-8k7jEr%IzIGA)Mkf)cu|E1C|Ri!4f5xuEE z>Hy7X?<(IriEB;?{!&y*rW^KT6VqkV#7B2c?^nj+=fo5P!B)}Uc&Ki5J!QzVXEr&v zX`f#1miw{>_6~@|F9tJ{Rbg|3k0-|j|L_{&B>L1^$<~YK|Moq4LKrz_j0*XIuYfuD zV~nTlSWOXU#i=Zs_-*G@S94ftxwom7=gd1I@Hg`x5qPan z3pCy37#+Cmf+U50b_-uzOdwxn`+8y$1gC^rtB2Zl=>;~>*Jo56h&s}^D0RR@8_#@* zAGP9ScB@J>JI4D9ecgo*qAik68XZTqG?BHx)EASmo(x=*Tj~#jyRjM7jk3o8@h&ts zyrlnYkMc^|b6(NJY-#ZbrgmN8Lu*`oz!5ID_A#3-*Og24Xd^Aa5*5at1p1`F9`%>i z`b*X1>ev36=q(Mx_CJ}IN`-<`g!_yZq{`Mr`s2~Hd!cCmk6_@?4}94T#j)m^{`%f& zp>DQuwAl9>(>3{3zntLx@z^J_V(y|4#^+GYx zD)kG?IkXi&@<(;Os$)y4&SBJ;628E`ZKvfuzZ{h5{NMeUqN5s{cH15;IS^7_(x6)5 zQ`@z?Z(1C+yb)8|-jC@mPHrKRQM}I!rM7&Ju>JCCx>e<;-`N^_6h4Y#rX}{8o)HM9 rEr8mL1&C93k3Mr3Eb;8c1b3RC)}%lFmkz#7jC5$f*&kW^976sd)TiMX literal 7230 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 E0>SdMVE_OC diff --git a/scripts/ad-hoc/generate-brand-icons.mjs b/scripts/ad-hoc/generate-brand-icons.mjs new file mode 100644 index 0000000000..8f1904c615 --- /dev/null +++ b/scripts/ad-hoc/generate-brand-icons.mjs @@ -0,0 +1,77 @@ +// Regenerates the raster brand icons in public/ from their SVG sources, so the +// PNG/ICO assets can never drift from the canonical vector artwork again. +// +// public/favicon.svg → public/favicon.ico (16/32/48/64/96/128/256, PNG frames) +// public/favicon.svg → public/icon-512.png +// public/apple-touch-icon.svg → public/apple-touch-icon.png (180×180, as declared in layout.tsx) +// +// Usage: +// npm i --no-save sharp +// node scripts/ad-hoc/generate-brand-icons.mjs + +import { readFileSync, writeFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; + +let sharp; +try { + sharp = (await import("sharp")).default; +} catch { + console.error("sharp is required: npm i --no-save sharp"); + process.exit(1); +} + +const publicDir = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "public"); +const faviconSvg = readFileSync(join(publicDir, "favicon.svg")); +const appleSvg = readFileSync(join(publicDir, "apple-touch-icon.svg")); + +// favicon.svg is authored on a 32×32 viewBox; scale density so each target +// size is rendered from the vector instead of upscaling a small raster. +// Palette quantization (8-bit, ≤256 colors) is only applied where asked: +// it keeps the ICO frames tiny, but measurably clips the antialiased +// gradient on large standalone PNGs (1242 → 253 distinct colors at 512px), +// so those stay truecolor. +const renderPng = (svg, viewBox, size, usePalette = false) => + sharp(svg, { density: 72 * (size / viewBox) }) + .resize(size, size) + .png({ compressionLevel: 9, palette: usePalette, effort: 10 }) + .toBuffer(); + +// ICO container with PNG-compressed frames (identical layout to the icon the +// package previously shipped, but ~16 KB instead of ~141 KB). +function buildIco(frames) { + const header = Buffer.alloc(6); + header.writeUInt16LE(0, 0); // reserved + header.writeUInt16LE(1, 2); // type: icon + header.writeUInt16LE(frames.length, 4); + + let offset = 6 + 16 * frames.length; + const entries = frames.map(({ size, png }) => { + const e = Buffer.alloc(16); + e.writeUInt8(size === 256 ? 0 : size, 0); // width (0 means 256) + e.writeUInt8(size === 256 ? 0 : size, 1); // height + e.writeUInt16LE(1, 4); // color planes + e.writeUInt16LE(32, 6); // bits per pixel + e.writeUInt32LE(png.length, 8); + e.writeUInt32LE(offset, 12); + offset += png.length; + return e; + }); + + return Buffer.concat([header, ...entries, ...frames.map((f) => f.png)]); +} + +const icoSizes = [16, 32, 48, 64, 96, 128, 256]; +const frames = []; +for (const size of icoSizes) { + frames.push({ size, png: await renderPng(faviconSvg, 32, size, true) }); +} +writeFileSync(join(publicDir, "favicon.ico"), buildIco(frames)); + +writeFileSync(join(publicDir, "icon-512.png"), await renderPng(faviconSvg, 32, 512)); + +// layout.tsx declares apple-touch-icon.png as 180×180; its SVG source is +// authored on a 180×180 viewBox. +writeFileSync(join(publicDir, "apple-touch-icon.png"), await renderPng(appleSvg, 180, 180)); + +console.log(`favicon.ico (${icoSizes.join("/")}), icon-512.png, apple-touch-icon.png regenerated`);