From 15a6b77ceb17fe6c5d91d12311a714400154daf7 Mon Sep 17 00:00:00 2001 From: Serhiy Zabolotnyy Date: Tue, 4 Aug 2026 15:30:01 +0300 Subject: [PATCH] Use bundled status bar icons --- MicStatusAI/Models/MicrophoneStatus.swift | 37 ++++++++++-------- .../StatusBarActive.imageset/Contents.json | 21 ++++++++++ .../StatusBarActive.png | Bin 0 -> 670 bytes .../StatusBarActive@2x.png | Bin 0 -> 1159 bytes .../StatusBarMuted.imageset/Contents.json | 21 ++++++++++ .../StatusBarMuted.png | Bin 0 -> 739 bytes .../StatusBarMuted@2x.png | Bin 0 -> 1320 bytes .../StatusBarStopped.imageset/Contents.json | 21 ++++++++++ .../StatusBarStopped.png | Bin 0 -> 774 bytes .../StatusBarStopped@2x.png | Bin 0 -> 1406 bytes .../Contents.json | 21 ++++++++++ .../StatusBarUnavailable.png | Bin 0 -> 748 bytes .../StatusBarUnavailable@2x.png | Bin 0 -> 1344 bytes 13 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive@2x.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/Contents.json create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted@2x.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped@2x.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable.png create mode 100644 MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable@2x.png diff --git a/MicStatusAI/Models/MicrophoneStatus.swift b/MicStatusAI/Models/MicrophoneStatus.swift index fcbc1e7..b9d12d3 100644 --- a/MicStatusAI/Models/MicrophoneStatus.swift +++ b/MicStatusAI/Models/MicrophoneStatus.swift @@ -31,26 +31,29 @@ enum MicrophoneStatus: Equatable { } } - @MainActor var statusBarImage: NSImage { - let iconSize = 18.0 - let renderer = ImageRenderer( - content: Image(systemName: symbolName) - .symbolRenderingMode(.monochrome) - .font(.system(size: 14, weight: .semibold)) - .foregroundStyle(color) - .frame(width: iconSize, height: iconSize) - ) - renderer.scale = NSScreen.main?.backingScaleFactor ?? 2 + private var statusBarAssetName: String { + switch self { + case .active: + "StatusBarActive" + case .muted: + "StatusBarMuted" + case .stopped: + "StatusBarStopped" + case .unavailable: + "StatusBarUnavailable" + } + } - guard let image = renderer.nsImage else { - let fallbackImage = NSImage( - systemSymbolName: symbolName, - accessibilityDescription: accessibilityLabel - ) ?? NSImage() - fallbackImage.isTemplate = true - return fallbackImage + @MainActor var statusBarImage: NSImage { + let assetName = NSImage.Name(statusBarAssetName) + guard let sourceImage = NSImage(named: assetName), + let image = sourceImage.copy() as? NSImage + else { + assertionFailure("Missing status bar image asset: \(statusBarAssetName)") + return NSImage() } + image.size = NSSize(width: 18, height: 18) image.isTemplate = false return image } diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json new file mode 100644 index 0000000..77de1b0 --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarActive.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarActive@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive.png new file mode 100644 index 0000000000000000000000000000000000000000..19b3069efdb65179863cf6d14f798bd047f7cd47 GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}7O4@QX}-P; zT0k}j17mw80}DtA5K93u0|V0nCb)>u0%imoB)KzjLOxK5h^LEVh=t(Vp!3^1CSAN=!S+1w{rwxaZFaH8 zz5XqAecCx+Q>%x*>h6VwDG$QKKio*JcRZr=WcQiF|Bil|==Y;UNl@saHq)+UjbSdE zQeLbomH4N>XtTHZ<})WU@88r2XpnLEwKO`*b^r8Y7fm^(mn$;4Y-}IzkK1dpAVPNM z^BLSZ;qx7RTv)Xw9%->lN&owvZs z8M=(C?Xo#rHTK`_3QN(Usb=9$M(lh z|6G4|-n<^B{LFgs$Pd2nHyhUw*&;*Q5V?-Xy#i z{?YSlTc|0gltR^01^!jc=a+{rJrZ-fW08)c;-0Ms8!CDnO1(`C{}+7{K6X%0t!|s( z+&=}+6*d&gUDM9EW+TJje8wswZuO$qtM2|e)&Fk$R&W2=g^OBlEId5x!HjLDToYeM y9}S-2z1v{Ng4qYTDkfQP__dR*hV$d@yn2T9F-PQ9#9nd-r4vtAKbLh*2~7a2B_Y57 literal 0 HcmV?d00001 diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c688a6ab5c039363d7ca458e77c3e15b8ecf5cc8 GIT binary patch literal 1159 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`Y&2)3rKMmctjR6Fo>ywFr#OX$_EAp<}IEsjv*18Z^NTKL=r{p($m6>wRc4+ z*s^Gzy!Ngu_Cm*!>0DJB9! zTG-TdsQt{l7w6`j+wwdAvcdJO3l20sy>tHOw?F^q{FiU&d~W}mp^rU3H2!gpDZ^Kf z5J!&toeP%NIPAR}cz@xu+2;8U4=c7X3Z7@a5RzQT;Pd_t>bY5N0 z;`!>C(k9=9jV~{&waV-6_;dGI-s)*Nx_)etR;SXe4XRRpo;aQ#JvZpa%^GGd)mhz* z2~%U87OEd8ZTjw9%d8agyoho6yN+K=n?3@$lT1QChBO?QJzsNXzQeK~_IiE{McFUy zuPYw!4WHTZ?xE+MMH5TZ1T(Fle|!Jt&DPkhr#_si6tCn8Z*bfFXzKOqw>7fXOBm-o zsoca8Xq`CyKzChAm?v*@X4?IwDxTGIlVlhRCwb0H&?)kIly=!fRs4KN<)8l&j=y+*QaM}lgQ8e`+M5NN()lwsD2ioTPrd4>uvR9aF3s)O z^OXVFUN_cg?7w-=UqvuCwO{RS_uTl^3fEN*ug&iXcD_%t9y=+-Oa~IPk=0hKsJ+)aYZ*cmz;`bvH9*B8dX;1VvoOMmDx`j-0q@zU~rQ8&+8 zop1Q!P?yZbv}#Z5?hXA%jf#z$&#dP9F8Cor=gPI*3%fV%W02hJn&g|RkiC^BPx^Iu zN=^x*<13laOR;-w-uM2C`?-g)lWAhb7nAbj?RvtQ*+LV)=_Q_Sw>r15MySvHSaJKI zlP?78R+kkVY*_gsWg54!)t@7^M)LCx?^(F*^Nfm&uFWE{`8`Tb_Al8v`8K`zWc%%R zd7W8Z8_yE`mFf=jruoc2&{8sOa$joq55>b$7gg;Uh4=Z%{$O19gWc=?f{CS|%u0%imoB)KzjLOxJQq^FBxh=t(VVCxK#KoQ&W zG<8l+F{zM_4vi(A${j0azmU3dMu;PVgVAw=sI{ZOn_ySLqfQ${bS`m7nY7(KDmqnT z%`Vrj86r)+54=2%2$b4g|6Dfn=FHZOr&^Eyo?Cox=lgx^ZvsyIFWC|z<&YrX^juTt zfA^KF{hL386*Bkcbv7k`L1(Q!aoF>+- z$0VX*?pVMt@>gc}i_05TEG_$5U0S|<6lh|*vWtoL_rgybnWxzbZ0qT0J+m)FYc|KP zcYy^{FLQeQXv-739b;v-&R9t`#UN<*f5zLpPG2)D<^}%{|K6`O#d76T>4`zp7Z*%eAlUT%5EuXCKaJmA))eX1 zIHhOL*-&)Il1*9gaye(Gzo5}o#zV>~^IBC)l$l%P4#z8}eA7^Vl*+AnjnhP|Eu(g3 zLYUujjbHQb{MGq?)hyCp+2n@b6D#MwsN3)_z(o z^ZfKaKgVTDYp$-n@nG)VWt&aKo+yQ{dQtlBb3t*&_tfni6N+~B9lF6ft$xar<7@6I zcN7chpEh2hb8h0d20iB-R_9!{{vNi#^_MT3?OQ+p!TiUwH~m!oai2x5Gc?IeVdwT0 z`&P`p* QWPuW!r>mdKI;Vst0N;5u>;M1& literal 0 HcmV?d00001 diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a354b84a40274f55bcdbe7b2a9e8ce2958dda4 GIT binary patch literal 1320 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`Y&2)3rKMmctjR6Fo>ywFr#OX$_EApmQYU@$B+olx6^$)WL!m#-(NkqaPe*r z6`?5=Je`XkC4Nk1Eln#k+WlI*Zmoiwqig4c2Z|M+CNwK)Dan0#;ON@ZEf8oTVRZR( zE2FInw~&Adi~b|_wizrvj^)ee|9|!J)ykRgUgepebo6ixe!q9s_gCg$SH1o!5S#IT zv+RS-52psbEDCC6RVw9u^vCy6z4N9|tmV74SNHDDQkc2Y)a~VCkD5Hq&j@ z?GAGuS=;9B^{(}_fQY`X?&J&B9|H_ex6M#(KghYHcIV9;HK)=&ZyTztmFuFs=B``m z@SNe)&JEcL!WvCNyVyS!{QC5EO7>fqYP|&vs~&HiugrwygZJhKgL_y~V z*PM07Kd&mB7M0s{ySI#^b+$yn(KvO{tehID)Mtf9W+;6spB3R*%O(&jW3_hUoa>LL z>$L>@@;SP&TsVk88^f>HTbnnp4oNuYt*x_*A{XA=PP_$ zcHXrJ+D5V`b(T#N?f9u|7~u8p(42)|Sna$LxTP;E zEZZ0fbmG;;JH2d$PA>P`!zP&@b;0CH62sM;vcTUu8vE;2x9qt)LsG7!zW&AZ8%vor ze~H8iRdm@XJiT=`icjm`uC1RfcIZ3&6+ADoz-~&`)~==;$BSxOZ2^Cq_i=05uSwo9 z>vQ)-iwD!+A4}?Q`*l9#L1v!G7s;+!XU_Lue)5Ft{msk9ZkqW!nGeJ}%|B4wGA*=| z|4O~-<8^k@D@^J|SKf2XnPNHPc)>~AvvZ$4U$27_e}lLC@M($4=r`gHl*nGRKx z&YZd9vFOXpnOCYV%-HApUvl4Wex;TBnSUvz^19mo;G)#GJ zCj8y5v10DE;w^Fuwy_0Foz-@SeSY1qpfat$0nw|A(*N^s$AUHn`|qQazVkgy&K1A(S%>Liu2j}^2WfuY`bF__QmR&sCVAZd!g_gBR_-k0 z2sb?tdH>YWB?{AW3v_vUra!!Qi|?xRj5|T=w)2?G^8C*){rBs;6U`GRGgRd-h?{UO bkNqF3&f$gAxMx{^2bDgau6{1-oD!M<^t(jB literal 0 HcmV?d00001 diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json new file mode 100644 index 0000000..aa4b646 --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarStopped.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarStopped@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped.png new file mode 100644 index 0000000000000000000000000000000000000000..21e4392710b788768c54a2b849d06fea61f6fbbd GIT binary patch literal 774 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}7O4@QX}-P; zT0k}j17mw80}DtA5K93u0|V0nCb)>u0%imoB)KzjLOxJQji-xah=t(R$-WuFjv~jO zpMBS+qN>CjrqQvY;-ss<#=3=aQ36eJHk@pVB9punIhqt~D_$PdZ+fKIoz&vMf7US| z@WX}X1q%dB+4;9Rw#2=0bozT^*X+A9KiW@NvU^&^CHB*2_VwT2_j7;bv40aU-nZBq zm79^PdqeMt{!|||`{$o4%LDBA*>ip$%=?=WzcuRaGmC?~$F5Xg?lF%EKNqGobz(tX z#eH_or5EPfES$0@^Y(W&8-H2VpvNA4nnx$iS4R3$57p@7mc$9s4$+GvGPtOVNG0gH>*_Zs^$Lr_h;$(k; zAD=H@ZcXbKdCAe4$uUpSXxoo{8<`un$MzZt{1)7mU3ku&;j{#s`@3DP4naW+OxWy~LkP&sNIncH7vra?)g6m-i^cN(@ z{ukW%%^^TbG~VT)(!Nz+Z{*Cn<|=ZAQ?N$KXtl*XJ;k0aLHE{{R9(L05TG~xH{Xe5 zl?sNK>6<3MEm@H`Yh$V=Gy7e;hcVe1bBklIb2Tdkzh*VqTYKS&(1OSx1%@Bpazwo) zFK0V0-dqv?!De}o)>IqW{){EEx0Wqalh)QgoxZ`A<%aW`VvAc58!armZ`jn78%oUd zP;o2Ww~bf!>g&?QcmHjaH@u_SdcUdQ@JxNx=m&GwKH9clOXL&pk>B?HY`HH^6wVR( zv7B)y+Xzopr0JAhl A-T(jq literal 0 HcmV?d00001 diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..25ddfb5ac3d96ed8bd5d12af0534869e1bc3f855 GIT binary patch literal 1406 zcmYL}dpOg39LIm#Y{L-6T9VFjDM?K@XJh8=^4$ho&p3e7q-rv{z^LgH%KR=&zS7$p#d3AXJ02CeU zaRe!Kb|edv{?kBVp%fqr!43=5@-+m~A~M9=A=JqU(3g5yKnA1^KzAZiod)gy=50ZG z0OX%O7yy{(0h#|Y&Qk8YY^io;{w25!{4JqV2KnFbM6Gn>H>8k@w)dd`08)2HAP0iZ z3INDdJK(H|-g3)cjgszo`aq(IM<%RmVLL1PpS_ET_$c+!%AQ6WVgbK((KT+tlTcAUjpQ_I%vz@sE4AFi?YK^>K}# zCOf@Q3M84T$){Oj&;q?S)oCjF97njed()<}I|fXs%a5uYBU_O0t)C9bpujpOKD!}T%D zZG>w&D2-0Kb$unuR{xRVZaS&vbjJ7B{M&C~X55Mj!^gSJiMwX;^M}o&mU%;B$mf9e zCz)9tF5aG@N8QXEd#Q;wY)UKM(MKOi3D|9Uw;ey9fSO=!rI?hk*?we$P-NbWm|>S6 zZ=CU7YvHX&P>wq4k64S(>(jksFjx4ay0Q~W%6R%{+A`x|ette^tYmTmgioJ@%U>n@ z-r~ga9Ma5rdzur2R)Kd_FTQzI!Bt_KE6RIt(1bK>s4Dq~p|E1Q3fw+Gn~(>eb#eS) zs!##*&^xy`)jFi~?c$jur`+5|E0N;N9D1~Ui6C6GwrHxL{G*YO*N1AgiL;*eG*pFU ze6HFD6KnEE!^rbVwqWe=v%!sumwG2AuFTIj^x~-gLuGl_#n|%0m0bYZ_S9o;)1tfR zNwCg$cX)OrAKCR`OR5Opk6@cKZfd)>pQXKoM^tUDg(wMdUfmMcuX5_zAP2z{s5bse zd=K+y&PBv)>P#IuPA~xoPgYFb+Fuq>R2(@jfHcbKa-sP2Ec8-fRo-?+^5w>^HhWvW zSf=5Uz|3sfEIFyUxLjkQX?1lKBcQfmPM(|%KlFU!_?^UqqQ?13*HiGS_=tpI6e2t# zVnN+E_*xsIsE{?_B6~^G;|trcQX~?=7^2h&lM(*w*GuA{Sl%@#&M`OF*!1?SJKq;8 zigoYYwX<}p%}D7(YpTg=frPzi zPD2H7$1EKvvwXk1qX#ee^s|av6eVk_F+!g_dN7Uc;m6x_=7(lkZ0zm7q}O}s;^jyV zODSd0QjRjo`E@+-4e|PM6bTek z?m|1TMYT)0@oDZ5_%hbM6TZomOtwx10doqIl`79I`$!%#Td;hiFDzpF1>>EY=74v` J)nWrv{szN{X&e9m literal 0 HcmV?d00001 diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json new file mode 100644 index 0000000..b8f9d67 --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarUnavailable.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarUnavailable@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..08e3eac08e57f2469281870cbd0deb97373a5962 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}7O4@QX}-P; zT0k}j17mw80}DtA5K93u0|V0nCb)>u0%imoB)KzjLOxJQlBbJfh=t(VVDAhOM}gX_ zdw)())!@|XP~wXFwxIJz_k9^50Vbs;1&*fW3Xi1hIqnsEsi?RJ+HlD|atsLk@W3&| zV8d&^NzJ<$U3ugdDIROtamH_Ye%jsCveaTPXaDl>tJPn3Wl2RWRn-3Y;zOTG)LSu~ z?xeSO(k;I~_1{||T>c{B__u;Kv%P!Mjc1)P;F{%pDD^}2S%uE)#~(lb%{5VLg%tTDt_5tb6=* z+a|Zjrpgk{Tk?g^Djm!E43BM{?s;hIER6+h8mkp~W42wap5nE_ZBoImZk5WU7s)+a z>uQxapK)-h<}B&byr!O0Ex+E(^ER6h&w)bqZ^}%^j=3pqd%o=_bHIZud2(@q|3X*T z@_bD9Jm%+Rzeeog?m!)u&4oEvud3MYbU2WlrYB&+;`_zWg86>U(o3pp6;4w%C(U)e zWOk%;)vmCz7ZuO*n$`)62z{)&I3xY8TZ00B^0^D&nIiTmzsyuyt6Rp&uye-g2hTe% zhmEQ}^BoUTIo8|y5dov>uiCxP4X5Be=yCi({N_>{ZzNyO9l Y@ptB(Rn8Ro0ZPjZp00i_>zopr0GYKpNdN!< literal 0 HcmV?d00001 diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0312c139c08c63903300845c2b336966bb87c3 GIT binary patch literal 1344 zcmYL}dpOez7{`BeSvFKeX*MF)xg1mok7KS88rIU3D8fcN5|Kx-LM(+==DtNbjdBlj zDamn(Eyqr6B$>-fT1c78a^{@#bl&IrzMt>=KHvA>Hv{eMrU->W0RT{RKjiEyq0Xk{ zz>+=zP^l7tVtm~kfyXTPN68Qw>hFHm%L_nCyc{3{f&sFd5sBOZ|J$N-T3XDD0kI?z=KAio_t9s>Y7bvFfa_tlvP0GTLv zXB5UC@;Q$Xj&M=wVe&h zGAMXU-6p1KOB$r2eC{!o)ZDA1oE`QfTN;g5?{&wQBsC3MBt(nIg)6J{ca;-?+hvK;=BlC64%h^V|mLK5Chiv9kY{^O)&wo1%Jwv=Dsy2mgM;c)G6-?^5&wFg(AZnyarMj1tH8UgyrX%T{NY>i(Y z(9}AqH)Ij8;O*HJ$1w5i=gxfdu@yu&c$xJ#6#qCcytNua$WJjIN!@-$YBtx50-uXW z>##b|raS5vbz0$ugB{vliW=~KN6Pd4#*P=w^spG+3qF{fN1-ylLOcIe>z()-yJTT4 zMJu<0^PxblybUWC3g>cipi@qeafO36Nj!^Cm@T#x(wmB;*wZ%v^}MKpW)1XV_NEwQkiD~6U-*G!xns^!l*?>U_S z?dh7fE-QJ>T8tFnS?nVmI>-AhDlW=G2_F?|G$-sFzRC`%zNvalUs~xA!?tmS71iMF z+PXH2#?yNo7UVnHm5q(&^%RiHtNKeN}d&>2K4)E{38q9@fhOHEEd9~6Y z9?=|Jc&ylUY|2S>M$i1dIeJ<@NdXd?>e92++T{p)^^j>kyz=0UVg8nmb=jxms3n>! zGp+{25R%C$GU@eBHWlNDoxaH;|6YF+&+6+R>Z>xSr*)PGlvAEL8#hX?H9HhB&!SqX6JB%I8;I*&M58PsoW5R&h zHZ`JUmfJ4_w|jZgCk&nvpvd&qNZBTt%oP|b@3Ps7VG=UiB6mVK7?OkACty4Yp!Qow zj-#$coEL@F-A{#|=;!jlVnqCRJ~d&|lWqYr1gc86&NUNJZ3D6%8xKMF2l5AsMqTg1 z)5umykbI9o4jq*c{zIK%%s0NbWdXh|wmV~Mg{lD2LP$&ZDAgugJ)6I1r(To83_DeH zW=7$F%}Z`Y9K)tvZOMKqA(8UxrD$ZUUu-Z*^C0dxe@CCnuj!*7a<9hm94?vd{-^=Q zbP`_1+F38>2+5VfS5)UTb!$uBKcDj~8>}