From 9917d724a34e2c95ffebc2c137b5ba8fde22f9b5 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Sun, 12 Oct 2025 14:47:14 +0200 Subject: [PATCH] wip --- build/templates/constants.py.template | 9 +- dist/text_texture_generator_v1.0.0.zip | Bin 9671460 -> 9671129 bytes dist/text_texture_generator_v1.0.0_free.zip | Bin 9654555 -> 9654395 bytes src/__init__.py | 17 +-- src/__pycache__/__init__.cpython-311.pyc | Bin 13342 -> 12864 bytes src/operators/text_editor_ops.py | 4 +- src/ui/__pycache__/__init__.cpython-311.pyc | Bin 1236 -> 1236 bytes src/ui/__pycache__/panels.cpython-311.pyc | Bin 57660 -> 57223 bytes src/ui/panels.py | 11 +- .../__pycache__/constants.cpython-311.pyc | Bin 7422 -> 7193 bytes src/utils/constants.py | 9 +- tests/e2e/test_no_stale_imports.py | 103 ++++++++++++++++++ tests/unit/test_imports.py | 48 ++++++++ 13 files changed, 164 insertions(+), 37 deletions(-) create mode 100644 tests/e2e/test_no_stale_imports.py create mode 100644 tests/unit/test_imports.py diff --git a/build/templates/constants.py.template b/build/templates/constants.py.template index 9f91c28..b0e8c33 100644 --- a/build/templates/constants.py.template +++ b/build/templates/constants.py.template @@ -20,7 +20,7 @@ ENABLED_FEATURES = ["basic", "preview"] if VERSION_TYPE == "free" else [ "basic", "preview", "presets", "normal_maps", "batch_processing", "image_overlays", "basic_utilities", "advanced_utilities", "advanced_styling", "stroke_effects", "blur_effects", "shadow_glow_effects", "shader_generation", - "text_fitting", "multiline_text" + "text_fitting" ] # Version-specific limits (applied at build time through file exclusions) @@ -114,9 +114,7 @@ def has_text_fitting(): """Check if text fitting is available""" return has_feature("text_fitting") -def has_multiline_text(): - """Check if multiline text feature is available.""" - return has_feature("multiline_text") + def get_max_resolution(): """Get maximum texture resolution based on version""" @@ -138,8 +136,7 @@ def should_show_feature_lock(feature_name): 'blur_effects': has_blur_effects, 'shadow_glow_effects': has_shadow_glow_effects, 'shader_generation': has_shader_generation, - 'text_fitting': has_text_fitting, - 'multiline_text': has_multiline_text + 'text_fitting': has_text_fitting } if is_full_version(): diff --git a/dist/text_texture_generator_v1.0.0.zip b/dist/text_texture_generator_v1.0.0.zip index de35f37a72de708437e8a45e87b2775e6b79ad12..21539af41c65d3a1a030238ca234c952843aae3e 100644 GIT binary patch delta 23163 zcmZU52RzmP_y4`u&R*Fw*|PVZMMy@gV+W!5}`1(OEovIs^hijIh0~Z^;mD z{M3;cfq1}!KyYK`!TY>-%O=fqxnGWk-3 zjK?7H>8vFkf%@6nP7#q~bZ=i|_T6k_icWDfuTPVaw&>1sD! z`a~YU`u@3?lch>l(tNTiW0+0E!Y90Qjm|o*J{51hEV#|>zNYA`qEEgNZ=@@oPd;!V zrEK$D)2#jMsr*xMywOPDd3T#Zuh6cnx1><-n>!~8HrsYw3Zv5n?nPD(^}4jL_geZ0 z(LA%yh*dRw?^>F|bGDxQ=tRR!vfac0Zle)qv+x!%k|75XiJ@ut1llJ~EQb1xD_P}r zQ&W6CqWx@k-j~hHxa-kMU9+F=6p{3fDvz&dB+slCo{`luA8fQCmuZ*PTh}vTdQ5;3 z+mT|t>t0;TwRb9)hTurDx8LH+TF6fuTgD?vRNDOXCQtIy_x=(OE|g#4mI^Uucj}+f zMhhjy|H9MHlP`0rf3>-uHd2?EHPY*-H>PR3RoQ*D{o%YL=NP>z`jFEHlkiKAwt4>Q ztT7Y!g_OB`7r(Yc0UFoAI;L=Kp{=WZWp1XwX0{GIY;TYkBuzR!xFvh@{{7psC&z_9 z`$QiSX*%zymvLt%pNk<)tmGZEZQ_0=&0Ib&Q0$nL@pHb_xIbt?T+EYvECC%dJ$mk2 z?Znu*^^_Dfa=*vjkLl4(!Cgb1RI#af9YVegLWziF|qD2KcQz)I!~{KE_Zzu&_NrMHnF~v zxwjS+aCS%~SLD>-;nTG6X3-n%L0G4En8q=^A;Fh+!|ROuJNgSVgShRu9J1B)``Xv6dL6*XwByQe(J zi7KE~)Q9rZ!|0SL_NZ!}yhpCHUn3eqzI30|<|S|*L-0dN_zd-8{NhFF13Il!LLaxz zGx|$9xssXC4T#;yQqu@}U}WyjNutm4Wb=)W_Y<>2?aIfCvMzmPnKslXn^ll8*E@u8|VhA-DistMy$KGRKq#4kw!|UFzuLQ3@%He(R&$tM?fiJz_`TP1 z7^Qzh#ntcl>Gc%@RQZwCx!%qlBo<8+T$AIsh`XL0QqD|uEH09w@5b_J7FK@mx;OIv z)}+3C_QmZRK3D5cJ=deVUPWNV;3a(VzSk@FH#0dMUMrJh1@)tyTd2{N&>u0^gc+VJ ze<+C%wXq_1&b_UhezOU6>)wab?$UT)g$tD5$27QZ7}=83T{zkvR|&px&U1;Jtl3Wc zJX(E}r3tUYPmPU%?yV-8`{$P{J|Fno^vOa##we51%TK5rUdoyC7XH>tni3V4;IyDn zpy2tjYnZJsU7UG5E16o#TEXc=V7qZU1*a3R(IWcKH(6K=Q<%pA5~%Kltvvg^p)(e1As zG<4?^iTI;xwg9)OeODcJ`FDYbHT^zlv){(`%PhL>JJ{R8;lM zFKKk&+o0H&PqEfd;a4-s2O6xNGvHBFG6}sPN06; zs`DCU(9oB?$P+DNYK9Zc4)Q+Sa`f8g&*BAA4pO|oKijY#XzQgHrK&^}=rPae!`cfa=JhNQllJZg!{e{hb?#Cg) zhtQ#vuI5(*x5ZXo?s|=VS{>7J5gIv6UK3jiEgUFJbI|ZCd#t}iR2APc_oE_t?3vO_ znm+o!+t#@4 z!20B7c)J8zck?}Ax7_z{V)v9;=kACfH`pUxb-!>R{^Dl-xC~`M>~>tuOoA^-;|?n6 zTv|XGox}PGLrK(Dh+1zK!}=7ZM-}vOf98i04<{u*m4CzROyTX2)@iZ90BBWaQYZBE zVe_|36GIIGKk^;-@|JjVescU0+p6s3@8=Ny7_lk1iAH5%beL9xR$Q!~{vbI{;!3wi zIf)GRTXUHo!He!xdU3!te>&2)$R(@rn(Efrp^jf4)KF+u{lfhCOWD;@j-c(2Cn@Os zY3>9;pDB}8ktKm;Vne+chF=V#s1_6jA4^&q5B+tWr+gd{>PLwh18<0a5M`%ooO*pR zn5U4Awiw+VQkA>tO6hnCX~-`}UQM3&be!$_{#?+ZJI9_k=QJk0bb4s->-UD>Xo_bx z9}I3^$@g16&E&jlS)A6ltuXVr^uWK&z2y$UYuYW^{cAx|y7v76By6Pv_x>SFT?|iV;7>#(1-Af+x40EV){hZWr~kQIidFZ553- z)O#OG8bg;f;3AA3x+ZFY^tws*CX zx?c$oqxqvpZzt^>qgC7BL2=3*e0Dqd;WjL-Mv2Iy@ri9a%_e@c%ZP}$vJxY#m_K66 z{peVjgyu#pMB0R{Yp3#pws6#gDA^ZhU@Uecwbz@2btA`hAz+%i77$z^Gb?`P>FzXqtcdqM-4zk?IHRfDrE7Vf=d-U*w;SX*>(*FB)7?rIA*{Qve&)dX zNPWUE&rrY%-MvMLnf z|FL^oia=NKVI`%aNt|hR?$NyJa0EKx>ACRgjlj$K!RWQQvk!@wsea1tNFylktp>f& z*mpVk^g~2<_F!0LS1ps)wac@;$~AQ_`5&{q&XRMp?B%zMO%ZweX7o}R5#ePCMAXtE z`WK%RT_$5AB7R7x+s2B_#b!;W=X+FglPB|OO23Nok&^BcKlpBtdA&~Q+@qt*JR!p~ zL)^4_ZjS|lzH?lcCYYwWZk~DMaysx)>ii40}v@i~y8 z=^C!+>oyl$3)6GwAPX@UP4~)u7QN=HHX80Fidw3_h??w0&*vCDrVfui;7?wjT${bf zArvb+-IDH*G-qG?qj!)D!Fdc(p}|Vfk^NrfP7~i6T5URhCUMJEScchA@hd^0YvN4T zKvfwvHB{-6NWEY-?FVcm1f+5Q7R25D3a&!-ATPo!^~ z?ZC0|b+rAi-=}Oc2F*B`Sw`th>nVnN&xk+B2%M)Co+*e7w+;L$PF8=L$CA`z^nkd6 zhA)7Y#lq#`%v-zr`7V0KT`In*w!#6upsS>|n%*G@7lGOH$B1olU{`N$(tt1l@ zVW>w}Q4rZVeR9La+YdT#Zlr&EQQYvEqiUlQj|)MCR_@sJGdNlA!t#n(@ybW(pI2H1 zQPf5CV;c|L=PnOpTty6NlSsbagz6}zr#*|;TWh`%kc(}pNGSDxh^?ONC1$?#9x-ha z-yCKbU@9^t;C;n+X=>(v71^Wt#?q1s#HcZmo7AIZ1%))*X0DjT?I*(BVYhuvlC7!B z`7f6nkfVvluL=goPAWAvDRFR6GMsRT>}iqE>Jyj#5%hdBq$s}h;Ya67AqBx_UQ*xo zxy4Y!C7r=rL8nPtu^m8b!NnSLNEmD#S;uSC(#o6rBZ!CN@+u=`YuVXwuB>>JU7&59 ze_ObEDusI5)+njB2?2KG~;`=5Wb`qPWmmN#XqjP6~Fw8}{w>2rM5%EzCy z>YsqGsZiIhl+u2XO-dI3X!lIZYtN?6zP{m4g=e$A^iAG9+*`92sAS94qn6<>jFz0< zJsVb9nDljJVU=t7m-bvoRknslhojF|!bicq7gasbg5=c+_b6vq^^_L2Ee9UECht$J z4!sD^KsXav#nIKT)qSKAwHYk&d{@DN5VXwbm?_&vP-qyu|x~wjq`x6 zRvzB|zGzFW)WM1I+xG}B1~)IA$TWRrrkXz-7uM6Y^ef-;YZ;gJOdNSU-q76ZBQx52 z)AIX|QjMe*QW(`qA6ivMv6&k`&l0Iy<2)hR?EO+K>tp$^ZQj_o*^b8}UhG`(n!(Tv zo`_4Ff2k8SQZ2yLa?MJRwc0-W>NCWR=CU+Phf|{q=+SB#NwqP9hJdP0-rDQbv@7_! z>)cZk@+z5wEnV9qsr8Gbxgr5MP#r&>lP&S%*QosWharYfk6RDFUyClADYUC<4(fKR zV6eYpfRMF6$>>2w&!#*wd%?l}yIoJAH?d>RQ)0o`Cz)%%!jFCUIJHW=JWyfitUqz0 zUU5eEa1pIa&4`RVxU#U(I71(M#K*XiaQr6GWyS8u_|;xxeBz(0*8=KH%3X@HmMbFj zE9wtLmmJbpWh}1VicubF;g40F(73bsk>u0lv4NtS@2NY=NIXyfRW+Lz;TN}KuVRZV=&Yig68%@b?kG*I- zo*7-QFm}+GeO6JyBvB7i8c`+pw-u9l_cQ5wV5>Xp@v)<0&q_wrrpHoPhwE=CDS9sd zI3-zHI<7|ftWYJXLW%2@$l;R9)a?*w*507!>2ZDVP}VyT#b8XhC`UQe!_&wmgcT_|2b8iF8lOP_!G(jddlp~gd<-inz* zo{&GnCRj;1cd+TJ_Nl9;m|7ARk?^)8#ti-{t^Ln?XfKIJYK0G87o0yP!Fj2uSS<5L zDmnfcq*4B5lABeXAurm(1>EGI7Re9U_n4e0t({p~$V}%i2r8$%7}jii#H`J!aU-KT zt{AVMRNEB&Sj)v}(9rA&DAe-oCWFxP<)4vb1$r-zrKO5In+o?37C5@ODrD8U?8|rM z!yPfM)w}5ENXE?#QcQz`Te?4|MO+>|-+yHu6V_Ei1(K`ekAl zOmw%{lBzYNzpI_(GEXOda_>N<|8kcT&G3HT7kw=kmb{Kq5u@`xbD^*N-8G$p@*Zd$ z*=aXYN-v&8`{yJqwn;qJtz#_Yv}E%mnw1>8ZsYRQ@%feDz@j>d)$%j}1qI3ii~2>T zbT(FEX0BQ-j_uk|%GX2(UN5eFkcqk?iKvsgo2-}>jbURp_TnmrL3;Bo`li! z>Zi{j7ZxZBKYkq%>kbqvU7Eggv59`98|~PY;8Y|)Hu_q`_k5so;vBIRXNY3PdV7F1 zs{V8m+see9#g>>)O%i_J_`Tw8Nv_)aY(6IJi(ayDUz61>Jn=K+TlLNIdV)&Aq=&9g zM7Jt?Ydh4@NEx=(H9`HF%bX?h{gWahHCI20)~J*`WpqZXrq@4yCQI1j9PcEa|K$?I zTteX|lG}uz7l7P(SG2?W%ig84*yB`=gn29DDV>_ljh4sAg~c1@G11@dH}&;RJXkYe z*ywVey#G>ZPCkbbNqQv8vTu?s4@#J3FpvRi|H1`Y(Iw=#zgZsnRGP$!{R-IJNimK zE-ib0dvPL&=Y-l1hKG3^^i089Tb~o3;kQb*9zIT!v9flv&EV_)k}lFsV?3uAfAiW7 zyFC6KYu0=l^a=Y6;$h;B*bl|jxj7l%X*C8^?ae@^Rh zy5&W`qg~pc?JArTg&f&@`!Bk4b}Qo4qau!mGgeuxMH&ReHQoG8Ns0rQFgI#X#~D}q zato4Je!ulH-ebA3i`Gt;m?SZ0`|k1ax2tZ)ZwWl2>lZ@19p;+p^n7GkNp}8j>R3QP z!DhZWce0#y5h0#^pDoxsq}wPJRCQ+&NxhOa4|@QC z=)z~ZdQ+`0gqR9xwl>=i%lD1xCeJy)=P6{l6V8(L_Di368&8hxm(UBU{azb_U0x?k zqVIU8<<9*uFC|_M(pOa{csHSKq&VFg&fGJ>1F`XpBx0%+^VcT?zF*vnj~aeFIJDSZ zGkoR4lfdI{dgzy^18TjO=DeKF`eob;#F} z(n>tT^)!uCqnL90@FCfzMPQkpaC6zoy+VqQU;O7=S#pKZgMNEuhO;__nR#JL-jvMo zh4;Nyn>!4;Ja3%vmC0|AV3%RbVq-n8(`J$oKgxbMQ2Qc!xxMn9^81uGF|ka{t#wC; zh8pVgz552_JD)U$m+0Vi2c+3^GgsM=JG9?nkHf*)aB+HQ3 zIRS^bH|H0h*GX=c=eSrHe{A2Z=C0z)Rmuy^4}98eJb6OxfT}f|FO|H`?U^S1WMr7f zLV)BJ@vx>#$&S38Lc)uhuBp+*-~;@y)==GkW6N;cW0L5|Iho>^V?=@;e)8}6B$O`& zJnjouf*Ko--pc)8_{ls}&q91vfL+}xiamb>STtQr!H$LO!;AC_*TbBE@ z<9=i13FX-ZIc2RAx4tQi>yI0q)E{p7_U8H5GgD$r=Xg(|^#${3#mSV~3_5o;Uy5!n zF7w3J7){rGWlXcVVdneEA^-H3*KSpJ=G2M3@9V@1)@<2oeZ1pfeVU`KfH})r`C(vQ zQT4q~gU$DPRO7Dk^*A4wlDNKLm*ZwrcX=b<`q7#9s~28><_#>0A!7`DboE$|@msz^ z>WbJ0mHxxOCN~_>Qi{PgrRA>BY5tXma?iR0E~<1z6>p!9>kLvL{`}N}=>_cslMLgX zvY4l`nD?@)<^~R(?;RZ%zYy^jHu_Hyr+Pe<<9~a*^n=L_$vXzyYW@c8fh+sX8WDr*YeHag;7?*OTpt4 z)sM1wBug_cyuTG!hK{gblx$1WcwS>4hnL1Tn4;vMvpt#8lc|xPR@H4jU-p%{htWfZ zI!p5eOTve*?uQNzwG^d;+#jwbKDqF?!&Iu9MBmW+^=tCT%$JyhOQ$|taM8=Scl^3E z#$NuxNlS}R{mR>q+K6|bI|@`$Zwpk_T+KTfo>Tv%5nMEL6=o(tbERL~i#eZkkjLv+ zar1YJ3^$Om+bXmJGZTf)yyG30PiPady4m7{yT|R6k2Z|Di z#JZ2^9md-;AsjvCqtK;Gq6KC?-3Nu(&fBv# z9ME!hu#Xv~3ZZom6@Lb8SmITGeDzaVeT$a6MXe(LPQ&Qy3#OIi=r+$ho}gV(H{;`a zQ%Sett8ecrc??`(yU(F1^wH*-P2FUIu1sO>;d0bV{L$u5s;Cjs`b&d0TxBO6KD78p zTo*84^(m_NqUy~|p&0SaJkcx9Li<)pS=n9VHMm$y9V@ylIFr-(@ur;Osw_)gtjoim z7GblxkW%CK#SXqzY>H^|)AbG8FDg=YTjdM{-aLMTT;4U1+EU-Su3&zbquhw!xVua< z>(@JW`shrVfL0^lpDC7Vp-pE$UwA$ATHc*ZYbyqk@b)U7VTt^%UAoLPTamM@?2Y=S zT0%PJE-SWz2Yn`eU8ObT)-DPaUDxZQJes~wUu8DxS3p&Ce-K@JiDoj)plG8w|MHjo zPg7a08J;U`7oVKy*fUOT7!xNDioehMsJ&YzdaLaDwu{FOzB@}O^SQ&om#2?EVwFj+ zdrjFcMyoJ;_mS_4L2L7as@xA52D3jJR^w6{KP4Z~1b1;K4yvb9v5-G{&G^xhE@SO! z!f;x;TyL$&PN9A~OT(1bgcG?T-DsYRTTdyd!IHB5hXJvb_S;C(OE?x5`bY7MJ! zmQO{LL|j+cYZtcTI`{Y$l^+qOKQ$YR{P?h`KZkxH?6ZGv-{q9EXXM$<5Fop#ErOt&;CBs{J3X^mfcg22sY{Z&W3 zAVZmc)mN9zosP-sB$tBz?MD4_)_BOA(P3rT+CYkSTfeU)CFA3ZHN7G8ja#YooiC4! z&vq4-95Uyni~72z_(V0MAFS5M=~Fabicq(F!s>r)l&3wuRq(`A&+*=Ii4hBjhVpOW z>4Cb<-1V=Jb{DUnJ)smcvvpo2{Zne`BhltA-A@|VzZdj0bFQ9faH44BY0$FdYJQ~@ zPP~$0cK5ZDw&rv0=k*Q?I+fAHd~N>UpX9qWa=fKDH2-8q_N^CxQo|G-tottDoW03n z@STYcc8Crlxu`Kk;~8-$+LGOM@19DvNTmDaU)TJSsx3`!zYk`T6QX*iq;8`b8AZ?4 zqSbkl^{ult5uKLJzQD4<`|94qH>NyPFIcrnY!Xhdw}_tmaq7&|c&)TprK7w+2?aLm zY|)mF-@ats?Mx8;WLz8YO$P1xZed`$B_LDQ^V@>^yOx2>20-=nh#mQd+?U{^Q<;4Ot&>;A&1}N^=$^< zvPU5hR-_1oFnEv0gQ>D4M_YMjiqS=`@6liKWadqoJ-w`5lqWDUYAocADbAJ*7-p((UbYwy%8E5N|X-Ci;M+| z+cbeWq}KjtRL}2ZWf5Fu?}x+?HqZ9X_?vzES3SyvrDXB{1&XI#d7>R!tC z1YREZGht2fvvpJWiVG&mc<-Gx#fUndr;rRrE@TyAeq88LH)y6$bhV%J8KLMHc9b8G zew()NDW~mY*jJ0U1ZnQ%U&q(G-FNA9{J$}JtQQRY=-uv{oT?}YYG@ZOFRdp1IyxC) zWimzZUsE=1DNT3VVkL1wW@0kF!2a$Td;@3q%hk!VZF-6L*1B5-z1Bv>$0rBI z_t!dq&VM^*p4>+~z@?qSWu39v6>)G^+)076MYxRqCqbJhD#dl#P!WAuugE3yiiC3D z<*|3y9Zr%S2 zLl>u)>DQ{0q`D3e+D0;~42&PM85`bdL=%-id~_|D{Q8Y{2B*dT1q(}tiSy&`m6pdB&Atk(Iw~?N zRu(>cCHb|I>C+j#qxlbNKfc}@vPn3rEErl8!w^O4DRu9StZn9V+h0vb<SQoYsJYu0JF|9zq03nIPFKCL** zF+}5&d59)GP1wt>ve4M_5cA89`utxrE*RY_Y?R?L3z@ugBCK4tT1g|nZm;p?t8e)? z=mt+SJ?!*iYE8F!IqV~+(^(cXY45*c^!1!(YV(z1<=`NfdUT&N^{rFo-rt_knz@$! zSmz!qv{l$vn3Je>c;5LC!!R_{aGs?{h|i1gr$u4-D~``$;;MF6WA#JbQtmhT>5BPm z-Of9pC~|smpc6!3gS3?8aln^--hBD9Jjpe+2Q=@guJ=W<6?#_%sTX8#UUyy`rmR|+ zxsVerGDytFlBmvvHq(u{sFyZjeBQ(LQDx^MMpyK{aq^lscQzU0WK0L)2X3J`W(QMr z)@52(U-xKR(+g)@d0bAOxPRBdsnBJ6c~ra{Rr@YTb2jOQ_W za@ZOOS zT-W+^%;y7hb4>vgy+wBH!zX?<)`95TxA#M>S%P)*2h6kcJCl|g5-1IBc(B+FGBAke zWOupjlxmE(HnqBu&g8^K(LA|!mPa-?!PMTg$RWqj0afs%mPjO(APb+(>2QBvlx~eC z#5k|;I6^$*{4e5QbYW~BJ*Q+)HQ9wif@R|QjYrCSeV^^+SHBaiatcUgxy2oMd_^~$ zeY@SwwiPh-zKzwB-FUZP^K~w5)coFo{p~%OjP$+B*0Q#;KhC|A|2S-GOORNV_v*~D zsqVB;JDGvxzLEBuXgklYtyg8ORh<(8mc#T1NDUId*BZ;F{ROo9C6N@3 z#Q1Q{Kc2)JdjlVV*r7xq1mM5jILU{h!O+HVq17G~)fn7KCQJ6osM}jVd2&QWubO$) zPJ=4#Ve@)?cXPtS_StRc!_7XEmfgi$$I$Avf)RHgd}Ja^8Bj=+n)1>rEA58RB~=RTA6qn@#7ab|BC0678CmZ62Z7Mq|dvN zzQ~LwI7mR<(6cqe*t9LCbyZFul#7HA!nHnN#}o z#6QrhQsf?&ubz6kV0O=}$sr)@3w7zpP?(yaNX+S2@4Ak{cqaip-SJm+TAOs05qslQ z1+nAbOQ*9Gv;s#rqp!KQlCcwp)0tN3ur+^(i%?dPX0|c@dHS1aTYZ9-Z-3)8?ISIw zedcEF82Y2}`o+CTj<$1C7P?898JM({rxQ(AK;4`xduH6W8v3ivx@^Xaewuv$VE2XG z(QL20S;nK=bwww0egp`cUw!n-;}Mc-z@zxhqXrAEruwF5dp>lDd=+;iIaCIZcd|d9 z5AqI>RN_pXu9I>)?ny>FM*Vm>CqaaZLy%u|`-#-ZFReh5xU2NDV;*V@ULvGk#D1<5 zuWHepK?NQ*GpVxu{^g&o>;kTDy-Z}43iupC?|1XWjZt$9(MzIOLXPcFsnYNVa?Z;& zKR#)f6W{x8e&I1GH>G@~>NcS&O_t2B?_4($ofuM24485Sgq@V*>iv-?wUo9H_1eeN zgFpBUad^B^I-6|E z1Cd)#Z$=hYW>F+jwK{*3`&^u6R-5@^vexFhd1K_2DLL^c#I6HhqB?9jkm$7r>NEFl zPgoc#qv9@ib@#9O3cthh^5$=V8 z1zRnH1J5Sd) zHiS?hGq5ciSgDakD0trx5f>X+1NIHCNuazyq;SJNEwT^WxS@vuc?p)~WJaEVDcWpE z0+^!Dfuw-HT;@VDz>04OA}8^&t&BvG?l7xO9Qh3i_fTksOsE8Pc7YrU6$Cx3N+Msu zvQOoZ%Qz!QKAPI9fFA)|LO@AnNMUG35qS}-Op-6T%EG07sxkQHj5>bZCrh&C264^Z!0$QTzab{nBhV-VxiVTe)7hru2lSnDp zy0vMfDf~s}9WnuCjekOt;)dqHpQ7q@41p*<1^XBC`WtZr&muD97*3>}jV#g#=Z? zfc>(>iE@NR3{Rro!UH`ifcgRlib@j22CEU3LRn*zt06%h)dSmXegBf+Gu60$bYq0HpyNNd5?gPfCv6^s?5Ay_o`eqXvZtB1Ia` z)}g-R!;v|Xs6Wd_g+S~|;<6=i9fjX;y9srQ3ftS`S14s%RQgec9B>0?kyb@taJu_K z0LK7&b_PSyFu95f#>z#Rt)l?&0Pq{k)(OrnV6~LKCATF=`E`eNvl_1?zxN-5moJI745aviy4Tmm+$#H}SiFty_5pxb~{ zMKBrFXfBvkt1P%&|0zb?1joBxj`%hcR#xT$ae*54%XBjF3^sS88ncN3NC1ujkOGha zkONQvPy$c^Py^5a&;rl_&;uL?U;tnQU;Km_0vfGB`iLu0mh@N8e4rPF^q$wWUoMoMyb_@K1 zso@efa9mKxksM_M#Z5^(dYJ8euC-AfXn(>9oo7RGH302)aH1F7mvn*CgDg!l2L6(s zAsGYr!kZ%r&+LY%2a?<{rK~_wPZDeP&X^<`7WSW%JPzwg{2+M(o?Ugzk`Ayi^H<3L zSmyqQWC?7o>JP~oECpiQlZ?iyDczIofe%6t>4{HuOD?IJ%e5QT0_pR4mQzezZumBs$UMg*m5=4?#lg6g0TkEl>4AG39?~p zH&+7)-&5FL1tR$jczGG4mv4jhLJacGurrQM$UDOwxbVu$zz)k5me+>uTo9KZf%imB zn(}9GcK)Zng7PR7rKlqhpa7rpaq}}paXCk;7o&}j_yf8 zO6&^OI!sa^tdBq_Tt-4w_ay}(FBc3!LyniOygqO}G})s27#o6nt-6V@xh&6hZD4bQ zUg~CQU|CEgdf~96b7=Lf;aPsjqDRDnWf95hVPKi806l6_K#8inqX%#nKp(&Wz!2aZ zfDyoXfC~T@0gM4m04@QT0+<1q16Tl90$c{L0Qu5j>KHx9;Z!i~Pl6@%|Na$*=0G9b7%5Jy&|g0S`9BHpSs40* z3a4*_8$%C^g3IYAUqCji^C1vIe~EeuL*hIbc8s71C56#hB#I92|9%w<*`5HVC`j+>%cYaWSf+h~873l4M{|ZB|L1H`@8LW~kJV41a zEu4}7Z93>F4~7gj^q`6I-2f=q{hkPf#Q)l2$MnVk6Z((|cLhmw62k_I|8;-|ZAFG(zf1NPeh70N1=9+x+ku z6pBHKKn#KyT5R9Kf`B;L4pGOT1Te0hR1k+2h73v&#IU1~pCPWdNHNIh42A$ow8K!s z{cVaqTPFv@9{?HqcYi6Las4R@;rg=>0;+#3;Z#R1Q>7~5qTGh1uYZMwF}F9U;Vxm_ zlo%uJx)VFYEdkSM{VbLIk!OK)&3-y%)l+wS3-Hr!|pTh7%Mg&MYST%N- ztHPj90dgEiLIfj$5~svHJf}iZL%AY2(<(%OSl4fkF*TCrk8OX>#0Z4cUmd#9U^QvL zX00-BKRW~ovIdq)rN5-SkHh_?G9r&d4}5Xm&7A_>^)kW?a0n!TteBBR|ITz(Q6Th{ z1!rwA8FHPM%R5!widl>(;;g5LjaXtP%Umnk!;B z(Ocq}(U1s4MUvEptfZ36_Xkoy0U&Q2C5zajTq9y^}P5@0+A3OEk9 zHz0*7Byb*Y#&V{9b6l1F(}q(La0-=iZJZ@Bil_>6+ylrE3P{fqNe_LM#A!Le%C0!! z*x<6^KWXAC&7hG7rlS%_N0?+m5n1t z$>1a(V2P(5!9>`~6&Vb68x9>|83QdiX>jF1jh)GY_M|*c1>U1#Xc>Ntpl{+b=hC8S)aivx&01F^6xC; zQUD4=KH>x@KmRxR{@m95I|brC!}8es8)#Gk=d2~HqH`Pn#~^?t6>*bHR}nDixBoCw z6mccE6w4^VF`#wD-?d%|5ZQKc_JDgHQpo0a`Ec8-`$hHz;9_W1TXD<*Xgx zI6;U1DKzrRfMa-st{}Vt-_`5hYieuI5U`@WK3ffOd z;JO=9#f|+dmMEu&BX+B!{!<8QzOHgpfZ$3p{JY$vPGgNwhr7;Qrj{-TZ|y4u|6LsH z3~*Y3-~KEPtm>dYCvzOfULAwoN<(NYQPu`Wd})iK_@5)@v7AU}9EVTi_trqkeV?!& zRQ-|vZ{pMW!afr>z6Sn(CI9ZoG9N?`mw?K~1kPfAFQ=#caXqvK{B{7=DiTf5w@@H1 z2;ee}5VFw32%>E6Vr2!O5IGDHRIiD_p1PnOAPe0AY=}Y&=U5Rf(3&|J*ZMIAMFgQi zoyW??VL9K@aGVJ(Tt01Ji9H!OGfcC98De(7Cz;+A!Tu5uhX4?Vzqf)uxi}>cv@znS ztHuAZYcv=`1BYjf0y$ms?Zrt&o&FubF~X!5Y#>+FK{QVNRX0-mu%ZIc+G#MP zqkh~2>}s$z;>FtOe+Fn&TES@qH;M43bqY&Ff_)A=m2@#mc$&O;5Z4)uC={=YQA6R6 zLazZ8+nz!X!-{udln@eU1{*dLJq#Nc_7GtgbUZ2)EO~fr2!!-sCQVGivcgcC9_BbK z`{yR|-$W|^K!{QA%A>$eF@XEBO+y}!WI5upZL z(Ba5w{*b>-4E&=8R=B@+T`lZT`#DfDTJ&*y+IRY3@T^=oVi`9P4fJ01ckYxpSXkTy zdxTh!0)MA`120ZK+5l&1sR2+DE{G$p|0Yrx0^)H+EKvk{q(nptJ%|7+ikBfs87pO2 z7K2@io*QC#V59%sqW+sH0~t8g!sjpyu;`y-|G%quUmi{rT(th)!h8uU{i2INOd25n zNf*2VtSB7UqjSJkxiwr<-Y8t%wKf98FTaWY>qNM<3tmrqjX>($+<@ibK~QWFG5v2n zRXPtsM8r-EM>Ca!7&jZR`ICp`#PZ-cEWE@d(8hV(#6HAw_)ijJGfMz!Y_2Mu+Iam`ThJsPRWCE@^>|`&w{9oF^+g*xx|qALtY8!)dOO3 z=%E>g3OXZ5N(HXnasSpr*ZE0t688j2DR2^!CKzVCv_Uc)J9QU+g0=9Q? zZcyGOj3i`x38RYY>%cy^qt+%MDpQObUg9zXP84tnA+c2k8mQM4BZx<{z=)%lFEUbL zNx&2{&=IpAFOCkGVHEHti{K|!oF&YPeE+qzU7imoDwZpP57{X45kt4lf$ICMf;hTp zn;2{+C86rY%7PZDJ`eqj3~-D~u>ACI;ecZJv{;;^MCOIpM{~csnB^Fj20}# zt?N?|15#iUEP{XUW*f7xQhe|w8TQOd2Yt5zwE>fhBUeF^B#>a9#0g03=I`oac~0wC zJP!hKy6WE^@5w_?9DuGSTU>RSv<36sa#@CJ^9y$giEdjcYe z-2pd$g&hF9CHl9vSV`Qj1@>CB#XF}MuwbDhBIA&>{AW3%6re ztR$5K-X;cd`Mdts{g#IuG3>CY?PXRkC7>RA(*FB)MI#-j`gMlnpPdn-6EJot3&*i? z!f;~;7>Xr|<>H8m5nwv?JK;8u@39=?d>rSbGe#L@U5I-C0ib|>7D;maiR+~p<1Jxe zwFB_?-&Q|(`@7L~a3Y~}!7aW*E{qV*RXadlae z;@_iz(G?)jxr!6Ge+9QUs=yLe)^WuC4O~FUAu3m()NC6^2BRQ`tX+Tadd^MK1V)1a z3;?(PJr$OI%Qt|=u-oa0XJl}%zW-f@Uhd#jvt0eXVv!nq2V!4ij)HB%-&!y1;zZx? z{U_Vft^%`}_Hmrqt2hrFV2OE*P^dSU9iq%qxZ^A~c6QeQN0$@J5r)dH;SR0OutaG- z9FbHSH%r*u0C7wNr^8tq7lhkbV!tSkXdx~|3Jv}~+Rk7(t&%v-S!pRUNW>kN@QUu( zHWzT55O>^?nT{n^*SjUn-WXL_ z>dzame_cAAg)l}@(^*EZT0S8N{p0*_Wd#1Yj>LB<{azH1}9 z4mk8rupBYS;yQ*Bn-kZt#239d@v7?>4lHpPOXL~E5{04vJLrnu07Rz|ERi1~00&ff z{Qo`U{#}&5&tS)|jn%h{ZA$wN*NL(pZq8ly14ND$9I;{*7kYB24a@$t`JcQ5J3tDE zQ@L;YtkWU%a=x6(SlK;k07Ztw4$BW#g|HWeiKpbCGCES_Yl@Ba}@Y8ofeg@ z%sEYGPM3bst)LQ$3VLZ27-fhk6@_I%K|~~46qHCs^oLfzd(S7^zP~>1dEImGJ?GqW z?ink=vRaL-*Md;8V$lLOi#}!8+>wd{4AUszW$H~tFK)kq5{fdTERdv2l_go^$T+b2 zpgtLi-%nH@o(31S%1y{^ixlnExq(CCMbF07?o`_KH1^SgBSrsHl(!mYKZ4*jV<+d0 zV)u3}2zA{->4SxzJF!81!Ac)mi^A@x>_cChGW_qsDK3N3bIW&mbEsf3(Lu)1>|H4ZtS_9lH;AN|gN?4B zzUmk-gEI+pOb_||wU^6p;g~IR2=m=wR4cDSzcLVn#t}jDVwqLAf~&Ku%trPu;X20g z3A#D|{iVd8oM7}7#>X*HR$xjJ2{R@M>f)_I!%kaq82M$i$RVq7CO?evOkEB)asDQ1 z?H}VZd_esWuEX}(4!y1nK9+_a!ffi%!PzA=Rc!23$f8YMB0GqL({(!CvdT%n`2CBw-5CcLyw_x|pkzQ-MjZ zg%YNzLJASvdeNt&C>#E(#j}!Ugwg1T^n#v*h~&eM8O)Ne7fK1C`@Tx~j(BtFX~$1E z-)#J@*;DtG22M(Ocu|X~)ryIdl9g1>XcDN6SvWyd@?7Jzuq}c8Jk+$B@GM#{_WR6R9djPGux%-+ADw<-v-gxeL@Yp`cm zg9wOgP`rIu{Xfwx{iV1TU|3)D!rRVG|treH#2CUoDQnD*JX|7j9 z75|2@tq#eL*=wZ))svw#R`hz?TsBlI#jCF0Pp6UDAtkBq#AeVaZGJ`|`|ChOIozH} zppA7>qROt$qESyBL>Yc%)5ug0=C`&S8WmRN1hF^uU~YRMgR**Zrn5CpfX2Pr#;MZT zGd_B?J&$*gE}w*w1M3P16wn~8P=z0sM_t7Qli8I9@ceVi kpfe2xQ<=6Apx}NPbfgh_H|g;L$`=ixk)!v7NXRJu1M=}VAOHXW delta 23773 zcmZTw1zeO%*WX>bJEXgtrMsmOq`Q$46p#>?5(Eih)kj)Nkd~AZQ4tW3QW21nl9Un& zf$!N}-|O{${QTeDJvC>}Idf*7S-2BL@3D)YyvJrV(Z|B3hCm?rkf*i=whqzNj4$vZ z5JMgagab)I!2ndTA&C%;Hnvx%o>SiXS;O|rg>jpr^;?*P(cM95eF8>HxEwy3F z%>co4n3hyv{n2-YcHKH5TLWntn;tID_{D*MWyW{-r){3Kdg2Q{(K7`-(OdM_GDhZ! zNq~Jd_R~vxN$>eeGx*p?8mV7DE#WF@r7|6JAiq#V^p?hOR^}po-|c)7X*C&j|EhB82g$`^2XOjYAv)6n7h8k$ zsPizr4>rBNQKvFu$>$8v%)*IK%98L`J8n^CO|J-$s$5BYylW!I`eMolB=n=pm6LAf z-#T5B$AwDhjd{!(SYqy-D_T$~lkj3SRWFXwl$BhM*pOUqHI50?($S*X$ zd)>-$Fz0nZ_st3}tJl{JMq(;jcf@HlBcF)lUk&~=sPfWp?Nbh5J$=kJO8va+eei7K zu)ky99wT`G_+C?3%K!7Tge>OHZwA{O~?Jy_oeir(_Od)=)rb z3%vB{GIx&Hw={5m`l#!oI6YrWW5_d(>jA#y0tE}vWH`x^IH`TNOgFrqe0)^w^R0EA zIqJvubC%m0u$3|fE){%z0;Zo?9IlL!g#wgKZ*xZDc;a1LlxwacmYesMgq4qO*2$_I zE!-sCdU2ndc{t(GGNJH*(XuI_Tm^Q5R;R{Sm5heR9`J&7(!pfj9|m$zh49gb%Id4h zGg)sk)Um&YWaq8ilRh~lU3(t86S!DL#dJ5LVuZLOYe+VVgz8EZopKaDRq5j^LF`|@ zD~EsfTe}Q=3&qD}A&sOfBd@clFHL7!yX6{%#{eXy5@l7F^2NvEMtmQgPeAsQ?d|Oy zt(J}E2I$K*omOxktgV0MN|w(JA+yL5HDJi`Hg9-;7OfSe>w}Q>QgWv&VEJ+Ru#|kl z*))U83SKp(6o?By4bsglHSqidG0hq!Z>>#KOJrK%Vf^7e^mZxMZEo<+3H=q5Ya8*|r0n7)*Wg zz&F#V8IqNpCl9)><9eaLJM^t(Y%Pj7V;lzDe!MUYL zxR_H^t(a}dtxL>({nvERvWfE3o$$k@#pP>(VbYQ%wbo2br`oxVxNLgJ3*p7a8hm^O zJ4WMCw_)@gn;C*#=@f+TaGx`NE1CW@X*r^XWHx_bX!c^pMQ3i}M_uNDLc;dc;%6_C z7-4hVUr9FE4xdR;P=8%sc#%{krSP5Bg1|172`2W5LwoSK%C*dEPT#G41DFy7 z-wpejKI7nD!>{&uUZj#_rdO=*ExoDnD&@xyW}Vb!niO+g7pQ+hjR5@(OZ5m!ft;_b zk?G$4ES#N#@rXs{cOpvnm|TqO^w%Hve)%=>Q$UJ*Ck>C0mE@7C-sL8ZG{XoL>l_L~ z7E-~QR-aUV*IvbRsLYvk{|slR&+NBUsn=~-1kaq0l^&ek4PMh}8&z6Jd_F!?Y`Nv1 z&oM>R^*}=zsGhh6A2j6R&KjrG)Dq%fO5fVt)|+PLuY)4?crv~ylx~R^%FLDC?wtMt zjVIaskk#2PpSwVWOzfBqaw*ik`+d*lY-w{<&4?(IRC1M$bZCCR|AQc*RjJm8b%Fcl zF>H^8MU37j3t`P^r^MPAH|y7{6s+DVXf_Wz$fFy;*A{_XimGRA;q#BrmR=b@$la0I zXX#i~o~BDhP%0hhhpE4))6+ZU=)uA6|A-IyF)6>bYP%)Z@Un?V>J^)+N6T9}0)cl{ zosX=6E3JM*6rm8`r%Ru5ZVdh;WUp-8tKKzKNmv)z+i44t->&&aI_jh6PO)?>C9G** zO&tBcz=>n8)x@_I@-W=J#nTB^2abZtw>&wY3proiXkXSCyLq|pkRD$H!r%8sVZ5$b?48olqLu=y1?j2?9hH^oAP;Hm2+L4-EiLAi<{Isu~_n^ znJTp^-!7Zi#pJDVvLlur8E6vnCAeq)R3nv~ON|+;wW1Q){}~?=TS3O66uT1x9htvH8;5o2nRmj$aNK2sR*qvl%NrkS(Oq>dU5Y5+;0B$m4`0x z^}k)zy0rPpF<$o?O~#pKe4U|OS-jK?aUda*x;B^BNiCQgp~mv9<=(K_VpyWo=US z+$VRQ+Tn(Z=O@Q3OiZn^&_xGZQSYZY)Z8#|DkSGOxfH$HszEH@dbi)UE^b^?;pV$+ zXX@oRkR~@$jLfv`Xp(3NL~>FUOH zn~$3$k`iYbmGP$#{2%ynwyc%E=1NmJUjK|FY`TBHZ{Mw{^fSQ&n1^oeiQq>bi7OeL z5yej_LxUeK3gXO`s2)O2AE%xU<{jcj%ywKwY>?PZ``k!Y2gVQ?p)>%FBMGECHvFT% z)m(7zFPrrT?{V7kQm3o~d7UT|0wV$3hJ%IN)f~;UmH)6PnSEhJPdX%|q zuCOXW-254?L+?EkIrOwM_Cz$v$*G8p3UQ zBY5&G`S32qyx0Bdl1-kJH7#t&J&3AS$-pPRF4h1Jo~!FmCW&SC`7G9J+oe{T09(=8tCEO+gW=07MkhveDZ!tab!htlK-9Hy-}O_s;#42Z7B>; z2g+TWWSy1Zt}Jtw-J@?mWMx@|wHf?c2mNI_8bm20DdL*16&hM!Hb}|p5;@ag@_VJ( zMEk|-kfL95@SSwEHZtl}9%(PBJZ|FNB$yRlrwR}%Z%`&69fdrs6LY`yVggGqY6vr_jda!20! z{1^%U_{OKQ={;Y$V7ti}@`|t#RXRcSh~K70N491Cjjq*+n77VhtXHtCWG$o>STtTU zFgaNc1zHY2i$#zX=DPR}6fj=5d?is9zw)Fo1ZENA@q3=dV}^S0ef zruwzGFS5+(4L7vmk0-TR-IH!m|G;ocay$^<$YBzb%ae~dxXHzObK_BRj0_#FhAcD9 ztF6Q9KW-7lGBFp*u3QlKIzolrB(`6Z$oR0eQ8YYJ`KMU6d`u@_+cdFfn4)OE+@zGj zituEueb5NKF~w8cX82*RtC3!9;G9oWk$*_4zaI4YWn7bNEu(eYVK2I7ae=0$^pWiK zsU5`8&-1eygbD!yo4Mz9?L7;x@g8Pi);YaAL~MYHD$-A;E2kJK+ZDWAj=L-`=yESX zwu8XJ`f_F`(HSiF^%%ok5}6ZBBSG_>c8!Rq=hZujS7hx|l%>lCWL_&9UtD#USW+gx ze=($8BZj@>trLr{7-9u07AdbxDY~ECG1A=~8s4sxgIK+L^yutp(}NBm zxteHg?}@ng%=WfB%d90MTnG9o&_Fx-vs<7E&fMF(-EPOnrk5QXNgM9C4casDuk8q* zHkI@Xr(X51_%_CWB46tz_OUrlxh||EnS_dAy6nzn7q1yBwm_LrvMDhEhUcz^T>hRL zKK6G41WVuG+w^Y6C~fpXIIlN-XnGwpurbN_dONiqLAaMKYkng`i;`+qzbjBjPc{v% zuI)p|tk>VPqA9}^RI(b#y>On)CE7=IPI+D z6~UZ#B?9|(Nf`I8AE-h?D5 z^qv3Wg>k;Rr!AtW40I0fonvF2jm&RF`K(L~rz>S9LDcdi8!c@I!#&`fNq(-ka43%RAe?61Nu(N?P_w71a@k9`B~o&n5;9V@MQ9;7QUSXq1a% z-vQyJChwX75#MI70>1^N%Xys@92L2#%86#b>b?}y{}|s*3?3Kz})aG!Oo;S(`}E z$0OMBbZQcZ`c9Mdod{q_m=0&tj63CuJp^0U3DHknYU97_i_BVLF8?+f&`Y8E^w(O^ z#DwpQ701QGH!}TGwIkw(f{6u*F#QI{oRlXE44MLjSPUg>ST5$?0`;r@6Y5da5ZWcZ z=drm(TxZM%&iyTmxfI_G2KXYj>#P>mLoYb$mn77|!{|TIY~pK{8JRVW1V#1hjY#DS zjv%Zv>s>97m2Y%Y-!|@X*S5A6xVKS0BYfg|x8~q6qyD>d;S;^t+T$+-S+eW~_z{Jv zWwZokUy>5>`9m8RvPf?$fB)D<9D zs_jWyD{1zJ@6zQT=TyD*45H#T{U3OhTvzNy#H2;%UFG#Pc;$05o15Hn_1Ufi{I+z` zmQSZ{&;}lk$ERE5d6J7+{y1TFkAgn~v8_x?#Wla!WeyX6;+|7h&UKP{(Yhq- z_;JQPp}DxvnqiD|UKbTOzbSe#G-BJgSzpapYcl%I{$VO+UP$^&VeHi`0r+6zSJ^;a zZUcnby)P2xu9F$w6N5JICl05(eMJiEt4!uUSd{TCUR86iyH+3}XK7M!UOTyz5WmN* zIMlP}cwxNQhS)T{inQ(amYh#(g{1EVv2fzYpKLCKSPW1z=O$cYp4y8UAWg+iA-5?c zJDz-b@=fWM?4nfQIu>{lYs1Jh!Ti1(N>3tycz&-^w9+{;S$IDF?T*pj{ZHQ;nW6KqSLw+K!tRD;Bc=K6j`E=hK){?7frwIeU_JY#K7LlQBB%BKOF4@?>#?H%6Y`dw{}5*6vMhA$tz z@7wpf7AUQJuxS{%KmjwmRoOf_GolkttIF8Crm4f4Z!99pTfaI(%jh?+x^J$Q=0fA1 zI>yKi58-FAVst?U^~|-U?J1fO6}%R+o{cw$zj*0|Z9F{UcQG_`U(x=xVJ1#onj3a6 z;_Ry;DN>-w*x?1!2=MrZhvlsK*pvRdLE*~=Y#7FIw@`waug5Zs=_5*b!2{g z`I=bE6^DJ%I9&7Yx_5{)Q3tg-;j*F1xv>!E;!Z`dZvC---3Tlpwes-0ghgt7+N1XZ zq@AC2-V00Y|0;{`Q<&>%Fp#Dka?4^7H_7$$&gU8R&9HWN0>Z-v?o9;hxN%rW7y$@_ z5KFka?tb4+#)|UPkJ#FerVmHUrv;`jB0-*|=)FL`H)^w?Qul-(DXBe`m9=n;j=Q*Z(dWq!8 zsY$a>N@=|74b+o9HCK8YcT4M3yyFrH;`CRKN|7ruqWs5HN^V`2M*6NYtl4b2y)0pd zT_(p@;U862OV5W|0@ULK8I2aQZC(1iZ&GSnSf{FOjrwYQzxJ}fq+lkp z_FE23g^=J?q5#TWsaGQ;B3b)Om7P3!GON+MVj=~cC_)8p7P}&R;;!I{+C^E;1{+wY7eBiC zgr&>1seS9t9sAETrE2D5T-M|jo(c%2k4`_Ujpk2lv=~jDSH|wXWR5xMXLCDNt?3gW zuW7tdt~q7jxQLWb=0$34hg@ryonEd94`xjFk0&hbQSy?_uz2&90G=&^(5AYM zcPS0ms9&~66YkW>P#QxJ$$-a`?I9-rCSKOCgKn2e<5jjQFVTisokOTFhtQRf?^zyo z(bXby0V)V?ZW1jDcu;z2-biAV}93^u}hvW8_jkqGd*q07rJ)p z1ZsKn6$_#ZBc8X}O>nCIBJa4(i%2DD^nIa4(-I%!zZ@pHi$9{_S$2NGSw8JeefQ+2 zmB?S%F&)vmLYHl0od}8IXL(BQ66y%}`^(MoN?=)pRrkj#0xd7jKgu4g95aYY``~-? zv#6ORuoQkq9AdRmBt5v!Nq8X8Gk>C8Et}#L+YohSsVTO%_)5jE)1|(FHX#JU@v+o| zqlxh7W6@kze|9&D3R(LKEwR3epTa-*)-_VduNbuKKAJ|v25@O)_&E>?(mw6*W4-gC zbzGC(=dwzy^V%uc(mW?Udb&0Szxql9>+r&@I^({s8n?)kd9o9O4taOk+5v{Y~^P2HDOQFRShQyMq0G~qTF zX(!t2-MrW;mT6E*%Of?CNR9iVeQ;qvvJ0^uRe_WhcJUi;b$7bO>GnE3?G8(cMtzsW zEpyH{<~DNW1Mgxf3?);;s3Lzo^bQFBk+XH%#+_=yJ^*_a^MU{IRE)qAK}uP3Xw!>bFoul`zYS$}4~l-+HO+ zi=Hso{I434$7Nm4%FJ=s>;`dnutVZWaOc+qwg$NlX(B!ie-@L)nFxzdCs;LA^uy7Y zv17XL-FbPZyzRm(?r^sDCv%7nBkDwj*eK0_BM%$iYmg;ioAlf0*fMdzRT)?6`1h`a zZ@$(>S;lFa_rnX^C@>sVo}6}tkr zrtF3L$YXfYo`cv*>D?FUhI(qLv}p6$#->W|m1%?WC)Cd!7Q724kL>b>*ygP3-$Dnd zJoWO#Igfqy7R|XY8GIfq+%>;}@0R>&9s7MjdWuf4mfX3av`xYXH;NspUMqgf`BHcf zfx-L052GaUL=*M979va9>)k` zoEE#Y<0iiFa|%f-_kyCcOa1%1oL-p#<_*J#D#MrRlCet8e+e(WB%~TdFpl6o9{*&W zv0sC9alA|-a9kiD%Or8Xu$DNX?v0Mtz-JHPr6I#f2-|g{&RH#l>f3aM<<5*{2J4`r z*Yy*RJSZIQtsJL3F#cH)pAkVy-MB{*?{Rsn9cagmoDvPF3lg6y7ISL{&kP$!N-l>-T@WUJ3NkUN8IQk(1IH+3DRj`^8sR^aq6rl zC+kM;z!RdKSQ^6HYoUgBuFp;tsqc*O)X;ew=U*e@Gr3V`R(yLSEM!3DLJuZL49MH{Ee9pZ6t&z-E~I;R}p?!-z+0CjCX~P%eB~Y zv9ihONXm!l7Zj+o)}N=1^mj77X*?ZjVA*HA7$A&$UPIY367jHvE&j;Mr%TOpulw=& zZed{JL+4-Xa~pL`OgXz%c-e2g)xOn}620blXP73S&LfiAIDhn1q~0^7#Yt{vMS?Db zfS}Yb;zA--+ln|fQ$m^tf={U2hMw@D?m2cjfo5Z7&9FOTW$wW3Zo!%sv8R^@Zu5-< zW-JtFN;1gPiWC)CT3ujXo90d5xuwne?m^p1gVez6NqVHTr=H86xRL-~XMGjqqWx(rXFw9$r_LzS=?5$ZDa~1{J_TKp+MUkiFf5gXXc+IaotKUDEvW3$Aly6rWzpb}w zkUf9Vrop_fVnFgvtx+N(7T?|ij?DzykoWN4FHa2Ey=%!T_%8M2()3)uR%*8xtKmK7 zASqz6>L=Hy;2Etu%o{tp&kP??jy?<(SpQf~gId-QWJ6IY=b z*VntpdXU<~TO{LockY{Si0+&D9=dA+t?gle%=g`8`>FWwB3EaY2HQ|X8ST~o zke7O-^!_J&9GbB9o2{UHKo6>W1O|m&$0_+^;QKCO+4!MMg0!rtt6k{c3SAw6eu0Wc zM*FK*NFiRT8{&DQJPZ1cFMe&hg)2tbE)6VQh5lF+HR`=_hIM9N-QNG;M$4{<<;>E% zHoGuD@cXqTkf={u{yM0yOGK`WY>XSPZP5u}+Q^7aO}kMhBKH|Zc)Z}6Ho}ePL#qQY zv0XM<%ZRnVR;y1Mg3|fSA$QpM*B5vZLSp!+FYv11vjnKuROJ;c)awoPOEA>yJ54Gy zeb$hX1iXMVuw7t5I9-83Ab~^>h!FahoP4>Egh)|a62yr2lo)mV_fzUZnG~JgEvyc{ zf#jE7dTVtlE^*$hye>^{T-+%#2U|#A-audd5Td=?y2HGyIp-?!bpT;rQ8z6;ej%Ud zBRa~F_Br(eF1;;he7ISsJ^aO>3TjSLGpUv^}2#{3pqA(B;ZPuEVL6XeB^*RaM8Mn0cW%nX;S z30c4QJw%zH!aSr)IM@F3gHe&%qDG<)izzLK^-aV;GQYsgn=m1VnsS-p70<%XbcZF+@GchvmE6Tv7QdR#cGr%Lh|NtC0c@4obCL zKdK5L_mdh*u6Rqz^Ku%B`%kUI_fBu^)rKFoYCeoJQ z+$#MOR@mUT#8;hiLz`t559edVdf%RSzRRqbO6ThO1>xW<@u{+tT*$fN5ZA3>Pk}Rz zE8m;ZEz9eopUL^$&Cv}mJ^uCEC&L=XrQ^g8I0p!(>K9e7^3Bq0ddw|vtRJn#h`u*k z9e>a)QoB?g(a|LI-eNlNb6=BUh=Z9u!29J2Rd4kDv)Ar18y~51JNf8Z&0+c;qN&2| zU0g=9w+&$(JL|{wMpu;urD%^j%33X*^XWGVZUJkFbLUw9u3-b)kq;J>@g()N_I)I% znvL)oq(y%j-NJmqx&jLVnIiy3lx3L#RHXu<+(=5q1B>~j1!?lL{8E$C9@51xCVDk= z0jqU8KWGo6bw243`H3efP0&2x=IjIFYKLXMrJX6rR`2s~g>B(X>XdOQByAX`=5=-L z4BR~PcrkLZxV**0%lx~xPnX~xd4)X*W%{SOGBu~}?h!j82Zg;V%DCx{(HhkT-|5Irw_=iuC2R&ymj!5YJl&N8M%B=GPI~M;te69S(HV%xz8U)qZgJNCUcp z1VU|z5vx1;F}C_x)(j6hJcAPQ*Z^r4JNAhWPqs}CoIY78a7X{Feq~E2bQFHP!Fb|- z)9s{#rVJK5)PIRC&D-e8WfM6y8`r%fBdY5J!yL6#HaaZjQ1%Uya}o}Mpv?dt{29pJ z{G>lZpOo~OP?Xxndaf-Uozu39r7QE5L1~xXov0S}%Ej#VSH!c?cWhmReH|zbj_iA` zY3K##E9M&EJ-rXRdYl+~!K8g5h215y@jPb)U=!VXCe|X)JYWu2|CS+JL@ThiB6};@ zB4BKBvw2^>*s!~B%>S7^MS7QR>Rp(YeXM;p!oud;48u?i0f&4Wm%)nVM1Qy9prf7V zJi%qb)H%iqhLj)3pPR9lh!Xi16*l+H6(fD6KYrI^cy1td`=M6=&jkXhCXH7o9L_#@ zHHS?_MfpbbO7dfeQ#~G?daSc&KZX)ihHKRwq968mk5(Ai5+!^Ty`$TdaCS2Lt;Dvw zDFKnlRJlCV>tO7}JybqlseC(l`}>K?Y=QoCz;hF}MdHl}`@`*}na1_l{^O&sJpC(l z6Wveq*w)oJ5jQpt7fg>Xb1Y9fbp?GKDwo?%Y%G3N*=_(2`1BNL`9xbX1$%tIOqNeKGA1fOfF z8wtcBsW%l;$-)y!j2nfJd1kK)$EQ_IM9_k6H~@#NI90!=Lke71 zU!QXu9~-?JQD9MqreZ@N5#$gEKQb_t4VdFb5+mmm*%48XOX>~dGKiC|Wi=js=jI+& z)~jRKa8@U`>S;^sS(v_2+BLoJakkS>WBcp6((O(*n+K-a!#l*d`hA*B?@~TBM?cWK zU@YDmqq9zU6ly`3D^QlMhP z`7KHF^}TR}-l3$FD5CUZ|COYxoTVKa=64h&*NSAQWF-+Sp8Vqa!?2Y1uW2%S?8dc6 zu7004nxksJ-EuLYk0!bL?Xq9`3MK7Lf?4Mm^SF3V62ytlrkJkF|}V$n1bKq0FJXQ1Wl*OLU=M1e`fck*-FkAspd6zo3B<@ zOjb_3>}B8--#+Q`E9r6mW#^ytC)?S>bMlr$KXAM*$LL>w0dzTq2On*X?JH#)iqbX9 zjJ5RLKJn@!qR^qb(;iEvGIca#Z#-6eX8l-XV@Sx79}rraS_|$AZg;kQ&|^i-VS94N zGTptU4~FQ=&wbM6UP5c?75(52uR>n;Bc^oPV{6J@^@?8<7pg7j$6pA!Km8WrOv!<8 z@wsv)^``7|>x*DUvjnf2tg5(AA4SMZN*Yq#dN=goq4dO*c3lio*H;IMJBD50FUrVM zwHq9o($uf-WC|LcYx1AJvzvUT{>z8x;MYdlEU#Y`LUzc2R$u_$-~9gkRrz;w$8yI5 z!t+`CiqCgqCa_Kp4_`h%ZHv8L3lBT<*4NkCJh9q!vv;(_V#}H~C^c_vvDz6cQ*?4M&B*kQ0Uhp@{zOs?{DWBlV z!^tH+$e|XY)k|y2?mW@e%UU;{x|eGEeb^$S3cY@?-ZEABd9eh}UnhR)#~UY}rXG>A zLo#Fcm4dG%Z_~POl{F3xn{RH%JUlA6L89v?&&&2iampv7}%}O7A;_~bD>VQ55kp;*56|v zb01-7+mI2`H(^Zq`h$t~=8?tt*2n!l+QE`B@!f_mS(ifKPjpAw6kXL0YdaL9=lyur zueLfa^}_SyI*OY81c5%TFf~x(pgxPWd`7<#c21y=-b-CAoGAL^ zB_}NOappk51G^Xp0>Pt1?sN&)E3Cdi%b#qSppWc^ySFGn`Q||^s0ZrI-Yi7|%|cmf z9wCF4px=a2Lb0$>lt@~r1)B1a9?FT*Za!v&;-D!|7APtD4FwyN4sAz(A3A|ef;#+9 zWmLeJ!NY$)5d8!u+^i%5l|qXKi9z>JGi|;i0fnKQYW9x9jE;m}>QJ>{FwZM1u0QBW3U6w4$R`i&U% zM!p=HONmx*hd!l72WaWsnrsIOf#i{(&U@^@Jt-tb^Q#eP8QQ4tXDA%)LE$9S68+}n z3p5SQN?w2xp(&Y5(3gZLqqf`7H>iOD_I+qN+W6hX7HiQhYmGPE-TCp8!e*N zd;Q)W@UZ#?bUsIdy;+P4R)(JXBrj|gori957&GR#Eb&4_&4@@KkXIY> z#9>0s$7QeqbWVEfVZ!JUe?EtKlcQyeQgM>jz>J$>qdipA20g6ogY9F+`h=VQh8g6l z!2mT9aAuSJFke=bUl-S5uTd^1kZi#~V1dAHCfULF<~xqwXwMY z<~NxT?W&3a=qfQUUNkz#X##lZm>J!(6Smm{edfUd3gjf&0XBRXd9$MeUZ^9=?nD;e zFSKjp1$ffvsv|4Hlhi}UVumVh+y(q&q&Nt=fPmUAK?H&r1PKUI5M&_8K~R981VIIY8UzgpS`c&~ z=s{cn!2p601QQ5m5G){AL9l^f2f+b?69g9sZV)^mctP-i;0GZ9LJ))y2w@N+AVfik zHT&m?*Bqg|W_>78j1Fmcj>P*M6y<@O_kcOM0RUqU)jLUGy8HOv$@w z;i()+OuJCbm*hZGoC+oNBvI;>A0-iJVd2k`v}ik8^OBtCrRBXU>53K}+K>!G%jkWV zEW?zV@dRZ=64pUU)t(+7!1r{hJc7S_83A9apgVf(X0= zU6!9k;os5j^-01>&};6qDf}zCakM+a)6k9E@EW`uW9DCt8*Gp44-=7O%_d>+M)YWS zQE(-+N7^xPTg(i8t{V+Vfi;{NtRT4*VW!#w$7SM`-)e`S5tOEI|QW53}LvpSYcngOOYTF2%rw0F`S< z+UCL%I0IV#MJe1FofP(G@G5$gso_4j1G<}uy@#uy-vo}rQ_;ghr{PR!8 z259weW!V>K%561S=SGyww*y%gbUERl$u6Pae8-W?Lhl=QspUG+S_ZUo9_YC=aL9R} z)tR{Eq%jfsRMhus58Ocb$S}nn84DJ7j-cErdd}Hma---|&{cK0izv;67EL)2@*osI zD1uM|p$tL=genL%5b7W_Kxl%{0-+5;2gJqZ7EN6{0hHr(S9OC8z&Ai@n{G9Vpxmx| z5AEFW3tdNa0>!&^v(-_o_jr1-gy=LSR(X~YgMSnn%8V( z3fPF*o97txCK*t=?NWM3w2@1pdK5%xBO{sB%u!$&+Tfx@0kGT&fx$#1WkOY~9teF9 z1|SSU7=bVbVFKb32vZPdATEP22Vnui5`+~9YY;XdY(dz8um|A)!V!cM2xky3AY4JX zfp7=m0m2i67l4?< z$uL9{cH{-L{+~Z~fj~I_rwqOpN1ITfMUg@jL_jq=5>?AUJIcnk5HL>$y?}hIj)QzE zL?&dS4~0=<{rMYWanl9Ahv4Q*Aq;_l|Ni+Yj^>d1qd5hqApKht2;cy%W2yWj15|P# zQRM{mq8J+H)^O5!nF)UL+mbzaA?qHc9Zn|5+6R5d&@f@25C=5+jNnctY|2 zM%{3H6yFcF$`eWmMDTwq;A?TTZ6j&`In)H0_`m_LwxU8Mfb?!517;JEBv4x*8b#NA z39z$4g@FM+Bo#_{9!2DOjS}WVGQXk#q8yRLz=WBf534lbkHH=yLRSJOI`FD0tD?U6s1v}pNE7M)DrUUoJt6zjA^gkr)S-6Tg*_yH$r zBpwh+1|DloA~b)O313=#Y5|(uaw0QOJtxF|EpLEaggyy0b|%o97&4`K>&)#t%#9k zQTQ#*3U>cdb(mlS*!g*4|2yJ$WsEqZ1X2NZXoE3`E{h{;C?kN7#>DWM1ZY~?6C*3? z0Y=xv;CI1Xm!eZI03Q<+DgL`&>93;YQ5hA#6eJQ5_IDpQuq_!88j%2lIL`jxV!#Xj zpDOYH%T!`Z*LfjW6TV>Bk?g!#)%bFpn;84J!UsSh8mr(RT_+4wTPZ3ZPe+5FlL%Y|C&(%uZ^k2ofa-P(*$pAOf5sI8Qtv zUlB8tDir$*8%D?dI+7Lb-k)2u|4u@k`(Kt+xnQ{eZ_VhD4(FiGTEiUwP0a;V_Bp<)4`f zrsS@mIF&{i!!;_H{b~e7thK=qpIXDn0MZ-3`^=xm!~bR{#t9=2-sX`4S8pImP~QEy z(EG1@Qx3?BcG^(V>$+*h`*Det%gKBSOL~*ASWygBc2cb4L-8gYr>GJgQ}o4+?fcjP~Iu>oO? z-@D*(>4{YgSiZGjo0a;j+LW{YC7+^!q(xWCpNq%;&Yda;;|_Qi`OjWLs0sSn@%Uec zcyEGz!b=k@fW}gce61#CLmNQJLd!8k@V1f?y&<9E&D10|HVLi<)&IAD;x(ehA2$3e z0_PG<`pn=LnTOyp_U{EL-HNImaJOuM5dz<|ekcFW<>!BARQL|#40s=kPLHiN=;8bT zhFGADlz{2I$9zDY&w$x{2~xmj5JvRR)+Ve2DkN74AW2?gYOuBKItG8 zuu^%kfSqwDALihc#)CzRHUqd{1Y>0kw%Uu}BCooLq(-N~r2TXab^T~T_1~jZE?QI@ zRZjf6;2@k|P^w_{>0-j1j3WMAz}VaViu+Hlc2JBeus@=uQH?`U@At0s=a%-rqq*#1 zr|h&BoI2;lwc8-K2SA&|dM($3)7#Q^C7D^td(fmKHY z__<3H{++RGL(nvR4n}6)5YtkRQAFAz3{lkxb0V@b0*OY&D67K2?b}E)bYA}49{;!a zVz)5*H#hN!{$CGmW%N^*0(-s`7!QTNRw4X5YVMw}S34MWbQ^eQjO0cIV#gTt!ITvk zF#&4>yn@CAf(2YM`>%I$jX^`MApU+@90!I?z*r7*;S&I)37CfV=dSv{VY|+QGOmf9 zTO=|0hkQH;WCJ|y{k;b_iD6u*5&i7~_~3K%66jmGEQV2X2g!oAaSo}yXRZo9z2*J4 zJqehiLy#7v3ke!_o+F|fiEN!44)jhBK|I=s$7id zrYTYp7V#MKq1F=2Jt7~U1n@CK3Sh|#5CPEV!V-WoKM^VL8AVzcBF2zpE+gfz7?C8H zPplav6abzDk{rnPr6327*qEQq=+Ax>7>U_6I$VI!98{ux^P9x*nt~k2GzYE9PSRnd z6esA&P<8~crq+LxKt+1s7K&uQLXVM}wm`~bx!>Tyd@`^EKXH}*{?ulPl))la;KlIB z<#~xQerZ@C8L;MF2w>=o9RgGsdLu}OWnKbCtdPF2`8?FC46vFjOoCw}twFYE3yLfW ze6>bOW0|XpVr&@NfS;(Idn6N<10VrJdm?!O z5eKl!z?EPCzG7kLNdRi^;excOZ{|zTfQueuNWc+P z{U8reIDvMqI$~OUDvH?Th#^)xNTN3(a$qI~NlgCt_84&mC8U9_>JPbt0p#H6ZXR46 zf43bHZ;YvICyf18C(wSNABK4To5a;I&q>#edt$+YpR+ z)NOEb1J1wi6;Ouol7CxIlB5P|)i9I2=mK(p2N+J;eMx-afeZMs?gs!}F29#Ii$V>N zEVzj9!A11v{{3M7_l^v% zNObtovxsv0eI{uqif=)E`|uJB>EFvazX&5g>4sE-JuN{wF9p;TOS1lx)d+XcjrC6$ zv6t=`hv!g4--&;XCE$TMDXMyaoVc$T&dvFMgLwbT>bNsE4hKj2`&y6#9^I*9)8x#Svy)@arf-V9E z8>IVyzT-<_^v8WLyZAPWNOu`EG%rAA1}6ekeKCPC@&!33;7R}gy0r3`D6b$6tOp9Z zYYifTB3N0XR6Mp@4z~j8!U7UV8?>%kNn1^^EUf4PtH7>Y9*DeDld3e{J?R^X9!bZ)V=in~&DN`7?>yYT|1G>x)Td zw5VCE)5x!BM9~z0@}8a9(O>fyckq-UECn#OO-SBJ{^NPb)=?8r@H^pPB-p}b=r{{T z8=VZk>%iU|7G6dJQEIA~QocgRHL<*FSEtVVMfY9}@6u4HWQMNRowucYR8OpYm)~nl z9Baqrx(DyWp4Ppnfff)WUYE^7i?AyF76u>0v)hysxT%RjQ-b2RN5iW&7~uzdki~e0 z!Km%Ls}W5)E}cn_iB`c1mUldfID zF={`7^KLVkdkcC}UXTYZ1tA|r1gR-^DWXH{Q~o0xS?m+tC^`Dc>)rdj>l+Q6E-~0U zzq*RhX_J!JoE%egPU4kmAw02v%(VYNxAw94Z)%scHUjnay4n-of5SP8(KlMJGZ zDi_6L{F=`*BEEflw7i%IY7Du0tKJ$>CFq59=cFisc5BZ@KPbf=e$%MuJDdt-S&C$c z%{cp%nuAkMtJ0V6MD0t@v<`UPEV~5e7Sws{93dPABp|(MR@NH*I#zyd7Qg3bJ9k zi~W`<-q6zy#&LMQB_0fL<423QzgV=4ZMbOlH=86@1x5S4d&LN5tn9aE1ehIDhe# zQSr0O`*&9q;*jrQb)NC4R}#rcX6tUescts-_!I>DdZj4mQ+THKWZteuWK<$AX>%~# zS{cW7DNa|y-8!E$+{eM;EX)CoXQGpF*HPv1or%3Ypu^_QfZyc6De*-ZBz@xYAH!I_`eKVvH}h1$_Nr2t5JadeLT|*|L0g{ zh%l@H-lfZO;f=biq2e&XY3H(Cu*f)@9W0{jf!_$sb;E1xF{AC-EH~(7y);!7S#5TM zMpv1Ki8X66+W(q69&pt>LiB9_{{D?TH~yK|^FoD#@ZleS%J`KADci3L4a{{?i7I}k z#f|%ib&^q4QtA%bODsXcydDD5H@M?7)>}fvb;1|kcgM$XkdjpowHte+zBME}qcu+d#~T;r$3MHvwLUe%*>fHXHMKTHNBH)`$;DehuKj=A|?z5Lxyp>B#ibW=Od@S%o-$q@ywL{1a-3aM)AtTePHTo{WgfHN@AWm=6>5wmJ5G0j$N`1hf`W!e)~pK zpJVS$#>-0&DHE}QJKG6qCT&YXLX1k)3F@ZGW$gQJyDa2Rv~(mmH=miF#E)%EQr9q( z+sVdGHxoT#F*Yi*Ke|d=)8N#2uY)1vYhNS#WQ&nM_l3BC5$~9^`_xvxj_(SmowIu1 zXvW=eSR{*>c=d{*bX;UnNC+oxdgR$+jV*Khq>GqAt>C-MUArD7dt#I`@24G@JGJhnrOReT$&lyjX4pJAmhur zTd1$PPAh#!vGCD=?Av`O<1@OKjfLo;iN?y28818AT*(Ig@B1Jj$d-$(Dx01WrN$~+5v-hr@koghzwy|E}tkxd6_erhJ z4~{3b8Z1s=75Zzq>rT)7V%BHiL#Ey(wf|)Xi`n?`={70 znyfrLc`y02Z%VQKOwl#$q|wB678>%j43GFACtX?PMFmIxKL2#l`)7L+e%!_hvB;E; zepV_U8uBD3KKO8+3wwG)SDlbN%mDsUADOA z@&8&jqarKDEUnjyu|P%tNyV3E*(#Zxnzf;-i@brHDpz!!EHYiL7$197uk^;) zcS-32t86aigHLz6+%;(OgF^im+;QcrCS)V4^)2%_%5Xa#AD1i9>P5U~j#NEdJZ?8c zedU<{6ybg8QX*6QQD)rFo{TSoQ*}fWd~E*8YkE&~Tdg|d3@_)rEhOOfw`SAqs$x9+Fo!u&C(5?Gfb#Mz#mCxVN*~O}n4{q)6deTwW|9G9lAaD`j>dASQP(Ta zy!jR?z3lSt1KX@{io>k(t=qq}pH`jIV@OhToOs)^hI{IoOY`QDfr5?1@Lw?O?^vDKnIrKj+ zk1BGvcQy#@ggS`1js~WyT~6|#J7rAb^o>vWQ>c-YmTQk@f78J{>Pgz??ZMW$)G@y1 zAEy z9ySi0Gm!gszBeeE3tg>Z22aqoQ=0u?ACxL8 zwSJu!k-?&gyQGj5v~}qG$O^^Gq3~?(Y}JnM+8Up%DDQmI2~jXRvis3)d#zWa;i;1J z{9R^)U1D>e85*)7f~(eMr)a}w-e$Dn;xcw*WiZiF>++{2?YDnj2nc>#+94!m#;vIN zAbBowwmypW@HKJQH*VIx#)jSg-xH$diBA#_g(gs2Qxcb(XVf%5S|DTn+;VmK3DW_y zaB;)VvznJ{u9{UXp6}qeC-&}Z-wBCi0WO)3$F4;lE}f)W+7#s$%Q8Pv@9UeyDt{Um z#K<(p(!U%2X;^mtQqI<~{iZsV8_CR@UW&>~ymf1hviCLGB>O5A=?r z@l5nCb1}vXz0P^(H(Bbwlznowb!Fs-YvLIjJHu)jfdsN8(mcxeRgcxH+wm78iHd0_ zYwmvEIJL!i`75c-ciYUc+QUA&ZNqmAPvN3m%7= zwR(no{LOv#Bl_hxrax&Iu9560Z?L*JpZ6M&KYR2CPf?fa+6Te2OG*#3x-tzm+%>o7 zdN+06l`*KA+`iWT{^^=yx<0|>K`CWOGr=N~_erPJ`w=VKDoG9n8jprAk}fzMwVlur z-0AUm`Fhg)Y${R$EVG9fxl_lVnQqnuQE%R<=Mx&v-u}SX=A;D)eU12;*?5gmk~iU0 z6vnK*@6ykq%kLd5i~G#lsj!oR&07cg0_Z1f_VZ#d583iBWBM;}Ncr|vj!@n%>FXLE zBI|T~;k@$M(DNF9Tq2D}>ht9EJ?(75{czkOZ-a5s58>u(IJ&DRod}Zjn)KJHnflx& zGW$KNsEdbxXk<@wL@%EsRB;fC{MH&ac8bYBf_h$ES?%T-ztI;V@p&utxA0WZN8PR8q2SI_H?hF+cAt@25% zSpO!o7arK`HnIF7_PPEms)%`Y7W4k%C^fgbA0BV5gnekXt415 z_n>ciTJnV*&3QI)p){MAy5{MRQrTWMs-L`ZnLRR`xQ>6aCp#|tB&<|vz4N1DX1B!sgb(An7dC?GcUj^6 z3E6)(DCKnIzeunSSIQ~qP7~0;8s2X-kV+wXX7(*yy?2l}o_(n9EbsA+_DH;-YWn6Aswc{IeJ@$#dMQ$-s{AU%DSK_n@bx=6X z3%jqT!EWh(vxg73%v(K6YF|_RQk1*npYK(Fo4A{Cm2vw*puCY|M*uljZh!9Zbuq2* zqM#3tTaT7?Znu=YNhOGOh{s-eEpw@o-#09SyJO3I8n?HAd$0AhU0x@fDz}T^7W3s# z8jrbg3aZ~_Z>fYFnq(_Ye);N7g?O8rhGP7i)=(_1tafzUEy8Fs63!>1J5$XMACEYv z)t9^=68&{)OF#9IVl8KgDW604IR1z`->#V2oh|7;!8E&|fz{F(cbnX`tTrxssxH3O ztk2a|mnh=;a%ylyP50h2m?$%*@%~&Q<4M1tQxO|EJM5Sqc~V3}ztU?)R7KmQLAEhs zz<=hU$*5_qHIZWQgB~r_hh5|$VS$<21_z$a(a6lqNOt(NF^teHEQc#Kw;m_A$y5tH z{HBwPRQpV~d+mGDfq1q&0*l0D+5)@5NHL(e>h(&X7m{5eb*w4pY^b?3PtCA;8ZhlUT4vXoP&{Z90|ZrESn zeUVOU@i;p>N2`sU>(JH2cNUv|fweP(SL_*if3#feTM+y4Ox5`H3i+!;7LAU4`7BE} zlj)bA_Y)n7T3W4_4;>giD)CN}N#`wATxs%h^Y+<8hrRO2TIX<0tTEap0%l;%c9frc z&~tke!z|i;`_bf_AD5L3bEksLzRl*Od=EvIU?P*71a*|z;NzJKPkqcEUKwgKedJzfj=4LI)%8V4s{#fKFbc!PBP~~FQsnpg?qv-kAXS!p( zmhr_*foHJedTXJo>q<5&)ay0FKDhZcuVJxk_jI9;xb%x$QwQv*F)bn2d%R=Equ%cf zeh^EXcsnFdY^0W5Osi%Qb>`vY{c)|HJGhwV$3x4OZ&;@XEsWxhW|OkhZ7FRiU}(eU z17GWIyB>P}_0HReUAKx`Dh}vhupVyHD6f1YT*T3xrtE3eChQQIAo2X;r_;AcNvvft z_hzPXyF&6zscbcv==X+i?QE!A?G_YUf8L9)^sMItA?Gdsy3kdsi`@y$n@mip z{E7l!$ZF@0Z*pL6v*3&vf*8sw$JswvM^i5xUyp6xx{?4ycx^wcy~=x6qPt;5dQ6d- zh=(8~S=SwR#qNZAX7b}v=$y2xo>%cUhjE>Uovv4on!eU9X|1D_`6II;`q0Q7;rQ8s zh2fJtVv$Ni^~p|gqmC8pZCz9tUJ6X1E+_G;hhv(zYlRlHhj7tfVprY871^ED7Kt<6 zW52X?mOQ28Ccp?_%(y4pNDO}QM-!b^yB0B}S*uq%_-nH;Ot~UqJSUo6gDo@3bGppR z*t}2X+Su^NmCe@FsAH}fo5_j?WbK0+I(?0{yF}=Q>E@;~D;uqbJ9hk76|nUJlZ9+P z1imlrJ1IUdIsU@=O+KVz)r(RbW>ZMD9b^rALH1Qq#GFz5OUB($`x{#_R8_$OR+QeK zcE}1DgaQ~j&belP>2*jcL;}vej&-750E5|!BHMa?c zEw=_yEPYm0-|`c$QR^POyTmcZIP%47P$jLxkk7NFhVmc8)Y7Y(vg#dQBg+Qb$kuwzjI3qDAa>>niX7Ed5302;BO>Ryh=F=%sPx-ufRn;W>I=+b5wNml7w}O2w z;%(^*gslrqsYyTMJVb*c2h?k7)p>YmS^1srw${t)x63H32R5$U%!Yn!^HyuNy!Ec_a~v$hH^jy~R2J8h zI=9_{+uYdSE7l^%5k0(}ToRj=log?-_%cI3Z?H-FxXD`OFp+Qkv1YO}$@vsXsREQb z+^>GUu@cg8*puAEQC=Z9E_PE)^CmeJ7rh9_i{#_)i|>c!s@PO&o;M4-aM$Kh?1y&e zcMU?qar6E$M0%=~P3j3vI}a(TqVs+osqglwZEkPxnan(z_Pu@J{@&(-tw=G~V`F+n z;mmNkp;204@*+uIP}@l@Z&7MoSxgx1@Vv45)S6Xi zk$e31;Qag7p(&Ubu6Z`=``gg8Jm=HJNDE8%3W?LIAFk&d3>5Hdb^MXfJaV4aGWxSY zobBS~%IbrpUQ=vtPUYk5@t{(j@>47iZ#y%Q)t;wo8eDA^X{xxdQa4?)|Q#wbgRXDK7%h&)X{|R zN4xjWGKLMQZ09{Nlb=dp)1l0^DZ9sId8#o@qH=+kU#{-b8|k!(g55R2$liy}EO%aS zoVfS}&(Osm6+8aM@ZN_qkpuM?Y(zQB93OhTz+A1%PqK27{518c496g+-Dg@IP|_?| zafP07j>u@~;GnFEW@=Y`%i4zrRnwG@B?2BnmBNJQ?a7L|vFT%bH;+AMvF#aK2+#kL z=}=M^_|~(K)zQrqqvUvq&6|puOXI`v2`9&&4y~D&$ebTNClie(4zLYmsT9vio0^7!HbinZ=d2t&Ij$Gz68#m zs_W`%KC|nRa=E#mwP{~uYQ`0+^SzVUn{gcszUji*7TA~^bvI1*7V9(O=km;=_VUId zDm^Z4cSa|+oG+x)vUOg3;hnCah|*<~+(UU#;P^=VZ=ze~TBce%Rd$qtjl1O7G( z=VmWku9cPLh1Y5*%4iNaw`baJ<#aE1{KM4xYlqsaVi6Qk&9)JGEG{w`Y z+*^m)hMh)*MEH(fkh;d>uG&QdNslx53UUsK(3f#+DZ(ZC+ut@X%Hs00GoN&4m{Z8| zp3ZtEox1*jn&=3DS-Lg(wUXwWuV03Wcq&8na$g^Y9XL;G>%vh_b!Pm8s7Au;9=(@& z>;}BLS5wNOo)LCX8l1ru>ARlqI(D`c6lxW2i!P{fcI$3mhVg5Pqz4i&21C8YMfR`F zi`g{K`U<&yy)Df*e?Pn!XDskUKt$kR=2(xLn<~@w;aoqVjzv4R-Ivl?v>qag5I=2fi*&e@$x~QZ>bMm8(z0q|hS2Ddbc_5{A5PShUA@+CP$*M?+)uSU=n5 z(ZE!Fx-;KPYAxhL6vG!UyfCVmCna{t+T~SuZS5VVSbZ-2J!fdWZ3Z`7be4yUIxn_< zj?B>{U;2cF(JEJ5nXbZ5?L&N)$z-KrJBl6MH~kE|YwVOf$ZP%T1~fuFACBndR1-8? zdOp`7{VdPymcrO_>1(`k(lg!~r#!=oL%n4~QEBBp+wI>?^j$fgzRHy_GjAOYdFSt? zcRujx6Wx6WgBn_e>7)LSa52*_Ws8g|*)n;pxco?m<@&DJxjuJpbPKwXRVh1PkR+n2 zN}F-6YWhGj7bh7zUxhx;T15zLH|fsB*B8Dj-gA?~R4U$&S4#`WbFrVg$Y*JHwt0(9 z?G<(9#KWnTjL{1|l~VR$>tr=O-k$?JX`fpP-1UpCwTM2a^~TUOhJX#nMC#gduQgOV zm(!imha`Ml=kO7NsVUmbiNz1nZ*NHF&J5i?SRRlL$6P{eV~FNm6yTl40qbPPyHlzU7{m22iaXLG@6C07-_P$H>! zi9Ror{{1w>oyvMrXCRiTM%w$BY z1ZqAyR;%WDg`70KSoZoG;r5f9qry*1Yy8ay=~6STNJepK)5+(^xVCzx`lQlV4jAhB z--`ALdexpYF*ED)<28Sv0KfJ+YxYwf<^w^itKVW@5H-j(>=h*`+Sq#9rwG0Mo-FZ} z;nb*F^tB5c+$u!3Z8_8J_#JU6WIbfBBELSPfBY!rC&N2}4UX#*EMf=hFmlH$-mmn| z&&3s5cRXrfVVa%x+yBM5)uhSWpULx3X#4fsN52ZAbne~R?@5{Gw3Vn9ku*bm?Y+mGjJ|5jEbo@wj{PyCdp&_v^2N+Yx=^AY)1VrCR6sx&jvC^yA@Y)HenScy1S-E=xGQaC%1a+g77X zwCddbBX5N+_VtE+J`!i^8REJr{vCJw>E&@&2lSa60XkS;77Oa4j1etj+I;Q6F^uTYG~=T)m&tI~IuAYX?&WVmbe zX?K*WUq6W06u4i2XA1q&()Pgi#LY8edJT2#F<(Uyyca>8$4N_srHZkbCq8)%}XLp;)NV5T+IH*nah zW%odPW~k0F8^k6SpVG}8;5yj1=D!qr`M~R zPf+{$%uSB&pR3?w_S0-2`@;7;iBk6&?b=>8)ylaW`NraP`G+<$X(qn=k2i2U7Vq-I zZRQ^vHq1G#8SEemKSNVMv)2n5<6}i&5IL!@TTEs+u;@<15cpX05 zR2-%;mhdqm@&J27-*{ekYJgvR zhpr)1=mB-5=LK zC{FQN1O=(6x1Y+GkgUe(fTH$Lb*QFhzgKykb&LId6$hDz2)B;SJ?`{=+%Lj9`tU?w zeu{O~mc4uDij<@5Lo05&f2#^@&2-QIviq&AqfTHq_9^v%oteam45^1a-h9sV`N}r= z2GVW$wA4R^=k%iJ+)Zj$lZJ6o7X|d#9 z?zmyx#!nqN?{wbm=tHH0hn=@;iupB$r<67H`LF*_{cQ5t?2t)M{g020i$?~f4;&Xf zWFm@7XOy8*e`(tMOYe=;%Ji&2WVzW;-PN6 zuRn3y$@VbM%MA83TaD}+PqWIxCcEmwTD77s2(`Mf$je@ta(LuvS82VRZku;xZ2m;| zH^CcO5man9@;oS7PxT6A(icWPDfaK#9awgjSHlI_QR5vE8pFHNuDdE%24P{%MhRVS`ze-@0{+o zo2~le2Au2JU_)06;c=1&BTr8mSE!U?PU=}4AZ_}rwsn+<@$iPM{6~i&Mk~ufPdDD} zSn5OJ2b8gE-s4`gP&sd%m(cM-vl6q2hJ$zObrkO;9&9tEn>&&+eUZa-@5urC6rBrx zVbbqbAMUh!wtFIloMmuqw?=K;-=+ZCh0boJ4O*E33Vl?I~lGG zB($dLrYDuWwH(i1q;F;OR-{kUj(u)sOCeQ+)!-RiTggI3?8s zQqOk2`h7UqqV)Bx!Hi9^(y#cqxP@686bwrrk$p#_ z-}@w;C;V13fu6{+FOK(U;HlSW+N(e%#15^u@w?<#Pi`UgmBku}9_zwog|OEf~n* z6@opE=@shoB)7YVa9v9{bwiUQ+MOZfRZc9UFmGNM`c47MM z>QCJ#&J^uaw92>d1Gd5Xn&Fz$MES@17)?@l+aL>@h{3A-0|l>;$GikXl1X79Zr z`cyZmh5aB^b-K%rFaMC!*LwduS42!XFK1O^vk1~iEGMg^GY0*k*?XT_2OqMZ|0sFd*jpHF`&WBcPqh4JEZpLw-ep(yH&iX^j9M= zF})r_$8uDDIV39%ab>wEDP66qtsr4yZ?WOZc+zgs-jZ8RZR@I9*m9-no_FofArE%5 z4pnU7+pkg!Zw?&8rO>>jF@LkGvUNs@?~8!j%af)2uQpFTsP2;?7K=_4%xik97`~d{ zxaR7;LFB~|!hU@3#+$<|d7O&LmEE*W(u}IZ_w#(`OdIN+lsx{LVmiEDJs*`&Ga0|b z5Y%!owo50Oj)OX{n{C31DP`e#Oiz0Q=j+Pd_Z8f0JV#0-NH%cA3 zx4!v5ZnsW2dPLc)uKh?szedc{G37v6J@fRukf-*^Yww?=XrD^0p|J658U%9w-{e^Z z6T@rh4ym5L%$eY3h|_!f%0+&SLM%hCa$7)ljmTYmdn>4FgL&1KXtSvGiQ(eX|j~Bd&1>=bx-DT<;o^BHK*_BSe0`6 zQ+yI=if$0)A8ci5`z-t6oKtndkI>{BMs)|P-Vr#Q^f=0|9`R+>Tr+v{L2jN@U5nAA z?v)0AOxIGNB(|DUDlo;5tZ zG<%klXQ_U)5e?{`2{OWs1RQs?m=3z#|B4%8g2+$m4l?-MxgBoB?YSRtB{9i>{mLr^lWAe0@ zraB(my%Q9_vqxpLilsbUmS*zhn_CrI%v4d}X59*I(s`?>HMxBhJKJiP7Q6I?bZ5vq zAXUuA_nTKyeP?2I&8p&=k*Rkuk@M6&cYLVVWiy^+cp3?H5~ z$a*UB;nOLRUPX)6%j2Agy>>g7G@ZVA zm$cNObc41#x;*N%PVv)h8ER_`Hy%;i`XA9U|0VHi>SsOmir^~=%BC3)kumM@pum+1 z=5`Gu9U|PLr2yko`RtNm2|r^51-y>js*N7593)bkvWO=fbJ3F~ebtyi-gS2>Efc?f zqE*MVjycxdarE*BnpZu}DxC_wNmG-LUQXOvJl9K{P2vT)Wt5Ab2JYBc3=*$JFB~kM!!2|K6?|Q|+aKzL&C;D4v=$~} zZ8*779b@sj|N0~oXQjA^g>`?|L*h~%&1T2){2?m^rr>jPu~Ulu1JN0d_m2>nx_DWa z#SgzUjwP}+TFq#)HG9S~(D`|Lp?Pck2Zd#PJ6R{6K?0v`%1XDp9q85pv7QBKz?#S;#2YT_;_1IoCO*7$CZuY75@z`h3Baw9a_OPjuE(` z>}6Jcu{&%!Z{^s;4>1miDxDi8JJyvu^E zbk_&#bS-(=Do?y~Q_l?v$W|@)efYB*^epbH%gtse zF)HKaaNMpUGDo|yQC-bSvN1J9QR$;2%?}%e{3(6o#^S};Y@#|n;-(o`0?GGZ1vXRD zm@qmh8ZyxuYbFszoDC~{>o=fHCt}AxqiRH4aO%-%F@J{ZgzC}l#uD@*E`CbH%i;ua z%qgzynf-j8%!?*zlEp$6F5^Wb>XDjZr`$}=+uyCfEE8<-;doxfjmV%aQ;&-e^QX5k z@}f;y1EcNs(haqN8}3_=I-fxiL#f}te0mjBF?r{H2D!dw<2{~$7uVi?lrO-sE>fcyarKIMoMP;>ZgH!$~pw0!GazIoRB^SgutLu`Tt{MNl1@5T9eM1|XbmdbzF)xSX=<-t7M=dC?` zvGDRmGC%kJcNM&W+1_?v9w>eBFZgET5O8JnO)RH;z&G4YX1{CvS3gU zl9GoN{BvT?`Qbc18G3m?KE>FgBBmH1(z)VoVi%HS1fDpx(zDJl#;o3e!ut1o`(Rp zP)&a%EV%#NF%6~@S3VeWr`#9zt~;sjzirwqIYZ&d+!{vhg~MhaGe~p{f>!V=t;|iD zMT9P2Ohy`?sg%9S^CajW=g9kV@;2$`ixqP$d9U~Ua>Un77gv5oQ?^0t7axam9Q~Y_ zuCbs0o=j`__}IfjW}ezjirl6{hE0d=kB}W3`w*yq#j-+DXMH>FP)?NL%JtI}FI4mS zH$1iiBBoluXDwD7`;rpz&CP@&)5zh?EotlRpG0@7lM7yE-!*;G#oql6peN{WR)1bdgdx?Fx}{coiymvXWqfEU9^=R9WciC4Z}gZzf& zLnUS49byb7j~?HXCtfag;|Vb=)_HRPSvzw=YxpVPHFHJk#S%3kzH~>rJT+UG5SD4l z+dyPrl$asUbQQt$Fg>=#1zB%@b){et8<{?VAI-sf>qr8{d0@rMJ9@kj z{il)Vq(Oc}QNu7X+EC;&D@82<1~W>CHryHQLw|YG%<{FM75r5A6E{@4B*zEQDPZZK zV~g=*x1 z(<2xP#{;riiKj2G-`^1eLe;fG1Y@M|mozDY1z1aUgaW}$_%}h-)anGQu>NWSO@d`Y zYB*vg6zAQ$IWZVpsHu%W0^(kar>a)cB^cyHV!~lk)0|3$!O$Lp=)TMGRcqT3)KS3- zb}tY-WPrb<1ry{l!CwyJ38oMuQYi%Tu+!D&(+JKWUtT;Sh(TD#vj`{=igh+YBLytO zT}JR4jwUo&Ne~AUu2m8EA|mt82|^HGeQF7g!a=I8e?ee}u(+BCAUJ&0Rc!=0tne56 zaRO&V=FK;PURYoC!|w#&;qk4$|AT-F(UZMKU`q{CNU_*f#GM{8tPS!-nih*ix+Twn z?M6aI!iP0Qf@mR(jif?iq3*R!(gD`H5A@K}8W0OGnsbQFT@~y$;@6fsHi!nc5O5Uh zjX3!IB=$22(t0a<`|K@{BqhXsSvum?9W~)j-UhkHTj1z!b_tY%@%`*IkSSAOs+)?k*-iJ_U369+2Ed zdYPR@@&W17jZBgXBoZ=ZB;|+$Q{^NX;;?YU7>O;SeC{hrGGh1c49Pn}qzfrxyEsic z4CaOwoOIRU^CXstL*I5tD(&FLY1X7Wh@})KQbhta$Crtt;orpK`6#ba$0aDt&T8}i$*ew=!1BM>dv!rx=0exTggQrY986jp;K?)UhW{84fT|FYbroO zHzHM!uNpMxl7lVzKyo;w^>VTt3u2NiLyjMr4ifotPH1b*gNX)`!1gc^RGdt}2aT1> zQ$kUKc=GCxMRLkWbLvvL9HcYVRdQco3Y1tQ7Yc$9p86t$^H?3Xw18mLrX<@x$(3ldQxLPV!o)Bdlm@FJn2Qwr35Ry~X7ZT*p zP#_Ig3pRJ#!2fEAAwWhS8Gvp%JUvAHSpFj-(frPS_&F&4%F<}t15e~XBH>yrkawOTH*kBO~>4O34dJF3EYNCZvk3>?j>Z)Tr(& znZP4cd0+VjLO4RG>`)1JCI7iHHA-r zW94b9y@^z);Fk9SNmKw-0n`B00W<(K0kiV$+85jc`1uy|H1vmz99KZ~~9N+}NNq|!T767LK&H$VRumm^Z7A;C-n22ZRg%{;NzX-=* z_`z8I=Pxs4m+rsqiSRM>WHe?+39w9r|M_t_gqr~R{KO&i$#`zOv;-~mZXzDeYp5S) z`<@y#cgoyriVfL3O%^6e_T%hs6=AL{5=4vewBL1c= z2{a6D)({fs4S#7=XlIwju-IR%)=Tw$nh%;p?yoVZ7K4dgvw>o{9$^#e+td zGa^7>SHKD5@5q4VbUI!K=}*9c&rKf>VlXG3VK7R6+1R-S>CD7CVFjK+mzLv2AZ-#n z6*M#xPYYX}p8-~@pP^P$v+1F3U9?l?-vQ%59^6y}zn4b`#Vq_DsNMWerMtkLUGje| zF_a*Bpq=mW@L~;d%mN+G<n3(VxmGJUZHc&XO36++R9`A>PG!T_j9C zaopIuV4F|^uH^n6Z5=3NG2Re1(Y6Roa4sPx;+JV4t|c`1VoQJ?v4X@Ae{q!@y78M4 z1~YE{K;!a$2_3^ln0Wga>Zsc${hvG_pEzT$2^>5PAoG`_7q?;MT1ZF|+4?SA1<~sy z{nyjoZ8&u4U6K@A)P?2sMB@0l{vcDXbX z81mr#HxFnay4Co@a9Au?L5G$lA^O#LVfb(cWv<54Blfd;#Cv2x@%qg7??8{rBjQl( zUOWjz_#>VHkq@hB+D`|g?FmL({;vQysKN4Lko}K%_|yso`~WsBG*Bfke-ry*;$a<_ zC<5`Up_0mLfaq$AN(KWWV#&e7l+TO-gL!27Z>Y^LAfiY|2F38GW3i+T&&5DT?lJ!x z$mJkZv-(dE$cwlC8%R>9>z)xc)WJbOi9{22`u$JfN^1Nc{p{=Uve@B-|7jGw9xsF4 zNP;OEaFgZrcus;)sAN4}6mm-;p!#=JG2Z|xYf@1k9;OkXvkY!o2Xh!6!5k3?`zs#4 zX@J;%0b)ibO0ra_5rv{-cYK>8_PAeV##w}+YZ7>vSS zp}o%z%j+Rhw|f-~cYzZG2mT$abG)clO+G9Q5A<}?!uy`Fr=+E`jzae0Oo?`L(NCcX)Lrz(M z^os!pn!lHiIV;$x2-Iy2ZZP2`A9lxt5V(_Q|Ht!S2P`RcQ4Q=P@(A(V*eF-j(_$(- zCDf&cM|Ku8M4-`tJF4!5$L}~G<~ggRKMn%(;6GjcV}A4ss;QO;i8C|+E1|iL5_yR6 zNHtX^2E^;(C^48Am3#;jYa&tN!ze5nG)IgV#U6}CDImO(a94atfS6qYN~|QoBWr&T zOcW?aiDV^M2BhbZ0x9U5%k+O0kU@7y@!D9SM97>RFAOb_;?doQS^e&;G#HoDjQ_4W zR}oPW$b<}a@&Xw!w4DmKmw>9s@GP)PT`=)|2C9^a9M6Ts=+)HaK6_AmK7eWa_YmDF zg+&eErb*r_yp!Wn?pI^p74LBdaSj?xgVedg2060 zUvp7q2bPzB%&71R*qeK3V~{)Iu&rS#pmEs>GN%P0=BGwST%8&a7adXJEowAwDKJsc z86}QU{~nAH#+c8Jz}#(sziYNt5h|)xOiBp}8~mBjt$C@V!*2t zp0p=}o^A`uLQfd*N`wrv6zCHbBVL)XE`|zy%8R9>wh9poCGw?ZB8EaZ@aoVwJ6;C+{V4ii#(|f@7MZ{gzTiNAlLM~-$#UZ52m;aX8SwWB z^g9z59@!X)a)CitJOj7kLa%ed6*6+}VcHhYv3VG4tTnu_r~)hbMzdWRRw)92qn+gRT%s zJV5r_Z}u<`>dOvHG?IYmMZlbqkd*tgpxE;Qj)5GkO&Ai9|IIIW0fntlFTQUR$|8TUvjZ zbJ8B=AWr}HocQNT{om4i%?S+`mjH-&$oapWB!OZD(4lJ(0J@tWpzLRm9D0640{Fk@ z$G>+8`pN&}i|3)=1@pE1ZN46GX8HvJ_;;PQPDkanGUWbeQ>>86UBUzwB?a(nrN7Uo zA>g(E&J{61JbL}~=k6bak@`Ki;E&9ZsX|mVQV@^spK}=+@o&JEfE(;c{`SJ51Qq=* z2$r`SmFNR9Y!*Uz_%0uE7XrbctU@_OLTK`J!o=^-QDR4p93{jhj2;ohgaPMj4a&JF zjEcv=MD==<$kXt@9X`@Ij5!Gc6wm!{g?v2#4;Hc#pA`Y^J;%}Z$YB5XSa~ildJ2Bq zV+^YN-x+;&=6~e1zsr$Aaj~*sDBn#{tL0=-{|Mh2V4O$V!qvv+-R4&&CpdvOM`hN-; zAwF3!%-6)w#W_|Cbp0bQOcaOUGblVJi!jky4wXDCFaJLY^ljggb_I0p5jc$eouFc> zsFE~sFhf1n(ZG?p+&8j{?MNA~fxFwxTn75~qH^MEuU?jb}W$W|K7zaW^HWRIG>;Q-!|{pWUZ z2xS5)pR(j?_GpEde(#opj8%lb~py+h(qA@6bZy8_j{}L z=M~kzvA&Oo<%Jr%b_)R2_`B&Mv34R6}s0%Id@jpjjxJTp`*fTuz>K{*?{#dM&(8fgD_O6E8zKm;k^bz7{n z0vYshFCJ~MaZ}H{0n83p5aGWs`p7&Kpr*rMelB?^{8{jJ6u`EL^BQ1%Q4)IKuRsHt zDWVx=s|YwEK?+dFpqvmy9jrhN!N+!}L>x~99lE1H2WAQSml<;HwgS{64yK;f9R-0u z-Y=Y7CAtNi5m5cN_d}bA_kz%iEd_dL?DsuisuD0+N}`B#Eb%@b{*?^$3nm_+RD?p{ zxvi;;4um!MBs@WbibCMP%78jnuMBo^(;SKrpFUm+Dk4CSd;1m>S!u zgv1ZJ(xvn#v^;8nRrTR_1MmV6Ihl$QHVi1CmfO|Pk~9hn5`95*DF3-}t_c}9#{o9~ zOW-j2cLiXC9MsY3o}&($-kL*f2to_$cvd8B-Z{wD{{+Ru_x}|SgPq^9M>Wv-?E!8K z2&4B9mxQ1a4Ll>Fp|kK=un#zWd<72tUFN^+Dj6V!@WP%~k2w|K5!7Kx0~X^!nt_o6vs)M)DRl2HuS#o6#_BU?ja4HX;s%_bF3B zquS^wFTfn9vs{mTDyZtTA9ewiMGL>PqR@2S;3fvPW>RAxf1l;BjV(E*y|rclnF z4%jt~&7lvV%OsGyE}ELxb%EH0d6e@~7xixhCYG(B#3{<(C+|NmW&gcFxl0Jy>*4i~ zk&~nA37G{Ga~~|afA4L&iB-^9I;RJA?xYZpKHeJkG)Nz$fTXk$n%QslQOEjWYF3~T z+JxHx&w{8Q%)*^h1yMKyq5!7#fB!N=EP@aXg3t{EJo1j~kpa*!jr&anFL2Sd7AcH> zUgG}yI^_t&V~DpRoVbfvmW1zr|IE)JL!k0oE22^ude>$|^WQ_L=3&6{_-KUA@nfHi z=#a$`$}62gm%#@A>iP z4f4Oa=B8qdx=?Tg3?c~cJMc+(L*E$Ulb08Q=#0R@((JG?q+^DcfpA9P-e#@=YBIuK zBJ8?uf>P^mm>hs`#^4~?yJm`#hK=#M1iTRMQT!Fc{0?wnfLkYbTChMPM}ge2%Cjg* z-2|_P-O__XOz?i#u~_(17V3(#;)aY&ft)zr0hMDZAkpLCxOiL{C2Od7GeZwy%0cu03Lb!%%_QAR{QTGqG#ejnjWlMnG^v zfPjD(pC-x*^-rc#;%aSu&y6ZF{QBmkwUyx8Cg?V><7S`GC-3LXeeUST?=*T^{R~U~ zBFC|Ma;xs^&{@4G{}tvpFQ9a$Y^ftzbzUQf_sW3;>bd2;!Qmy9L4N&DrU3u&?`ak4(oE_uvR-l3f%Y;q-cptpYg zhRC)@)odWWtbcs&TYdz)tl3RlKb`kc_`r<96Mhyi6olTT8!NE+MEae7DEBh`q-6Tj_v_AW z)x0bW8KdXp&u@vG;CX>i* zyur5hUjF=E)2ZjdhS%7m^v-?{?I}HNx8Lg-qS4YYl>@|rr z9q40zLW}Udx%JQ3x9=obB<*F!4KZ*1*)1MTRC`@Ey1?7oe=z!za?T9bguLn5SEXfM z;k`pl4ehT?$4x8PTQhO9@?`oVH=droU?pPhVbU|Wxob1ia*t$|^(Kd2hMU)84)gnm zz2Ye|BMD6gVvKz3v6UCZjfd`BIZa{QL8bq)T{FJ?VFJBPgsX)OB?qm&s&lTPzsYx& zj!bvk6!NB+ik&fxHEl}HamB;_$qQO*_^KOi0q2CI>y8VS2)LZ>#T_yAEIcBxy*?9k zMZsxoa!BHSLc)-S_{_vN6s@}1THQO^ac<1 zo}{a~!?!fYcjMS%xv8j-F1KIZd@zkyP0I4^WVJ*yKI6Oz#mWZuzW(l-^%sgP!$138 z#F+R*@xLv&FtYK?M}r6Fs5166mt0>Zzdm>WQrw%)*-<4&p+oOdMNU-beWM+pqYfs` zUBT$yR3tXN)1&%pvM~0;y_c8b;$xjBCi?@gQt+Is4YTbon14qSd^do9zTxhCX#8nK z&#FteXf*O2!*iYNdtd9Tzc#8to=cyg;!^)(GX{cwB8Xw$DancMUCjZ1jX2-lFL4&I3Azh+8h^rfNyL$Otu zfH>D-!gDX8J0tG+7o6y%H@Z%Hu<8v-dfOvrHVp|DmW1j3mCe50?-xVDcSH*BE|cGE zi7QZhLi}jy*}|C*>(zAkGFx%iQkO#=$vX3CNu-v7UCBC)p*O*v@9XTIus-eI9O2H- z+z*;({`k@OX(g2%|Ic}bPifDF=`bhKg->zv606?acv*8`iBE;Buqk@u_)_()SDw!X zJ``(C4ij_vx0bVR5@pqu_5nwZPX6vs4=Fd%xO{jMO4eEN>&M6K&2C5=N1RY2OuX^B z;i~o0?aJ<14@$B|3Ci8;H@cJ!EJEsXPNW_*n%Ro|CVKmF`qbvi;{4K^&kL9D8M{1I zRNO9CK1;26LqKLj_g1XAx%SlK5{xmqr0z}rcaeNzOgE_g75a_$-i}xeXyG|5GYl;% z#!eedeCVsr`~FyG%i+AwBTPFkMmS2Dx>AHJN!6_QjnAc{MXG{z^Kbm^v{d~!sc*EM z6zZx-m9Wg;T59fSZ`w4z{XKwb`v5`RtTR{UMFRZy&jWO#tk-pPBt12LQPEI^bJr@E zk<4^S5{;%fhOPT(CQ}o9(mJAec#o5I&*0VWC=sRNYzaX}8IfQd?q-yFGH&Sn8j1Cj zO;4A)MBhPt({!^Sf7*#+rTd;lmemt(ch3=?tyW{O@V!**EbDFgxui{9QTtgtUXKCyjzcsdxz%~NO6 zdVdgCb!=0}D%4rEo9l+cgN)J9`&}E_{?nEf`O{za1A7XSJjmA0y)JpFa6cODlmKahF2&L$y{eR1oF=#0~N9>*8i z)OksK=;R8+v3ir*!iYdt-NzL=HezJhkCtIV9VTtKOjW2~C3@5O&(NS565Xhcg z|2TB%;|0$MU!9U`S`obz*CZHDo_ZK6RZ}r|aWs!_h2Z9io{Gkmz8@q!Wi=O^e%{M} z76|>?a!}&fvbsn+FIQBUNU>RXpimsj)|@t%OuOPxEIFe1pxS42ZA5LnCiF=WF1}?z zGp@_F<2*n4g94#=W!Cpz)+!NJ+fEr@>7p!bxA!hox&C0d`=DDT=37O1jpTktJo9b_ z8O>-e&!UYxmTfzfX!+|lvC?4h&AF2Iv!_Vao*i5+zEtHf+FbuQOx?9D%<<(X=b8Hf zlVxHbUOmVy|Gby#t1;JZG-~+pB>7`psWQI*N0(|y>!MwZRqMP}E3cK!f?`YSQ8_*B z!*Lr8*yANtY+=EBA#c`S_GjtrpN-jjoyf-LHD@xIef}Lye(lAk)}LRlXxwmN%B>1g z`$jYFKJMY*U|Zs_HTL~l+NllCMpdqPoLI!JSBUB_|L1*Qk8v#b5H=jReatF6^pneH zLQIlFy9hxar-$Ti@-H7TvU`h{T{UYITv+-a2@Cq`SBYrSnLP*)rIwR3VLX1>vbR(i zum44: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 F0RVgLwfX=6 diff --git a/src/__init__.py b/src/__init__.py index fcab370..5874119 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -136,20 +136,8 @@ else: TEXT_TEXTURE_OT_export_presets = MockOperator TEXT_TEXTURE_OT_import_presets = MockOperator -# Conditionally import text editor operators (PRO feature) -try: - from .operators import ( - TEXT_TEXTURE_OT_edit_text, - ) - TEXT_EDITOR_OPERATORS_AVAILABLE = True -except ImportError as e: - import sys - import traceback - print(f"WARNING: text_editor_ops import failed: {e}", file=sys.stderr) - traceback.print_exc() - # Free version - use mock operator - TEXT_TEXTURE_OT_edit_text = MockOperator - TEXT_EDITOR_OPERATORS_AVAILABLE = False +# Text editor operators removed - feature deprecated +TEXT_EDITOR_OPERATORS_AVAILABLE = False # Import UI panels and functions from .ui import ( @@ -182,7 +170,6 @@ classes = ( TEXT_TEXTURE_OT_duplicate_overlay, TEXT_TEXTURE_OT_delete_overlay, TEXT_TEXTURE_OT_move_overlay, - TEXT_TEXTURE_OT_edit_text, TEXT_TEXTURE_OT_open_panel, TEXT_TEXTURE_OT_save_preset, TEXT_TEXTURE_OT_save_preset_enter, diff --git a/src/__pycache__/__init__.cpython-311.pyc b/src/__pycache__/__init__.cpython-311.pyc index 6e78b2c3255a4d4ff71fb299a65c6c5773be5d51..2c7c7ab683ca8a9c4a061a4cfcaf580a7eeb286b 100644 GIT binary patch delta 867 zcmY+C&rcIU6vubE-SV>n))HU~r7h{&0-CT8Q9x{kC@7Zlv#cU1-Djy#sI$e0n1Bc| z#DkGJL4x7|HPMUNgE5jQ@!*e>!32_e(8Qx2O#BC&sbJzu=Cj|o?>m|ICUbw}jVe7h zo3l9@+p9lD_E&M-cb4phxGR2_JeL;u8P%+ojh%}Jlt8>w>5K=JV7yD|igzpB@gAiI zaZxVZ3o_I~9n`~7I0g;S2u*Mtn&AZazz?V3G_*h~v_U(Zgfnm!Iv@a@5WFNReX4z) zQ~K3%%8=@y8~{aijv81GIM={|7*fi9OG%^La0j z5TV8m@;ZMGmFWJ0Eu+Qf;*$CQc5@XRt|e08A>$2U%}IRL1Ej%{PZlkbzEb!Qp={Dv zw1Vo$P7!tRYsNi??kcWDXq1FXnoS6CoVGz$OYRBQom~4CsSz9Y`3?N0+3RcKH=6{% zflP}Y6d~*4LDOY=Hja_c;*cQmlptYuHHwnEZm}5XCXXE_=?6DZqy#MjNsMDGy~Z%hz$V5w83q~V7;Z8AKQQb1Dqsy%e1%mfNl+?uVkW03 zJjRrez!M2Al`#??SI6jZ6Rb8&7Ns&_naU#lne@|u&XZ;D6iO0HF71n;2dcM?^m!oJxg@)mow(6lK+ovBDmHIxX6H2i4@M?25`oMn|+`C{@!oj z{{Cd2;Lm1S9~q5hfDd%z_nBwM0r*WAd&9gd{`~fv);sc~0bnC;h`t*0X+8*Wl{Ogf zX$GXN1<)>S2$y0*6l$=z4r{{_AS2j9h8}`XB?4#9?;ZM;^$Q7rFZr`GAmBTPXZ>rF zhx#EPCp915uMGwPHfTekp*TNPtV?hST$O`h3Gy5oqoc8a7Kn{$W3h2H}McJIZNIm1LPbDkTEhoZPq4m(`}$l;$}`Aw{T98 zFt*JVGo$->RyuPc6SSw^MC%40%$fY|albAwI^xy`{W`&sq@E;KlgmfOTq8b@udmB0 z%%WqS>hlW;Yb3TXPm|W^a3o4_m(>AtXqw9utVlzJ@D^;b7nL_*RVrBZ9KCe986>Or zIs*Xj?91#-b(<=I>&k2sZ&B*w>MaNXo2dB&wzEP_o6KEnAyaDL@JR?`?3U?uwGsl5 zc+56UYshlXlVOv!rz%|C@>8SD)hR#iR9xNcQLO_Kwq1Kfjq+%8j{RMGt$LEnoH5{W zkG;~XpY!WsjH%8Z)Y&Z;#ioeBlt80Ey+BML&N6jQ6$^Qpspb~7_?EJEv!(1q{`P17 zBpj)r`Ev=?-7{p^Uk#haM){``Hm_OUGArK3)N{*Y1yXk3b{t07x~yf4r#cFBn(rE|hu7Pu)O%A&Ufbb;FfcLe@hRj!nh zMM4t<(}eIYu^aY7O-UiIaX3&;S)lwM&6UiA<2Xtvy)1l~eP?e_9&%|<{bK(^f^V~D zj(6Z9d*kQ|TuMDTS`Aldkh^o1;`MR&di;YU`rwdz#KpyV-4$?o23$P@?w#|By%QDW z)I<{VC^Rk%=}Lr#xS$sVCIpIg6-$~DW-;k2LWx^NMdPVRi*~aE&ie8nxa9W&BtB46 zUCtM1McoITc}Y^#JorDTp!HZ9HS<}>mK?}~68^=%$fAl>ulQxr!SvqDBEzaXUDo;a zFbALCC)StK$h(ca8RX?6i)vOq8C0{4+D#c`N+Z*+R%aU3XYIRzcEarjEffm*N*+|K z2ig9PcVRvIsN-1aYxU*QYDxYK`>|sbo@S;Kt%olP3 C0aA4U diff --git a/src/operators/text_editor_ops.py b/src/operators/text_editor_ops.py index 39f7c84..55afef5 100644 --- a/src/operators/text_editor_ops.py +++ b/src/operators/text_editor_ops.py @@ -1,7 +1,7 @@ import bpy from bpy.types import Operator from bpy.props import StringProperty -from ..utils.constants import has_text_editor +from ..utils.constants import is_full_version class TEXT_TEXTURE_OT_edit_text(Operator): @@ -21,7 +21,7 @@ class TEXT_TEXTURE_OT_edit_text(Operator): @classmethod def poll(cls, context): """Only available in PRO version""" - return has_text_editor() + return is_full_version() def invoke(self, context, event): """Copy current text to temp storage and open dialog""" diff --git a/src/ui/__pycache__/__init__.cpython-311.pyc b/src/ui/__pycache__/__init__.cpython-311.pyc index c087d2aa6e913286b14f5b4a2bb0f181cf0c2a1e..bcdf74e6a8a4130407ff2065ee4b0265eced7270 100644 GIT binary patch delta 20 acmcb@d4-dEIWI340}$vpzuw4wk_7-djRm&= delta 20 acmcb@d4-dEIWI340}w3w@O&fpNfrP=EC!PR diff --git a/src/ui/__pycache__/panels.cpython-311.pyc b/src/ui/__pycache__/panels.cpython-311.pyc index acf6d0210900b8f761de46adab82d8c6d2c91827..3dee696835504026c3888feaef4355c84f53bdab 100644 GIT binary patch delta 5166 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 aw#4U?+<`VkC>%{3EHuDrECVU?|5aA2n02 zRB3lv-@XV+&u0W7)D+ba{HXzrq5whGiX1(eoOA6RSS@ zE^)AV$4W^*t2UxE`gM+l%jsU6 zJ1XrseZL{*K5R<}PqWO)Vt#q07g@_>PI5nl4E+-hp|(~_H2pJl*zja-i5%VKfsbMQ zL=eB1&O5jap_{!q*{RTZ2k20;haEnjqaGz}czde!!TGwF&V4v{CV=TLvC9yCIBsEd z1$_YL@bCIxVe3JJ{RnH(AO{Ewyjd|^kAlMpzd^VPLsK`_C$Rq{!giehTWpOXV64-p z5V{b?5ir8(5d=TNQ3Q->dJJJF!f}KX2#XOW5LCQWU|`de(6^ZXAJH5h$G0Mj|0R$u zCi**EgLNl7jNVA2t1u$ z#?~tcuOhsLaDm-+sc1S54_zuIE2Y;irA8QT2ts284??&x;&%ak8<&1xV!V$72+P=# z%WLv^VsM!nWN;s=f}>c7%~B~xI2?kn+u?x!n>ls45)$t3msbs&@T8%8H7_GJlx;-t zBk($eAIg;1Aznauec_en8V=yM1FsVl?~Y2f;RS@3AYPWZlX#)wHHPQ&I|S%*@;9XW u^~fdtK4HM)T1r0wh47~mYuVK+pRvpD-wFQ*QS_y12Ife?56%)T9{j&ZBJ8dJ delta 5679 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 diff --git a/src/ui/panels.py b/src/ui/panels.py index ab25057..a59cfae 100644 --- a/src/ui/panels.py +++ b/src/ui/panels.py @@ -12,7 +12,7 @@ from ..utils.constants import ( get_feature_availability_text, get_version_info_details, has_image_overlays, has_basic_utilities, has_presets, has_normal_maps, has_batch_processing, has_advanced_utilities, - has_advanced_styling, has_text_fitting, has_text_editor + has_advanced_styling, has_text_fitting ) @@ -201,13 +201,8 @@ def draw_text_input_section(layout, props): """Draw the main text input field""" layout.prop(props, "text", text="") - # Add multiline text editor button - row = layout.row() - if has_text_editor(): - row.operator("text_texture.edit_multiline_text", text="Edit Multiline Text", icon='TEXT') - else: - row.enabled = False - row.operator("text_texture.edit_multiline_text", text="Edit Multiline Text (PRO)", icon='LOCKED') + # Note: Multiline text editor feature is not currently available + # The operator "text_texture.edit_text" does not exist in the codebase def draw_font_dropdown_section(layout, props): pass diff --git a/src/utils/__pycache__/constants.cpython-311.pyc b/src/utils/__pycache__/constants.cpython-311.pyc index 45361a9ed39b8079427a64b2b7c2ee53675ce1eb..7fb46e3dc08dbafb2b6558aab22c0d36ccf6dbdf 100644 GIT binary patch delta 1688 zcmZux&2Jk;6!*k-{IOnplO}f7PMieCb!|5gK@t+xq)`j1MF^;ttv!wx)*qQ& zw~a(a{sgQMs!-{n2UKy+flJ}s3&IgbstiJ0;KIeC>4xk;I!RVysTe{e_pikIi7kZPw?*Y&pyUf9M}07x|7q-X%Q&(#lCvT#(5nz9jTWhXFr-AS6~#68qQJ7&WMAur)Y& z1C}8H>^goI!k_Kz3)3xOy6KvR^r2g8ffv{8423X`N|lvWT`8+IgRO&&tN%B4XJ1IR zgk;l|>>4`^%)V}CYy^$nP|bWvsj+IF8irQcVy}UVI2-ma6J?%bO2?b&I#oWMlZg^Y}7)KM^)gSWo}p(UH%+ z1@dL!4l!l^U@*pi9VwCke|0oR*EiFm)tpvSS$)7ZK#O6?*hPd(2v`(`J;yc?FbkIN z4Ces&xdeahVDFjcOEmwnVGO|G6u#8XXxy*B$0x9iZ9W#x20OAC9_%;(cCQ@7`DQo= zMQel~pPma^B;m$>xXT-nBuVUj6S+XLn4`AuT1D5&nn??6628;!cAz`c6mzFWnU%;% zJ|SnXCqd4pQORAefr!0_d#6q->;j5#Y(W_B6Kwy}~>2SlC&1Ej?-R-@n^k$b9&b?*w zuni-BfaJu)Us-%Jn=cw-eDQ%7qc2NJ!c&b|G*M$rW|b^4i*bIxx4j*M+T?tC&pF@E z_s8d)^Zj7r-^swIfq>ryzt6A#p8IMu&`BO{4m|L0xGpC&>AXuC+7ik4goOA%O?Lxj z!J=$PD+C-985yMs5AUd%WQZMr~4xEzgxP=2_E(K*%4;= zHSg^3=m8^`mSc<5a=gnKMO&n@u0nQW{3o01_1)=4-fdED%TmQEGAielC2A5_6j?vN z>r0R+{+n+U0(G^TJrl6*Y+?W*r$FIVCY#}(wI;yuPhpOG{o~;ouy`WvbN)D)<5_=C z&FC92I(g7Y5IV(Euy_WB839;#{Vc>vM+bKVX;+X+ZV8mZ5F5hq+(9;&S94ls)TEZl zo`;ol=qc=YdUtI{=-m~1OYUCV5gTdbB!q?K3v5X-=Hz8oP^oF^`9(I*PX?UIZv`gLHe$w*sc5T8UZt8`v~)wabZRmz;WZfh z1xf7)>0KdRa;Iy8sKN2cMo#T?>P}5-&A@bC26u13U@sw5C2bF-4Jt zB{QdJl*x-UPnlxjo4drg;E4I|Zl>RH{gP>0Kq=?YeL0m0UR4xP$T^{S|6 zMKl$wT|unfb5S=%WmVA)C1cPL){V4Aq3kQPudA@v!Lo?fFIFSXw0|^k3_p7Sq$ZYx zzj8A?S&5We41GzrOy{lfN9}RX71&?n-A7UhY&Y zLO|W@k{GruNPiOk%0Z`%sHmW6Ho>9@odoydX0A{)G&s4!wYbwYWTT*7Wh(67fMHsE zKAMXBa5Py-1Y<1~7r^?$1ChTIorXuZ9sMqh{pyLX@_y{N2d~?Qd^^@p`nGMW5FUlU1ITy^j@lhKN+4*o6@uDI$j!S5#q+*tU3bbi%T diff --git a/src/utils/constants.py b/src/utils/constants.py index 37c49db..b1f7aca 100644 --- a/src/utils/constants.py +++ b/src/utils/constants.py @@ -20,7 +20,7 @@ ENABLED_FEATURES = ["basic", "preview"] if VERSION_TYPE == "free" else [ "basic", "preview", "presets", "normal_maps", "batch_processing", "image_overlays", "basic_utilities", "advanced_utilities", "advanced_styling", "stroke_effects", "blur_effects", "shadow_glow_effects", "shader_generation", - "text_fitting", "text_editor" + "text_fitting" ] # Version-specific limits (applied at build time through file exclusions) @@ -114,9 +114,7 @@ def has_text_fitting(): """Check if text fitting is available""" return has_feature("text_fitting") -def has_text_editor(): - """Check if text editor feature is available.""" - return has_feature("text_editor") + def get_max_resolution(): """Get maximum texture resolution based on version""" @@ -138,8 +136,7 @@ def should_show_feature_lock(feature_name): 'blur_effects': has_blur_effects, 'shadow_glow_effects': has_shadow_glow_effects, 'shader_generation': has_shader_generation, - 'text_fitting': has_text_fitting, - 'text_editor': has_text_editor + 'text_fitting': has_text_fitting } if is_full_version(): diff --git a/tests/e2e/test_no_stale_imports.py b/tests/e2e/test_no_stale_imports.py new file mode 100644 index 0000000..e580edb --- /dev/null +++ b/tests/e2e/test_no_stale_imports.py @@ -0,0 +1,103 @@ +"""E2E regression test to ensure multiline text editor feature is completely removed. + +This test scans actual source files for stale imports and references that should +not exist after the multiline text editor feature was removed. +""" + +import pytest +from pathlib import Path + + +def read_file_lines(filepath: Path) -> list[str]: + """Read file and return lines with line numbers.""" + with open(filepath, 'r', encoding='utf-8') as f: + return f.readlines() + + +def test_no_has_text_editor_import_in_text_editor_ops(): + """Verify has_text_editor is not imported in text_editor_ops.py""" + file_path = Path('src/operators/text_editor_ops.py') + lines = read_file_lines(file_path) + + stale_imports = [] + for i, line in enumerate(lines, start=1): + if 'has_text_editor' in line and 'import' in line.lower(): + stale_imports.append((i, line.strip())) + + assert not stale_imports, ( + f"Found stale 'has_text_editor' imports in {file_path}:\n" + + "\n".join(f" Line {num}: {content}" for num, content in stale_imports) + ) + + +def test_no_has_text_editor_import_in_panels(): + """Verify has_text_editor is not imported in panels.py""" + file_path = Path('src/ui/panels.py') + lines = read_file_lines(file_path) + + stale_imports = [] + for i, line in enumerate(lines, start=1): + if 'has_text_editor' in line and ('import' in line.lower() or 'from' in line.lower()): + stale_imports.append((i, line.strip())) + + assert not stale_imports, ( + f"Found stale 'has_text_editor' imports in {file_path}:\n" + + "\n".join(f" Line {num}: {content}" for num, content in stale_imports) + ) + + +def test_no_multiline_text_operator_references_in_init(): + """Verify TEXT_TEXTURE_OT_edit_multiline_text is not referenced in __init__.py""" + file_path = Path('src/__init__.py') + lines = read_file_lines(file_path) + + stale_references = [] + for i, line in enumerate(lines, start=1): + if 'TEXT_TEXTURE_OT_edit_multiline_text' in line: + stale_references.append((i, line.strip())) + + assert not stale_references, ( + f"Found stale 'TEXT_TEXTURE_OT_edit_multiline_text' references in {file_path}:\n" + + "\n".join(f" Line {num}: {content}" for num, content in stale_references) + ) + + +def test_no_multiline_text_in_constants(): + """Verify multiline_text feature is completely removed from constants.py""" + file_path = Path('src/utils/constants.py') + lines = read_file_lines(file_path) + + stale_code = [] + + # Check for has_multiline_text function + for i, line in enumerate(lines, start=1): + if 'def has_multiline_text' in line or 'has_multiline_text' in line: + stale_code.append((i, line.strip())) + + # Check for "multiline_text" in ENABLED_FEATURES + content = ''.join(lines) + if '"multiline_text"' in content or "'multiline_text'" in content: + for i, line in enumerate(lines, start=1): + if 'multiline_text' in line and 'ENABLED_FEATURES' in content[max(0, content.find(line)-500):content.find(line)+500]: + stale_code.append((i, line.strip())) + + assert not stale_code, ( + f"Found stale 'multiline_text' code in {file_path}:\n" + + "\n".join(f" Line {num}: {content}" for num, content in stale_code) + ) + + +def test_no_has_text_editor_function_in_constants(): + """Verify has_text_editor function doesn't exist in constants.py""" + file_path = Path('src/utils/constants.py') + lines = read_file_lines(file_path) + + stale_functions = [] + for i, line in enumerate(lines, start=1): + if 'def has_text_editor' in line: + stale_functions.append((i, line.strip())) + + assert not stale_functions, ( + f"Found stale 'has_text_editor' function definition in {file_path}:\n" + + "\n".join(f" Line {num}: {content}" for num, content in stale_functions) + ) \ No newline at end of file diff --git a/tests/unit/test_imports.py b/tests/unit/test_imports.py new file mode 100644 index 0000000..0426149 --- /dev/null +++ b/tests/unit/test_imports.py @@ -0,0 +1,48 @@ +"""Unit tests for import integrity of renamed/removed symbols.""" + +import pytest +import sys +from pathlib import Path + +# Add src to path for imports +src_path = Path(__file__).parent.parent.parent / "src" +sys.path.insert(0, str(src_path)) + + +def test_has_multiline_text_function_complete(): + """Test that has_multiline_text() is a complete function with body.""" + from utils.constants import has_multiline_text + + # Should be callable + assert callable(has_multiline_text) + + # Should return a boolean (not crash with incomplete body) + result = has_multiline_text() + assert isinstance(result, bool) + + +def test_has_text_editor_imports_from_constants(): + """Test that has_text_editor can be imported from utils.constants.""" + from utils.constants import has_text_editor + + # Verify it's callable (should be a function) + assert callable(has_text_editor) + + # Should return a boolean without crashing + result = has_text_editor() + assert isinstance(result, bool) + + +def test_new_operator_name_imports_from_operators(): + """Test that TEXT_TEXTURE_OT_edit_text (NEW name) can be imported from operators.""" + from src.operators import TEXT_TEXTURE_OT_edit_text + + # Verify it's a Blender operator class + assert hasattr(TEXT_TEXTURE_OT_edit_text, 'bl_idname') + assert TEXT_TEXTURE_OT_edit_text.bl_idname == 'text_texture.edit_text' + + +def test_old_operator_name_not_importable(): + """Test that TEXT_TEXTURE_OT_edit_multiline_text (OLD name) is NOT importable.""" + with pytest.raises(ImportError, match="cannot import name 'TEXT_TEXTURE_OT_edit_multiline_text'"): + from src.operators import TEXT_TEXTURE_OT_edit_multiline_text \ No newline at end of file