From 00daebe4f5934879108b93e7ac87861f4abd0979 Mon Sep 17 00:00:00 2001 From: ValueOn AG
ah1t0)ph(uMmkEudeOL|fNJztUAwcYv0 z`Cm`aI+m)xGq>Fa2moN}00000000LN0C&$~l>oT2_OK9W1+EgQCk^Smvk-6k$qrBIhTAWhWtRR zv&N# -jLqJkvv2x}o69 z1eYp+ER00whFG27ul|vIGk8Fa1Y#(|y{k^W;stE9y?|mhi2mR16C0jGLSwV4eevfZ z^w~YN=X2~9h+|JArGB$&J)L}eQuH$3BegxfVrP$8n?p)|kRTG(J7{f~o{_=oc3gr7 zHj(+`6D~oa_OdDg6$g4~yi{bkKOLBt3M1xIxLp`fHdL?}OQI9=YJ;WFpl6mT_RKO% zL@g%PAZeeeWIggc9V`AH DEx~YC}&Uk%?sE1)qaTvXCa# z+-VG67nrzM^XDxRCioE!{?QGlu4GKW)YODbCViIPOTW|Cx(9AfTz?&-OktA>5B;)( z3ZI|~^4xfE;HACe45;lE>;Y&d9C6$}uLm@Xkgc{j{AWiI09)Yi;KZ*KU~z5sRRxJ* z0& MW^*y)IgJ695tl6pgMRywv6esU@ *FG2 zo3W-}Bjo49$qCB4r7EhM03fU6*|x}s54q~&gPG%7oC5%gbjhKUJU}=@MKbk)F!hn0 zt4glWWX>D`ObQ~fq%JJ86qNQ1qIiX;g44kbgFzskoF)e |UQBeDWss8VMvGHwQy%ze9&es*ylmijxX_TU$Ch%6e9Wx;l@Ct)RUR>iXg! zjX5|iV#H`~G2N=5X(R#{VZRVoi4Tv|GR#ul`Dn~dCbb|~5>#94pm+DI9#*(i`|x{y zexiZNlxc$p77w3nY~2j3eHZdS+-gxZ@^p*zq2+G@qb@l4)-~kZKBZ&N-25{_36AB- z@V^h%MX@WgRO3DVk)+09xaV|26Y#%V_nBp14R89gBU4Q2h>JrqYApdMO>$$SzdHW& zHNj;pe-bbRss #yYUEt3}oy8OY yo4oL1L6Tqa!NMSl$Du%7(0e zU`tZ5md08e9wv*3HZ;@Tz!)8Z;El^R nxJLV$^5IqCER;Ba4M!V0 zKewC5p4Z ~X*|>^1P zPgt60%k&(}?W;3rVxed !PYe{Km(K@06=_ zG?Xi@={ld=H`J!3|0K=;{*&I;zvzk&lc9&by)A54Rp{c3tbm`%P7FK}tOvwa|2wAMY1$TREeVFV^M*DW#^?rNZ+B3!Sg0NN V7nV7-W@OG*6`)ojQNqFGr*+EP< z;zg_RfZ$rgsN=2Y?WeFlOgB<~B*qo5hRGjrt0g+o?e5qdj^OB?McOSUyD&KBnSM3k zKTMWZTb5}!Znz^)R5W`Ld;9YK^uEy#`In`$sJ3Uw+a+<@fpK8(uXnurE2#^kC@n41 z>#Ty;*0;MAckoxRxJ1s4KPJKi0M%7OE`IEY2W2%`el+Y+a2+h9Wx*zMoRT*%Y13;> ztyFes7Tvu8JC{x|^WK)S<69k@h}ZoUt+$fM+rrtCJYy{<+Xp^AIB=E%ghcVe=k=5# z9oW(nzR9y#cU!oG+>k9zqg!?$4LFAzM5>|+**qC5rc*eFOV*xD`&U^ZWK;g2a~mZN zR4v|6sj9JC52kr{b~PUEsPFnUPL?%Z0i-D`HkYFuyAPnhSIF8`>lmz_WPhwku_;DK zA7-S%$5s`wI^UsHFt6WgYKHys f ?F z+GO{qBz^6@8j3ZMKjll~A9|~Ly+>3yncEihzqx-LZcGwbc6hj&T1V1~6AWq2B;hS` z%tmA_2bV%skq~csKDiug63z=YL^=mRNJO~zc-?3+EK;;k7 zXHf?xu`Ir%y>7aI9*kIMhW;ju+I=CDeoWI1OKOFZE=&_1b~H@xcudqI z4*xQ0>{vQ=f8H}>%M_F@!*?7S_qV&gf#z=UMwe9!KdcM;`{p2c&4n)fvFpm)2%C5u z*eqnRN#~ZJbTMUXVO6lA00` rA$M}^x~A#f?lMbXAq#d~ zQS(Svst~|5Ochv&xal35@mWCXpVQ>L?bCKam ^lAaF~Gz1(Q5po xgJZL4etV2v<`h%YJ#6K(iAttCL`pCN(eL?-Y_^sirD|Y|f|B z7hwA M^I!?5Gcr2k) z8kus)KTjF0O+yz&8?xDS%{9h;E2&Iny$;k8_~Rtnvr^j@CoPCenK-`hz4)nF@1d@o zM62$xy(8`*flQ_TgX6;mw6{9!3Bx+{I%P<$qC_sW*!8h )T--~rLWvv7t|L) U{JXJ`4Bnb0^z+oClGyCnr! zy%P9FE11(6CLxn%D @S@m-B5 z?>Fi8;CHT~^<_3 NJSg#jpBA=-}?J8?wNHfT_@ zYFP`PdwU@jx*B6QKP#-MS;^Cf8VRuBq}kTM|3SGz)HOTp6Pd>oO1fIuin~QHbjm)e zbQq1ElU{>ON8=M5eQ(iWA-2-%vTmxR2vBs3r2So+5hi2+u`28SfQqs4fxYqwOb(ju z(e;S1aZGzg)@6PNiyvQ0RdnY&YVgK;f%_!NQM{#Q{S75uPK?s CWvp7*5tRw9zM7MKcALZgC zOOP$4aaFC{*QyQPk|>$OQU8e48#9*^O#`kp@;{~o7xC$N=R&sl;5CYa )&gK;ms+FadBv*VY0OE9W$!Cg~&BAD_+yv@}y>hS|G8l^O(3@ne^f&em%nr 9P}A!BpDDPV0BtotjR@Gw^}%AL;wmi6}DO(=SS@spO0p@-Nk^5g2Ouh>ISS# zL|QK??;P!Nh9l^&N0SxgFBcl4Qa0W{-U%gDd6S^*0ETjEc|x ;lpIt3`^)`YcHQnIuWg@pRfL-R%Wh(=p>Bjp!zt4Hr8JMY$ z^R9xFiPMjw@|BAE=S2 aDXQk`-(sGJk90*akH&$aFU+6=bzqlEr<~!NmUALMp*PmqTlDlW-8K4 z#q&UKZ`Rr>oh+gbcGm=}=_(ONm;Dm4Qg+cszwP=$;;RJaA%bb;G-YFe?5*x1yMvzq zg5bF9JRF^?4G$F;`j979kp@Ff5#bLEC5tbI3X%4##jabA>>RyeY~a~Zi=r+fHE2b) zp;s)m-59jyOUBXKh)RJga>zOi!Sjo6jp-GG5b#uhjs-wz0{WWhJ35}fb)u{$|634= zoj*?1^r5wN|H4)w0xj~1=Z-AzDY6c2Amk5D+afim&tX#p6VohT7;4|6G5f#U4 I0OssJAvGVva)3m_TfYXgKW+ z@s2APtoozJkL0Xz{ZyuFcSm3C5NiT>z+2m;AM9*&PM3&8M;?Y9e5(`RztyEA_lGdP zFjG$nzJxt>tjN-=9~1xefmCvCn{c=!R%E<*{{M_F=_SnQqv#+{e?pG%8YNQi!9O zkeKv&IFr}YOJ^fxbVDi_NeHS9Ek>6iE`Sz w$%)%}Z#LU4WeRY$*K}n3TFp|7 z$dIaPUWE(|;NZky78(`Q!xtoE!SUpw4+m)8_$i?%mx6o6N%x_eh<-V%R!=h|KMSoV zP3 OKK?w@{J>m)WBcoXk1Gx-yS$v#GISOLqOE(4>>NTvv93VDkpRVJltM#Xj8 z>S}8Yiq#5jeMfFCQS&+r2gcJ=gz0&-3nlKZX*ho`N-#J6z!>!gMg3pV@<~$G6S44w zML?uK#a`!tP&SQ$&fL2#r8pB|q4 Y1L zazqRrnJg_LPf{1H|KNtZ5cGD3Lge*{V0m zTGf^pOuMkegmr%au# a AC>3tqtf!3tzUoK@%2LX*%=Uz!z7xOD`~Tx8JG*qjoz7VPrSR*h+x9 zh&&;4^0l7r8T95Z%ESTrY4+olYQ%f;gqBy_%k)X gE7M)*{7)7WP!Dr9M75cKC*a%TjWRlliEk!#=pUIwzc_%|CDy=Yk zIL0oeX~)cJ(&g_Z`4t)oCWab+;ZvUNmvBdkSc~SRmr^d%`h3J$3i6;D$qQSRErFe@ z5b|C^c9@Wf@(@f|(@N^hP{yv?Xf*k2JoAr>xMjwn(Bbx_3xB-^l|zbZ+@Ids_;N3* zswf;&a$GBP_6>WWZJI-_u|m)29Uv_eB%Zos=RF#PQ~k0p_j*|sCO_C*rJyV#qBTbd zZ% D|4`#>~$c@!wjHAl3IP ;>G;q PN-C;z77Cr%+4Mcr) z9%lT@b8k=~AdkzW88PCYVB}Z(eHPJ?7)%;Y1+nSs`b 4JWFvlewsloh&xZvl+B_8XwGoo5l$&KCa=votI=o+7F-DJa3j( z#cN&m=o(xfCY(cI3u%hL$5F!@8DD5uYvmuZPld>aIou;f{{c;K^*8;HWIO}j&^^3; z$_rye{~33ceak2_;m7bF!b0L%iL%!YDzihUIqzUki6yM8VC_W!BZ0;2pE!$CunXe0 z8LG@GPz#j}aK3?^L4_ng>Ra}I$x8a$ZG(O0g(zLR^EM;Jyy&UmFjkAi=#+^wGQ~Aa zKM(s6wbbyRMTDDRzx{$urZMPhOz;Fzd|~RoCofN?3HuUUFLE_KwD;_rfdD@%H8dcv zl_SX;-q4_qyG$UwE0&U^Z)ZHhq%EpHwh8r(X|taM(#>y@X(&OitWQ_Y@tf|x8Jpv0 zq_d@gdHuzZqGj@vCqO|p(mS&jgbB7sAM_e7Z|r&D4j=3uPZ?$Q2Oa7IRV=kq1w|Ps zYa__wm$D>-N3bWh6kBOFaRy5HL+RI(=ar!5c--QNHzMObuLn-nV-e^{TOs%piarB0 zsn k6u#N|3e3psgaQsrC-YF60GQn|V>{7m z%9L|3tADaCUEH0f4GY3p$!!q3yQpBlF|}lynO<+Y+LTf0iG&-W#m1gqR>%d2wl@ma zfPUXtr4Pe+t|c45V(%8J`{8DMsvV5s_Rs^#F>qvVxq(sOO3|&c=P6qKeh+3pNmyRO z`W)FYrjC45uDeBObfGnrqbwgd0Vq_1t3_ubhcAkAvZv(xJb?u5h)EVXm+pa#YY{zy z=u_R#ZYrrbXqm_+d4ayz9wlrCU6eJ@LS+u_>yPCGabVHP=ww_5(9;4rs0e|{*-`~! z%S)AOA$CboC8ai480uubJnz$#W%yi;5$S1Ni De{?H6&H2Vu6@I>prS6C&x2A& z1{yb43Y5?rh$ALt`(u3d#XL;U_ra4d9QoGbSZ*d#6Tp736gCOEKbmIZ4tDpcHeVMU zP;t-E0{;K6)xL71R?J3_PxrXDJEr!pJ&%d<53=M2DjE|Wm~@Usu;{e{R;k+z#D+MG zB)aAb7SWB9qmj>ndDu&GJbU9~!N5X4Q98JB4W?QDn+0V?w!&_vFw{H>QFXutUZ)>e zt2RuKP<$bp#b<4d*cpBAwRH_k+kjnA7EMQ%%k)^NV@ZJ01p UC&VOI4J6#irUcW3aE2|Tu wsUb`lc7TxP@|elYvN>c@PC~Qo?4=lfc+z+ w8KcYLPbaBlHrBS~_mvA{w9pbj;dqjV$TtUbd+M#**ev4z|B@ekb2Aa(FAs;b z0#9P`R8}8zw8o5_AUBvgi0H$fqaa{STv`#~MS*0n<9!*oJ@rM&X_xrTO_kWHOt1gS zfsU4iK8x`s-{?opIQri#$(iM(3 zf
kWKW*zG3p)dQGW7;G7lSg{Ey{?+J5<%DF|OeUN^9?mF2XMH_pHg zgh*g{z2&&J&N#Gv6S@h#5b~6is*UhJ*Q)v3S|z2tB$jn-e4zQQM@ZD~5QoNI05UyC zx|S6j{&I1x9PC%?+~?b6ZFns!$$P@+5PPrMI3=#1ByMSwVduTaQh!+vSQtUQE^-2S zoyRNCG`o`38VBNQa7={_&C9|nPd+h?GMe&ei{ZM|LKSuSu(*(Y^Yyp>+4<9@&*CfJ z;2r8^$k!5nM!Cw(+8NC?nxOt#Susltc-WK@(}i`b)$F5>mE$YdD^tc@dejm9kL+=s zLKeOs){LRJn%FqE#WOY|0C~jeb^G})pnr3g-lr_sj_xAD!X{a(lhTvCauYiE&f^Ak z#}2qbM#>%{e|`zLE4hI#RO+Jg+yql!^`Z$h5&<}nerImjlRcja2ps{Xw*fxg)BJJH zT}91KJVL;eYZkjgoePgKI6)+v_WI)z@3~~K+&jdrysyf5A;bkpGa=xel^!9_EqvA) zjbEVz&@QSc9yHGFvPy$8C#X1%jDI1)mACf&4x1P|K=N9ND>d3OF}D9^I7stBLc@=7 zKFtf2dDyZ(ql$TMaOB$q&G?^y!X^xwtEB}zxv^2a5h)#Q)7 _!X$O#K%56F z`bUn!G#aCh!4xrv((Zk!BuuHZh9|v`RzLv$yf*s^Wg+{^+SJiSNAr>ZfT!e=0i#wL z|0p{ Jp&-)Z^8Sqsc R3X=Uz zvq#P_G(Dv{8J$!n|F<@E0TU7(`;TQOhv6U zUg(5NkA6Y;LJC|dZ3OLvO#WTAgRje{T&_x2l;$2>93aAz#4+Oav|W0q2LC&p;@lMM z5y~MZq-vzPpc_ZyC+60D1UBW!-wAzhO_lvR*uo?Ek^HFsQFeqtQKTvOrec(MCVDPx znq)4Zk>OtNZHrRH$8m=I)}O#C^qWh!xv0{sa$rrwmVcHj>#hjQ3~yY>fZ5tI3VQ4` zev$iws7;1|-|dp4mv(@1I8Md|bBH9NZHc m*%;$@&!#dwO{iTol*-P94_0 z3k;{KSIE#>&Wx@epZ(^_=pa=f(8iI+ *8%mk#RfidsS9IKZT?R1wo7m ~s@f73n7o?!`?Cf#yK3uV# z(Xsk0YFkDd#TUyE+uOGl2_vk|eh_arV$`ry>hD4F966!BIx$k?V0{QPV$?`Rlck?e ze>fK(@Oe<*RdLCNBZU=0VY`NQ7}jmr>;I;;&MAtCyIFAGJkCGRK~jDj%On2fOuIe} z>MFK+K7Rp$I(4zB#L+Uzx^UF#9s_P`(ILmKAoK#2Vj;L;hF(DzhqHoE_NQ p>hYjQm(x~-E|N0lp+bQ_-pd?$;J >ZC9-~)ke`Iv2Unb zq#l23TJV@ *G zp?In_c%k|>O>EBiU4Vu(=fC6HVqL)F?t_#As@v#nN8QiAu=uE&-9Xv|`9DC$H5(UB z-1~gS4OwYa(INlhTk<^l)h|)P7;=ZywZ09f7rZX rHtX-?~z1O|4m)ogXAf-jC|sB;QsU)lU4CXlWP z>H%Y26z_~YxFo5s1X|~PgPWmeV!%OMSDw1&vp`#HUB5By>VU%oF*yiJF{vJGo+XHq zj*{85RYbFlH9B!0?5EKw5K+#v)jN9%v;@`VU*L~3YTMzWg{jF>iZyDR*6I1hh9a|2 z9$r!@nD|cQbt9c6g)!c80Y{}qI*_i)xI83&di(w8neW-=kwkS}-P*Xk4!&foD3r*~ zG)}Qp*O9nEc-u|T@5o=tJk8O%N=TrWQafoxd|6ml&@`s)ZYl7nG6craQ{78T<+ pVLZ|;b(^7{z;i5 zj|QoVp=oT%-C*1pu1ari{4Sn(V!#>>u8o);Pv1)aMi;5Ykbrq+zv3gm&Xu2JM|jw4 zl;IwTKD9FjM#zcn`4-XM3P}{rj7KQ^u%H=YfLYBZzscQfFgQlrkmGf(f=?3|9>ukO zqT*?PN|OyewunmASY;LfKQeZOaX-iR*$7x-m_h8}Z5zyJC*e+lkH87wxu^J9pvgkP zD|bk}R5U}lkEQd>scS+}E9FR7D2#dSojt=5zH_)?jE|l@#w>`K5`M2~wbJB!XHpRp z+6e5UW&kbC@qUM`Ly<7ZnI `Y%cOBIB{f^d_rE~P1 z>9*C(C;XpyzHn{Sl06HBbAUu23>C`IV_NZ;3@nD-1pO7Hv@hV`0uw)VGcU95CpSSr z$#(ugFYAD7>3&O|MZ>s$SqH~Y;eW;@5y-G{Ow~^|j*Wx-xC8Rra<<*zn#Kw&OhPb; z>T=QH$+-YCc*hg0vG+0BRUme&2y8WC{m6yx)llM*-E;}lYTONCM$D02#uvNcYyf~W z%}S6Pb>eYJZds;9htnT19|c0K>l)rrg7*}_fm*COMrbzv%4MSH;Oh%w)OeU?{Qfa; z*b~!3KjZcAXL&NWdSNuw5`BiGsztrm*!WfR)T8B>N6N3P4{&GIr89|%CD>iUftZ8N zP(dk_O#<(eb_MIVYkETtz?Dj|?ovb=<<4y(8Nehd*0ye9D7QlMbaNTh0m|o)mrj`> zfA!VwIIMw73mHv9#9jl&y?C+r%cCF;M8=!pCjDmJ61Mu3yr7GInOle hxNSS8fXcs#P!x5dQ(veM_;yzM)2OfdRKmb}Rc<%fW_0sg?IN&=ja8^Y%^oRd z(m!XrKFAxRf=+8Wh5 *LJPJetBBh=r4WrUi(oQde^42aFZOeoUfbU komFn0OEHMZEq;vBjBu>!CZJ4 zsC(VnnG}}nKuy@j3X}vs+n@C)gD}+zz#f+;`C40?BfC9J0#C(c>9mFH8pvtXvn!u< zt^ED#)Esp{f)#!T%>Z0$$<#`OqRN}~!n;^nhSEd w&6 z{lz##X8I#nO+Pm=2|kZt+&xkwa~0|>M`Z?(FrSLrEtl$(sY_2T^UV}ZC_t7P$Fe`x zS~i3fpgvr6Ev7mm%0XW+QY3?jg=WYMniUB*IRku2PVCT#CJ@`o@jvQy 1j*UZmg`Exj&Z*Q}+3z(ayS&TDGhFLB;oq(Yb776q#B zm6nm*!uzMANyB)}{J%MY3{Pe~^Q)Xp@?af+ACcy{vppkliGlN-&c$YyAK8@)812{f zMTx&|Imd< cX1$pf{T8ub|-!_Z@oKC7^PT41xnnaaWJi z%c~BOe5f$ASud^g2n(4N_-e(9#(d4~{?FGBFvksTES7F1Bt2{d0t6N+-eCh^f(gG; zW%m7xnG4)>qJRvw0#a}xiv6aOqHV7R4+y^a1~?F{Gu^MSNO_1tQq;D<4gM3mC@~zc zg|zgdy&hX!%1+nsxX8KQ= _0UC5%>J46Q=I^jXitm2p(`OIZd9@Sawht2-2zqZ z6i}b_*ii6=*pSgrJYT(Y@{9ghiCJFcXjr(Zeq3Ui^B7p-Ag(~OppKBspK% |9p>G)=m_I5d0TT1BZX{EYg0c`=00x7FC9 zTo8)KFl #LjlsQkIHV6jbyUeD+1LGp;G>N9#E5 zKACLbI~D?WxEb_Itm8MsK;6iDym}bJ1R7#EKgS5_(wQ;Ahn5g4RDfA~+_TO8`Pj6h zbZE$Sf75$V4N6XyVMNM_nOMPK^|Rql+!VMn55BC4I6IkGj8^eeacZ!52ev$X$kMx_ z_T 5NQ6VT1bkVlD6^fl@JxCf~|QaUceVoT~fU{@avH zX@+^h+O(ugmp)uaa`4lw2ReF@kX#-LMvO+8cY|r);wF>Of~B;+>U~BDvsPfbd0Y@7 z(a2S<@6uzm%o`;9j?ojFvp<=hIS;jUN}lxo;`YJ4WjBW0Dr&VoukB}g5#PuwbNV61=wxEG zg1Kg92ko7D`|=BE#e3?YV^(;*n${2iIurE>khGD!`?Mdaz#zyjk^QAZ*y80I8ZgH? zN#V2jCM6;Z(vo<>D~_+8q8XDL9MmdizY`&h?%|ah-A6xN*VlHzn^Q$~7p1mZwb#${ zHGalK(f!2el_D#AgJ{~Y#Wb{#`V#>N3e~-XCuscdHds`jY&9NI=SX@o!`;MuBdYD_ z5=^nGhRGwNQ-FEQx|uRiSsf8Rqvr~0)}#wK*TB&xPi$;`!T{F&%~Z`RClvSlN+G(x zuiSTzTzOUYff7gzX0 m!aFV~sik zYPcZCNRrR@IYeuQ&r0MmEWP_Z%wr< |qLy^;Yzf0Q5svLf8w|xDmmGjEG84O4>?3fsxp6 zq& {eJVSy`6vTZnTRfJ{s>9 #r}US&7u><#49eyvKdLj(1`G4QMYG0E yqSikrb!^zV@(z?R)GhM3noLH;a!y-GUp`AT_P-}b22vmio*uHN!VcQ9D;h9bD> zUzrojVuDpcZU!6S&6WM(L;uS3%HpV&S~Pg b*}`OTjlBi1AeD|yKMgZL$1?V^P(vV_TxJa_ak`Qya}g}!O9 zPt+jgsRv~ F;$`i=RbtALa*R zaQoEtZz6HLFxNEK!}mzbuIOt=rTeZQx&439r#4<@jF!U;Pa;W0n;>=P1~}6`L!qkp zbRjfDGan%qH9nBAJ3;#?rhJYgeB%XZLULI1R-YlCJ=iIz7GTjXzC>2mV!DyM7=K|S zELaF_FO`W;q_KMmORcKUk3Iw6dEIs*i0`09rO71<^@BCGu}byEbc?XSdls2a&R#?4 z0Q^+uvCH;x@y|W0g=)f>uaX2FyXH*pXr&^#{k9>8HiyrcqhwC!=nNdeb)19D?ynxi zDa5xvMz;i)$$wkFj)bM(X8S-O7q^qRiOq_)-{KpM;0!x#rndnViE&_aObhk~0{gNI zriAuk;kT5i%GcNa&}{|{;76;w-0#dOcP2jB5yNB4%;z6k0pL#iS_bjktMpu%#w}s= z32Q#N5{WmExTd
f)nNzbMV`4m{wKKthWIi`WW~cin W7hiMsW|H?4bx zG+53yXMqjVSn(+FozpUqYKmvAe28I`4-hw*@6VB!5;Vq*cr+O4!C`>$I zZ1=I2i!Dj?LrrZL`>-BPTM@}k%7?F+=WITY(U|nd9)+R!WuQ8qO5{NeSs=pdtJ$B4 ze(^>A#<@ $MYH}K!T9^fW+p~k?dGs0ExmdR9k8~ZnuygDe8t BH zbRR*RqbSS0b#GCCa!>nrda|KhgDH*oTJ@|O=G-7A@j 8PRD z49C2h8h@!{i;Q(76IjAxgt4}zkJOXQ4=_!33b@iE(-gI<9d?cu*Ef(O?~5lD^~v;7 z@(%M7uA&wgtLMH1ft%UiYFAvF;*uyHuJ(Wnlk}Df3Wo9J)}gS3Lay1<2)@gr+wvTL zCus$zEt20hMcOGfiF{9~K~)O2zNwWgpz3Cy5lfj$F!}mml3Prl)gAe#Ynid~c&AOc zPQ}9`jN?zO2@62_RxG4DNH-H9IWJ!Tvb&R@A;_VnuNDf=M{CdI>p3%-!&AWX_7Lmd zV_m)LN48GY$xx_&Gka!Y6d1SZe(9W*z~o{Y=1fj)xQl898Mo8PhM~W!f#slYkMR1^ zFyAimC~js=uMR3?=yDQ!L4jU15T5Psz*7%pU1?GNPpUMcCGMoL!NK;Oa9NJ=dB`HL zYrmla*jMRu7y_@no%M| VYZV5Xeu|(1m8s403D;J!J*LQ5Q z^#Ld2Nf^#H*pAcy+Cu7HK2a+7m%<6k(OLNZ0bq&qa~4e|tmLzPKF}^lc~a4fNm!`q z@E%mxD(Bd7zK=xZoC0r{p=#QIj3j;?4)1QFCtozZHc#S>?z8_mH3a;_{SI?&=FxOJ z5+c) }9@l(iVV>}`5-&8dSPbO8l0QvxwATMOFIX*i!@0ZoY4$j 46ie5qTowDeNr~5q4fOHb_ZCG`4C)Uv5%lr?_r}Fie#|HeJ9+DPP1!py zhqH0y(x)VpNU^M?JR-xA;l;Rt+8)T1Fb|JtN{(K&%B+#yMNJLjzx=Yy0U>DH`z!oZ zW=3~A7QMOq!R3n>*z>E?#hYb+-K{#;G`ZuQwH+H AC=+6=zZto zrVR9S2ovhQGOu$Jc$P-);&w` `RtTnv@>XIjqGe}2Seec7jt6Ehm-aE=cQN8gk@WRYq9^bSPrR^ z!Gf ~4X@Mje*^GSgKV>0 ziC`PGAGla0=K9XIO3-Lsa&4Qu?YBt3IHs0dpP2d23^n1T$gzTb5&BiQ;z~8np-|x( z> JSbjM0<~}qUKMBE_`wxkV#{J^mRoY2Kk~2uSAEQ0pix4 wA!-EV_I|Lslh^#Fo%G0$_S{kbdpOBt<^9>WPyAh_Bdt{Y!il;N?nw60F0gAntpET3 literal 4782 zcmV;f5>f2~*`k_f`%AR}00RI55CAd3^5(yBLr}h01tDtuTK@wC0096100bZarC%8v zLQ|eyyn6D06? |1)g%^=s5c#y;1t0*GVg&jN(P+pJxJH}pP!G-P4=@|M zOOQP5o0W-}oDwVs2moN}00000000LN04Ad^Rv0wD44{=<(ssao<_I7FMb-b4-vjfA zmO#stH3?n}CK|0Gp5|PS`82eTLBAeo2_OJ`?27Gj-JywjHDIo4ES9vxB|eKL3!d(y z*vI}ZdRs0E1ONg60000401XNa3LHsF^6#!~T=I{+R}?kSSObk>`)t>T2>z9KA1m+$ z8=1$-Exl9c-&L07WvYEwcL3yh>URG=E|#+WK8V}W7K0&){Yn2x$|+lS@FYfrrD K}+hR0)g;cdoMGTEFvJ= z`SnP7_|z>?gl5$SwcPzNWJ!s3+g_~}9d>d9R3HaycXRVrcDYgUWYbAlvvsu@I}*9~ zhsAvQ-DwJ7x_Z~=* O|`o1#uAa7C@UD?(Lm1aS{Iw ue*o#N&A0wZF}=$;U3_NlTz zXm$-+q~&RE(&9532g^|ZeLE1DE@8D}7>A%FC|}{ADAQItDd|Z(mrAY;Rm)qSt2P>+ zHMd!HLv+H6KbQ>DVY#EA4FCaAL1OTxm$(u~-~!wsZYR2p{UU6gYRDVy`NoZB8F1%@ zSTd1@KcStj+~BbFmehZ*)V)RyvJ{b418NRW8^AO~4P$$ucE53c0iH8>&=MRMSBEEt z*gY`gO@8 V~lG8uSyEeMefSg!zaadgK;%|vwUJx7WyEdW<-drH=@L-_2bCDOiSn{aA(d> zJcP;U?u$l14+m!clejzE?Q3#6-1bTt1-2#y_ULYG5_aoK!I=-htqQ%W33Wvbv1Zy) zgqzLJYSiZ~6#R=$6|ki_DHKwAqliJ#IX##TkK>z=P2;h~f06Dw`@8rzkT%5gL_Hm1 z?q&N4p^k8Zw*6H-$ds^DxHPe9^K0%7#m5{Vk=&Qh!rzZ&o d3)2G&Jq=V4B=uA zqE?Tl^_v#U%Uj}m9$v>p2e)j9OaJ0(d6)Z!8B$iKfanqhkx-p0Fxr~ZTTL&nwt(;k z|B)hnD_D6{58eg%nDqVTyQKSlM;K-XGrd=ZQuwHt06l;Z0diBkTBvb+*5ezD8j*lx zt`7OaXTU+{>kQ=wge&=Qczks?_qqZci+mJvmysI)UxJ(&9gvYO`y3c*{iN DDQ;KR7ay{44K=7MXS_X=Jx?M`wb1BUHpE?g}1CYrFi3kWUurHcf9@8P#K)`44* zR1~&Im(>$)R9W!d&J}>FH7E@YXDaXh6}Su1ODNB(cM*RaMx$=x!2*vZce$&AZNc|N zH;t_s&Idhh&7UKeeXW#qxM#040TyMBa_Mt{A43i0$bI$@0I)K_)~o-?s3E&^pJ(6H zBj9&*U&oqUB#?-Uv*!T935ecqlu_TjgM+xC0FA-RZr_W-GW(47XVkKc+L6_D9KgkW z3ZOyCjtxa}Ni*eEO#i}6J0NZTsPrJ|6{Ng23T!L4u#xJsNN$f=0KY$UixMy|+Ei}m z4
EX%DFCfr4|nLUA1sPUbD4Q zWui(4XufzpI|1XyRZS8iw^CZNpa5WK`%^N61u9pP9L+7@&&4UhwY_Rek2~GX$C}4M zp ddK72~&oCxWr*RS&(1U#-6$hyknH&YB5GMB2c3Id&GMGjMf>)y9!jE zhOne)Hz*nVmgC*WjedPm;^i#};yAc-KF~!4B5uX5;XVn){L=aby4m%s88d;$tne~| zc!weh7;%^4Z);C@(>&0ZBFu)1OPgC7PF@^MJbedDSRt4|ou|}jY%#DOQ}J?`vqTFW zzWg{@Il)uy=&_#j50*Fe&lh0{^b~dZQeR=#=x*6mX&rs@+zPuW4xMAHicE-DT(kgB z5l3M&N^Hy%YFdouO9O``W6@KS(RSRmU*d%{m4$VuFDwMpGMDmHv$bS SPbU9a{u^lpoTAR*gf(|sLpTxHN}{1Y87s2Q zUT}DnG5V%ihFGcRYRR1*c{Rn=n<-+BA+NYYB8}c&l=P3ujz4EOnunN~_qg7UFy?FN zFU}%2=CM W{&60f^ zEL&0&=*pAe@8qk+-IKsWzwf1(#L)Gwi$0Rb6`cYX80;?*dqHvy%Rzu|yG`^s(91zY zFF23a=v~IWnCj}}wlknmtT6AU)Bg+Y$}8ua%iD6bUl!;gW_8Ap8S24)kw0tQ_s$Y> zefOfCYN;>f#k{Vy%Q1(_rD0g mvKSZ#E;7 zZ+jjN_D}y5YpeJwi}u1!1-rfik5ptT1}e^z6(2~`V20VhyOzjg9gn0ECs`yPFK0`- z*gL&9F`JDx!lgo6ucJp9@Py_Yv=fZ1s3466koZzMXF>LT^Mmj|X#QdGlA+tEuwd2& zwqIo^&tKT(kDvza$GODhUBn_qnpXEB3V~Eq&vIQA;JeW$#l~nE!EP~^Xq`pseX{a7 zDME6Qx0_>` n_aTM~ z7AmyHSYDq3eg>v3@nbFve>p~vLq)aY5emKPrs`BXWnp` ~{0?o+SG)mWuGNO#4qV)SG~e_ZP+(h?yD7EEFZ)W8AXveAsG6 zDIium97W-Bb@!LyIQuw0gjx?>R<^(!KfIL|^W*dNz?W>>@-Pnn&!4(23bR(t(7Yr2 zJ9Z5kg&pR#{*U P_B z_I133=By)O5LvRHG2X0gZRR^?W_ju|*VH%zBGocgaXyA))0oWu3}S>-hgWP>6um>6 zLo!#r^ET8&H!YV4=}xES>Bapk;Rg&vYjF<3sqs#7TUMu1eE%wO;AUnhYfm5GFMWk- z+@ODAISm$ey~M#ddF`>69gaof`av0ltkM(P_rd(TY1ooyWrOiOHKtHmhU~0y+^tM$ zmjjEqpa)2Q;Pn==i;P2ECK@LU(>GX+`6W(se9$okD#p3~ypHhC9dPQK8Kgv>=%Gi! zOl?#T!%z7;AIo_SJ33z>q?DG#2w^>M7j`j}e64BfU7a6c6^1GJq9wL)T$XM%h1HTF zz)xkwva7_y_RZjcntJiykMoHIL_^;!sRyyd950YJ48$v`^qAvDeJUB_^LB@vm31jh zzLyUe>-Ne^g|TT6A#uf4YV>s899dQtQe$Q)ER2#AxLE8Bj;fm+vVtE|?(VmNRe KPHs#t91JVrl8 z8?0N&PovWO=GXAJ1ryj-{x>$25?GY*q87FELm?~B62A!Bf6QrFj7;M`no-A)W`@3_ zxqHpd-ltiHthw|`4W1(3HfDA7^m`Oq>;@`(HG)7#e=GG?57Rxj;M5PS+7H93GdcxM zvoN@X*m}9eg|0&-dlg!=BL}?`lM2z=z9km85)H47AV>4zKpNTV67UrE2T98;cERgz z*iHh`p2TH8-LLD)N*p$(duJM~ye3c2V0n_P(?G@t49D9Y`U-)*2@T70;tMX&>NbRO zzCkJRvbw0jBd5KoMeMXZmG{SZkO|>mBz(ERG^L4xwFmSzk{gFC_{qhwkA4EnAeUqG zJ57QIzo^P`tYSAgX52r 2uR3{l^Bs(8ZoWB=i2-pi zzzg-cb%+ezpTU-m#9(R`qd%ck()v!9&*O*`9l&kf3ZPxY;wAufRpA#C4t5R8M1^Z& za=ts1F&SL}Rld5fl k{Y%+G4e|#mnzA8z8_>U@ht_0NExJ&hFsPY?u!FMc(|@c(7^I6 z-{Rm|&IP`IYfGW^Ny*04WmZ{fN!F!EJkNB%rF?$b122!(vIoK)p#^b8yQb&F)Cgp8 zKgnwOJGYIJ5Vt!9aqU?a+nC9WH(@=HQZltE5?c>_OCKk{)K<4uAiP`=v}jt* vvx06*&(c?Q?(=n+1nhW+2^5^Zx*7l5^8k;)x^WFRBc8&36| z{@9ml(Q4>#Q|^T+)r;ClQanJ1*9{UF{dyKxm~BRhK~>|+nXH?Ix!iWiDCBpYXzkYs z9eU#fN{IFlH9{TFj@T6{C(;;&rlNhz#}^5v^Wnc6)(*^|7NTCR<;NA6+rlsiB82J) zXqf1bJtMi0_oPCIx;xou!FyHTX>Rtf%!$kd1d;UU`#mm>vUlCe3<(8V(ZJw1N$;BG zR`^-G7vz{SqjEulP#n<{s+&j|=G}pRU6(5bjf|D}9BO%={+=D(8TY_e@tvwW)k9@I zLba`GuG^^-add)2x8w2&u5RRJpCn&P43{76LXg JKju^EP0gPmPM=hz z;0u}*$;XFmUr2&=lgPHmZ_0487{$C;_i}ki 5=ekJLwpoWCcb;+SB zmK6si1OTX^`4B3`f(XGOdV_$SttzUYK+mnwQ@Y_&ZYF0avIGBc86fjX@TjO|EXgQ6 z%}#^X!l_ECSidh=u^=?LugndPRV0{+HUtkmjp$T3{WvofC~Y~i6Pa;lRZcT* SW*w+?)6!ZEaDnmG_&vR?(?)y)hh6N2?nL7n z{S*9t#; dXU-k7H1tIH?ZXp7p+Jw=^?xnK)F^H|LuhA6D3ni15l_$H*T2=Fg?qx}N zpXy^fbg@JEDfkK_B=AwdZUY}Ctw7&%@{P?6{|12DN{h%jfS9KOE^xuLE17wKN^4Td zmUig^Jzr<-Csy)(uYQnpgh^S0b&6FWcs%QNy{zc+wpRA;&i$o3Fy|Oj3_mHpriOZl IIC3n9+A;$<>Hq)$ diff --git a/test-local-vision/app.py b/test-local-vision/app.py new file mode 100644 index 0000000..b805d73 --- /dev/null +++ b/test-local-vision/app.py @@ -0,0 +1,284 @@ +""" +Belegscanner - KI-Dokumentenanalyse +Python Flask Web App mit CORS-Unterstützung und Poweron Design +""" + +from flask import Flask, render_template, request, jsonify +from flask_cors import CORS +import requests +import base64 +import json +import re +import io + +# PDF Support +try: + import fitz # PyMuPDF + PDF_SUPPORT = True +except ImportError: + PDF_SUPPORT = False + print("WARNUNG: PyMuPDF nicht installiert. PDF-Support deaktiviert.") + print("Installieren mit: pip install pymupdf") + +app = Flask(__name__) +CORS(app) # CORS für alle Routen aktivieren + + +# ============================================================================ +# PDF Helper Functions +# ============================================================================ + +def _extractImagesFromPdf(pdfBytes, maxPages=5): + """ + Extrahiert Bilder aus einem PDF. + Gibt eine Liste von Base64-kodierten Bildern zurück. + """ + if not PDF_SUPPORT: + raise Exception("PDF-Support nicht verfügbar. Bitte PyMuPDF installieren.") + + images = [] + + # PDF öffnen + doc = fitz.open(stream=pdfBytes, filetype="pdf") + + # Anzahl der Seiten begrenzen + numPages = min(len(doc), maxPages) + + for pageNum in range(numPages): + page = doc[pageNum] + + # Seite als Bild rendern (höhere Auflösung für bessere OCR) + mat = fitz.Matrix(2.0, 2.0) # 2x Zoom für bessere Qualität + pix = page.get_pixmap(matrix=mat) + + # In PNG konvertieren + imgBytes = pix.tobytes("png") + imgBase64 = base64.b64encode(imgBytes).decode('utf-8') + + images.append({ + 'page': pageNum + 1, + 'base64': imgBase64, + 'width': pix.width, + 'height': pix.height + }) + + doc.close() + + return images + + +def _renderPdfPageAsImage(pdfBytes, pageNum=0, zoom=2.0): + """ + Rendert eine einzelne PDF-Seite als Bild. + """ + if not PDF_SUPPORT: + raise Exception("PDF-Support nicht verfügbar.") + + doc = fitz.open(stream=pdfBytes, filetype="pdf") + + if pageNum >= len(doc): + pageNum = len(doc) - 1 + + page = doc[pageNum] + mat = fitz.Matrix(zoom, zoom) + pix = page.get_pixmap(matrix=mat) + + imgBytes = pix.tobytes("png") + imgBase64 = base64.b64encode(imgBytes).decode('utf-8') + + result = { + 'base64': imgBase64, + 'width': pix.width, + 'height': pix.height, + 'page': pageNum + 1, + 'totalPages': len(doc) + } + + doc.close() + + return result + +# ============================================================================ +# Routes +# ============================================================================ + +@app.route('/') +def _index(): + """Hauptseite mit dem Belegscanner UI""" + return render_template('index.html') + + +@app.route('/api/analyze', methods=['POST']) +def _analyzeDocument(): + """ + Analysiert ein Dokument mit Ollama Vision API + Erwartet: { imageBase64, prompt, ollamaUrl, modelName } + """ + try: + data = request.get_json() + + imageBase64 = data.get('imageBase64') + prompt = data.get('prompt') + ollamaUrl = data.get('ollamaUrl', 'http://localhost:11434') + modelName = data.get('modelName', 'qwen2.5vl:72b') + + if not imageBase64: + return jsonify({'error': 'Kein Bild übermittelt'}), 400 + + if not prompt: + return jsonify({'error': 'Kein Prompt übermittelt'}), 400 + + # Ollama API aufrufen (Timeout: 60 Minuten für grosse Modelle) + response = requests.post( + f'{ollamaUrl}/api/generate', + json={ + 'model': modelName, + 'prompt': prompt, + 'images': [imageBase64], + 'stream': False + }, + timeout=3600 # 60 Minuten + ) + + if response.status_code == 404: + return jsonify({ + 'error': f'Modell "{modelName}" nicht gefunden. Bitte installieren Sie es mit: ollama pull {modelName}' + }), 404 + + if response.status_code != 200: + return jsonify({ + 'error': f'Ollama API Fehler: {response.status_code} - {response.text[:200]}' + }), response.status_code + + responseData = response.json() + responseText = responseData.get('response', '') + + # JSON aus der Antwort extrahieren + jsonMatch = re.search(r'\{[\s\S]*\}', responseText) + if not jsonMatch: + return jsonify({ + 'error': 'Keine JSON-Daten in der Antwort gefunden', + 'rawResponse': responseText + }), 400 + + extractedData = json.loads(jsonMatch.group()) + + return jsonify({ + 'success': True, + 'data': extractedData, + 'rawResponse': responseText + }) + + except requests.exceptions.Timeout: + return jsonify({'error': 'Zeitüberschreitung bei der Ollama API'}), 504 + except requests.exceptions.ConnectionError: + return jsonify({'error': 'Verbindung zu Ollama fehlgeschlagen. Ist Ollama gestartet?'}), 503 + except json.JSONDecodeError as e: + return jsonify({'error': f'JSON Parse-Fehler: {str(e)}'}), 400 + except Exception as e: + return jsonify({'error': f'Unerwarteter Fehler: {str(e)}'}), 500 + + +@app.route('/api/health', methods=['GET']) +def _healthCheck(): + """Health Check Endpoint""" + return jsonify({'status': 'ok', 'service': 'belegscanner', 'pdfSupport': PDF_SUPPORT}) + + +@app.route('/api/pdf/extract', methods=['POST']) +def _extractPdfImages(): + """ + Extrahiert Bilder aus einem PDF. + Erwartet: { pdfBase64, page (optional, default: alle) } + """ + if not PDF_SUPPORT: + return jsonify({ + 'error': 'PDF-Support nicht verfügbar. Bitte PyMuPDF installieren: pip install pymupdf' + }), 501 + + try: + data = request.get_json() + pdfBase64 = data.get('pdfBase64') + pageNum = data.get('page') # Optional: spezifische Seite + + if not pdfBase64: + return jsonify({'error': 'Kein PDF übermittelt'}), 400 + + # Base64 dekodieren + pdfBytes = base64.b64decode(pdfBase64) + + if pageNum is not None: + # Einzelne Seite extrahieren + result = _renderPdfPageAsImage(pdfBytes, pageNum - 1) # 0-basiert + return jsonify({ + 'success': True, + 'image': result + }) + else: + # Alle Seiten extrahieren (max 5) + images = _extractImagesFromPdf(pdfBytes, maxPages=5) + return jsonify({ + 'success': True, + 'images': images, + 'totalExtracted': len(images) + }) + + except Exception as e: + return jsonify({'error': f'PDF-Verarbeitungsfehler: {str(e)}'}), 500 + + +@app.route('/api/ollama/status', methods=['GET']) +def _ollamaStatus(): + """Prüft ob Ollama erreichbar ist und listet verfügbare Modelle""" + ollamaUrl = request.args.get('url', 'http://localhost:11434') + + try: + # Prüfe ob Ollama läuft + response = requests.get(f'{ollamaUrl}/api/tags', timeout=5) + + if response.status_code != 200: + return jsonify({ + 'connected': False, + 'error': f'Ollama antwortet mit Status {response.status_code}' + }) + + data = response.json() + models = [m.get('name', '') for m in data.get('models', [])] + + # Filtere Vision-Modelle (enthalten oft 'vision', 'vl', 'llava' im Namen) + visionModels = [m for m in models if any(x in m.lower() for x in ['vision', 'vl', 'llava', 'bakllava'])] + + return jsonify({ + 'connected': True, + 'models': models, + 'visionModels': visionModels, + 'totalModels': len(models) + }) + + except requests.exceptions.ConnectionError: + return jsonify({ + 'connected': False, + 'error': 'Keine Verbindung zu Ollama. Ist Ollama gestartet?' + }) + except Exception as e: + return jsonify({ + 'connected': False, + 'error': str(e) + }) + + +# ============================================================================ +# Main +# ============================================================================ + +if __name__ == '__main__': + print("\n" + "="*60) + print(" Belegscanner - KI-Dokumentenanalyse") + print(" Powered by Poweron") + print("="*60) + print("\n Server läuft auf: http://localhost:5000") + print(" CORS ist aktiviert für alle Origins") + print("\n Drücke Ctrl+C zum Beenden") + print("="*60 + "\n") + + app.run(host='0.0.0.0', port=5000, debug=True) diff --git a/test-local-vision/requirements.txt b/test-local-vision/requirements.txt new file mode 100644 index 0000000..f718672 --- /dev/null +++ b/test-local-vision/requirements.txt @@ -0,0 +1,5 @@ +flask>=3.0.0 +flask-cors>=4.0.0 +requests>=2.31.0 +werkzeug>=3.0.0 +pymupdf>=1.24.0 diff --git a/test-local-vision/start-python.bat b/test-local-vision/start-python.bat new file mode 100644 index 0000000..7a5b4ad --- /dev/null +++ b/test-local-vision/start-python.bat @@ -0,0 +1,41 @@ +@echo off +chcp 65001 >nul +echo ============================================================ +echo Belegscanner - KI-Dokumentenanalyse +echo Powered by Poweron +echo ============================================================ +echo. + +REM Ollama starten mit CORS-Freigabe +echo [1/3] Starte Ollama mit CORS-Freigabe... +set OLLAMA_ORIGINS=* + +REM Versuche Ollama zu finden +where ollama >nul 2>&1 +if %errorlevel%==0 ( + start /min ollama serve + echo Ollama gestartet +) else ( + if exist "%LOCALAPPDATA%\Programs\Ollama\ollama.exe" ( + start /min "" "%LOCALAPPDATA%\Programs\Ollama\ollama.exe" serve + echo Ollama gestartet + ) else ( + echo Ollama nicht gefunden - bitte manuell starten! + echo Setze OLLAMA_ORIGINS=* vor dem Start + ) +) + +timeout /t 2 /nobreak > nul + +REM Dependencies installieren +echo [2/3] Installiere Python Dependencies... +pip install -r requirements.txt --quiet + +echo [3/3] Starte Python Flask Server... +echo. +echo Server URL: http://localhost:5000 +echo Druecke Ctrl+C zum Beenden +echo. + +REM Flask starten +python app.py diff --git a/test-local-vision/start-python.ps1 b/test-local-vision/start-python.ps1 new file mode 100644 index 0000000..7feab99 --- /dev/null +++ b/test-local-vision/start-python.ps1 @@ -0,0 +1,54 @@ +# Belegscanner - Python Web App Starter +# Poweron Design + +Write-Host "============================================================" -ForegroundColor Cyan +Write-Host " Belegscanner - KI-Dokumentenanalyse" -ForegroundColor White +Write-Host " Powered by Poweron" -ForegroundColor Magenta +Write-Host "============================================================" -ForegroundColor Cyan +Write-Host "" + +# Ollama mit CORS starten (optional) +Write-Host "[1/3] Starte Ollama mit CORS-Freigabe..." -ForegroundColor Yellow +$env:OLLAMA_ORIGINS = "*" + +# Versuche Ollama zu finden und zu starten +$ollamaPath = Get-Command ollama -ErrorAction SilentlyContinue +if ($ollamaPath) { + Start-Process -FilePath $ollamaPath.Source -ArgumentList "serve" -WindowStyle Minimized + Write-Host " Ollama gestartet" -ForegroundColor Green +} else { + # Fallback: Standard-Installationspfade pruefen + $defaultPaths = @( + "$env:LOCALAPPDATA\Programs\Ollama\ollama.exe", + "$env:ProgramFiles\Ollama\ollama.exe", + "C:\Users\$env:USERNAME\AppData\Local\Programs\Ollama\ollama.exe" + ) + $found = $false + foreach ($path in $defaultPaths) { + if (Test-Path $path) { + Start-Process -FilePath $path -ArgumentList "serve" -WindowStyle Minimized + Write-Host " Ollama gestartet von: $path" -ForegroundColor Green + $found = $true + break + } + } + if (-not $found) { + Write-Host " Ollama nicht gefunden - bitte manuell starten!" -ForegroundColor Red + Write-Host " Setze OLLAMA_ORIGINS=* vor dem Start" -ForegroundColor Gray + } +} + +Start-Sleep -Seconds 2 + +# Dependencies installieren +Write-Host "[2/3] Installiere Python Dependencies..." -ForegroundColor Yellow +pip install -r requirements.txt --quiet + +Write-Host "[3/3] Starte Flask Server..." -ForegroundColor Yellow +Write-Host "" +Write-Host "Server URL: http://localhost:5000" -ForegroundColor Green +Write-Host "Druecke Ctrl+C zum Beenden" -ForegroundColor Gray +Write-Host "" + +# Flask Server starten +python app.py diff --git a/test-local-vision/static/favicon.png b/test-local-vision/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d36f528dc8c48512c49b52887a2ee9158c34743 GIT binary patch literal 47007 zcmX_H2|UyP|Np3TI4cQ}Rf>u*Dmhma<(6{f80J398Fo}cg($g?kuNH8#xRWBM<#Nc z(PFL{hHYm2*Z2E-{P+00AGSRnv+cFl`}umlp3m3&wW+ZlKhG&1008*!-MxJu0Jt UNML8FWt0i9UT?Fv_sM)Jnfcqt2{misa{F`e1Rb>JWvZ6ZV=ZhQ9#$fl=m-ZoD z$qy|B?1JVj2sYMcCoat0v>qqP^+bh9MhGfk639%`nW#t;H t>lF zoLjhRh3MdfU90Q#Xm4ZTjO9Mu@5zBxrp&Tr`nd8O6&)TT1ZOboxc7K(t*$V?lgWhg z$JiKx5gr$9G)uJW?Nb0ZynOkRJF;mbcuV~07H#y6a7Heh4{2~V8Q1@34<+1aKgA}u z!)fu6eqr)YQSnx4jSW$epgpbAXp`lJ
mN^k#Oy$~# zRC{gh?=Q56sdR&7=YmNBIs6pzLJ|v~v sHJ{Yd@%>uvCA4N-fxn Tuh~ig z;|0- `Bz9KkKoiR%1x`d?=0xdMcTCCye3Wy1q8Mx?)vR zK*q*c)s>TtUR6b#;IU-hHkx6%p`pUR2_rp7b5Bo$;Spg|kSJ*s+Bnf>b=G5@XvbK8 zdX?F6v {T0$BEhTT9nLTAYjrhW#XA(Xx(0`^HX5);8YPetjJ25--bRfV zAsy3$^jWl@TFW^LJmF4pePgz^P$k_IzSr0>ZgTN|@AqnD>iUn=a&r08axwc==C+va zt9-~Z&1x6f7BkD)eoU7C(>-ZAe1_C9DLF;#h>4`FvKP}L jm1 z&nnBoL)ih%EM86)vB;8I^?JRyrb&D=D6oqBaxd~cW1Y!plqg58FC5m&79?{*!@alL z@%wDozq{|$3tio(N3GL#dKcYHsS1q8*f$01hqZ84^#zZ?S0iJXto5)x4(gHy>Fzva zHoIFaLLpjDt`V i-)IA)9A1A&DYBnLav7>acP0jjV5?y z9jZd>;tb(MyaHpRLH%T3o+0_a_x^~*l#5k*MEUvi?uPcB){)D^>#fcl08OPxCC3Yr zfBsRpdr;~noGkCl-)Q?{U~Pf7cEvL2lQMUJTNONWxueaz)xv|6FXx_ro>T)C(XZ2l zv#(8U>njYHyod)ym>d$F^!e(*WUWn4jId-it3r~9Ij8R;I;La=iPW>i+6a|uJvp3} zmSj1@pJmR+NkX~P@m4if>O6PM&KIO4B$SmMbq*`H6Ni}dAaytKY`%Kzt0bLOS!D6f z6m&)Upe%!2zM%=PUxlws|0G;TLxnyxn&`>m6f6<+_=<}nTG8O7ra=Gd=-TfgMJh1V zMpw@Gn~qhdFlQ|>npgRBBcfhCO4?P5vE7kszn~<*23;~qlIQ)tTikAW-swR3+MHP_ z{!IFgCY+IKvx=V;AoXO~Y^=^Cy){ud2 A9tRDSG1G3wdpme;G;X?w z+%roGMS+OQklagIR=c#0={NIf&rNXeukd%*KiDnK%xDg?w$)8bGl3q}krgff>d+tw z aY)_!c2!|5|9(P7a@&TPGSIVhBj{%jb4n_Nci`J$32S59dhdAtW zjxG0(@i?MoJ0u_-zOH0ag#*bvpV94@bx`F7yW|clXu)sm&XTTa(pMMw#ivp#yEwly z1XOxS6W!PM{ldRd&M{Rl6ww(pl)W11mHw^)H|b=Lys);qYc%V@Qz{&6Wqn%?l*>b2 z{On%KKHF~A3>H&LX)@LJkC^3)&7W3DdwmoZ=7@RMt6!MGqjZ_%*Ys&T-_PU?W#Y$P zK^5>!ym6HqX!66+?SQ6D8x=0VVro$lXj;RENdwcJg&JHy|D(DSfTFUR0MOaCd^5qU zx^>wK1jeU+>g{1@vwvwIMUwlhaNBESHg`U?rNg=Ug^7ZNfFQ`%a*)n}6<;}9A-I}0 zXTN9C?#cYGE}RYYJ0zB@Cyew>)6vw7faI=NCa0<&%oo8PQb|Tnw}kI8&snUD($tFU zhkO?&H;;eW`W<@lU{Pv(>bXH$*G0R0b9G2Za7H;{)IUn8zN9vWq7DFwZdu#_ ge$+_Lb9mlcy>S<4T} zf BU3TG21WB`EeBaO{a zBTE2H`OsY@V45xhJq(PZm1@O2on8j4MuJ<+l 9oG2~BcVfj?JSutIpu)6Ux^4A*OfltPCA|4Z>6w-fhLyPx1Z!mbr(+|j3(Ka7 z!Z|g#Mw(voy^w=$n`<-NAUs55Zr$YH0( _yh1!&3JnQ&NFkbS?`IaSX z)vzKT%Pq@2HW7G6WdD`{o(Vg@>c*VzhWTbuc~6OWXXhC7tPT2zg$V7hPcx+4GC>^# zrWuLQ13+hoQF}_zd0M4k*XsGiUyLDNzaf*rNKnU4AKohz8KDX1xdSmultXeg0-E2mSMpOa}k>3wN^l{prBXN5nG~cY0nRgZZ}Z( z14#e&1>l)?Mi#~^G3|5xV6mmb{J^R6Lcgd{ruIq=$CBM%a-W8^e&wrq#}~+?_zD6~ z`zz7>z>U>hL2lri#mXVz;-{ZK`4`G@|FD))eVbiN9*ynfvt(T#E!t+Oi_CZ2y8SKA zu$SObzr6DF_=mS{Z;Vp?c4_>e7Wm*A<(eG4Ug>{T>|-6qF)C2#$!dsD3EHe-qJ_m0 zgKTLWM4QMVsBaxdAA?)FNoG~0-zPAE%B xel882l;b{u0pT0jFZEqjR0fmfD^oOO5fJ2e zUuFWysnJv|$ePtR(*u!%vz_p;%{a~Yv&p{Z8u3d1qDW*^)5Z?pDOaZuW5ZS15xCo= zBY64EbPssBTcju?(YuvAasVCwk6nIY@9lok!%7#2qjwSDOAFneBM;ekqzCe`cm~Yb zeg2gBqTduBkh(Jy&jsMLC^5jZr9FpX({}Y>Nn`S2fz@tFakV0$(b-XM#@)f!+k{!v zV1<($%$gB=E8mbmAu9&j1Z%6EURm^Y+A|(Nbh0G@;OT0Nz5Ci*ty6%aW@G2?LkHa! zVm~pj8PD5gE#;~IYT>ynyl^qSJ(^w`AAhSgo0n$Pks`Y_2^*!u8dn#tCc!Mtr2mEg ze$&K-BaU-E4q+Vfk(A#BeHAIb#Y6{0HWzQ~-=E)m<)pENiN==zI6TL{NUP$Pfv${t zNZW_3XG^8T!vNzaE< +T s|MNCbQ_%99Udg?*V`i+j>s@J`->skzWpO3o}$VXt}awU^9Cp zwz*Mn9(DTKy)E@QU*MTc!|vuB>X14$B`!m{<83lRd~d&Qi K+8_$7VA1snOK`7^zPa318V+Ut$g9X8;?H- z6z43LwCn^zzNTgcM?X~S+NzIq ({n?SLErBzgm$_0;qfuY06CtgEW!G(6u`A=MKCB})a+eTIQ@>~PI(GvFC1 z+fl7S3Zpr&?{2$(mVKF4GZL+?H&6YwYH0VWYXc4mzsd~nRe=l5Wn@Eq&O9v;X@S#( zIDK4pTy6Nd|G@NzzyGRxD!2h9XS>WSaT?u#BYqD%@@d&ow`MfpHH16vmJ4AA3tW!k z#8YN}A0gSY
hTf z&>v+-hfhN4_W`SAGFrztM8zotdiSJEnzP%$jnPdU^E5DB=~qtpv;IXE0HRGRom6|q z+;+eA{^M6I!@nW1-{&6PQb}7&;e7ZX->vF4i;`#vv2T;GWsUNh3ANOV?+u9Bxp_)j z4YWY560R4{Tx3p?yf~dshYg3^lR16JpvM~!EKFEATRl4(9})uo|F*rNu~)D2&248_ z{@#cwWP2%5sE(F&Z*`${+6_tF!gDCA9YRYkDh@jFFrYc$zPdH}q6c^Whn1zdufVg< z&}?4L&Mk!S16HUc%G D?rP5r+mb8tplB5Ha=gs0jtX-?L(5_*|ZB*ULAjgI7wzXCDI3WR00Ofa!V= zTpTEa_x3e-bWuKM%UPau)SVHCop$`?rmVAa#vE(-BPco#07{>dmU=_+;r%T~gO~mh zJC`Pq|L#_M_s)yn_Z8RMsHN8oen8pN(EyMFXL|w9q*Mj;tnlEWS5S@YXzKxeha6 Yh(EWw})9-n*o@wN2dI%qW8Fuw!k~G zKtyeGHKW}Z#Y|3*#Jr#pve4$d(l`mm91VZ_pMZ19)6is9*(Ei1zxk=mcZeNP&jr<1 z=Y8cH2-S=Mda57t#XzZZ=CHhz;R^*czVx3vL=98%m4d$2jJk@3AeH?<32QwC0LaKe zXM5!d!{Ms)#l^ihX9vx3{sTJLv_V@(j7$4`bzEw%=an=|a#I8Vm>||-IB5N}hF~!~ zBk%Upk?nYRYsZr$Wvb|45q`igDT8>0Fa-9&{!+=>lLeYWE@A7}H4 zW9(APlDNZ zF252@O#KIjw8zxwxuFfci=5LZlNzslt wVd_ z%KnYI*A`d`gST~9hL3d6Cf7D&a@rFXHb|DD!;phSt=)##kzU_zXXZ*mwK-~;{hM)B zO-SX6{9K0bp#IEYnwK W3SCIIkl%Z>}U81Tqj z;K1Z5{aCHR3on;dl3J9_2tDFa*2Rbi$O6l_fbeD1a|T1Z?Zm7JCd%ky=b0~#*HTTE z*=sZP#e^0dM%x|pO73yV#{UN>JxLe>+fGxSgW7 5HKEGA|o;*;WPdJlt7Iw*nY)tQ7-y!r;_c#RL2e}adYE}z_dB=9^hz}|J z5#6~v<1_H|*+G}P2ouFgK71OXR~W%MH?i5!qXXIpJROMH6#&Y9C)n% !0p+9Dg z4v&adh!TqxQ`;PNx+OAwHG@wH=Hd!nK>ebtcZkfBz;p+6n+I^%F313YLkY~da*!^A zaAX)J2lGgO5RzbZ!#b(l{>ylPRLF?s)Lb?2j0M^B0G_o-I#EXLg8<-+cs~2&*gF!& z@1#NtjWmvlce8rVJkWl9)K{2 &gSjTDZG2M_gL%Gg*+sv*aW~(5PRXRbHY%f zqnUJ1*I#9q|7W;g#!=DKKAYNrJK4v0jFbZtQKth+&%e1+B$40>%q)q+-XlZIVsD!G zcfGopcgf{-%1j`&`1>u)+b5RQ;aOcd@@zDn3y|MVvlbsi8x}jL_bS#oJKLS?#aKp@ zr**A*DX}VT$T6ks93t_SuksGoA0OUh!v%z>%~?5E6nQ@6qm$KMJ~6Gjp{U1-v3`jR zlG)hrsr0!SX@;7Y$P2a!Dr~>u7oRcBY(#UA4ZOP@Q!wU;A?;%&)PA$Rk1(L!j>Xdh zGCt_eMD)h=dDZl2_^&zw&kAwP%k-~LpHa45Cug(8z+<08Yg3(Tl8lt>2}8%6y(3nY zoN?hx1TDC`Th}j7wuTCg=;X?Nx1>eW!^MR3)B)jAw?o{${R4Si{u*R_I$f9A#ux zc@9nhKbUbE6YT3)3nb_tuP4AIosG7>ZtP1WfgJAyGVc!mZsC2t@HjH+yMbjgy=QCK z4*(_^LxWrZBrob#?U 0NDlS7bf*M~y(2N&VUfcaEhUvzO>aT>fbbZ1=w`G7PG0-&@!jj$H z$GTFOl#U41x{v*qr6{) T_npW8eTVN|h)i9c1@_+zc0g*BgoI|1~o4)oFQrKsdx z6RC<0X3Dx=SE=M7nX*sTv%|qwE2CcI3CulLnY~AlNdKX8`+&ROywb(9yO>XA*xdL7 zu$iNjW{z3%vf)JBU(gQa)5=6YLBRbYKZf-s6`h5|m)+N&JCpX>LQ)2Hm^}GH_-ONY z@?}ViM;9;sqmuRPNH*Bj?EOb!8w>yx$k!YNRw)=<+m1>`RND=F+k(W X|RgzdS*UrJ4( z%rT-|v~E&2Xz31dsxBfgyRkXGw5dr4@<=uO!`b(y2c&O|SMAm=7eWpJaJC)w0PwBk zy4~D p0p LOPl(=B+O M4 zK~ry6(hQJ-Kn;V&>Evx&v6qtXM=7_5(O(q5ldbmCRWh$?IkA5}d-&_Xv3$AJM=JuL zy_X&Pf!(<~1+rMGk73mL8T00?cXCRZG7lQG* J<+Q!!_SGS6oq)ITPe@U^NdvMi;f*dNK#O zC+3>cmKb~ZLt7Ou>|9K$-wn6B-UY%RzMf_^zNl!4HC*8?MO^`=x9ANDiUvA)!lG{w zJ?RG0EW~@WfeEx;ad7ESX#hPY&`#EFd>RJLMI;Fg=9^>t2fW|uF>Xz-JQSuTw8!-c zeQA6z7X9X(>gMEA;lu@K2 O@@AO|tM3p{&4mTlRr?KP<A1F6dtL;$05PJ@ z35)pWio)s6i@WT2Sb~^^sPp^nEo_-2$6Z*}Y8b h#PO~B2MSbndNoy?);IxI zX++mH$ek-TeYb&7s|tX=?F^HZS{II3TT>dtkmTL(rCFmADc#0sudPXBpU|F)t#4gr z&jY`ZJ0A15CAtmWFvf!d94YG1P(JZ{8|Y>2@!3nXPg>QUI8~(f#5i1uMuwE2aiY zCh|;(-NEyyl9~X8;%j0VN86vn0v{s1MMUsRb=w;ma{NVMXRQ@TJfv1IGAU(-))<)U zgWD{iEo%@}Ain9RixhS_(L1Bm{-hnm%l0;{=$3IW=!edHTe=+g{z~i!)Vr=<@M$`s zFL=Wo%>%fD>UnMkm6*5&p3f7mk23pI=sUuT>vWC&lCw* G&eC8x_Zo1{Jt{Iy~M-+YFJv8=M;umJ}N; z8{@1o@Vwvm60PSc+8gXByZ0-U%&C2h{zF`VC3^wI1spP)J7;YdKbzvMM{j#mdiVE$ zqplhX6E{0dkNfb$mRO!jN7Q}YiATN8!q_wlQZVI6Den}+E%Ior{UPhRqW90YZCbuH z6`eLH=`>P0+tux?YPIPNMxowT;Q5k_4b;k=57q^6O>UMH50Ap)4*3Zez9$H1tCa}T z95hqk_H`{tOnnNLy@b`=i*c>pE*7-eE1hQCNLUE8ntD>LbEB|h`Ncv0o}UHbSFhH$ z`56p%3<8PYU<`?D>I6Fd>M5ME26WU_%ai(8z@kEFPL|+=3e#>|HJoVK^FR9A&`&XU zlqIgixS&EMkm^wXvxk2YCYayx#Zy |@3!mW zXPe&9s|odb*$g?Li9$uH05?^Ad+)!p)-S0F_# iO&*UPEW$pN;@J?=j3LWwC!630$bEG)6Jb7yrg+btd`sLTo$jz{$CaGHhiDDd7- z7)Ss5^I BHyy%9cy`_pG3=_UGQH3Y?;Jg-z azhKgKuXqa9c;6RD2XVuPn*5O7Mu~aEIQ1Fkz _d3(>`dk>a6ASdT991@|9YQ*ad~MG>l=fw0^T0KUR>m7jL05mn4#%bG z1sTqT_IXre8;~@PQuHzZuksU~Nx1UFD_d5gwqcB(aW*k&^L>swB~_PO)3R+@J$BF( z876DXaB(6!1vetJH6CU#<2Vk7PyL1x(9{8S+oBaHRNC$6)WkH#k`*5IW@0-B$`+!K z_jk9x1|(hKcdt^%mClf`S_@skv*`MD4*s=$+5g;n_GBU-dHW(w_&clP%^^E4il;Kt zVSDG~4&(Ta#~Ve3n$>G46;SJ3mZ%f$*nbYad*?PnnYrZFe=6dPld}6@uk5cuknNMp zY46y_0uR`Qe&;!9;jg6H#V1yBW#)+3Yu}$QjLS?6Qxo~9nR{V}fN4Q;)_!0V^={#& zr)BYm(k-OH!GHEY8fgC3py}}b!nkq4#jG*$TI|-eTUzf5G9JkXOeesod=Gf9=wrec zLO|R}df04#vLkWy==h-Z<&vrp2MgzO-YP?tqmJnZX8!@t#W{CEw-Y?B8hV4(pUZYl zeha_2q?mEZoX{JHUcX;?Fn}&(!XYCT>yu|)9y*QJ85W-k`O-0olc ERgq>D26*qlckQSgwd VCd4%^tZI=oGKwh0($kA&qCEg24EpZmV xAk16L z2km%W3o#m5ttYJK#UBJT*e=1P%kMgfhf;$eMb4_Zc7$#* <9T`lf;5P?5Ayzz?W%K^|9UHh{cqBX%d7P+mGUONBAd1*50oqO8{tW4#-MD z5`8i12{;Xlgyx0tsM++Ns=7%E-#~}ARETJSrG`6focj@A`fdC*FZGVKVC?X2LC=IZ zc}2bl)W=^TQG4}WDm0(h2VaF<#-l87qN9=}>h&nTMrc%4%0A_wUG4vHRKTpj68erD zg?_EMxWM1nguHNcXT?}EtC@W3&vECF_S=C=R;av%Zu_-MmB{r gcu`(2T?$G=0 zMV=*Yogfm{L93$iqcBQY_G%YlSo~6@Ct=$GXflT~_5n=|AeI#{#QY|2ssB3FN!Bsz z=e*5@3(CQUy1i$Hr?~p;9g;3f`A+Zv^QB<*KxkMw_?0)s)8VAlsSjuRoU#R;cPT#W z%kNrWOIl7D`PoN!uRhtlQ-$qW9S`D 0ed9G4&!zOr>vs<*Q$cBMZRP zyNZ>MF#rJFF3aMnSsQURWA!_
HU%}_&~7{T|zhy+rq=B7?k|gACT|fs6FX_ zGj! wU<6)?+ZnEo?|tvfKX~OM34p>aokJEG9cez4P|)_*a-Y1Y`FNidYol zc)Au)LBLA?N3<`40#OmVujQm=pXVH%dfJ8G(p-l$=TacV>UYy1G@^G^fM;xh9K_Z3 zqCUql(5`J_G}PJ)9~Au}rj+0#2!-C-+}b)4USwqXCmplL!4nb4wj>9%LmuXbOI*GG z!f-fK@=N6JIAziuZ+sC0K9|6$CVNl6bU9!#O0vo@K9Rnxg$K7j;VvW$sw=7@uxo!N zzKZFO3f}F`zMWw8_9W{orp1_lXHL9ehQ>Dcfmi!htcAL}Yw;3!l-iq-59*v;Z;hl8 zD<+G>2)zN3hd@ux1Jk<-*V5LtKBUe4`g4(id^!g`BK%Om5=90DH@yCW81wVZ{)87f z2-)Kd7vbGtD=HlN{ny*G@V~sF{B;^nYIA+S88lk8IDNSwmzlEbm}222LZg@$CJxKI z@Rj+R6IfcAv|hO9L8i!KN1de)_3KCWJ@J?=Ue2_>_29}wow|2Cm^fLAfKo=B98tIX z&&p%Spxo1`A}B|&HO7W;ha|bIUBAgx##v$8O}(g{nt9n`ma=OOs4tLx$}{qkpURas zZ3fG3%=)1Z05=?te625o9=y;h+`3V3czN<{b4P{RIkBwqP2Fr#_|=dADstc+pWCtg z*Fwde2R#019w91ErsKRutZ VUgS#!RYt2<@5Ha1s_*-e0bq(h(dR-Z+)ufdy z4X8=qeL(VA)m&A&)vSDrBi1|ZR+41?H;pjSAiOA>(v0uqAf|GVkf-v~SNJ5kKW?%* z#%Z^~KWM=!qa`y&AQfvo9)~&!IApGU8{j@BIw&Z!O^~ an)Z-W!RA5G$L=O^;;x_-H(~P-L%eeCV-s*oTH_(bE_lJ)T3%op1lbGa#fRw+ z=ff8%oIP#f3n>|rzcvQ_2a>+Sz1R3ll>9PFs9}MgvJdFnZeno(846c<`wY5HSiXcm z00lf$atvUZ14-WFlijFvL&V_mLAKV6wd*^UJRWS63(u#l>(i}HT>=w)n@21~tFzL- zw@uTsvW)*nCa)1};t5$#mLB8Qs 0qNBlnDt+fK*<9xOXv&sMqkDGke8E&HBG`&bW zn|O_YqnE?ovVZa^5gr?e(x?g6DfNY$^(t(2V7i?;UIM$QDOPsX^`CHw)aylAOFI$- zwL+P1^SO-dg|F%xhk>Sy#vo|~pS|v%iCm|15u0?}d8bd&@mDuAScA& *BfryY@rTLbi~uMz-4yNQTV7Qc*1{P;HB>?U!l!cb+*&)ug>fQ z Lu+Qw0!iGW@|0W{_9wf9ZLEms~-t?C&)viV14kax3?uXI@J1CtrtYb~%> zKb0M^%BR;kpG%krLIe!ds?~lHbF(0u9n8J0lRy){bJ#~7&4q7K0nXl#y6;&Md?4+i z_W0VWv4)7*)DJ7`xzYQ9sU4rePiy4wt do?q`s<}?%5r^~b zVQM7E?y?&Ii1ho@b|>P56rAp24ft;rTJ$!Qez1P~SV5@;b3?LiqPha*I=*G#iVm0L z3 LY9@v|VrteN|oAbH+mty=?go*8L^&9(HX+x|I z(;vSgWWE*c)ExI!iF-4}U;UB&dyfqPnn1{P9gbh0jqwtZUP_cRu24@ZdgOS}^3^4! zcVbAt++ufw35$;z%pJ#Xe)N~*ad`{3e2@F?X$joUIQ4>S )dqAdN)k1gJB# z*B*fkLg(X^pUU@!q2#hh-}WCuqG_(Mu#qh0HJ~!MfthmOyyCL1!}{|hsW#X~o>T+r zJMGnxvtznxKigZ33h1tj#xb9(ANtM~ZozJS>zVIBn^ut~D;gdbS^WcPx$!nLabpH{ zc;VFyUzil>^yz_L^MuD7K4iY ZJPBXGMZaWd79@j{i!{?r&u{ zt@8DwSYkEjVM2H2?cHQYtQC~J&S&`5aMbYkvONMPL(;K^Nxp@eDUsG=E#_A~P%XNp zhX+xc=PKpP*PkXn)S%@nZ~>Fs?uic%SVuPo?So9pdd>2Xf4RqfFCCQ(Q*$HX*9BLs zZbm<14O`S_DH|vRbbrg}q@H%0kpEq{*F5eahL`oHp3)p6!PMSgusF4EQ6a$KpzQ9o z?_t%VzCsfrnqs57@$eJCbSPKbp4l)60H8P{U>$R-VhO9Aruz0!KL@&NJNEqpFE-SmI7fsz-`E@#MH# znnFZUMy-qeBh{ECqv7qJ pw3f-dJ*mg=LJ0(!__Z*giii`bC{@Ib2+<$6_vk-|yuisyTw^iU^Up+rHd> za!fxz$?dkGOy_~+(5j-Yu)Ac_*`F}*C8F(nt~;p@0NJ^`j@0I|RoPrOt?e!P hnJj`-VQP7avBbO+4 g2n z1wTYlWS-o0H|(F@juE}pP2tO~vl{yjrrE@OUVuBj!UYtNE6pGyD~dnE^$O4F7f7rq zeXfxQa`fCR+1FgyRl7>qB2vA=L~Y|9yCAF5_PU4K@}Y8ciw{b1Bdug5NI>bPXc7t^GiK#1>bBVd;hN=v-vL-urdZuNJ)C6a|fsB!nma-K)FtXD<(WrQd1@w_+q+ z?{spX%?-~2H&D?#PC(P#kn0_nZ+>1z=p%PwO*XSN?|P^GOJ2p3vVeHxJ8(x1mp02G zsW%E=CBB^Ur+xF*!Y2gd^!uNnh#wTOKttFW*QETp;I@*U;+M_a4-EZQu@yUB?q;qJ z`m9ihI78}U<&U}_{somc6m>TTCrSAxZYdK)@gU##by+H=Cs{-&Cg8cO#i_i0&8F zvSJ?vxAYP||0L35j)rT=?bw}0)-R+ya1nf`Svc{- zJ=(v8isS`ukO M*^!RJ_*Ok{w!r8 RTmNpsF}W6{4+7&O zuTlfu7WfPYz_JQmgPu|c^BLp9=F6);fW|D@vIZ~i6D0q5g8mZgbGzY~R^8^6;uNpg z*QkZldq;qp_vBVzlXphBwAi^~Im-I$dmo 2Ht2o0K zhUrkAj={sH{07W?1L$lwDqIAZRv|Lffa%9d3m$W_1uA`i+O10 LA%qSa*oHt#^=((tcc8;u5HlgU+c_N~I4 z8Exll=L%H?C|c0lSuG;)ojl-K-pUif7?o~<7EVbwc)~OGs(*%+!y7)3h5M!F+XT-l zsXL!H1408*WI7YR<%GMQP6Z-_z-jggTu1u)>>``DxyO z1!ihO~N9 ndsE03|CpsLPYV( zs)8Wg_cN8k-JPmE{b()ih=-}&YVU#rD4|yn!#XqERpyOtfrR`coA A_2h{~fV7YZzvo ze6~mFgNsoGf{^IUGnEAO`Wh3=1KCds+IN`Y8A z&J`OM=jiPn>*X6|Z1&OoL#MutaE~DxJ}uNertogl;LmK%Ozh<;2e_9$>6WeeviXUv zg^9xDO-hTu+nv|N7b74%QoNVlk|b$v;h)(%0YsGbux@gd4pUn-33=B|QO1k%@r#T< z>*a1mSW+JBqFzV8U9|+krKcR<0(y&(+ Vs9palx=Q+0`7&`hD>lOlOVtKZ(x~mit&Gw|{!%&3}8Bl#j3~**Du%8fCgaPBtk8 zJ^s|Ish`rbo hJE%ZTu9Mb;jnH$IFlW)`&dgK9T`rZKXJ^Uj*6}&D7swuLZrPH28 zQx%9SFXmpS;!F tK4rJSLj@!)F22HRvNvVLAdORx9D6KyU5X-+vO2h=+>w1@S909R zJKqj!v6B&REPT %GY$^^e&CJ7AV)No_mDhvc)@S8$S9(hoysKI^|8U{W80^jLNWd*V zIYn^vQHYX!18P}wK1teb1rx9_q53BH&>arNEYw`Rq;`e%31tW2eO~){%K62`?Mk`Q zUuhTx^7N;}IQ4$L*IM0+2va?!7r*JIAEUn@HhE?1QI59!N|w$$FX0sQbVs2=$Sd-8 zeivmhF0#cok#j^#`} ZJm%#d``!| z*2h^)=~}y9?BToPiY`01pfCgzNKW~2ygAhRO*Hh~<}pm_K}HuiPD0t5mvfnSDn{}p zYUEvS!w0&e#hg=bMM*-wpvOy{fDc@otcxzq`-FuyXS8cCv5tLY-+Z~coRaEoYVxap zaBwg+JG;cW;=>Ggl;j_ucHn0>rG?>xJU~GWZGUXWpqEi{0&j zcD&8aDQywex=wIhENF@Td9@rl(m}7xK^~qBB-wACFt^x!h#HkqcvgS&arBeSs%O2% zc;TCEy`ATiP#2sqTfz_IKX99#baxSZWPQQBc)G?lZNH1XLFr;gR=f@oT7`V|l7|24 z^Y_5d$)lc$+2~7bKFQSMEw6tv#cbA`lq-%pbBFqZH1Yb*)~_p;1vA^$7b4+Zug?b@ z# r{)zdF`%f1k$uh8?ncloj F_a)ke%UiR^zwh6T-4v}(-(x8hr6DLa1B(j`Mhs6^OU6|{!HZR zWS6H#pzlSms%273VpwacvC;K8u}G-(X4*n-=0a|2W*L5qa 9veYw+RJ|GW`AMaZQ$ZI;zXr${CJ#YaeZ%s_@;l$``9S{oNZ^9sN!Ph zOyMsGVsm_lLntiv+y+)$kjK(6gra=S1^xQo38BRKQtSBL^v%>8tmwaMbT@ynoNZ7D zTQ4L#a8}M}BY)eL&qcSozgHOIgl6UGtJv$eEV@h>+_N2(Hy5d_J7kH5VpGb)E?sM= zOywX1GW9UK-*<=M&wSclIOLf- UUJ;GvD+L>LSzaj&Lg*at0>&fZi6Rtqh;g(Ae30lJ`wh`*y z;?&I{&98%osI`Gv;MwkRtjflXsqG*PIaR=u)%4KeHgCsPv4sMTXM0O>S r!<6}d=C_}2ab65jq0sttImR7TP z;hK&l8`+sqy8zslSNn!QE$Q^LEJaPIG5*A5R~WI*rKlt6OXX0i4XP5cw>-4R2UrEX zBV2`Oxypu{{Q7k(1b)$mFjrmWwP}Z2v;dx2BDRz{-!39 #q!Q;Ub z%db!L;vB*k1db*aJY+Y#BcWu)2yFXpj$_zhzkZ)LCphV$u 2G|e|x&C-$&?liMssj#=p4tpP~tReD%DX_Q^X{Y5Y?t!_nEZw$V zx{!0~AKE7}TTTbklOV#q{;}z9$SEm;#|Fkn4>b{-$*LP6O^!53TJEf9+pb}G!Pn~! z!}4PKmr~x&@>j?7LGQJkSJ>{1(MrasTTQJvEX)~M)rATfBibO-zbtq5hpG78q|Wir z9B5d~53qZv89cR;Ywz-Ww>V6I7b5>%Ri4s6E7olrmbLa$r&dgB{_*kLz0=xLzA1{o zMmD{QPoIGNlJd&!?H#!L)AKAf_+1Eg-f;P*o717~C6!zpQV6+OpfY3W7bYaHNf)Wv zn1tpGO5Q2dJQX|^)b}-u>`o5N7tiGC{1T?n6(H9Yuq^0+0^ATAq#H|lpbiBSRbiaQ z?60y6B4-@B>T=PgB;#@f9MwLqcbFQ_BbOwy5*)sCQG1BI{K)#X8Eak0$4|>|U}Jqn zy7fDAqe9N$U)Jk*magpV9d*)4xeOvmg78owT)u5xZ}`%x^~ukEd)--|9cF^i@qJPc z)t*&XEC^X3Z4%l*X3jn*tkpkMW@hTDs>XdrXGZ*8Rk+;?!@JulqosuJNXp5uJJ0RS zvYhcWKBgS=O}F?}u} !{#l$9g%ieex)d*tW}-S4-JDmesTO%CDY`V6=x%iCi`M zveD~nUrgWz??X6|<@W0w-uk(bS(o|X%;5vg&82@NABOWGD>U@3>xF8-9x%T%m6ByG zB%yB;^4jBy=MvO|-sQ%~jkd@J8|I9HpYsy8uG=!IF^=p~ |*+=My z%BVF5Hmx{P!z&l+x*xsPyOMQu5F2DYJ?!$FikxOMRt` +E z_XYX(XIK=uBZ&JgLfW)y&;d8EY0ACXe&9flPH@Q}4ytbnf*40ihXmHwZNUGJsq+qJ z^X=dNT`k&Dx~y7l)oATqGgZZ>s8OxG1-18HEk*6UYE!heXAnfIw%VHnH6n=EL4@z! z&+|OT?{^&6^>=b4_kE4?eZJ0j%gonqwZD-9QMXb+4r>NNcXwf^T{iF&r&+kH{ypZp zD!-X*>g_S=)MU$yh6dL+r?6VDy}HCuSJ%gH&&@)yM_760PPd_RmO&YU-w$7fO0E&^ zK2rw;ZcD^^A!Lr_-oA~cguWh2ANLH3(kVr!vAQJ`9Byp{=B#}r&U9=-#{!&enV5%} zn86wwvBpH-nN$ry_9;Z{wJ_>AC2V{>c(d> y87^U|2Jv@kt8!bksMubf4ECT z6 yTVx)QMviKtLxSh z&6Xb=^=zEOkCsYCGu~cM_O-xChk4)k7W{&0l4b1f)%*en9^pyWc2O@Z@cKaT^})y! zmAXEmPmS`eheH_MDFfG|+JfSJM%~*=jz5Crton^B_G;A+!_qt3%tl1clfN%o4!=dz zG6lA2HrLKaVA#QBnoC5@H|Oz0`bWR*pnk%_0n3CND~di_`)*v-!%%AMp cT9V0}X)OX>dggX>I;JoSv%CQ@j4Zuyw)w=W%~bL1$7|;==fUnwgsLHT8& Ju8*X==GhE3f9puVZDuvSY0Gt` zRd&yqwN*&Ivh1|qo9lT8=nELoy!b-UKZLmyGOVP_#kTMyq_Jy58NeZC=*Rna)?gk( z$F!D8V$*H85Es{0773y)It72mXI7`my#1-=rS=#YO#V^FJ-C?Iuf3(&x-1nQx3Dtl zP50bqzT|&o_RlY99Su3*@40%db3 uGao6asf_RVfbGU#Zms1tQijqy>N*~voK$m!J?ShmPGjUkb zrEE%F5ur#0w!+56vwfEzCus7SSye063GPp?eC)J6wufcU2X8*mUAoCwR=&uQ^gZ?! zRmDjl(-lRzH(5$z+RtAQ8e?~s^X^e6%iWmg5-ZK!r|p}e4LvcO^m@cdv7C>5KI53* zb8-#7p~%2b#NwPWPC?;CY;3xcLbsu2*n#nU%Q=N>wq9cYT)o`!g(q=>av;tt8fwX^ zH`9If{VgEP*k6#Z_1N6L#fMo8)xsx&H!an{TuphCBBY3CnMfChwRW6n7i`dOhTBdd zl@|$|2YkpSI&ujIc6F~+m;Gp%F7J5vk43lKSdA3Oe@sMX53)c;yD;~q%-O(`H^PU5 z%hVLPZKH>YAD%$=d-rMgT1IhpPw40llokI#qh%p8ujCQr2YzOq)X^P9oc&JvC!NRN zTc3w$+pltx-PcnuLCTdNziC5XS2$jC@3#%*C&(ldji*D8j_|+kj YzuTP&Sxm@9xUm=5vnhGVHB}Z#$D|&1b4sB(BbK&a3ykd+@1K8WIckoy#5R zz`^EYl{+B2L02oQ8$*YDsVOKGKo+FAq9?I45->PAFjH+Q>}fv}y*)0{tTk2(t*V`+ zoRE;uPAVOA*i(xc4je?8-jvPMsIi3{#;y+c>A(Bk9P;JbdBFa@LOBHabiAT1O@d(Z zuzvSmuR51EPVMjAHCXOx37y5W=K~A<8|F*W1xt;i_!D*TN|YG+Q&y5%C&WNGfcQjl zQHQJ_tksClkcU3cHemfUSWf*yP{^EBIiv2U4!nU!93p4M$v}maBNwlVVG3ADe=NA8 zr|Di@u>L16Q+yGec`#p5-%=fm-tjA`s;}~pnR0OP5TPM#2f?c&25(EZ{hEy7JJg_@ z(z3Lf^Qi!PryFri=XE{8lYOFUY5q&n?zPsMXO(4+DtCT5n*S3{{OQ_T<;De>Gw|m) zfNgXd>^ pc-h(V;Dzf8*d>?D;4k?cGXK8+<#}tmR-RW4&~Z=WAb4_ z+?rNzgCciz2C`WrH7;L%gy&HvxYyD)gLm(y0R8^d!g_lN0a>eDZL+#2VGM6Hz9cbr zH4Q$ix$zvqP(%@}!v;f=%%)gc {pF7$6u zPPhQZCyecvmD-QoxZT}QUCC;6FnxO3ON Ah+xJ34V76j?>l 7e=jAHLUhyvwT+FKN#?r^?sE?d)pkjUjgVx%E|z zQX!p4hO(2HxT-a4$WOG1tB~wPViI_3>r8K3`Qwa!&fh 9Nh9rJ~hJC<++o;|a4a z`>xYDOlIlUc2UP@Qa(JXKC3j&>#nS@8xsBc-lH>4#Ydk;NcB>nU!XO8ux9FX)zrhy zf)%CadKrSMm!_JR=2rTPYKz-aZGK{&{&@SW^WZx!rxa?xCPk;rHa~9$ul0!NA3gqn z(L*qORCcvuA8%^WpiV5v`yoG)a_T@1fyo@{&L2%%RQpeS&~4jjZ_g`5+Roi5Pv`5t zh_8WdkP0g!9qWgSQ|wF|wo-^cOpNOT-7uiJey*E9Knn&z)E{R-(w>0Im%G}3Qd(R_ z_k~NK97`>!V`hiKr5Z(SgDbg1H$solJ0Ar$qXe4J=2U`RH|L>bA6~97)aaq79)-x4 zlGf?>NHRmSsaSSkL+zK(j~E(ltjNTF59DQ9u3IrE_K~nz-Wr@aRL;|Rn6>cv@%s!C zuK3I@Ypc&UB;&+`N!YjqQd8*rmEDJx$OGyUK;11$vQT%Np|gRzvi ybEsYWbq%u~{^ z0cuDrmJ8__S wDRp4(`84zbm!n0 zK{b _ap>t-(Q3JN}ejp4DO +h*A^ z4JNZ&^$Bf#S5caBP#l!xu$d23$uLvNSPIi-6tA0o`X|S$`xd@MYL<<;PDzp`DW*;* z-lKV!C0yA)*Vu-Y-!H{LJ0>|O{*q)E9d~Yb)zVqZAEYsDlQ1RSUryDGU(Nyie?06# zV;mUBQ%86*?rzz{NaHTfuH}kGw?w}<;g*>h+lRjlOjB7+sZY|N+%{JB9DTB-wdO#G z=6^2Hb`=)%XW50oDa$hL#a@L|J`l=FyR@tqwmYD!$H-9A63XL5N-=Qy$p*v55TA~E zM;2}MjGSGPOEA@%zF)XbnNap3Hl@d ngz>MAY=zHWU_SaeeG72et}EInLm_;29OAA3$t_0x{e@3lzNDC} zZiO3kP4iK{Mb_G#Sk9ICmj*e)0<-r{#Q}gSr+RK+7W$Iy0kcZ)iiHQvF?*v%_DNh@ zx3}H=?Xal=ejjw*pQQSV)xlY2^+r};F@fJ3^oDI!c##6oLQf|f4?_Bb
(DiZcQz+Me{&KI=27rA`?e6o&ZFHigp|V# z&TfCJdyI?F1bTV5i5ig2BUxlybLfwThArCq&F(VP5HSvR3E18r29XYBR1IxcrBvbf zqpQo7!*KJLE$_8aGh(PP&qFXAMJpHY547iNiB)(BEY{i3S|m5@(F$Hh`oTZrQEi(8 zm6w5Ll~j`2)ACMMihKNrCmng{S7naVCw+ygaM-^<+6T;Uy6OzEBg3!1ZXGG9t K0?OB2!>Lqy{(AYy63>|!oj%I7@ zRHZOj?zn!pPo1M{PlaNo&nbuz*ueyy&;jjF8n)%63FFvTmuu;jAz!Rd7UqS>s>4oV zs^+cis2UHWJ0Z#3*eeW*X{%1VJ_gZoSdorBBb7C;3u|c#z&Tf^b@XSsF4e$y>%mi> zVs5g0T<~vgffo&CpxdIx>x>gvELo@n)#EX2 N7Q@9SSmUyWo%MSIL#Q;q%d|qth@IJ?A7MK=#}HJuWQ=OIVLIEsn+ 5SMZm*lU1gLBeJJfJ}NrU&qv& zW%U8Is{`;|A|sD_g9QmNOf%+JffNr|PoD6W+NT*C3xHYp$5q%HNTJ-@1KaJ3VeSk9 zrOXBozur?%*t^kx@Ui&xdTqyl!*y<^=Rg?(ySs<-su`w-8mk%L5f~4!)F)RgUh5$Y zn0|4xgCE`MJbp3!OJtC9jDQwyyAC`(ID)~P4QIkFeQC%#bXH3!6}X!=BrJu#c+eSM z1)gI6Vw8q%BcT62s{56vSYJw@(iD9!bjY?L0yBT|0S{U#jyw6u0Q;Fb8t|PZhk#Ko zo-?5A$8De;s{nOoPAy@Zp`&Ccc#!wE=38T1_hP+B0O|ch@PUhtXRx-fEVEeM(kgzG zk+Na*5A9ky>MhP!99RsuPNys%Jm3Kl5bL1fbkr_&AeR977zL#kG2b)y%a&v0g25}= z`UoMUFvRBxVCp^!)me71c+&*6lgsSstIl4{{1WY;(%t5iULDvvA?QU0eo>D}<9?-q zi$W&?HPCKJr;p&bK5KC}d{>(rt#fJaDT)rcCI-AmpY4}|5M 9fNrYTh)! z7TPCbE4uR49*+O4MlDgIJnho955dJn)~BG?-$}-7*?~OMIuR?}CGMPs`KK6m)DE)W zUXmF(eZ0jek=$b+HnH4wgZ-4XO5Nj`Ppug6mAdA~zQ#M2X}9)E&C2 pl!Kx90 ?#E_ zdUN@jt^m#xMP1|COi=EX5ibNIU<%DBj}J#3fs86uMp(Aym6}(REDKV pIyfpqcsj_8N$qxYnc{qc`Vl+ulox}@&BO)btI0Mk$O!|mh%N!`Js?g1{+bTk zHQ$MKDk$o^pD?x3c2ZrxD$Vy}T=5reLm~|8@~nrTd2jmlwpvX#X9InQp
n+{pGV6eo}B`n(*itZ>xKJfc~$^ z`??;&iM-})fDw8*x%_xxKv3j&UEu09^g*MmSBHd*piB}5!;}nFI?u| Ob|Ep_~n9{dDL{m4R{@P=bHci>qmVxqNRm8j9%3 z;y?Yx2>^)mB|HES_F9%cjXfMWUf(@izB^|jyua{d#%N0U=o5NYVx)wKqyT_&8UpZD zjRKn7yOE|$FUr(CQB4x-)C#fZ?A4XyC_(BDjc?HVQ+GIS#|z2GEsHED7ke$g0^Y0d zwi?v`K6Qz_wtn`N$nq8Hr&CwnN|b0t-JWYr*%E0Xe_@JpZ2Q!z6AUKmE&F7!{uc?k zs_In1;3D?f$`r?%9f7o{Owh!lKHEPKXuUtirWGt##G9TADe;=t3_%~5ukL-CU_0{H z(NuS;B66=iZImU=xRGHZ7v_3M9Rw~_gbr3RV5{-$HMrwIq2^4?<#kX~8QBsNMbqNq zZjfw;fEepeS{5bnbju}<99Wr;$ziBIm}4wM1nzeQkpgEM;a$=?uKq8JO9EToU;gte zZkiA8f)|aUw3)s;XHQq{7t-r{ahw3UNBPW}Z4tM6w@o$d-j>_Q&ZXn18t{k7mV71A z*q59P9a0-l-AYXk0>=scH~siOnk~c`T+jFa;d&F%GzacF8R)rh5k#2okh<2IWbeAg zS;V6Z<7mtY(%|L0QterZ1zX#abi{>%qz)V>js6$prL0F9Ktg QvKl0D(Wl^C4^DEAm(vEa;jue3QB_*w5x o#W zY}s5a_+0|}xl{}`JS;CKi40W9h`D;J$INW+D^5DQVnCbIzKPvuVXuHjOrupYk@ic= zhozS=kDO(WBNkD?4uk8XJy)msGEn+JyY&f$9pZPxoOGuP=S+@>;1@qXJx4^|uLD#$ z(xC4^pK@W8zh?(EFXYcXIas?eWx(<8&xUwCo{j>;QOTIeG&5K{=;2edKKV|2S;lGF zs |=g6 z*}H^@ms;}ZUXGrDioz||?n|DrTj@$NAUr!wM+CXElQvJ;if-S&dunrnNqL)3Zd~hq zBM(`pj_o({hdA1Z2(}J^K1SCuNib80`)TK?osNHmh3_Vn>{VcAuyW3^6;?C4rY>}$ zf=lf(6l(i#Mr(m;rA?8oIfvjledM54g2X$#wyL_2Or>9`drJV^&6?*|DZ=$$6}hD^ zTz}!DP_CE`YVNxYK7`qY64KFEG9HUEaP7m7vP?*Tww;S}Rv@n%IdZv?g4@U#K0^0S z#q;aFiGXUAp#g*A$tUa@Z^4#>Yk2Rm; *6bK<4`*gQ|Csejl)REKiM>`E_8cP4YaV6FbrxhVVp z &5y@9b_F?d4nBU9vz^aArZmsd&lr@DxBLmHEqnbrx{g8W!^{$wC)A*&Dpps5Q zz4Q7ytD4UzTW(&pSBX7zZC3&3sXN=?D=C~+_QdliHB&unHcxKfZW;^StDWU9-&)So zw0qrrTQ^^&o aq#JT%V%^GB!eBh|*#o}K{39!=cRG=(YM*+uT8fMw6nZdX zqWdal)3`PX#G&85y@An)PsF-(?0t9un|-V)S|eKWyS(jiMX7u61Y$NOZS5DOrLzGS z+(2awQa=w>;`bTLyaaU1uE^1v+`Cuv`saq-l<1_|Z!E&iJM0#;q8{B*1S?s}U J{i4|k~Y9d{QG z#(P7U2yhvn)1cy5+~ob$CuJ`+?@AAS7`U3sqpYd|&vBNVm<`273hw(vp^s*z#eJB0 zpPB5*jCl}$!`iNaDTuVWN;7;GwzL)NyxA6PY&VxnBkfM+)=P1H+)cmdNsYVR;jm^J zVDSfkl?e%_^yvuje)2lJw&3@t#F 5ULobWgfTs9fM;cet0%4(2M1 za^X{2hlUiVQt=eL*Yh`I+0)5GP2CIn4|-C#bz-(vMqXPxOEnI2d}e_gt2!6-4l2@0 zZ4T%AE1-PH^TdIVfuPK1ZCV^|{~Gsq$HPC{<<`E<_y$IL*207u%jBi3{{45A#0?$r zy_jF30<3VT+p71qx9R-@z@Tg91=)Jf>nD0rS1#Irky|Q>a@_h>nf_MyLkjPlM9Dzq z)+~P930o02gjk9J-ZPJ 609;H&5wZCCb~eiCX>Mn-mqfGMU!-^)w*fW{@uM z>=+%)s#8-_pur$2^y@(ORYs18(4+o+ILxEC8#(t$F${s%-dV+enkdn(%uo1_C7e>U zm@ZT9(4Wt!VTRt*OMHd1SbR%D#;U~Vd1ZpjC7olPpcxS%s@B5nF>ZHwTHoefO@En> zW}9Olb>V|_vTfh;&|3C=QGOZZ7oab&;gMWxzTpAR=xL@f~c zfc6cFq04}3tr5HMoy#|@=9%2v)H#pprTmaz1mn>GJ?^1tklF1IDGH{7+`YaAb%kG} zh4f!0tc7iu^rrK8o0_|lDvC71b*)`bL$HJI ^gwXm0tJ)II%_q&3ux9*Zn+MJz8bj*m3++SIG=^7pSMA_*h%( S~tqOVsTqfB YCi znQV`cskUreTN{d{`t;WZyLS+d1x%)P3cAn?=pWENEaQn!A(gab&8~@KQWy@ulHrzc zNr78wq%R@unK22QRuX;2=U>xnujuDmu0=Va-gko4dHi>~k=70Uvn^hy&LPyEwxK(U z-(|!H0Tvp~Yq&=EU*TY(w|SF$YUNVXnu4w`$j7qmX`oWT%8-Omup5}ylSTNZZgBvk z`*->;D@Hrbf2xjPrq7)IppA$FN5R #Ek2D@Qh_?VAY5DTqp(G- zW^z%rw2rB$jo#5?95>QBaEFLl>b9n=5A>oJ%YGkt>7W#^csRIE>64THEP{mnv?!o2 zI#;?@z1*1eeSzRbv9E~S$?2H|CZ*`h@4r_;iYqbN+E;#m_T9D~nRcUQtr+czR~;%V z^T&sJQrU$MVl<2C+#NDvq5iX-QgJ^^bVhP=ASHA+XMQu$w#j(XwHf^^w{bspo&0$x zbg=VV0DG;)a|XTAS(Vf<55g>$6EnBxv`lmB=9XtOvq?2_2N#5%1Kwv`OKS3f+N7_J zG(E$tL~8Y#l(lR?>I*}Y94q=Dg?n1He|E?rAho`b*7i4)=8rSbK5m{(A-pos$d 4wor3fGxa@{Ket;;!=1=M4*t9;+zCwHZTMf3fhae3 zAdHg?A}`)Vim0*D|4{Fz;^(`-F_t+Gm3;4TYWHDc+o93;&C$U<5uuM&jN(Hy!rGM_ zZ+5rfIfL`6q$c)x13^Z=0RiN}E)B&=M?6l-8|((6J^{vw9adnJy3pJKXfFIZwvV zZf~74OOcCrd9vKnf}YQ=9%@LHdX84Vy&!Eoy5;`;d;bBf=92ap-=dbfSeF;&&~ANG zRCEz~7@;eJj& zY0CI}76-YD+gQ0fA*$-BN!`;6g=Y#bho1zuM9H^6YKqfIely7@3PVbPS(~>&-#x^N zc7sTn>c0h^(6CvF*2R&k;H@XpV|L9q9J)bbsRq54ku!*SdygR%W%o|vWLS#I7J8gA zQ~B`~_`%jKG(BH1-~Gc4f__Sr4#y`mObjM4H2d?-AkF)reKshGnu+a{?BhZ3!iYHj zOL;L?!f(^Z&s<9Pr~oM|WX1y|60 UMWgad|KPDFJw2kOF^-?YY%pE zY!#ciN{+k-IHy_5+yR^kAe~!~;Ifq$YLa3?Ta*%X^9h-v$TaIYQ%-lqxobMV`7-~} ze8 lik6#mm&Uu7xKiy5FFMZMpr2l+bBSR+-7eiUrX? z8Tq-l$N1l{?yZAxzp=kW#nJ7pU8DgRkseqSE!gTLJ+$4EK4V)GYG&z+*1{jXH4*IZ z9qj>dGBoC@LvS!=y<-wFJH+(SnpX5_M$*DWqN+M3+_f1lcpb$#2On|g4LXj6{q;p< zW5#2vr qy!NUi!-^yz6IW1p6f|DC+nk4 ztFh3Ir4OOEZlxn2U;nfvJy;L8 {&T z!9UvM43o~$lQNM*&Uw_-JkK!psumG?8Ypmef#sZ-FxS5#eMXpWG06GfZkCag>tnHP z6l(3e#FR0JvB9TmYjYI&^*eu9vazIEtv(?b7Vj%>pjZM+3NHbx>+|S?k0+C*-@wxm zDHx^yAp6H3#Rn?CY;(+Od+pt+>?m~p (y5x0(2L%(iY{xmW&uDI$mGBg3&px3rUlCIhc)0m$rU +z;m2bQ1EyX#}5 zGu8FY+86cOxoVNgOp@i*a<6c