From 39f5dabf24f1a8f3eda8cfee834949e163984b7c Mon Sep 17 00:00:00 2001 From: deepend-tildeclub Date: Fri, 27 Mar 2026 17:28:53 -0600 Subject: [PATCH] Generate app icons from SVG at build time --- data/icons/generate_icons.py | 121 ++++++++++++++++++++++++++++ data/icons/meson.build | 23 +++++- data/icons/zoitechat-b.svg | 16 ---- data/icons/zoitechat-shadowless.svg | 16 ---- data/icons/zoitechat.ico | Bin 132022 -> 0 bytes data/icons/zoitechat.png | Bin 2837 -> 0 bytes data/zoitechat.gresource.xml.in | 27 +++++++ src/fe-gtk/menu.c | 9 ++- src/fe-gtk/meson.build | 24 +++++- 9 files changed, 197 insertions(+), 39 deletions(-) create mode 100644 data/icons/generate_icons.py delete mode 100644 data/icons/zoitechat-b.svg delete mode 100644 data/icons/zoitechat-shadowless.svg delete mode 100644 data/icons/zoitechat.ico delete mode 100644 data/icons/zoitechat.png create mode 100644 data/zoitechat.gresource.xml.in diff --git a/data/icons/generate_icons.py b/data/icons/generate_icons.py new file mode 100644 index 00000000..73437979 --- /dev/null +++ b/data/icons/generate_icons.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +import argparse +import contextlib +import pathlib +import shutil +import subprocess +import tempfile + +SIZES = [16, 24, 32, 40, 48, 64, 96, 128, 256] + + +def run(cmd): + subprocess.run(cmd, check=True) + + +def try_run(cmd): + result = subprocess.run(cmd, text=True, capture_output=True) + return result.returncode == 0, result.stderr.strip() + + +def magick_cmd(): + magick = shutil.which('magick') + if not magick: + raise RuntimeError('missing tool: install ImageMagick (magick)') + return magick + + +@contextlib.contextmanager +def magick_svg(svg): + text = pathlib.Path(svg).read_text(encoding='utf-8') + fixed = text.replace('href="image/', 'href="data:image/') + fixed = fixed.replace('xlink:href="image/', 'xlink:href="data:image/') + if fixed == text: + yield str(svg) + return + with tempfile.NamedTemporaryFile('w', suffix='.svg', delete=False, encoding='utf-8') as tmp: + tmp.write(fixed) + tmp_path = tmp.name + try: + yield tmp_path + finally: + pathlib.Path(tmp_path).unlink(missing_ok=True) + + +def render_png(svg, out_png, size): + errors = [] + rsvg = shutil.which('rsvg-convert') + if rsvg: + ok, err = try_run([rsvg, '-w', str(size), '-h', str(size), '-o', str(out_png), str(svg)]) + if ok: + return + errors.append(err) + inkscape = shutil.which('inkscape') + if inkscape: + ok, err = try_run([ + inkscape, + str(svg), + '--export-type=png', + '--export-width', + str(size), + '--export-height', + str(size), + '--export-filename', + str(out_png), + ]) + if ok: + return + errors.append(err) + with magick_svg(svg) as svg_for_magick: + ok, err = try_run([ + magick_cmd(), + svg_for_magick, + '-background', + 'none', + '-resize', + f'{size}x{size}', + str(out_png), + ]) + if ok: + return + errors.append(err) + raise RuntimeError('failed to render png: ' + ' | '.join(e for e in errors if e)) + + +def build_ico(svg, out_ico): + with magick_svg(svg) as svg_for_magick: + run([ + magick_cmd(), + svg_for_magick, + '-background', + 'none', + '-define', + 'icon:auto-resize=' + ','.join(str(size) for size in SIZES), + str(out_ico), + ]) + + +def parse_args(): + parser = argparse.ArgumentParser(prog='generate_icons.py') + parser.add_argument('input_svg') + parser.add_argument('output_png') + parser.add_argument('--ico', dest='output_ico') + parser.add_argument('--size', type=int, default=48) + return parser.parse_args() + + +def main(): + args = parse_args() + magick_cmd() + svg = pathlib.Path(args.input_svg) + out_png = pathlib.Path(args.output_png) + out_png.parent.mkdir(parents=True, exist_ok=True) + render_png(svg, out_png, args.size) + if args.output_ico: + out_ico = pathlib.Path(args.output_ico) + out_ico.parent.mkdir(parents=True, exist_ok=True) + build_ico(svg, out_ico) + + +if __name__ == '__main__': + main() diff --git a/data/icons/meson.build b/data/icons/meson.build index 7d4c69c2..2891c5d8 100644 --- a/data/icons/meson.build +++ b/data/icons/meson.build @@ -1,9 +1,24 @@ +icon_gen = find_program('generate_icons.py') +find_program('magick', required: true) + icondir = join_paths(get_option('datadir'), 'icons/hicolor') -install_data( - 'zoitechat.png', - rename: 'net.zoite.Zoitechat.png', - install_dir: join_paths(icondir, '48x48/apps') +custom_target('zoitechat_png', + input: 'zoitechat.svg', + output: 'net.zoite.Zoitechat.png', + command: [icon_gen, '@INPUT@', '@OUTPUT@', '--size', '48'], + install: true, + install_dir: join_paths(icondir, '48x48/apps'), ) + +if host_machine.system() == 'windows' + custom_target('zoitechat_ico', + input: 'zoitechat.svg', + output: 'zoitechat.ico', + command: [icon_gen, '@INPUT@', '@PRIVATE_DIR@/zoitechat.png', '--size', '48', '--ico', '@OUTPUT@'], + build_by_default: true, + ) +endif + install_data( 'zoitechat.svg', rename: 'net.zoite.Zoitechat.svg', diff --git a/data/icons/zoitechat-b.svg b/data/icons/zoitechat-b.svg deleted file mode 100644 index eadb6ad8..00000000 --- a/data/icons/zoitechat-b.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/data/icons/zoitechat-shadowless.svg b/data/icons/zoitechat-shadowless.svg deleted file mode 100644 index eadb6ad8..00000000 --- a/data/icons/zoitechat-shadowless.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/data/icons/zoitechat.ico b/data/icons/zoitechat.ico deleted file mode 100644 index 72dbc9d2592900349d17ab6c5871f127da3e641c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132022 zcmeEP2V9Ns7k_V}A*rm)22oaJ6-q{FB0CDD?9f6erJ<6Bq9v(hWmOU(?Y+|;+Dp-( zDLw!5+`4{=5-xxIe%I%?z4zYtd7tnP&7zqTe!T)`~ViX9DgdN1a zv^~V!zJJyAO_B<6H+>(`l&4Kpm*|tKtISA`Ut5uu^*k?X6XBe=gFx^*1iwQskC9N` z5dszKlTh_pk|X|Y$SPu8*nf$KI&qsWn3I z{5AqbZela&utEs3^j|Jr&pMm?pN`}Kl|_X-xK)WCy=N@j0U-%k)TWnBm$+V5`3U9#=O{1Fx`SiGc>=q z<^Rt66P`fqRzd)DdU_P-VR%Q;m^Kp##*Gi~-MctNA|+0VxC?sL2=xBC6g6U8;jusA z&i?D;K%W4}JtN?Kr5FAvW($F0F>NIf@Bxa)W9T-b6Zjw>&T&fKNyug#00Zg2*B}1` zkTXF5&WAwu-*?M@U-+X0u(`mlLD&w2v7-U_z&&Lbu{2u~TP***{^TbBa=toRfoKMO zFd+Ov4`3c36W9(Jsk?|>pcCl-p%E<)HhU`q2NM$bV1#K@T9{0R%QedD?E` zK!!RoBPC*uI`Y-cf?c)gfqewF&0@BP3p+c?CyF%Ymd}-BI?XE}5hY zkCT=ao*>PE9|8X47=!P?9|86VFh^yW3`wZ`G>{RQUc>tnpwnfiNz3z(5R5|yedh!D7oG;T z;8++3S}6Yi@3Q}T%6}LB=vU!iVN61pDoub)$^@nUl~f3lcfb?A2LP z2ORr>UXX=xiRNDl^%rlu@Fds)%0wDo|NYbTe^2@Ei9e1tthEF>2mD}3$_Kr0IR7ZY z^u-7AFZ>YJd{6va@P`;!^x7Ke9H|!cgI=NDf4(bN=Uwn`!~YHNK%EVl7hVG&=;Z2< z{&jH|8^?-f3Xi3`+xpu{2S~+ zAJ~zaUs;llfL-)gd6NM5>9F>jNR{>9&;9>@4gQT6NT~55j0v`+h!R5**PpHlqE*Q8 zz$y^?(L|;A4;%wR&KrXm0KEQ3#{O@Se+vF@9binjK&r1YCvEbBJib5i1+q>Lv7fF# z5dYc#`u|^!|2yCT;DgRuE0PW5RSo`=cmObGhuH6!?}`8J5&!$I$N!xp2{k#veDORf zDE}yl?N8tVi2I)oxgSN}lK=5<@c(_y{>S!TPyLVOpMrmrGkHA7DLO^s{+)RMFkb}u zU$1-Q|9x}*$A9uq*88Y8{>?7r&nsb$_}f_o^sur4xu45{-VQMTkDBp6zr_B>aR3kx zLXHiAI3aTE2#zCxwSR%HMI6f8UDUfqkpne3bZ<6zvus*|t^V{$^hy9)S7~FGm#Cqa2 z;E(<|{6TkP%(1SH~y`c$$Fr&-~{o1 zu?Ych_K0;vArSgw@TbInlE-b(?+_3AyW)@M&Ug+*nMYw>zvHbVMpNt2{WXc|*7U~jC_!&F^Hr}AnHAE!f zkA64&vF+ZSvqOHzfB%j6M{OE}Vz!MY>;K;PV_X0q1o%G=lBRwv5n!$fZKK}_e>^wG zzBsaP4svxU{<*&ue?0cb?&N}+p<_Oi{~q|`x}$2;)B#~@iAjL{+n(h4*4i`dz+OEc=C+upbZGen17-#{;%MtfP@B z59We-F#n_YZF4|};JH8K?vV4xvS7Z2`709>_nxEKDfgXM@Z z)ZhV_e-eQE9gID-@s9)lS2WCLBEZ)X4itg^hR-6QE?gw|$S_5L&omknJii!tma*`B z)3r$`8?em=T(baIOqqafCSaR^39wBEY%#rn-@ecyp)^dIB$TQFbeM!vFdZVHWWW|v z65yKz*d}5Ed=mg$O!0tkJm4D#_+rA>j|JYu6a)C;K1E}K{^7nxb@vM3Ixaav->I}bWiyoy1Rpf z?rtZcJD9eS&}~dg-K0oD-dnrq7WmpQ-2{INrW@dMxdDA56U@1>WAV3{ZMQ_6!*jr zB?fiVGkEVs32^*Hg0>TSP&~d?e+1Ww2g27I2=&+Jp5H}1yob!iM^Z|4Az zeF-?1+|JLEe~dpl|L3qMYN{^(SMY$RnLe@;Cr|*`6VYJ*P}YCH2mgqTLs7c13`*1# z?hpUY=Q6~iZ{dIlu=!!^c=*fk2fI00cMWQ-tNrVFpdc$98Hs>>31f5^)&V~t|JeVV zd{h*8Ko&)89{Hv5AIm=i{Joz^51a$QzT<{*NPJ>?&P4KU|x zIsjzf`d8zReeX4ZJ;oo`Pr-GRa9yp}&piPD&cBieTAJP=(^Z1V3(v8@Cx~^x_u?P5 zgOiN^3*dpsZCrig59@-a{oxyoQ2t?~OmssfW5rs6NK`uf!kURLH%X z$O+ql*dGKs;Ct~8Ur!Hy09mjDjiQNk>G< z_+uRqv2{{k_@f{xVtZd20Py$vRrup|bzB#1Ao$}tn`Ne4sJSGIDm>8I+=N{9526cT zEBV8EZNdRq+t+~gejprYjS2P_Kp6*Ntr?R#to6fhU_VQgh6%>3R9F|r1Tj}A1=fX= zVO zyKhc^_`@!3pTDAkE1pXexxWH`?CZgH{#dfW&qb}(MO5K|ca06mK|={S!Lxe; zIHds2IQHXr$^ZBk`yb;Ux0nAT{z*s0`osT)ujJ?W10OO2_8)!){x~iN>fn7F{-6VJ zE=;MF1ZsOzMHL>XudP8gYI4XKo?jryX)?$;)&V$%_*dtD{mA?e;~%qg+DH7;45Z06 z0Qm8GkN;Tzw>_2oe80_5d15hqhi$~4YX9LlDJ=KjgFn^*xc+vT{buz3Z5>s3;8jH_ zGTSVS9AW+ZG3X^61B7G0{xtlfwsU>N|Amnp3g5(z*Z;qSKLS6{XZyIrZ+HF*{L278 zaxH}KkpGYPLoRih%O2Fx@{TGzQ2H_t8L#F=E+9uwKo6w!;DKM2|M{cxAGvk>C-_Gx z^Y)29%mKFc9s$7Lclu}JkK-nB{ktE3S&OOKS5(rfB3t6LH?ipO#HE*4`WYF z{PCU~IPSapp%c~C3SyoGAY+KnxC!erQ81q)^8m~Zes=!<598lU{*#V~^@qQIZ~S3> zIO%8NkLC4e;E#0x=7E~v8&uH&c)cO$-VJmX*5>Zu9Bi;x@!bEn$6xW&@jqF2MSu85 z_r@Rl{eKqzcwPSu)V%&#_+uU@(uZrrJ)#N^;1~^mcL!t*bD?_>qZ8AE2dGj1Ob>;JpW78m+TM!f}Z$;|B`qnMU?yu{PCI=p6~w({Bi!@ zOZ^e(ZGI|Mc%Z$l6?vE(Lw3Le58ys<{txy6|7iWEpCSKo`~LC&Vf@ohN%e<+v3HMk zz!xSz4}Y95hijevD*SQo=SxFA)Kr#76&}Fr^iD^2p$oDEdI)~{c+3M}%l=6Hub+W` z!eOCL^#51!?-dXFv-Cf<&3-lhcwOVNz<`2TXLt^Z@ecEY}%UyVQ30p$GOvvR1dzJ@A1@cLC1 zvQ!dB&Z}UpfWiZ?{`b4!pQ7?9kaE9=<;gFaoS){K5N{t+9Q$YVc_|0nDI?(siL zd0Kz?Lx$(4FNj5(M@{^*AeQQP!yngw%mW^H6?&H{I-nEyDDZ|mvRDB%L?9O@4D$f^ zy2-V_ffrzZOLDF6-u1t!DgSYMW{~s$dgC9yade;fL;T0=Pthj`h;gKcIY1k=;(xHu z_jkk}j{|v75B7CJ5LI~K1B@qkoo&&XWl$dm{O}=oUI6g}{ndY`CjKeMmVAbPD)|2T zi2ug%UoB50i6Oo5FWEs5Fb7DZ7XD=rtMx7TlXHK%^S^NZ56%O`@&DL{#PPp4c7PK9 zgX2H&dLmx`#cMy9$hE-0|BL7T1F8R(dxRF%XU0*52j0JLN1kU5$z#C{JQj5G0J#Pj z@WRiM|H#e5QHF`^XZRASU4+;A@LCThvcDgEeSmoZ)O#xcos*9V?7cjgdt%B3 zdCvu%p93|)Fl9qcuxzLamId{|GIhqIhL;&s;epncX5_4=fzE>|4j90=2SOzXR8 z9S5?-w3Y+e06FfKMsL8sOO03k>sn-?yb4)E4ADJ^Bg6Io$UFdifb$-xg@4?xX(;22 z+-LZw>aXlC|E~kqc}Mq!KLW2X)cr~MQT%Z%6W-I9!UKKbU;q3vH6HnI*T$>La%8+- z1f7>4kPp=Ohy)(MIY89JKTU7>7x9mWb-;e|KNI{!`a-|!^YHbA;g8~v_1o9*$MOHw zR+CW2JL<&o|87iBR+x_rr1;Q?) z7lrgh1|uiPtqK4hAlH2aKhgKr|4rCGlZ^eB(m_RPT1CM&}z_-@_jM_2`Wf)6+5&svbrBT>A z#{Tfv>agAxXBfK0UHUA@5LX- zd=6CpasEH{0X5}P#}`Ls*r?VVUMui(cR{B`2y_MJ*H0k7D1rM>Wu>+z^f_ zzhP&AjDZI{fCrvYYQI4|S%3LIF^bHf_a*zpAIp9p^}licFRuT}|7Dc>{`BQZ64n8a zz6*c2uiCHp|9az(_cm-PrA~bhD#J$A=GxoZ&}HM}$W#>8jX}0TAx@(I`hQU8`{WXo zWe$2D%YHBU$Mv7XHw^0!|A)cfxeo-ywJZYJ@BC)@2mA-(|HtD$rTz=K2H4%xRDIUJ zYhx`}LUMhGE@2@TK}+$(nP>*!P8h{Jz=!)qn2<`4{e6%KQK3jTMQ2 zy=NZui$C}{BiDEBOV)G$XPoCx83VrL|LZOP82?JM!KkgK1BfKT{+fA)XO zwlSaW|NK4c|5#_dd3+J(0&QIc@p_#o64f-Z4>(2|E2x89KrWBd=%?;qCyN!br;_n08xCkf)blOWDF z5fj9ECO~`}rg(_+i3fjI947F4#)9u77JU6Nn84o)b+yQZeSdiWr$|^E!4v_q9szQW z>p#c9aZmd%e&<+}bw-MeeP8$|9-8yD{hw?Hg6%+llXHY%ft=II{^tL&J2_F}A%2AS zDvJifu@B#aKc)UFj{T^@u^*K94~PZ$B>n?p0e&R@BOlh9zqbGP$35VHCvg7v$35VH zCvg53&I7~wAC&lS@*Z%&6O{NbO8m#StpCRE9D}kWK(HO?Z(u*ZjW7<7?M$3+{H6V$5)TQ$zGQ-A{K@gZQ14-&^FNCGf5ad3z|V~T z83_Kk2Gp;t|B|4}4szd(eINLzga0pT3)|QBf7~!oTnGBQS5^c8dg|8K_Ww%NU5rw+ z=acuXC)e-oWBtFk{r7LjKXLa&lx-%3ax6jSG4@}=|BNho|IaVw|M!^x-+Z`wps0S^ z@A8ikBO^BwrG3diw*R9Q=uo=Ba+G#_G0HzS_&@m{K>Sy-IuFV@D?`SmWvNP7RWy7d$9c8b0EH-5&YJ%{o#-2053E~qqlcgqIW*4 zP~)u?=*@-kRH^^?qw)X$5B!r(Ac_`0X7N}e9`;q^YBMZoObnpGYd+GmJz@G7Y zar}|<@{ST?z&DiFm;7V=aSezXYgY8uTO7T`JaAtQ)m@nfJV5u&^`AeP|NmhA$FIge z?GP8rH5W(uHgYHr(^v3M)`WR9=uk}k;GYM1n`3?i!yi32TZ`ZZ9w@`QiDLiZ@gMga zi@5l9@zjgkXx_2bXHWEPvwsK_bzlMLdg$&f7 z<|RM7ui#$><1hD*;zy11fd_bj2P*o)AMf)*uKi|1gX%%{u?}dw2f6^L{`zuMYd^Wq z{a-%%|EQe*^|R$abuTl@I<){Wmq7*Rf9C=XVZRw9Z&~SGZs`J8pzyte#(UAB5`q}w^KMVh~ z18gYUU;*GQgI;3XDfAWj&p0ItdxJ2M*8nN&e|_Lz3giE8g*}CbAg`7S<^{RE^*_cR z`^YKylk0!mvY~n}F)|Ne{2T6oE&!^#CV^@l`5}IQ;g9nFW@vGuT+_v<&`uUe4!y)g z!M-2)&#{z2DVnoBS^wz=|2)XiVH5|RUvIuaO zBV$j-AM=3sD)i>oD)jog6smDqh^nlo0w2&JYUF=^FaBBDV^N-=AbM%F3>9CLMMW3o zP!R=t{5}BubI(emR1H3||8Ictzc;||&hR^7{I$MRTM{IwDRC6`HhxdRAFpv^JD{ih zQ{um{{a<4{5xwzT+9m%z@F(*C=7XD<7i3Y5+cH#jaXzZB_Ji~(}!HAVivfIsGe z8m}&TbrtvlsM@oeJmgTdyBw-=lSP$o(x~DxCK({PPpI5g4wYY$LuC|lfxm%%1pj<1 zh}k|l7p3ePhVUF1TG29{)pwDy^oVSI&!o z7om_Hv?UtWP~u7X_%W5DP7|L4emk)0IEHy1(Kdb41U zShgRj{~8bDqDWMqRat)YY5%_GSD6zukpHEK`UbpM>Iz<56hazNI@_#XlG zVdv-Le^34Y^W(p%9RC{$_WuUh1ANe*gUJ7{r+~d6kOSBVbpz7>P!ACA|1;3~j|21n z{BZnt9oT-3Fz1{+oOo0Ddu>UVX{8!1(&j0xa{a*_Ht;>-Avkq_{M)$9`==wsDdY?lL zSQ7XZr$PLuYUwG`WvKuA0`!0TFVO$(u>V^+*#2%ns<5UtEoIlA>7S<_8vp;60CxiR z{bGRkxj>4r|Bn&u|KbI{{}7;jsQ=#t{{N0H|3CKq_nH6Kk)uI0f$Zl4g+Tt-b=d#e z2=f27!QPMaz<0#}^xx|bc>+U07Z<>87s=WL>E%%pL;g|H2*7?~o(_oz@;~`YX1!7;r4xrb052C zNIC9qkaF04+m!CW$6~lgADi#Kz{lphFHrQ)`Q#pl{BulxCWikUlP~zsA^CzI?*@Nv zfKZRilRMDk^5hQmKJL*Sa)*j~whtW&>3Iwt>V0h3^LyxE@8h0dLx(@S7qv(^L6LjBt{58D4 z^8IK0)SJJ0^JDMhUi@y*`xt$Cf9SJg!=69*f_#Pa{2t`9sOK@rZ|~zzZWuJ&CpX0L z`SB+=BnCAAd$tey=93P?VNV4>)>k3_oIuuRJvv0zcRe~pR=7Pn#DUxE(E%}h+~b1e z!+$PFzFZFtMQ$FUj~D3H=N}ss>pK7A9T{{TQyT1U?&BluZti1`x=)9by6&+1YVwNpYYGm$v^1vHJlOh>ES<3;Xra0AWk3>`G5GMpI6LgVil}c-c42^wx?-)-@F&r zyUh= zhkxldAf`$b`d`uK`M3rZ#HcpdlggT%NuoX5fSl*KkmJ&XcsP`14uIR^!wAG2!~!si0TQqHe{ znmqV?oR8O#*j2l^w!8!-XbOM4e;n_J&yU?Fh@MLmG0+EJd_Jsuk)JQ+eC)Gt%#0`Z z;|*@(&_eR_qnw|pEsD>-5A|&H@%eaPL2?Xn(sNXs5{_OahokDGaP+>dmE1;2Mk=|^ z5Q;2(^D(|H1U)te17IZMwF>L3vz?SQHquz#@hYm&aQKN{-1x0bnMl+5lycgg;3?i zMX20S9F^FwK!r9dP`05EO5Q!P3F7Tx*4y_B)>c@c|7!63-QfBOaQy_}UpLspR1MZE zSbLut4oav<42TZ)34;|ZLx@Pl)Yl7thku8EUk{Rq^$a_Z0MJ163~m=>RS;sxok3q5 zh4{H?_%mw1fKN1W9R?hq2eSJJ*77;1eGRDf{;0cs95YZ4{-kxFFO)!U>;@mzZtz_y zf$p05z1M~I7xZYKyk3p<5!Oq14`lFL)ND~`;TP}=X~QDfw+Cp&*+^a zsi@h7^hLZNKaKpe5T8)X2cKlDZ~{JqKFr^0VS4@r~97~Foe5jIrWX|=Vv88z2bq81?h-u$YIUKbUhFx>a<_TvxE$L%B7n`{}-vEJ<$ z0*~X^L0m7cu6sA?%6)xrvb;QQrgFS zSQq2}@jl))HlVQ6D&%+|y#F(We<=8p+utvUA{4oC`_8@Fha7rxK19#<@m_{+v%1Da ze4!?|MwG$!Px!NE`-xhMQH0WDa{DmW8TIUcIgHUb-=cT>_?b0kCw{z-*RW?%@IK)$ z_CHlm0)=mxgxfz2ZOiv;AIl@I^_=UWhcYkgp>$V0l;)y`Qk;M;8I$`?xyY-s5)`sm zm@HqE{>N;ei16M8-T1D7cShjC4W1)Q;a{C);5Ux9opHIURCrUTJ`kn{-e@B9Sl?3$;GfbiOy22PNUp5q72QeP3 zpnoc&w+x3`maHG2Kb8Tk!?4Zp685~qdV)OegMPsAWY}iJwE{8EB_HI2x}UNr{s2F= zAu6EH*i8TUg7!thK4{J}m2a33o{_cXn}2-kr8tXJoG$?=z8YCrQZD>?o(|C}VsJ132j56!^x+XOnS z-^%lFzXFgmm|0^v6xBG+MKvA}x97S7mD`J;Qd<#JY$FPJHxlH$iNC`*4n?6J#& z@y!I?j?Ia$zG@&B37(G{=!X~h`IH*7qf+x3sMuTp6`Jy+d;=WQH=ZJ2>7f7BVBGtt zkH30>9zTF_d>TBTJ@EXU;Q2elIP471-wE{39#|v(str>Nv%Pu)M6{BCpqx`ZF`OtO z=!g&q8v;k@N9u9O&;F$R4xfY1#ci~LS%cu8h5TyCVT|Lj91N3|5?_a{F?b<*yd&(S zQ2I#(!AVGqFWaE&S{rm+Z_1t{bst1GW^4@FdnM5=qgi)so^U`YOTtb8WqQlgwk%T1 zm(webw!0J`GlX?LhU6CA>{fL-1AQNy`CwK;p{<(|A- zzOarXW7b12hxCH|(z5~$t|Xt^>ix?5hQr&FNzJZ= z$eGzb6MSeRmdgv!?CmhwxGdgg>-^5egpsFmT(G5~%PrN-OQv&9?HqftaNK&6Vs0ga zw#My;>1Iio5t{~ecCd!flp1Y3wU<%B=v|94^TcMUDNlXwGVSCU+$2zPdMc~PhHV?z zd?RiT+aFCg`i2~#(sA45reOJ1I(9vGlXc>94A;cPS?5V!Nc1};Ythg!-BVs*2)Ec& zyEWSac0Rge+@8W^cr^TdOGMc0*`5)8H%E`NI&Pa|$TNO$rpG(3cOLIN7ZFUvhowVe z+`USZb4~4NL`ITUxeJ%?;TU1awwf_$KfA2o1^HRTmJ1X1PKr^9;X3EOh>6MA+H=m3 zbDoP#1gG)sqLXfNnEG&-)y|znYXr{>J>$hUSHjJ)@#ha4bH}WcNnrtvc{cmpR70JA9qN7Fy%f#CZ)@yE#UG?_xmHeC9hmuLEys9Ar z-p206ywS_7jV3L-YV1@+1PECRD#w}FE@qajJ6(|FUv~6pitr*@pZwOhAAIk=$u@uO zz9TTJWd54G)8(!+e1^UgF*)e#^MKj^{><9dt4_Ph8amn#6^nM5&tY7|$mGFfG)X+i z*rHiEVbZCNSYwfvV0JkMBY|cKy*JKQg)f+0;7%OIKCgjOCELX}C9OE!< zB8|dyC2ia6`?D9Y=}ylayt8(U;gN+-+c-s+3dv-7t-q&vdh0=20acOx@{J+1-dA~t z8@I8ZS-fo0%5+I9j|)P24VEF(_7qk!k2Yl{`LktBAo)mWu&(nyagUdOS=nZmB)-KJ z&-^COj+)7JT!u9yLEl&_oy+Exz5CO(+B3XcxHd6w8ST&zPtV-&vX_RjaF^^g^B~tp1Wa8-b6Qr;V-emJVZP~X9AKU8CyGI=z zJTimGkTg8(QL(#-(`lKM1E+a#V~+LF6#7N9^8B5Z+og8Ea0@dAmlB<*Qct2kQ*(eawxklM;p;jT+_sCC#PCyt3UPQwlS#rRT3UCKY$S8>Lai8Om_b2prpTzV+lDUbET!f>G_%g}*~8WUuq7mEuF zUqmY~=3dV5ZQFbdVs*}Cs06+hdvojd0C=^60>`eSB3wDos`U8-JdTOE)R&8^ynGxB8=^W1a?G@JZ1jQ^ycs#wQ3X6xQHSSYX`?r8JeVtP>n?@=cSkCvf5b}LCh2rIhr~5 zB+^*p<}CSeBTDSXFl9I2&4*o%)o#4>P;SV6r*~X8r(ctgy~q@3$E7$&&GL-VVfy)* zb95Y%RdVRv{etKxtY}*7RDYH8y+G8ocNfQR7k;~1gr`1ziea!QueokX_NDU?iiU+N z7Y>th$VyoA`Y97FC$EFy(8r^_*nC4;bVmop>Ta?z6`9?*mbJCI@}}k+=SpwEfRzl& z0dejxPHoH(HZ^nNG?E(2KQ8JmYtByb=j?0Gamw?|*;oi95AHj3(clV`Am=Vq4jh#b+uLpUpkMcHj!pSt`nQtRCHm6>MT~$h6UFqDmb#7$XBR3 zX}3J?d|iG8M)f@BKE%2@MKxbm{6^oMUp}3{fU}GWCrPjhOD(@EoygEFxFd*`B*Ewb@q(qB z_rH?0oMLD)_|p2(H;ysv%L>z`>h;9SMB^tFD?(*>&TBiUuHnX9UDnMKpc6i?W4 z)^f68T%~5wdlr4#go#c9Wit+hPf++kTmNX9vYMQ@*O>FjJA6d21mB{esxxn@r7Ogo znUtMAJm4Yko^=zRuMf~sRDbQ)Fd@`e)pF;Xy5xuwhNTZ(?~Na4#Jjr4GH#3R^$9y{ z><=?>YmO7RaMDaFaP~f>OCzJ%)Gf4!Z5l+9E11ngKdMk@!o*?1b4u)o-5=rxFM%)+e(6!T{wxMQVi;^{Bm+p@q`7F|nO**Hki)1E%foy%CWdO$CZFE0bNX8i zt^DP$5A0Y;<1}Rj=h--Mff8+)q!XJJej1;Q)OfVMy{>D$SF@Vh_#`4@4A>7w;l~W7qnXI_UgoojU0FV zt}E|*RuRIgAyKcyRnF+_r~M%Q!A`mxhEhC=nr#g3CkkVDB?>iKFC@omUb(|j_;hR5 zOIp%~C64lwjH-fezBIL~JX4wB)qXVEdoppnaC^EmgNiQ5yVbdhPS@o=%o(?~T=6bz zeKSR?Vye&UTgK^JQ)txGRaUIa&OeY^vt|AMPNV&ea$J_LH(m8Tv6YGG>fmq%>DY@G z^pvlg=q({#LD%lQ&%JJQw{wf%x>7k}yp*|Zvx%G6{I+E6oksrRyPYH+ESbqb+Mvw6 z%adL6-3E*GIl`eaPJ#CidK|bfxZT)A)!ksI-Y|A?E3NQXTb2Az&=;*~=Dt33LD@{1 zOw+CP$fUUT@CcLY*mx&t!rDr`kkGHLc6?%J`x`f( zp`z+Cf=&uFDs{;xs(q z7Lvx2c%FE>^K9sQohio_p7)&=)RDkR$huG4==S066BBXT1%YAL{e3(Z2b??*WUn2> z>s=)2+rFLYf`?JD8duWp+rrnqUg^yZ4t8O1&up8?+HN1#?jQN&f|a9>#)Qzjts@*x z6VvIJ@6t%$qcN{&@9gPj!xfhk?zHYg9vvg>o|>h#+g1tW>o(Qa?3?Q^MpAmqqBY&n zZIaE-`XO48!6^-4NwJZOwOI`hfW}z1#yg+;DI`HZiw&~&nLPR3F7*@7oELO5CFrg_ z>)}x~gJ;Ls*?h*P=7KwJ3>5({)`7Fc)JKj6bqzBYc+JYZHd7>-dkgdB)q^=4tcmG` z$)kpaUtK~cNwe~7YRUbBugpjv7*?Y5KJ^Flt$3y~hp)Qtq`&GQ?Ne+0P0R*pN~XoC zlx;Ec=A8=D80+?U`iM3+ZXWu9iNJMP9b{ zfv2V#wN&qYGpkH?kbPd|WFmUm(L-nLPfho|J#MbF<1E(#RY6;e@Dp<%MPIowe1_t> zsf=qy>|5iM_w65h+h1+!7UOXtu6d(;O-P%wZT+fOE56fN=yhGxa`3&o2b&tVwl`##Z??xVD+8ZWudjdUQ0m^*KqA^YbV0PY*Pg zo*%65>~FQUqGI_?*Xisl8(Aau#8ZXLc^+Fo^lHiQ<+|)YRw^%h+yR|gDMM(hmOZBT z%~Czy;<>dbe}}2)jzh7J6)l=48`{*G-eFzcdSmV+J)_jxj0;8y{@F|3vKXpPR;1%B zPhyJ~_NRN=e(>nKTs5T`s|)Uu26GQGJ|13t-aK6OO!(k%-9X{pl2wW}DZHxB=eP=~ zX|o0{r{&gV2;ItkQifI}%X6CQi`QGrEQg3~6&XtKDQ{LEZPLOyHCp1nsoCMZk-my& znz`X=EZ1_7IDL1dXR@H(N!Dc-Tt+sU(uc5B$#7q4cjC)&2pO_j*dQqJjK9?Z*;V7W zjS8c;-ZPBu3^(%{ai(^eCEl-x*Sa?eFt*8$oh5N@_ll`ntO^$%u-3dyoyQnGdXDs^ z)8~xq#xr_22i@@$q%Y#qV$RO zmu^R!NtE$)t{vut`p|`UIp)Ofngx2Tg|}}&&FwfXp|iz9vAECcZ|18K2u;E zZ$=aEB8Ba|MUn!O*w0Mmj?&_C;L)`<<$1`UC+H(y&o;W|$wV*Lwd^hu6X#4Nm8si4 zSX&dVTdg_!lxbs1*471YBHcyli}dMitrpMRaCGh2CD*1&UXfMHuTBaYOz&>@Hh9-W z;q^6!Cnl&!K8j2_bxCb!v#e^I?|Tndm1K>G5hKp1yPHhBb$EsePYn+MKq3%)PX9+=5=f>q%-jV@Z|<7=+t zSoUFfb*%3UbGe-X#|%g`KC`k@EZ=!eJ5Y4E(PZxXSpm%oqgFea(44w?Zqx-fC(JK`5c(sc(OOS9?X_e;MTdOzRu0G{fv^kWd`j;+XsfjZi*0d z;_eBBU%hfT!}d~G99u{s)AEs9O)5m99vCDRMch|DH}qlH$)PNUinE(8YWU2|c412z z=d;BzV0WbB2dUW67pJWpW^-<(oXHb~llP5xomtDyFEN2*Xljftuf1VGm>LbM)X4?g z_R&S}ouM^kg6+1YLQZsR$CeruZb=n6eG#n2x{)ULSWNZ^%sVk`MNSs$t;Gk&9uA`A z9Q`iBLM-5*=BB8flEJHNgbGyDMn+l2HCUKSMll&jN<270H-qV_fRX@HIroIC*|V5A z&Kg!KsHHJaic?7Sk+KXS1+s9NI=w&78=n(QXLFZ{;SLk&S?Tu2%9jM@`MZr!HAvk1 z#>(XU;#D!@xrk_^7jznPCsj6QtG|92`}l=vFbl8oh`5)6;h{>k`PC*3nan%s4oTf& zSGhWcZS?A)4^NxSQcGK~Pmz6wxTQ8TBXihb&PglZ3_hzPN@rb=?bncLIf~10R?8_n zi)4|^RkK@($vHx$X1H3A?#cRV~s;gHXqcyNv z&NZI*h8FAA)l+2xH^sY}1Prd;;L0!HW;6N{e^FG0;nFH(vbd1NfA<9|l{SW=4{Pi` zB+0L|ZPD0Y`}%^>y<1kRSPW@_{g zmGlx=H?M3c*V>z2B13OTtX>|^w$4rB(H_C`mb|m9Y3(jb{+gxAY$Ij)%UZL=*3t*a$>@%t<>Y?%cyy&}YU1^|Lo_A~9ZYj|!UW4~ zvHk3fi&TPcEaDzC;<<{*c$IT$7yT94_VPo~l@jWgv*dg;3J#iHSRwh1i@E8ejExEk-y zls&#GF3g#{o?0^vM8=;#S{f&w$^DST8mc|Z&Q0Pu%Q|&8T6GgEdeQ7=n}u~PTD5wj zwLyp0mMYS}-5kGnaQk}qWkRNDi{C}Gj?z4P_^s5mnMt{2zPAb^wI-Zpa11X!Lubal zGJKrA;G!yb#+Ahz1WQh@7;HW4{rV3>#*k!9j)*cGb#wFN54<_SWMs@?qYmbAM^zk_ z2>AGq3pv>`IeMy6EM0JDQR|L%XP?|Scvyar)Kn8~q2ub?uZYjIymPt8eQJ)QmF(VQ zDa(TBx!L0)0}EqKOfM|E#nZ=$#be6S*))^F8=HM=W}Ok0b)5Z72PQx7 zx%?-DRV`%NBPJK%&o{e3G|_%@=fXC#g$yANXC>uS`R-c5=Bqqqe1pP;5}(JH)t@uF z7_DXJ6Q_O7m0`qtn%>Kv*=_LEK%X2nE>fC#Ep6cV^Xpw3R+cyL&lmGK?xQnxY3^v5 zz$53%I$eD`Hf^}{{2_y^@PVNC>Kak;q6pjM711(Gi!A-7E~+9n3eOqcSe43sW2Ldg zC0mEVjE*z)ckP>Jc)*%dQhO{ztM-|xr!L3nuAh5S zb)4bB&;XL-+y&P(W)^2FpO0Sc5HmI3#Z(NQ_}H>RJc{(vQm(HbIWdYm@OarR@QhR7 z+JBUEewezXnu*CtvC7UvF{*dhuvP{c@fB9GDcgkOuuy*$A*?yx33W5Cd0;> zX+QGvIapj|!To-9+eq%yr)PWdzu*hXTNW?Rc(K7KbWX}ezcJH!Mfugo!#HbqIA-*! z2fMw^G!|4P8%}N=8(y`>g=52A&471%iQrC66`c~DD6K0yJ$)YJ@3&sbu#~o48wW`-#Nwn!9De53!0ZN%Hc9(-g-8Kw>0u`f!3Pb?Him@0!-g{ty(aC-QFZF zPEJwIJabRQ>fH0C7B!b9t(oP&$>4bf%LN(H?8faYwJTNSUeMZWnao`+Tf#GQlGxUw z*z?M95B5uMX;l<%W?sa5m3=zh>Nb&6{!4w#)8uKq>@>r+u6eum3~ks0&03)s1(z!> zJ`xgj+q!omNlBZf@%f5WgCUZV+t=(}mpCczq3PWkrS>_@@2y8KoHv?f)A)4^iw`vw zIDc5Iz#$P<9z1mwax68+ZCHCw;CMCsN7<3 z``p3C;A_<->-C>4ddi#_9CTiP%<+RSgc2G~9%MIFPgN#ui>+`RWl3MH_Dq9!O!~1m zV>MU;2CZ=yiI`hBqQTN;{(OgOx`TsVxyHwz7#Ch@V3Mlyz)V^}Q>Ofu;1yL>(%QS} zB+{+acdC3ID@%ozU3`51ku%!0Ju_4Jh=20_tx^YE?_cvuTTbIr^Im(~ZMGJz2Y04d zzV&B+H-+YEEyqk1OTS(EZ2YOMPdDGlM_N4XoN3lEV~TuI-H7e}v7x>r z}u z5=*ovobWh#ZDm{M^9d~+Eqr5#M%+uAzQ>NJU0kg?Sv{v}{>DRcv_np?)hg8awdndf z>!^$`Q!*)xX1rG%=u&zwk|C^wzR0CO;AjF*@pE(4aQ+qX-Uh}jA+ieWrp8xEQ3-QH z^D-|C^5I+M&B~s%DuiRZO9fBm6zL62*9U(XzlvEs_P*ITS|7PeSCK5G;Q^7xTZ%N! zubm_;5U2ls&9bWKYwz#Un$KM^-pT0jg&<=db=mA^FAq##6B1zhB8z8iqUnV3LtUiV zWQ?9oQZ+Dso>xZ-i;@&HjbsgR2sSz?mM#(Uly69oukyT5sq*_w<({#tpFV6Ep>erf zlknbowYJvx@rli6U%Yo+ovvxMbmQ^HR(7%W)bQFIF)2Qo)AnceO9Hl?;yMs)7Ac=| z%+KWD&`U$|uWy$~ekiQE-mXC}!lck=G=E67@&~RGu^5iIQNatAoMCjap;6KktZh?c zOg=f{YM|`YtX3h?M&7}@pF9d4O{*~?emA;O9Wtu&$({J@iN!l6%WquGw5r~j-@t~y zpqbuG`*_K&M{@^jzM1AWlGr1v$6v* z=w=72xTx!gH&Jx*E8o(xTwkwq&A{F_pZVPE2B7SavoV9k-BAw`uUc{G{68S00Qb za%ir+7b~oMa=6n(zjVlvIYmcLU*fYjR2((__+!x`uNx-87S22Zam8F$?5}o)Ex9w! zXO>FMN}GFAwT70Yn2L4HI?{emOz7rwVMx&$4eYf=5v6)lLAMG=LXtIzP zm)yxv{_4iHOEN9Ba2<&=PwP&e8?M(e_019`!?=XHrl_zhQqk7ILtb|Vx-){QE=eaV zK5Tbu(W-}W+K=eq6FADc8@VJ*+M zT9BOUpuUAaklBG_t=i-Fok4o_xr(jDrB~S(Z*yy#5q5>|WT)cfj#0EL7Yf(TomU}r zh*2SIUyagQqvp6iS+)UThyvv^eA`$KEgX{N-j7Q20?{ZXrQ z<%;rHd!EL~C^-_z?p|b6g+D=RUv_HZl-L)^t$M6tzjCKqWQjj;>b6t8c z+{~9}s*F3wXwIX)y>da#(0Z2b#wIs}xU-r@gfwtk9S*+g`ZjnDo1ggbVaj`!2R3$0 z3A&ZpWM8M;ro3UH=KgaAA39d)HQk#gd@a^5v2cw2Qi<1(CXU|t`T?`a5Nn&kO!J+l zPuTNB@y_Ad+{&lbY2NSJ>-R?DcvFEzORcG|(wWr!87|uz9_{r{+Hi?^|{`$NyS8$@GlzG#T1q zo7ntj7W;I^G3$UuTEo^vix?2Si zL6nvfk&qIUl2U1DkQC`q8tHBXQBY7)5a}+ZQ&Ku4lm_Wo-&~x-y&kV8@BO~#|JU=( zXKnUgYmIl!7-P&aCi9K-QCa-jdYFly(Y&G>BJZ{#cQ`eJ>G*Cg=>cEga*W`i9L~b@ zi9?)yNxmx!4Fok9GRT&I*wd-;PSkgFDsXZIvrF$y*svD+nqz18HaJd9p0GJodW-hP zO};3)rCsu^&9fnsOZfpwIQpMZpoc>h`+NOvt(E0U&v*7-D?(Be7Usn{#4_7HVhof$ zC}_K-XCB>_HAy+!n3MGF1+Ml=ZO*>rXkD(hXm(GYUV9aeIukTK8Gki$B_8)9Z_Cr( z&KlZq_L$n6jexL2+`_2{jUt|k5z}GewAUo z_%6E1+)R=ZTMqpixz(~5=60)H(fZ>CiPdM>>2YJ3;ggv*r#3aP$-Tox->2s$E$O{f z{zUP_iWTRDiS6M{+P>)O5fP4lIUCYy%(K1?J{l-C69G;TlWQ!$v?3)u8FY4>c+4_JA;Y#A{LHPSAA=9RY=TJFhlNuU&Bq=xoo zhc`Q!td-xyxxF47b7d57&V4~b`G{22Zg8`Z)z;{Y4=(X7eZ29P)^sZ!<)8b`6lp5i zq?ROFrxBnwJzJn&3h9Ne6sL!q_){cRi>cK?rFK|DiSD&nWcAe@*Hka^KxvoL(|XhN zJqC9R;x$``b=#L&dq!Tj>$erS)Nd%tnfSlErx`G|SI{z4JD6EbUiU&jb-Odw;&c68 z2$yszb4!j!Pu=R|qr=X^T6r~G@-_)PS+x6eHuKH3q{P6ZJVVKL%UA|!Pt;yBXXq7P zQi|0kiy*y4qF;4VQ+L^oTk%|w`failguoo`_7ya?>n0q^!wxS>*X5@LZ0yS8oZfQT zKh>vyPWO$wohwK5ox)yLT$wxr*$16;>s9v#Gc9{$POra>w(?Mn}^Pz?!b%(Oy{%s7eFRNcq+`=OLWQ(Q*iv!^-Yuy>Q{T{ z-3f&~1TM!^Kbg%i?LHxKmw=8Q5r1Fg5a=D7+=!>ngZ8Ize1i%-x<~nQykMb z6waI#NV79eqb{dRJJS;)bGHv-?@t%y@W)2=pUtSsu>STL3$k5o8+P1s^$F&2nQ2suoYl)31&&~ZdZfKUA-`T8c?Mv@zOunYNlTIstkH;b}c=3rvqaI zX~;5?uB+2mWJW4-MUteMWw7}$b)Rhy`4NXS>5`dW{kijj%(`k`B0L$y95&ENDyQd* z8E-!+yY79&vnbaSq%0dLlVIOMWG`p%^u#7SkXH~8yg^7v4lm^$yVC# zy46C5A2k=6qy&Z-GEH~d)Q9sP5tC2%7+25OZAAAI-E2&u@(Fm|^)i`&`II}oyPAnd z!Fgiu2-&W&!n8i!n@Bo(cd)iB7M-21d%CK^7S-tf%HZom4{9&xgF>gB*!jwix@7w2 zi!21fIalrbFVTZjQUv!fS|uYo5;O zn3^?{)CC;r$SeXQd8cbq{%apu3EXxvf)jFcUA(G3`wlzKqB?(VaagOCsv0g&J{94j zG~zTU+?9HZjFy-0YqDK=2d${XV7<8pEtSrx(~rvMv<=M@T#8?0qs=?9(_&Q=+GdEq zK7+H6xL&kwN{NueAcX0rW|lL|ah zWIinYclTpe?vH!E`BIqfOy)&QC}jU6)OqRZf>2oUoW0mP>hi;Z%^ZUr)?3)i(LT(d z5B&W3+Yl`z0y*jSlh}&(FY?;lKcOjLospjCo_R;1d`A3*!dD^@O$7~Z4I!P?!py$a zg}k!C*F#od3McHCP__3y*m*XWb4^ZVVNt$No;z_`gwykde-axP!b9;{2`ZNksu9g? zUkrs6^MD$A+qkPx53bVX<(!y=&=X#I=@SuWCl=Y~W~b%nKiCY`z0z0Yv)sPW@4O)X zz}4W1=d-x3lGI1{#s*KgzK%oUF0+WxoA7j>t-~mcb(5=G;CVTBm+Ubzzl|1gf-x7P zQ`h}rQX2Cq11|^7t`@VzuKp`rZa21})x5EZ7|f8!Nb8|&=@{)-Ne!p5HhNK&8c&_a zIjl8w2O07#Lt5mO#!YL&ZzfMzKkvL8$4oD5dz*G0rM9mZL-nqox0}lChg<7Tj*DEF zDif2!eXXh5@=8_fW7ImA_nHhZQ zOAhY}kFyjBHd{pod5_IMW!wK4Z$FZW{o+==jV{$`L@~C>YpXZt@6Pr<*mMyyyq{KU zJX$Z8FjTndhA!T9|AiQ$n+O-82$^W>SeUe{5~vobH^C*&h*~*p4t7{gw>U_6tb6JC zMx+ZTwv7E!dj8_0uUNv<%{3*?iYmOFBEB&}Q%+uYz>zlbsfpy@gk1 z10|;w@bEwJQ~DKSnz#_6Yr976(w5emR3RUj9a<& z`MZ53s^+u@-nXll5(S!#s`dq4`N@gpl-IvJQ}4DYljrjt)8NP;lfI>CXuf_Lf!aDA z^2IY-&%-t+0FiZzyrU>vtuf>A$KZ)qsYCl+IrqmCWSa`VJot=xPS|N10quXfyK~5y zNYkYmJ_|EuR&s)-zN9h$qUX@_oS zFz$QKqtC@N4RvEzr|INZ1h}_iCUYDr;$kwt^l91k7IxJYX6G#`Ge5aSo-B~RMbz&+ zNng459_`l4%=_zGa&Nv^Job6E7$CwVfimNoi2nA?>!k#mR%@cR3kZ&{S@8_|WK=DJ zH?TyIk25AdK5*=ab}8SkeO?&16MXCJqkSxBe!VDnuj?F2nOXD97PHyzRW8WcufL>s z0xOE%(|r}+!Dw{*^l6c&zKG0Q*qFO!71EuG=Q;xKtcNHFJ#3#XQZj$)zbY=_sK2W$4{SYHJhE-j#a_Q zAnLibS=l5R8b#^dnvA?oOs=29oEm?Nyy=ZDih@Gj!|aKz=iP0YY>TfL3M`qv+@pwN zKCiDP2-NRBZp<-n<-=c?-girYej?Xwv!BW%s#<(&R6Dw9cYMHCbhy zReXswdnf5fo3S8SJQ>^l)ljvsdAJxO!Ath2yZ2Dqwd$Fl5frl0 z@2wDho5Srw(wBY>|IROKf{zhs7qMHsw^Rs4ABSXf8|frWI+Z4uKZtEetT5IrFHWUO zp>CWBaGvy8wi;n2tlv3^=5>3QdS*W7`Oej}Q{kRfB7`D&Z=WWew4Hc2UdR}eB^0VY zY{@D|s72~Wy(~VoVs@2ue=F8JsVY8&__chc)=43jnnxk=X?^B$1$Jg`CY{x^ah&^e{p8Y*A>Fh5XIWA>C}^oH=bgz!+EuaFz&79IkeL3Oyo4GN$c_kQS@VLYVXY3cH2nYluQxo*~D)%Zu(FPM9n4|u7|K-7CV~l^(+%6 z`z7u>Q@b6cgCLC#Z|_?!HRZj2)!FCKp3Gk1?M&_gB&~Tam15^_ix`~6uYN~%(~u8G z8J`xlZYnbp(L<9V;PmW6SitHeM#(xRMs~l3(^=+B8}MqZw@`p?KG-Kvb<#O5J-a*Bd+2XSV}SZLKEQ zlnzR7FFSpsq28@EceYr@dJ*ZNsJ+kr>5fuunf`haPO1C1w$yX2sHpq`>vLS(?pWda znK1~&J{DD+>OFP$HL&*YFmtzfe>l5PZJ3mzE*UdqJuYXsX31CXc7n|6;$q4++qs!Q zBx7#mTPA#jj}cD&eU!JKo77$2tKbKDObmZjrA}IHt~9z3EnN04b~dqJ_MNP>BW3a# zexcR^?aF64V>V&uq&|3pMQ&TEeFk;y(LOI%&j=Qgy5H`M!cI!VOTH9}K|}xE%js6F z58;^H3aYK6XX)UZEHXvns8qV>BB2~#6|EjIm5-*loVS(af`is`v`f8nh6@rS)!8PV zWid~T5Ffs(*(Vl3cviQ{%w=L?=sLc(7uIJLA&OuZL@6!BrnybtE=q;VqKtNLLU>4N z)KV&7tTZcj$-a4+x?}YP`*5vFWl^kt_+90_y-em^N2P-OLERoRtap|rIhG!Z6MRH3 zx};=G&Y~!Af8M`#-^`8_k<0FG--DuvyjPZ7zA73j{HUh%3hAK$WIaMPyfPxeyTG83 zliIw*-oKXje2}g@mgKhDB2U8`e9=6e=OXxw93j(qZPe)7J@>*S86VI-pt<-Hdz$dW^0uZN~=BNS#WRjqqOJrec5vT~|Z8;x`jt;v7v? zn_`bi`$-@47@QtaudnA6#g-g5zS*=5_S)cOM{3&PdYaY{j`yez8DKIu)8BHP*N82u zv~=GX0eUpC?NrIm9^pzH<%3MZ@DxLo=z{yWrO^1i@{{&u+)CzWq`F4g8w_Yd`$bhZQuS8Lc8 zW)7|NJmfc`7Y_rvbHG}J5}md?>+ISA@!g1Voi}r%_faet!@M>W9!__Dl_2_{UL9}( z&!5!glAdFivaf?yS3@?ilf;KKLB;FOeYc->jMjJfBwGhqD7_4Q%EYkC3o;KF?^)Jn zKO&M8Ekr~jq1hWQ0_HXu=3c@< zv`fXa=ME=u9W0ldZYOjvw@H3W&z|ch*la%STb;U+(XlKRl#faUvCsnw! z)^uX|+DgCsDH?II7pe7O`It+WHUwFP>2T}7sgWR_ib~*SqGc z8b*9^fe}6k`XqTqqDL&7gmnWcM;vhIZ7%3pHg1PIPM@vW<-i z%QY=}d=uGc@8vnMl$SYV=K%ig3fU3&jOaBZ=?+m91t!fdFD>7aGphGTCZl>Xj$+ zmF8C_jzjCE55MearVPFED!LUy7_wGlW-5Qw=72#fHNFC}If){CV zzeApQR}z+Hg(-qq!)h&r(!Zc0-m)e(4*RcVShKDcAe9^^xB>*#>_hEr*3K@``jj#?d;8RhH_9@~Kpgo0}Qb zc||<$mV*`pg&cyXt}ToaF+r8qr$eKzLhV5)X`)Pij8XB@NCKK&^bGE2y9L-usu#o8 zEour6;~Bp`*p6BZYD{`OCE4t)_|C3@6}L@J{^9&9rcvvM+IO*`6~_=lw`sXb8|YlE zfsZTugZ?*7c*RYs(?tk>!xVQ#>^4ypjh!2(22x{0`p>TfKj`N}tNfbmA7w?Y*wSH2 z*LD_}`g%7f$nd;$u+o>Aqh+Q7nze7 zjd*<=G@?GYb$mHLRnWo8l@TOE=D6D~tC6pNN1%HM`>jBaoI9^o1Yv<;4WCx&qtOqh zFCLhV@qg9sr*-G=IOXG$1KIkGIMI`bHg8p{^O1n282+Rtf)g|?>iOEx%@yZ?Yxar5 zg0Vw(0o+l0HxYv+hP%9!nqr2C6L*pj=SkmI@@$r0cH`(FFC6qK(s=Tjhkf}~j_leV z%UjmKyrKu=3vVcuA2FJH`iFd}?1J0gd%o)ulF>5~S8l$!k2~)T7C0yMw z*Uw|&ZwWbjVNyFsbnT;Er{m}f;72D#(UhW0f8?R43;vN|g)#&}J)P7g&oPl8{U33)xorY~2Zb1q!vzEJx_j))b!5o? zT*+2RluH=(^{BP=1&Y+uY;SFH-BPd2(7ShN;4$?#+#FWRd{G^Ltt3$-S~pbXcE3Y87(C6lvq61yt+wEDb` z_x<*kh8j4>0`5Gg%E<^^#o{A<-O?_k!o_^kPP@vwY`8;2A7$n$$OWwkg z^KeBE-#t3hVI1e%y#x~i5mKgP{hIw?QPVn!?Q@0P^*Z*W>>ct59t{Fbt#I4P81*;a z{bxLh1clVgQXKiJpmz@(=Yi&_X}|ouoA|I7ExEZ8~BCQI}t9|lh2%-CC07j$|V-%kLr?+vU%5*=i=*?{smPc#9bDiOjZq#)KIO(;~ zqqli6^CwKVE}*$t`Zt&*j>^hEwO#s>#F-{qsWAC^WGl}>L%$~RzIjYq{DBJXJ|F^WL8_Kq3d&_qz2r#3J>nw+i<%V_t;56^O@7htmS97p*l%EJ`Gyq;cXSghFb^pPiV(n?`djhj3q^jiZr^|rY35X zwO6ZdJDEFv*kKyoD}4jfnP5DhIFEPUb$2CFV7rl6{N?qmU6pbu@>RPE25p!X>!a>m zdlS$ZF6(3s^eil+I?xD&^d+_51h|tx(gD@6*;*DY>tbp-7LQO{4tF6wNYyX3xC%!^wsy&?gB6Sb(_%2axCTogNdvAs|d0qQ4g@Nos7+mk0diKRcyR!`yM$+g=sDXdCs`%g%+ZkafDaszcQ#&&})W;lSQ< z?05^lO9=%PBg(^s?9Z&3+PHrG8``DqGnzR9!I^9nb6C*nYeYWI>t$PcTaIVBzU;6Y z9ja{xWI`qq0|T?3Sl$s6jSARRC7-GgyAR)DJWV(LxUIRpePjI7L$AbgR{dDO0P&nv9K-B&(qS-(C)^Cc5hxb=Nb$W)F(`o zpWlA+!le@nCD|`z1i!nG3+J+A(lqDxwInK#$q_*jD?$x$$HBkgab2>yJo4r3oITzx zflaOT@(0&i5QtM-@V)>I6(=4D-dWyDTR*V0Nq1@=F?#0Iez;iC|H+B96K8%@coD_W zzJcZB=OWu_YER__bVU}3>82OU;Ry5LTvqgyp}v%fY{dJuJZ*Em`H*W7#NDno_-;#t zow{DVzRFVz1TiF=n++GZ*7sG2DkulIx*ZL<%H}PuQd!3#&hvz?Vyfq!vTP=)qnmv* zbFi%bAtD4_nmqm;O;qzaLgB)2R=PWF_EBH5TI}Yy`*s*QN516dcc0H~4skgVuo`q} zMNNn6>yp@17-mOYxFA>6dMuUUL-URn+u8mu?OiU#y9~C)%q}n1-mmX{87ZKiVjf4a zJZG$UGkHne^y`zodl8h4PX=vfu<@VxXvrIC(@XYoKGknaN|LI&6exf?wV0w0U5uiA zKG-Aw$@ZF|)SErw=AHf|dKM!urItKD;>}H;Z)Aq~lY~h@UyE+#`NqX?m{F9EQ-~SM z(@LJD4G9q?Hias*N`nM$SIjDjn?L$@7#>Lj@*Bqc(KYfu=Z&A7|05<=@+47t`IiGKGcv~ivE0`X;`YoGM*Cm6dC z&`OdTV8om5OyR`zkT~}k9^5NEH>A0U{$yd^3aZaD=TC1Uh;K4psHA=Su5K!yG$u^- zUR@u`-s8amxAKePq}rKi->ejcJ-Y?7_8wE7J|TTX zGCAbRqp{TmDwS9DMTFqn%d?2V0kh7kCM+#a|?M^X{zyeZ&0XAtGDPsD>u+uO`Ovti7kRoM5n zzhFQ4^nMe%PJ))NqD{Nh6~a&Ild^FsuXH1n9fq5Quc;-YPw4E~gh_L&?M&fQyml^U zDy&X!iSO(iER*D}OkB+%b(L9E8sQxrN56&^GmY=d+S1ugoomEV-)=l7kG9L$nB2>@ zu<)c}Yd$-NIdR{V+P}hwqmnqY#Yl5TRCiyUMiRXvxO}4Cc6pv<+d%MfZrzz+^z!=! zJmYb>ven{x1URwIRO?+d<3 z)lXfdx8u~_5~6QTs0LnoUn-nXplLIH=!*DkA*Sabthuw!q}Yz$)>=8dV~`M|@%3e` zO!`at?tWsAj2oqw!lPN>(uYHjD|ISk#Xe; z{F-xahjBpV;rMVIK8-l1L!NdN8cRo4cp2q+)+hxzkqJqjv9HIQQ#wqZsTJx4x7ajx*r9?tV? zl{)o`^%jkErye@1Z&>T64H=V5@1DQCFXcnEC)UhW)lQrt?D?5^e}tHDzboMrPtm$I zl{8yXq{d86)2_=@iQ(<9mIR(ytV*5I!wL*a&BId^s-s`HRQ)LM4D&yR4w_cAjX$Vw zB6`r2FvwekvQpLV)ltEEEs~+ps826NAa%Nk#os&W%0)kO=BMVKMtCpm7FgOG3#ogJ z4jdoTUOdeZ5cW66O<27r-^DAsZQoI zst2xdEjF_kn0)rNzZ=5;t?0~0tMd_fE8T8f>^!ymZ#*_WM6{GQehj(0(%M;0l}go> z;U-c?&gxCXkf*jB{t*YOH^9x2$NH-kGXwS3=}Ha!ccgDx?>bl>qK(INUrX`oeySGX zhIKyh{F?!dm%V2_l=bpSs2Y`?d^G&*tXe`Q$A9`^!)ab;HMOm8Baf#Otxm62KU}w; z+X?oxnm6fWeZ2h$T@6xc9B$Q8j~Y-9rIE=9#lLgT*kz4EwE|C0fP`-f?Q?Oj`}>8Z zJqCYIi69Qszb3wSr0Y?ofMRN@o|bMU#2dZ#|iC9oq1x+ZYvnMuS9n=!sA zDdJ0Ot*+)@MmI%53L=vUZ=c3z|u45+B9V8`gO*o*Yp*J`BE9)z5R$z0KMq5)>B~yPtbheRvy} zl{>su^N`0}S5J4uo;e|v*jI2zbL}u!b?ae*{l&)IAu1(FGVU{~4=$R7Ch>I+-cLHA z**MXnqju`z7x&h*6YCiYS!DS}<7NY&b@^i&oR_1}IjtrngW?MztoP2C%B0uwttdF0aY(3x-fk9y3{QJ4E_SCYJ& z5W_W`sSWt_m5l!k=PRtr3%EST59vz-o$Zqd2nU>8?pk&$QfLf!Zj#uf59SDgxo~xUUEIG;1q8HU@>ajqnJ}CqnWlFKv}^ zB3G#^a7NdbS>?2=Es5JlMD@BG9^(cxNV0k*6A+#_qtDW=cjNO0&a%_n3!xY1y~Ikj zLRTG=UL}f`^r>M4vYTqJ-uV`zt=mxO!@6&r6*$M$@%V{=zhL5vaZ?h9Vaqcw@-aE2 z_-uMn$(PGAdVM-g>`K<&lH zz82h98>PuxBp596x1{x!1OvspRFQ~cOH|&rsc%&ZSlKkW4YiIF?{6bjiI8by?Qdy% z-dFePksFWP@oi$h$Awev*R0iFYIN{5YS{T?(`-hh-K9A7L|dPJgKze!AvJ4{Mk<%3 z18O=f>1VE5q=sMCLZtCwJTtsi;cmTs@8#z-Vh2lR#MA))ZrM5wV(LIE!>-O-m)NrR zx>B7er$*OlIt0HoUQl}BoYtb?l+xYxAVLblCc}(wYu~$$&)S!{Zy*)y@S?SP7AxGO zm=2jPa5`KrT>#qy=IOvt*N^B!o=ISe%jI>T(VpSrR~riJ=X0LdXkUV_Rpw z#*ZZU_GspO}(`OM_ZN}J{H;2^3uW<@TX%YX>= z+ZkdMmJaeTuIt-N27!WW&%hmIIua`3d{957nlCbTtl>r%&- zxP9`Rv|eDT6ZDv@g*urd-@j7j;#1*a<1+e`hv0hZb_}MgmufP%H|uN-sNZvesCRV4 zB@89HAmGy+Kq5r05lO|7M$c`Aom`VypGM8dPah0F3p?Q#NvkO#Aj9UsD>vqD%8(*g zU1*KcJ}&UI7JE(+J6Xkc>+r7s%SVg_F3O4~9jd1z`Cda4^vjKe0;kXy|cHUU1;)Ph$3 zFGMs{D6QQ@)qJmr%4O2m?u`^d1nb$|n_rsiG9GfM6UEgEwY7LtR%AB9%m%7 z=2`lx`18mG4T-1(MEp%~lRHy1S0BcQk}!`o4Cd&Td_~s~My9FRr~-yAg8Wbfo=wv_ z5&hZRvmVRPiEI1UqUsQlI3mo5J0}rJHxm}R4krme4Ca`<=&4g^vg$80VNmbJ=B21A zMd!VvR$%IM=J)mt(Q~>Z!nRi{ z#Hw`Tmghc+=5NN6+WiTcuNmhhKpX_ro&nCtDDkAC!c(UJ^Ga_^~YU#G- zbyjHZYV9G-lzs5fExVg8Vw?mDL}TTGqZ(G(3l?5%mPCdi;h+e4bRAmCK}CcfCFuv@ z^8s#I2dG=?^`s7Yb}aW7JS6V!b&c8@%jkuPTS>G%cABsWYg()>4&$IWK`!*_O|Bfb z-xX;+i=N6__L9~4r#rQ=Q7SxjvWr*y68%2VA?mh;6eG^eRbjMU8BB;muTFoZ@yRof zhiH(&&Y>glObP$Y%a)0FQc82pI@JUe#M#M^7kVl$Sc_?x?`1Hy--u$#A^Koev!6$B z(*EsclzSjg?Q&s_!&tX5C1vv@8G`fKwuU>sX7CldduJ8w(qgb)nyY6IUwHmd)XCv@Ux5mqVOuHYE7mGG}=5mEA+U z4Xv=N-CU5&*`&o-DJ&a@MI7yXiVnJVc`Gs95$n9EO zg>V86YC8WI)>0{jHvxCv7Gjkm?c_;5z2PSlc)quNx6gNM3`djC(d6pzM!Wdk!3c00 z2eYaZ(n;^r!4(TuN3LW|epo;zv5yn(X9I z*JfdnKVmMmhgoi?5FRqHxAD(_ba1fK!^dw<2TdMuL+} znD+QXx`aTf`zg1G^hjG|bBY$eh<)--tw0|iZm2dahtDS@BF%+9j$-8%O@%{}j4(|hp+ zqOH$y`yUgBzOQ)PI4W_UP`h|zu{#J;C&kOCGSre!9HZnx&xM#ON8}}pOV7s@iBMlA z(H5(Arr`=h^w&eg?{U{>z0VcB9+NzXZ@_7Qd>r80gLci7^W2U51s?-%^m@|Moa{op zO3~X@=nw3!NE;HPWfv>I!+({8$Wl%TX(vr0`YJ7}iux?{HHb~Kxwflb5OE?a8*v!$ zp3Neko0Rr;eIudYhP5j({yWzMtK~83Ck@&9kD5fNVZ6es*uss=lzb4+v-j_eq8>QRUhf2hx*IJa@rOlOZ^gewiP1$=+bl^Iw`R|7SCo}$BssG!NxcdYUBl&RzSG@- z;W@2okfb^LY8~P z-9jkU(l2iFdJbqvOoo`yVy4nYH9Bscw?5HlKC$aiEKV66Av%Or{pu-NCJW~h<@M>v zTjliWhXmmx23-BR#hA9jJmuWaR$@M021ZZgFoKBTrhlYxs_G6xZe6x(I}nZhlOMYZ z?JnA+N--P0a`;D$%Za|u{0TWkG4HN7VKUuFY%t*p+B+d%7{0M|PX7?COQPmgwD2n? z6VKPyJ{slN_ZO1aEYjZ>k<@2OwARPnI-Q{=hjxjCMnGK1iJ^WU>*;&H$MfB@drWOo zW&}t!7woJJBFIIt)(m?}$(Wl;ON|l@i(U zheGYo#Q3%;nY*5foaTxmu3mq1tHL({A{r@?m?J#1=Oj7RnVOICh7OT9geLA>+q`@$ zOGEZa!YGHZk3|6ajZnT$qBidqyR%lz}jbR=|lHUYGY|q%%M63%a+s;`Z5*4B0TD^%D*8B$W~|Rgj&l z-PB^-}Vi+bE}rr|FUGuL?{aAd3z1!Um?_H~BIuX4en)&XsSflZBJ( z`eju`20^IztxrAwHbq+PZhcTTySl=}gnQElr&{~ISCGZqP1V}Z-DHn(b4zVU&wiuu zC&J(~WZzk^F&L)0AP^i*BsoxkToQECB6t?@Q8NA}qH@J7&2iiaPuH3LmNT7qGp0gY zTY8zOX{5alwYYs)%V9{+mb?Lru(&7fm7LFH*|H6rOpCJXa5qb0AoSgExI~^1SO5jz zcHB*H+(loJ2@3DGEDs2$`kYtRxD!hHR3hxHtxi=tiiX`xLc(on>AdbUD3(ouVI5dE zTP#xgUD2Lu$dKnG+{&~-3$k)FMCkH-EqrU%lJj|uH)*YNaT-j2F+`?P!>mOILx)G(n(;&|`#Ri+JM+Zxgj zTm)mP0_^pYUb9LZmn7?lLZu1IwqlzMO-BkymQG`Tub`+X!hE7OTkK(BX_YMf;S45x*>NxTU5sr=5wF{MFf<;%I5$s zg*hFB!M@GWfOo+d>~no>!0MmvvkX7$pB_NI3Cs_2#0#K!e{xT!Ay{CniRfzwTs6PSKiY%5&m3V5IBg7vY!F`X z{?%Zg_&C6)>iO9XX$bbVzTBt{n)`or0A2u%pU8(`P8}fsX#a9}pL&=h<}+aQgZX9v zZ^!N#7GnP`4AB2%{(=0Xz19~2Cjj7~>0Am$iu_$1p#R|jewJrHwEuDa|JnQh zOa5}$FFY843nOkV8hNz0{hwh0oEwy23^sk&|9@=%-<1!y0la@b%qalsA3B!59)pB7 zo*+L=x+72hk$kWhJOL;}K>iVb#9w*;VZe_7bD4mCc~n1OoI+r{LNFgm8{n0Ixr_kM z(h(=nw>GA#hgFW`4Hn8VE%uCb@WP`o%j|$-U zfd*}n5YUfD-*-2N!PUY+cScLQ(*n0=3+Mh-zzEr(e9QGPSv z{rFT}3=IQ5gAu@aH2x8kt`=zQyD|#CKQ8b!Bj8&2`kuNfs0_UG_wV1RLj%26CV_zb z<;t7?<|_c)3y$DB=tuc*`}c?0L5F~+a0p&HPakJ}%X-)hMV)hOV=@&{n~fHQ*{d_KbT-{(kI#@cTFFGeRv7c#q}ZE|)|Y z{!D&97*jCs#_{{Z@_~JUmfmN7FCN<8+k+}%e4vkj9|Pvd_0 znqV%wwf@%MVA%Y&4i!4-LcnhSOaJ}s{aY<~e)Il-tL4s*_1_D0=^x3T0P@G2D4@;h z(cfTzxo%3GbdES;VEy|u`CZP}zilfTo2`*h zqa_k*Fh@ckOp(xg8$M_eaKe3mEH8Y8a`mr5Z9kFUpmhf7@sjzz{{uP;1k88T_x<=E z2QrV|Ka37K*!uSUaigG zw|t=gU_Au;6jQ*zfVpvCpAY8L103xT;AMyU0Y6vIeZUuK@+(KqulBDQjH4E90;tzR z3~=ShK+Q%h$M(?0SyGmKpobX zkGQZve=j(e_v8745&{R<{$|+zPlvKXD~UYNd=UPT{y)}#@c92T`CW$CP@mIfXee0v z7akw$OGo|((7(;V$N59fwLS|35s+UC*X2?aHMIOn3|dU!gXV&$kM!>!$?vnGfIhi% zLnEP5&`6jJ^vPcWYB!@hwm)?r?)=;4|M>3T|2<@f!~wb^3~p~&|IbIWL5s=a&_aq7 zG#4)d%|rq2pI|O%BH$7<5zG&bhX_FvQ4-KZj0`juB?FBFgTD6g63_wIzx01KL^$xj z{*wRuJr1Dj`GNd;*#5%xKjTjg%|>uTv$4X^Z2S#qI!+w=94ijE6|X~M!6MMm<10{~ zE$#REx4uOKarOIW{*%w3{|f^7iNOBN|55$_YX261|CMAvjI}7X?uM zPMiWMJaSEuv@9{x^3l!#U^!Q)N_-~%m zriCB^_!hpazhit*-+jbOz+q_u=E+ZnZIKDUc2)rX$qEp+c?!mJESR$!1Ku+MVE57f z8w`JTFVN{OKg9?9O_*a7p2q`xN46d2#{~F}xJlud!mqKN4ZtUu3%J^p052Z;pUL~X zzXP9@;lIRp#QO_#oPzkz7ZCfgoNz&4|6LqEyB_pEDbT)S|1*4GZUy^zE8)l?!1wxx z9DF~+bNpR{IsyfZ-{7B&-+%YNzuvz8uD@ULtwsQ@%V;p)iAMT2s{cKm1$;T224zI$ zclz&V8h{c@PM5{}Qp*x-2C@8LU|9|G=L(0`6%Zg9+M5{&iLC}hI# z;ex*he3v=^AM{u8!FmPeyMzlIxBI8~>XlKU_qTtklMl*>yFbGS<~AolEN|^+_~3X} z9k9c-;GOHh+@v1ZxlSuE#|3TK4fI|YnBR7S`EC0HB-93CDlNbVZw77J2->s(%xOM= z_Jr?)?|%=T1IGzq?%(73gSp=ub6O-2Y5f6wFh}c`#QV_U z?k{}v{|(N@f}ErH-S_Pa<7)$R_&Vj2N1V6-)BW%8mHiPu*ml5n^oW!9%|DB2e*Zq} zE6Y%cGTv|cAB?Zb@FL($zWfV5DMSg3uT&O+tdv6R{t-Ty^Y$p-2RL_OuIBliKU(@}T`pCn{s%tzi;o|wpeitC|Bn8H$1hxeAJi#8 zKfig54+1elwklbK_#fe$1ojEeIsJ$a_MH}MvVMy3eQpL+58msq>gRvqQ#}E7KbC=N zZj->A+b}-S3TY5W{hj)Q^*rz~eit7+r(ON{{-+o}WF;TzKX`8Yqka3)ejMY2+ZV=H zr$+M&J_&?A(0jVShYyZ70$=S9@xi|6k1J$!KN>#yJ&bHar-CO`d0J;L$nl1Oi;1@y=7{e$1Dzt#ubNBFAcu#el9ul6>A z_V@6CJm+7+2ixB-`H~OZt8b!?)SF%+v>`X z@Q(goTV8_F46Z}XK>z)${yOZyW_ch6-e|~nte-P~L5Dy9zvcFi_+Y(vj1Sf?n?t|N zJNy*HpL{t7@>Xe@yuaw@@BEiW?K4oH_f4n=#K>!J;r@b88UZ+{e>p&Y84cLwneY7r zm=FDXe2Xa${zUp;`*~(!9Li8;fB?_;FZM$f1?qMa`z3~M`7i%qx?Bp7Xn%KrIJWt} z@F}4~VE*wNe6W7rp6dT=ApYd4p{{nQ5QxD$CY{sJSAgj^`US*0r@^lQr^(gOb{Y%{a zuh`#C5Pu%6l4e|x(KefOA z1Yf7|DX8D;8Z;OT;^+Whr|lK!*uH^0$zO`H0{_Pro?pUi85X1Ipw(0m%a3I~^8aA} z>Yvo#M`Jvw--R0*4v~h2LIAeFn^1=(`_cUE2;Uuq?QuK)l{3)KCUF0S*KsU{pM;iE zM4;u@63~1s7c}d4>MytNfITfV=*16>hD$>u;UEVP3fk1?I@D%F^}YXR@>ekZcn!!U z-T=PyEQmWDweNfc9kloo)Mc71H2+cpntLJ$&4hD9Q-K`Nq(28V?#ls<`G69@3vv@8 z&_uM}~H^e?D!k~cs3xXOHkc&YOes>-RpW&cXH7KxAI6k|B&v2sR$20iq?*#+l z8^GZX%Fmv6{Czd}{d@W2;BOe$G2UbR$L|AjNeDMk;CDPK)dIcp- z!3ISKl)sy20=FQ5{-FV}6fH2H6$NVpxxhLT4EX#1zZ{={RRB891C%3ud=xL%LbQQ# z>c^7lZew~jg>TY-*m1?#_B!J214w}y-d_Q@9HB*aD^{crM2-(&o<&tQG_i$A~* z4S?7`z<-nrfMf0eKLqFX;Pq?pnr%3z0P!V}70wP;j9G!8*K~&sO6qLuJ3?K=JAR=K^L|i}}KqWp|1c_T@PeN8m z0ttaY639YG!X6Sh@Bgd2Zf-iayKg5Q;G601E2{g_eRKY*x>cvn`Om4&R_*BTHO&9x ztmc2W`6r5)2IBW7AZgK!rcRW%dNiwoBmXCpKB}s9@wYp?=}3Em{aMm zPKWQqoBVvfFi)ucKYh6Li7*xderk@VFfE_A8n%#!X)CIY{A^>+_bhDpy2?*m2Kkxv zk)*@Foc6ztK0ajsBYee0{>o1-J7wk?#kDGs@^2k@EjX}OXd75Q{1VrC!T>wsr;uOy zYOUIz{;lX`_hj5DOh)kU{j?0D%R$k zx4p(0?MvGsMLW04kyKZ~`(jr)ykooQQk1e?SPBwjBpPjOB|m-4DdC}J`4^ky&+sKb zpQ}UAxv1}I`N@$kjGQj#&Q@BsJL8oihukkav8KAOUyPffZ<6aTeL5VM?(3I%{9s*j z`B0ncSe`V>4}Vny`lNlyPoJ;$=bPoHueJE6C6@B@Vop|ueEnn-*@-p6-}SeK{FD32 z))(*6@=H`t$0hLd-|kC(?%mZs1A4A|`zxC&bh6^;Z#`nzg}98BxCgmm{^$=@^2ZLl z-;n?3UXB(hZG6ekm__a{tlHmf6E02o#UqB)m`$<{>l0(-Jn3(C#!uXcj%NAW*pZ+6 zRiE->Z|md?#CgQ9Wlf|+VGUudh2{>J^-pi|Z+iS%HU8b@$6V^Q{kf)7FSjE<^`Cv? zFO%bYcY4II;k%{sD=?U!U#&lTlYi^8H#_Bjy@R>^?}bitowxDB7+8PgSNdCc8*mQx zTVf!;=!cJH%J0yJ^!#H-{0$ z&%=KBiuYmO*$XaD7JMa{(3>+L_ipI@>9GBzjY6#Qw8y0Us5NilO!;Y97WTSq!1(kv z|8E&|gW@nK4$`AnJLL~`L^-8bJc|jQshCt%DjPjt?9Sa7bcaYHgOEE)L@b9W>5L|1`HhFQ+q4^O4`)EvTbmPdH?G*b^V-e_BZRF zhW-N#fv`U$3=P4&+grt;G6r`0@Vhm~MKC@-bssnGpV0?b0z;~{Kg7S<3UR4zp+8*W zU4ILJ{3)aEQv8zLGr;9=abUFl2l{_1#)j8eR*ePn2jh3S+WvOny%utGc{eGZ*UVaf z#u%bav$pM@^m1d_^>!D`e71t^^C0b?$=EBEeAryd zzUd_;OFBtW#DA;(ql!`0oTysJzvGoZ$S&|R_sr^p0-lQE_w+eeR{nei2^7lIS8G{k~S8U!t=D&A?6fQu_`4_#V=%2vxm6J16u%sq$DEDI* zcW6OBXWaFiQ1Guh%8n5s?)qmj><@$emCw%iA^UYG5tu(u(0*bb|G86cki409N#48; zf&-G|;KCk=)kgWSyBwI`UG~p;Q1(vmAerHJOZwn97yIq4-s(1@s|)mhdoV9Ubhd z9bjJJdbX2z#hQd8i3Wd3eIGm{))WN)kgr6dlB&Bnd01S5N_ibbtZddGI_Wx^pFxDu zbvQqRIOVD4fBW+a=a;?QFPi^v`uqBGHm^fYEw`>u^E&WoeB@;judv2HM!RI==lqNx z1hX~@k^$g7H!)pN!cl6&)56cxD`SMC0oI5nulyjOh!2Kxq)vyno!#uqX>+mBRI{j<61p5Bj z8u(#vV|+4WeUe{rq{4pK_g}dcF!o2%Zg2Fz2|sPVj2i`aEfV(l3$kw4ciY3~L(bj` zulTXAfi7?WZE#rF?a%s0&6ytv<^4PLQ|Em61{44U4=qDwIl3W@u z_?;Xq*e!rv?SmNKgFQtIxRm3uuL!xAMg_*er1OEFdAn#^;~p2~H|(<>hu;=j=Y@SC zo~Xt7#!p)X^GTv);{8)`gD*@QVE*fb@t<;`@H5Vl_HUE~6kO#QfCj_=o=) zHce+dF#JE%4VW(!dVyLK=_exZfzQ9@B{R2_;wB@16ZpO5ha-agVD@UHHEZ}Ao`J3T zoU#9P#S8@uKVq?&%ZOZN=31hj0G+9d&%<2A*i$G@gNqXYo1n^xPOb(yIP{TW4m9vH zKNLzO@;TJ04d5&4iBdsdO(5~R^Ps5{F~^kVlG(*i{geH``H0UY^byHGJ2FQW`Q4{J z2`Wbps;)JA)%O*|t+#-0=NSEEfx=ImTJJUUzypP!&nNQ~&_A{vd-7cPknk*&B4*+y z--xTef!qgI&@ZR`opr^}y!zDj4I8o=?^QhV`oPbae)4OPYfg5LaU_Dr0BfVY7yPL+ z$xEy=esJ2@&-6cX4m*GNky{)54&q0S0mXd=2Ysp?^uT@(zI)CNe&#KUag|uiNpTo+ z+c8JQga4Tf-6s=1dvb{OV1LK=85je*(H^_tzfT8`C=EH&QZY7mV$RzE9%c&WJ^n5U zJi0{8dkL8Lc(3iSt1zETEbbqJXPkeN&%XQfZyx{Ko@ol+$n^$(a6l@-QNF`l8?5gK zJ9&S{M&MVx0AKwdH?*y6ob{Hhp5ZF*qefX9@s|8Nf1y{OAL6mCyI9AU8)A^~PL>x!*khyW@{}u_d@ock1!4a)N=6Rm~n_ZV$u? z{N@jSj=%Wl{!>b`($04i$k)@uz{&BBA14S)@`Q(wgXdD!r_2ci{3?%|88_df&u>#) zH9z`a;m7ls`0CwqD&LxySzisa7iV%T>4UidYrm)Q&-pKYWP9OR4IIHQ(QCGRDI#+eHV`zBGKTHc*D;eWyuqI$nS`OG4O{vz;3O2ftyCI zYgTRWGjBihsZb{`STH~;j#=|U>!Tggw#UeKh^=8<1oc1n=b!z*>2Jt60)FhKCxZ?A z;3cO=JyeAs^InL`iN;tJKgK`xZ(`T@$z8}_^t@D_JmwSbneuWul7CQ+7ao+8C@0)Y z0j{~qanx3&G6a&G>m{OjF$g==-Pr#t%*%`SY~Nnej7b zwBV~Ze4aIN7O^F(7e>fh=nbh@|EVL=PRf`)70UoUfN?eCNNG-A0(A@O7}PZ|_o}>* zCjH;4|A{|w?1Pdx?jd*l81>E(1*Z5c572qfLqu^WQ<*cmmIu4l6FLL(V zvJP{oY6G+bV^M0m|M7%BekAxjllw{Z!wuE^M_xYqf0lv2kK-qQ@N=KV{ifzkx%WTu zGao?Vnh$W)QO&%c=0+($eM-IzdrhLyr;O39H~h>aIk34I|5}Y7ZIR>;e&$c34c04u z*zaktIQ;7}GhEB}CypJJ&qfcH4H(}X|Mk-Uz`y0W+YS84wV0^!W8Obv7eCh;ZG*If zpZv=sTUT4+HeW15zQfO7c~~|>*RK}O;x=DQi;s~n@a)E69C)&S+IjxBJk?a` zf5flO%c~my2^v46DAdByq^nN2|fDTIn!kY#{uqV7k|RYb_RZn{g08;i3vNg z2i)mx|I2s{_|>Z6Km74ueCqh-eyq!Tw$ajQ6Xbi?_0(CiXj52L4S0 zo0|JSrKua^8Ft@rZ}?UIZFl_evz*NE92Z>|yjH(Gb>g@z8vUZIhChn?KX3RGMzvG% zbsYa(|Et-5LRG3qJ^WR@ZIGimpAS#_f9|bn^gr+){_+(oQS0s6v9dB*IBbxtMH_Jc zYi0k8apm9UIg!L4^U_^r{O7RWZ(a?&>jPpX*LcFO@?Tr@KllHq4xC^6=aHfUnfv5J zvL5zN>SWdIUjwT0dlP?3STES}8yfgA##dWm=QYfO9X;Wv|5I}=-1VR0$Vv6q-=1!K z2xpVddki)m%u71AImc+y=ytC7MrV9!%n+QF2^*On|G?kT6MkOD82EwT)&8H&h}YEq zKic@r^S|EzaSbdl@~zW(!cyDodC1|hc0d!u{*^HN4%vm+NXAF9?~}(r=jbSW~(F@k{{5v|`RO?BDT2 zZ$<9&z6O4t(aQB-`+uP0lw)i&EW+mtXCj4H;isSFPZB@;F64`^+x|!EzfQhG;QYUd z!&*48BeqocKXY5T`9H&a0(X5Of10BqI3L^0{=e84ZbD3DdnuW7ncw^WYWpAf3Id5g zdGy_qf!ysX_q_{0^WU58A9((^q5m7&#n11-&e{ymeSw+(u>Iv*aE@#@DVcx0U-pms zz@PBkm68_LN#)hgc;A^@U&R)WX{Y!PCj14!-^?HE`n#|*cSIYU)bk(b*M0BYBF7>_ zrR0;lZQ1{5{|Pkylo7W|#(TYtxMYn#Y1DlN|HFm>X(pjAepyQgI=PKarg4gbF_y3gR z`S0xsmp|9h2ECyFpJe~j&%*uPk=a*E=~rE(EV4h&I(SHm=C#BcaEZ#98EE{eBb!Uc zI}hMY1ZPY%&qUDpcfpnr|DyA31j^^)|D3>>g>^4*FZf|Pz|WRX{Itty`)Bcj+okmD zP!;=qWLc;bEo>+GGeZ=Ao%ZkA_J8`w>m_4S8`&FyGnrlIEtv6VMj&^|KiXm+06UqB z|K-A;5B^h!z#*@?6LM5F#hzm;{~q`ETK_4Wag`K*+*V4K_cdb25C5}|6n@fG4$W&T zc{5r`&Xi!-fv z!ml;1F0BF|#U0QGe>dYd`~MEj2$6i8*-`j;4;6o39e;n|uR6cO6aMVEy(M#MM@f4V zKKvmKJ=woDU_9Pg7c8~??ZI~)4&eVY^xs784b1o%zoMW2oN(lVc=uMxoq4b1%|$+i z`CTM$L3bmLKS#y!cg5K6C|U2^CmC%AO|?wJ%Imv z_`lBvdj2=rzt6({w-WZRp1THJXw=q!A2CXefqyvqe?9vDOl{|XBcI{Rjx)d?1^f4F z;MX^?{;L<~Rjd)01AjN@e{X>Qxdi*4Sa5|3yy*Y=@PEg`|N8~-zXAVWH*icYzc|s= zUMg^69XO->(#%mo*Ma+c9rnPNrjMxo{p#{dLAC((a)dc+m6ri;vl}@-mm)m_U#C?9 z2i9YQ`I!j{!dx})!9)f8s!CYkx{jlC#F^Lt_oI}!XEbXZx)aVCKVao>IDdvas=NnC z1##MWJy_T3HpuXx>ul%$H_~;q^K%3DI^20Z=zP`ge_wyjcBoe)U27b=);M*o+d(xa vTiW^is&EX>4Tx04R}tk-bYoQ5eR5_nH`?G~^HxaffQkr6L;30tpPn3e+09A8La4D)%Za zjzMeC(8rS1(9&FMLu(KOeL(aFL{m{q#EqkZ64|?)AJ2K8m-9Xc5W>qKgR1V7X5#S}9qaQBNu0M~F{^XmpA|4Njt-InOzS1P4AL4fxlt|& z-UEXAx@v%Q28`OtR2rlQp=%9(6`ZTHEM^AnrNk`AK|sm1vDU`=x^03y0SpQ&l6l)Eq}2FQy<{jZfQe@ z(7OreS1nE3g^Mlde=MoCT9-V4oXx`9DFjl`cLO~ujog~|oZQ1w6=K)0e*hyn=w0ow zcXxYk|MoQV`vHxkaqX5Tz=RwunGMlm=9wr45Ukilv0M5RnEN+E7Tt z77<8D6$1`&9OEo@g6;8m_IFSJcr*5lXKarh2RPE`-nr}d-E+=e&QnaXsO4=zgjs0q zM$0jxHE21AmN;5}#-okBlRDoK4{`I#wg`jjMmj?!TxC^oo1DFqh%{vHly`= zo@mnHE3Ce$gE)i8G}G>UStb7Cqq{ zAdierVCg&GC7!wxz-KBFmhh=K3QT41FlY;ODxDU{i#5hiXSKJ>+CoXT?+Oo+sH^oc zJ>bYpdlf%;V_`ubP`~XlldgdsJNIzX zU9D(mkm-Jdh8ZOo2#L7GrX9V+k{YzMAl6*gH%pENC`~Hr;q~NimZ(dxiGT57OQq8|KrJ>)=^Q zMVXJr*~b~d$+y$M{Ow|(LUPl_h*&`mx z@dSA6mDw0oY}{ag<<38pB$H>bd`XqTlRus^!mvs1d~h9q>N*abzJlO0vgbgI$}$%| zzk`5N5sCwF4sfr*-JKwuI%4m5GWWmfvRBLDwo|7Eoaua4`RSz|9$r>Yur%K+QmGUV z{qdhX+%^?lfibUS`y-lY)Upq_p)K_k=Kl?Y*3NQ7f+Ka7aCF>uJbEo?YR=>FZ9WGiM1Aq0nU$ch> zY!gzs-IP%juEU`s8o|F82RV68X~F8Zw(Mldnm#Cn$9t zoSSn+$T{iq@}s zrn5nrSvV#C^iJn3OSAN$7TWOUjaBP2u`HpZ-^$#hw+vk+l==s7$(TzpkU+Y7QB^^% ztueTDQ3X!N$Tt1WhWc@t$Mzk&Xp2O_oll_5XVTY~$SztpbeVIgSApX8%0nS8_r-YN z!V0|ZBe&^nd1mc)`*15DWu;E`ABqn;FR)>Vz{~SPDE?B+BnvA|R$e-VfZv={@Vocy zW93!_M&WTyhoY@7m2rk=d9^t_WI}e~Z-6UD+vn!_6@R#SI)M@g$o&A&baId^X})XxwW0ab{ab?cN0EWpsQ3B_z1R|( zs0GZdhMCn@v2K3v*pa!#o9{z$N1h3p#t5dBm6{4n6J^+eUm33kvh!{ej;%yZtpcU) zk{e1_42N3yb?#3sC*rIIuAcCvMeKlpGC;(z?@}^`<2z08yHTZHDDy+WZ!e0-&!2uDie?lYd|4v0hj`-LvA`Ec0N}aPUI*0x zJam+y$FQsiNLq8{mdZ_&|CRFct>>b6ebP-xsW6Jwq*C|G?KPd_fi%t-plDJj(E3G0UXVL#LK7LLcmkKbKO5nqQSkp4#k%ynq7fJ#mWTo^AfKZ7P-2m{xo<}F zNY|k_0?W2RJoy-g8mavTgvC5OCo;Y_){#qbP8>`80+HqdH7Q^PZs+&-ePe{LK#DmB zu0^R;`R9P~5(Yo#@un8OLK)eFe) + + + @ZOITECHAT_PNG@ + icons/zoitechat.svg + icons/book.png + + icons/ulist_voice.png + icons/ulist_halfop.png + icons/ulist_op.png + icons/ulist_owner.png + icons/ulist_founder.png + icons/ulist_netop.png + + @ZOITECHAT_PNG@ + icons/tray_fileoffer.png + icons/tray_highlight.png + icons/tray_message.png + + icons/tree_channel.png + icons/tree_dialog.png + icons/tree_server.png + icons/tree_util.png + + + + diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index e69ddec7..91cda164 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -1915,7 +1915,14 @@ menu_about (GtkWidget *wid, gpointer sess) gtk_about_dialog_set_website_label (dialog, NULL); gtk_about_dialog_set_license (dialog, NULL); gtk_about_dialog_set_wrap_license (dialog, FALSE); - gtk_about_dialog_set_logo (dialog, pix_zoitechat); + GdkPixbuf *about_logo; + + about_logo = gdk_pixbuf_new_from_resource_at_scale ("/icons/zoitechat.svg", 48, 48, TRUE, NULL); + if (!about_logo && pix_zoitechat) + about_logo = gdk_pixbuf_scale_simple (pix_zoitechat, 48, 48, GDK_INTERP_BILINEAR); + gtk_about_dialog_set_logo (dialog, about_logo ? about_logo : pix_zoitechat); + if (about_logo) + g_object_unref (about_logo); gtk_about_dialog_set_copyright (dialog, "\302\251 1998-2010 Peter \305\275elezn\303\275\n\302\251 2009-2014 Berke Viktor\n\302\251 2015-2025 Patrick Griffis\n\302\251 2026 deepend"); gtk_about_dialog_set_comments (dialog, comment); actions = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); diff --git a/src/fe-gtk/meson.build b/src/fe-gtk/meson.build index 06b71ce0..d80609a7 100644 --- a/src/fe-gtk/meson.build +++ b/src/fe-gtk/meson.build @@ -117,9 +117,29 @@ if get_option('plugin') zoitechat_gtk_sources += 'plugingui.c' endif +find_program('magick', required: true) + +zoitechat_png_generated = custom_target('zoitechat_resource_png', + input: '../../data/icons/zoitechat.svg', + output: 'zoitechat.png', + command: [find_program('../../data/icons/generate_icons.py'), '@INPUT@', '@OUTPUT@', '--size', '256'], +) + +zoitechat_gresource_conf = configuration_data() +zoitechat_gresource_conf.set('ZOITECHAT_PNG', 'zoitechat.png') +zoitechat_gresource_xml = configure_file( + input: '../../data/zoitechat.gresource.xml.in', + output: 'zoitechat.gresource.xml', + configuration: zoitechat_gresource_conf, +) + resources = gnome.compile_resources('resources', - '../../data/zoitechat.gresource.xml', - source_dir: '../../data', + zoitechat_gresource_xml, + source_dir: [ + meson.current_build_dir(), + '../../data', + ], + dependencies: [zoitechat_png_generated], c_name: 'zoitechat', extra_args: ['--manual-register'] )