From 30bbca23f4ce68cf5f056b290d31e857bf3c2943 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 11:00:24 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 11:00:24. --- .../20260505/20260505110001-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505110001-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505110001-Diff-Config.rsc | 12 + 3 files changed, 4518 insertions(+) create mode 100644 MikroMaster/20260505/20260505110001-Binary.backup create mode 100644 MikroMaster/20260505/20260505110001-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505110001-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505110001-Binary.backup b/MikroMaster/20260505/20260505110001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5bb904b156600aaf1eec6e46f1b1e0627bfebe5f GIT binary patch literal 270775 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%0DQDAuKu=T>^_DvRnXp zm1c;@72Pxrh(^={V?8L%v{6Ca!jfzfWS3>QjLkp~d@ zV%V!2QZLP=+olaT+Kfy38mVPwenxmSuX;!jrzssE^L_@#CnJ?qS4=#}$cZtGD?}zo zxjGrNN`dxuC&?159ZT9N%O{Ue3U?!8wcDTV$Lc!`gS;EN0Q(Md@@bUr69%QN>9yyX ziFJMD*nnDXmYP&744&@W&ux9)iesKAj9jW?dLJ~3E)yZW=UbYc56Zwp%sDk+6*peH zkp~p2DzN{FsaKhU83uW_4L%2D>!mj#de<2eIN`*WCJ~thQUF4vF`srw0< z$FT^GX-CZ?iScrtsZwafo-+0>T))L&9To};V9O8cp zvf;^MnKlHi2BkvK0}A%KV;kR-c66FjR?YtR;8W}7%SKZwLDZ4U{Q$H?h>3x7FOd)_ z@p_=!q(6mY8>Bpm{Km6wKxk5oX|Qa!vbi9#BrGth<7|XV*C^gjl>}*-8Lf-_-u>@5 zfII*^gxUlyJG=*=fN7N$LCyG}8|&IVSFavhxm|Pxlcn?f7pKC7NtaVHH<>7`SOCaB z=NF#&{P!G;vszoNSqN~do#kMY#VE1=1DN3+ztMZS<5s}V{U3cO?j8-Dh+$1x#x5i{ zKs&-k?uLTFaDdo|i#?C@)Ab)&tao1)L!jRvu8j0b=V6LaeWB-*mDUE>hR&=F6>61z zbtn{&cSG!UFiD|V%x@-=D{V6rWc&7sc5pqQLyQl2f3wQ{D93zNsCr| z1C97M7Arc42fJp5n%(bP#$oZlpSd_gUD!&QqFM-ab5Xh*(1{a1~9fngpN8Rk)<9MoaJ^H|)%SYVGY}eKUJa+{ygzCpR^zKVk4<>7L?x zew{PNQ~q&G6jAQcN`WNEXLXayA6$^xoiUsKN;FJ$%h?0k{#Qh2%e)Oq(~K*K>c2}@ z9NU+3#4OMIh)zzPPMesjbCRp6blWW zR8C+t>`~*B{u0`Q40tP4mZ|?wa(jm!(OKzr;nq1hH)*6+q{!G^jYI8%5e{TNpkdNB?20x4r0h-v2Fu5<;B9HP! zc%^p6#q3xnU&}uvZMv=)YWR(A-p$GG%^_K0$)m-@F`X`xDjpo4oS}6>!jA=m#}{JV zvCzkOI^_Oug>dqah#it>n<7o#h5-LR0KmIDmpfi|wL3+6!F+RN1Xky2HkA%JJFURx zfl!D=I?Fo#Lcbb+Z zXx+8hWuue}cu68b`da0E{IqWLA+BFhaNRvAH@26=?$A2{pxe5qS-J3koHeSoXO8_) zH*F}xn1gf#-XA0%Z8NkF2}cQw)SOVKA80-7>4XDuJ~tCK#>A;h6u z)X&d>VZS!Y!UZTx*w1AD3~kUNn z=&_D+iL<7v;ev19Q@ZNcb!bP_YGVT0s2}pk8n>}j3(N~I>gj*w#{X86G|(OWg#wPD zg=Dd=ezMV(YxV+FM0-$xEthzlCF|pe6TRw;+XCaxg-ZIX3|vApAePdfmP*DL#KwZrwWC7LnKO1Y<+ON{lhAn+L_snbFg#2ijzE$* zv9UDa3&WGB@ z^{H`X4u)JlHv*1A-|$LjqnENo{NRg`k@v@(o9$Jg6uVH?0 zOXC9ccD?k3y*vDpsyHRnrUM?o`o9ORs;S)vQxx80r^M3UC7_488-K>`wa%2~LS^W~ z4R1}|qxIXp36au~#jmsjy2Sw1;JjekW) zGo>{UzBf`nDY+?m@wjoz@y&Ha_)8*8MO~sD#`L!`r8J?m2N_fr$VolSRtooSUbVxW z4%DnaISIZUR~(h{!rsx(=!wfMEQcToO8rfm=iH#)jnz}nW$u*MYB@y@K%(G|vO3(| z-_hMpU1-(_5=)#30_Y1iR{N0)z}w};oofZ>e`Ym@_%M0Q(T#_&w+X>|E9c*08U-na z&YurV%aX@O>lQFJTXU5CRh!FKPaG6G6IuC@J5kRfe&U?$etBRNbBh-JoKb4T0T`zy`F#v3}6@qXCduc>!M7ISs z(p5`!RocUD{7@h&#Q5rJNoDD~6Wr2J0joix0WL_I{8zC+cFwwQi=nbjGME{s z6odsOdw@=vyZwD`pe2o1t{t~T(c6q8NIvb%4 zxPs*wY8zEH5EbP59V>#S1-ES~D1FUE!f19&2OdM!Zl<%sty86Z5zB11ywj|^G#U}# zfAEore|QUOl~qPIPCRrj+lq?65v%oIW6_sdfYS?5anmCtKKMinIijkn;K%3_7R5wZ zpz=LRh!-~WrD&2TeJCAqFjg?O&JGa2bmaSfyVWdvc?;FPARTnwnMwkh0!X*l%!pAw z;WqRaXlEvu*_omE##N6zWo}`RG{is8#U0ETmbRho_JGvau)FLx^9nxtzGyUaQ!a~~ zwpm#@@YxP1cQp%IshH=n~z#!P>Adn?xwS@_FYy2t;j@+Ilb-!^H!EUPRyXk3DKqI z80NAG_7xIBq;e4xH^fd=|A1XA;m}s5bmA-T5tpo4$_@fzc#E`lAt}bqz;}gahA_c! z&1s!nzjJP#F%a--)M4JQQJ?CVG!sB5NcwuL&>fe+_@VoIC)`V~rGi0M*j#AHYw{oI zbocm?xFyC{`*yRvNLI5=^knZMQD>xR0V;nyb@jph%uUHHDzvq2lGG}`;e6I2$6gexRIVpuxz|1)NE2~2@ zsjhG&=Fw4>3^BNcy!u1<`xYG9s)~<*&m&o+ZUdiMs{E%N%IEOZmUi|JjR}=tvw2TW zqKz<~olKNcaV{9q7b^iGi{-LzQ z;HgRee?*Q7HY}WMl)9j_eydfdbagxG0Qy*jCLm-r359GW92tOt*cEnT(Wjz-uU{v% z{Cx}!PlPLq4*3RGA#~o#k@%=iq6MPb=0N7cmF%72^2 z(a#FUJ3grJ85-!+YQbbqO$3kXj^4DD(Uu=3*u+c5t+sZMDpK`2LNsh&URbR8T>y z3Qi(*eO_VE%fUZ?+0WS=!g;wHR<@SUgXqNa6n)!y^Dl6&8)Tew5kb@QoY-M&RK8GA zMD=ih?5;~zq}gVw3wfXj)i=K(r)~ijw_%7$Hk94`B)|m(hu>)aNPH;NU1AgWo5@SI zbq!6Is^3GBmlZF;k?jnzi_H#I^$Wqj7dO^Xu2!KaoIV%n9N&5(*jA~wR}HE{kQW$i zs0Kn{dXo%S$-v{yvhcYx0S(BUnTbhK)t%f;TCr};#R=Ei%5l7m5hcVy{AeRcD4Hwz(J!3=n98B5cn-oNH8JIx*+34BwuXjI47F(PTp`#P&R@nstXTl(fs?A?n`4hsl~=b zEz?R0ho||E0F8%I5ulWVG z%(L~UIY$S(O+p5TB|@fIog{FZ;h7ewzaiPCTJEyKdRs_V(a0!(HX=OLCrVJQqFG8d z%Cw4S94sKdO9H01a+OsS3lSjq+@w3^7%>hM=UVzq`1y$Ix@P_#c9;#9_R<@?5VkW| z*!4z-jKnwClMPwevJM?ku~P11lMe$8=MPSE7PqN_rN69&44Xnl`1xjC&nF<)a40(zFa3RNX6khLVnvQX8d#AT($1Ij`J_gQ`upZ{0jAc7de#hu_63 zQ0m3&$n?J?Zl1Bpmau((SQgOwjuaEk#4xwy{=a(Qpa^th#w?2~3iRWAm9X|m9+?ZH z9Aasx!R0dSO&naS(UAnYEZ<0Ni^R~Ij*0(d`UXIX9uz zW&ylH$QGEuVgT}7+{Mz;ja0`W#Ol}}{sw=01u!FEl(%aS6uC%B4xU2p)mz4%4Yac3sO0E(0f^7#5;urB@uZ+ODKb+|a(BhQi zq3y1-3h)}X>^#17Bw$>|F73s~?vKLcJDttfgE0}pq_YL~-k}-^hP?tCqcpd9Kx|Hc3maTybJwGJPJJq_OY=sqtp-L@=-SrK zmM@X1i3ArK6?P`#G%X$!9JGu z%4q{1mTK#1R0O5HS{EDwNNoL%hMM4ipIC@8Y_7auH3`Vu@fMtb4p5ZluPA5PuL&^6|1d!Ng^CI(v9!Xmf*FCE`t zHNBOErr33~QO%m#ei;hjOA->rY@et*gUlRuve<>bvQojinHw>`EE(?nq!%jM1{b;- zs}`^D>kz+BN9AG!1&~Kcg^N`ekuMJWUv(_ObrTwVB|*^?4{LNjf1@5ITqojV;k4KL zcsxKxAM^Yhh#0xTH(YIPpn(-dPb^VZll6rEkUs3sEBK2f_#^)oM!fq_~<63}b82-&V66(H!GJWDGk z!^K?k+EcLu1osu+Ke#z(5Vd4LXyH|rxwWbLE#CL*B4fo|jn;%61>P$NXL>yJUwmb1 zP%ic-V+|CZ21lI2HP8baV=Z6AfjYBO<*J2$IEvWDn~B#oV!Beu{uAO`2j;RVvbb&E z5ps;OlSnS!;KTI#qgYkFkJ378`?wCUm2upK2@B|V51zF^2HNJpxgnCQiNH#6sOMJ&DuFj-HY{C z$@fl*Z<}D3eLw^l!S2Z{;_jB{%wI~A%nwSKi)mwK2PJ6&k2f8-DJBoMk-q#P=4+hP z5x)fY%dSf`Wz>z;7Z}VRmwG2}=PO<#j9=VO+eR+3nLc-2qdfhjQeh7x&KBNDY*yzc z2{_+%2)F0HfotsNcWOR$cQgN!s$$9}yo^eA2FDJ*dlrk-M0t^AMy+V#_+;#|&HIJN z?tT{7JtLDX^uA`fyVAax_3q;#Q3F$Z8y1!08LHyPekWcNn9s6-1y*3HagGNWYLtiM z6mLq&l|^_&Tdj%%;}951JI-|gPbq4w<-3X&0zt#rbAJhTwNoRgVQ!0##Ujm~u-9@; zwT3nbdVH#n(jzY$|t@27h z>N0<4iP`~PcV{tli9?2IwDDVi=TYj&2aT4vgm(7^^nji$z$4??*mv_U$-<(kUCSRc zddn8#EsZnHYeC_BO|K#fj@?BxOj}XWkzk;s!nej%7b@e;Do{LB0~4V+*~%POIl9@b zyW6myib8foryXZEWir?4dUve>sMFaqR|6bo)zX3Qh${`9FQT&6sepWaR2Duz&R5+| zJhLGyP*y5w0SoNj>H9))i;^*Qr#U05tSm?3mX&WoS-#0^=Nuf-&E^)@x!Ijk)C!a- z^f*DBpQt<*c9+XX5gPFO)$%SW0R--`W8*ggGX$u5{CLZCsGVECpzr8Sy0%xYgBFTvQ4(TP^w{gu%G)~oIUVy^v$ z&w?bJHVQ3)yyPGU{pRrGH5=Qd;&>R%7DKhCa^!4r3x5d!cz-Y)wq?cXj;3(ZD}ywS zS3kn}tc#&a7JX`RJ^YxgH@!Z3R9Z^Cjig%H_Yv>a#-gxNL*rwj?u&D32R15gu?6}J z&hek3$d~TX?i}mDG+CpSOvW`v)ze~r?ILd1dT*iqZsiAO}~l` z#*m^nsXB?{CI7|tJPwUgz3Uu=k^WZtCu)sHG&)MF6% z`4lqI;r3=vZ9VrtqHS7WMBJ!@o2F;vE4uK)@EIArPthFjZ37|5PmBO91v1C_y*JA) z^Aj-Wbq13Ga>^qgaH`$liKi-Gzc zF4ffh05Dw>%&bOV2EW|5lxujw(97t?(L0ym+`4Q<*u?4M@OclOmuJ7yEEwB&5hUY0 zbE|?!4j1LTFu@fpOBouf3t&M9`nmr_z*DcKFK=aS94k2c-a=63_pF&rCY7Od&CCF} z@=6THwRZyX|3Iy>M>gk)SJ@CeA$Ek|&7Ufza<>f&|8W%qhAaOyVYqp-@08W966r5y_S|d6ew~aG7@iI^d(ekxLP3AtRCxe+MGj znpVv8Nk%Z@4V3dy(s5mUoKo=n+JLV1mPHDuP_LJUa!|nqd%eQenSY*v&OK{2$=u&>X_*HNSQD>>;b(Hs4$?XeQ}n2 zTc2yLsS;OP>rm0C<1cY-|0?5Oo;PJC65kF#R|;Zp0D(_^)DJ( zKt&GJz{oCuM%+XXlf6l6t*^*MR&7z3yiL4S(uo;-4Czoj{cUhJCP#S^@Rj zz9i`>rCH^Byip~jzcAEc2|v7i_3U*4FTY)QJJ=THha=8NNAVf0(66}&U}nukG>=@0 z?E-v2V#el6WNy=qKs~HXs|4cCeP-(B|iZ8@@ z{EOyn^zlJ8ON9x5Kg@|&#qqSx5|Te<$J#<~&t12`zTPPAbfs{u@gtvBb8vbX;~GVC ztbzwnn!SQ<`bwtd)E&C-YDZ`VK?cv1=#23RY#yUv2k$oV1{ZcV97mK06R!crXdirM0vOssLKHZ9DMhkrl9cLIR#{Z2qQ&i?=fg&i~0DXxFKU1Wi_yv{a z77$RQ0zBHKoi2bmK?ecWTnXtUGf67vI-kk1?Ly1uFSz&B);+CxU7{S8#ktPA9Mmkw zv?kJM7y$h!x^&d=;ScNLJ@)2vkrvGj^Ic1V1)KD?A#$=4HhVraQ{Hiv+}z>21J_(& zH;9Tox7Cb7r@4yCzDW0@)!fx}g??twE)lR=a$e9!r6AN}&^>!Q5KbuNNfM@)3yzkC zN8c$!it4992PUGoULd~yjk*p{4`UDez1m3510R|)yyhT^rs60PdBTZSr)WD^U3~rS z;qw1Ub`S8|^$f6YrYvJCKsi=SHI9yhIZB3ihZim`_H>{ZiKDQ=!Cnx+^350{wCfwzeMPo8Y! z%71A6ckE@pp!{UwXB`2{0`)@XVjN(1j>tvyqQ_&#erc+J-yfxV$%cG7ur9t8Iq_)j zsjlkcnbEji+Zw^|2C)OXpiKeTdvSvA4~XySIfLgZ^_bk_QLJ&r)Gk{Tg8>v_*_s+g zq{v<`L%J`vvF?!Im8vng;+!Xl?jC())@-He0mAYo;(fBs9+SK66h+oW8@rs$f1b8z z7>Y)DpPcc!((zSEWS0u7F_wBZnmEXt$ufbodColUp7DW#SfxMWT#3m=sbh4gaO_RwQu=I_x_vA zOeLL;dE_e9+Fu1JFTh(vk20Aa>jS$7(52YO*Dh({&4gcLmfk zw5dNI(}J%-SPvlJ#R4-M;|=pmy)kG2 z4>N3}GjM;666p}f6@o2L_gd_91^McIHi1pt81nzg?l~l5fROiHA#V=`Swjz)i=>1n zuoMooBfnf#)dc&+Y=7k-OY5G5DIw=7v#{{igfUQw>3^G%9+@CSZ+N|bB~T)(vLGs^ zes_9chb18-Mwz`=C-p*m2@rEe!>KAU2>C#YS67&wy+>odg?Gl|6qadc4M3`)P6nAA zV^vB3R$+t^18TCq!S;q?Dm=+4B~$ftB5?x-K7g*NNq}^^3HWUe3O{V3 z>?ot~>`N@soFegS)`_TQ6GLy`-tvbA)|*oWF_4d^}SfkP!~VhZJf^B zYaB*Wh?&e@i(#j|6Fi;f9K_^}q;@taGZTkJU1jQ^>nvtwGPU=>Rw&~;4Rshb^c-3r zy4Jk!scW%C>D2FwI>usv`UNTulID^m@)zolgJ_w>(%6;O;Wx#H-SMLUCd6LA6UNo14cj^xzQLzpd!0ND-tr3vrPrab>*vMGhEbZ6{0QCT}&K+44KH2*@ zvCjMcaE|*lkSpt9$IFiEkfvTxOBd439J=-{5Lh;92$?vi#kS|$eBYc&zb;Drda_<> zO8+~OAjD0%s~5-g6xIg2m{SU2E_?!gf1R2E4wDx*ksb7e3SI9Xx+|vTZoiwOE83od zn(oaIZk@QJO!RevtsuuzYPDjSSM%|!~if=VihcnWG z@($ODR~c9bpP(mzhwfuk`Lb4%36em4C4|CWGJ7bn*P|z!*LfU1hJtT334-5p27^#> zCyG$xk0!t4unfTP#q8j$6)C-*M+CL3a;ReUY4}Gz@THh zl85vC9(ayZZJ2QKkDkm4D^ywSjRF@Xj>H<5n}CarZiH<|161{T-Y>j%SLD1>sCPKQ z%hB2NKkWte!JKc#PllT&Yg_h_4GOY}J0!rbue{1a0p+!vC?c7O_x8b$Kkjr39Wf2! z?|kf5dkl-&PGss;C|P+2;5EBgX1d4i=|L zMz#HI%F&^-c2HT0WZ2F5)i0&2PN}OW>;uNREfj~7nO z8o83v6EA7&D^D+^2Azi|lH4-!a5?dxc^uVsMjC>8m0(U{`tzO?DM_|zE1&hxLj>9) zbf%}p-9T}VyO08{4qRh!#G(8@YL5&x*V&Hlk4(*39uwovu&A{0_Z@bZ(vEE@9i2Xbu-yyWQN~^ zR-pJZj432#^}Rr3p~tC&NKNUkOQH3>KS2^>OVLJmY3~mh>v8`M#GS?vs@wmFu)$Sn zj4CqeUn<5mw!)Z?LCX&9kzLX|3}x5tP}d(-jnFJ&CO(LK#&jf$9{6Tjdmri0m#U{s zbeIo@FUN{ZTQ;<@4T>hsb@q=^&Her1J3m1^-WLS_Thd2@5a$T&Vqn}Yal>+B?>hM#3bTmW2AOW@5 zsj#Oqca$N>$c)D)C}JBW?jtX=`?L3Y#UjsCiE_4yQ!~3iCla~sxUIPv2hzl&Ur_Lc z{8;KYm!CIiM0pbnom(lA>5^epLczjM>n2J{=WL7ETvyQl`{m!zZGGjpY{NGWProxf z7fgvr0{1AgvNlNHx8Yj5e^lrPkM-AT`Q*FAr_QilM`o;RDi?lhwOO$3C$3 zSfpV}g67dBBU(99Sl(9mRODwY^lhbQNxHJ%C#j%=TTw_C>%A4Ircr9%7Aic7Cz~BW z*S`u3VQdp8e6tuA(WO9vn*RabUpGndguff1*ndxc4wIh)z0rB3XrH~{a#oZ4kE-9t<}9gQ4Nb~Y*T`Cokzl9ns-K_&HwczmGZ4-D;6}dj z>F#;@GD+Z(k8q0k@$jd-{2T)@hFl4;&mtelyY9-a4jI-Jmcqezg+G}COvqQ53=4Qv zY&8=V=jJyr_MIv<$GCut!^}hrC@6?bXrBT4=|8A-^26pPour{%{u>z-LOnPJ?viL5 z6`XaC^apy>vNmK9$bNo(7SCSYOZT>5XmRiqL;(u#VliLys|bz+k$}ySY76Tf88(yW>ISU#n|n zl&<0ep1|M>S~9Z|5_uYIPC)@;(Io4-lCL&E8{aq7v3UAX{1 zV@C-C{kx|M=bUg&q2=WE#&F#v@zUaunzpS>Ip*Fd5j& z1BkE*iLrmvwtbozpU|H!9{PT?loEMcG3q(QBO|z51`a(mWcIVRSmvz3pwj@eV5z69 z!`U+3`(O3Ho|YvSV{Th;jdm{@F1tYakV~;yvV3%vTdAalp=^(Q5tPi_z?UG?L6K2S zsR(-c+bM*XL&x%o*%9HvXH*xOP`uQ*>)sH3@3D=H=S8N};YW&uOUy`nu4E70cxEmU z=a{rLAycm%YoaE>wUcnk1|7G8(x3T*+Q~!>b1>aq|NAm}DBFe){Ickz$u_we4XEM@ zY%HbG>$;b8-km@=DmXA}dGS!rXHTU@|oUYmlRz2YbEsGs2%2t%6CA7?cZ z?%2roop7rRV%gxm-|@S^3KFQyR+zHfTbN)`|2Sc}jyo90^iEfYhte@wloickEkh?ogrOiXP{jmIg05*QscVP2E{id9+YcW9uYP% zh$Ky;<%_IF-MuJ^8zHFX$HKzixa#h2v8yJ+*X&QzUPqq)DU2uOp=ds<6&Gvi|9dG> zerfdRv4+I0rt<{O@I!dySN?1F%{gs~N9tjQX^v!d3xUK@VR*^-)HfzN(H`2WEyBn{ zv}bA*`+~PGYBiADTQ>zfo0RC4KnJV9$j?RRAm7mO4CUHVT_~No%9gx#MStQvBURBi zz3Xwpskv?B68!eQMMjJ@8TdEa_>RX>)7W({Ttu#0#M$L3``4}|nuMJpZrwPx4* zBi?;r^Np^ESZjIY?m+&_a9wnbO_{LN^Hc}2Nh>JUXCORoR>Fn%xpWh+KcOx0kIzcH zV>>tiP*82Sa62)G{???yL^w9Lcv4CsY)BvWE29d44n9?Rw53#tsCae8^vZZ@(9F)) z^-Ah6L!2QLgnViVceADc46|=A&!GmYYS&L@msobrRG?;v@Y2*3N#v7B2+Gz>wNVgG zE8jV~j8Cm>Py!R8&%o3XHugW&3fQ}Wa!zD7{o#_Qo65$-BJ@kh(*^s=ro#VpV)3=s zP`tN@HK_iuHZi*R!?Xes`#C`O@$y`CW|_9ZJbY0{WDvma$Bu(^gp~oSXUb)}v z9s`xv`@_*|`GK4@{6M_-Ne9?kU>JTPN*_#N5*J6N%=SF=XVD`RcN+>)y*QS!VNla3^(G*OKEW-u)@ zgJg)gAi-`CH+aqV5wBL(+YK{FZ70VYf(kplcgs>)e@d7g)C z{^=yqH0m>B)yx$d)V6;R5KZfnNHZbnDqfEXsBvxH@i8Wk$wUO*zweOMsYc>58{&A9 zr>UB_&G@i$xFX!zL%SXgGG*SW$Y8nOq}x0ygKy|nlUJ9y$1CvDFA5fbuYme7&K9?S zG&^v4v-z(fn-k0hB%|5_F=oS2ltJx%Sy`DvNh-lEs(U732(3>iG*Ts1t zAffIc&flf9r&!=QZ|l^i2ebe_m4&eV7H$fPBEE7i2MY~VWOiX`M*Ftr8y2&j^VWm) z1)}BDdI#egAUv1ArE2Ge?$xC~>`wH|Rl&JMk8;}#kDS^;7gGwWSTeXw?zPxth;mBX z2=;|U*=xM&Xx@|`|M1Xd^r5Jr;B1T=qB@ibpOjSV6Xa4YLJy-u}A@gs)lCX8nr9uw27Y|z?Qoy6@3Ym8ZiYng-SXm z>Q_;XhM8~=W|NfkP`QOQ?)dk-e6I`i>coB6g$n>S`=-wVT07j@><8`%Yt`=8$;DW$ zF2D4ws!+p7Iej&>>$uTrmkM})GeFlIU7HbH=o$KLG)*OQgCTmqTH3cxo%N=~GjYDX zBXF*={PZMlf@Wcmd36X7G&-Y)DCS$Ge&{4_QsAIMd@L|+?uD+CR+ z!yx|a6?mncMr7NWHGu7z&LB08OorO!;JUm&uxP}O_SLT0#$#@%HIx{}yAiijO8q%b z9wDAlRVazvJLzSugxYkA8f#NyyNOhc0{}}>;v%@SUYjfzhK)+s zktt}PUm}BF=CNxrG7LEe=8aT84WKF-)+!X0<)pUJoB1C|uIXpSa@0FU?kam*dxIdi z9w)DYc7qS3^Adi)YqH?c{fG8*tBVuDny5%|inti11bSu`OqQTT7!aWqt0d5Qu?6d(dEqA(N=C|7m?}f3MBf3C zmcT(L-e1v`#^@-CG?%*AlMOZR%&y+xJSnAnK?HVZeboYOF@A4|RMMBVnezKoR2Tw# z*NpFnQ8$>^Afi1rqup+s)P6S~DbCweeeqp4W07}=96yQuKIBrb`h4JW{{&W?RGWcE zaC3f|O7LEL@K~8pvD}ceHXh^3H!SOjD!|{O#!MxDVail)5@GlvRz640bR`7?Gq^?2 zz)I8h9MD`ix74B_izguZ=_kYrt7jDfNW{62jcQxlpoYs$?qHU7Yt;M|arH+mZ&H}! z#*L*h>B>WOb}TPx_F1kRgYwTE1PUpGV}BSm#p?V$w6?IXDeA)&Pqqt98~Nc|40T(t zi0{G*D-&MSjDATga|EzJz^JHA^&%h5vfNFpne|2R$U=QT0K4u81bIr0a7WWk72kxR zll6H~01FaRK#TGo5musW#h{CWHWc+8+kFaP1e3Il9emNuvb!fiqv0L=(^paiAjel_ z;(!<}IfqN`h#Fvow1Z~1@2~*`W`M5tgA{&N)NZh1r2Bbt5I8W8I%e+5=ASJ&gR8U} z+WoyZuti0bE>aC|qxOO}zgrQ8oc`+DCBW}US2u?Nu(g;nVR*GrhT2(i=y2yJuiLd% z&J77g<|v>t%>z=J65eI2YY^ZpOu-Jop+d;&u_{@6{eTYBln7Pb(tggxOHHJ9NM7#M zna8Xk>qsYNseZvxjOCktscK=x$4gla@l5i!5h#Hkvl521mSl?MCx%-X+LIw0 z8()j>)iF|ElhD#Q1dSUW?RVNhtZ4Tx)L8Tf3=Bw(V8Cp=u#PfP4=n=SF zKK80t(0k_o&UMci1pY&i&BAWr%`YIf?3nYeynlI0JItZ#1EE#kM*nz+Jv-^M6P4Ey zLp`_xAD!BjxKr0C{&uhpd`@{y$kL=Mkra5fM2S za7ZfU&}Qfoqd~SF*lGGIhznz9aj8qkopCBg!8q>lL2fx8hAH`nL)eHRm@Rb<=uMs< zdFQDdt{X6G$lm$-ft`odbmli>k|aiOjMQ>?cobQG>tX*$^@R)2wqu!zy87`BN!Q6? zjK*@{nKwS=kZB1v%kXn2Yme*~1`uwp7Lw>>75%HVUL!*fVGWbzI9}&Uauw%oi*BL^ zLt(YC;{;iT6~PzjSmZSYo^n|Go{ZV?ShfBJr$Vut-RZ+YnM;>Cl=FaA7LE<0P3#ky zwch0bt{3z*l(2RRcEHwt3ShaOS_=CkOiK`ht0udW`YRwuNt}_H#EHEGiZ?_x(xy_^ z{&{NpTQCuOfd1-S-ADmzU}0|=S<62|^smh4&p6yv`fKj;^RXKfL{jss+H(8)ayFYKemWa$Hx~Z*hIgv>+wwhK zFVDx1Z!^6yvUFYc!(L!<-MwYB3)Ug6pUg4dd;z!oHkoO>5_rvJ%ewHS9gC|atA1gX zp-v;Aa6*c9cLi&u(#O9!K<$5r;=d8#N+TMO{G$VraUTKP>ikXj&8p491p3UYmpChx}B8YlcO}G zy|njE?Fv`vJWh$RMwL*SR%EJgAFOx27@Dwu>>#w z>mEJtWw(u2H$nHJQuE_WRTgQYw&OJ0F64eG$&u1$qo-Y(5&@a&X;PcCg>z9fN(Z}tyX7E*RWD?QWbJ4B5LNn{P8RyuexwRO9IK6I`$g3LTm z-zWZrVC)QIHf>LIWWC5wy5}bQp<|TdqJTu8tU02(#QgPUCnXs@3-OB-aR}uY+*}lA z2wAUnp+zIEC)_3}go*}0*%CEF0@9`zOOPj@QxyhoufJgYY1clNUhO^lSTmXIW<5m0 zx-|0`U`+o`N+ZGnw&Cguk4dreWn4m;$E#us&WDVz*XR3-p)V*m;wnB3;d)lPV- zY~WzCUIKy&TcdP;#aj?2yz9zXc?o)da3&FR9?GcZTK5$-R8nwBp0ac1djeFY&U9t2 zTO;KnB6W<=grGjn4C5grC1;>x>)qvM15in|C6T5_)>8Hgvjyxte%t-sAU-DuOz?;9 z47$%=Jb0dkP6X`!6_%dk!8}kiDpBB`ggAZtu(&ri5|CgRacJbgr<-8nSZ|SiFo@PE z(+KaFzwK!r=buSie$#rYBC;R5cxR1lZDiSz+-WVSKy3LtUW5-v4LfrWQ%at#r~329 zMYsk9#+KC}Ey(kfRpYdKo^r_jx~d$_duoGSl&TI7jdaPdgH_E<>quI~9H7Rz47>w< zpGj-sj0`Sb5{l-uI#OjS!&V%>GWWbSS^WqC6I&?TabLUX9N2X~)xAerrUit~qOI$h1)+!P zkWD-jY|^C-n0*YK;Ze`xbH8nVe!?ti^8mC{mR&d?CGo%GaGIh?gFw|!U_3}?aY#W) z*TQnG=5m?wG1U-HVJ?dIBN$;uDtGm{nA2Nqi-6i%T7{qdQR^&*kTkoYxznOHga~D2U$~2)7hiR3&XKofCLhctj&`L}J;?sIn9?kk&o4n}XYGpU% z*)AchI-(HQwj4x;Nyq0_&H>>L84$#(`8=AB2W*J0Q^S0d=37&nGP8wJ#D8K^eX-85 zFR0x|{&xh$9g|WW1w6f!z&aZ{zn}{rs#EXp2_4=zgf8VLL*1SW4%K z+IARq2*^}#2i$)4KH=?F5YOLb_THf=f7#_8#{?`>2z*1#99lh(5!?CO84$Vm?~Ka2 zqugftS4RFW^Y>^AhcfA?;q##nkFXu6DCccgqfryW^Ba*5ekMk{OVNZteo$aATWUS0 zESIC@NR?jfp$r104)KVO9iWQ?8i`$ydX-JfD6|t^a*$fVv8p4d=U4uMa=c)Ex)D!6 z8d;uG1a5@7iGyb9Gjk4}IYYm;zae7M`RZ7jxJHTtB4RpZ0+VOqqxkU}&aZgP6P)R= zZBdb+I0Q!v8Px>wRDWd+)@i@ox)pbZ$9G70&5e7=wWSEE4bgzkg`=#_G_iLBawTe` z6Z@9t9vJVef!!u&FJ_EsgHbm%A!3)*>mqxg8^pb;JvyAJUk-P1ItLo@?V5CDk8YhG zLaQLWe;*_rMLIw>G$dQD=bL}MP541PS+J@c=tjQWN&Q8sH}pjo0wnXw`nRxNeME%^ zL?11b38o%??N;q8=M?j|WWw8M3ur`;PU9%;fCxf)-QQK$3<;oEq_?<%kiDRe*pAPQ z*q)O*d3sF!3{4j!n|KQ360{k-CuK|D{V5P z8jg#2kyiNCAx%|T=O&YmS}(wc8TMrk4OYg?GbF%Me2oyHxZiv@qB5Niw!$1t&{6|^ z+)frHm8Z*W!vwdGFZEXzqPM=lLO6sarS+>s)Fvi=%%8-EnktT?O;Ef-p`q(fOC+TXxGFLO3Us#7i1 z0SvcPAR4g&##==!6{IC6BM+Mslr}jBErHO-pfsB<(}k-F=0wrB_eI!^2u{wtDa!7bWt4 zI5;RR<;9wm15G)kR3`$ldtq}%f?E+)nVGs}=TET>@;5lonq4pl#$yF3lJp>y_=={a zoT)&rBQA#clcKlojq-I8Jqs}XIZeyj#+Qm4r*Gi^5DfT4pux$Fy%|0bbI(V}@~?z7 z_<8A_c}X(8b{qOfoLA~j=DQA)@z1h*H{h}}dI0}F0Kl%sAOvArbetDq!cfQ$_R!Hr z8XTC*K++hC#YTt0uz3Y`oFu*3C&W!W`41z?n`5sqe}inZqki)CS94C65q#g_E6k29 z*!mx9*q=X>3Mog@aKTfF@LvPVMltMKo*3Ie~7K-l9jZs=&06(2dx7(61f z55<&o(0N{fIp2U&!2sC`+p@K}1{mx=lV;tO-|7zrIa_%78BM-{npQ=V)rY>zrSyl# z#F&DjukjY5(q0|#ptNQqJt@3XD{$v$;ve{Dn9gH+5QT1 z#5Qg%moXbaK@cn0zQ|K606zwfb)6_byBjt=%Dg!OvmgABBqtjrQiJ)A4IHEy4PY8>DA zdES|tYx{&*Z}X>;*R#gM{G50H3*SWt{J z0e~(jRjDvdUX@kdEPS6JRd(4yaKA1+sptLsX^3ejPA`vm7^uQy(rzLY>B%moR+JJi z&RLfN=8b#b#KPmCpVCZYf*rDhh*Z7kp$vzPT0G+A>BosKa#Gd&2HBgLCSzW~)--J! z=*tEoP9yZRdeD(O+tB(n z5C_DE@fI}Q>Cl)eQu zpp=NDHq;!d5fmb$*oLci&{g@ag=iZeBS`3=D72Sewh$IhRf%JBf76mkdxdEy#jExR z86h84NsDm>JlHI2xLFVS-IF?wr zY(wa0uA|(x`AB{abHO&(4RHHsWS>EGC5mpoUfU8`kHJeFU+~~Zq z|5?;drhu_6&CLDtQ6;TN{~25BxEhBF6ZL(HF0h!^hgG5m?54UGokQJymSp-GC(S_h7>tE7}C~mFNd>$q4yI~o;%laWz6Ku<#K`% z*sv}ApIM8g$BiRgtC%Q0t}BVFpJA_Q1Zv_MnsV$a zysOA34+HRcF(v88geVWdG-wZaI&EgU6MYgfE@J_~)HV`i*T*MoQ*$C%M!DjeWOPvC9Du_8&!E0aHIBrqa1@|sbU#P^MN>$qkV{Wm(EzP| zZ|^&n@85xH8(S6Y8{lyCFspAFNWhB82~AEB1*uDgscZOx=oiKQHtnLQl z2Xs^T_^qDCF0Z`K_>%V5RwLCc1p;2l&+ob((;@HzHFf1SVhwl__Wv2c$efdO5m9Px z)`~7k^L}#ubTV_&;Zune7etggVV$(=$6 z|5EVFc<{|^Q(+z#3{c`KR+0VBX9f6<$rLRqx~6Ve!mcJ>{PcA83-bc4h?*raUy9TB zB!dexU81|2+LIw7wL^mcV{4mICtUzFj_V+ej>Ei++7EH)AwQ4~Q;J7W7LtTNU+()U zC>k`;CwB^sHTC&e^{*(?pPUSN`tqm4KFs>;xC$0O9Z@efVSFxtx%8xJF7Vz>ePrb& zI=ZXhRrS_ze+Jj_AIB8RItetY5QXDpT>hAa8Z<0lYK}Nd-f&QNk_9-@{yTP-bu}DG zwL?#sdIWqFync#U`^2vg*!DxA*RqNvFlCe%(pxvJm$bbbA)5wkFEi5{)xO-@`ff2i zfW?KQXf%{h3dE;<=Smh9mu3fBM>3uzbj+L|Fq>Xx8T)&R8~S{)@!JjM7;I9$h;7;r zrxznHm31v6znR`78}&McFL|jl?7PQC*x5Lh)Dj@jtbHnSV9wB#0z}dH%I0G%VH_p! z!V2T+fTlm?M<-sF~D-Hy>`xl*L*M_z|)I1fc(dvY0wLsDvMM0 ztk?a6#>kuw;Zy&T-%1W>+4B;nGt_EUZS+j^cQ^z1uY=n>w8t>4w&_Ys-f!NRbG^qL zT$3%qQ5lp8skLCSL5qDi9Q(Of-%sZ$N?7O&tlvLibp|IwGmCj)OTHfdUBd9YZvfso zee!&qIOs8;Gv<8wIEHsoLz8~>kd9DYoONjfq;oS5k~aVZ z90r|yebAO<#OhjoY&db{LmAC;x_(+m)Fc}Dv1oXyb1#|%bkcUOqxj+QLnsrv(TC6XLSQPG z4`YsTcKvH%yw`oQ_X5f_3X}iUxMm$W9gDtFzhH=RzrHhv>w_1C<-FhdRS0K+Irm!> z)ZKjI(LY7%oWu%90Ofz*|1CpoWB;Xb|KtT`iGp%WBs|NWh3!|*Jxw8NU}$r@ zn}D4&FO-+02iB*ZGK8bA5QgB&<>^F&3=!x|!46(ia)I(5OL#7~9WAczrDw(vQifkG zj9QxN5Pbzk6&yU$wTu;6KD$uW~iNZ?UjV` zy%<>aA?~9*hut^ijGn?x%p7#PLmg>v`k)G$a$=@*7+0+T_*|K_l$5l{!?Z~Ci>eG#hbvzMS*GElMCKIVW^;T-T$S2`IU=lvT*zf zU8*lJyI*Y=2Y^1=Jj14WHP;>ae_TDmweeRFdG$LGx54<|(I##=bUCq-D1?9{ zN^`*+Ocpx@H=S4k$1=0U2I5@3E8AM~3W~$sQ-l=k?Ln&b;W6Ueij__U&&TU%rHAZ; zRT5iZt)@!xtkM@xFbtc?YQL*74#CzKotG4zBxYI#D)v}r-9Zhj@!ArR5o+Y4(;hn# zN$`}ZW}>2Jigy|(l~_|2MVzjS=@K=}meHc(QPx#d8-WEAUVoo2WaY!{ z2Clm$(_S)Nt0DW5Dv5y6x^&|4CrFF_IKl+-#bRrcdz3e?D%G|&B&yz%Y-Ty2oLO7I zSoNMtZYR^L5tEH~=Ah>z-Iqxq;hf@EKhH~cUm3Cwm>V>Rd+MZ0c!ZR)?=&(Ai1ah^Ees9fsEpSAs}1f zLwQJafi#dy@aG;(s#3}cs&K-Qxqmd~I`!*|!VTTxoUCULKh+{KMXL}Dz=e0KoXacR zTk(x$W8tG? zy1&vi8I4G{tHi%IvNWX6i~iz|-x)IJBKw8MW;LDREuNfs|F>{7ka=oQrhREiE*P9l z;4{y7|I~!rW~^fOqsex@<;Xjo3uq8bVr&(E7@8UVdKD&CW^+7DxY6Ka-zrTuE}hbU zFOGkwhN;IS-cG=l*P+`#lT=N-tutw(wZQ#mjo(#hdeOpJK2jTr-{XDy)hV{=*!efI!;#I_ls?MK9v=EVDHWIqcH%3vy<@CUJ#} zQ&m?#P~KIVL{$!E#ch&I`d;9Xv^}lsZW46iaH%)6ZYh8EJm&F0b%l&;X>e4>T5`>V44KS-Lp0qk2} z0A1kFnB;d_@$X3Dtk0eZ*SJC%j~r4=9=V6&Qu*ky5kt3KM>>%(x2^^1i#Cd3L^vM5 zVp`;@YX}xk4J(V4EDPS6a-Bam0q1Ni`F-b)G&DL5<+;6K;fShaCUEzuvJ<=EZojb= zvqh(Ew;J?}$SV6LEZt)UPiRTYI6-{56in??WnM|2RB0x$YG5ZWhw*H`#_5eqz8Up! z*}_2S%z)S8vPRA<=^cHXSJ7i@SSET^BaXUip_xIaY|#9e!$MgFbSpyYhn*oH#&NF% z^99o7?lU&%@et-V$kIU@;$0usEXZ5*=8g#Ip3Oa#_RGMl3U>uQJ>i(M&hGnFdB- z6XN#QJL7#BHUYrDe}TBUXSW!Cd^vDC0AWpg$mj1_DYYeG|BPN-L0dESGyI0(U$WzH zspGQXlBtuWJcN=DVfXe|%9bmgR^T|9;}>Zp@Q8D8)gj?toNjTuKFDOeCDx+r92Cfp zJoq`HJnWp}1s?SP9`TCUiOzv5v4Se`3@a@HY#5b!uaFfJelWF{Gs%?x6JhD%v6s_m zfSE05?Y{PvaP1dQN9hLR{nKXI95)By2nUWa^kL@jn&94YESI6$1e~|HD*D}>1`s%N zD%-m7$#oj`pAPgVZaU2F3*-C5Oufq{Sm{@&!pStskxkW{M1LIIL4TqIftl|x9cLh9 zR{dPSw_D^xYNPMr8~jiIeQi#3-2lmg2A-<2K!Ft!6)K17x6|nTpSUV&ar>~}w8>wj zm2AjM(`Pbjjiqad-;g_Q?V8SUv9m(QL-wg(w_IukNNx&a2R)f)Azj&KoWGwvxnH7K z1bXn*2qJ*BRQrSsc60cglydV;r4`I9=3l;a5c%ARsrV)rOY#Y{OIRYbqHPm=8mvsT z%QfF+tG{j!Y=Ud3-qP%w9iJ+EbT9C@NYMGw{=IYPRDeh9%LW$Lwuqli__QF>R7nzG zlq?IhKX;V20p@<%<;L2q(^Z~6S39|g3c|~zl+)1h>P*n;l&m490Ir9<&ip&fx=e~b zD)Y$tf6YHBvB1^+Uha$zBLZD#n?6nB=>E4RVUNUwEXs+T;Z(|?T5+%R<~xn@VIz}t z@*QVgm>L?QJ0TEQ>p+T+8~kJWf`Eg=9KW?AoRrJZ=eFA$Iv>EyqdpEucL;Pv_Xjyd*_1*Ow#E3lbqs`#mBxm{mHrUGM%{YJ_ zps-3b?2%f8s{(TfoE_q?8}G1EA8@SWAr@ z7tM3|{++}`OA0a6wHG>mz8Vgt66x2fq$pkG`t>qdXLCF=ZsMA zJ@Y<^O=rzj!+MPc;EPq{EQHe^z%^?|$QCn;C1;=%^3Sm@!4p(Itj(Ce|7=n@e5KOy zsLum?QqaB}RXdYHOJiu7zuW)r!TCY`AneAGoM69Bsh*{^_A6pf3khnE=@Vd-Qk61F z8%t&KmuoB*Dsa2^>)-di3HXyE3Jvgk8!i#-%JX2j!$xi%q3Z;vhAS0GWsLJsXl%OYIFvP^1jSal5$rv)DL*|BY_$ij(X(XEP~ypgs^6yn;ZCS#Gwa+7^Iid&3tCBgqw`gJ9A{h-Qw>)^ zfj;cKaN;#PTiS{QVJV%UEyrIzKYuIQ8a|(!gIO-lqBx8W$xJAPtTrq#BVb4N!IWbD zlU%5V*`=6gcMigsf-2euX1F3JSP5g6osLTApMOt_0@{{2V07d}fZuVm%y>i8 zd_$ARS)EZ3ZNfC zRM@p8p`^wf1wM))BS=jFzGhO+XZ;ByoBnYGgkE90Bi}!22(hyT2dU^qaEjI zv6biZ&DX@H2P*K8eZ?fc5hW&serVmv!H<;_&Q2?;&oA6ieJOyg35j1!5gJt) z@29*4F79Oi7PNLMXFTkN)U5Dii(^NMJ~Ugv81c-bY02% ze@nmB$qGitp$krLQhle8@(=e25sbtvjO>I^A<2d{B^w9tgROKMQ~~Zo_)Vd|JtcOq z?rYUGM_`J>ZROLtvV2Y=>Q?q)!Pt{$oLw1A7M5raT15L3zm<_M(lX75d6rBM1twX@dho=| zJv?mkKP-&D9hODq0XuZdgSk}|WaD^m?8-4g7g;~$iSnYa{cXXq6I8;Wu-z!xKL_7B z|Bv9HiblERsro`Y?s}rgs)XzD|F`duoQvK^=Xm@XUU!1| zFn<~rj-TB9Cd_VJ{}Qia?)=Su^8zL)nFzDCbio6~yAoU5%&6OO}o6?uy|oq~WDKFj#2#Y6VR2QLWS(Xq>DY^>4iwu^uS zq`nGvgrD~Rf*&1TIf`W=bT^w@`^CHn{3_wZ$r7t3ZCW4T*{+hQL<{Q|Ig+T$<4KM2 z*T#~u{2*VurK`P^Zw3~qAWr?XnZ;flNW*5NwUuH8ELwR@R4piAN#c@HCcd)>7`+Pd#~r z&cJ5)h6{(9EMJiz^aAcpI1l%l6 zsmv`&>C5cv&oIcNN>K*v%()0{jf7N6P#Io8XfjKW33*uR2;u${QNC!2q{!ms*K!qZ?I*Jv%=ia4mp+V}V7Y zz7n?ElR2M^^vlt-<^}-f^7lBN>4#G_o5rp3TS}#G=T3TlcP~JIk#6XRwZ!q9o1f=6ANH(m*`?IgYrcj7IRp zx{O!R81SXXy&~xUfFrP7g!t)oL{a6uU&eKqo6{l6dcH;U+*w)L%77OL&e_;nm+J{P zkSdU>y*+znrH?tHT!IqA?#?kEhlx2c~Q_V($6vJY4<-rqQ;puS+QJLhR_BG}xmBDfe2EYLC z;JCF2ef>(xp`xKNkbc`!n)`;2y-0{)31Uq7P$>;X+dyd!T`KRmmPDuz)k^7A?2gSq zk88423gq=oG)_a|H4Gd!HO@Lt`C|_H$pRr0R4(f79Y{!Pfz*b?u>Rrijqnj|K|*!p zw(BJ^^4>(#NUDB)JZv)NWVYo{G>w9qYzaQ#ALK&cqz0gC`dcjPq$NEaF)FAzeCvCIwi&pNUXyThEe=6 zXXf%)e{ynKNiwf>BjBj$*xIg3%JVwJ77zZke4Vcds(IIzLJQ^_z5WhGMDrWM$8 zKhho$nlv7b^Ww_2XLFzSfv2T~D3>A->|-VA!=zcjzkjM*xuU4i%KD2T7xne;_Q!5*5K z<8-U$fw8iQTa(>Dz0h3m-OI>l0qBU_e;9zh)uaG4M&S3f!ZDyvk}vm4l=b^4V^A+? za4amNpNy3O4s<@*$+#QWH(AJ~aWhUnJJe6Wqwy+hql6E7Skhmq5{0OLgw7=VI@VTD z;1tgmzRVm6qN2agMmCWXm~`hhg3+b*$6lwTE#mQw-8wrZ>E1Rou(&*nvS8hT~q zFWK{fa!1M)VyIu-+&g=b@8Y8>>LnH*%mMby;S8E&5Bi8jhu~)Ty_I-<37D>!ZU$dM zk>Nn*=GFWFzTSVB-=&9qiqP`QFsT2=tVP6;?5Q?<{Dnyn-SVm3zCmtsl|?BP6nWGH z-q&CemueIG^`td9(N%`=s*bsVDl`vGfq&)=+hv^B7Ue7~RJB?&ncqpFl{enRC{@`3 z-PTrLhE`-1qiaRUGg)mA9tq;T7iF_xiS16?rES0On1}H}IGu1uF8;m%G4wfdS;ae? zmCHDNLa7HwDPlKL)EJ$TO44b{$Whz&7%wF_TxE{O%O1Ps06;E$5l?PWZDjQ4&|!#5 zGtn)<{W$@c>$-X#%>D7GP8NhiFYu}4L6zsYY@V&WE9%p%a&GEf>6+GHP^eB5^3pIg zPJmqGSWFlsTe%wb2)itV%g0>{h1SY?V?T|%v61=!-K|lp(?SH$B{(kJAXjh~$n=x=#VU&bg4AdAl?#Eutk-H zD)bwk_&!`h(iTxmeOnEOd6YDyb)HpLD^(X3iL~zki#iQ@JB?F4oM&OFyXr62PYHSZ zSf%dEsJPZ_=kCU3id$KEwFo+dYg=5^83qWnQPp;aZDPFrsFfdjtu}(DPGq zyJy1I2wV4&aPaEnSXj=zt1hbUcbof{-T+?*vl6+_voOsjb>T#T|;#o$8IOt3NjYeDxM#xht!Uwu-TDZdd}NP=CJ3Wx^+s z`aInII8UBc%5{pvrXA8B@7i{2^hETSFV=HYd#`m*$+uz8-_6xg*5Z5aImRh+0wm&7 zt_!b~#XZ_KE-H6B7_1$bJEzWBa-jNjWd|edf>CD_USeDtIQijiWHj=k($= zlu)u;@P(*O``A(OuvnYCVe`lQ^h$dzcDDHMAUGmfP%wSMl>o*DyYh6dtqcxrkwRU&Jw{mq3c9mrh`ub! z4J;kq-Rf@e`l%~xKA=~7x?43AeA%-{BSNN~e5CRl!7UaTlzx7te_*+&h+p)d&-er@M3)v|kE@^<-x z=ec<_`PO?}Kgu+~c!lG-{r=~u%Wg##;h~lw`ayEPc}hnPXd-(Qh#w=CU+5{gWg@2l zz~X26&>u|mgRqxoeoZMT%DQ3#hBRd0cNhO`P;q86KSxQ-6mm34v2n?Q1S2$C^CQwqAmv5`8(P#Sbmo{TlO&R{5I479Nho^&D|pm!n#ODwXg){v9jUjo z*=p1K$hfNT3D@$<0~(*j@_4MS!7P9Wi-^C`bP9pxnRk+0E8_u+cnyE_lUq!~O7m<= zGXKdyS3@b!lFWwB<~KHDdKp1l8n*2nz##?ByJEXL>>FO8-PKUxfCZi%XkH5p)@sB$F5K7PBB(p+QG z+|fYF9`cuhcI>@^!)En5N#>sfq?m*6qB_$j%QMu+uj_h;6M% z{s*qH^Et;IpgTO~?TDyHLqDP_*d!Bp4h(#PnxTM8m)?))Gj{+Em5d`NV=^@y7BSa0 z)nmE|hHDH+RZk9`^+D>GhjMv|Rd!dM0nn1mKVUX}zZ5)9uQhf}=0Dd}emh9mpeF;t zt-|e%@IIVpD_?gXA@ug#hUeFm%pa?`CP_S!f&pNZ3xWMn{+lxqct&9RfW^0PA&anC zaJud(otg6_j=h4U#ln5kZD{S8Bf~z)Msf+XUu{xoD45)O>N;oQK;otnP-zVenrBaO zt%}G`RKmyhG$}(1U9|Tdg|~uZLK*XYxo76MnM{4sRA!4tv8l%57+pEN51I{+zk%MQ zqG^-Jm;)dP%)ho0fMi&aj}hq>z4pihQt(&ySjkE}nDSU5ulXWzS%5{imRI=ER-6$w z>}SPtPUe46Cx^0Q*sOW^>T~nD#y2$UR**pbWZW|)<#|x(2V@Mgz*I{5%gRgYN8gAF zWw9#?KxD``PzVUIVh3IRl@D=-^q(6o=1g8d(wuUjtQO1j1Rp|h9GOjl6jFtZHsKX> zTR!pqD4T2B6-j;%K5IxtIOZLuHdx}Q43yp=v$iwcqXQ%KDzA&WP8H;2!0x~?kc+l| zugP?y^a(KK(%@Afvwd7|zx_BQ1xuw1dXe8k{R07EKg=i&2C^NjcrhLmb`GC~Uwd;O z{!razDYy-j(hGn{r@_{{u3fGck|!l^6y;=PV*`n!34L_2wIer)nO{SW&Rb4stqgQh zm$!e;K7!kd5ZqXd!uq6ep))`%w+04X4AeOtT*0SL!HIrLBVRGUZ&@P|RF-pOyFLAn zqtG9U>u2)VeQBvgxj|pY`?TYP3#gri9BU?`6;?CnsOMdV5Kbfcq8F=feqkP{H z1!sR4y}ntDch7!?sALJ^{;dA&>DQDSrfKUa;C9XLLAIG=81*jIDf#ejHiNhlY-9D* zyR+-=w&Zji#%BRqJX*Hkvdl)i|DVuHj-(jTFTC@1GjX2USer$zCo0j~{~+S1L`H~s zC6fu3GCf>yK2bKZcR;E-VtD+9x-{Tqz1$IY^SFHS@XokjtgxMQ# zI?TWItbpmwDWyO;TEEtwhKdw3&-+LUly_&^Hj5Cyn6^m$D%BP|t?J4B*c7p#s^W$q z(@R}p7xJ@$;a*WnXLMQ2RD^~NHmzWpA6x*O^0DWs6E~$m;&C848O3d)+}YvX;zxM@ zWxy-D&X5&@z{Vo@q_^VQ@;Or17)rbe;&ydVzDDYX>S0~&<#IFhopWI5CNBoU3)#e% z<;mGQYKB#K?Z)3mtbJSg{-sLYRy#ARr?4PYOrhTqO;4p$2e<-vp9(LVlk$Co8q%xC zprE|6^FkG=js?4Fy_rvKo{IC{g<>%I*&bWymGcc+RnW^}C~YqAHu4M17tgdpc(&W~ zrAq`;;7xPW$4!U}ITnDs*Skca&6*~p<*HsyQirT&5gZg5W@qD57lz*JG-YlU+=J-V zX}c&!otK@nK{-cAcqHK-Q?6B8 zXTz%zN?U;e%*!pfnvN8_#<)6;``vHS(nF3s-QILO)%!&J8&l#`V!%3IuCy@sAV`{= zhL)u@+Y#9ai2Tfd@-nURCiLp{T-)Fq`69T1xk`Y)6Hz6;o#Wo{iUwi1DqO2=b#;|t zKeii!9sL^PqYTwP2A|f|UVr;g3bvYx!Sw_7JFf8m=h!hoOSE^bEGD>B01IL#&88KT z^uF_)G@;o|cLaypuma~VCB9Q~p~-)mpem*No7ku--lykPgbif< zhop)<4^4>e;`O|1bu7pRV6h_Px5EP8%gz2ZPDG5CohOzqV&#jq@Nxfl#cARoRbK?9 z;M<@gH4ObDSwY!bifdtuMxMDOpO#&q)n{xoY#>jm2+@+aC{s>6gfnO~__*m8Q(4vh zrrSfqd|-U?Pg1-EERw*2w{D15UFG~iC;$yiD<#oxeg*05@5mE1?6vFM4}+4lHEkO~ z94=zayHysuS|>tI(e{35y2u4uRLZDMwoYr=I`f#s@AXX*ypf0mgD*9wM>8;HKl;W) zn`#|$nz%Z1+Fw9ng8Y{R!UR(V%IoNIip31ckfqeOqry!)VTPN2*i1o{Li#uQpp7dB zBDUVKoRL)ENr-EMIK;RiEF*=2lnT7z33XmmBNGIzX+ zz+tSZl?vD$6z!*_K~4US!~NlF3sHZ3+Z>BMjNKb3A0xpJ4kik4^S&KiK zNHi?5OR~-I06{c2RsWaNB5R69e2XRRG4HI}W%HQ+xd{I;U=lp9Pxmn2rCsRc1SkGnMt+YgS0sy*nBAeL(mK2W03G=q``>Qp~Maen|fcz(r z+U`t1+l;1|1Hud*HD6@VWKG{oJgNMSq`oCUDgfDDA8#9HUAUbypa4B)hL$h{r zyl_#2qj7Tb{U>H)cPp&bnKdalA7xjAbttLRQLI#5N8Bp-g-Jt`Y8@8m{L>=+vJTu`H^*%%v$*Fu1yQ9ca^x%{R+&)JPy!(=mN7kV(-0!P>v^hDDvG72|GRG2#V_8YWkjwb} z1gcjNZ!v&{xYNQt)HOyJ=X@yp9!plzGNUeocty!binh{85~l|ewX6;<3m_WlM3K=b zTck~rRgt$>(tr^L87zt7%UWh{ddXO#vZRi)!BVf~9Bj~5AY*#|V5b!k%%%Xe>|`Ufa(!^lEhiLmgf zfilypE>YzZ4R8+#iAD?6H16^qjhp*WkVkC=I4N*zkMwphmFJ5cSAjdfl*e)TkPm56S@}C ztq>kx^8n!_z@F+GX|Mj|w7I*|o_(({Ap8wj7^6IXlZfVPD*tu<|F9KGvL9-y%G;IZ zI#1p5s*@2>#35EMOiXMk)x4!&0uGNbY!n|tKy53iy8Q+~bWyL)yHfBbXCW!;`7OYE zHFdju^(?Nx{AnI_s7RxBsMtHH>qbobIgQo)~F5eK$8B7qOIQp)bw*(ry!+2C* z_i)jy!sw~38jiq{+LM!pe0QVQQdQ*1x0gN_jto$r9tgu1!Ql zbFN~PPp&Y}E!o!_%`QJ&(H_dGN=e%X7}AuI2$gI(;9+)$@E|9gSmfO1Fjs=PgRHq_ zk>ytJOw=;P-N^uLqGJL55nab2iw1Nra5Kp!S1ag_dE!H5@y;j0seD0L} z5X8OCjY`18&jTKGg)Kzt+QEZa?DN`rz*c3LgHhM6*dS0QmyguWRl(DOclD#^&V$>O z8%xu={pFR%R@{l{i0qsY^e5^(JRc>zRjkJ53(0ME#n)luU(F#UCC$QB#h5+gM0J}95WQJH;0n!9eh?+e{!-ICPYl%k!P2?-u*qNF+O4_E9V4BCZn%TKR8rqlY6iP zz34Op>2|&u)$N;(hLV_iEwn&md?&0|+54$A?ftzG&ZYxP*5z>;tjIjJ7T!!I$LsW2 zS~hcwx85!po_>kybB#^6x`s?DQHrVL-FUYixNU0<+|w2!lLPj(AQC)87X+~i)Vl}6Y+aIQFa@+NIuWCs zZ<&ncuxKlG;=jilXxYi(HII4gyIKK3Hs0|K?%;~Kl@hho;2TZGyOUHJiVI-{{)h-8 ze^T9}S6KD!4PFrC%T|-$+!73!g!m;}ITwLQ54W9Z4Lx+d5Ar7xxavMPylD}G$Egy~ zWxc~z{lcfVX8pE_=v0(@-vGZO#e+L8{}Tw_f2b>NzcjSqR9 zC#z3k#7NFqPtHMCph|d7m)*sWSl)&a`>jrC*&n=>vaAHMNeAPc@nfTGx18m>0(lEY6z~tY`1qvx9?B|Sa zh=PTlBresgcuQyOTU46YVX4*fF;nULBYGB?i@#&v1xif2-{fz?O13^OetA9;0=VeW zLRpGv)@EW~FyYFds1k*$cbuR4xwjR9*){I*Z7XK4hHX95QBq3FMqPY1Ig=pfvC0E` z;^ar9TD)y8rA$g!#So?9vuL5O>u^$&mB(8m5fAS*vpjtDZ!Y0Q?{HP+VdtBM%t_gR zVfrwgl^}vHIuCdE+{!V2Avdn?elD~-D zN|H>-aQvM$Gg>QRVBqxqjQDvo$Ur{btDTS3OS|0G07#&!a2I|f_*+UxMDVM4x`R9? zO~BJ1j#^ap(I{&sB5lL`pur8ZAy)50h2O{=iu`k3>~NbrAFWt8=IfRkG3ZOmy@%24 zVmix|c85D6;cPKSmx2P}u7R)k4zrMMr*AO&WJ37o@G>8T+MWJ1A_-U&ZQNoVGVv$B~QkF-1H zAH@M=+Q{|tvUwBd0Wnda8~FR{LI?J9DWf}d>aRR*=YMG_X}fCXl2+|G6WwFPz)!$m~qxP zP-e-XgILa z5E;0{Q^m}H_x$VbSXcO07z9oR{A%M*a^5BR&SB^?HIa0vGo&z++8=PV=jTgkubRnm zNpbw`gU1VZhY(=zLuwMg3=l@uvi~UV0MG9(N-${dc<^iWd?iE~526@gbtS^b^vFN< zxw-*}S^xxsQ=D=p zUkL?FML@wb5k=@*f8=E^PC1g+S~M!)vY*y-9kZK5$WRsHosir+^{q}Rjsar_LkF7A zT7wnICFn)nvGCiVV|gr3$)5TG2?vg#Uw)!@fLWUc0!)S zLBC0QrWn{^td%z>MF@srCN4 zYV$s4@JG+I%xIQOYk_e7$j9|r$bimssMlzDh$r59zpwohbP^{)1y>$Ux= zQ*rC_2s)tCTQpKs#7WeR>GqJCRxCe7^GD~mG;(btw7?*!hKA%bRF+hIagn^)&0IsJ zShIq81fkK`U^Q1n97>lG+BTj&bXn{8Qvu`h7w@>HQ>g1Y&Ywv@3a)a+b-8t@OUoxY zJKcoM-8QJSN=-JH>v~iXMPX|oaMlcM4F4x%0OP{QSdSE@Hx^Kr9dm2P88dHXBxu1j zrK2p9$i=5jEe{ooK0cc!)6nHzREcmvX8im036g=i)cg`ni?4_<9Yd)k zdqK|R_^o;<<`{$KpcZJZJnj**4&_dR$PMp0y{mn7Hj5TmBqTSS!MF7%&lvNN}fWY8^ZzL zQ_W;dYZo9vWDahLO)=^4O91d^Yf#MOsrphzwvh0k{qP-2SOY8`-%C)4D?91W+z7jZ zMPl=$*2>_KZzSbPgLx^yCZCdIX>}LVNnoH>KUOHc13;^^FhX~hiFx!I5j|KS!AzpY zpguu5nM!@uYe;YBJ$?dyP0lTa@#wC;jO2Oa$1D4u>*Sut3wbO#m=-c#da$@nR_?L7*0JRrX^{$d% zOIWcKVIcgosC8|E_c$#DDb%N6(8FU=wa#m}vDF*@>(%Vva&xS%_sP}Db1{2^kOT<|q)BH2i=+B)y6H}tLMF1J zy}WyX5W#H&8{_PDU_y@RHyil=1wb!6e@U(dH5z_o z!gK14)*S&d`x_U9;|Z$wLpM+F0u9L_f8NXoUFK?J@VkC9X*$OpHD;2R+=VnW_QTg| zp1_Wv?37U@BVE$BKX!?_uB>WKPen2!4>ekhwUrXbUR`H$nsx;6R5GN&6<4@H#ED1s z+(bylI2dM-H6!RsIXWUGW{?QIic~F+t5K&QFEV=z?t)71t0Qn)t}aKBs5N|NltP8e zYIyk*SIouIX}jmt%we+BQ!Nk_Bp3EV#uwoJ=y)v>R>}#OA`2^; zYfkoR9Vst)5PCD2_!sRXwAX&5_!b@`-Q9e|y)#2hk>`sK8!yqEl#(>*es4wivQKj+ z)nI63)n`^*IJr!$VH+>_?3L6tcqKrvY(Y#t6LHf99@=Iy$=B9&j(|y?$@a?R-aW zE2o4CtLx8cRL{$8UjAcH2N&GOEE0Xg%j9^^g{3C*f2a5lQiMyM+q^y270jRX(U^)9 z)@XaPzmD4pWeb1@X^J`0P^XoRjF?dqtkQk;Bs%z`Argrg|={|;sfQQkP`z( ziM}=D6Lo<|7$2IJb-#XM)JCn#CFYgtE3tu46pBfwK#i9Zy(QOVQd|f-(_ycj_P+aZ zk8tjuq~1AZ(eR{}m6%l5GDlkReWy$@Iro{UkxrS!;`wb})Gn8fvox{=pOsUzK9Gaf zqU#Kx;q|Z(?BjQ*I3TN(dpJV;iS%sRaHRP_lp869(%$MF-2|bsU<-0#I?tV;sylA$?m4h&)1D(N=L@Gr9PD3_ zjPaEsM>AFQu2-a#^zk!>xCI1ANC#Fb;SeCC)VGs8T54^qYTiM%j;l-~l0^}X7l4l$ zgyJ<(1WhyrKqdmWn4+&USG=w|n#pWin6AE_V9BXBtm5Elf;Y@8YutdgETUIL8JQ;~ znUY`rW(2H>h6ruYZztxkDJWzI7Pluke}EGXRRsCl?YPYb`p;qKnl2_{&Xq?M=zs4` zT~cTmdB)9~W_{&xV@$TzHF?lZnxp^p>vB4D^%y9NY2gGb>5XOSL>CvdOrp?# zg(}Z3SaRb*Z#xqOqNAdqpfy6+F zHDb`cVKPsnF_LO8<_)5fFew9jf2PO9jiLc!97aS4|D`N|a0AHiL2KV={2kKsC_ba@ z`f6mDh;&VtmjT+<~8_SE7lC)WFpqcd5@Tr-ohgEu==-y{Hr=kvD zBG$y!7lUgNSd|objxnA*3#5Cy@$cBo>0H-~{}wR-ABG4~C18 zCopb3?u89(H}2Ooul%9*Hb&$LBt9xBIm!wVn=^jbe(eKC7oU#H>mMMdU^_a#+DXkm zGSasJ1TS{PMR=rM3>e_uns@F9%$Wh~O5TnLb8pMiVpgm1pVdVsRgYhgPr@)quA{zr zBT<=_99;`>*|Yv-%dt z>L`X6Jtt^3p?Lw`gb<#Pu`IKENQfk&?B#1}tZ)qp9P-EuL;uvjzF?L?2s|-EF_((? znSZuk3C(v}OL+jiIe#~Fl?%JzRG9X0kxzDO3J+ZN)~Kou0k$xz>wcU9vsYEVgaIFR zYIjoZS4BfMmKl4D7WDiLRC|p zI7HLfM+rvFn<+Jw`1ruZf-Fz@<5C{olSxwG%&Jb<87Q9$LN4G;*TIUWnaCROb85}U zvTFe*JR@JJIr6uSDkE~Mm!2dB23AgO~27qm?(r-@&O6vkE z6B{t4X>meDe!PJh;Ku76RP0PZVl(J4oe@ikRVomIAS}EQg5moSee!G~BtYjaiu81{ z=c|0`rZ=e@E0xV-@vFE*Jd(19)x44S-@rWfw8Cv_15CJt zKa8MV2{+Nvo^W5@7xMp~1sMba`27MP5-Bueu>T^(QM7t$Uv!k~iMR}vgDu<-yJRfv zO~oBHUr*@-WhP^l)U{Q&K*kl*VT_6O4Asj%sBw=2o+C7|1z?&S8}32-EMEH3v)8np zOkKOhkM?94k6eb$Okqj;1G` z+hM@+Y5KaG3p-DmAXT)2f$(dpN|q8$Ay(_~(QFHht21*JQ5x|iDG6@5F(`L(pKDk( z(PYLb+JKgg>7n&A;Y>(!Ni{6O(rb4ZZq^|R4bQau;z;ES_u_u46A{>B!gmOpdAs=Powzoq9bm-6B=TO!5d3;NFQgsWA@K2f995%$xB6Sf!j? zdkYRZ?6>!q|7#cQgb~W)BWfSmf()*?=!w4B7#oRoZxx+l=VvMM^a&RK})7? zKuQ9kd2;ys7Bh=*mIfM}5RG}*L4?iT9M*eSN)`HL8j*{b$o_t zg1_pOdai!fAYaV7gs*yu_~P5fn8{gB9yfrFoNtZ4_S<7I2YpD()DJji8JD59?Gk#= z} z*bL#rYM*jEr}m-}VD5fzsy|cKfnM;doNId*n*erVB?VF|KPhecSJg~8ro}{T)-v)B z6FHoVVnE8?mr`R?U>abA>e2j^&4xa%-k4dCgK((eoz`yQR&`1s`AjeN8(d8QakyZ9KZ;F7JzS_5foxc^uOQ=!{;|!wUJN?-!`#~fl&juNDkKA+5L|x@sfIHoZY3_$?xT5ILgX%* zXwJSaNX0g#7X*(YO=}04c77uz_4MA|u9hpD`m99FjK$8U;oi903&Z##1$D^FE~@&x z5Y8dTbnqnOK$ApQTp*B+i0u>|661vv5%NNEAL)g<#kWhc5U^r?f5{=wfk58b9vp$8 zhswY4mvAY>9)03}bg@H?=)}dn#~&4~sl}lo{P=e-GEh`e*!bvN*hN#1B(+4?7pP_# zG@ndCUp&?w96}Qp0)XhkG?&cgEyzH}(nL?3Pf$I?#d0iWby)FmrJ|a`>M#}+j5f$^ z1S!OVi~BdGJ_UZWsY3A0S_y-aB$SrI*E=N-PfZ#L$>7%;*BaQ!L*z?=tBO6&+kSb7 zCjNClX{8T_+j-&b&eubWtV$H z&rg3AW=Pp$-&is10EY_V?XM0$*fZGTGctZ8+Zq4FV^-Ct(Y|cXQI0D_z6J*(+)=L4 z!_n}M>gzh{Mt~IwX+6s(RDK>4O@PQPNjWraTpu)Eg-E)+uZ{Omx~(ZN`aDs0Why-r zHpFs0Zpd>>S!NPOS-Bh_o(Gogp_GO&_Dr;s>~(UYbt*G z^6I=iSU?Bq`tvDkpv@-H#oyR?ZC6HVo_^tus0eJc3b)Q`B~xr4Y)a|nd%7G;aaq-! z0RGpehCHPY^*UDXKXfPv>J2Kn!Xj0gg9dnjv#ICI&5Xc()XFag1UyJlgAbjs=`IMd zexSpLJk3XE!5s4T%L?;}CeaA;WV*zTNHDjF=vK}&tO2Z+S8O{^EFd0KC$m*Cfxyvt zYc#5bY3gGc5j>N!#@P_SNcDfV3WrnRLdzg?=>dVw4PZ*Wy!*QR3y7>QE%qZ@W#yk@#JuOzi;PZd`I-5)(_I~(`g^fL)%S*$ZPHT zrGQu%!c5okv8=;qE6$oXvOAPOaCSGnPs;cYbWYMEh?@ zzvo7@v?VSz4d_raN!#>Zzz^?6k2W%5w=R);TX$LavQ{b}Kg*NsjM@L1AfDmJ^UO*e zUvC$>m7qDjmv9ed$yf<^g%A}LIF+>N?eGZ=ctDf^eQo23iJha}ddi|gK*dd+{wdYa z>^kfQt5YEutg?N3L^aXz+elAfuHPW789?C#=G#s5rzG)xN3T`Iv>Ti=kAThp&4jko zJ|TMYasE~|IEO>`nSaqM4x$csPA=|7dA}EVEp|U3E67-!5GH)#U1dbmi=D^Th!W#3 zi{*TXCtm9aQR)T?GVYKMxgKt_#XQ*!h?WP?EHH9;!nOKB7Ct<)MOkZh!(u=}l5BaX zQedKA5WFM)FrDkRg zq3=mO`wK;9P&Iwx`JRHT8Y~WY!$dRKQC;_=G=>`!rTDJdR@^x~%|4EH#nh~B(eE!8 zp_Z}3C*M2`1)XeJqGQ_O;_O!LiA+){jjF!G;GfWC4er6V(QwhDgT(mrr_YuJ1;r_X zTWY~Q&?^*Ta>38bB|?mUdRBrR87Y{W;+^!=xv;5{<)07FYRmUFRQ7P@={0rO;I#{8 zHGv1mPbLGn=_e^Q&AUdl(bb(r9Xl^A7JHwBYDbkJzc#ySb^k2u;}NHu%^rKkE-$r3pdHT9N9#+<^pG=GJM_F`#($s0xR@}aSH#gtz%H$3jJs<4MbDzn?=#Pz5Pz{ z|M72~?-gD_PISm}{nzXbsLIwo$au0))5P1 z-##3S-g0?M?Wu*MYzrjs(Nsw#3;2dSi49Idgw-7haN9_c_GY-cSW2h5Ob-%b=c-6<8eO`8J*uN!+6ayH?Hd0KGC95PJ8zzM}=I$FE74{2?9# z%?{dqv0-T!yUOal*Ya9@3(RuLY5cg2Dv6 zlEygMZeZOUjkmn`@N4LgAGcDtc`%%mPfC)fB|8^MI=MRFzVnk}-!Uds2N^?&Emsi5 zp{8~?k1hjnm8alG`FP8UM* zoRhO30xSW+G*%7qWmO#?csXxnmY$O_rB&04JeiAbrGj^NH(KA?fLMANsp*h4u_@75 z)AbB%*cUu;J3_xj=da9rb9nPE8D@I(*w+ zh6kSVY+;2ShAtjFE8H|)-rz`OW-O68UOof~$IOZHW*ij+dbJO~?hPP@HTjJ%cYRZn z$m*{zNQhduLc|Ox%$6AXoJvo9JOc+ku)=T2t-&ApB*XRx$ALCH-t^e_-oR$3b&M5C z@wWM{$4SoK-)ANEf(pXoCRGe1GUXxpdeGVer&I+tFmuHZS<0So7$?ReS~5lqk!D}y zXx+>phr*Z(>lja^PY=%69FCZp2I{+{cp%KKmt%zgP}C2$N6fn_c~*55{y~@}=M^Sw zV5N+mH^tvB*hQKyOW_n<{x;w-vzQz>F)@o}w zID3^FU>=KrXGI3lt@~9B1C2hzKSMu(R_sIiFsJF(( z_iP@SOI?B8>D~#;poHEwtg6B9WTanU?;qQBPyeq@B(0wp0ItZYucpI!%Mki(6_RB} z)jRt7mJY=7(<6Fj-0!usCxOVtAu*g`sjvyumR7dJym@(nO1rehjLiFH<98SeD%;_4 zP${s4IquQEkL*}tcqG69(t+x+csd1z1l%|tbomOixf(%MU-bD&?alhvrj+wDivn`2 z`JXihtV8u0WGk~`(gE~}S&1a+{8yB%QExitew~+evo|4Q44<|&`?%wLxr92rt1u3; zi(_=FRu`4t3tMpDylru?hgdGw399kq9R1uCJ02t^v#5@^&ttWiRE_UgH%#Gz6aPwy zH_1j?1)hMVvlNPbbPS`qj>M2jOW7}lL8^;5wbpZ>kP;xSPxaL{dm<+n&MlLPcK5{g zEY85Osi{R6?ZF%4Njh!0#;L^b^3LiJY)?wCBykV)ti)*tdw7+TacFy$Gf8=1wDn1# z{;7r(xiw8K{_G`fn@?G5BnHY zgWzNT@!WAZ-JVioNiPZ9Xs`0yJdZO5wE69KuD(#1i%V{U_&=Oo5sk~!*pw^r|02V!ZDYs_oYnUU}7AaRp*9jzY;wS9jr3^lr zgrI+cfyN=P`xg*)f-RNaJrbs_y9jzlj)mLPq?Ym~e*&3@M5LS=(Jt5;wx z0${{+F1a6XW>(R?`4tewpf&-|WD51s3epYJq)aG9Qo_lV7w=?64Xz!UVJtNmNsE~KY7h0XT^RT7PSAZz6Vz;C zOcBqmJ%tA%L@N2I(u^E%+Fua5kNy6=5%oqm<=qzsT3r*OWnu_26WYo%B4h+%^H6s; z?-rTIS*kyyV}3?S8bZ8#>&0wbE#XGLC0-_Nbs8ycC2zfv;$HQG*8KjQOn-YF)H`sN z7Dq5gS4VF=g`L&dLr;LhJ5}p1OkRr3B>F^!q@(M-eEZC_%JNmbHzO1T4`eE5v$rN zkD;{fj;edM{$W{y-Q*b+kFF`o`V;aui+ku+M&dw{iM5}V5&d*<=Rd*%8mJp=$K^Ff zeX@BV_Z$m+kq4Vg>68&1aVy4BdrN4HJ|%@2k@mRK<(nT~N}*^NydY)zwPJ84Fhcbl zbB))6iMuX5zEZ=xDZbip0XcH3#MdoPZf=wLQEQfVJ|2#Cg{wQo>>T4Ros?cR=W6E< zLsHJuhA~B2pbqn^-w%2^5DV6CN6`e7Qe6QZJ32Zu*|)i4h88}Czmh#sw5Pf#t`AJw z0~ll8hiKE#9vBsrC6~mIiT%PZ9FALhLanzU09CLf;j~f;?btV`# zEUE$gU{$Zh#s|0237kpOj7iNkBs2PT&=$ZAfbL%QrExSgq{ES$1R>&Wqs?U{7d(P+ z%&RTcBUFq^H!4qPqhy|6)~R?%sp2+BeO^ub!9wPyW~t^~VN`*Qxk^Lbbm(2E@{BmP z)rb>zWFEn-2QF`Tmi}cf^Jd=8+UB7eK*a~YL9o)vX__!Q+`V!5US;LcA2nion0QIm z3=wQ}Uw=oeYS!r>IT-?7VqZ-|#2ZN$B3Klwfkhs|Gc9`%Os@ZW_01Ao_u8OKLX1}J zl=_5-VTt76(8i@j;`2t`jSlX3INTapOYuvMS0VTq7S!cLNho>;1Ca9}SnxIMe{(mXr>zc$(kR4lp7FHrTY&CvfVX05V&Yy9_jjrRQx~bEDy5N6L-! z4>d6IyKi2N_3tuZ^ISsS|aTyJxCg8+9MtnZFfw`f#&Lfr9P9Fp`jv?{w0Z9nw(F9Bw=s4 zJI;!^#w3F>9}rN5>QfooIhF+G{~IP>*PNvW)5etw{DoVcjC0p&r7DNA*J^^SUzPP2 z$MI7283f~@r(s_HwtrQjYig7?i_JhHY{vuk0QlK9;>uu|g~ldfby?)*r0GN|VlNgW zFs%%>QJMXhCr{Ox`m($@WzObwxls)m^mMC{H0D|ERjnEnh4?fK=A_6Ki+sb26kL-W zlG`)v(D-?!8xEka;W(5JytTd4fdRV!4}Fn=i#_&(nl?JXHPa_3Gf19`A;WHV%MaC{ z0>)ovF_J^9j61O4?25Rg?d#TD;|hOr{3X!tKWh~^#53Ah1>1EPqqDn7`n{>XmfN0r zfLESsiGgu%ZJr!iK6Qq7JMOuG9<40u^jIqTQd#}&{(lF2r3_~Eeps$8B!l7?a2}eN zKFF>Lk7R;|>85=!bjq6SvGga?S}&!F9(Ka~(LDo{Tf`k`HdAKXIaNw@ab+XF>hlQS zY%<16T@BtyoDI^c!E+~Zw4z1S)&V+X!MI4FNwq%%oCL!4+T&+J+979hL?X=+8%$Z2 zT!ygNC}`0FJpaBdo$3X)_rVkh7%eKOlaV+(dus?`)MUX`7a9IhfSMQor^CbY+wgqv z!n8H(>DY+wD~LzKQN5!J$ksh+$=+%bm*(ji!>01A%u9NAI-BwD?2+sRmhh4x;%;e+ zm)d}xRluKJxx#Yg9sd|TwvH4k?59>3^HNv1sHp?m$D^tgN}B{{SNs#(8LOI!(2ng& z{-g&!etH_17}XZOy9986?|)%*cJdX4lotz$+dYa2k0}xE`bA7{er9DHRtCmOsx+Y> z%`qY#R+W$BTs~w-&o6t#&-L&2{k$lg1G#0WHTaK2IOr&8`dl`_+AF?pnTEbc_l2l( zr#VBBw0#_}l`JRdU;T=8Nx<5Z!glYx2M$wu3YxxtQgfLB{PIA{n6h%%SJaO&#We|R z)N+6$3^AO?7^0{1;?536^e5BHb*36;ztL9beu5_^#Uf7HD6x@M6py$Ryy3~rW}RYQ z(-R&QVQmK=!>jM-*1@1c-IeJ@z>Q{UR_Q^=Rgx6k81%2;4NK)|nC>kvs3tX36vL^V zZV#Dc(B~O7=tZ&cxkpQzI>f{I;d1tP_Mci1^yl22DWtY<}_TVv`3qfiln zRo^=qJ@U931fpcD%CoasBA9UlT_}5ppGUp-Z*3HR-`tSVPp7eho7NK{a=~!J;fz_! z+KM#S_nw3hsfn&4cyL9YM_UX0fAF2EEl1j{1rOdbuyG|kNE~N-`QK$*tob;99REl6 zP}UASGf23CjYjNqcIhC;o`6jbRRt#W^o~_34yJa2lOlfRxsZdFW{kIR-9SO&cR{(IY04M%Ap~XGm!rltND;+IX>cgE zkiFiCw>nUIE;;D0(YAxj=-MfIm}`YEFM;B+JwFC8iVVQY{FISW&S=Mx3vH!$_qbbD z@$+1L%DYb%B*Y*Zo+R$6L>5mvJhr_Y9xkum1z1uD*SpVEU!B;ezTQydRaKwH6EQ=CzqdF z@iL;dN3stk!juH?Y&1|n6$fu|HZC?|$Q50vWX7w?oN;RnxHqT&1&WlDrF&xWY%0_m zsWr?}sX=*_GU1r$ge|En+~&OM_2@5H<(MP&Y$WZhuTlELG7SB+`^0eepaspbg)+J_ zSzT$9jH=$)oHb`_CGmN0DK%An;P=y_B|e(9k8BG+UO?D?{7A^;RF*3Mf+EoSsXMU&evz4+P;#6c+?P)MIsbG{nQ{h!oy zdMg1=icQN1{KIjOth5n1U#^izr&pV9>h&B%ca`c>tpwInb))vy5dcUTy5l>3=>9sU z-s->kpZCI#Z7MnR%6`WelmNSo`RL<#P-&ZowMhTV(`*-sah1k zc-31px^?sIQ$!D2$i=$T`5h9T`CXFwq4NV`9VI>|Ja1!B7uysa*Y_{Zotsy;4swHH zp1^M8^>;g@sB|zrKHuyo$+yM-QrTB*^KA9_-0+GD6geIUqa9mQ?o(Q3ql<>2BgEMS zQOC}a*8y;I=iXMW&oACo)aJ?g}gr(c$nAvj_%v_KQ^I#Jj1RNvE@wk zA7*~KWu|_dzImx?>W(n?&p%csMcA%+bvc%qiLti@s6l*+=e|$CQ8ImzC_gn)+X}tr zOVLp*!uU~Ml;SDdk^Pq^Fyh<|X7ewwxsuk2S#f{{ietXwjH=JzA+|d{(KIA zLp9XWT3Rq;Jxuw1KPhf9wP7th$$wXMF1QM_xhKSeL!NjSi?(Wv0~GV~In@=5KCQ&v z+Odt4ggjd@pKnb41M}qEgs@4Jj;w85Z`r&T+j}!=x z1xGta))Y9;a}zk?bFNIZ2bOZ(`{b!254;<32y}l=3o22uYY58?9cdct0ZlIp?IBa)Hp(rD`G>T$x5>-r}^V(!AMpz?+O6py54dKCJ0Pe8H;Da?9dHtj*N@D^jU8A(;2^pU4X@=^6b^cc=truRVXoh3W zHxLau8LB>4!-u6xAN=tDlsFLRf6{uI`$@;In#DMPu>W?ODE5>UUxV<7Ac`0-z2B=R ztW=bPho#$(*Zte>K&|ZvM{23mp`1{;9Hcc2ItE>`zXRt^VrTRQstK~Yl$c!5!!%5O z7fv>9`@a2xCfJjeujXL8F1rWXOjK)1aTn+V;{m(raa1E}F=*k!OHU%kGy9@n(ynUq z8o0_*K?e#gm{r97h2B0Z6aMUFjbm!QYQ971(q~l6?g<4dEN`xUi~GT=m`(1kpRFou z3N5FhtM!XcJXu2-hB_DB&@Zo;{w*H&aud6ClWy_oX`u@Kg=dsb zGKw=S#z2kB2U}6bPDDR)s%)b%->#&g3ObIvf947)m~FiYO<74Ek>uFE@nHul^Ov5o zxf?IrI=;Ha#Ht@bPzain(tL30z7#|;tiNtDc#vC&3TXG^@LJ1tPYXM?&cgkS0vZrK^MUG{6c z(*3dTGN0_2@CL^>rT#*<^^^*kTjj@X8VSUticexkJ_?yaAE^;GNEiO>^sQ;b9BH#K z72Yhv6=nZ}7oXQxhqV)r3A)ctMNgqm>`&q-m+GD##Z#D2;ulR)2`=-hjO zsnc4<{QUFi`^PIuCAz2mP{t7S8Yt0tBp2*FL>R%3D*IV}0AEKZe5 z&_Jf;JEJuhr5#*+V)ftBbhd>CraQaC&Gx6(dcH(;4HQD%%cjcnsu$M*=4sXCV48>~ zyQtc=NFyjMP3QH~5ea(Thz?u%(x|E(&}3TIxX3x6Ha|6iH1y;}M>vdfoa!jHT7NB$jacR5zqJ%;hmK7-qrju)vKbN&_)KtyBAeGN z=YwK!D>K3isG>inSRs_SQ}K`k^&$OZP;>GX{9*=o?qUV!Om0f8kd{S7C2qiH>>b1PKYs2i(|U%mx8uFkH57hoD6{`SFYIcXlT$|dOG z1fs(WOKaE&HJ7Rc$QpZr*>a}rd5#B&aiXui7sjwnSB|JQ8k@xhoXmHMiwX^Lroz2hj`d%CH&ne{76sf3E{Fk=>?Op-02q zlc^98J)yWhmp1052tZFs$wnT6Q&r!ze}t=41q?3`FI|9)K}GTq5|sxL@n&6xFJA7B;Kff5QBj0l z2vf9i=%KZxeFn#9v=*%tN`&_*-toL49}~#8fW^A-gw_VU3Un;KUvKGRx<@h9^ronZ zoDfT&%OY4Dm6lW=xF?rIF!8ut;@A&VGC^fvK@K?NU zmPtEfa37qx-9LS#PB&+-C%dQsXtwHAk$zP=ax=zQ{M(9iNH$FV_+u)tYmF5B{~ANG zB*Ck>o*vBetMgl7=FK?Mg;J|2LVl|vzHCVYNBF|;jIFr-_#Xqd1ac2R=8bpO{LrKK z-7PQgKP#ioCCBm?+*Wxxn)y$V%*Ma^2J&MbCS35>-LQk9XXKt5F_71(@D$(^Q;UNX zLX$I{m2|gWxCYi0+MC3Y(PQ&XSlgHtI2|*1_TJEqOq&LoAC|qgW9K$T3<$Kczk(JG zY~i^zKELqeNFe;Gi#@`=mwB%91ZC{>9%*_`t(2G*O(0#iEh7VjGVMhKHJ=+qdc!TF z%U>PlZTNy6;F>>O{I}%ARTSG1BJVJ9 z0|zRan-Z_vIeStjtx1shSGLgRx%L^VF&eeN; zGeiRGQk+JhbF!hDC;4ZMeA!7L^bw5#pIB6*$n7Gen{w| zZKZ8r{i)Wi{*nwJXz)VG#BntK2APR=W7ByHG`>$Ll&W5ioUN#bei-&!KZ?&os^%KW z4vs>l)P{hIob9Wrp2GA~?|;SQxy1MmgRsl{KpC)0R1A9?&U$0Qj6;4Y*zyp&rqyub zbik6K8J+XN@9Zl8sZ-1xc6Ml6Vx==Gsmxxg{AwLiW;WfbIj(o!cpP^|eBF2q zPc9_mL<*qV`DNOR#RAsapUhT+PV6!HNy<>w4`Fxn0UI|v{i?k+Ca)^z>@%Y&`dA`o z#T2AiPUtRnE--f6iL1Ty@ficK7rep5^t~~#JHkxeabFW8regCn-OU^b;!2B5@u0^3 zqt=jU5%tgYTFY8(Y%CBKEng#Xd#Z)RgG{}dJ{U~gm1BR=4xP?kiX?S0SM<AlvdJt!FgJ^$B^g5vjqC z>$6K#x}U@c_2KORFA++=q@b;ZpAY0!BQw1bEJJ!Mz` zPPs0sC{dG`ROM`A1X^WJGt8NPz?r9A0yUFidl_wLH2?(&o}D}DE;BVn4(A4|n}gyA zc}hi{lww_I{HuMXw)|leC${B*Ngx})o~0jY7Vps#>D%G2eR_$k-?=LRJXMXw&K|7B zD*;A9fKG#>MY$k|{+K9p@+}d3OcUrdPA8J1^WL^&6eSxsH&y%JZPi$R@WmafvurP` z&gwpTs?ry=7$?#C@H@O*rA(Bh=a$06sT!>0ku5PZ4^FOxxvO!QkMx59gPe97S6FC* zjUfD(+4ne)JAmYkPSc4?u zjr8xK^fc~}k{=}xCKLZhjc~9hUST2JoqWO5@bWwSo6*q5J;L3|$?b~;?fxFK|JRZ| zcX_#qN?*|UOPI1?1XuzJT1m1OPcD79t^NrSzyf@)aDMM6qzu@JoFz;puo54Ms6l!c z6vgrSMcD0m4V;dPvhjMZLV6|lerP&zpJmHcbmGrDUa^3!ycZ+6AY=IS#20myHqy(L zn8O#S4ADIWKx=md#2tCweH@bU-=r=^ZxzknA$vN&^Moo-)OiqD`FH!VBQK&X5pDqzcu`RNkz0YFc0>Ojb!s6RGH= z=v4!ER2x`&3H2+=YY!k5d9*_G^q1=FFXLOBdZbRbrl)eZ?5T6wGCLKtdpEZmSMqzN zxz4H)WJ_?tthFDCD7v=ll-uwuRjabgd`N{WQ8bCjQbA+&3K_pp>K!0=Ex+Yhy`Db+^B%LZ<0(X>|<=GViKo+ ze%Qu83Op$NYR9_#kpjbgU6{yb?Bt+OdFG}*srhoJmh=b zKY*0C?VZe(X_l*)`IIqSU>r?8(5mg}&@6y-mt^m!Z8lZXM0jgSCX+IcYjh&s8mQnb z5R2&d%WD8;(J6>_nwUBm@ zz(S)NiGUp7s+dv_3{DAfj{~I(d*1g;HvY!}2fVd18R-zKjp6iN@1w*!GXLg%L}mIt z7C*>tf71AUWSisTc-aG*E3x}RXXKOmv1T-(rK_`=dOoR?tkJKIU=!HjBq(D6p;5%P zT%q#SIvHRO)PGm`e`ojG0D?BwsxnP!Kdi@;=KTK&3s;1%D-}DKBDkN7H#4`{JcG{! zJ*mZ|9gq>Y(3w#`*Dri*LDN=gnDy@@gc2lv%w@n6v1%;j9(*pQrF^mla(ZTgXL720 z!97l85`#c>7(6-j{vnkb`>JUy*`HKMa3%5>FLlCm>mW7-ex#BaBNC*X%0MoEUqpj0 zh)zITR+X(dPOoN}2c?}Ks_NkSLWG_ofPrhPAQPjQ4>9~av)bFC_^iap(F!x&rDW>y zhorZ+g$YqUKEUez&%~Ku51qp8e7HLoRoZLTq04g2+aeJrQp!DqP-Xw-lw4HnJ*rQH z)|V|7P#I}p3Vm)H3KyO!Ngv}6Z$AE-y+Es1)|Bx@P!DaGtBB6zA%>1Bb2lc(Xk|E7 zD@$e`s%sk0un;vRKmlicBE%e@gQH#$cozZ<9%uox6CYvzvMDozd> zJ^rn@do`*Jbd2#(-lK9c)PV(x)d?LI^i^ zGae@AAQ~)CMt|?J%?geeBHc5dQGSO2s4r(6Yg;|JE0Z$Ns(VI)&#xr2bD|YkAaoX} zowY3ibi_zengyEj-!f-}!XH`wd;cKd6I05p^1fJj2vCQKUG8bUJje&kO8(&NAjgn$ zA3sZi>Fe@SJp+jqJ$X3nlIqKTLy@bd4PiBMgnV_G%@B~dY`h@%=tssv{@TcUmH}S3 z2p402i!6&Od%9f`IVuvM*gOs+{$=yRt7uEW;`#B3$HHU5cx|I|8sa2Oauj$FP}Z?O zyk1ItcI5;jGPL+#G(?Uryd6)eU+3}N*}z(e*!o)6&S8SvIe-(9(SCW7fTuaK{a>?F zU?FI&k)df;nX3p+Y?pI$sivN}TRz}bU=z1I2a%kZYQ+x%*i2pHS9qxz*qUMZ){nXl zmU0xo+@w7CV26-_%UH1bN{rSm&7BYi?~N=OmL-Q^-GFNES@R@51c+oP=OwlIc#mrS zf3$whAz$sOa){_#!N}>epU@KUsmhx7$BzhqafQ>ekew7Y{Ol=XCswU9%rWnOYqsd0 z2NX^ZJ4=&HBu76kt>@t#F{~w!O04|QHJRMLE7ji*W4X1Z7)n*dX zOUu3(M_0MjG&j8QbAT~9UT}MFe298Uv|AQ8kFl(FL&s)kdu9H(v=)mdD!FnrlqC&( zdd-56+XHUPURy*zc8hw+Fo_x!tl1&UcoTf^~<_7_%a zh18hIPVfXK7_K`c=UIn$Oj*=@qxj@gLjMHy9b00lF>uIluDXXW_S&g5iU4vakh_!{ zCJ$Nb&>82hiKU7_Hdn`b#ZaIpQQ`OVrRO)qaFo!OC%Z)>TzcJe)pCO1O6Uz2o8LO6 zXXdg14cNk?q|A5GAFLsvs#Wbr4IiTp!eQ?ue7ixCdX+s{X~1opem2QkGYK!oWe2=g{lax>yR>H~ zVo}QU#{K2l?Q+hjpx&3~XF;l7#uPgMBuPmYfZf7DOw-s1J&~o3gXYqbHB$B7rwVRM z7GYqD*J2>?{ojYVkPV z@1Hbk@z`3nDsF2!`lgTz8?up2Hkk);h_@f{gJf=*8Vtl^+sn5d5eWzi{=o)V7b&1+=J5*lsWwqe8~4r%J`;NcrqmrM{a- z$-GC1#p~oC_ren^h-qX8t|X(|;X-_If*sDcw)zgm^!lNMlIXIbd2ToA3x>0Vp}Y^J znI++&Ge-AQXJ)McF@q)d6alJU|8i2}V+mAL$}aflnJ(;RRES1d6=jzp;_wC&wJ0=Xj*%DG^_w@ZIiL-=F#pF8`Gb2LW_# zXCvdC6-&ahnpXvz-S?`Qd_odyODVT)gsDhHqvBliVo=_u*JmSEkMyAiUnUj5UXuWP zaZg~el(h1GHcD|QQuv2!sZ5D)j-McIB$_)h>Lq17teetNSAwy9(fwN*QN-01yB7SP zEE~olC>{8H{hQ+4UBG7MqPJZoZ{o6BER$AZR>FJ0)};${cS~jh?Rqx8=w<=>O`~Z0 z%n@!b_GiO#uBwW2OHJP$zuD-;8PWr*NU!cHw+DVJ8vP8jBpMbvtP2N^pGphGQRSX0 zqkh(271Aa-YS0$Fo6IxygNo)V@2HmrHG)z0*(RB7Bn>y5&V8?9#jA4rP9Q_|v;nFR zp#aCh)@^L6kz2rYcb$&6spPIv?0tsRC`K{1%w^bina8$wVMEj1@;S2dg6k)RQ_B^N zj#NaAv_##i34dDOnz!&KiSfPrOGi+ zN4pgfW>4&&TA6MN?Ie~Krh@x>p?0xYeJp8TYmBE$+Z#(WH<4Fal+-in0lyP4G}ers9o(QpwL@kJ{q1!Uq7e7oOXH#DL)D}?LGz~7cGs@lBybE6 zY=RG4I*bCKmUY-puQyOPe8I!5XUE+;tbZp~Yi`PP#MNnx;j$UcsdBe4#N=>?`GBw( zBP9!5_fkvUS@9^81w^7du@D&k+e7|ETAL!`nX(c{8X_8+^eQWznk!;Rm=H>H&xCP1 z*by_d*3`Z{{vR~`I##r9ENRuZKS8;SnWjCgLK*xJlY8dRtFiQN9N!pEacD?jwi~l;( zvmYxWA?R;&mcgf`lt?ast`c2emFhNBPfeCr4&4o=DK=ZtUdp5(?S@+L|F&5{1kl`p&iCM?wP+^Xf0#JCf=$e)*>2 z^hVCMgg_iJs?M&XBaOjN-CBl{Vqz%4pQopVwuT*OB%cwxCs26MmXrVbF`~PJ4W;&z zumSV2BV`B!kMKy4r)?fd=T?6mL2nV~++iZ)UmDn);WdZx{rm^KR!cI#Em#m6q>az4 z=~CR*1$bBCuiH0WOA*`5H3!AsoDBIArk6sF*vNUvt4*P{CAPNYU+&Eb=N7VY+S1od zR1iKhX&@ylZq|-yBekw%Aycd;!QpDC#7GEOJHRP5sFiQcJ9E&4A8nb5A@GjuG^pdt z{VopHUSKE68lvAQmrnW=0p0fQ9h3| zp|wHKSi!cQvyt6~q$wAHkA@-@?TQIfneHflE6&W|kYb>gHxlh?#aTy!!2&+d-;4SRz<1bHRU`5xcw+|O$7I0%>09U7di&i zt&nJG;U~jE(X396f7+|?D*QLbsQ92^isnA}yw8-6P=z*NWMob7!fvDoNV$aGts&wl zaH2Ac%opbNh6egxV!q2@*+#JbgJ693=SxVB5B}Mk1M70A(Vm-ofph*+taR78RQ>Mp{zSwl1)98Ds|8OF2K@1=g>FV^7 zfhnb>NwtBPGQY%KfWR;;e2_; za}!0tGd?zglDuDDc(kY#D_S>i`qo}@>;=3sZ>(4XOfk+;MUg{wKcv=!olGgL`+jy6 zc-MgOtVryP4|JRJk|C7TXz2l~-t5ApFM_MQ)kvAa3qe3=_~fvfY2tOnUV9O4ebPFT zGTG#USq+l2@~IqSN~_fWsD>y2*gvDjRcj| zV7;Ugwbse~XED#E!G`K&)(O2r-oxfWjML6)fXx>97xq|smqFXrRTbGHGMTh7ww5_ODT}uzAL5K*jWA@HMzb=Wjv;43wlIAyExXN^^%W@`ytlhLMx4PM_43 zn)#<_&9301S$8xvFwh^Pt9=|Id9X7ekpr|aFhoDPgYg$lZEiqL6kGi;QmpNy1duz z#6Unbw9wSp9Q{pWBotrXlZg@16w?s%@d!5(P;wBa@e(;vAU5sWmlxMnQUk7=n}rR+ zq>KNv>Dn6u7wQZ6RCL^s>X~aU#+z*M$)mfd>K(5Ydb5*uqupf?XApz*n`@}x^ICON zc^IYX3QnN9KlELsKhwf&TvkT3hzQ!iBQTuVaqVgMyzl(~4Wjki`wn-vDAa)0HJJHtMwiq0jP|y3> z-XVYjV;#Q6QH?ZTU;SAMr7OBs;6twkxs8JlI(2*WTIj(6lESi|JA0T+2gP_9wyF6^E z8ZV%hPdfWROPE5h?zT_MiYC)w{IlC+FUjC~dTH%PL8$_W^f24z4h8R1?PBTvTc9_s zWkXf28Xk(#`ZB;-{Oak|2BK-JXm{uc{I5U`_6n>B+DMTQF$pk*c?nu9Es`@s2^3I0#zT zM!d}IBv!v=pk41m>v!(R=S<1No?(>S2BGjoefl2219i_N8*J<74%h^<`F*-=->XnP zyTbydH|2M3;k@l6ZjITL*e*M|azemzS);A@-1v-53yPOg5ho*}*6mq7kJtX(I}iJ- zD}-39oS1o*g?QnIxn#%>kZ_x9W`_;+3;)VL*rCG?*Eqie z!}z1N7(SywJEj{8-5!<@#|WBT!WJYw8yER}4dC)adEzUep|`5E8!%jUq=P~X{lIj( zXvmDeW`sZ1CD{GAl130cU@yO4gMBIqE3k{0)cnRb6Uel7LDu3)5x#+~~XWE?OrU81bqaB^1jt zdRyaL^Iz&oK@_d2<9s~?5iyndPJAu(t|6o z?2$TGW>-3i62&GBu%{(ma!S#i=H)&IH(RuMqB_)?R$><$#_E3<+T8LX*pJL6BN;Id zZxRNmm8BYmNQ8^&l;3$R2+jDS-V}NWYv8yJY8#5T&Wbaj#+hYT?FPqCLGkYxs9T&x5 zz)Vzc3;<;Gr&e5FSlAY^Jmj;JXPfTPQOeEyGp5Zq4)mjz+koBuItHI@O+&b6cCRfT zj}t49pf_~5S0jH-|FRT?mB4xsm52Ls)CW(ep(wal+KM(^=Ey|FUz)Wu$wW0k0%588 z(89gdbB3cbMJQUl^s3`-l!}w%x)xLD*PFszl0a`HZO*0r7(`@INtZAbzED6f$VK!~ zxOO(evjYk>t^J5SvRQfk{KEEJ9vl-IX8bh>+MhaPPq)heQ}}N8=2{9Hv#2pUkm$DI zDfMC(767FE@X-At1S0tWu1^JRvK$)h;_1-~LlmGq690SFqc~BCAYg@NhuJjsxZPQC zyi(gSuK=js88cSKVEo!>9VBpyoGGB$9E&S`qVj;M-&oVhiQpGNHs-0x3pe;`u z;*^ zGW=TS8HGd;8t4^zR?rrbelpGN4J=WCQG#{pQha}7=q`PfTyno1E}f56$u!wq9Y)_TQfmMp}5O) zip-5+ElEnc1n&7D@~*v(GnkPCwP5yQ%2|oE7*yPB27;UiB-Y}8fPQZQ-x&tHBBVN@ zwHnFl?qQRjTPD-O&5C)Z{uHKHiD&A?5oZ%LQDeSj^)@tYf2_oP$@)=^6<<*V7|{id zk?>@R5_4tF9VZw5?7~*XW7c;}xG)J7KoMf-hPtQEV&ntWf;j4SjHvb|6kUx1po1F9 z7%E#Lz0$ylqTJUq60dj1H)hNHcKGZ8Pdj<{(9E#Kz1g*7>5Zl$mXJTr{i)k7TC zaDZ~^RE)ZU)WG>2 zJ~+_S=f=F@iwSk@OE7U;9<82w_xd2%hbk5u0O$-jBx<_B+dpxRA!a1}!QH2QO~Xc& zJk!IeElbOf=(I$ffrr2v81_*IKQ$j+<PoU!8{#`V0bE1bbd0H-{Of6G$)daz2NyBOnqQPGGdALhwy!J zcPEqgfDH9;km^41Zj>mI3%bnj^~O1ZKvO&5fJOGc7LKBqD8$+=i@bjpXX1MhvZ}4i zY>0l`Y)nf?iHNy9ezE*{c1lyeEBYKm&?79w73Iz;T36EuQxPbHX-iaB)gxIl$fZR3 zq{?H&y8wkbdxX&k-ew~_JvXwRY61T8?9`Hq+Vc%|;s=p(I_C^1vzHK@=s4M$f5nu^Skv)r_ndgE zTOgpu-GuPHqU)=pqD_)dFO%46AJ`HZtBSn=^Yq}^82FZ!Q+xIF=iDrKhPGI$DTod{ zPuzpx%HNVyE=kfrYXD{S2LMbfod3A9F(R1pBHswW`nwbopq@u`InBqZm6~Z70wkJo z(_VhdaFRO1gKtK2o%=KNa(T33q@J=BThudW{>Ky8c!AHBDKQoNxbBSB;qP3$B)b>ld_ z1}8@SJ|l%5O>0{zK5g{v3g6dasvOhNgwGOXA{M{cMo$sNe3$f*N z3(-IpZYVlEyVX^-^E#8bYI~lMo|X~P(g`10ZU!9#oV=w3bAs0yMzBVXE%gips2D=i zj4IOsLu9afZLP?yGwpdC#2IDSZ-4|$qH2m}DBW*+Lre44pMdF)1yFPb6)C65y8>5# zmCXKvyr}T%xe{nB3fpL6T{$M%6Q^66`3hf3v7{{#dZy{1l;{RS^}~-NY{|FisqaVB zJwdd*t&<5u1EcY5R1d)ccZD!QH^eZKq4$t#y6$ToI&@LG(4LJ_0u~o}2kV z%xn;OKYAM0lnI70ds(ox;QlQEh-3iWbP8r|#?|2(KAp^`uTk~faz(#NEIFI{odup* zDw*?eD}TAPRsy)bTM{**TZ|!w*l__Mggc~ye-ps@l{&gQTH699fPS4A+f(4%bE7&p zlTR%$&o}eo!hqpCf3Me4o#82pn!mt>Sz+v?4xO|DSL_=NI9L2IZeRMzW15s6&AGA% zZ1UL2Lq zf$i1-+&TPxgt$oIM_?LhPC0-;)kaOY5&x-BJK?L?L&zzr^|YW^*W6@XmSv8%2~e}} z3NRo~+2AB~3+?f4|A*7hgK|m4$zo8`rM>zl58# zfFre3dA=}+S<5JXcS{mc*fak6Nj(pwF|CYH1;MO%r}50jyoT-S3#bFReW(NfVY+>L z=zg3la?5Ub2;T%`;xUBeKuwwgu?+9wFX|y_p>=B%Qf14c%VJwl6bdq@A}45zVq0IO zH^E6RAK~5tHy!$mDV%@o4n@9*YC<3e9lk_B^c{mxG(A0!_hgW(OOn$Sdi7e+Pkm;^ zy>oFvxwU20(-iD^RzniMG-F|fSCHjc>D7MCy%D4Hds9#t(U7h+^`f=NswlRgi9UE= zp)HrmlC!}>DhpyT&F#cnSE+TooYJHNnv%^d-DNn&sY8y+Kn?ZCB3pJY7;X@*=!^>$ zT}2F+0WTc@l+2;0eKq1;q)e$mOHIqQmg`}8!WzfOnK}(N66%RLc*UpX1#sjr^F2@=tVc<}aaXf^WTtdC=sD5^Wj@$hiySd)h)*mC!|DIV;oB;Fg4NSI(Y}KK3g}4975;Adr_u2NFB$? zp2wK<7;NqHb}((ovP+-t41?(*SK~4wef;0_ddRC@Y;$z` z{74e(IF`tD$V~D^e6vVv_~W4F4gi7;D9`mTs4(x-13G^;JY7&=1b2Xd0*Nakj>lWF zJmZN9_lG*Z%3;!3YA~;Bk-X(w$~Ck z8jHb0=uwfowVN+}xH16qDA3mn;3m|O6gGw{CCD#Zo2O0v^J90S_?Hu24<1&b zzNCW4j|E=QjfuujAn%k=Z9>9T3NDQ%KPIebE%6u3K{KK1HN0u{S#k_@(^9?DS;r?7 zNd(-pV)Ru?y%B4o~<@( z=E1@SNb76bOb<_#Ia548GcrInCMaW!NZ`1`{FNSuPQhNd)a7W6W?b zd+|_#53@87D7&y%`)j60&ZF4{e?>W(&XO%v0myJ@&~?BG3`J+VF&gCIRfuMvypXQ3 z_~21}`OW2;3CeN1?Qr=Xo%!5-d+XZi#7=x{nB&96o2(ZBcVCf4zObQC(P%a7BqO;h z8h!f|)f8g}+{+$QsU$vnlc6coeB-4)^Rb~aGkXVL;r+fk+MG%x564U{a4(NN8(MSE zzhRW00+z-ks~_4J<`&R%^D*Mxfj#$z=d4AXBF|+0|U% zd-yDjlaZC>g1*@GC|DG7LBP&sNiuLXz_n%~-(`NoHNQiba{1D&X*Z~+@L)uRJ4>}LLkzG#NEbqq(yhg6NA+^rT)ER{AK7b_6wR2e(<`(J_3L~D$}im>AL|055!vs0Ckp% zAGy1Rr{U?dZwn7@+C}q<_F-aF)6kxi4X-j34J=j%TP$dCrl=G1eSrX8C_RCR*7uQI z*c{6{C~;hnjTkz^Ng;{5^_@vVL?arcb+x~K`?_hj-5rLEehS~JaW!$ey<^d2rTY$O zHta8bCrY%Zc&e2AtkFb^Y9Lo>N+_XcLb@B0JFF~1U>o#Xn&hW1J-;$v7^O1{?A#i2 zB(-GD*#4RKbAJ?640NdIP- z)L}`Nvmm#<5YGP1K6qndPQS8j?bay>!UQG2&3k1F4VI*|1BGT;Z;t2#@;Wj;T0p>r-_xMwtrEvFolSJNB$mn~ww$O6r-(v)!exi)yZ9{- zQ0JWpV9Igb`=xPv4FN+Yp%`5;VK%%l@c7l8X zBUq}NN5@+5?BX7Kje73GUPf@ZQDALm;=La&IOz%M3t3mz+EYmP*`mHO#QoI9q@_1g zU7C29Dg%3HTjh>l^;}w+g!1)NN3wE%& z3qHvgN`|t{+n!1%*70`~nY-Q0w> z{iCSWDSw7x$WTw(Ho#Q$sdJlAh8D7w(@ZLMD>}M!&q!7sGZ73Bxj9qzVnw`!mm&}S zRj0wTA|~zS>gx^oOLY32qj6LSaG*3AG|m_Hu5XT=jVfJWC4o`_7n4U1E1Jt-6SSKS^vkZXGog15wbX zdR(5Traz++14^0WGbzNcd2yrAW^x6hd^MTGyq$#ug*O@Jqq(Sjq5Pt^LQ#kG@g(A^ ztT}wHJQYY=UAhbs?(oCa?0CE$tDXz-TRAki*w+H~q=RJsK}cUae11{ZFA;{Dy@ow~t< zZTntgo}ITu#QIrrLr+T0xEv<}wtL>a51jyrJQ;&>aE&AcFK44Y{oA*o8XvPM8M{CG zP@-;?Lf!aeSy1uIHz;71#3ST7yodZEm7xon80r=vwna=&b+Xmsjb8ZO@1D!w-HFcZ z`8-K!YDN%vPAHYy`SQzZ#v&Wxp|)+hMG6VdsG;lb6$fFCb3S5U0HxR~@A^C>Ichg# z?ARrWYmilxh@p}sB6C_yTB)3D<$nSH@RBsrT&9*EweCDpzJkurIEY9ZOqul-tQJQ( z0FxooUD3O6|r&Gkkc@at;31v|kVNOeT@Y z#$8fK$pLf83^a^svTb6ZhRx>>uZ6VqrD~@pe0G`#O*mSb8rmEW-2=hs(SCxH@_JN& zE5ZuJ621hqZd@}&Ah!R%CA+hoSDyRc>0XFiXd6YcQC)Da+gGaa~=W382baTR(dXp-gq z+c^JO6HfI7I+l?Amt2!TQ3Sz zf)H^IY_bmI6)yG~B0rIyrJ20D(s!Zur?Zl^v|bE4iAsa}iOzwPoaK#YMSJ4#f8b<3 zKwjm@>l;8Pj@U>fPL>-8j(j6sE*7dFtwl3HEQOk=j&S`5wuso#~qLekK_FlJ)J!@?|l_-mT^GJM&NMW-#Ev%Q#wz6 z#Wm|g+x;`)Z}uj2rxK$hitDcr#s;(d@T??y0oa|(qpor9jJQ}udk~>Aeh=uUQDV55 z-K<^cZA(?MZ0lE(Y^j;=3x#NENI5@G+WKB5!Ual2W0Lpd^y`)}9ghsO{>BI@4JAE( zu8%MQ7|_4iwWw}`cq?WAgl{T81sealy_z)qY4K!_*4AIkk@KVl0(0;{XacUCxO40k z2+?#`L@Q&&6QnQCDSnuZ52EgwYD~mhUK@N&*uz zd};e1Z9G4T%>iTyhb2>!~&K-FEFsjRs z!}fgUy{Q#w=5*6M+e9O-B-;vnqE=%dL8hd_tPq+wteTY~+ZvDf6ZJHY?3{B_d*no(zn9(A z!Kx%2-g9J#y!pCYjW_$@0agne5Dq-)^u8Y_FXv-5$sc!;8(%V#x6*jaY2}91RZrHiwv=CvDd$!Q;Bi$vKIi3KPGsv?tM8sIv&^{YGYg^`BTL)f``Zhxh%nCPxbXWs|(hpao$mK_#~QHUx}@ zofhjrN>jUJ&2BC>LJt$TGF<;0!LWX!O*N-igXc=%yiX?H{O{;+ldi(qHP^y~7PDpe z%U&J(r5q|D#%ndZ)<+(+6D)A_v;bhWuY@^)TVmWZ#^&%H#LWbVtjbqSw%$E;VI~6k zi7BpMtB8pdLD5FdEaeJk<6Sz3*q!W0i_Yffa91k!*xt6d@hidKz~89HR5QOVS)S9i z?a{}#(EC29bhdU{?*nt@<{|EQ7Mi?|pefFJyh?cs4GfSjj`J*jx!UFiA2!T-{OXAV zof*g(4ypsVl|@#b@8aRRjRsSP@H=V|)zq^t9}cbD5Ibmf^g@S9!D=ldRcgK1eI_;> z@?C=C`ndci;Ijf`Mt0*?TX02d2h6$r^?IA^xp<*DAiYtr2DL!oC!D<3C17ouR^&tA z#@xfh1Otu>;IhpMDvc^7L|+07Y7J$luiQhYZ)YQmp>8HlU=d(Na9vCQxX!I(>;M?d zW7Quj`9wPyQCNE`yLVZ}v^^SH*BRGU*lb!jvjVZhX45o--}K9WXYYQaQl&o#Abkt` zq%@}!O50puBkIq+$Cw*g_Th=9<(qGCbQJ7Ju%~HTjE+^4@M5gMj!k!~5 z<1dK-i1FP%@H$w-C+dYDhXmsE=0!_Nr2w;d8oeH9y?bh2BRG|mbMJGO5__aP%RvB&1klE$9+eovahnx3uno<4A-p`5sDu*TY1GTDcUa&_dLNoApdiU1>4Ln^3% zE4eb9cN;!Srsp1&bJo3#5`#1?wmEA-;VaXwSPf7dyt^` z_UCJfS?@$T(1$Uq!+GVnal0f6 zfp&N6z2P&Co5(tHK2#^k(LlRvEP3?uJk^@$YWnM)RqW>Sr|( zapvtbu0!kRjoQzpnPVYmwQU)I!vXpjpw;r_BnJ$temip-Wf|PH zpUB>mIe?87(fZC7l`e@fcBJ>;i4wu13Q4q)Fy2z&*(xp(3xScI%c&A!v2zN2dlaol zsV<6xZLSxE@QK}#Zq!$aR()d-kCYH)hr6ZWD1)WDs>twZLAfYhKjuFds?_dlFAwhn z0bsk|Vz`>#yjq63khZ3SuYK;70zqmdPI_$)YsK8ViNH_ir38eY5>b;P>C_qj=$_CnwBHo zQWJJ!9Ho*g{9dLY!T}0bKXC<^AOr5w-gCnA@gelY&aymL+c%B`$gA-4L|@bzaoYnQ zJm{_e505Rmqc+DkI}#WqD5vzo8+3H$OH}job8t=5_!n{>B^iybHe_hqY)Ib{2439dq zoybMp#nkwxIvkET6TGeM`#huBE8Y*sZv0j3(6~A!u)AS__$Pxn066IL#-)OYLRQiL z^9m3kQoH@FI_r;meDJK7si=z?w2(tX0_rnT4q=tjJV|2<(Osb`DYItq+0jGXz=b^9 zpA3PW*VSLtPU^#;zaChgyXg$au7nE|L_5Th;cvdNY`GiQeng;{Ct>bCO}3!&#A0n& z_L72$d_a4p`T;7zfm*`U3{U^+moqWhzmI14CL+X();5+(0FIfhZV=*Ak313``wrCI^3nz#bbInZW7^w zT9*5;8#+ua1sax0^9Eelq0eQrg~Y>XyUc;s!!ynbu%bC!zJ~MZyEJk4q9|61T)0=A zm!@Xq@>ybmt_?q7ey(E}cX~0$IOU{J||GEM|3Z4#})ifFl5My_bSBOH7~W zo^xs1qd!wFen`&4q_mV)G}t;)QwHF>xrzmq50m?Fn?(DcwQg!7c(S3`{{WdR6AdIU zr}c?)a_ng!vxr&55v5p-G%mH9uZ=-a9Uljv-FMsdr#v9sdB&0JqBO@zSM(>eixkL^ zuQ(B65bJ!Dl_7w0u|nj&Sq39})YCu4xBb&Bwi(JnMO8Ap9zrjQpTwhEoy#24*>$Yq zQKOuug{tT{<=#_oZK4q67Rq|`g62<7FTkV&6e%cwm65_ZAJi;Dx931J*>E z?x4#@x&dg;5S8>(B?)Wtwl$A|5=G!0lxr|=ERxDqdD3xM-PuVTw?tcT9wZ0|-RG4RJ_vSk7Lu3IM{UrAd;dprfSN;E;ndIrOD$Iv+E9cC z?kWRX<9m3u?>F9=Qmyg~PB*p2R`LxjmXL6P#-=*!Vus6&P1BhJLQa3MoAY0u^kwF7 z#RB|H*$&gHC9(}Ii>1KwitayJ3e=iONOM^*bKBRz^ii|D_vTvGqLR^SNh{S!`ystX z!!`%#LhdGphPMbfXBP_vN?LV{bMls|wX5Hp07%r-7r)_p@K7pMb4dLH;){$^~nGjsd%SbIjZ=aEwZH%l+PxxB+?|W zP%d0tj7ZCN2u-;853<@;m+jSl2i{rpiiPSj7?1hbA?agIdp@#9T%?s5k#qAh_GbRy zg85HokHDJJ)~DTem{M8k?TEDfMe(^@Vl}z7=Xk2)jeiJYH#O<)7{B2N5 z->goFrXeylrZH<8N=^3El$nos8ely<3vgMwAME!9F98wb;G$B{HENjx0u0>3Jz@!I zvBmbH>Ez;?AsC{vB>Y~~?T#&b?6hCg^`)yH%yR@@VEvL}ugi3(;Okpyx0-@`G2iEX zGaCS%6<-W0cc5r;^KG-y>>__g8o(HB-C~*57V4vkdN$&HTSa_`x z>Zzd|$Cs-8DQ`8V-z5DXqYHmD{ckEB8J74_@}+rB_NTV!n~K$)=n6~@`{(Y60S4+>tBZk;w}=!m=qY4(@4!NEh=Y@n_4^8M41J5*LK23K3PC#RZI z7{)0509z&N9OLzD@DeF~jH<~_VKOA)`?NHh#m69`gJ2CPw7!E)q zpk44BC0DKuA7=VI=2BdwN#ow9Dp=)RsPhp@n%4g)|lKo>2^_A3kD|Q3X z9w%}DDarfeM`IC+>_rr_Msg}Eaav<}%XR4O)%=rtMynGtSDsbzd26&oj1Q+o0`Aq{ zFg0tvYHr0OpH;lHhP?8!R&UpE_d<{JDQ!anJHkp$$1rI_+lLr{nH)p=!a1Xbr|$G! z@7{!|V`sVuSE}{_MZY%Gt30d%Qm%V<0BWz?Bwg%X!oWI#CBD)Csr@wfsVz}ke}3Lj#MvZ*p)aK7GIYGDQyj@^mpThqqw-C>qBM955#Sd^{(-q;Qi z)Pq7KD3-qfH_IFnzfu;P);0^A+>b7*>h%NRQ^*sTTf(2R;br-!Tl0u{@->=a;#SHi zri#j;J!(Zs^n!6!4IMG>gNdYVZ1#dY9hG0;a~KHAG$)UAHuwWr4>HVNF;>my8ls3h z#pjxq{n^A(k_JT{@fKH3q9h8ZNh*(FF7-_zISI65+AWauRhJ-o+rhHkY^b>&Vb}wvlOu2B`zB1@qn9wl>?925eOl_C3V@d>fNV9zZ z1#Bh=Zt>}YEFfQ<&cL zlf;c1q2QAA;@gkcGha_SU&^*8;X!qf>EI0{qZld!AmFhj%>8vjQ|+Dv!csI;ZYolT zJxH`=m`z=bM>ux$$D59P6bpj?g{EwfJCmy{0#DjfLk;7a4$Wo(jvXAwu~EZGRf9~u zTO&I~t=^9YfjKIDlrqoQZsOW%n!N%K;MhJfvTfh4oP0i+)A$N%MA3IUnHE^6Tf~ZM z)->T|gt8giZEk@`RbC~7`foCX=IS$)Az?HK(G7yrrbY4sW1E~wYgB3DfE#o*w&`?J z1Pyc*bl$|6Ob|Zd7L1xsW_<0}*I0ydl|Hm%o#C(BnDW#&jwl=10E}yvTXflBqTL0p zZmzeW-|$_v7kGc8vCk?TO5vnN?)M)^^8IoeaHb4ts09^9khG5m$TH4){%5d4Nw|9I z^7t)7PNCanBC;9f{wZhmB#)4S+i9bP$(A_hk9f@x9z+bbosPZaqP7MCRg`ixu5FP9CdwduWf&a65iy$cb@qxvr9ZItExPZF{da|OS z@QEc5#X;~BMs1=l+Fr4@!~PBO{lpAQ43Z#bd0MtSz(Cd zj@PKsIXnP^@bC#TG?gy<86sSC{1^lboFz;%d8ODr8Y$U!5GNTRDB7`-vEFe@Z(w9y z#phA9RNU;{nP>U9uI55ri&^N>N14V;h+1QwNbB<&>4Zz zxp0p(gQZFnO+~vjmS*N`7ITXy3|}Kl+)v;ZPy{7Qt$oyZ#6FT9eE%g)^tWppf{w{< z9U_qf!}1Vj6YMz)nbL0aFMX9_4mbpld$=ti>p?lI5MU}QuJh@}U5vWjZLz*1>i^|j zg{L`uloJbrEk4WQ^55U#<`Ze2(h-1(2e@{yITF)dAbaM#G!}+G>y3#B!Y5(yIE&E{ zW_mhukl|RC*8PqFLjs9@VX?GwCXC)FJ38hqL2XU94%n|y2=}x$BohW1J=0^L=&{sr zzt)!A(cniriStN{eLbM)D4V{W#LTP=G>2 z6D6-dAdy*;#FihV<1tUlMSbM}1?B6NvrC$YYnXJw8vQrA^tL3MZ^9(EowE!CNJWgU zX8`{{0KmGCK#e$l@USOGzc%*61>MlVE>r^fuX^rZ_=Q~Q6$@d`wP6dTmmSX}sjcn- z4HHClAyquJuZtepCkF){C-8@DQi{9L7cY?TI@O5QrGk#LiJtGNTk%>5{=wbkO4!{2*BJ{uk$7DgGc-^&tj)kaXk}qxvdNI+Q5>y zXpu}IL4Wo(bY_ld&4m3O22J;za^uH%sdp4DD0PVZz^4ATwYq+YK0?OF5skS-3xTc> zM4aW9h^Ta36O$>#n1%(LDv#j~bUUq3TW}+By387Y~;tN(p zYV6?u(ZFXL@AS*m%2t52nVW;=_O%3*UVB+sjs0^Q#5szDm9eubXL_e4vpVAGU=WF5 zI6X?^>gE8*S3Sc+4?@*t_cZpOO4-$z(8t~%E|h@!dj0 z;=s3Omxr?z6*cv_0A=l2C!+(GUQF&d>1_wQb!_$(HEW*BIw$WptU9?W!2nPRQM@7= z%`ASN?iwh1@s9*+SE_55CZ=I-#oiv3rgBi-S=l6X$fY@H-!8)%?2b)mrAI4-n-Zcy ztC8!^VNx>S_;Y$b*e&q%;YyEXsYCJQODDAydi^873?PRHHQ7q?%_xTq7M|~nZou3i z4>HZlrVSZJ!$`;1wpphDlosa137c)HO>R2mFTCmqdtq%LpG31+p?*Hq3MS0$N&TbW zGL1-gy@;&m%TfP(vstR}^CsVk^X2Mj3~G3+AmGXc@%<2&AnDxuU7bi;g6`1np~6{} zJv|FOxEUu3;+Tj|`wkSQH3B~gojNpo(*IwiPqwbFZ2{RA9-^b)0SwuMR0G_#{k*j&8FbJRo6xT5IfwzK=ppF z5(N78ur7tz`%fNkd`7cKx2B0zTtuRPd!#d6Cr;hUn1M-XI2|=uS-a8f7xF>i5WT>` zFJ@5oEMu>Q4sJiY6eW=gsP$tnkCxDmr4}X=UqX6n&)uDt7C7QXU+w#5_##1*b_-(n55PiGAV!_J(O_t-Vd5N zu3s5@g#J>t*3aadx&4SX7t&a(ms!AL%_C&I18Y;YM7(bU5F5*7fyDE?!6?0MbvX$3 z-uTZJcG`N_CK6J6C;5_1J+t>~fuU8f0~FuT*x#35hM23MNurQEW=uVMv)@!chGI6K zILFfZV3DtRcbBbDRY*q3RO^%E8NB>`#7&>E+$GI~h1HNFBIB<;NF z8()AhiIQU&6megw?(`XOD+tV=G*JWxA~{)zptdAtV-bVuzF_wVO-tppONz0Nsdzk= zxNd?nOa+8k~wC-PBbbricA1OU<0&_&jXkToAG(^K%baQ;N-4OfzRpL+jgAe@qCZv9AGmYCM61%lSLUs)mBwuSp0XYWq z)R5Op2|&t%wKeW&3Y07!D;$=E69TiW-!W~+){^@8vVysJSd>5?i%JjFWv|vu$s>$N z1V$~ms{|?);l^~cO?Gf7Q0P16_ldJ}vr#b(_bMN$?DEH33M7DSAV_z`6nLryl#d|# zrctg9D!70z`lCD6^Gg_?Jh#B-ws6ankm-u9ia#rx=}uK{;{V;+{^StLf=}}rj)*4a zv}CrjA?D0+M~g&Jl3YPAJq;$X+fzI!+>90u%%c>WszFo`|U8R!DPh@mmH4+v%K|){H(q0<32O zXW^A575e;42Jh?r7=F;2wH62ZhDNm#+*efWBkz#5P?{wsT0@IR@#heDHdu!&N5+OM z*OElG8-goH1t~vg7$!^ct zJG&-Bk;qvtCg`w6lkkg`z0=Adfe;;E1pwkE%r-Qd^TZ2f`T}7W0qC7qVqHdgxdq2L z%tIl#N*tBW1NYRU*;UM~zf#QLVj3c|K<=oxeWU6?k_)izfFB-5t60yf;-%sM0*p4} z&}XXeMa5}6JYE#T5l*c~$XimvJ_Der2*nXsiCWU)_4*j&eEC`;;{RVM&LWCpd~AND z5O@+RUE2+K(zTd4An+R=$W1yZNB6gRdZE=L)BjIeW(vE)fh~t)TxFFgO&(PZjZt?! zXi!UguBpcnbe#$b3hzOvym*nflA=3~jtKMk5(h0l`24g~Js6>Vk}d7pM^I5=)Ho8y z=ZVw|#__njkzl!SiCf$0$RZf_5bo)wp-fY;Ja;#wqYA`x6XKx8ntUQowQMJO;J(~y z4%Hn8cp7iQUru6>+md|1M=pc5_sfLJD|bd*bp=qSFNayV7-?PB6$5|y{jtIxueeI@ zR_=t@^`}yo;j6?$FgQg`q2?SI8308~D517AiPXiYLd)9ngq4X6SJkZDy1m&YxNGRbV#Q7=o|?U>-!9vZP|*nUh1T zmX|gbr_5l*KKCbXt-`0JA|y==d9>VxMBxyg*K)9Mg`tt#HS=0$48k&Paxo&rf%8|V zaL2%4M`wDgJDYoFHs!EclHDy;A&*o2l{0U|m$D^QM$)@gA~soJJu%I|61>Z#Z5VuX z;6EJ;R@~N52F!$K(8l9co*L8Eccy0z!od^B8qs2GT-6z0-DNSiLvE-6JbDjpNEv_i zB=++M!t3k2Y~ydYLrYHhe$;rNu=@n?RwLoAJnvlJI5@;qiaO3M!>=L}tym$Yb4}Wv zV_A#+l>405f|r@#6THwQQj3iDjpw&)A4d*-iAj_8e)W>D|Z%;8&O z-Tw8NaS=_Oe8ep#nRt}d;~Xi*NS-9$P~s6hlQt71j9L6-cJexXSIb$3gcb$GFZN_J zz73o02}D9M5g_jkB6LyYH01f52*(e6ERab@0-biXzO0>ZgpqxiZ#J76An5~-12k-1 z=1&jM_0ggLOYx>oxET?!jqRlZQF$WzF4fmfKvRa zTRBJLV0xk<0Wtm(?T(zENPhTOywm+)DdCLiq($!oY=){?KjgfUGbPEUA!xuvw)*2P zt#62r@`7$`@I*o@uRD*BG5(Vf6ffPL9E*=*O~L|3bxcc%tca(=|I`LjaEsYG53+le zKmpl|O@em-+)|j4MyH-cPKZpv*+hY`!E^Mb;8+S!YZxo({3jTSV_E#$X`eR!B=T?d_nC?0>zN4!=bzL4+D4FJ z0yjuLN5RxWe!gqFqZ>|sI3yi=$Szm_;|q`RS~s8jo548+a!T$haOWijuS~4+5O;VD} z>Qg!P`MP;^BTHE13HZcGTtcW#3Udj%t7SA}pz_5@7R3Q)8*xo0+X=w>{o4Xw@>{e! zxSp)M`JUafxvT>&^MB(5n<*eBc!RpN8{CaBA#8q=!E`JMi#Cn!Syw+*^j$DY0N3v| zb{q_fRqI=0iPhf`YqhG!7|k*!u|n9!f^rfwG{9@31H@kU&3wNz{iy@;H6|~&Y1Ui0SHO5aPIA&q@w&v)!xFI- z95Mk(dx>+0-;bWd7(_%+3{QjBA>Q>65K^dQ_$)<#Gn}!R9}yo&X@x0U$2+O?73>$d zcH5@PXA5R-5pJ^&Z9Kz!fLhL>ERK+qxHtaiOR@=)kV9{gN!HQW;tF(`Nwt?eGW!}C zpq;I9zOx-2ne(mtaGjMM>Y!oj?XW{u@Iii*6-A(VYw1YI^ve|BC3XWlCxSPfNAxE* z2?lhD{K+KoC`Pb^`jVWd3#pXUb?~C-O9CtsI)=0w%wMDhYd1mAkrQfo!0ZS(T1;j6 z(tlf?4LSc-&{WthYQF4FX|5nS3QY#>mJ*B|m7WsL$45KLYad^xLgiU$iDHnt+4%lW zjokDIOsd z-`JgVo@?p`8H}#w$RK$vyn$4~vfoM~A2oxbhD%SC7@Lh)O%>0i8UNpC1W=~&8RlxrH~)tDQphs%0!S7Z?-yiY$cxsL(`_Abw5(LF<}XI-f6Z(Y z+#q?JE0QP8L$>U^o^`g~b@x;N`|pe^#;6H$KtA|RBHwgqk5#&}`#AF8ZF1~oVT;y_ z%oGPoLn0ELCzy%X=I%d%)d5{qaX5#}TF8~NSzjOQ9k40_fdnPuGnnq{6G?F(jm-s5 z@i-Pw)SL+-jS?}xr33OfJ$6`!u~no(P#ggkXB+()4Y% zMM3jXaA!uvUXYTtpy_c&7lhsWjmMDWt%5PfLFwROW5X3gJCLDC$icFZ@e*5y)ZISc zQU3^O(Xt7#7FCNEU_gQ-%5`#qppC-w=)4wJ)3j)<+wvjnpxd7+!+tX!(a|Zx+qMGC z+8D`^u;W{Pb**Ki0sJ;G-Yh&0S6`;0qvIh z^1sKI;}|I7MWoH+3Fy2_ewuO88&Ffi`Q|%`7pJYi;gbyl!qi^+AeLm2I=_e2TIRX! zR5U?>m*U;U)4sb%V0BIz5Xm`@P$kHS{-_aq)25>~cYJhpSZJV<7ne$Xk9ny+Xo}Qu|u?he)ZJJhj z1*3+-7cK zQnxVL7^tA{Nf?1@fdRbkjQ@J)YgD6^9x9lf=KdhY$NXdda_dq>u3d}||2$(k%%Dww z^(xtFaPex5YN7H`n(`fW5Z5Q6UeW_r1YC;KY}v{{XU!#m^G8E6BYfuWvtI^Qa9hCG zp(CMDTEdjdk@!XGNR|t3L1aGtr7fktNMc7CNP2`YDe#F9f0`jw*z8l%n3q1fZ48%| zzVT?;^*Cy{!sAG#)z{Xt37dP&H@QZd{ek+(?l8&0qjN`SJ|;^Thf`dv!MNaR2(l@9 zcmg41f@40b+$>?b%6qlS$X!u~f|jc#aSLZ;DcN3bDmp;cp#5N_?&XFm3dQkl;7kGr?v_!X-I^NRWhtuffNDXVtKcE1C4r0zih5Y>x> zuK{ZSf_KNd=R+DtL(T*r43g%J*eR%7*1(jzw~$is1RyqT#ALx|`ZpB-T;$909XuV1 zKkJh$zK2Wu_e}^NX4EsjqIXy%^uT^Psn{a(gFCGaDWI(Imn`E96S;r^>XA*iG-Oyg z0tPpgin1456c>TK{q+0`EaAk907tKu2ujUt%)Hvk4fm|IX!DSJ7z$HkA~30`{NwwB zhQBJ3DBMJhZ%r2=AOs3JD{X}_N(LD0+U3@R#8X0 zp1B3$n zP8mDq&D7|qV%WVb_c}u=5`NbipPEbBr3S6Uik_Ej#%Ra7F_WpfxTTcUpVC#wk)V3V zl?v_6pN6L-0{4~`#4hYhh&%wE-zb6zCom4X`+S=GG=Na)#+TImA4~i@<+%4ZWCV;6 zrLqR{hf*wH=H^VYi8bG#AnDQ}(EpK`_<~wY;1}?;5^QX*80RFG9S<&tfHwk`X_UB2 z3jlXX#?(J}Az;vKkm{m>qZP9!$oXMgT&4fr(@Ondl zA=0fz32>*s7$2#8TR$%|<^ph=ZGX8jU(=Y;_+AfU#3OUY3^r?rC!-id1`=a~0KoO` z8~PFgO}Tf?^wge|SP^5hrNG}_hVRwZ8vmb^k*Gt2uej}|Aq~2`#>eO@YYy11v`*A= ze>SM6BNIP#6$7f||GwKQ?gOG-3Od5xEw!Y0)E)f@*?}n;UH8Pg{;(dMSz_klBn5Bo zM6{COm8flsa@;AY?tKOuvIFyjGdp5^pp;|X(I#s0KG2GtNi;)?B-_EwuAP@A*ZVf&pEK@4_kT)M# z8xDMyHL#fkG8RcYNln>$k(Aei{Wc98+r%U%$EpvfqI@t&WE$6>l*e7hc2Di~OipIB zTo6mz6=(Iy6||!e{pWJI$6uwZIH|yze#)43=vJrF`Rga8)%NYyp1F?@TPARS%4vw& zLQ^p%&S+?eT}K88Gj>ZhS|t@SUi2}XaC+r$=522QNaAy2e}O3PysN6y%xo{&!>&FV zvw@vq7I_igR=oK8xLhL_W&MRdrY&LHFZ8!HbVXd1!M}yyPnb-j)VOhG+>n=7A~P+T zG6>xfqz^YXA07t=RKU9q0A1gTzNmH)Ygap>DLteHqdpQ96$XfpjDnLCfZ3(MkIr>M z|EiqUGcdKWl_1#E$IumDy9$_es!mo20_l;=j)!!KP7WExZE^g z*`Wpez<%qLhzjqI)oONlXxKR#`ZwFVa5tg?zCqfZ^~wf72ac59u4 z@nW=Vw#`YWr=`|z(#pI6NF_Mx`Sd-t=*$~wRQ1`7Cg!UMkIaX*xkASkoc$q zhS4wX{4_$`yJ)4m>$`k8H6FAr^{%>S$*&Yf6I5o zeo>unu^?B?*DudwDZe9L_wLe*$z}|8K-f$7Hv&w|NUZugrrCrjBz(sIe7hgg1Q`Dr zTxf&4^Z$zWDfN58kbIXv=|?!Rg~c#=Gx5-B7jAix$XvC@S&W((=nc!sbD)l6E`62Q zRWvC3YX7h>km}iO3E~I21RwfL1g=@u#U>KZ!7)X#s~j0SRO@v>Jik|ZT|y5MYE?*m z4Qqu@g^3oiCct5mM5}JX^+bDg+A+>w05>l~ciP~rE1@@tJbi5tl$L2v5Lnjzw)R&4 zc!~Wvm4)4$VHM;duODn+$0>2pwy|ESwRPWl#162ZwugtWgsd&HGp?qh3k)%+%LVy* zu%fzZG4Pz2oZcjfyppF`6E`t$hv4nh=+)Xw|zc7Z?QyTRt2+hQ}wJ75$J-xDv3rbFl_+$VEAeP*EGw}65E z|4$A-o<%=+O(cB|rVRdF1q8xJbW4uABB6^xMRtfI9>mz=@BQig=IY=&5vs(r2JJYg z{%A5*8ISW3hRcd=j zyK+UA3OvUJO1ba}LiE7>eXuly?$H4;&}iMrVGlrE=1YiK&tI{0XJNPW*kq zC!gIZ8f@Jfl1)BoR|@X+B{>OrIA79~x^NxuamFL%SU)CWrp(#f1S>n8!GZG|s3wA? zX>zuVIQI#47oV$69@2G#PEe|-3dGw2zQch)=|e15v22fkDxtl`BHI153)G?!Z6O`e z{$-6I7+ZT_S5jZRxmN)$16k+OsZ%{UCWkfh{OpH)Ue8seK&N5LKQt|&n_6A-@DM%+ z^0tz_Uf0@rGopBh_RXp%GEWZr|oQG71D8iUmsdVt1UF&KTL?0Q77U7m8sw6BwO*8OzufFW{(T?MaBn5EIp`e#mPg2jbJ3oX)Z^R`tpk0i>e*Ga0)!WRdb#)29Wz>-BH* zbz2ZL-k3Dy1yeAzM~cQX>6P1%s)aYEYvl44jm0MV?pz$|G&%8;it4Po=ZG1+V*$?5 zHjV;)27TKkt)S`S8gGg6By^&p3y;tl0V=XaHzHryYMxr z4FB%ww;2=oQhAkmNH;hP8M|Gxx%)L<2op$CtO7*tcJDRS#93nvjbWqce1>#%(0#kh{W~?LD|+0bX>h z>5%WDo;On9e)NNZFHrAhsp1}8;O+&Iu27%e$1z|YfHJt@s3XKJcu|I{$E&j5$rxht zIdLTwWXHY5Z64sr*le+5RVF_@7abnGBXM=ukj;u!?#v5!uLmTf^TjiPhR2uGrV-J$ z&#T;|Y~ zG6PsVL@_FsXbom|wTkT_NEWQR{uwMUq>sG;i{}dSJ@cfPGRJ@QbW`xXkBdlt#LhAg2K^JcnZmIdu`@ zdoJ{9Ber2F&x5;RGwN#H6$G`1VNx?T{xv6;E$a!P@R8=u*M9q?1A{fksDa|#i;4M$=P+-Rby6#?wSFw zo=PFQ@J&^ikPu`JrRVEvv$*ld1MY6#s(wH+Bt;=y^DmuG@}l zmfb$Ay{Xn|;^-`uY^^YG29**Ci`IXvCqExXg0T9O^9I|Mct%6X>-EDUDu~m@Snz7> z=22=E$DWb*Ruu}7ZxKk~nSTsb^ijlt)py$qOLK3|+H%Wj%Qi9bE?J-Ss{%U6N!78j zVT;HqcZ3~Qj0QrJ;(X}CT`hMp&zc-KR?{Zum=0S$StW=jls?{wNy>sVChTkU4XpC7 z1^pRan6zp{F{dQ~m_+9=gx|FcgtAV=;10aR3u*IgYZKjpajVhbN2yT^o*(I#tD$Au zoK9yJv9n6N1ky>frw#+BHTFcpzj(m8$vQcdruU&L?7yAqd|XHd1$HsnjX~$I=l}i* z7Z}`A7wzsY6DeHh2= z=Jf5B$;+^5vQ<5V;|n{ycZ3R#R3T-btogtFHsQ3??M(P<`Jfji zq}T4VnKzZtQ4i(_bMT3CI3Ps3O_-eQgbN4&@kJ?dA))d=;eCeK=ctO^TUF-T8leZ z)M|;Wyb3{NAk+LUdB zi!%NPiWb}<`{&V?!YCNqumMd1wO|ib9)I8$&1Sz#PSHZ!McKb{0;uX6Bhy_j5)+c9 z{}5Bz%ujG+Rrf2jH$%gf-6oMka&~|-c?3_oA+uO|X=TwigJp+| zHx8}xYyjr-6+a!zHoTvaG{##+o^nL`eC8AIY72AeHBA<4X_MK0M3bcQ_3`o`v=)Qr z@FHk)2nZ4vz6h3&jFS)>rsA72?&@SrP<=&Y)|ATw3_zCC(94<}|BjKGh0hrBt50inn^4# zI6$CFNGvTn9(6n0f^ruT1scyO(N~^qIJuo3>Fb^)R%8BFQajBIiu7e!qc`@XS+=Gh zog`+C3`iHFE&HeJqFasCZ&j;)Um*1)2b|*$W7HBD2-h_E`N$@tVya(x5Fsef2EX5k zF)1iX&8yXC2EoFZ%rOi`+QeH+cU_wL#^|($T#Z}x8=<-sBR-Ba-yg172cy&XD?)rd z7_5>3M-LI$ALWv_DM`%8Q6e+%5&jHN6SL1V=*{t?r4QPib@)|(HEyooWTDLY<0O8M zx=rG%jYO%-;pZ5E8wDPxkXGfw1X{zNFuNQuwl8%9fyY&rly%FB98|%j(lu4Xw<^ZJ zg%3$rKSS^smdFB(s#z^PB_{89DJ@nnt%HID7B>5uJ382Mk*7b3PvZ*gm*AD{4aqQ3 z*pFrhYd{YYS4%?rxoZr1$~$3>%+?H!I9*bhRva)mv)8MuM->An`Z) zf%|b+0N=ib`ADL*WVk1pGeGXD?M@y52p(O8udk4A9>)kULKvb z&mkA3z&cHGwPQp~i9q@E6l; zy~*Otsy*c`MMryjxXTNWl5W%cESu3erIGfae$T}YSu9kms!|kf8QiyiWFUk9z|qy+ z^;`dv@OqTjfC^xS(MmVB7YqgwOD+n5n zX8eI>??1{okwRDC!2y_5=K+P|Za)s&bj2(R8k>4JAhk%pX8agx31}sgOC8bXxP*S$ z`^tRTFxCVFFN&$FIVk|=u=aQtz059gXP8m?zi_TBYD$WR&1Mb5Y?~rPDdmK(=w?VL zxTb^L!)@8%^G(fXTmqq%PfO|w*wSHqlOKd<`S@-@0Oq=*JU!$FZiD-U!q~n>>^YtROurwG zBII@Sc&Bs?{bIVv$;3vy?s${WkhqCx$PTli{(z^|N zBy)zIJ`i#Y7t>^nX66yR2or^w20e(>`s_SY_{NU{14THXYxH;GCFeZ)yp}5~h<%&Y z0r5aw*ZLQq`pVxDSa$`W60QL7(rl8XI{Uns`S)HUG1w&0|03f~T(OnA=>Ius4@F^q z@WF=L-p!Ax#K`l-pI`iPW-lW^QjEaKe@0wc1w_1yUiOUEjCOM>|M@c-Zo~zq2$U6A zZ6?p}BGmr-mjH4VAYQPEzHgxpmc$-P!dpwiK3PZ_vkf^ZC5PKLpi}XkD1EIEZs+pp z-0Yjl$_;6{yS}JK@(mQo5g~SbIh6D+|KskIRKcJ|sdrvB(4}@hMCKW25;62;$7QSb zHBD&>3;4K}-l!dOU#lUsNdA*~qYyy{jYd&zl0Vt_@cZ_rIVZtOEB#3Vr_o=5Bp4TC z^D#`0RNGP{`x#Yc-0-M?sO|mLKL^3f_W;Tkhdr%Ir$wi|Ko}t22?pLE!5t&7DgM1h z4J=ao4pzzeRf&6WAF1yYwiul1ek9$ruXE7eE8h$80zl~QhDq`&9#kpSW19i0%5I~CPqNg z1L*RF-Q{sS58QmaUoq=c_l|}4HUrT{=b0F<`uzapETYwx>(qQnV2xM*p7*9^07FB0 z^Dgn_-M;BSny>MkH;>8mi}?%6)LkzelVy-7X1xu znSEfGw#Lxqu`9V%C;>Ta>U=Ni{&9R4p|ZEd`ja`x{iVTRqKhibs~0qMV!)s;@jdu*&=; zMC>PM@aM~aWKUklee?}093J`3Lh(FqP4hW9S+U73gWMG2H^1&dU1&1(-_;Dsho)ee zh_0Ja@^J3r+1f+F7ElaTPWSi-qj-vmejE?z0!a>ZNYGon(hZ=Tq#1E<%=Tywb!>`* z*~b-EoLUscDux}H(G8K>7DrNZM9dEr`u5c2EB(-ve!b!t{)b{$+mRt6S2rhSg)qvp zkgA8mkyp}oDpuSfbAh6L?8UuOPxBsxnq}Zl+KybCkL<~^t5)ghn=j)pnXBSVpB}B` zAhlRq(?He{;?CG23kx2lKUj4e9VBkAu$NyXEBGljV9kx6^u$pS`3=+Egs(UVH->wP>qx`t)|zc6P}cs+r`j&FutJ-TC_+wgdq-Qr>(u?@)B-O; z5@z4tiBj@;m85zNs?_6vx4&_ZjN!+rZ$;f^0iZlk(!saM{GM4A_y@4_nrj|0nl$cv^J5rC z7#9AOFK(AF89rBQiLN>G`K_ItAQn?=Z)q-qDO3;PyBeLdg^Zutvu3^Bz@Z^M{%(d9 zHO?`^0dEW^;e{g)7kJ|r+bCd^Hh*iUhGa354owz;<*#Hi-`^^|cNLc>(I68HB}+o& zb-j?D6QHySZR8#>Xc$<80epH`rE``CsPBjLap<5E_v)AAMTcM8*JmQ7*5dRnhyPM95 z8PFs_sAm{{6~#>GZJuPznyF~phcm~bQ-4tqD$A5D-|mby#mbd!)U!Yk&U3r#pzcA~ zxFVGOBfyyy$O`-#W)z&yv$p19Q~#6EMJ6;EetT}`hc6`x=f&e;dAN+n5iD~pJdzNt zuGT^e)Mn%MVlVMZ^tBi!*@QPf*|C!HW+*kG3ZP@c)Ou_28-mqf(D{&dk>OA$``rx0 z7zPBjG4v)*APwj0_Z?CU)R$%^Xwlg!ML4(eu!lO#bdmv`+c; zxJ+K$gzH-CQdf8srhsKHg)QjRxQGE~_W-v;T!|bggd~U#>~r!QVx?tPul(R^`GU^F zNfFwW=p12XTvhHGnvd`}SbDc(0rjfEer!Sol$ zr7B@osQ`ulqQ|YS_h;Ec3lwd2??sMx>!s_g1nxhFaRhz+VW6h@*(_N-YWg!Ja((Y{ zoQq!ZoO3|gk&<;vq>CpR_(agYzN`7LKflnUqH<)1*`T{rsBWwfm~cA63WGc-Be8C+ zM=N37X6-n6oY7amS!)vfQ1JqFhA6-i9{AQL`w#xyia?zxyvofp;e_=gjKSm zxA~AA;T<5eX|zRxumAA#%OD$zm|89@L9?Q?~zS&MnOmCkKzmm|g1 z-Qm7R0H!PAPs77r>jrn!B2^Yo+X8r5x#nrheMrboOHWOR@-MYYQk$SoF0mf!ll98C zyi^1Fkk>nJ&ZK-`xT6_QO>4k>fAh3fGrhuZX?(O9o~9Nkd5Oa{s(zSF;>TO|EP z7fkwmFxrE;yD!&b_DO`P(t!%CP+N#r$^{me>D(hONbZZ1aZ=xTS`;E@ZRlShf>7Q1 znpW*j^P^=e1YpZR9A$HZ^<>==nFxx0rnF7wRT|UTE;8GyysG+qro$xB%`f zIxI%eSfKd%!!dgeSPp)DT`qD=7e$DFbtTB}&Utegq#ZDsP)*Flj66YsuCZwg<&2ot zgH^|cc$;Wy=ad+d!gVh=qlEHn3fjsYD)QvyR+GAHl1nsPxn651`{GRLwHwM3rP zEsggW@fo`lV#h1B@22;Qr{{`vExqP5yA5JH~Ne%A?qEnc@!S) zXziT`o#JBc9X{)4D`r-(!{r5Hz)$i?B?iS|(@YBr=(h;7uM$+iauS21!nNT13)`h>6}_KMCKk%ru*lI;?G!_(annvTkjRk5008hE3( z!v&zFhL0ma;UY*%r{y+R9huVZ!&6xaeF(1ecVEXIb0#v@s!>8uetr9{yN?n0Yfph9 zSbYywM!27p9v)bLHGUyr6WgRIe`^4#k~`gYeP?vs?gX_wyD*H=Gtp833CSL2T}of! zO$Qf=OTHS3-m8h6lgs&uYhW|tpZKr7LE+;OVkC^QQ-Z)qGcW)3cm{U_$;ItU5( zmj?VW(VQJW^C+yCxjTT-K_E5$scBTIvE?L}B%DQSs;lW~i#zCgzZr0s2kpRwh7jaIRV`~oGDQ&E+3nJ#n zY1DjT+Y}+6NL>Wy^IMb~7Gl`})q>#$98b`bUpcrQ4C-aNnj%`pkNQ?_)JhBtJKJD~jNGAr|5_P0ehpEy>aTN8~d z`sZxnYY~@NdEj~88ccCoY%Zh_;1K(F8wnt!{s8})g@`{CpphbmxX>`Dg3883rHLQw zKNhKBTooTzsj6)U=I^XbdU+HyCdx-S0^4iyvW>@?JClAIH{Z-!@rQZuYi*yMBSaF& zg>F-dxRh0e797pi=n6{uWh#iktUY`h0vOhlQW$C9{3G>ZW~ZK;gCDGTRcGoSX-6Un z__rlW3F;k^5}%AzfTrl;#?rAIL2scQEq&}61>fIN@hZHplh|b}UbInqLJqSTep)n^ zv0l7iac5qLwgikn_JjN}9a4FRW^s0n-<&qYs2WM93NZ2&z^PK0#GQ0QY(^Kf8UKYH3t-OL zJHgo@gE}rwHbZw2Dh&#==SkxVJdM|4%a9m?%UZTk&6>! z2(70~h_uPQPPMVgiC?a_KiMJD_JO@cE;;r5SlP68T7hsqknE*Xw%Fh-ATt1mIW!wa zDRf-xv> z6QW)nu}tUhv%qXMxRR21Di??Hd2YQ4Bk3kMZG78wT+ssFMDW$r`QDE zSw;*{6#F1&T=3451O>c?$;k;C z3N_e$SuDi69`CXNTJS-BRix<^yfH z+(7kSC7z^G#z5S1v1FuZDeDg4N1hv#GDZ-i{MW}?mV#Wdwu$O$2Oi&a@DYvHjT-fOA>cnFMf zVzIOtsDBTlF%W`g$R#(_GSaC;*vDeU9mHDYKweQggr7ljht@n9Oc5klN79VkG)1Qq z*{BI$6N4D(bv*H1e&3g-bc%C9f_cGVNl4Nn9&xAM_iG~_dP$QdZLv?Kfg=!7zanFz zX)gBvt1iAiQ5Guah<@kP&swp3oN=Q@iXN!a`uJ~pBO5%|5!gYr-^>J*Yvjd0XDjqI z{m-?FVx=V5eMNVJi_+n>4Wg9zgK&G6yMTF427SF?wT{Aaqb^bh07|cbY2Wt_aTGg5 zITJO{F>26&W^Mw*Bp2+=`!*SP4t#XHU+c(WAmf0Px?m=b(7ikpM;CBAZ1zZIupIpXc!hc$kV$W? z(nZWpm~usf1SElwjg5mragg899 z3UsaY30o4M3oe|++GQfE0HXktw-Zv40G6y{X~jHGx7K`s-43_QE9`C3G6gS?EOek{ zRT~12;;Vw6&Yi$W8r8(A2-XAg3*+C$Vfuq|c+pQ*Oq-uC-@X|97o8h9qfp7+L{!s0E%}0Fg%$heuva$3sGm^z<;mz0B z>s=X5bb{dee}1oV+?IwWCxe3TwbeTN2OA7x`57EcolkeLNbjycm<&8CVt8me@il8P zc8bF*gebC$B_wwPk>)(Ny62W0-!Grb1-3SPHF|_LE3j1xLWlxpnxJz_#GT z!;MPN=5d2g;v+*6mfa6+mXwC>kcdxY8O^CF=hVo8_Nu~d^7AIKItaUeu-de45@)l* zUH`pXt<6UTdR*fRg80*OE5lwR#P5chvFPNcwf*@Ikfb7SV(Vdpr*bbGnqDDf%hMP{ z)puLb^w~xIukE(9g|h3XEe0{p0+R63XxTTCGOjm6K7nyv8N8!Mbi%Zy-T8e$P*U6^AGenW;3v{TpZZ^$@l*UAbl zttjx-9capBt55+~w@qG-+x1%a)F6}lKo-X+H@q`Czid%&jy|s;(O4eA`HhlGj?_Gp zkUZF^W$VqoWmfofugpa$E!CAS>9*EDa-SP9v?GsKr(TYE>?m*dLl6!~MF<6K} zYgwTvrhQnEyfOAq^l43Y_C;T`(YWl!$F>5!4gm#m_#t}1w!6oZJ|A>z>MZk(k3eHp@{hbGI&@OoY#Lk19- zt;ef68KN%tJnlKI=Y6L!yvR*(J<6+)kXhzzf!EGXcL^dEDen#_&;J0ixC~5AKVqh?Z$nq5ZWO&bYwarIG@xAwc$K&H|N>c z3I7z6gtCliN~?YiNSSY&j{W^53%MM!7%D_xT8=k+d6!p9Ya9qKUtatZa8R*e2t?a}hAs9CJuGbKgp zYv;iSLXGOkZb){HoIrdd)ij%A%7(dDgHKu#$saP~QV@T)d&ifmpZ43g@tLzsR9Ro0)1x(s|n zO|y#m1g(I0zl2uNtx>ZQF-3(21QPMjSK}UG`?>n^YxlVL-A`oaY67N82ou>(Fqb}<;R$t70|W0!Lxwi+h@^XRf)C?O*>5d4@{pqf|!?Y*Av zvT2&uG~`HFd_TRiHW!`??u&#(w)vqPz-d`^ht;0Cmj#x0LMGl`bR0NIV>Pd^_b#+l z3MUn0T+c2~Q64E@0_04t%q@HY*Xia`I4#k=A^DZ_16f+!Vo!?7)Lz+fYmwD@Lm8W0 zNT;au8NX4|6MuWJ;mDKHU|bZMen>F4H9+JdQX|YJc8EO)ny?+U;kv*sDBgQ(f&E%I ziUIKRKjGVH9`Ri+XU<7(4bMqa z?Dyu%T>KfHNIYSE4b~P`XO}wsew9c#_R8;6p^BxJ+!&ZdTv^^|F5APE5?dT`hFtkW z2RAtawl0+kPESFn2fEXXlzRL-##W<08J4)+#ZOW8(_ppQ(b{Bd9lqTo3QCzA; z_052dD2?qiWg{(OFb!i^?nJSOmNa#tA$4V>%5-(_1m$x;D5bcV6P+Muc}?D<9S9O& ze9c>TB@OyD3-L_YP2g`jKHhHE(h=uO&#WdaP`X=yYqYRS1VMYTuMA=YB#i~oN7^&x zRNbQ|HG}rY&2m}Oe#?T*TjHsg6)Xw1htPF2(B9H%%!pK+cf3p9%61x_(#k@pUx-hC zxA#}g66pRj^;D?_=Q!CuZ2rpPko>jOm)r#>7a_p-Q;tXjIJp58@F1E}5woL`R?HQ; z5o`F8?0)NRG>8GXY1qh|U&p<{BVe^UB8mKq(o}I*p#5PH7<|#ORs20NBSkFjSlV#N z4DOW1jQ(#iOJ0@h0!@<@Ow2538BS~YpYg;)II{k$gjoIYcc3q7U7*NKJ#KGy^Y1XL z=ddkG`e=)q)zikaQcRP`s$4pmsL#}i=w*z1inZ6TA2z8ZIwuxEP#d?+k;@vE`C(6Z z%}lz5Nc&^&b_}LAqHa_JbDNi)fQ8>jv=;v!V`FB85%I6uKRg_KS&|D-Ss|$rrDqbI z+Cug1ny%sAb6zp-)nb7spf|Y=jkqgiJcReH^9T zsa}0nkz5^YnrNB-Vkx3s$+S~ifNO_=rH&9(R5-jlWdRk2tVF_0hOU6K?G!1Ch5bw> z3tI1Vg|VGJuhtkp2a9s)Hu*W`3rU0?QG?ARt_i=0wiMwr&0bRCX+l`8n%r5oj-Q!& z67m2RzL;|^9K&zhGzRfDA%h49QD)5aPt?FC^`H#q$(G3{d|O_~Q2Zim+#yX>k&&A$BxNyej3G~1(_a0 zF%+XW^+1VMMUhgt-17jH_X#_iz5jOU*}UGS-NXIHntb6Ww?-Vlc`jIG&66uEJhqye zKHdPI)#(u*B5QbgKFQG@doGl)+_}S9fghPo;!nSB_?|iOFut;e=wQ|aPrJ_09}zYy zNY!54Q!mZn@Bg5BF1d$$?_z*}ccvQc=Axi_IKq4(-1#Gj`yYE!#GnpC8LKw?CMf~; zs$=+DtB8%utls{V7;^IRy%<3eahnnw@e8>cH>8luCQC1C##-aOdm+t&QPj=`uzka} z@)!o^3M3n@AUR(|nT-knDjOnU67JPy(SgQZU%Oaj=JUErXJ_e@NSW|ohU|&sNZMvE ztB5>cie`ZV5TTxx7W*%#S6^|qjs?|TrHLOJq}Y(HoLdM@&mf12jt`5E=(f_3NYwf9 z$;MEI;NqHOhSC}YA3fF~LqlnVIJ&ofLYvRp?&-koYt&%r9Six}KBU_D|3Buly6l6$ zu|P9!LWPza)N6*K+=rOkU0t7_ACKg9^l(FWwN>n1ZLUI6Xc<>!sOTS>%!nUd`g>5* zQ66J0zXTDjz8id;Tb~p_j`u;hoJ70j4#GsP8`NVa0bZl$FW#KIfB;Rl8{N0PJz@RH zDv83c&OOjP1c@+4pz}{FA|Ajg;Dfv|nGozgfzBxu%G|zgx7^o>5}`KuKV!s@GI4@5 zrNim-gKB(akRbG5c)WOjppDTDMmW>6*wfYwlz&J(A0q@)SgcXpoPz>P;BHCvVN*!fuc4OHC{1fb-qQV1U- zCT|rq!lcF_a8-ry#Vfpa>$=)x@h|{=%arWzjmO$m9d;YvDJ{ggV8|VCty*~!hJF&z zBR4GGEyykyJgktk8|$xPl4Br;9nO+QFIBH(cfez2lU>`Dow9~<7w>mn=s| zXw$Q^1A;$|6_&`{go{(H7yi#$CvFagnr7xPACP7oUBVs_^~?3TDU zfgvd7{vIYp6eG=uouIQei?}lLlvi<*;SCe+@9zyM()nW;oTHH1ffufBcLW)p^$Q8K zndxJ8QEcYmc&Sc19}K-xwV>^%KJAOGofbN6^!!7C^T;QAO#Gm*yy8@QaF&=A3+Gih z^(sYZcV(hveo>BPGrD@ky{qzk&8%4d8y)a{n+eZ4PD$k@ALD|Pib0}uX)#2XNg<_P zbW2;`kq*D`V(^701?{?J%#C*hVx9?PP1<0nMcQhO8>h`>7o02KRO?dFtM~uKSS5X! zH?&w=WF~1);^eiimg*sT0Z@Akj>+6CG&bcr)sqpGzY&qpcgT|u-&XqEGRYT?tVhk1rT+pey;V0Ls%VC03ZjN ze#VC&>}JTUUBOCm(g>wVMb}mr3*`e@O+skMLDX*{H^7Z%wnrUW>q1w^XM8?SbCKqb zm7t!J^4EjNw}VkU<`WcS=&)|=K~7{#4}JSKk$zki^h^GYn_xS>Uemxl8<1?|_I8ym zWqKLUBS?@WHbvY-Dm~9v)pnL<&ji|TgbGK2XiaBuR<%KZCp(_?ks-{x62)V3>3Do7r%}kJrdM>BE?|ogHEhw@jE2dnqj)e7PNeZp^A-9LdrCB zPi6)57n@YR%Xf?u=W%KmZe)u-YvRG4g5JUAX~8aJokA&R%ii2|a+=qpK$H|7{~}m= zr)738C(ui_wPC)p4Idgjix6UmzF$m-fNWj{=<31WKj-rmB0?F*^(j6kk)9JJBbTYd znNU+!AZHC(2#J)ytY3IF!DtM7aCX@zpT~bt5+VnFk?}V{o7?wiJQEB z9N~C}F82<=ySCv2X6yB;aEUa&Q0k~yyRhmrg(6pm3Dpr_;-xkXO;T-OKVGCs)S&?! z>uCwoqEM7~YWGIv0T6N_ii;nDugW}LW7W@$y`S{GKNH!X=jC&*JRZTM{mmb36)zl) zBBQ|fiDeb-s)*h)C1f5s7GY)re=11U>Nr$q&@}}xT#;Exzn?>Zzk#Oe*>}3(Y~G@3 zp4KXk9>q1Ru|F&d(|HX31FHnH`er>RBI=P0zd2wXG+La$FFDBfMq~C7IwqXZR7QzB z>!J8BHS!4F#j081!|YlME0hVBRcFcf8o!35O1fmPD$vbkFZE9Bh*_ z=o1dXuw+zbl;d7w2>{QRjVe1nj#f3NPS=a<<&%PbrRaPYamwBnxlIakVJiNbvX+R4 zlU|I@xo&GA`w$iT>EPCk$O1jJKhR447g`bEH+NuJ9*fzbI|E=xuklXHqST=j0gJ)%|5rNo-6l`_ManiXy2TpoL zSaZ+9q$Oqu=B$Dl_taFjl(&z#X`)#`MT6;6ti%k>nt~C(eFIJ7ENxD%rLUv4!1|qy zGcfxI=ftii2XB@&Sud267EZtS7yp)r@4A{^`T1gjRzLk79xG%Z=rF7~ANC)+GW=9M zVe90F1NrdEdj}Xs@M8d^)`X?fjkX|`p?Z#UCkwgekwPKT_=rd;C*#T3iuaE)}2cI2`PLAh}lH8~JQ5l!c?!Y2a9*%h5JhdJ2oyZ`s^iCgfL~Kz@^i ze(-QE59;q|Cw%WS^pW}US$vu$6l|Jw7&0`S*P}AX&uaC(6b)0YUzgtZAh3t{rjHf@ zO^9f#O5a7D;2Yv{@q4^&B!{hP$Bnup{LW$uaq?QBtO4@hh!y*yOF3*1n{5S2;_pCQ zr@Smj(qA?B2=-G+v&IT%G>aEOWb4`>ONxPmxH-*T1+7Bc$ucdi_?lbLGQT*y3G_(u3ZU$F*jJtD z)lk1dl{LeTT@DaMn`w}Sh)AhS3T`bR7e;&Fq^~Rc{;%5?HYo^4kchx_af-Z?pLDI_ zN_@hzD-ETVin6UlOCQl$L_#4N5Sn0s6c`r7aW2{w7cR5N@Oue7%yfF38%nQ z?yk9s!7A;cATFxcw-89U`XPNFnFw-mrCsIh+i&Sm-18aJy*TgM`Wc9rVWuPNS~q)4Yp5o@ni1TCHFZ#)R049h{DAD39C`^@h4sFGP-U1%lf2Db>_K6Qfw@`Z;y!Di1&tb4c zeBsB=^O_h$glZ&D70$WoNC!MLcBbNI+Of7U1tJ(rm&!P~^kvTys~eY$hS!(nIb{lr zv+P7=R=8ogj?j^=Vu59U#qGSR9fsMSo=A}qAi)Gh!vkEpio(Jv-Q`1a-=-ATMf2yo zL;XT=59P>49^vn!KRLbzu<66JJ}u-Ui0K~m_giXi1`T5tpmO!KV4?ePgNJajm$7~{ zO#h@8SV~2wOApjc_z>p$>aJYjIgly(!RUvO8yLY2C{O}SZ(fa}4_>V+|L;_&atJOB zFplApFHQQ*s6~RLv@MrRf)5Vz;Blad8;htf@B@DM?u><%IHVwMW|^#^iDY&@x|P3{ z-uF3WM|Fxi(r$^H#l={BHUc{SsCRAG;0p5=w&$mA4(_PN9KF#O(bA*wh)2uQED`C|Kv-Z*dia!5WZn3d}L80(uzA}fuV zoXsgEWUPhZRcJX3LnF$eS4auoU=PV~&>+iE@=>c8#c|BJDGP!j6H8vIe-GM0ZDG20 zJ5?JM1{YO@4gDi;drpA2Q|NP4V5>>VdofWaR&XzWGn79;9Ei>O7<;I@FP4D1HibFt z5h>~oYFPEN+ilB905n3Q|#v(O-w9Me1(3jF}r;B7dW#I<`ogbfxf?1(KCjEoPG) zr(;w4xbc$385LJahi2vK(J$Dw(uK$SvIEq#&ma6$)ovCY%3eQ6ty%X$x<~ze445-+ zvQ}SHLmb)Z@XO3LBq9}A24+vjQ#eBx`aCVlSsl{6V&%JT5I-tm=5H=NUTB8z&pPHi zD|%0Yxa9eOE8y4-$MzW`_^6XDvY>r9=Q>>L#whT8*>8huq98lX!nWGWL*#eL@gNAG z3(thJc*a*`uT-Nvm&6YVN(!vj;H)6<8tb9#+Yk&CUB}iX#OlY5bKldtp0?*1oCu%8 zA3HGaFe!-mo)5*+1`HybY3u1|89^G(-Z)IR#k5*FL>PW8a)P2{$Xox$s13X#l;{Zo zIYFowOvbYR!owIl-Lf-7Ja2$ib!9E$>tYQGihh{8a1Ye$WrBHp1YjZMj8iwdx+%Tr z+B;#LOUR$__ep<8yor(IjAZ;A43_{L47?r8B6D%7tWbgVT(q@U4_%#tB@S3XslmgC zNf@OegIymFRDs^mNTz!C=K1_a>jjQyYA3lX*{}McBQtp_H}GNXoax%;!qrkco?^{n z9^c2N1-*~GOzRXSAU*;qH;s6sL^WyTi>GB}b^Y>k876vT=NChI92^JyXyi zs#=`P^^OUwKAX%mJMeeF2r>KALeE}cL`s7!VG-9;si>^(tVPMu^ZN~Wq;|6}pM+;A z+B2ap0^=z+xgslnozh;8|9e;0UYV61@^AXYMKAaBKgj4|Ysgxqf7(3)mQMZ4DrF^V zybQ|Otc#T`SAlKHtkg&HRaWL)=?iZ`V-DG0P=!W{Jm;oB2!*R=@`ke;h=zbf5xwZ| zFgT`}AVtvSt2-{A5j2@CZV@x24ufO?;EB%53eTPESGO*2&rXip;|N6!>Suzz!uN}s z(*~1beO@|Wu|$q}?})CloZbp}pB7g{Ol-R!A1|#CIY!M{En&VlHWEr3$-z_8wq5T?@mu}alcgXuF!FCBr!%&q zvrae1$?!g7dCy?H5hYL%7$9RTDd31cr__|QhK4YV?3Yx|@sW0?@ERaRl_salp*W++uOt1(sVTpuJ*Y1s`H_bYtag((FAhGe+(zl50ptDeF2`R9u=jd9t^ zgO`EJDFU)%Mm+5)quu%4t4o}DK#_~=7w^9}_++mAA(zr|t6dPVW-3Y8FC`Uv+;xB}SfHz1 zqHVBR6Px=`H33 zllcawm=GeZ*uNct8ao~s)zn}YI|QB8tS-3DiCQpK7RBUytH&B%a)^ip7@C$FeWfo1gpShDY{9gi&-vWbUKD1Nj=22Zc?nFX8rs5a#&=^5cg%Aanhxo8jlpqi z?1TDMouU$?PPz!udfKli?)m;tL(YVWMvH#4y)SR{Jc`oJi1|5J@}3s?=wC%k!bTy0 zteYO$prI|M)9e$)ExaK!lesgYli??&PLi&B$_E~>jtehUfKgepg5v!&7fC}(rs$- z*ryPL#;Qq(;ktK^Q@1tVJ9D^)Hrx^?uechb3K6_aYjDDMn1^+*nIE)fW z%?7+nee5;8d5TATNQmfwrFKr#{4=>|1Qu!&D(t|r5ahwzh$=>iQA1Cn`OO*mYx8%A zbmTW~nSIceD4a=oXTA`2UdQ|;a5GtT*!*dGsogj}Pq+ZFN15k)I4aH?oNGDTXFpZ< zLMeHs*wp`q*B{Hws5I?x5w0|2Stmxc!S!SuDy%Fc(f3X9{=%Nm6 zEAKpLsO{xaCbxG51csUN`?a2e{TH^u%g(+pr*mm}fC~mn zDyE$7d-O+ydqGVwJcFU6B|>j5(?#|XPN(ejJrJ%wvd#P0MIlcRCLI1M?fRj+s*3)e zLCL!CJFR=Y964_d6F~HY3gtwwb!DFqv zrEOpNvY>bWbqdS`w@XBrjztXv7l1l}mwwlt=>?t1Pl^|Nq4fk~Ckaju8=`c2mEZ4^ zmY|eHd?M+eLFy3SS)!ZgVdsdzq;y|mAr9V^ouxe`=xTLr-##iTf&li^PKPP9KbH5_+-H-sv{I=_F@uAlIl z&5>$IC8|StvE6D$IR~}kX=@o}5-1rm8#E#a;&QOgYCcbuf|T_5Jzt;OV$qGh{c7c6 zepZrfvFcL>E!>HWzwLimY>(PP`^||JoC5%4Z+m#=QM*{%kr1$a0V2RtvD#9^+WNW| zE)WvD&8X~IfgKcW@yFnA*Rt5@`y_=;N6SA~ueg&H`$=Cn?L{aT1mEUpK?fdYe=qIcm;B%U&1!nG@3 z?G#x*g@W*>-yIF;2$xH7^JyWPt3}WeRwD@&MS+vT!tDSDhUzsOyvIhx-ybE;;DZSS zVh&nc^>umrw%J!mzNoOv>s4;v!Nwa^!;UY}Da*JVr7i+g;XE5cev70RP_lb{@p%@M z$Nj&~Y(DFMdcn*YS+;`SOL2)pKa8OI@1PghI!7Hl#)uX*iyoN3f|f-{K|FG(4LVol zDNU1O5REnf_bgRNl5gKYFxeS#o^QH(vE4UsFubDtJL6}e)`uV3F8 ztt-4F^GgMoST3DRRz5xv&QRp`P_jXoWPkZ}>c+kzt;xOzsh2Ytc$4wrGM4`%3I~d) z69~@j$vlKPUkjB551;C2?xej=T7F6%7g+Txr!M=d=C0UtU+Al2P`5vAP97AJ+G6k1fs%KA<8(n(u4-B(uIumQ0{gLHKa;;1~J_j9))!s$LGgy z3uL@%D@8@l6J&@sZgi$atxSx@M`w~j&YvO>GLDb4qBaNAP+dEa&Ms??1> zpH-dQ!bmW1W;$=GB!E7jTs@`P$F0vJOYKd6pwF7m1kyoIM)SoLN?L^LtDMT<{*CQM z%=2C(q=ty6fUZw~(!bMlzY;QkPP@s+gyn>Bu-0?V0V);`ec%^KbcZC_f3Lw`0T01a z@cX4X3Eh8G)>6Fj8wpabr*O+vg&D`4V@Ayg<84{#*c+0yTRhB)Y-NY#D-)-FJpaQ` ztCuTa;54s~tO&KxMxw|hOENsjJsZu5E@3SJZrOLwD}b!|V@!S@tW>ttknha;!;cj= z%GDxFP=c3zX_WfPQB9{VB~RX7d4D0*4g1>?D9Cx8_oqpP@rV85pnW#*KfJ)WdT(o6 z72xR4>HUCRkgg<=qlNiDkFPz==4^7~n!%82Qe1d*6x;NMS!!O-P_k(18b7WE)q~yF z)xFK7r99esx+SBuDxJ&I{awaB|IBKA*_7NV!ni?kb%if?8EBb)+^aZ!{i%1+X52}G z7%3LUL3csk7BS8VgqUlSS;$l8MTdP^MR)Du><3XCKL|gZq4WqRnvRg{T7SrCd z4yGR*n?{LYLA}!M{KOK0T%M$5PElF0s}4G45A03mXh?~h9K@^vQFSH%B^?9s;g=Bn z$o`qyh%hYY%P#7qE>knc$C@fyV9a)T-(@McDIVlp>;WqV2c%xwJp@M!BPKB2Qa85% zeSf8}GhqD_(&S~7*KXKbZVjX&hn@n(Ao%hW!hO@sSS|j&#kqrFG zQsp@9+;z*KF0(BixdF7Mo%#Y`YDoo)srM?WtDyC|T`FnBgWWDR9Ar8;+a?{=Jo}AE zWrO9SqR61M`AN^UgI|2h>J`_$mB$bj0!!n(sWV2z31u^(bNiEyw3D)LY(x{ z3)|90`bctLWMysIkGDAvm(&@5|DAHnu_!O56E`FY2fL z?HnwSr2UDEn@!b3*xl9q#|<_?L_nZBlr5E z2)&EAn~}g{y2*K&=7GHat&Ue!9=V(qJd86&%PqGEtfj==QQK11Pwcr=J=C}+=&w)0 zMbep3ntegNU((aQ>V>R4$+}`CsVP~oLB-JsEMd}0f{G)_+}VAfRVhhUEPwnmQK!4t zxnV~f3N@|^&76tNM2pEr%OfoSk#1U$jg=Ox zQn377Kt8U0ud4jo!4ovL0sTnRXFEe8tCUL-hR^fLKZ*uaHL6GTN7x}og}7;&@2@@| zC+zRB^gAyfcy>6TGmrP@p}gcXSglXa`AHY!p@z$*nSmcJK9J30tM))(lB?5xr24RP$BP z0J-f>l;)}TeABNFrES_b6shQKEmZwX&fbKcL7WPZ|(p6##avEZrm$(!6NI=3AsH&YQZgL6^0yNAIv24ERVuyX;Ix%iSpIFki|3~m zMZgy_=<_%~HTofS>{QH7)fcDo2=aYH5rN?rx%mB4OzFYY%?ZDK4(FToJk$ta*DWB4 zs#OPJIf(@rO*E|5xD{I}*x&=e=@#-!OiqAhLfffXK4-;nPL+$bh?W(Dv?5gA>t*mL zqd*y=v(3 z+m^b)7RC`Z-VliN6n~I@X@TRT1?g2P@N`LjHH1t_j#$UCvSKh5h{hjCXjMAJyYrBA z-Z~7}{%YGSwVbC&?Y5KAf#rgCl?WdzM^gArDojeeZLK+N&ntFF!jhBpT4(>%vRI(u zJ{hlLjUv~BzV;7}jW;HV30^)8+6FK;qpC{$IVMt(Emxy%K`J%K*K1bo#6f@u!^`s=b-0$cq3k!c$VW7G%3{LmhVx-b+s2IT7ce2FHB*^%im|Ci-v(xf zJ2#J?$NX~4&J)TD%TXR*Nf^Z2#GE(sOnaSuGJ$03NF!2$`&sTZ&RvWPblFTn7z>+f zwXeugoa&HKSCwkYl8-ya`$^!xu`$ccdZj-Ya}8HnM0LX`dApN{7lX`)f5Cjn`EXhG z!qiMGgv``aL-N2cQ$_0sEBpSJhQC-E0hmrA=D5@$u&jcgt(<%*FDrktdG!FXTB*t{VJl zxz~|hOn3(w>hI5cVc)-9AGxCN1@lBBHmX$$$m5pt907MpV%KsA=&-NH?WYIv>D$2V2g)yR7{3m_=WC}b5~rv>>h z8Naf!I5)<0GbQc#nvqZ9S*6j^c=Jdj%o3g`}bQR-{t zL!pT|{g4%KT$Bzafv36~WmJ9lP#@OF0cC?FiezPQ3isyD)M|^M?N0Ra zy`Y%trA36+b~laDBV?^{-wbS@Aw+QdN$Ja|-&k0ko1wT4W&@TrrKNVbZI=*@Uz4ES zbhli!*`_~3`orAFtL#){0(YlQ%du+cF%+SV<+l36Kl~i1Usg6)o92x-5_P@sogNp$ z&i8R%$eHYnE1kc2QstZSj9RM`OcxKz>Hp3oj!2+vX*KmQVC^Ae_u5uk@ft?qvdn>F z@Fw!ujRx)_SAkXW`jEk?%{qDw_&f?u5WcS?OV0RHbV9Z6_!ew7rlp)n3j@)CpDsSx z&`Hh%JVwFY0R#HkXk((MOS6VOm$PA17j(DEE?ey27{@A5z@>#lvcuitaWMT8JD3r6 zrDoIC4bqha1yDk3$#cz;71v%ro{B^RfIV>^b`lh1*7h!(s(GE0Y>g zk`Rc_iv!~Vk@nc@0&VfNN6~(WEE(sXJ##hRvE#@#fi7oVKZ&^fA8~Ib!eey|u3w(? zHPvIizIdv$0!0hhN zT-~)qqN#8g3*QLfGX=FeorhNZeoNsyfh9Er^y%Z8a9O{fZUdb0;n#QjZN@-G$>?)@ z^#jFggWUeq zvuM2}xmreRf0Ct^>A9(0}-$otZc{|y8(FUCvEuYo2oy=86h>A-0!1TXP{0@fRa ztYHqADwJU-RU`spm&=jEFSW9W@<5duTcWrF^0ZpH(ghnd6v>f@_9S;d3xde z@Xc*!3WZcrR!Z@(=LJ6a$SseSfVO5m2Fi^P9_u8x3x!muphu~UWnc(xuxkEhF~HQy z)O{8)F!T!ow~E=EfZ)M`G!(W5kz9}rX_ZzyeknTw&03`1ysCbwE1G2tTkcQv|EJim z@Kf0kkuI)nR<3ejVY8_s%b=^!zO+ZabnQMwDl9mr8n!KWKWLY!hPIu$B07<3fgq;28+d51W{H6EdyLwJ_MzBWG61XaAf z3rfW6GZzp^+pT|9cfJ#)xw~hhBHuj zQ!qnP4jJcsgoZeH@`a%FSwUrTh!3V_)Ab*1m>!?f#knw@iD}yS%H)9M;P9b`iDOED zM?Nhxf}!q;U3Qes!h1Y4RGI5NGhms{DF?6<+Ruj)N^-8+H$iS8PNITT7nC}ZTTXT5 zSSwa-b8$?I^Z7smZ%Sc0&k%x;zjsXEV9mi@rbr)A4Mti&&E?ow>jFb#wIthbs1}^O zeRM*Rg=#)q8)&#v@f6HQeJbr6yJDzPlzE(?ZLV!~bgYO^dFQal1Y;k40Wx>5y8H-g zZow9>ePADz$|cfe{69p%u##=V|K9kk~0#u?9xMr|2v5(+BZXBBD;;FQo)+%rrT2m9sNIGp)=_Mj% z3-@xKcq_eYmTCJ$dWx@|^hwaxycDK->sYSuInW8h)vR{AhSQ!xrx7~ zx+1~K-@v!Ui!>{xsmS6S9b{;k+@!taPuI23qe`NK$fn@T^H78-PodLQu0|7r+&beh z{KBa3JE~khfz_{*`7*h9nhI!mmnMKzU`qB~n5thJ^GSaZC|%Y3Evoz7LnTf8@rSL1 z?g zCli)#@hj=p{{J; zVT*q7hxeCf9vxFU$@Rd{Xmc};h#`9e;=foKwP*(1K$tvMQL8D8W>_|19RUI(t$=}h z?gO~dQQH6R*}#5)tSBVA+Wx6yA`>8u4&5)%Wh*(iIJvW(EUt3B*_4pxqesk=vC6Ge zp<_LUMFyk)tg1C#rq2G2gt+?zcRm+)9r%vi+sKi*~K>@pV)~CXevqb zrwkv2$>K`E9c1!lwjagd$8%_}c?~|jw)8fE$c}Xf)IN>*1l3&EC(serHsKM#FnieJ z8S9}CNzo#4&~5jSXX4fQFT@;2@e0sYumtDwj>A++^dfnfGlTz}bLO&FWaA-Ft^YWG zbbCDxc!4_U!GkRYjZ7*z9i8)X)QgB7bEXyb3W!{f8zSw{*&`X(5`fkbs&vRd#0(lU z>WctZ_H&octPbFELP^p$9aVlCWI4?*QI1mDA((*DLFkW+oaohsVFm&EU5W;ydm6yrsp3PC? zBRnyX58?OW<@i54(@V#7SbO?P137AgpOp2o6s67yXC)Z`y3VULXTanonHTHw?lIL5 z>I;sIrYdE6W<<7UzR(!hH3%A{S`j*}D6!|;*08NlfZvf?kU14r!tlaAj4ktHv|pxS z)ris6n8pG^XjZgl{C#% z>D54~n$Gj6o`mKc3;P?p3xHse3U`gG-!8356{yf7#P0MSsi2>}ss3;(zl|hy>3>o? z1J22y(97d6s<)W@1w{Xgcx<1u)JNf`Mjb{%;d<&BML26JP~v}&PHM_%^TI2CBsV&tcX=Do}&|1^2Kp9Y=eatSYj;qylOT@ekAVkxX+JnfGKhTK;<;YC#r zh*TtU52;L$1mv3kTB%Y0sSm#j)^~^!T7!J$cf;8{$hyuw`GR* zl$?l31G{RrKU0!G#-x76=lIZ?j4l@%h)bw1j|KcQ``xi&UA%EK!b81{?6 za1W*PK)O>)$5KB#TV7rthjH6eYsMn_{w^X@PO<`b$h1|l{tTW9pfaCVZ9UhS2s`En zSS1l#y?smty4-M)Jub9YsYeTVG^_{75#`Xok5hVWk#u*$S^e5^*BRwSCLFcK72)`q zGb{HNR8$onD2C~z7bCCzYvRC(UD`3Xz{T%g7F3qh^$uBm^NdaO6u2ajP~UUzC>MzJ zQE!or`-bJfYy=J;rk6YC)RH(*wX=VsebdstQ89m)IVkO+v1OJ1&FgBt=%Z+GKvMhM z>y-ywgCCG02bhJ!1Ow^NC8DdF4u#e2Pl7nOfp9%tc0_hi8%ndW<# zDF1`V+BX>=A!Lx=%Z_Fb=I;ZFFL_zSz4Sw=Z#IFg%9?SR+XYd4&%qOYWc!@z*zZfj z?#Shy(D4g*PtR_x`Zte@wt@h?W{0AvdqY3*YI{)!S+LWjpW??3)5ey`d}>IlMbi4LuE_(;)i9DRffi zgTVrSqngG91o*2Dq{M45?jWUaKBrPRHFwZ?j0|g$yN6v(u|$UY!^|zM+!@15p`yA> z)|z^loZ&c?B-3$md|0hKCcQ;vDdDjNZhzA(r8^patP|D1@`fnza2h3q}<=~c>N9$AzQ2DvP-DSwu!PxeSu8uvnO56rQ<|~YgKoJ9!>jwMAng# zaZNAoa)~&;@+xM-#3BL9Y_hI1!43gyuwvffwL{}V6G~#p=O7kXs$~F`XYkM#|uoR(%_w1k?OdqBQTzO+nO?0wrv`5e;ra!_hfPvfH9Mh zX54*?&qA@U!#XsBy!S`XQa7?x$1DFiEi}wgm90}?foEj18VBTs$XG?F-bA07fyjWy zajB_{x(%k${4Xz#vEs?@>N{y?8OOUBwDr3*(4ai0S7_evh4%`KN{_aS4&&=2ovi9X zuY@rWl7WQ_0`K?}hj$@So4w`&=Q}6eq8E~WBXj-dc!_lr6E+5-1t+p%p~8#9Z=Ph{ z$jij`U{kDUAw4IMFn{lxke1#9{<(`HW;28_2j;6QZu{)d8ioxwEQ-Q6c(RPm*J;c~R$>SO;x){+X@z(xhX!U+xIX)-i3E+c@An0-LV$$h=49&a0 z-_Lr&$2$dK_AcJf^;z{evjN_7w#QLTJ<>y$jl>9hWeYPlartd!(kx{VB1mzDTzir3 z-4&Rbe|Z>WyX00P3}1K-*nZhUl4eG};>ZGEx5A^aw*anVs>f=uqF5pmv^vW8D`=98UaAukIZvDHP# zAze{RFR17f6E{zV1@%>uPKPoCMr?Z>A?q##_PuP@x5OW*gauNa<@dpT0G51N6>!!A z0^u0Z*8Ejog7GMYjxTo*rF#m8AguncXE{uQayS>4df&htVg3PN z$Qm&v1h|ed$zeR6!b`96Hl5fS%Ok6}Nk37J88_jOqk!_N%2GF7^65>Z^j$9NIwXWB zOOzxrOA?mkU;??!I`c9M`;ct4et9FJzZ8i3vgpOz7n3X%sPVKg{ktf?LCRHN-@?Qm zXlE$OY@*IkLPJ49#b+!w`i5}|D4&`glHRCF)?7wWOpg#-jeCv2~)mN z^5r!q(l}~y*bYw#()K6sT@K~nmB<9LvoCBjiBPD|5d#~$1v0!Y9Sofxt^`g;47j9d zFt#mSS>cL3Izf-9EhlCGbTF6>W?uavsQ;mMN5#m`b3&PE>HnQC_nf)fOi$z7Gu7zu zWX@rTK?3Pl}+2XYKkk|do{ic_k3umu;DD9s9$zaBr6M3W@JO=lDgxI9!I>)aRA=;hlieSk!c9pf?Q&WZZY~*SBC6KLydd<)lY#-|D8j} z7}RYu4vvHTW2zq9VU8{z1Y1V?)}fR{g%91EZJ?;3+4VEW(LK*V1vy9p+7z(6 za=W2)O+;Iy0NB24Aah*=5-aWp!G#hZBC6!bri6`IoJ5uO7>-lDg3- z5kJG+O}Ix>#Gl9kk}G3I;AIV~pb=uT*urph|m0CBfo=*DTs zz1|?47WC7FVWiB~cOJ^xv1R^i6x#(m4OSbNu9nxklf`SS(KgFkZd^tPnAY+r*|`Er z60Mj|y3u1(l`vt3oLVc>GUgGl)~Brb*;0NcUz$|zxHCYl^DslFWXBHuC3&qf%gq!( z<(!0-`ZQntmw7#utiaTa7_@@fvB`7^#UfrA`@jxT6j zl;3+pSc1gC0EDiD9Ap5Bc4@JNiG=xci$EofQ4N@6TBli+Z4)XzuXxW^xO56Zv4|h7 zEH^;v6d}2TtdAfAk}v@)N*yZ~zQh>g86_MI*$T+Vli}lv`-2*X$@G256vG4D1`8vL zxC-d$25ls083-Sad}eut(fZR}Jv{_4AG>#yS_^+Y`p+1RG@AE*xCDEE<3?y9wzQ`E zKL&j8e6k*#W$yw$+jbd0P{i`;M0u2YrsOY{JFgY+i`;rL z=Txwl2cMRzO66BzZEjW?Hb0~xVjC885g)*iQN5cH2w#8ZlUlAdVK02UhdaeNS%DNC zhuBFpowTy0<+^<_9{Bze3@&PM=y*t2R;vh*So_f?yV?KP%BT!|(85cps{@hM2poTu zg~sQOf;4ToVU@!L!{DUPe+|a?DTLw)^DpDeG-bYf(E+e$Ef)gS9r9oy3?aM@c4PhV zU_!s*NEJ^b6P7zA*UxmbS~CO${n<>Mq~w<6xc_$w*|_3#4%vrOsF$8LoyJ{lU!4CS zlNgPt{E*WF1E7%P=M|c9;D+flBDZ@hF4yN-mS{K|@Gh(o+o7I&WN)>+VpcX`oW-XuG}rm`BoY``^tNxL(>nCF;rW z48--kvG*M7r7c66$aU}syH$34QFk+y?i&o%c{ym>BS{LWV&RkqkYF$6zWF>3a&vY6>?qy?yTM(z+xCRfSUSw zuEx(m(-SaiK?hPBS}Db?&QCvjh%aEmDrYPzeb_XwtGN48h_BgY{No*gAd`ydEI~}k zivfRIN^+8z;wUll7 zwc58D2TygfPBvAatuGTWsq8oyJbRrcX0dXDs8;FqaG*#W$CkNYy*&AgSH%tyz)Uw) zp#Gsm^Kie30=VkKLuVaX={AH#@jwt%HQp4f%%d8IUJ%6g_-@Z8K?gB)yj(Uukz&7qyYMj;MVIigR!)ep-I z&t#U-Mu%0yb@81Xd-!>yluv&~?f%nnGt;zKytl7EU#{9NAmoNW29}!rV4+0}K`ii~S&EP2O^OB;F)Qo zwi4m;BwM7~+`T+I2;0En)CB;UFBCgP=YIBP!@(82Ic9NQxsk9>+rnppUr+NU)sv_L zjdf+UvB5FD7CVXpVT+DSq@@KAZ;F_1tcHK2>H#U?XKUXz{G;K~&7Q=TFOflIhmKMg z=F^BqwK$4ED80OnuL`lVQZhP#Sr5{bj%?7K!)CLfO%P4DaS+1q;2w1NI5S3-9UAIo z?2|3dZX$p;E{FB0>l76rVIxuG-Rn4wi&q>-%(dBYmtaK=-dQVY*`JGtxdAUYh!P?a8wL@S0!@+;4dLm~aIk zM{!0F#;ps*qXw~!+B|{H)k<*@?j7&H{fBfz>l2qcb$KyKA1UX_v{RRl%$h%vFU89e zz}(XQjdOu#s!E9J7Fzw|Ox&>+mXy&VZ3;3x!#?7HVml8WoHSOofC#ntu>6)l2=r@I z7Gwr;j$#E73Q9J68b3YRFxu|AL)#->h^_lubtpg4w^=W0_!mW+D!`nMF~HR zt5*WpOB~3?8b={QkrJY6nvti;_@rXk+-X;x)^_5uQPHj2fxL~&*`9101eJR+q{0N=2ELc#pW(t&A%x#;wPVUZ{+*gK- zg3ZbE?{gx-bI&-2q(vl~DfXn-+vb^#KUmBQf5oF_>&f9Sc9{ zbPy%%u@@{q70!suXMdn>mex<@jHl1w9*DJ&b%bVpHI~UOJX?#kErK8jc6vsTTb$ojp5M@i-ySMFnsOskN$FZe|MnZXD58T$LxFVGMH6g{7_q!yf$uK+v88;k-_iIlcAuct*CM?)ga|AFlBy0W~%OxTYl+$RV?5j#%1O(!6MHHAAH&5C{Ri{?Y zUQFBagF|c-5TIWH0?80A!T|R`x7LONE@~1ph;a7rdZ#ZC4jPWHw+4#uMuFqTv7oyB=dSzmrup;_0SlA2JX1V zy|3vMs9&`j*hSKAk$=VZ6QIj_5<}5GQsym0%cqI0ocW#5MFxYL5Rg`yu6cOGS*2Bo?V9DN#de#&)yaxCz2y^ZtQhY4Rd zvPn~0Z%Z4^{a-T!ed7vkF15v9{cE}>2SBH4H|;_#j>;=Vve?zg$aB%*@7hT`{<{J% zw2`I^!aR^}1iMpyFv`NsD*P)BXoWiy-yUSrV+ulzXFs?E_k#=27xsL|jIJ)hbzQ@k zTJv1DR`BRyvgk>qE0-DP#Pr96oJW?V-B7Fn5DnGl)gg>HAJyUgNN@mwB13|HSH z{VB`6)qu5AJ0REN;l8N9vds^6zpn*BBdbP%iIZK`?%p2HgTBp+w+dIu0lXh0ivK0M`F z{B>~xys8G5Vv6ok@5BfWLgefl3>8H}?%=2dfX;8>)#E-_+!Uj5H(WqS@^$XQfM^PI zDCkx4&%lm_l*|6)QLs9AsLTp?3szZkg+G`4d%cBFg~bx0+zN$y1*9=eO8e)TEg)Xs zI#7bDdsF2GaZ_Fa#aIC^=-V63TJjz~Q=Qozx$DbcVY5p!V|RC4Ps)02#-|lz^=(ow zG;(N>ztZn^agrz76q3T$HwKsD64qiNxxc)9spcWtVYH{S;R?Vp`F%2??IdTz<#XWp zwLe&)DJ{79M-9{tsk$f%l+9;8uqXF}=tk~ZaYZ0A?)s`c&`q?;X1y39s=1cNWA}#< z$_HkhHN?q;YG}bj#L)oIx?tv=S5j002#*z`GJ@vJym^BfRZ>8(olbEpkG=FL#P9#} z%?fn2cd?EnmA3JmLTI3GOTG!QogAF%f4yA@5xm?YJDSG*>#j2IM=KvdK(8h?8}21) z)$N)ia_pYYB>Z^2sqTJe*Df8o*7-B8X`kD^UhPB0gAJoy zl1kh0f}jxvj=n`p`(>vUuX1Pvm@428p&!_gQN6MS#>ATbOR2I7U1}Bba-p0j()HBv z8F9PYtav>zG}lg>8I-lMdDMEO=H3<3Eo&qHH;Y3oZ6=9h3xkGE`~ay$&j9fdOwsO? zIJk{wt$V-%v8V^;OzbYQUVM=M1XL&6vOC#C-J*7k_&DRBjcz*dVF#yO`8VSjsj;r@ z%Z5Eu62aLzl68o47O(AED#3*AC(o8^C>L`M&HncCSFC2xs3s=c-V{pE!dLU{Z;EK_r$#WX+@tY z`?5|{i!2moqQyj>quNivZ#Rf^`K`rs(*&SpBJfCsU}=T}FJUijB5Og-&R@XhKtykN zk+w&YrN1H7P>N7FMi={jNmuz)xknf`eP{v!ak4*2UWO!r6`Y^Ti4tGZ z0<&EwxuFiZK4mJg8>-M+ zxt*z}Jq+$2CnsgGIs|ULG4NL_z=l!ruS1nZWfCahU^-RBc&?Szq)2ANvhIX~mA`j! zRj4(p-!7$}B*gMS%8|GQ-!V~tbnpGBS0x%-X)SaWE>WZ61m$!{bIwkePSKP;_BF7R zviz|140&5C`G9~um>Fri{yUam@mMWb#HMxodSX!`=vj9FhPowE%2J4$=dL&`s_C8j zJZ2{Y52Y27twqE!-bj;S_Y4}S!|P%!GPPe#XM_J$1T4Je{|oyja(gPejlmPI3Z^CS zjI1St3c{<^dmitGOftG=K+;pyUla#O4hxUXH3rUwJ;y5R46-2AeEgUtPGYa%v9Syn zAGQ*_A1+U3WWWG2+BJW;#oLeHR?;)1QdF2>zzU=po)B+ZI~rwQbwX2o5jt1psU>90 z7RP}NsLz@tepK%S66qpO<8=@`)WVvDUu;?I`h#>xK03mh0*a78PoIp z3_R->5BA;Rb-LoM>zyZfep`AOwT*5JM2LHjBVsRkbFZxgAYLmsi6D?FV+Md>y6nAP zg6?o?7mpUnkcV#(bM^!P$OETr6#^LsWc{=Jj4MtrK7qBpAtexlkY zE4>Bz1Ic3{J<0`CU@dkR${$If#9sq9wWAmsrwN7lQN>Imb5q3y zFqxLMFI9z(D}3!LZ5h%^6jja|yUg&IV89v6Pnq|H{X+^c3dBt=O!P_@f?1?jzV-=) zLQW=YCNhFNUh$%n85Y6_!g?A6yEO87s#Xs#SQXegv#ex=Q9mS3L~TR^yJP4>KCJci z*dhW}Fm)uJ){r^rh?K|!ijm%~vKW&FJsbE$UK>3guJEOc|9`;_&?lbc;i2?_0rWT%5CN|)6kqQVBW z4@R}kcT?98V9=3bjw6$>Bf7mc;8IgDwLl~<0WIZ49as>e&~+&XkBB)P`TV2Jub0FP zFFoGB-9E@S82Dggo$wy+Dy;|tg-7TFSIjH8V=N#O)2JI1#6WZBCRWllvnf&$_^(QQ z_}Yzq_8_|%oFY*bRpsfgkAS$w;z62kPb)yTea`4q*vtOXhpNjGvL}3h})dt$eZ#tT^ z5@f|O{j>wI7_1g3O*?0^N9ksaT5je^3U*v z#}bc_sm!p+48Fvc(J;j>hbRQ|A#MdLs|tQDm{pwDdOu6}aDZqx7UxCSmtW~mwZOtd zy?WweQBnRKsfEiAh}Wy_h0=q1iPjQ~ZMurk>|orMjoDyf8({tucAw;)D-Lvwtv!*>I69TYaK} zTuqqvzpf&VB%H-lRVDRABKCm=FG-SRb^vSvVl+HCgiG5f+Ls+k7(B-3cTox{CunHo zRnV6gnwjq#qaS?+6E;lJY&~HdxTlTi--dAbBWi1Tz2JFHg)Y88;rF1M%ojEdc?DQX zVc6gm?jKq-h#aFd+QK_rJ}>g&|0w`SG&XZ9Zgj-WQsohld|Pht?SFz^s@@U17e?4V zwgF`F3vxoZ*%n~O92~B)M(n?sfDeEK5VWW;3Y?ps|7F2IS*^zv@Tv%qa0TInokbAc z5^_|xPcW0LZ&ZRtYf;9br5hYdnvo%yVbh%is>0RGhs%}H2}S|Hk5xrAV#)H@)8f<} zH+6kI9ezom97YrhG%UAa=YjZt(3RhDybr3JNCcwUb;`SIjn|=V$u~7%^-a##S^mnL zrcuKkZFG3+2Ci2^2f8iN$n8;Q0wT9Ho!?eBhD2Az2ld^rAEtQ8<1I`(CLf(Tg`>b3 z(a(4`bsQjqtSS85P6t^vf!Fu_$8fj^EqyTiEB#y1G%e*Cx)6_E03fRy)iaYenvA@oDY+V~G8@ z9c(FP=gszd{96AOHxAgaCQHwOE(J5Zq|JMsA->ey2gdVz(M;z_Xj{Gsp$}v(gTl*^ zHi%8JO=_xrg9vS{YhsdOvH)dR8hsV;eZ-7J!8jA1Ula@RQxmUoo@nBJx^l4u85Cjp z;RiyBsX64t{q?T+O*H5!d{|ml!eT&78nU=e$)P8ZgYufX6V`!;juxQ zC)j7e|CF`;*L-j#S;G}PKmet!pGf;GK|+k*{UZDUUdjjY*a%*z`@an@dVM`~q;II#Bt3On)w}Xc0?R$Gh*|qa7Yx1ESzCEZry=qc^FM&^Zq|CL zPU4gu`3|b%-Y1Hs8mZ8Fgi_GazR)!th$~m@A^&FYDRr=J6FjV=2X;$;LNZ!c|U3=dC*IvYmjVOiu7N9BXER|Eb|H=kXkm4i``kp!M-!s*YJy- z#mC^(($dYe*A=2a9owbc1;2M}Rthq&m7iv8G4+cxxPl8acUDMof#B3i4|M!$+li1+ zX~48j>JJ(OzL{Q})|pe5)}owV#=BT?)WC_bZr^@1a^hf~w6LD5F3&MFvLdYxP@wb8 zK&01|6@B|A>}OX};%@#i^xqPpm|6|`>hh*2cbL`VM1({!KXvh78UWoN4sbw2-xQv} zm2tPwj+7qH2-GLF6|@D5niEhzfGzJBHG_OU(1P$=gOG;3dJT-;vBr~eo~-(-d+O9Q zAqdmnJGmaFB=q|u^T~+ewMdU0eXV$Mo3Z=kB4E>L4yU^tvDfyw%XS7hnX-S=zut*+ zUV6hDV@azZYpA4?ezc6a!|s}gxa#{rTfV1Iw&0y8W*^X+jE4V^6{@J$k-f#MDqz}B zW8vNx2F#@tDO|r7sBQd^qZ@@T{ko|k{T@vRClk3M1{ZO(?V6dn91%XE5!tlzvBn1t ziYTh9;a$#F?#LwJ#Ai^)RPVl+bs{Pb&G-b20XYPx0yNI#6E%~!(GprNyPWQtjHG%G z=^j0K@JSp2*fAsvk zYO!G&h&G~_W&V5FD}~r@R!|z*VP_um20}@MP6L5TLs;eFzb(Gx_(6~nGpqkxlg`z$ z%Ssb1sxPQY)rf{MbD+^V_si}PnMbJ4?0E8*01EvWOx)B3JRz+!AVI^u} zVMfERwh{NIShR6TU3Cf7hw6m+!;~w2{$QZ4XCZg(f!xJQ#iQ0nF3SHgHcGg~-P|W< zGbepm1PpQf&!! z$oI0m#hu11zuNcNph;U!h;w`sT;##vGbyUcJ#{@9EafWh^}a%~eXT6f!dZ@rP&2~V z#}JK&B}NmP-FVpJd7<2=OkX7x3_|uPA{>g!?L)ZA5(bae-YhI-V-*JoQb|>~F`J4avLpQy<@NN)fg#dOeQ`zU zeE8kcAtHTx;eW5Hbt)vPBM!wDM+fZGN^7~KAvh8EEtLwO()>L7YXsf9JA*)#W>&+` z(_&bx2@e^vtNdvPT6P8u32%dt@-O&F5_WPsG1&Oa6C@qu``IBXh2?^6|9#GtwJJAE z7%8+Gw_&{8;0A4aMqvwsIS`8!Q=04ZftC)TUS5>;w^~#C@Z%!Yd00CjqLlwy6eabi znj#p*a)RnqG>ktI&4R8U?*fa#P~o$;ILzLNFYl++Z1;?*4e>^e=iM{&Sv(JcM+8^|>xS zWmZD9N}tzea3-&cx|cv+{Sc@5gU28cJeR2IK;M1-4m%6=D04M{*Bn4yrb{`L-}1w0 z{!(?W&|BC0TbB3%sV+Nw|AWV0ZdXIje@$)v>B^t-&~<%u04NX6Q{+lHM5pz|i!}3W9QSw&pSMR$V;$^=kt&lGH{TIJs|ZjI2Br@|=M>`#_xA5Z|DGdkQjVd;p*jveiD!)QWY z!1B?GNF`Sjzz=l#aV&EgGHWPS)|3OOOKOB&^K@+H1zs!G#N8-ex)d9Fq2#LY9v$RG z99K4X82i6W5Sv|eA)`_5Eb*_DE!ID6>gE+;Swex{yxe9;-uk;Uc=Lz$HcG)>`?+&r zgy<^g`StN%I313qmWJHAj7FtX=}aRV39YyMWsJFu*hH3_fA0&*(+rfduLiNe)TS`r zwIt+QdIR=2jAHlF+%ps%*jVqdi=$m8@*rP`3>(1#U`P%ZEEiq>PT7iFq*JuMGn@4q zwG3bn(o$Vsfe~CRC=1*dvuMKI`~n}9o$VM&*lmd1W}7q?5GD-6L#{IPV+$EoyhsU< zb`T;=fQtM4?jXY3QsA||0u_AuSgSyaes_9XIGZvJbuovXk#~KYx^S8jadgt>Y7hOY z%SOzJpkK+A_dlErAED@p*6u!rUWkOFv7Ly-KJey+5h_)Y-UH%vmlmz00dUZE z*05^M2)9_w_b-xWJ8FE1?_CZs*odBEbxY9)9c{Xq3OBq7RO2 z=~g=jCNe0P5l6#OD2a6E#z{^c3Yao_t88lYO*AF%v(%`6E3!@tsoD9XaOR|_*sgUE z4(&tnFe~y}qvIM)2CVIru#04}#6NV>LjQ?W^c0vctUZ)&&$^vz034p~afEBa;xjt_ zAl+DVTd=J0InkgHUJ2|t!}ya23rW|CGNV+_#;~!*Z!6X;hM4r zBiLkKgHF^mlv6z}@|M#EOfLFmnkDnt6MiU?|Gm8}{KaMduv3!f8w9OMVGlUh51I$vL9=ON z^JF&jdZm5@;k(hVc6b%n{MfpL*ehn>6~+oP9DhO+yZ6Ky)Z*!|y6gwM0M*2qI}L=l zHnj%u<`nrn_)5Wv4!)`?^83;V0(Gy9#aDLj9WmnOCV|vhrnxvDzd2*$ zM3uEMwh0Hs!~ZHqBRYYHZgZhn4gl@NA^u_i5pRcO@iQ}r95@Gnc`yAK=>o~`rbM}i z5jf-2bs2h-4&L)6!=t%clN)7fFNo;%2fiJm!v)7U#fy`iu&PQ~bwcZZ_x}@Ah!5p> z&<2wPQ~YRQ9lr{MWI5qxh%shY@p!jzCLz&mUt>bf@F`PKHAvw{0#`Ur=t7)XdwHnO z0e^N%02R?ar5L<6Q*zJ2&jct{+63KBx9H2|RMOH8x!IhiY{bv?V&gGF;+^ZA5Qq_! zbBvo#UNmuwVg?WU)j#*sa0o>u18nR{FkGMo%YTJQD#(}di$3~XAijZJBkMsO!a^5gFn)9iuLV%=QOuDTck z&xA@pzp+nAiz3#0!JL1&5Oy7Pz~QO21_TF=cZ`ug`7iO8DpNJNl_0fec~r{a^$mQR z|2D;@+M^j`$M`xZ6=Ei}-g>C}PVrXv5El$6%lqsi7k-t>gDy|(F%a4sOz>&y3x3v2i2Wd*S4RmF1>e@I2$1>r7-Bm4Pf$xvL zC*bVWOfGehu&u47jHK^mh;5EIAX}FOcHQngg=9vhh zr#O_>Pz)ak>b6M>SM1~=Zjgc~1TA%6&B`RmnvkJwA}4|sOO4)J=dsu)HUOAnby^NF z4YjEU>e#OH&Nztd(uir(E~(e*&e+*We)b~6ySzL(5x4+!P03x0wAtJjg;SnFfa1Cx z(HbyM7<@-1b0j#;L43S*m=x__I|S|)C5DFP(L+(x+|m1x!i5J=rYH&D&!h4CpWsgl z{bMYs^R}pFet4K1a_IW&C{@EvX^Oyhyn$WVo%v9U;vq6@NUx7nSX!^umxU#qX4bj0 zHv}6eD-jl7`YBh{M(>KZP>oifN_Vj*BY6TFLIF!%q_`?ZV_S!Ma+`J0{;>vSLl=0) zYonq+wSHpN7Xl)VxDTukz_-^PONm2CUskJ|*KvdO`Ds=>a}zCLdmN3qrJe(qylg9{ zVv*nzhPl1M9x;8uasv-M{M~|oM(P*O`u5rR^VA@RV>@(+YPbdvs3!m#G^@@O4zp)h z!2A){({&mfB=#-M`DW!`27f?x5?j4`bNz6dmbL4+7~galfdV5~pLXf&9mW$9UE*NL zWuN7dj@hWD!Qu?Hc1dl)c~-%Ur8M{xDU37X%lo=jpLL_C-(vr;toYFW&&^yato{P)e z$v}8PmzRG2=DV3FzHEv&W<4-Awh*gPWnk`Y(VqUOk(~lH5a&2EUK~Oahipvz=|>zQUbqAd*I`NR~d6zF_kU z%>o@1JG2pG;M5zkk#lXwY%H7EaIexSQrY(#9_3$7Kbl+)YgIphb>CqhRXQVy15=~) z%I2&85QPXMN`PweER6M_9M3vOO0VgiJi#dbTiN`~x~@lqug8k+?(>}rzj_Qc^ISz< zq@^QrB7RemYv1}l(TYnRn)frxC>o~C8HC!CCy+)%Oiv1AaGi})qok>*N)o59F5J%w z1djzD-rDDPHA!ZXrr7~Y+vv;m)@%wrNRD4Y4YytDw-fZMAXhgRndWt1Mf$e${aJ9L=~v#$l8uSDL)B)a%L?Q;5WN* zW3hpA=VxPA3O3_Xp>?y!!&B2Gb9x$S7R6+s1eLyo5h2VuiOvhkK3I8!_hE!ct`(Rc z2ErB)rqe^{?0-Mlm{$%yZb z*<~Gk*dC~2!%H$i#P~RT<54tWE3-(!rvc?It@O8>U7SRmjjtApJSVB)4dJ;Sc_Uz& zxypY%cBr+AmCll%bk1veS+uDiif^A4cBCVK!1e1=#SEDCPmViSL$(XaQmT^Io0c znUdvVCRJ;yY5VmjKOCGizr{nr7UEJPfS26S%ang5xm$uxgG-O^uFBgzX~!6^M4PuP zN4-b1!fyHSzxF!FlURh$PhpXX^j4^2?n)lIq&fg2&_2#X~~`O6A;)Rudoud zesqdRNHT=XqVOE8d`9$%Blp%hsdH7! z;ua|hMyeu2vaf3f`NUbL!gtExn|Q}ei!n-XHsv9R0dQnu`eN!lWr|5DGT{#`jgUyB9POCXU zk0{z_nD0|;36!kv6MPSSg^;75yj!7He18_k#rky9QS~#GRY}-V7_Kk?>+)+bIDR#V zqr_KzKp4evA~#ix2$o#GMAZ-pm!bUOwvtm_)s|ul`~VCTYV~AqlRHo=HJ5%_Cg^&KfU(RxKwh5s;*Uq_rUJ}W%+sUz~boo^KI%^nU@Sq za%I0+GQl)S)OYQvb#Jiq_?HvEG(wNhDwq_|`V zh+D0o_9X?GWXSxBuX4QNYwJ_^^e2jnpXFK5vyCKINq`{0^#*G10+_g~ns$_snbS^a zV4K!`2jW-yFMq(gxcm`YqW{SIAYGl^sA+tA9Ef()h55xD!c1{py;AT+V5x`%RT?0w z0cE5g&rIMe7^KTQJrJD4(rkOq^Q?)p?&R0{ZdnH+85XSuto+RQQLR)k*sqkjhl<{+3$81M%D!rj$PZVK01CGoyeKmXnMj5W zY=9(TpQhctXz@ z#SmoTHa~PaQ|N-ltWRcFHQKsvVjt!JC(YqnDsUH*hwzkRF3+j|cuQ4>V21 z)2k{y;x(tOA7hv|D?d%WwUrvO$SZ@ePF5dJ%eicr0HPVfS3q=wQjT~nzJJ^AnLv^08@9P(Md9B;i7~5xw=KMo z2aTQcsZ(!Km^`$yL7I{?S0k&{oS>BC)_86DeY1|Twn6f5DLb*1>um!{Xhu2_I{zSx zFrQ80opb3$Fn7-n=ZruzW<3Q{0T8@>@z~DxrKQ4)<0RE5qr*uVgsgw8fi|aoxq77+ z_!&1>X3fkMhUI2WGm>s&Jd{A=z>JU_L%i?|vpEPx?O?qMPWj7wA!rMGPovu2#Pcf@87|)XeQeanof3cAylpcRSRa)#B#*1^sShd)87NY;5xxFmh zZ?Nj@a4`D^9$EBOD``$Um#G=sBsKArv2uz-)SqL?S*Vn`@Q((bTn0lt;DYBbkCcKQ3v5OEfqPj%+ zlvpQ%wbr9&R3_qnbVz7IfXqw9Maii%zlqu{gy1Cu$H3aGgcFFOmUdPp-d%8M2r-~tJ)XFHlQCO_3ZlI_41M($yg6g))u?@)Y<-?)HI_{EJ{( zQDN{Fxlc3AE=+n?Hz3nXn@ni@ejen2jlnYgy>F@3W6jAt(t${6M}Sl|^3LaJJ0As> z%84PT8lGBIn7KQ@N6o@kG_bu}w*tv~mbkHa%ov$|u-^jY1&Au*xK)C^`X|%mOX`gd64h@hjZ49stvi+!x+nalJ)bkpS8x^GJN zFm%6X=L6?4?_K@U(#AqFl@1@kTRIvJ6p>L$$8K3NO$Pkf%L+74Uq?wlC?T7jx2fky zuxFfi)|9AQ7}Bk({Wk^#W&eodW1qRkQaEz+bQ*98ooPvNb6X z?N6!T>*HKJIm!JwBMaG=5|w{&lcH0&LY+Y8qh_!AAqkK*l}hu&oy4du@)E$8VRphI zFi0=D%17EtYQq{Fz#8yZ)VTO+hfu*{5R@Jzvdi*Eg|g~prlY%sK|~PA3cQWyG9W{3 z>_Lwubv?dC+<}+8sa?M@^4jHSce{XNIEWQFtHa)&4G4jboUs&q(Ha@tMyNfta)DgA zb~BN>Flf9^wNLx%r=N{31jxt@vYt@S-iqC82dO-mA@K1nJAs)eNz7_ zs(H*!mJgekt>VCkTSOb2Gbs-T77|5GEw<8&&X#^0Ah)wtaYcQ6DMDmbu- zZAf4_btmr*Oar2K{&-499#^18N_>T^LHbnYPZxm;Bw&dk{L-}g;EV#Dsgv2|4_ zAAByV3#7vg(bFZnn0)R`q7Z;jk zhVkF9_4nV)s2mGAreOUkMztH^>jwLbc6xzYpJ|4wh>Bn;hF+Ub-AP&Usl2#LuE^fG z;$pBL`5;f|mE?2-0|s5<{r&PLCpHVM3pM?-tePd=qiq~@+H2{4`14%)il6jg{KJ3) zcywLq2lvTWZD~prZ#407Hux41vk*O|4{7_~?kxei(+Qx@_d?^cgYNC4Kg?`~JKN5u zdHv1$T|p2*mPOv@jFERf(j3CCr|IacB<$>=xO*)KcoIM;1m>`H=Ve{;9>CLc!^WtR z5JLXN?e@RC&)}?pga=EHF(%iyZA|!%J<84y_c9lUkeR4PvEDE(;r*hKF?a;3^Vg1dc=03Cfb5G`e`vaUM~Rr9ke3 z1(&Bi73iT8{U#q?uvqrv(udRxsdCJkjzO(CK_rHd(c0vb&|NQ-P?j3_#L0+Rwz<34 zoD~eXWfRBHhx1jTNf<5F3d_!!@L8{xWP5v+kH<1DMg8nb4m)^?*ZC;m5)zURb%??} zLC*WWHd8%Dw|qzKcJCizdIc!(!u!JN-GFfO+?Y!1(-FiIS7{<&VAVR9sN&JM509EN z+HgC20VKFQ&Q~B+u7gFyFBi4>?t6_D7am7*&pj)QahHopz$o@=BIB`@%^6u4bybm` zRNItqP#vy&n`7OY4`JO&du{81w6X}AP_iF{gmM9b>IL@UAU*Zb+1{{}=SQsU)A8v zmUUmjxf(+V%cg--qC>8?@#t=q6=xcO+LFS8<*?@Y-cYy($^)qVCYU3Slkyo)>YeQx zCf1;crGKAG1(`H4kFJucl)-Q&VTHif#pOEjU%l z0DWfr!M0;m81JQjHvI`d)RAOLd$lF$wx^EDV*n-v*u@GS=>fBdx`a(!<^P}p(?v`0 z`I9nbc%*9$=tiXtmw)6-(BP`qXCte}w<*e;=mJz*PCH;+y)zxsAw{K@MWzvs(hfUq zg0bCKk*sTXsY(dlNf5I~5Kj`MPV&oln5*7WByh zjxxh!{^A3oNrj&iAtC<>7^HZo3@u1OS9qGHsx`vG)^No2;`q_1KPMjV ztw$D3fjJ{4hRN@5t>Xo`0r$qb&#pvxhQ4^?HYisvXVo*gRk>W^xGSY2kpFS(gV|4L zoiDkL%j)m)VtcgR3{6==1J)hj5uZF@#!j&bTvnUtm}Vb1Ff?>Y;A$4A(tXyZ(S&-! zB~q$gbdiA!frqI0T#S1og+}-Q!};j{nkr%$HieEs)2}PaFt0Op9wLsnISVO|eY$sM z9TC;Vpa1cYHfS)0T(rH7TU%2BC6J{LevHr z^az5qVDQDwH5lO?ZLQ|%o?#-F#UsYuL-qlWu^Ru{q?$!C&=pMYV<@+2JNG_1_XC8C zm;-CUw%bX0b6BjY!uLg=U0_j`Snk8~8DmSm5;$vyj1I@Dc#^>M19H{1 zat9KLVi<{g%aIXS{J`K;?hU=5TikvKT$^{0bW}ZLYpE`=V4c{a0FTrbn|X|;K8*EO%0h<_B0bdo zIp7y?5Lu)4@SB6*?fH07HL5;xr0UCii}1q(od6+Tl)lu#4|p`$s@Vk0#4vL_wm6Gn&7)r z_NqURC!ydlFY=Cs1zwTLgH{`<=uPd>;Zs>EinMV%hoQ^FiTh>R{0d-OB0O*6@{{Z9 zbmr^dV7dkL+9CK_Tf#R`2UP)0zm*uxQa6dG3sp$lD?!;>9}X_ndET%Xw5fS@^xGgh>!%83jwBp-q;ar z%b|UI;H!(1R?;fI1bi2c%>_9)tiGj1?(s81onn42qEp`tvYQA#hdFbxF5Qm05tKbk zE$sj|XZzmFw_(1pEL=e(MDAGQDJy=@w}p0zE&0)pN&Ip9Rn1~*3#Ll`={op|3K){2u<1CfuCQ|{&D_1Lci%Yy`Ag<3~- zfQ$x0akZ+nHn0`aug_T3KpjZH_h*Z?(LiHQs<4{Sy6aZn+5iM&^;fU|q0#eMpAWTs zjiumRM8c|PVDecBw`_hDLEZ)kf8o`$>hN(|&VhRUSLt0;ud zi^iHDxPK=pE96Jv>@U@7zS)kxD z7DElY4oV5^9^%^C*0J{4=}%yefV(^Vr-*q)GCXaK%S%-gpn4E0U%AYwLdrLKELWR*Cmn0mM~&6eqVU!ZXG* z68q~MP!nCElyVik4^Vc8ONqjv45b5?6-fLm&-#FZmF&l9T0%z-_gqMEFTf?V`DE;q zrxK_5hZh(z?!gX>k_Eh+b~$D1@uEvhSX-6WM$aIIZfAlbXMTiPKA`l3+O{X^a+3K%6=`ePrhYVT-^WSg_vgX|-YNN{?sme0wHKHn;(feNLap z?C?arYrwY(ooll|Em_qir?AU#{1xaqTY9LRys?h3lQ%n^yPd_WhaX4dZN8d$n(NZU z7ba3w3P_1Ok(J9a2^vW|!mfBBXU&Jv@KggW|A;R9-pFDNWs^~akKSl*DXR^`N;^L) z@Crse?AQZ;k6%x=8vFYfyLILRK#|&ImhNX;{b86bC5fsN4VNABCX(79;L`CLuDT%W zzF`0bdM|4wkdu&HdMfCrf6M|3?r7*Sc7cZmh^Xxl|1k^)6cIb;RvAB+M5}a1&SF^R z!l!Ps#8y7>i0vTva(x$S=Oa%XDfNul-`P+&F!!2v0l&VDa^(fb>{I+JGigQ68%B5@ z+c<|M6bS?|Qs0jhQ+{$I+t4jDTze?b;oZ`ovqfn77a{o+iax$E<7eW9u>))0dQVNJ@ioR7_Wk zP;hefpeUH@bwjC&-j8hSfay_F=`M+Xkc#_KRz~WeuFDs;w$arS6)IOx)U`l~W{3(J zV`&SS_q>zP9na^DPi|m_(7GL`gtnD1)x{K$Xqj#XO+91_(CPSu2z@hVi}TVqU^jA)}!EZx?yyU4>Q6<-L?Do8@h zs!`xp+}{LpGo_c{$M^+MLlHmu*+<@`&hZ5y_s$+$Tyn}+Ol>v$87_?=3}8OTrI7R$ zOZ&}$)(S~&%tkcRyeATe_#XL_-JfGk8@HO1R zGoca~_5?%##v2>?q(34`ugFO-d%zOV-kPIi)6BX^t1wo|d+Xi`RhR2BrlG0*{N|~d zFmL71@ATii|IsF;N6?*4tkeTFRZbkf$l)kU=+`jA?cVR*Tk&F`9QQ+A-jbini9j1V z9gumxy3p{iT`KxZ*os2vTNAeR(W$)c7v*gSP&>J&#i+(0v&TC=*Oj+etLMQL(v2=xKPWHI)OqdZ8(eZChT8Hce)JdaC zg#NLG2lEQ8Ovl*ednMWzjMOvg052U-Yd$a(E;cDEF|Tc5Is#J7#U!M%G9m~VF0(ah zt5!*mD94}R=a#L**4}gCQb;5J8y3ppGQK9EtF*Z#*0&8w1P%kbJAvzNa?ej6;8aX6 zQj*h^3CAF(r1XTVHP!Nz`Yurq=W(|PqU4LCU(yZLF)#BlZ^1JS^g_xt_8)-UYdG_) z(FKJNYbl(77BTYJQua03Ii%C;&S9;hXElc^_4C8yD5(MXZeWFASbE4k3g-Fqu$R`U z{a<%f^yTr{2ryXj1(3zXFR}n4A`Oc1L|~zQ{iGsl2)oQYlh&&zZbkP|lxj zqRq@_^bl?M$3rBH05g^V$o|r|y}?m|FUTiX2eRk-uL@Gk#Y_YMRWEpR3T}bSHx{IW zr@4{cApx$Qu(rNJtd+<1T^2--q)L_5xK}siTLcuXS*Z$yb3q|7RLqDRxu_#y%p+** z8F#*L>2FQ%ojU8lE8SvzIJkzcY?`ew-7cw#ZWHUJ@&&(06^LYd_lRsImE+~tK_=I{ z5TBFZDsmFltAf%A1dNqm5@=tA7O$Da$BxM4Z-R7rx^q!L;G?7E^2=!@NS4>jj6iLD zFn)3Z%yIOZzHI0?;H(ryOo_gsIRedue91X*W)N1quTyoH?b_a(vQ$ml?^C;(gy@e$@Kz)%&43 zU)UEEA0(f24EYs%Z<%JkvOfvk1Of^#&4;-=)n?ywIEuCa%43uR1`?<%A*&oH5n?i0w(TP+qRS z*oj501BC9TGmpgT68*?!d}vZ8--*Ru?ZM6Z1Gf=iH+cQsxxx^TY3@?QLBPmWX0Ks~ zMby4xkp~@uXB-P&Q$Ts(tLzNN@>unmtTsR5pid}M=|qA-%6XR|UV7nD;%s*dMDH*7 zLL|&gQgrY#1it^;3O~lLi}(@=Pum?YyW;mITNKa#+s%rh$HMFTz|ndR+5YQ9L!Rvu`S& z9|-Qfa2MrDbai42m)cCO0{V1tSms9RP)b4ot$DP;n_VcbXh49UM~Hu2X@y;YE5 z6OovC0`jV~R>w?VoKFB*6OJPEWst|G94~Mfur>;KLf`~Pohi{%+4Z&d_i{x!=oW{& zW%Df@e^{qKjZ*`=S>+9fb1~`u4(C4)N}ZxYV4_f^8%IjpY81U!;0ooL=RJ?IOf@$};5+Q}Xc8ros8hx; z24hE+#?`NKzhamqaVzSkL?tQZaG9eB5A!XlX*ElPELtMfV*nX|XvmwlKQ}D*II1Ao z0D=XDIrJ!+^=uMSK>3Hu`g#}!4%ejfma^<(&-+XId<-YX5@@C_i$aInMf0E_K4YZh zPebiB@gcjj4`-hb&|2&OZ$nT_kztB5z-dv_tVbbvrV~JF1`z zHKa%y3E2ul6ijCWFLLJgwH1nN)GS;Ri>I1F5kyMrhihCm#){iA35|)u0A=Ph8SuXI zB6oPVe+s7N2%>=E2+DOwxGBycp&ZlXe%al=Vh~+zTTKL%-py1H(Ay}Zs%bu+|HPmP z7`3@ry;F_2Q+?6CfzuGSU4Rl(o}(uIZ}e7V`kn&YMm$CSs(fZ5}@$E&DIqTKI#WMu*XuVUYiAuKZej#vy~P_71|XB2gj!4~OqGAv1|>hAP7ZzRJNMWLZXAmL#y=uh>u9-M zMh+bH^yjRCnj8WG^1=3=UN`E2xorz-IqyL(o*7+&!(7ZLDz8OTSmK-d!K9@NCFB!aOU5R+6e+xjPRR@?RH2=xnF;2^;M*q!6}L zS79&sFlk2%#-wvz4wdbZ`GVa~I<#tc}7b9-Y526sO3fkZW`DOaX@r zqb}@FkhCSFQGZbRiGGGFM^F=B6o%%n*x>JB`<_2QM3X11vl#6x*rU#^;l!Gs50%c?b_3!S++OvvF)7Dom79r#0SKAc=DN*QQ#WjW{Pe~etlqAL z^5(x>>3Bb0c~1S;-*0bOqU)Z>1m;EoBbL{EYOP5+P6iO`nCeh70o_w&htJ+W596)f z^Y3P9@Mcn#B%X=D(E3}VWS z00S}{FR4N;XvqgGJh)bH9kw!Y`#F7O^P_ZY{vWHBUHgI()K8XOHtBicpIb@GAFH{K z>aV_vP^|zKLtcxPY6RQ8Hf`R7JlCI~ff|OX7ytZ)0`~Jvxbd_0LT~~LLomS+cQ27e z0Xe1k5d^+{Vwijqk;nr-PNv+Iy{^KHdDcJW)HZpP z#{(`9c5k85zxZdrn(5am6~7t2he2El4w}=)@=&9>jALb9fy_@+n*3&oGUli=Fz~AU zlpr*9JIM(9T_0=c7m)(zdCRn%c$tT6jEHR1XYIaAPV+oTB)He7ZLqR&2_Z?f{}lh3eHqFsW!Fa3#-X_6 z)#d-xtLHwiQ`B(c({7g@{ARsIQk{0SN2i>DXcC&Zrayx8wNRV5*)oZPHTo&G+Pj7L z2Dv1~sTdO%v3e`KhSp}@usH;!adsg%TO(@5fcKK36Y?0@2ibLSoBGG=pC0gb&=ce` z(LMhrN-(UAsNPN{vjVhakSSPP(=tFs@s3*75K#FviwtH~jNzVMzKFwdUoI^xJ}4=% z50_=Ygy`=heox}!uRt}xc??Hue$qfiojV}IHY*EniRLLl#*2;}w3n%4d^Nf#Y_rO1 zM?;2s?DVPYQlg2|l{kXQSHZCXL6bl4fM==mSoMbvH0l=USfHjbZZ>dJPbl6)3cxt_ zlWz*F(VNRNH*gGSc=Tp-Sl^vDOthZo>_#XC27c@q9nzK_DEuO6)BgG5urKL0nq?1Y zxb9?eV8mFR3y2sNMXD z@PpNI!%2s(m>(g-K2Pt^AaCU2jBjI@Zh^L}_)vvYRHUJa$jFq!^setz^W}4Z0N#SI zQ%pgL(b~%VBgCOVMd>-T3T6H4wRyhraWf(H569>^)?Z+lxlM zxG&4*rvyVt?BS(mo9`3~Zlup5N;`0~mACj0P;6&yP&fXD!26HvcB`fjeRLDosC+L! zi2qcNs)EZ`4};=$ad?M9nSM{bf+e!3 zYbQ>D=sg4Zj4lKh`UQp3$@^&kP)~ zQ&F3N>*9lRvnM5}){@T*A7CJhb-MH;MP4L^7zfkzFdLIZDjB4TDvYd}tf88$dCI{W zWF(H1V{otHsy}Qiq>>a*j8! z3^i(fgG(+7WT7|c1)+~xbdy^68o+mlbor0zs%DPcu?LP;l_brJDaR*9y>ZccXo_0ez(2&&B9_h0hpMW_inEr9@yri@{ljXW z*hX61&ip#MotWA}b+>usc68%osdvG3p*--OdDNEb&jMNQa3F`viq^S+o+TlDszN-{ zfJN4k$lvSLaAt_g7wWD-A_4CZthX5-h~CU|9Qf%_>DnnXTO1;EG;yYWnVeI41l^I3 zJ&o(jy;=1lhvv(TkCqQEM2tyrqEc=9mGOLU<*u#6zSBR5(dt!*y zyHR&pBW%)j5p)M5)b}8r4ZE-|B}w&Xa1L!?=siw-3(D4zc&a<@)=3jv?IWm;TIrlt*uB8PtvY?(_)#W zjusIXLl0qP#HOLyXfpnSo-$g$CM3^LWdd{GDc-FY)!DFk$A^5IO?>0*@bdok>wzsd zZC?{lvS`Tqh~pE{z~+%z{mAgj|FTwa8uv1;m~%heb}kdV6r9lmhl7P|)51DN25}TW z;Q!F5JGjVMbEZHI>Y%`O&Yh&}EDS-ldAxXtXk*2iXo$TT+L zWr045-kmQ>l|;Pk3wP-m+b8~YHsXKlZsM(n0n&{~{vQ+!)T9M?d|a3E-|&s6az5Mj z@ldlTli)R_q+$&^3~GUWEitpL`91EMaWBnuLAp5jx@;!TH=f~&j|4P(AfvHwJoB!0 z^gJn>W=CoHzG~msfetvP@#0^!)Z;&RFVu}DDh8l8gZ3<$cVgcrnEB5UV4uO6`loL~ z%E|{(1EB)MVN~`m224s#BMs2jvP$44*DVCPa$xi;#>Y-mp$X54ZLx(SO+FA<2yG)Z zdyg{)%VRSt5!Pq!k-%zCk%}UT2z(}!>o&9;tUz>>2sLqf%&YCW5~?l#iiCmr{!!4Iz>dl_7 zBI#K~oEiG?$6C1T4(UK2>y(q5i$Qy;bSOX`h=E+St@B`QJm`EjkOz4enT7(FL?M{4 zBW$N3TRHbAQ?IS~{1tP4u7{ENPf25aWtjhsrR>kLb^<)&Qk!zM=cT1PG5Py9`$b?A zoHU{hSCtV@;gy{(=ztGe>h;G1w!J6Ik5SB;===ol=Bb-T(Re}oZ1ZUiYZuX>XXw1rVO z*#>CKM_WTF6%##iDimokT?GVkVnGs&Tuw^E|9fNrU z2)c#2F4=9HIf|CPhl2Lkq&?tc)l@euk!*7oN?+feXf_|t5*GF5u<4n`0ASJ}0Z0{v zDA=ijceHLNO6~_Z$zlssmuYm*BTO7SJ(hT~olW_QJV)a0dd5(kp~IfR0jeHwt9qUn zf<>VM_ydYUTI!_N&!CIC!}%|UK2f1IPR@#2C~whLtU=Z)UZrOS1F6CsRMnbHlLD3Q6p5Dgd5tm+) zm3xEN&AYCDZjuOT=m|0vEVZOrJb_Wm1&VB>cbD57qGvoD+CzZ_b3m}Jl>Bh&X%Hg* zn-@1wNG4}U79EUrmzZ@RnLgwTkg~mKTo0CXC7S9uOYlU}*Yf=PYV;xP$irA2S35u< ze~TL{rbv#RQ!-T6^=q{7Q`+!7V}*b z)fKR{G!dfCi3m~*7k||%Q4E~ZbuF!+Hd8DKsr@pugeB&AB-tycmZl;i>)&VA=yvE~ zlDxo1Aay``H+ao~#A&LHUDaz6ofkMDj1$$6K9ND`aI=(OYPTO;EpJL%*SyX7*Wrz7 zQd|AQQcmLVS)30lqgx>P$9Q&Mh}LidQ32)Uy+(1A!{vDakjvuXYFEGA1ImAnMvrEq z!*sx4BJ#jN>RsGGLSFmiq3u>uw5m(s?i-x2DxoyYM6b`P$gWe4B!zr=NZW)JVHUQ+ zc{-c#qb}~85|tE=z8AgDM)A(WMly@@q0(^^9M+!>hVTSyhH#qyZd$}x;ESzpSckDp z%?**8`W%qn7E^%rQjK)lgw*XsENE7av@;I^KR>73CcmjnW`2)R#;sqn45=!>Rfm1g zfChlz16LCx$x3+Oba-snOBVJYWAn!Rez|hdUABJK2K^csDEW|L8@L%f8Mu zSVmx}bAXM`JX$%s(|8d5piaJNz5`Q<891ssn-^U7@bq2a71m@icPd!FN`t`>A18^9 z1F?I;J-~xzh%xPL1w5kW&uI~1zN7ojqmzqAL_Z6y1?E>{>RAY!+N~~37k7jHN!k1Y zRyZS}fzr2%##1i#EDG^*h0ETw=m@L*4-y?xt!;z!47Ybt(b|d~7#?s68pIgrqxa4X zytnc6au$App^#9GYNkUTHdEA@`w%N@wiXv9a&cVT!7Nem|G=*4y4+Sfu|RQ>>scIhqnR`J zr0yuw;kqr%y}hv?p>Md@Gm^)l`@IU!M4$M40buM>HLn=c?#cf44K4yhnyRJICoq&y zfz5+jrTl`P>%g{GcR%ja5~gV2Br{UBq52~4WT9JUNOcWJh>qoC&} znrb1vF|n*WQg}M=UUi?!?Wm-b>M_up1UK~l>VFq6FoClZ9061!-|Q`2w?e|O}%{n zzubQnv2!8d`_Pk&x5d+P{5&Ow-qePmOcrfL@G3)ZeP4xZ6feFGeDB7TD%kekkdpXs%weSRgWEA00X}tcf7`R8)|M z*lH894B}IG2U&G&sm#64uI$6jdd!wv2O#}jzuduHH_|PW(Z}hjdxr)<_72Cieni{>vo7^XPjEl}Ar>M`tDYWmgWi(hht>MF zPQ{Ww4^SRbJ!~UGI(1TjI;}5Zf{8mmd;!V#G$m5#CXW+#hisam=6XvBa-#Jt=9V8y zaC<&=-1K1NB%#_fvt@^(P$XsGf`jK9c16|iiXn>=`fkR`WVrpU?-%bM+`B(gURoRU z8S;dPbJ2kzm6WZ0tP=FM<*D$MXOR8P{57^SKbH!{?~3*k#Eei2R@0uNa{>%EU*Btn zhV1n|^dJOmm%5)Y<=2FV9-GMOG?6l_da4EJx_2-I^LY1TIb~Lk6-q$8=lVMk?_YVu@EUXD(=_3mI}$A4>A+m3+#oY?9zxWH72F2)duCiH|pL!N)vj zacWRcbB|X3kxFD}I)=mJw*>L1>$_T+p5UlSxV|$|sPzk14@s+%JBxM=gzQ!87+1(? zwFf9Yc`^zs`;eh&7|%fdfUK9^l)f8}=&~jfV@rXqu9JeJ5c?2WZs2e?ui*Is@^6ue z0|k~vy_IwtV4$9f<)nMMtEzK~6F!)aB}a7DKqAIA7VE8ru^5$4d+sjZJqca}Oe=et z@3gahOmFIGpr&^6*p!~bzE zql}L9Pkssq#S?}Ha)05!YM?{f;c2D~oIJx~LvUnDDObyMSa&x!u{_ZAjNP+n*7%8t zz-p6W8s-RQG)&Y?^|@{@-X=%^&a7%Sl&Gg-Epr^Z_5Oi`xrQH9p9lLE(sM46tfR4D z?om%5Q0#oBoZ4~SVd&<$`+Hk1l(q|N)<&-aq*1|CUY9}91IHPf#SD^_!cd`FD=W;% zxkAIKD18CHTZKzg$rX^b!OC5)n1qmiW%ieKt&&j68?Za!W@#{7BJjXNGMPhw+(jYo z3EM&_!ybNee{U@|Z@m9^)ZT)}0K<}{cIZc?mX&9{R-AOy2?Jl^yv-oMwEACaW?f#) zP_cWu=Z&c76ruHsTBGFuTv>QvERh2?&<}k^EB~Gh)iv|MkoRV0T?e3o9gh&^HT)-C zvKh{^+JACQ>{%cu&bRwx0t3v|ENFC2BRTp!$cH3u`g4F%DCk*hWr^{bY_Y>k->Mty zK5$#;I3m2WM_Jh8Mq7-5w9Sf4q3=*BN>HfTQycjs)6r}yIKIzLTRjmLH%??N+a-4C z;xf^_@k@A_dp0{RSPXBMON&+^t^!8VoYK;WE+2|wgrN*x)mXA&lc|*4byQV}_dirA z%n>$So)8@JNU$6L89oes6l{^-NA4188?H_m10mL|I3m-{xOJN>n(M7~vtrYzNbrgR zpmoWHP-*9~mk<@qst}z!u%io(PQ8{11qT5C3(|=Tu}H&?!&D6mUI~kXuA%{a7ACxh zfmrC8GF8M1kf>5dxsZ}!i1+9S)=ZK(#~G+jo3rminkc7QSbAOcPR_y5_S{E!xFV!6 zZa`+bzTVF6X`{L3;j1QoGqm>!g#+4I7D9w2&d%A=W}P&-!uvR}!dDTO(o|(N^s;HC zbLr_%4plGv$VC%#yxdn~R3CDVYv!7@WB!ylI{#nJ5X z%Ctj|!ohgyoR=FSdSTw6rgZDkE6BTgG#WkhzIjNyWdT@9)zN1JNR*oc9+siDD0-{z znNn@%QykoM@Pt+N7aJ%`t3MUdtI};RH4Qa1^7eqH`@Sb7_&78@tLh(5USb z3MoI1O3b`fF|Va~_=1AI=p`6F$eMfG%0gHu%pNh-QuDNB`$>HR3oMwK!r)Ob9=9-P zFc+Fmo}tVDV6yW4xjbZ9=_xXzUCXeRjJs;aH&JpSPTabDXP$?GQlUY9U7I$YbCX@a{~XAwSR<7FNP!$u%_tHt8YC)bUSS*GE>Q_GVXPFk4PaUU@^Vp zm;V3YjqUxpM~n194RT+etcQY1h@iE^K7@Oy^d#Yczd3^tR!C|K_?d=9NU$YRFY8R) z9AXoxUs?T>x&pV+#s^NBLo83s+36^yO`Z6rEj^90kOBzeLsc#xW?)hT7!U0mXIEOqcN?{4?*bI$NQwb#^C5l(c@hUEXXP zs6YMdviXr(cUH3(vMvGz&NIVIwx&_s>7h##FiR-V7M4M)ixhK>@k?+VZOLK70+fq5 zZ@!?CvEvJefxyObT7A}e9eY+JW^#(GEn|ccDf9ILPnbBk>_}x&m;BGpBXiG`50`sxm9J{0I zz|zLdblwKq1zo&vTp&ET>mr1&w|qr6Y(mcXMN3^FDG^Uuz_6qM|33i0LH{{_=>s`R zV408qZY^io*NW#70KT$v{f0nbfAB=V)xxVzOM$MqHJg#haG_Lb9vuFm>voO!Y_ha6 zqPpuvKg>ExW(^l3mmj{lYap4|)h4`i@P*(~*oT&3HJi_w9*Tb!*QqHFb7+;s+u345 zGp=`^YH{6-FoOuyY!09wST*Iamx4{P)SeGPIU}r*mrYHi4q|ag)J!*iPV)CKOJIcS zG}$`O9*3;RSm~vM(sYRb*2^Ab<99ydynrcR!94g*Z+54cK$lwp>4S?gA$y>?6|iJ| zj;>Fth^xqr#b4KM52|Ny3yaCUUW-gN8p?3%GNx!Gj5- zJSvN*!wEjN6JC1{og=fH5q4hHOqDW|H-gH#C5$u%xpR05r$5RBG_|MloK)=JxxsnA zyTVT36H^+Vf9Y|qfBscM2H`w;#kZkt&KIqeffr>NPw6pg6`N8@r7j}8 zw2M=xR~$Y&)!89b37l2{hHeUwcPxg%?BEz!7H>52)T}3db=Nqq-gCzd!Yym9Dsk@3orEw)rg@Cr6zx&a2KA?z=m@!ItQJap@b zZ(;zCc@Cs1^x&qDJ&D3jAnbgkR;45a(hn2CcqcodUI4C{cCSCitj;!mOBYtBFFlfe z>7r%XDpEvz4LaJ6H)>y*e5=(@zHM`9Cix5srV{ML%^JKvIHw$T2KPtRZ?2^|GwYl7 z$CkYZ>o)#kM69yyb2s9cgz23Uz3;L5pYKxdQiXrR^y2`bt`-)oCfQ4MtOzF`OZ(98 zLVp@i7m~>6zOH-_dQ(JZkr(0DPqdY151vVS_Vus6=WtQMoy)CC%QD<3Np=174mAc7 zco@6L#KF1VOscp_A+YvW8JULMLT%{0Zo=SVBodzEFFS%h`(mZR)SpnNFgeE4(8)`yTdyL;GLljZtX=!@*8kDB53GAC>xwicT0arN5;((QUyht)Cof-Esj zb@8|+s>u_>ABfW^Fj20pH9v%&@>|3qPBVJgr0e0Iw|9v8!O5DJ@iRQwfOItAhlpJc z$5#`+@!K)#xH>&{xu>~}Lp^HBAhmCM?lZj9!Ed|PYfIf&u3;gcx*WH@u&31EI(V^k z!f95goUKJ-Fv@1=0JW4AL+v{ePcfMvh%27Bl?CCn0VGUxz%1`$ri zZ^NXAlLyJg-}bQo%3wdTziA%0Yp2pXC`5@BLb3(U^=`mn^7KbQbW4GVB0yC7|s_< z#eXV_$9FB?`Fd7)rgy?ZYN%z~*5T_e+_kA5_B!e~0;50p4AoOtr`S>P;9f);J=X!pI zBbmGiRC8+PRdBpvF6@Rmls_AalG=IPpL!lPge_T4hKBf)ZOHO@HCIbS0tXV!uNh&V zeU|T525Ve>+8%B&yQqRBR2+7oR;{2Q&V_Y3w`gRLx7XDeHCw-?ZnETR_6`GpSF95( z7HEN-0x*8;)kS@>aU+hykLY87-ru+NWrhmo}BCOi*G}k8XqC|^Q11%a({{$Y> z#fHmyzyxV@5H883BA3O!>HMrB_5hUCyEK=q~=+sBz(CQjQ%Afi;5W+L@qa3QlaGG2%%ndOOx&w|ZY}8~g*kxb5eaO$RYs-^*`yroBKRV0s zwf6{e-?XM*xCMhQ{wW_p1aguPWQk+O8q<>JHAQhOFx}_${(?HkwL7II+sLTHKfhEe z#G#w)qcEb$Fft%;X{;gn)3&WO(z<;U z>1u=4@UtB95~!V1LCd>4>DdFuhk$|c;Us4_(aky29K}krkUi3oA#DG&>mx~m=j{BH zC)g0; z*@m$hn^*+^ewl8#Hi$nE9f)|!s|@yMu~ejhAPv;GF@QDwC5l zx{-C3-+w~86)|q8?x0trKZd8$(nXSazk7uf8_m>B(`l_K z$xDPM^sRECxMrXwL4U}KkVBEIt;BuMcNLlTi1h}#te!~R4Y*yqs7z%gn2s^QGS1d2 z%*dui$XJF0zKVME$w5ojl+O)W@*sUZzBftdGao`-^_Y@Cv|TJSEw=b*l6KxpFjhvr zVyL(?W*t`9m;4Ou0;F#l>qQDC%-TXa;)yIdokek>lTca$gY$mhX@5hTQa%cS`FH|~ z;Oni`QJzG5_^WrA-5_A}B$o`ce+WU2$X4|I?~24p5x(kd6UEX{+~#dXye^cXm8Ta; zgBIKOKM5^6kS=v29Zgu|STUhj$jF3X!$CnWSR35@MKRd5Tbm>%!Ti}DFWv`LL`~G2 zf5g0d{_nJCaIe6+4dza={pLn@{Hp-TBsFP5Zd7mI021QM9;rt+w_ ze*4ARB}nZzjC)x-k5J2RK(Z=1iM@|M1MLTKp8v`Xyk@vf+tki#17$Y{(#OKEXQv2S zcz=nRlH^-vC#+XOKqVT{XJ%cM)}S7Npd1XphKe*~qYLPQ;yC81aFeR9Jn=7^3*r~T ziyh!wJin$dM@UA74{=ZaUBgZWf6Oauywaz_==$X!GEv$rRmk>*5QF8!qu(A*s$8g* zu~hoR(;I2l$?6qGT&JUolK_69b1J{rR&YBO65KGY`U|(eT*%(VF;|bRWVCtde@j~k zCF-&H`rmy04&3sou< zRVfqEKQfxcqg!$uoI*g3%HG(J{ zySH=}J8pcT5dX(v{BMuI@4&L@zZ30RaJZZ!(eGgHigv4cN3}aLhMzQ^mSt?R6q@lj zBInJ8#umox|NQoJp#w^rp!i-q+ zuP8|3SGW-kEev(_yzeNQr?5s{HH0-Q(2rLgmJzZBry5Lt#eR$705d(~T%^r2Z*q*y z(E%(*W$m;&_a+T+8}%kF8_g(pS7WpO0LC!%M#1qa(fLX^EuJoY1!&ouC&)KapXA3>Y*q@8VWt)!g%ir46$r5!3t!Zu9eFu1hI zAHn-b*M^-b4P}ybBR}-SQz?Rr>h`+%D{P)&BZuKDaQl{CcB8xc$az|JAIJV|5Rrhs zg&OAas{1o^i8+$ewg{5$Y(vaU9Qr_yFP=p6>uXgyu_N*M?5Sw~UD_I&GzuA~h+X@B zf4y?|2sqr$fWafG;iH?pE1&3F^Ek|1ng1UJ!9E-_a$OrSzvhnGr!o7VmFRizGMxAA zu!*v+{F5bk`CqqhG#L>iG!I@0&5WndkxH-A;AS#>3~-5i%?vZYJwno(TaV4h>F1f`3IU0U$pgaM*hLpzJ5C;jD=w2^5@^O{5kY^8g%EkD4 zlDBG#L&_1tMEwT{a;vI7{{m;C_oL4ln})m3Sc!YT3GJl~#Fd$Hp2>_Rc4?IpMq1pb zXGQNuXq)C96dLUTFv?z0Gt#SZ8N6gJ0C7`c$J#Mfn=PooyW#;gW6`;h?|Afl)q=^!n~V_aLr6xrM%a}T36y9pA>N0x2?>}UrO zE8mGVi1tE+M>o2fpLL~Dz^=XkABFf|C*})1ggb?lLa8oS^zs0=0d`&8!F=H0R!-z! z_@*q61Mw-h?4*7xZ4{-dHO@3OHEMJANR#1bi?mwI^y?u$c5)T%s^@zjw;6E%%@Xm? zu8$7x63eSHWeCptFyIVx5~`R+Qrd`AuIrjQA<*TIoThH;JVIk1do|<*T~oJFAa1~xk|pwoQ`L6gwE21LZ_4%gjKbh zU@WvsZ=W=yaikO_iDS{-*I9&9<oT%U8jprBbo)2t0|T{+TShuAQG57rg&16p-~*QKxf zEZMyFf+mdBJHmSL;Pdv0$>!AMe0kU}oMrF;4pFts+?*v&`z=nH zj>1cy!7t~G&5Nx$^=0b10EJuNFzof=?h;2pw8p1g+5^f)7r2j-wOHb5ED(qk!kRD) z>c0;NbI*h4jl!h&50k8;qHVl`fF0M?2ZPSc>z0*p5PK0RN~UxQrgo=9?OuRYIUkMb zcs*(LzHBIjFY%@@$h(-N*UxSkfLBk!XljwxW#tfh<6=FY0Xl3X3|fMz5(!@DlXJhk z1kLcf&-TN4s+l0gCfBc0*g0w9>To{_v9W+x{wV~y-A%{MlSUCY`^WHx%%K8svNmZ z+szW9h9n>4q8#OUwMPc!&+k1{9dRGfDVOKJo1w%r99tsGH2)4WeZ?L6%T^g5!X&Sa z_9m6JHX*M1@`2Dwl1JJ*ep%fG{85B=<l?JR3SwplXLx^S)oKHuEy{+hAS2VHxSCe^800`OBg=NpL29(*&}`JIyELdhxcP!)fwRB1ZkJEoZ;OSUJXm%CU6LbUbv?L_eU;~|Fn>q!@&o5<=M2!d$&0Usq8 zwi^n&TMxb6XSksE?$T8dQVoN_2sIWWb7fmYH;6R8<$Rt6IVHO;jr-x=kM@jok{wk6 zbJpKDG8qn!Ldqp}h1ZH{Al_2Y9LOKFqDJ&p`MJ#*zsa_Cr=pA(MZ(^i>(->WHKzpX zLKH@5r)Sg>D#u~(p7os743q#`A74Fs-FT$9VM$f|ACYxNmc)iB@zxFd+jOnW)SbQB zX;iAXGz(nKBoegnrfX(2XM(MXz`-oLTFwNd$sEVJDI{+jC4(?)TO8#myQQH;+wMjX z#hmGsk^lK;;?4BhpRpOi&nnKKYk~mxZn!B)+Cg2}P8DrDNxxV^p8L8aX{#pyF}AhW z|GA)i1pFj5T<@H`O-HZ;GseWOz7*=tJ{eDl2BNUJv>zgqGXgt*c*RMq8o@P_CMF?Z z1~=7-|F8jl1}Ec^#38y0_d^c+9bQsrO1WNd`lbVJspY;7=`!8}lCdhs z7EjF4XcEn3cu_Z7Sy;#Yv;c(eviquWwuENl0@dy;zM`Es#Ae1A+f6MG@Eh@ z94;nrkq6^~<(ytY)G7Y%EzVJfaU7eFdafbbV>jE{GF%9I_CGNQJ{8+Lm&lk%4NIa~ zHSXRLZ&D&b>A3#dg%N99D>PVX0%G<4o+moQv*qTez1A$B8U}t9QQ=17774d{uz8^7 zRc;K-IHX3x(=fCwoJa82;pl~=x#lSq)wHrAyy24p z`;eJ4tj4_tV6qY_5)x|6!2F9xP@M}Jh0@=r@quHF$@OOe-;Se*_G|Uoy7E7ZJoa02 z3~9ikzy02;%hmGD<6ecwYm@p9Zabveq?bGg$_)HL&HQuPiue55(n9ncn~G{BGahRZLDC4uAa< z$Z*@i`k;OH{y_rnUPNJJcRXXTiInK;c_cn_ufoBu4e#B&E^985=BY*jiQwr?-Bh~& z(r&h+z7^@*z(2UNZ|g)h26Kvus$6jYeuKrJDD0~JKxwLi8XRO11%cJ%K&m$nodJ@M zAO##DDoq8BV#3KRC3m2evcLEo*_ZHl!_u!wOOe@OxCLZhj-!982J)Nec7|6p>WQ-V zyW~C(EJ_IY$>qI`Ho(h2(xG_DuJs;Q<8clHR$nPrWrr8PW0D1fnu zhZ4%7=~DiKi+mtj(m?=z#%*Y>fwf5izL`)yk07=$1H@E2fV-&oJ_6s*hSln6xp`e+ zDq2B&Rad`ecq7yr0D^=rXO+I>&x~g?aCXxYCI$rV$#i{V9to4zTE4t7Ksq{s^3%MD zqpvH*&TeCpCmHV9_s;pC(ao|9bMm; zbA}68?DW;tlX)dp-oS93M>WZpp3n0sjr=;WQ zRg4gYNZmV6$|MJv+*%SmglQB;)hee@Czy1ITMga^MaUC#6?U1`o7gAZZyUPyFB+RM z7J|?#Cp7Sz+LuSSlkZzTn6zhQ-_5!%q^X`vK)2y@v=g%*DP(@W=BA*FJA!R+wm;oE zdqcwxE_$FYLCo)1+S29O2gselSFP_brMsf}u_?CGgaYyDVX35c)ll1o7PQTHteR|fm|Bs{5R9~)O z6>c5H-KO_WbH%T$OlYxVKRFfNNIx4jUi-c7FLvDVHo?LLu%1cUBRkWNPj#oQXVcOp z$nos6IlSw1WySSz&(^}8g4Bf68c8pk<+*^4?Y1_OI(GdKHqAeyCQ$R~PxY-1ptbhw)y zMSf*$Yf6t(Aky&aV*c|JF3%;Y%@ya;<4FP7GMTZLI2+&O2gvx-*0mz~q%C0~_P(Zi z4%e^H_9F@qQ_;NHfZ%sdv5IN55a!^W-4^c_6@!iDG3iUp{;IQ~D)VB?R+o6e66U+W zP=zV7Kdz7}Up<~$5#P2&b(*{W{eGSMUCrzQ^A#%enw%zpmI~wdVy-F+WB^mfC&5XM z{lx2x^*&UyjXG#g%hW#bFOD}pwOV8(Qg2(2-ePciPm~pAh$#8tHHB9LCI0!zYo0)9 z)Uh0rMe$|1YoF_*LUSg?wg@ZRgOdUH=zy}Ua+aea?g~%!8B-iVMcD)EQ=fHN*YRLY zm^V_%&TxOchbq};prpcWQ$tBOj(>!QFhTVuc8Qs{j3}V!THDF#=O7uggnk{m-lVgs z$r-jg`$Fn9s#oLQqx- zc6~yxiNbQhJw%j;?iXGmf4pC{#DWJ#t@C!&R|%pVvR-jxN9ijv&Q2(uB@JAhPYU9O z_gg>AEkOlzq#@{x?`!w0xRXphwww5M;o}YC)=MimAkAP&Hi6Y!ncpYgwc?w~QPo%K z7GbJ`6|Y2!OvMu{iY@Hw@K)wSWVGg9#3}Uzxs)kdf15qEV{HK+mb#|FW0IrkGs)&i zK9ga5BOvtM{*KlBSuG$Hj8Xe8G-xGSLBt7en+=B+WL@r(*&Q6@EG&T3JFXqpBp@bR z^*TrLHOz;Ji^+O@YMS^HT)|8nvc+(OSm{fKC2M3^T+XaJFd0xLAHDX~&epk@Ri}Nm z<|1@mNjQ*UXb^D)7x{QWVeyDI9D+3A-Gmn!SduvJ-x8poYU48brWD{(BzJbPY4u$u zHlIP8FcAc+_~c+-ZC`=T*Qo$^sK%82k&et_enNGxaeY!lKL^i89Y?*ar))Fy2FME! z&izs&uc9Z7vt}6F1+^IvVSrjWU4Hyv7U3lb$(8S$b2Hf5fmmU;h=sbO>tLv?ZUJ_N zMCa2$EUhUaVKI?vCTojWtcifmNsz7RC zJ7eryu>ab)Ly!}=iYnvNVcli7BOS4Ps?>0%V1(luhB{&1W8V|A*;bqpe z^1DBX(;i4~<>GBBgQ%5!p`!(Gr~NPv(b7`}Z~E!g`oS-ktLes0^HfIVoy4Me9#-L) zZy~k=utURp0B1}%dA6FIunc_vIs-PUlP!g43SYof{=#J1fb)nX&}omZYAq?6>qe`A z!i5Pt&tY35Vu&Fxtz4rRcWn75ldAvsA{1g*dxX-lWT_d1cwi)raNOlJ)LEEa zRwHfnG7W8ZCQiWLr@AUFNd&3Y{(~?d4&YlYZZ}NBO+&@Gs4Cd{-l@@yR=m1Tf;|?X ze}jQz$>KhF5zh*jT+Y#|G``#dxy-3{NV=(r@O>QjMtU9B4lG@qM)(CY!Yw4o%u2)Y z)Kiit-Rs#76E3zEHYH4|)z^ol=1sfG;pu$U~Z_n&r8l z`H%&(%P`{hv$hAZm0<3gZ2w6*K_8p&a(E_)r!`J<9_A=Xq|~vfapb62v$f2*fIAB% z*dOrX(7*N(B*q8y|J|xaWpxEq8b5;FR|iH?7B%$zzG%W&5SuS=%k$VG$^EZIPdmIv zFBsBF6Su~NK=sO<_+}^{VwDAc_0iju^&fo-qcLhj!$9_*Z(h~%cCB4X$rc<$M%Iv< zrGeTK=jMd$5}Fys`Xw{{o8o{X?o*b^{Ao+9N(eXT=+pM|B=G0ubt$$RsG%WMK~i64 zrFgKxi;na>h&RHvGGBHyD>mP=2B3+_Di#GxxtXz8VueHR`4!#GDcX;w-l?diujn4; zLE%{XglIgXwPI2clAK2u_Py_>y7319&|mukpfrLrSK{$KE0y%npx|)^qd!nVDqZHZ z3E~p0ud_+0xyvFDN<55)DniP?R(_QZr zc|THiSzQ-6wLg&7`}j>zeU{AUw}RH}Sx20CQS6M+0I-ZTcDl!}-gK5-#N9svISw*< zH?5u;9mF>;*??w`SaQ)#Z>dP;;Qt{)h-nH(7nST32O$43)@3VCO2dE@+i_$?^`{`O z*&PfEKS;+Xtvh+O+-31S2fQjh)VYX5fT+gs_onYnT8!!0TU}B)97v|@23%|RQd0e8 z`qc569i)-wrz~43COIVMDz*@8?tUwp;_(5p=abDJj0d#3g9*I3MzLFun9VNn1~ z8OwFuHStx;tLm>1J(LGHvEJWAe4|>%Y;cZ%Q#o3u{dtgKQQ~^Qy4rrwYzI&e`&$gd z3G9{1oo>rhdq{M*<}uuyqn=AC6u$s`27S$dsE&9YYt!wO_`W-zLrU3IamBG0$4W=t zQX8#@+LiWJ1wyX&X|BjixgN?6i1O%7+Q>);q}P*nvhA%rWjp4eW|i}ZgHQs?!1jSg zD1mHTO-eN2$v`iLW0TjJ?G7aHj+wEm(uVMn@0i<3>rHv$@iXuPh}#P zny4W8U{OCV1(gPrh%aMqC)9}qHsZ=B&I^hp_>9Z8t5#|kQ(iWF zJ4YYDOZ4TuVWu+}aHfK9>G+nk;3uwbF5gaiE7a&s2T zhqsF?G?3&75{c5-c6l{k^N?7#!E3NJvO~n{xNj&ua$Q%i)J4DK^CC^pwbzP5m<)f< z=W1^@(uxt?V+?^M1Z&RTJ9MY!Q)}QbYs*e-Tma=BZ<0nYp7N1|Bj=+C5DKf@~yVRN@7}AWg`X5zs(4 z8qn;5hWiT$)e25^0@@(@=to7KA|SlOfw@52*ZQplI$A>x@F@5E=$YxPOUUn!*}g6T zfD-E?C~N`#e7*5oie*UFaMGe8whdB2D|2=+2uqG(^VZ$b&NVT5gWNk3PqkO}@HfIs z%v;kylb3ozUOD&*B~9l!*9mjY57$^0JBhB zqCPd0##1h!(U%d~wu}p0u+4*QuIFe$)5KUlD!Zy@Dn5(SsmO}iGHqbMA}Y_l&)7n* zg_PIRILx?2Vy;Et71}eqMdiL+gi2rmS@EHRD}I>$m7t33Rcqs@)%4-@mRH!jrVFvTT;OpsWDfijQHzI}&~l*_;CR;SoL>q&1T%5#hs@Rjnz z^Op*wv1Y-#gDFG3qll|CF5GukE|# zU&s?)MrEy`>AcKPiz^_eY(y9cm-v){o1@fw+_!h*Yt(?g(CXp&Ab@TEBjs+_vKyTyh)X&Ak zJ(tyeS%=%FW1L6k_eRH?)+>D7C(=oWR!#M><>m_|35ji(_jvHbzR7l@ zvims*7}S2QCU8v(&oI{D*ka-fyhuzl-uEC> z4xvW2GZc@1@OM-ET2zLco0(}7evzg7z)#@!4yI&ICRYbLn zdZhXfA6tKg5k3BPx8jQ6gZ}nQ4~)QS*@tjNEShJ}QMHJlVgf}YMlt!oFCcgMKbJ_% z*aDcKNC@4=+$=F3B&opyp6cz?m6b_{|2FER7&-VKhOm6Y_vc%Jl;rDLN9UI{OO91qdBub?PT<*J3 z4OwZ8H|?4Z{aX^c=|Z0H6OhO9;m5%EZjb%vu;syd>_ZKHifk97@Ch4hEw2lGN074=-i1TVtUWjBphnJm7v?Wh5x1&2k!fS8+ zEGcv};_tyRDq;&D)-Xi?oWOg5(N7{TzJ{3TH=_PZm#d$QD*L~^Luc$<;k7s{R&2jQ zCloqlaxj59z74M{>U|=)`>vZa;_-P*AWaNm%5{>37@Yg%u-&X>Equ4M{#lKFG^}Ja zQNpm|QK}>6Ae}JtuR}3UWdVCVieUlkwBl>I*nBrJbJGj#xFAaGeZ6p`lk1vmWT3cC z5N{qC??`^ktRUj1JV4?5jC-gvZQGCE5hc#Dc zHUTHaN+d)pP4Sy-Z^vcZmTYm%4{O6V6JI*aaRyw0L~XR1;<9N-MgtR?7BqFdyM8JI z0NJRN&iqu@-D-;3r2r7XBcw~%l`@zf?2+D;Mcr=nYi#AUrows-)i=VJ-v!%S`b;xx z3B7~zAbvnbKL-l4b}+gLZ=Y-G`4_PLd`JMuSx~Pac^xs0cUAWEVv;~jZTZmAhPKhA zx|s^3R{u3*ca&aMZjr_Ym}2`gHSCb%DQj6oifT|GMZauTUeyqrei_#Z>wRz8=I^|S z&*p93T3zId$Ypcq^8T;(PH7Uji8*|~yDJke!Q;S!!i63ozAe?RYcTw`>w=i)Y7iXy zBuWAnrg$HaLXA{ldI`NOUC>Myc~2Ai)3Zd}lBfzqEdr;abup!E^-!>;EkH$;thx7d z0p;@9nZQ$NL(p_zO?`e=1)V+K3c&T!CdW1PPQiJ;JnpT6u6<7ETlEKcx7yJ9SMuy(-tZ)~|b70%F2)s(T z89;6D%M8_cU7BAIyuE4?cSg6iVdnH+DjJ2hDfn5db4?>YwMDpS$UrtS*Lj!%{d=V4Wxz7IpYi z&6*OX!rqP8KW{e?Shb{#Q&Zx$^z!wY)+l2TL}w#m_R(K|uaBl6Hm1OX8wVPU-PKeB zKP3O()iwBu`36K(^X46qkZ0}OKx2`=Y4Y?Q^{IU?ZqEt!8{k8O5DA1;!)ufPOlxI+ zkjaplB@zpk88=Qce>MYuDiL9y3eni-NJSjIW|}y(rVNvoFIP!S>?xOp;QP^>{09e- zK_Xk;@tMc`$O`YM>Pz(#ZNvg%Ev&&s#(CbLy;V168Q@r6!q8V zcEu-j?l*i_L@jxlF>z{?8~yy2_wX>(EC8pg#A8d%uZ4_v6M(e86Q_M&9RgnMyme5K zWMJ3lJknBsbnRU({5EWavpgT+g%{H}cA=~9aYHuCIG7NCAgSY}j1qSbmGl5$(<_~K1S}<7) zHo)Z|1KZf~RFFtaN#k%GBw_jZvW?lb1l+#VJ|HB6Yoz#Z=tx9k(Sgp)C?|P+0kY&f z*0FggQwg;Iz>@G*KhiD7nfRLd>VVK@r^(dunu0#&NtJrR*_=w2**j1#b>7uMb&@AV zIpl#fP2BZ7Khgdcx?GPuIjCFCnW`x(a8}2#F}TJzX!$F(z>ntD_y?!O<48E+nJa`- zsimD>?q7s2fDuT`d$7>kUhd(Np{8o4&9=Lg+t}P%|D*1Z$&_eQ^c$^w_*#zWNwl6B zEYEWZe|+Rye+gnEAa~#SS3xJzB>a*KcKlRnUXts}kIF0xg>%RGotK;Y7y%!+<}h3o ziCXV6uEk|RIylQ%3Ay5qb*%>!FBVFJ+7H6-eA-%@(QQOTjV&iiI#j*syvdm>g%e1K1WHd)c+Vh z;OWvA>QgyaLxU3LEDHm`24MPk3Oa?O#eDPc?0@!A6JG)|G&&4Dq0HLJH*-z*nvAv7V&Mb4f1C;3AK=gt!=qo@J+ar zD@uFb)A~0d{&4EZ@9Q*P*_(A74!8I#&epz+Wp<@UI^SM{$9uzNnL>%&t6c4t#bR0- z53R@ltE~_%B2}*`THt~<0i;$FXn^v{NXC5=&japk>YN7giml^O9FKIqc0{?-LVL1t z)G)D<_Xyg%VIJb)qT_8~OMt$Gsq(vwD-KYmd6)jZ;_dw_=q^xQ;uc)7yj9F4h5eT- z%UmaJ&j2!vdi4zy>Fa2LaN8(UBQvz3xqDr1K?HF3n+t7pda<5)CrQi?2r-mkU>{A3 zgDHuEcCnV3A6i)29dZiBmf@mduVHAWV>1;l(zfwAzhvXia^8%)Y765+Q}Q;hr}{|( zA;PoQC@Qmu=NoD`vzRS~8|N3PUt?bkY<%Ok`ZEq?v@_=!bm2pA%|xYE^$e@=|EvY)VIv>ib* zC$Dt|2++s`#+(XKKW<)zyMHs%Z*4#4;b!~|gZS`ixMefhzZ&6c)T>0?Y_xV@B`I(I zc>!-&Lc2QkTtJ4WomN^EI-$z9mrSQvg&LIZG5S1`=!PPPZCCf{i0xp~cGgAqJ($~H zQ@Y!vPR&apeZ#;G7U;fkUOy7f-|G+m%Q^tR zs&n93o>dvgSf6C;b_%hrFQ(RIK>ivZ<+UWYd1bF9IAzv!A2}k4emO>Tm?9S+1%@#iOaSrzneQ?%LCwE8*#g?(%fZNIRy|sj#WM zXg>`aWS!vPQG%>oH#{7)Z+o`Lx~B*SL>)Zluccm)#riixe;Do`vI&#xj%p0a^C$5) zjem1l>M}jSGyl^T;K$C~fed$apMbSo_i4K4O};q%AQaLN>upjc8Sw!tot6}8ht4bh zJkLe5PJDYFzpD*Y_@0L@rztJs7Ke=@TxTNbuWhQ6gOCwwr_biNxLC>qv<-E)s_qdg zqSi1_OO)U3NI&rRo^;FAd27wFZvZ>NCh&XcjnZj4x#Wbd=@a2w2g*1RPGK}YRs&O{ zR9;PkhaiVPa3|@{@FS40c%!w`gR4Tl@`bNo9;xGGr{6a06~X;HLWSk5g1C~0VixBa zdwzkHkqSgASnvO`&^{jbx#IWbZb{EmUIhZlkkR*&iv@4*6pC&A#kOP7b(m$a8U!fY3oo%4Wk!&!jo8gw zH-ZOLP5+I9-t@+79>76=+@uL)q-hweo#N**>t3X;3+D59)NMhNVn451in@{XHOvLo zoH>{=%uZ9_K(qm1Zh2^c1tQNw3fS8}*V^Ge-|P;Ywm|LTc==S|O*KNj%Ah(*MBmU{ zhBu}+KK9GY@|7Q%b)UD4|6?v)_7g7aY!ZG+7!BGgf+NHj=->2voa~-7kpt4>lHs~Y zri3nu07^o(VR7(hW+DZ$A^+rMH~&Y(>~ zdK#6MiOCK&I#YV5uuBakv90bK;vNWp*%M<8D{xST_k@`U+|o_@Jb2$C8pUiyX`Z!(z zdR+D=UzWQ@`fEbgrTZ+C8A#M+`U2;D*=80jKDw$*%8(u`&X+UZAnN4|*xfy-B)f&x z0z<=tb{wb>9g(uF93EzO!xv6B$5)V?y2gLN4wOZRg&_7g#{2L$>rgAN;Z_TO9NA6Y zP*yLS1I?ck>7|v2S$+3-J4Y~qZIjBTX+Dhlm6)cxdtz)NlP8Q#eP0!#s*6Vjo94~6 z913RjkkRnG@>ME&56aj2r+C}(<~P_3N8cl7N5_7y1UUwQ0Zvl}8y-4CHkm%M{FxER z&Q%f!!&{DHLr-5zYV0KbGN6D|EKACb~7SeA{% z{!O{kH(PZ}4PoroUg|L2E1hpOKYyW$AcY2{21Ju#))FJOI+q~NQEBeHREIly(7AdE zuwA9esb@TQUdLtre8sBcSX=yXrKC9HOs3Pd2*Mq}kLECBy(<*uSZYStamt(~!)qlao$m^MK)k z?L|BKaXoN^HIt@7+yf4;b!HSkyw}#ABVtzMd~dr(68sspI3;Phy_MH?;ggRiaAE%6 z_55q?*#iTN;b$hexWL_=opZuohG zppRJQU95@3{lUp|ne(}RJj_QO%z0)qy^1-puN`G_fB7OeGw0~Ol zdtSSf_U)s5`!W)Gc8_3Oho%tax-zTFA3(du*++8AFDKWx)Q*`q&&NJX%ydb>hMJ9n4m%<5=M@eF2+^FO?o3U=&PY6B`$OE{})O8C4D z)t|82z@6KrFH7Yy4dB34!?<>Zc*@xa@UC-C?ug^4*@h(c@z6Wl&hrD1_%$6JRxVjL zL9|=ZZ(fV{gu*V(wP3~(?l)^Ern9R9W}Vjd>3=tw05l+2?W zAm=?TuDApz>g}UQ=DO2$AVDn`mw4QR0La*Yb#fFZ?aZ|hG^YG+B$d(W^IZxkb$M!5 z_H-C?COXDl^ojKVB9U|&bAHY28Dga@e9-)2t5mUOgcAHBBwHvYX-c_W?hPhP_9EIz$Ei^Rh&Jv6bJf9vN`@4?f0XT*U#o6e zL93=Ptoouu;N^sqaYB}o+`t{aq#N#NMLZqzF)9Yi2K(Tj)o7OEN-~f~2{$Y>St(N! z7w_v}-g3!JQf%DNVi<0Ur4G2z;>X3=0iri3(igE!VPISiJU=^ z%U!}gD|JsBl?o9#Q0vUATb3kg=yk{x+M>XCWUV`kNuw0LeyYefl=3+1SQYLvfpftq zj3#Jc6IR0B7EOT%aPRD3vLyP@?eruYNA>O6DBCYyJ9Q;+6c%Vy9EDOkh)19 zu&;+&xkea+bYL}@Vwhr z?4OWF$w0<@Ds1l*GcLf9P!kIkCG1ijB)&@P@rOX6-S-7)!ZwZUo6yW0(ACPpJz_0+ z$u@YS)#3i>tLal$q58)%eV_!NiKoIhSAPIH@|@xyveX7c_64r^(<_=hG@= z0_z8auK5v7UFooppccL^l1uADD#gl#S+ImV`>BC=nLr>g3wyC?w!U?tiD_A+NdYtr zIE*N$H4%HF?;PrQ=wLynGC5j|e(RFvl@WF^rlLCovr}MLN0{ki&!#`KL9oDySGUFW zfK!v3%J29yFb0FoN-JtnetOz34O514dc}Ew0iqXrknIbDjl>k}z6uy!B%2rSfYzRU zMTzEsX3oK#T3~*w6{2!)ivRTX%+F)t%MPr^!uh-xEgWsY0oG3;v&vgar!GwPzBKkMm-FM_TIo$sU`wM9=B1 zwe8tmr#*h_*EZ*W`!Q$#hkH8pXFcwI;|8W{Q%(*WxRZEs{|sCS%ozWct?S-f+M@;= zNZ2N>y+&|o4pKYxP@N-HK}4M+EL!c`!qZ*Fp1C3h@?=(WM*n-N!r;Wq31>AGV^d5N zTJ|l~hba5al01O4n3ji_8>hRLTTntW9j?bBh|hKPWEbTV;l!~2nU83H`|-*T0=+kR zN0@caws2&@Z@O-VT?==DU9XZer~;Iev7HKX138rDPuoA10#;x$NVERALBUXo$K;YR z+;V(}@Yt|(Hce|k`hSHN+?Joqx4DD={vi~CdLXKjbEQ%Yh@!uop#NeqFkS9B!_QQXubFL5jR*)TY791I%_}omLzDQ@TiP|oH~bq( zS5X%5pvr6DoFBKWwOUE9bGZ=-$v!I$hO(|T^{kCPdBI8@n*vNl0aHnY@D;aKox{A)m!Bq7gZ;I3YD=CU6~hCuNH-vB<>2w&_Fc6Q|!L6QFD9xNI8*Ia$lS8 z8M?I5cIfJ81JI(*b6^`JO#3BJYrp*-sC>l;=k4wTRCv#IfyDE3*=nS;tGc)n_m0e@ zC7OFKF@7^*YtC6z?tzKA5`FPn=L!-wtlW# z32QYM3{w`IB>J16S|khvDLc_k4%Qj^q5he1i;i@=*rq+|+0u)J*vGW8nQ^N%562cgo_3p5j)+}mG&@^rQ8e_^ssQ}W2NCA_h&m?iSug1dy=++cQupQU zq7)UVhC#KC6HUsR=Z_U@{R4(DW!McNS=y7ihxaXb(CjFa+_sU>z_A~4UtsWiINi+8 z`LdSpaqxwZDec_*uMN4UUyke2wzzRHEP9Tc%cu-onzMv>y0y6c&(=`o;0~0OYF!~A zfXdoZ0wv;7+g=)6(X5fNiMLIeZ%sR4U40Wz{O?|ocB3J{x~rHHYK$dBDMlUc&aDim zNewANSZ0E+=EX37t=j7dY*kN6!pmaXwuw5tbsSB`2ETLEa=E8${aN60Iw%5Jg9y8B zH~5WQRo#lSGh$u6|LSrD-Wjyn{>fMGl=42Rtv08G(N)5uT>(o-i;NeQxHOA#%#IzU zwm+w&7ZY7uvEc8@ZasSSt4Y_{-aOjdtYJN(mGP?peecJiS~1NV{bTyi$xkVBr44+E z-{n%!EgJ^{1<>Cv20#<9$aiEBl27WwgbcS_EuoO*l05ZCGk zM|D6)O`#c+U1$Y&o0ogbAQnqJs-Ve*fM4P%FecIj?CH?PBL%LEicH@DH+cE{zdea% zKzMQ~JHVj0dZf;w1^jP+)^k!hz>aGu;gT3Ai1|}4i?F;mQ>5zwhL#jG)&AJuOxt`^J>6O zzE_q!0xyW#ijk5iTV+dhAZP>G;D#&yx^WBZ)2{(YdX;}9I#K_7Ryrkmf`M=waxiL% z3tey@2eg;M(~!q|niN?tE$@mE+)B7dI8vBoRDFmWjV7I4(^SKRsMTy^4L40Z4OP{r z#un?j^~v)C-0xk14E!>)kd&9-qgK`~8J8naQh?Dc{jR9|H%OY?QufG`ud!e?$AiP% z?9c?>LtB+5KSWFgL?o^j4qHqrpPhW&DY*k&-O7Wz`WKQ}`p2t!2GTQ%AVFB*%7v-a zYpo)KE<&W9)4N-4T5t!{GcQvvOUSPgt!iSFbpuxG6ktS7j*Q0F2^*j3-@p%8fioZH zd2wL0&JEQ1`DqZowPFNA?N`UwaLa2{Y5p~lR_$mdXv8H=4lko=vKuxTVIPU$w7qtZ z3lHNYD{AEV-gQjM?H=_kLTo8vRZclgJqrHW`~R)V24LVx%~J4(EusRmT^$(cDhe(LXz=f;VnU(E~ z(IJF?g%@Qg)6w+O$%&j=GrGnt*G$sGu5-E`oZ+Ax4-x>=xyC_-@I@h# z{c709m?R7X;N}WZxdJo{IBrT$4METGaxNf32*@q|#0pn(RQixgt-J?Yv*~lp^-E6*omxeE zIbU`l=lrqX#hG8IQQq*PR@*XVz7i*D8RknrDxO)L6MwTEF zsbrfZ8`~{#92yF#dJoy_?kG#bj4~KA5z$1VWfV&{RI~Kb;(XC~Cnjxg<-Sk(0+i&Z zRCO*DsJ>uo_P~T?nbDgco8lqCEZiF8zoTSq6dvexAH$ADg$#mgkl{E12?2fq7Ss<* z!f)DD%zM$5qgrcqnoSi+ZGSskV_%Mmw}o9d;y*NVI?{HItr~E?_lI!`#*%m5x)XJ= zdwhKouBL{J;edMMDwzY{hJs08@w(z@Mc(_`{;+vYKW_;|&fQs5(-GM51Yl#4CW!uh zr0n0>qaKjcp>hSqwY~pflzjC5`B0y?0~z_aTTkIz66%Wn9TVMKNqJ(VQ;x;?VfL!5 zob|Lg{@z>mR__ia=Mkwi9?W9f^F9j4cFkyV1x&6Mp`4;SLn9W6GK@7+Szmq5;ncpLQbOZ9=#t8Wd0#*C@Xtn{b z32P8SNC|uq9jTg^H?y+Ot((Is#u-U2lvbvxFo-7EcAq{2IK#M1>jEA-XF~l)gX=yv zxnMG^u{P>DE>b03vQ+(w%izd(VGFhlh{&$cE3h=BzQ_89TE3X4id$>HOFfB=A5O8* zwAoeo%}N~#0H(dW#KheuyIxRR<-Rv{zIM4!hW1~m<5WNTk=b)ph3P=wPKo?C6|!86 zSaygKBF=Y#)prLs41M>glRvA(mQ2V>Q>#{IdP>$zVL0+?foRkTLgeyB+=}$lGb5#< zGZuYLl#rk>ax$c=X57k^-|eFa*Ld=ekkTUtgc4d>O&4>QwnIPRL69z5|ukY1e$N)DogT5dn#Oaq$@ za&Be+u`e!EuER2lH_ zRs8OVQ+nr!A6S13QU9k*z$-ioNOj){$}L0Nxr%O>f6AIbT|Wr^$f|y(qn?-SCJ^BOA@b zZ6ifPzvhtVEQ{&Dng3agZI^q6k)Cuz_Wb=ek)|Hq;c_;-&EV{bI zxBDES9^@NA78DO@q)YoTFqPk!?Tkv3rEetj7%TL*Nm$O737qpId zHEP*K95GrLh)kIY;RADuj}toUec=)pdDjTKv)Dvcit+T35zMm3LK!>#|9fBvOE>l? zcki5-;hG=~@mn4dJRE1=;txiv=D8#qd>Zm1o-6&)(YOg=%v|L#UE%^Z0yWZ5!h*H| z8Z}3AHT;+VP#9_GkMCyRtjVX#4~cXD`HGe1$05G5Mvbz3d2h*2=Hfh@VR z_c<#w)Ox~!Bo?E*^M|8LVqd(l zL3e~fzR%AHY-LRxx!spA47!P;CbSWXStIhK#Y;PBHOAnirq6*}JyJ-2vKjznkr*L2 zqvRaJ<$m1SaA%{j;ar_x*zlci?u5_T*yAQ~ko2&i<4fk_?{0_#37bR0_Q@VtxFdm3 z+ssIxg6WK)1#~q1+)J|nX)i+S$ODPIa9uW3?ac0ECV8@xUKN7XDA*hNz2@_o1zM)f$wNyCq!Z9= z?Ss>_g+(cpAMtg;`(7hYa8UxSXW#5>P4SUJy1+dc%?@gW=zTRp0@;amablh;GntLe zh=vg_ifws)7NL|(=yFtl9oz)cvL@z#i5bP6Y}y9}d{XE(8{hd?17hw$fg+{AV3xfQ zXie06Rk3q{`j*8~(OUm|D?OqoPj5D*%fFsMV$j9 zmiuWX^Gh^DU4DnxfKj!YA{Zl=6)6YTuzasAF>|9lLgk2e5f#v-R}TffGYOzkwGoPH zJ|Mlulr~rgU8J5P%fTe9L7|8|I0{UK7jLTT(XiKwC?iqO8!cT@J4@Dgh%lpC2;-}F;tPlGoK+4qVPP}Wpf#;&h`0FFf`dx05Cq3*Gtu**h%s4xm zqH*5u|8*{A+mOSUfNu5q_a#`>;XkjXQVO5wi~0mjs+G!yn5_Ostr+QcO>82o!yOj- zisK90&F7eYqJC*y6ncYDnPbxA&Bm>q)&BhoEB?0JN^^_Gf)r-(e7WQ4n5UyCiIG;Q z+)AIq<3aqzr4n6CU6^Xw-CS~sN?)%0EpY;z)KiX+pH~Kl!Q>j(<2U}0z43XiG+=>SR*m3vT9Yh}g0>#aCLPZmD4Do`M5MXi<}t(x z;p1SG&@(oeN z5Bf0vy?7;{p5ySXpbnZ+qjs$`{5Y7n4=E?DU~D`}eMh-6wH9dohGfy@zYId-<`vL) z>uPzj!)G-7yg2s-Ym~ zt%%nU^+uT7)&dRnv9;e}Y00JKI$Q=Lt?pb(Zkp^27Y;Y3$%og<4!80PP zmWj_1FGIwI$|e4WtAdP9?}jd=9R>&uqqAGbgPfal%ceBi8(7bg3#w5RW0-u@F+C@m zReJX574^+@Icka)zT81c53IXz`qX5t37nW5SW3-jCg`J6OG+4!oENf|p3h+zZG5Js zK=7_Y=We~EiuswjAj-^b-?P=|+GdjE$CVL8R<;vUD0R$E54o2!EgW}#J2ZibkP=3T znTh^E2TE2Hvs@`s62sP!Y`(Y8wfjLyCFi_CPneAC^ihP_`FEBq3!MLe)7(<9yG4WF z5EC1dqoiq!^nCVx?hXB?eplKwou=nLB91;?u)j8eD2>%?M@OrT^DS8rh?SJ>jqZ|R z2-EcuWsC$!ev(YGedtX7uB?EhW+2_&wKr6*Wio2$*Wcmn}VGcPU zR=gIif6K${E5eI;xc|wPXrbh3-4+2IhpZ7uVw1Ri6#5~RzUFWL>^(htxX#Lq(YN|A z=j4FOuGo)eTD8zu2%>mikHzNx=YrYEnGHBrYL0r)S6;IWLQCt|X?#Z~Hn_iX-{m;3 zsApE701yza9i@k1$Wan1@eVGn2z>`dZlg)JV_0=BwIYY!3NjZjq%gRQpoYNH3<~_; zJ)V#b#XDrHe#ZeRkMZwPBx3z@^u;B_ z<$TWWj)dE74qc^N&qIbIB;9-U!eoD^@!eOfgAbRdIwFWgFA~Q^DG?!(xy?E;~3n+DyF0HlU zh;hh?OCJ^k3gfsMQCk<;XOZvFsKUDFDRb`tmP8;X=hnzogOG|pgWVM-p%b~8gIJPa z(x%VAj?%9)nk&$*u_2K6Y$D!dH7Ky>IaSzGGX1jRx<=k$Pfv%sHs6UAk|>Kgq}Qaz?tlW#$@v&!l&1SscY7ko_^0 zXy7=xiYSz0ee_3?_UohL`0d8>f1+WJD%Zh%@aAHOI(^5_fD?Nq<%BfB&@3G8NwlLd zmhI0&CWZuwNV@XEUb+a|P@_9#Mn{uhTnk`KKUiroQzWuU?O%iJ6#qr}ChZ&vld^he z#W#9{vt<+RHX16bcpYxl#of=!ut7vv@G3R`h}5g7sb)N3cSYryup1@kn_}2K2$t{R zv1Xp~O(Tva&D95%UBdAf-a%(1Z0F)`H9`?fr^*KzXhr7$A;n$KzN)Xu%qV!$aQLZ9 zGR`Wp$df*~`{R&qrc5yW?9M6G9E)nwQOJ>c-O|td6H}_JTprbmhK__C^7@r7dkM@# zUtyM!xB+Z==SV^6IuK!oL8lNKcr0@zY?DiJ0`>OA>H-&*9~is3EM`HxXlJI*N`e|aGBgx69$qpR6URAEPF(>v?*hOi!d)0pb6 zU=Cyo5oqSDWh%IQIrV!L<Zpe@lpPi8ayc zKkDfqlYBMzOtrZAq=ZE4V3elr^!$C{xLk6m1@}ip$z8ZwcaJx(@rTpirPi14s*GK6_-iA8huMpJ?&hjJb>8?~@NxjJpr?mgL9F zDR!zNsFiwdA7=H62`|W%daX1GYHSy-^BV?^O$Hm|m4Q;Tdy_>oOzRtD5elM!sh_#1 zihHb?fa^77m;}7F2K5F!)j3&dE$+OHT9rR|&DVLolxlzE9uJ*%s-<$$EN~2w^j(jr z+@-#|*FG=~WZ1F;XVlTB7-J?{?_RUGNS%dfy8*}SVh@40EAyax?8H9xe<>9atGwLk zk&4s)%*c#ZSfFst0XSxm}42Hiz+LYsaMxk*Hf9=@wZN6Z( z7KZvV6SJq1UJtcX5mL>%+j%4ZJ8jT3zX2M^Bxt5g$>D=tutW(lbmcnWb=Nln)@-NL zotg$V2Ur%9Le3g$ydeSC4bWrh2hsh5r302PSj>2nslXmVg1R&xdwQT$HK=5crnPzoc zQ5F{aM)6}Bb!s5VcHyw%I*77LSwlj1GC7#~HJ^8v$B{axTFFpw=PJczfnFmMPnC#r zr)sG}TGwkn+}o~^pW^8J8+ELrtZ)3U&pE87sc~2biJ>(7cE6foN*>ztWk?p`^RW2% zzGupkqKV8ZhqL%msoG=s2MwAHo{E!0?ecI-`NgB34-s)(lZT*x%|4Qqh<`BmFdyL{ zWrA-l;d!L0YQaxO%LX%iRYF!b{!vadw6NBmpif31tO1UPfirOAM8a0vj+^V z?uD1c4L#O*WT%}zI8CIRU{%4R3U?`Pe(ferR_im2X_zFeI#X6hWepd8Mkr=qjZs&F zNb)C}@hX{76N>ssIt5GK#d-Rr%RO7Sm2u1qHOmf+z-(rweA9$MxcYI~$+zI6arE4= zX30Lrk*WwpZsjK*t=cAB6?2>NB(w^?cOc|l={R_q;+lGV%4gv+h{R2M8WIT~8jD|Z z@-LlBp~U8mV@q20v*Dg&1G5$(ATt?!Bhx$OH`>?3V$!BH(Wx`k?8Ocv0J9Wk&hGX& zla)dpw>zLW$731;_o)rJutFY^>Ybgercqh^!79T3L5{s1>fMk1r3w*(<&bXhFm4}F zN7;@o2>X5paosQUe23^2tDG#bW;wt%huK?6NjcB?I$EzXv?2`~)!CG>;I%_MSQR+aG)&=;+s*)%q!#Bv1#hVg*-9h6Q zRMAxN;w0jf)IEg;k&%@|LsxJy%^v3<=Yu%(N5szGW;u$vJWs-&n%U8Iq=o%Kg{(&E{ul_nK+4!jv zW2mpx`+Qj>t@JLjcXVY|ar%mc74Ean8*>3pa5#yZhL+lFv3e?0xS$4O?Rq=Ov1iJf zE=?||msISsUfCI1+U$AxfR4TIVj>XB`*V@6`4jGogtoaGMhL9yUkP|%D%yisUL;h! z(=a_hIP1aFz0Ti`j6IyTpr{gMf*N-gHFInwTI3wPeb z4%Ww@L;>EL3-rKAGJrg|Dw=K{T=fI=FG-%d6(KHqVFv|B6ws!mz!FeMCjM`(!PJKX zGvr}K!%S0hAnoAJ<0$ND%7bRFm18GcA(O~CUTH&=Sna#D{iR`?zaZJEqR{DH#VFzw z5o~Bi8EIYgCUSV?RWCdcn;5sP=e-qY{OV)1 zj`Q86`dZuvJfP0c{VOKykh*4pgz^`5s2%dJMg61KqkYF!~HgY`Z!Sza`>As#w61u`8wN@(&6n`W6%?THXeR?N$7b zK%8B~kJC;7_-!YtIr+FR zO4%tYs;DRD2ZDMxj~7K@#PR^?vzrfyo9)e%tR)VSv+!)j6DV(oi>Ec2TchLoUu@YY zdhhf>hho%0w zNy<(}*Q6h+6Rf7mOVJ}}0dI^6`m-seuTPpyHz2)-904R%a;?w z6mXCm5(7drAY>1+;v3U?*#F8ryKijq$3LpYfihwHv%iTz2ig$VclRK7VY>%KhoMP+|&ewlCH954w46zDRX z%i*ubDJmp_tdzds;vTJi{JGO#*OrJ@FNpZ~A{$DZ3a8*-{Y71$hjQxaPm$_*p9fdwonDi_mb-ah1*Y}%5{qw${*D5^PU20(_J z&oNiYq0MSpIfsn(+FuBFW!64?WD4gJ7-tQ6nLuZ=Er|VP00<_Dj_5s?IO6>6d(xx> z8bj^*_LO}PCpvRl{|OhnfTb9MYI(dM@v+ynw~%3>2n=$&hI=ExG;b!$__X{YvbtQ? z^7Z&)4#!Momj{4J-38gOZYlqEp$dLt{QFvB3r3f!KTYdeZ6hNx@y8_L`@Vc>`y=4N zDSIfu+0A~O-xHSaL3dphVsXiKa_aLu5zmU<%b0$D;ol(Ilm;H*w6eqhc94y|<#T9a zYaf8MXLC8KN{*M>^4eS-(`{aWuG0|IMQ?xycn~T1s)?3T!zn4)Z$rG~5i7%`j!rlk z0O%!r48WYCvz!IcCghp9=16rJki;sgO$yEy3@P0jb&oB=GPB{wMI={?F=tc?Y}v<( z(=3`r8}ZA^sgP;-rR4UFx{kE;sH3CaY>Fy?8^5ybKBmdZs}!f1{kKFLG8MmG;9m`S6ZI5dTdAj8aRdoKBli^!3ag< zxQ^*j8fJe+ly8+6#%^44_s$gOO=SB!i&j#MLFA+ooA_euxDthZ5)Jt1olScIf|@%6 z_Uw5V*Ff7XFaihY=CWZO9L$08`4E#?LZIEJ-h9Ts8l;TWx;RE*QAiD$|5|E#{SMsf5Ugj_8oQ-Dd)X?staz8&(H0oo;l@l3c* zU~!s+a>*LUKucUsMd+n?7c@0fVYxrRM2cx^4sVNZ2l^rFYtIt?k9H!wx?l>Z_QWH2 zkm)*qe^2y8uX|N-{O#;*dX)tTZE*A8`pN^0eunR$cp}|#xoK}%#d}igv&P7OGpIbn z>}Xi6X-T3$Pm}cHWTI?BxAU!L_~xOgf}?SKJzpv9j~zBxHCA}jM z%ihmX7e{P!Khp9$fIx z2JAY}0y$YE?~+?YT3(&N;KLFQ3+!uJPlIRaL0~9V+H<+D)?~7F4K&TyGj%!$gDFqW z*ql+>QRERayB=(B3Z*%OZYT}+db>!h+CjmqiV}Udk~5odHZ6^#uadMkz37!1>MRs%J5GNX0d$?kRHwFbA9^{GExRUMSKH?+5)4tXmlTah0K5B z8%OQXQLzYvB&ZK7=K%K?7>yl(N|cx-jd;kHn%OTKst)UJP>n zWAf?ftO|@h%Gz{K!ruS0$9K~Al0)O)Bs!yPxZo^Ukp8UL{+Nnln z<=V(#$%8;fq_Z3m$L$+1L;=y1S%MBUONaOpn=#N-9@TQc923rYXk@*TR}LB`11>=n z7OyVHv;C*bF1Y}-T9p{`SR3HJh>ZSj^raETdc92Vz{CHQ`or>m<FWdzBAB^0f7*jQ2HB&;8E;M8^sYbC9@z7~WL<2N+T z`(?U1(J9t5ga$mciCk%2LFHV*wE`jN@(~73ATWW4w&lR6olt$Ge{}4(a~)7)ImjuL ze4T)l(8{$&qQcR21DQ%ex{Riej6UoF(}fvIdOe!QN|C-9E!pnh5G^egBw(Lf4yS7d z=)*SUYD4h&sK6d(7d6%$J)d+IX z8vp-UMYP-{>o{0`ahjf1FR<~D)Ij=|PMcR&R1msWsSn)YRa8vccTiig8b)QX;Nb!W z9`IFZrdj%jr+L*GT(dY@X`mk`CZG<$K3X}x!-M_gco9qT%b?*8n9iO*-e{jI%AlV; z$G+<0NN+_rgW$@C^D#2|Rg2c8Dp6ggDlJH?1ldrv6-*V)uC|i$JegsGsB>aWtg= zegoU7vYCNcRZVHo`geCb!SwZyWj4?$C{X(dhvmf3riG_0s~PBsi~3!Li*=p5;7Pd6 zkil@_+jNq+BB~p_{zx*I&(ocYY}wuZ?$_U|o%I?U61ULj3zO`^6WWp%o_~K^enytV z5v$eU&jWoXbU$*;Bk2Klgm<-5qAwurz0_ss;dKd8-`##}FfTsT?>}Ku>HPw0F0ZB* zU9wR+3?v^(&(CgzCLBVLL-dt>8W^U806=|UphW-tKlldEr@6HEs0%&~9s_2~_+y5m zODHeAZ1l&zDu?TQ0gnX{wH?%m=pB<0#(m`iW2z&f`cn0vr=h0FRWqatHB-pTcp`PA zcHcLS2LxFT>N4W*pldP4_J&oW;9RlsR$kx z#xl`0ehMVPL;sKPhBmuQ47JB@wMvNh1!g4d+#U|*P4RkE^2HU2P(&5!1ZVKR( zO?4h@BWvKes?W>##4hy7Kx%jNoXqfD&1;teJNH-GI+N+(AWg)^1+v@DPJr&+Gy7g% z9AgZi>hNAj6nKQiWHho34zIs<(>Ny!E=CffJo+V~C6A(REC|5>ZO2kt_)!n5^DsBN z1~;8%Wa^t&J}`v1A{5-ruHLnCv2&>FY{dOng6t%H4`>XxcC5}d27z#A_w&60rd-c5 z7+D=}+G^dqK?AF}oc4n|0lqmOLjiR{oFIsg;H(jvbA?ZSLfe|%batNOllhLLOU;U< zcqzqbryQfY0E(vVt>cgN!zec^e`apd#C5)MJ5tsBi4I@qsd6}Go_#Ae*RE79<>y*f z_xKp89a?6BMo<$ixxcu+C`qc696?cAhBCW6sHX zy@=&8Gxqz~gggo-s|o~DAm0je<{FiV!nwva1Q5V5L_lDrbO9$i|A!0Y8}Qhc!t`Tc z<29S>K^cd0hrNZMWAf*l_ZV09J5PiI+6_Pkw}ew2d(sbB7`sRx+1FvUQv-AI31zMN`kb#G@6p>I{JzM zQMI)FgHG}>?>4DgIa}d*n|8lP7D67USSSvw=UeE6^UyHyY-%v3d*n$V_~kZ4a502Pdp!dsVQ?0?3OdMVqwHH-lYF>!1~*A ziGB%;a=TWENm@3qCnWP9Pc^B1-u%2h;Eb=u)b+K}&I1F+I3~QHa%+ zx>Y#2f51v-=*dG?+-Bt6!uCfhCB2n#8Hj zf%tMlwgE$uU$fw}g<_3>2AC(_M^=S>wu;s|={~1A?i_ zQb~)um|&}ls%Aa!pw){;lMQ;SHzsZuHM0Gut32*bem+H)C^NuxO4GR|xtNe6Gq&s^ zz*NQdDc!chaa=5$H~V;uRftnkZ6?$x1ct~$Y@)fdd^1-<--BG4VXJsyr}+e9BrNR& zxIxvHKtP2pj^KahMY-pDVsVC_k7?mfXB51rM*f0$q8kY~`d}7qx6EVs(?Rx$WN4w? z8lf*AqxNO%ZN=~$$#D%fun}oXu3phdEhHq5C~TNw2Q%=C^|nA4XBG_Atclt6A6Fps zj}Qt``Gv?i{17#(dP>%?ad7`b`id*$lReUO-cMuUQmw zy>VQ(EQL)tOrp4Y`ePO4IC<+`aC)o6G325Twx+zbD`i zHh^|zvlkB4V7yP31;5aFyn!aSWWP*tZ5%XA@12X0^LaYd zu5TkVa!5co$fWUnC2iTExHH3f&4{T%@^EAz^mlIdcFC{WfMN~~N9=QGkoLHi%c{&6 zU<_l{MH!`T)+WJMaiN&pV!XZ<}fJ zjOS zGc&Pp@%w8BiQHmm3rpY8sc;wR3@M3(GzB`JB-4dgtwHKafgXRkw%v9EtMEV)bdQN8 z!M<+xdq7{B43X7_zb&r(F;q;BQJ*5fIw4m%-MI&#MfnPxncgd7wz#^4v0)t3)5}4K zafXBN_ttF+&hxG<{u?5Xm*V7O>E0G-Hk3_ zxu#a8kBz?hD@piD-aF)emHMDpTYlOOL!YW1k@RdDJ=p(34GlZ29rS8q!*NaU8OFgFUDB!y8>pWV)utkRjXddK%=%ArRRF30&?cJQugt$nTp0k&4um;IOj}86=N-QTyydD$IE>dL@ z{y$%GB1Bn8{bu1oalLStn$ckGZD(C)?xdDXFyd`80n6tu7vgtTEqAP&Fk%b;z~%;h zFYpQFTkU&d4Tp^6eg}R`424hwg2)(sKRF|L2#>g;4<^YIk9JwX!6ASk54VRiH+Z77 zjPVh3t@YiX-4{4u|MR3PnwfArVK5vW)$9KdQ&0GDA;-u9#Dq=#N0+oaVga?3?M zKKYpM>iX|qG)nUK`|~Ui%AVryR(Kn$DHj@uhmVBlbXLvl`>R&C;I|SNfh5ttfv`{M zWa$X$&F|6YEBPr33cfQIf9|UI^Wet$Zu}Ovk8`2|QNc(FH1DuNF1G4ggwbE(GKBbAJrt@pq*oygLwRaxb<}2G zlDe%O`$_3+d_lRn{9PSxm*cSQNTB#mIN0VTP zi=p*O?~W3sY(QEz%|+3zU&k|q7cdQ7{hs_918=3W`Y}#8p53Y+A=7T&u|fx#Nkz=RC^`z!!NM#l|dv`K2d$frcF^#CUmeEBR$V8f`_o5D>c5bXML zM6Tou?kDfVM_#WTBMp#2Ahv)MYP}^u&*m)1^u6CMsLzO1N;Dx=-^+vVl8?I;<91$M z!G5mjQfvmiZ?l|_gPGmkj0iEue5}IxtGnjhJHNcgpo&ENi`q1wnJQv~;f3)V>s4L+ z-veHF({z0FUTKTnEIFgD>T#%W7^%Ksv&k(hB($E>=mKT#b2036mgXfX-lSk<_}^C~ zuycbb&^W2cPMfsd)0OA&lA0J5@0>F;3s1wlhz-K%fk2@`sIaq@;B!-{8$Kt6o1!uO zm?~AbXUmssS5TeFsPPRZ#r-akFEFL&JBF?khAdT%Jg9*&qZK-)EE%(VCFrLHAC@x- zGHJV(rpyfoK&)N0_PZPiuk3WhpozhmOO`mr!I_f1YTUC{bwrbJUS;fb;FFRe z<6sjksjyif7OrV&&G!zB560B-_ATRLQa}uQOZ`kH3j|dU6XlHuH$wrXdp4uE-6Lqr7&4; z6{#_Lz6cSDdtkpDF1h4LgdUz|ykh}~T%y6cZ*I)+iT?Q{k{Jx~y3Jl)Ixm?tPuh>;tI-p@%W=-9zJ6wSy5{rtPL-rjyk)^`YS z^*s5{6G$jub7=hr2*K5VC_-Vs?BKUpi?nBMlrjg`0t_VNe0C?(_qQBj-2^-<&RZU~mU{NoQXHJzRG>$G?1cGbW z;);)*=x)hEgCp*i`l=l*!yfCJNg42gEi^PBFZQrd=ywjNUMlqR5@LUO0N2|XXu?L> zZEpKJu|PckvDbt}dC+4_7HbqS*&B86_q*ZF?W-8Qy}%UI;T-*#2|Qxgf+Z;y^K!Cs z!RzkFOp8CJ*3`)$KoWj8t}$uB?PXD%M_ChIm_q@<@;#*p$UeIED}?Ddi$8%Crba7C z*b;`YibI=`EK72+F5@*R29}U65fNYC`lI*BKoi~wp!RT#hruEU5#$({W4z+bsrz&0 zL-KUoA{br(=`56<^jkwYnJS|D*0>f)joM2S879Go`SbGIq^59_JnRqNoSMN=pMB2p z`d|`H_MvsD<%a1>_Pqi@{+%b_x4&V3KZZ@ROKSd0CX7xP%=)-MpS+Sykpt^XBes#4a@t(Z-jIz>4Lp{*P$|jmmSPbLk!0d)i@*81TX*<+ zqr@3s;o#OexzMr62vfUti-3LyJRl@VmC;ok$TZ4|UjNWUx09UjB9t3&?H=?<-iOTi zldY>}hIKkDo4lI)c~TLP9m*%c!7(bHxZwrWGogYERGPdNVW$lZVt4T)K?v+?6|}(O z$h+)AQNvyCr_`{|%TfP5&PU7TD+8rk8N=t?ls{63mpC#0vm}=|KfkUGOd(*EswmcP@5`H`;4&cfXGN)#P$p~lu#){Uj8tcf z-T@TKQ=I_+KLEhfj!4YrudpW+9n@JVk0?H*ey8xmhSo17%WF(IZo!O6^OPAGoB-)= zpg5pPd;PHh9xkbqV@Z+!3F?dacWC@L40^6+rS6W%BsZWR5c_uh%6N;rAxQAXvI6+D z_dYD7DBNXeYi2&9X5?Z=o*|w=gH9LXGi?BkPhov>vEMN_>`H>wJI!7%V11vRwynU# zejc#MrhF?VK_Mcmw(1yRk#sk=NWS~Dn-D|k8`#QMjd3r1H;?nQxn=nFG}3uX`FV1c z-1sATd1`PeOo`LQoF^LLbP50e^6tiQE|<%g&cr5ao$#$h)j-D__mREkPi4SL8{6(h z_`&*0&ReFa#SwbGC$0rtKFvkQ+|Xb{L?+4qJ?epmwa2~yxb2oIq~LTE5#Ke+Y-OoaU|rih1H}bqSYA%O`f{n-z8h z0IEG7caucga#^78hE!t1{VPaA26ER${Zf;K)J$R0&jA(6o*t>DBV_ijvgp@gFOJxp zgG+g=OXD*rEDHw$h?Uy_282T4v-OMHQDOX|>bYPFU{&R5w)s?R8<>|a;OpmOubL*h zb-Neer>A>c>4F@JuK4=bt)DQKIKQol56sFx5ertlZ>O4Wzyu0I&6HRDH&@v9dNJX! zdR1?@U|zVS^{TYr)^*C%gUDxvDs7Ki*0VJ}LfhxA;PSEKDmw>d_>}p%m)Z06Xs;R@ z!Cn#*cXQY*SsprIa`EEFYlSCMNk@U1G>tG*NR-DkOFILDi-jI@vws{7HCae(@@fZ) z1_8q!xiR#|W7iZfJ~5W4eRLF92pDCLbxA*Dl+a0|JxZ`P#Tp-zJ47W%o3?S$HDObo5NnIGPUWEu=e_}bk3CjTUQLb)1YNmgBD#%^?J)Pb}_ZaZ_ip-$RXCBlbMjl2V1j=SIO4 zfA~o*RS(DafK{%DE6(cyXIvqFI3a2IC2!`7!$uaRmas zG`oUlxJUaLMjZh!Dx7zJPRaE-k<+5sh|74pP-Ho`;#lf&#z9#F5KSm(eA0?N-}o8P zWwzZG{8?~YLLUzvd{{y?gEbJfpHCG~mhd(CVD+06P3wHrwZ6>Am9DUo?yQ3i zm@#4Vomh@d(mGBFLbwfuyrRW3+!Mc)e?YEZZwtnrQ?&p#*u-cuhK_ z0vh427a{Q5WVNS;+7<-H+ia~RCFP>dLu3ynT0?-VHyl1IV=eoC#qr7mx;MOgJ#6ny zS8qLRg;y_<2WV$>Llxo!OoZEa@cw3>>aDq3VPI1B9-c^~l5UFCUy1Ko5u?`D($aqO z!hYlzS#sP>OkV!?iNIF!FrM3Q4OtC&GA7SPvUTKCmkVU*9kG}P@o~OMr78$a`y|<~YT_qIPl1Yk?P^YG&ZII@j{?;k z_?Fi~hQ!7Th9w7!kXl->-iExMDYF1D23ff;L>`Zc{Hf97pc85EzWi%zKqp@~P~oI8 z9#eurBRizb^bZ?>mw3#s(OQ}CefQ{T(Obyu#N5iygtN4__$3o{QvUc;HD~BOP>JM- z?8(*~>^*K*6`LX?_*ZKi(8K@Ww%Pym`k}x5U21EP{4D8uQ>5rZrv-pCqXyZfSDMCscYc2wng|1(HlmLSq&J)vTU6U8vbT zLW(F>Slda1{V+!;5W@K{dR>Q}_08db6YF)RCKIg?Ye=5a8L^v}W9?T79z+>qV&>T8 zf@*`Bf5QR4T*#Q(U`d865K{XZe!wZI)-faXn&l*O9t$^pn(*idm!#?QBN0LJJU?!n z`^sZJ4q7Z)?+k2jsR6n+HJ=AzORaxV%sYvm2qSts;~g5=wgg8M#%)H!nGfdMHUbF$ zi9%vk-SqlHy5aZr+Vvt4E;IA2aTE3J{mN-HHlSV9{&44{3zOuE^3ikjpa%2nFv49D zRs<1*kO7)~W8^Kqxn$w72`HxV7wm6-w?@x-DHQ?e+shpcGn;(I2fF57L!^S%`U=kM zn>0UdA1XeghSVUr>Z&hZ5<~#^5n3O6diph%YoQCFsbZ*8c}UI)BbR4p*FANi3D!xc zb zBNs6LaM2h;h&?P8*y7r2=o$tW&?$efePJmE#z$g*It_MMNxu^w|B3KhQ(= zSYb~yLf)nLRX8@@bW5;+8mjhu>|Ru~m_}en`_oQyolS5N{wKi~np<(fxdvo?s}ZHA z=EB_Tb=#IE5e-&?<5Ty5Po<4x?)(RuneW6)M>*}X>`B^SHvbqel-EI->DW*uNl?ocoTI$Avri+iH1M8$jWmD zYWLmgJWuB*W9Xnbmp-R(pGC{6TK8}PPQQxtr$__DXjj0zY8d%ChmFI3T2P9e`Bu}b zkY8~C>0w<1IzvX)uD-4MntB@V^bq%mM8h94&p$dHTIO%8kAPEOqwAkquGd=X$%_^U8qw}IX#!l+`lGI1W=d9 zgg8%NRnoZ1vTng_k)CL|k?CfoQ!lMWyOy|ognfC|fMj9#)C3@izV%T8wO8RDK$2YX z_BnzgB$Gvj2w$0-X9E+GC)sk9O5~rRE)B7f+uxo+>fldt%zTb^n{CF^MgQfJt_5$Xc^+ zB00inen?d;^i)>tG~o}Xj(XfvDGZ( z2OKmX-TDj=x;?@qj2>WBy*w&b&w9lC=Urr_V;k-33X!+E{&{&iiK9i+7KrR9W@dkd zMx^fRBD^CgOYWN|9$6!0Eb{C%X8#sJp(~PZ^9|BLr+;Ct`rZ~h6s4~^;tM69>RjD* zo55w1JB7#rJ9*2ZPM`}rqVy^nl1np#dxeyxMUqQphh*Frx@O#Q_7+}-!&@QB-CNUu z#f(8aFs@FatY)%q8aG*Ov}nfA&>w4aINr}5p@Sf^>4YfvetBw8M-y8sc|?q)FqeKK%F~hYlyq1&Lw(ztKDv{tsnLJ_M?pr!)H$H7p?{}Jg zT?n!;8mlHbuiAIgWHb-S)(LcKtXa9_LF|uu*jIqH^1b2Z9 zm&4MygIxZ_pFS(jS(<^5`KCH9B=AX;k~=#0LASlSae0Z+^%Y{QY1WemTc}-SQ49Jx&sV^mpgv4n>fM`;ogrYDOZCqqcvj-6K-;rgq za=+z+h=sDAfL=@ADuxOqV*W-OR{h!;(K6IWx0+St(ZY%I$9t$cSSP`ikzFVQrE)m zpReo(-KNacabf(JgCo6lm~(3;i`^AO(z{HPD^t}UBJwm?Bnnk0<y42KPg8Aw2WZ{)uUtDP*n?GG#*3j7MUh>Gb`NZ# zQ&Ju`sBT)>howj&?Mcj}2v%VR9#tCLsM!8pPKHu%N9mJ_$HUAdbb?XcwOn>@+81HQ zIX&;QO|{fPN6@mTb|DVHQE`I|*1X_ywP%7hkbjkC1b9MLOen;LQTAz1PsWSPo$Q2f;wUis=62}K;36$S7|^K z#N|zZ0VgLEt7tx1ukf$cZ(2s9QRI`%OqfnurbY2w1u>vVUpL0mmwH0Tfp|~n6uDpY zyYPTlzQh{#9odu>N~O>S;li~+bda?C>r#WA8gyA99HK3L*$_Hlj);1e^Sng2q<*=( z>FKqHF9CDJA7SqiZxxk~dN>`&_#1^sDJs(&(|R1Y16M66u+9T7Hek>DNl1?^!eK@Z zCO7(tg&uuEPA*6B?}}A!N|1Rq!y)_|C`h|ehhHY#Cn^!y=URsUO1iYH4JUT}e^JCBq@6_yOt&Jth0 z0b54-Iai%eZ{>Z6Wyk>iWn*k2wE5sO`rZTIFXO0swAW%Km&VU{0|poW6R=={9IDk$d7& z7cZi%7+XuH+$PNJd~)DxSiRVoM%mIo{~X^$8_(C$dVwGbv82&)pr7R%;@gVmhs6#N zf-y5pVFS#M8w_+V>YaDaOkt8@Fgq0^VuQ1UhHpQ5`w0@QxmRf zT@?})m!-}J_Yf=)W_N7RIvNAZAt(GSCfKFhH1h*LsZ#A9d9$}~ji6JdV`2Lu;41^s zWN<4xoFY4j5!|A{e!5EYe=)YMN(=3n4yxo$q+>ETLR>W$cpVqs!B#@2q~q?H+y)J7 z9OQ%p?>E0TiV;Dn&zLrYeB|3oxN8l#5pGTJKI^&)V@~F^##=P77u)|GNv!mQu$)0) zp2c57Hf?9MJ%z|fmO&Z*@6hZ-8#CCKu8xgt<j=0LP3y2*GVK0Bi~jkc>mFZ`Us1JLU4(0EX%VUk;Yz*BK}TEm3Zh5 z))g5)d~3C*9<`}jrQ&zHAmocGI*z`A6IEtvrbv_b*~wDU_1ZDn7TUKlMW@Jkz4e}T zhYdDbzTra|J*EnHy_Z8LK7q(@B52tfbi8^^y+erZG0OTYxl=E5Ah+1i9_ysEjDkl~ zky(Up%LeqQ@qYe&^-ZK}>HFqg5?4kl-Xua~yAUAyiBjh0JPC_->SwOb!daf3Ca=6e z2JhL250cNdW?k&U?so#Cx#ZD_V;%{Ta#c=`dz5Wmso>;WF6n;03DqfWow2ikpLCiD z#+yAPz9m0f50-u3Cf88u(Qp~2EO9$duk$^=D#5@WRJ?4ll2|j&6C*L&Js-ub_q%4q z$Zfo^hL2l9|8@+b)@>hL+PZ<_A&`cC6AlRaAm?(Ra~d@tUbvtTU+(q6ohnj`c^k|J z9T%?NCXcdpRU}C zQ}3)Gh9*sG_t;vBQ{q^rLQEPsWKa_A>~V$d*7521-p?Sr8<&OvsT2TDo*`=yi2-B= z*R}nZVuu+1wo3~M11n&aRwmE?Oen-zOmm6BqeTosI~-m{P5`W6>9NK-K@*Xg)t6}UPi(`zS-qT_`AHjd#q z6k2Wq4Fr8aI`=%HFokZD7YH>3CgHcpL*xRopw!`7lyR?B@YUo_eJ^o9_L;iY*}X zcyt_#_7CfUxPd9LIjCWQ&i87ObB+Z~l@O`LP*7p|5GEG~pZ7%MM~5&48iJaS`O5x; zyAKu^b^JzD>Zj|G_y@xueS55>q-ZtdP;5T;2)w9g<_lrHXR*UMjl^(Z^h-lm@oM5Z z_b?x&Kn`L17a@*A*6#{cggI@X)t#4{{2=5BQS0gwL+oTR%7=lhS0mWPEkNMZ%HI=O zHS&@Ab~AOPP=26l*dg%fcT;jvEzljpSUwvXS9+erc>Sk4yA7U_PTMSu?P0{c_|Q?F z>HV=Pj;#=$BTvW*t5jbMn4?8VFR54>kIA5xb{j| z{V|@m`Y9FNE{XwzqHi6D1N-BBXn^bD7GwA;fScTeG;e?{eRKGDIq2mg#(B#XOgTY6 zuota6(>Av`R5#I$&-d}1@L$BbQH-YklP`7*r@xB-TBNEVC7&4Kw3wAXA7 zd4+9HcK?#gHgz{vDxTq_lRtamx&o_A{+^FCBG+~0JM{`Vmik776d4AcEw$-~&qf0rTnL&@&OD~n;^Exa#B)r<0Yq5Z8Ev`ozn z-S6<7_%>Xz+CKe-B6?))Ku4X*i~boDE;!2A2JeQr@g7cp0_Dq@AhFt(9%eOslQM+Iej!s2=0)h=YRMdMU8crZd#Cfi9iwIb@FH2M}$VKm%i|U1OMbU~akT znH-`9zupRJG;0xW# zAv4H#6FmN?RRz%7E5RO}x5CWoYt$K}2gR|qm~Giv^9@U%=rH(B(9*X86Za;MF^p-N zwv97E3RlSlmNRCk+n@K}I*gNO9dqcEENVqs)Jzc+9^sM3(vLn(U32C5EHKSsDGNAp z+T$P#aY8vht7-bJsUZI-lGWTWdD~+c#gr1wfalg*(^o;;dE4J1aSN@q2@-ZN%Zu(R}tU=%@>Q%SI>A3U8fVT@!%4QB)qFi>3 ziki>-cegd-F_p`JBB2~DG}6bJ1^QoNB78>e5GLWKmlH$=9yF#uY>lR-{F!%t^;S+- zW5^lpT@A@d!)InQN}wBN&SI#_Z{3MJVITMhwu6l1_2EI%}3O zH<_$0y154jxrRzKlFZ%+BcO)0B14{H#>OxhcMu7e7Y9MUa0aGwu9a-ZW~Gj7Hn|l2 zYH!|`GcaZxbFKBbRS9e6ogHr5Yddj6Q(cMg%YG%f%ngCizR-)$(A^#jNMg>@^ zpFq+eFOZj_7BzPem2g}yLQwof2w8Z39I7edgOs~{N|@ZfUR`&P{Nkz+c_rg_F8nvm zCobMS&LRhKGF$98lScXU4(x#(l0L(7P&VAB%+Gzw(6J8+Kqn3NDAwJ8{)klOdhW@xyOzJe`sl?-yfQOln z=1}nZRZU)l57*$%|iN6OHfhS;l9zUu3wVgvVeJ0~|a7E^Z#w_~D*V zoNh)Ng2Bnaj=(g#&p45v}|#&fpSY1zyWp#&(Gh^^3Js?_C|LfD^0!t3pJBhII;nn)z2vka}PnNy@AV zP#_v~A#)Th07F0Xb|b z;*8_a;gaFIGIQ~#*&cA)S_|;w?;4OU7L~|8=vqQD*tScZ0Dq4^&A^Fd4eUzI33Buy znk?K6H4DjUIl*vYI7*21$|c_Iw)Gz@i$w1U#SQ5a{?4(KzII4~sC zy*G@j&Mv@E(x@rqmB;X?*fVRr3y_TS+%`z{fulnrmLFvq*sw{@LuJQs$2zYT7|GaO z5J$pH3!uITPN4e6z9Z{az>^Dams9!ws_f4$L^~;U8mb)8p&H7~&+k_d=x6xgq2!a3 zCdY8ashtsyB&Bc#w}8rOW9dm5HZrPu51oU_BfM&_6!U7yayAgzm*DBk%CQpa3t!j4mRK;db(VSo%pSgFlo4 z^7Ng4S3EUKS^lW}E=s#EwlH}TE)FNMFAw|jPkmJ7FOVut0`_m=>{E4p7=njP zHfL$qM0K7rNj-8z&P1UjuG)HxxH359yZ{$!!hW_Vmgq`pHK{V#M8a0oxBJ_*oMZ$mzKleL4E=Xx1!CU{h)& zj_8$&9WX zw6SM?lrN_C4T|{LKbN%KOjcKuokabB)fwEsskoDznQxrbW-llEFY1?fWy5l8Hh8*_Z6==%qeONvy7No_*|uGpuQA}<}% zVRZ;kF&Ld}uhAds!LX)06S*hCU3QJc7Lv6H`W=(ecQ>#hOQ!siokT)H|MWZ)d42>q z-1B8<{wgo==gMid%dODYrX%ni3H=Sq_nf`t`4A+@k#?e_JW*gUA|oUpd(uf2oPFJr z2FHqhDlmSBz%r%rox_GTvEqz;ZMCTNZyYjwVTw8?e&KgC>a(_%utQQ2)}PqhsmVaG zdNYy|QTa{{AuIZDd1#&Ph1ZqSJFW&>t7+*~kWHTkPCA?5c40xd+4T&aB0|32c+&sW zgB|vG&e}{uxm4y98Ydzx%=$oLeM4}mt?rd{M6AI0QuXfcgza=~8;$ise=|mC0aH(k z|Wjy?e=Fi$Ga%@V2fsD@pI}pr9}Q!DzCV zZY*9_#?rBen+M<^LE9vVER+AVgpGo8ze1&hOU|k1c2jN-Ot|8d-4}W!I}P~+YF5{2_3z8`=p_oJsy6MgBa9^C zIgaKf=^@&rGv1UuiDFb1)ss-5CW04X;aIn<%hIhaiH!LW*u=Zk-z5KOU~pj22)vtw zA?|j!-QQH1?xCD*JSTyi?mGbKeq~7|wD348T`eyH|H$^n`cWTx(Mn+l z3aKyg=$7ixoqReEjsaYQg@t%$W_%^24o7Y@=kqO8@IQ(Cs}d0{U9f(d>=g(dKAAYK z;)(b;kQfR+xl~vpD8FKz?%Rly(_KmQSV(RWSUD7)?LW0C4J_@Nmi{zR(Q^Z`pf91* z{lzUD9%VB~fuk2*$_rIAi1aJNTIUdpbefb4XhfT?is1C}D`u&gd(aoUBhC`QC?Ewa zA#>a{f-=AI8qy~ehsGcNO{Go{rmySt-nbp6sE%ezk2JcL{28`W-myk3_|+% zMSzD5DW!TonYQ<)wgWGvU^92iVhzbMrA=anGBG;T7`uA=q!|IXCX>w{Hd4A=TgBV8 z(W{m#=~C(hN@#^PHR?B|#?neGLuPNJ{^jBtOCkyO6aE8v z0bE|)9+!TeIv&fla)f^ON0XcQPStAyppP9;(mwsNMRC-Uejpd_+;7eXeX{yGG<>4Lk;g>(CL7L9k=gi#k@I;N|mE~ zen6oQaMn0+kH$fD3acERBP3?(J+QsL`3c3~G`O=hw5ID^tt1|f7T&|d35uGX21c<1 zMvS0rH*1UttDoTtrEV6?s?NHTfdIRiJ3>7R^Nk#g&eoQ|G=z!P9@81){9VUi#;i7w z&b?nf6^L!IO8ij$)4G6nj)NKe9i+XAtrg>u&O^p)*8Ix?H|hw)oRrz?g7(bOT&XEj zR0SR%wu40nKw?JYBKG=cAW*?7a+M2_xbK;nky3g0;6%kgN3-L4eW7?1(~B}!lYi{%cVl`Y zrq@J7*Q&HsNFhsYC~MMU;N1w(n0w6OUw?9&rmio-Y0}iC_`SO+2^-O2*zM5BDz+GE zcPCVUa63%SLLWsC1IGqPay4!>IHn-*%f8YhxNBubx|1dV01RGG>a(9eZwDe-<;F^p zI+vRFuLMYR#+dt2$Zs2{PRcldfVCy0GoUv1hf|$3TInJ?dbDYqRUKxc~6TLAMeoq!tPY`N{GoWB-I zfC_|-t}0jR_*%d8dXvdI%^nkp?-)K_6jEHZ`K&$MZ*~e~(&{xxHCR`HOrcQZ79N@7 z$v8`~oLn6ln_RoEZpa}UwUIi&f_0p%(1}|@Yn@9eG;~U7&+!Z@%g`0+$S5&nKu)Yk zGG6-)SREme+c_SfIe=E5s1L?fJ20tuwuN`XNxmIaWZ58z^!bC+H-XMUdRjOEwDP8pc1swp z-Z@{Y-$2XN@TO)b=-xL=Ocp7ev)zQMA#V6&Q;;4)Xj=9WpPn-mbQTe%W)#6~C5!&Z&Q{s>E)u>WY6<$QZEwV@(S}@cQ@(4_ABmI>T*XBtwv|SyCNF=nE8)f7_ zDZNM+!NEa`y!SD@FbA3iiQNE(`tXu?eO?jfTox(&Os=Yw)6-UK*zYSSiX)hzo-(V0 zWFKeYsa4`MIqwr}LMcZlsql%Qrw@_OlPZ;hpdaop4`hg7oiI1Kg%ckW!?`0)h=56^ zld2585t?H}@>;465=pB*B5_N@9OUtJ!v#?2dk+1g-x_fjc1Gi;+FEc|0?uJ^@}djw z2TDPJBDL56@+JZDQk=}VbwbnKm=vOGcljcE-~&ShIE^ zD>D|-@^BcL#eiW>Nh8+8Xt#EI`aZONtTigKBGycL`wL zMhBRH?6T~zU!J-+H(TqCGcFbvKG0+_bsNiyVyi`f-M$6LNIrV#YBhEwEXcegn-D4~_hLw>QAJ(X0&)TQj3yZQLLF72jA^(Z z%VLDckQF%7(8)=8F~9-#_02+=Zd{U(d8nfyxm*asR~#dWwu?Od0l#%8p?~9Il4qx4 zytBa=1x+1H77w%TRCL_CKT9k~EdNt5i*&wPoFndCnLBU|kzx(IKM6G7E}Q{!J{Z*W z2@XOsPV58$f)!@1MU$0$PURkSlD=J)-W!~3Z*AwaRBDo?&RkoxtS+)n)nvaa&GreFW^!6vtS_Y3_jx;LTl}^AD`wXxA*= zKS_`8$Ep0$Zqn#bndPV zCc<;ht5xI7IAqA(V`xZW<}uojfyMwpS0RR1pbr6HCzH&|t23%M%DY-@Z_tb1rTJ5j zz-68V(+vkqvUrC!<|41W&?+YtmV-g{{?za6;OWKe)^|WPs7>%aNO7+HF;RuVaY>3uWjuqaaEF}gH8|A$qs#|TtiNoU zXo@7k)7D2T!SAf<|Ec>~_?$}l_DFD!QHY)@OD~l_WO3qaU{e+o+$qBa+r%@Rn65wp zZ|DS^F1`{UU58aV(c-M@=J6dq{QLO50+5QES#BQ%PdE&AFg70cxQKk=p)(0V&uwTu zXBm`yl=*{!?_H0l;Z%a#3?3bTHDi6pjACABQ41lnp^~9bO<-y>K&zqP3v&xCTIMsd zEiTcah(aIN5uyVV9hj##3x4PnBv2>XD%D4UGfKTU=j!`xgokNIJrJomHs{l>Q_IgH zvX#{$qpKFSYM4^ou=iM|~-xzH!Lbqd0({(1){i$GAy$s~BX_vANzf+VGs@2G!a( z54896Ml)uJ1MXbAm_7|TOz82M)Er*bM_9x;4-P+mE+{;#Q}U(RVNs(F6H3YFe#<6p#8|amyiOC5 zB}U;Qmd*7VRh2Xdx`)hX@Q^u!r6Ae`I4);bQ*jg-igU5MWJ#iAl|7insi)MHWaZXv z2|AxDDiKo8sDw-eAHPXt6^blxuUdriy;lB6DQ<_02GMTcV}Uh zK!BXTy8xr|0{Oo{GCx{lD)nhhl0ec5q0*uYHZvep-dEH*bVA=TVSV8>5j@wt0A&{W zS2%5Xziht{c2Pbyxl%4ElR02*d`n;FfrTQ`jhWo<%H`p_*|#4MZ!PN6wUAzj@@VK< z0X@9oBf6h`qBNaHmMJ7DZ9iRv@f;OoiOHrsL#vpd8~(2+J9*a~ZhS&8c6=bd!jKer zi{0vVI`<}idSWms+YQS)5M%R;Ort(6(X(zVk36pf5R^d02z>t4V#EmY#-5eV?+%;3x-i z-$nY^KJ`96X@Vz~eb`HVgywZSuFtvHq~jlVf;z7T{ponh3Fv?X)C+9P7H%nzDGD>o z?dn=Zd#dNr4}Q}hb@ez``XE~wwS-r96dww5>Yk_J)Dd$WenrH0{+9#=^pf2HXHAC< z8^U!|W(!Wwj3GXzp;tFs`1~P2GHa>Cy|H9({h}hUm$2hW;D86xin+?RH#)pKKZZuZ6 z;3Iwo<5)8d6df=v`V26a6LeW3K-+pmW3~fmMlOyco_Y~sTksHb=~9*jW8v)O)VLR$ z+CEM>LTXnWK28;?1;D5L>q(s@FV-4H3^&bh&Omftp(1AuKaAj&;e(Fj&E;C~csrxz zatg;md7k#0thlE(QIc6AB@bN_sB8-L?h~>7pj38lU|%d4|B__*+t{Os0>Ll;>b&@% zQ;Ytd%k6SKD^mliR?myl#oMPrlp`|XigcxqF!VYK#K!-1{_Usnq~lQ)780nzY8St% zk*-=geDdL64~QuYnV{8l*CzYt&Ri&ThhB_$!}ytSyMyo>(=9j*Cu=8z+u(-RJ##tj zuB;{2r#uhywIU8%x<+k29vggM0(LccFR~8QdP-V1M&LoTB6U0F=4#DB@ z133ZEKwQWvls$e=NgFQQDy17y-ewXGyilRk6RZ2q391p*OweXZDhe)gB&LX=ggU*= z)EDW!+e)7aWOcdCTJjRIGP4C|*)JH_Cq%;sr4;K1UEl|cm>E2?~UVM z%-rkESy+>>b~8Er?zg$K8h4k1Hi?B?mm>Bk{7DX_F|5%cAe4fsz#SpNYH#mAfRJ4W zt`%-8Rh{TS%_PSjSRTfD6ltO|&fH}f1BohO=9jlK^@@}C{O3rxOo{p0-!1RsLCL-u z+L@WoMPji|EQc|)KsM%xb$14UXAnigO-6U~_t=Z@VEP?LxqX{i0`rz&vQj7D1g=o` zhjfjLbJF7l=iqWij*Ks4Y-ehzHn35W6pCdZQyPHK~Vl9O~d3Z`ff@IcdorhZgV42sI@Yt}zUj zm-y{tM#Haj!;A~19iqlS#V>3&D)K_zxaV>N$Y~A6XQKnNWHodpto8hoU_Y|nr(9ew z(*eyy{ezwQioq<`D;TjER+Y@lNm_H*jWf1rxJvo0m;+e1RJ8a%$pa~b^cZ2`T->f8z_0SH_2Yqp5HHZ zXL@=c8UVQO4f_{;ypc-Pucz4eYG^vq@Yo49qNhbf5}dshdkL{k-(SMPKX2(C6v2A@ zMO77M?a_v4R4TlA1Y_C;#P@b=S(W`!XVn#2&gjfz-g5B8*wyOU!~nuM zqg5XBH5H@S$0$Mq7Xx&#QLw*JE@{8iHvmHjp%#o1%SfNxco8Q4wec z#LO_?wTzfqp_aBxMLfkS;f~l_gi+KkFAY_ZZ+HAtF1VxLxzI&JwVa-@XFVY99>Nkg z^J1Hxev~_QBqkWR{a%%U5{B(LK>mj925)1{FqltSON2{_JdyaNm51!h*VFR&E zYlsj=jnPbs+M-QBiuefy4k~;P>kqhV_=a5&bY(+{sefpHdV2-fMPl>RUoBYAhj6G_r-Fcn{dhX<7Ree-v$}n&*!g_L4224Bm5J8Kk^oj*a$KdgN!+n z`5NDHdI4g1GCLYKaQsFw5pzy~?--KiTMwK#1e$7Rkd9?y8husR!(H>nqzc@yPtO}p2VasbFd&ffB7@rb7 z7B#0{aSx_Dvh0fanA9$`QqUXYuLX&tD5cO|Bu z$1Nb@!HohL7Ti^pK0vZFRS`eGpX#ii%NHEh42VY;;EAXRP$c3kaY}dS3+!bYJQw#w ziwUJC`LxJlN6M&TaJ7=e^fZP-GEMp1H+Ykgt1Nlm7|z|4M!*vKfcR2jUk0$Dn z;doTi&brtR18pg~8Ux*3WW%HN0k#K^K5?;-v|mR^W(|A#9L)D5BlE*s~qvu_5d zqxHGXx&=?$u9FO_x2{0lxEI%@OT5zZjZz*m{njxyfru}oQG zR0l+NLmV0P@@8$%XwpMYl4QQ&W<6j?PTRPhh$mLNorAc$&|52sOg@3wAwc}&+_U?4u2nWVxju3}Kl$Cv3mO2VW*nVg&szkY zCFW2}_CN~$iH9Cbbg|m^rCO+Pr?6NW%>wIv%Bzk%1S=LhZnA?$EDmhY2Na;n6%_{c zm4W7SKS@9Z9>4R{(g9_oLQ@u5;;={%?91(U)TTP%(H$RvBZ9?cvP889bYp716Yo_90R4_}WzSq_?!N6q$iKzS8uVzu z$hj$VR18M$^ehH59T*s@F8xf58UfmA64d#|TDO3$EJ}`8KNmLmV zHY}=b4Dt$DWYRuiVmD;Rh&Bs`f^T$8N@|_B>Kal*4MM|^FH8$ z+!n;|o2W(Yx;h=~32a*nq7jZ#tk`oF52?j&!koexESkP#xLN>#jU=cNvU94*%P4V= z+I=0p22k1*5l-r}xR*!6eWQ)C3_NQ{88U^jNdsn}BCPSf35(nJJm{ctPXyy;O}o?} zp1@)Me%{2ia`phsk&IR4lmJ}zUnKd)IC#P`9qwE{Ci;H=x|sh65L_xtV3IojGv`7l zJdj5c*+_X$dogu!;5-ex(x|gyAg>HT+TmpM$Ky1$wX`La^>08eRI%t%svYW4R_6X2+WV?&Ox_gr-w^rYEc<~#LaR?Y3AzHq{ zuYA9>&Dq!(&)m??>|p8J-$%DF*zE?k7`3F{l>aLa#+@`uHQTo0LNZ|b;2*(X0KDV4NY*^~5JxdCjq=?=i_tJpIB3s3CUz%BapxS*m+iYnH3c|{nI)WmTgUG*Zi|Z2_{VjBE=1d z-@xbRw&cpYvJdysQDa?C`A3jhwDCTO_*ZcFNnpw36BtU;raH)knZdK7vQd)~iQO&=64s^tZNd-3%fd3qiNK!1e|iPYy?k&K#@jgHGVp)1O#>oJpk^`<*N8kQZ)5`JhNsY3qmQKBp%{@s zGRqwz*z%E#{6!Fk7>+jd6<5bxl_%?;o5%U*eC=x}>St-maMeU~iKV*Zzjh3`}d{Aefb2 z`Q@7BQX*mno}9}V7mt!Ej2e*2@d5s_^pUy1Qm0&(0lOgjj037m*1xKGe#Un?JZUma zZkq8W&Y#Gc?Pi|hOviuT3?P@pF^FEZOfy2QwYigbvsAXey=S@{L+kt|f%aUk7beh( z=K@Szq0mo}L^Ts&d5m)DJd&8MD0vSWc{BrkMlO2}lM!aDu-I1p;|L_1!IewET0(b@ z{{4s=DGTwRs#Km4@>{oyO)7O4N)1jQgqlk5du^$9DE=1X+X9*>wAe9Vw}#--nM5OS z9tJO~(|#mcHg$ZS0&5Lxl4Dz}!>X_>Zv|;ueOi4}buxKbnw*yPI0q^;5BtX~w%RqW zf^mil#ER^9)lEm*Cd%H$Oyx~|WB^&hK)_4@5Ka0hPrJSfK|g=FSnQOXn8d`gy|h5i>49h zJVv*aV^e*AOgR3fS_9{D!(vB(+%9*xR3v}Ef%p3OF!gxgSDH*UzU%Mf*uRjs^Bf&I z8}>hvnMquE22zW(0j|N&er7JSG3q2QnK&ZP?|g}vgm1ZBPdpo;>}0SuGhoAj<<{fZ z$t9rC>p249WWgypT7L^{8pb$bOHXuMcJ-f#t%1n2;!D-~G+1>@o^g#^IEO>gxXtH! z@g2vESjV}~soj#uzDb@@=5yy!FD6BRRO~o@9WxwxOl^2uP-OSgnGtVcX>9NZHjH^d zL{%7$kg#0B)REhYK8_(~wwI400}NXPf`Gc}6G$P$C370lo~N>`n(}_5X3@Z7)};$x zcMWQV{H5F#!Jwqa z{H;mo1L|Onj_k>RFhFj<`6*>@dl(a4y}UM;2av=`J^05(RElz;JSO8P-`_GO>pMpf)JTBmGG99wX}!lgOxRxw@$T}lG{m6G?Kq8v3bgx z;ZZAAago`jKesgCE#V({+AwBZ#aDP?hM#a-pDHNcePxsa=ORQ7*uOXWLGTK~jIVW| zx1E|lVuFwn0M=UjH?l{!P;}Z_C%sbBS!RS7`mfJ7kV<&9lG_gu1K)o^^$P)$4T}8E zc4uZugWRK1;Ad(Zdl=Z8SVs16`_DoqplRA^d{Vb(AS)HO^c0VZ`yBC;6RKTHB_3B#q#fQLKtZMfkAFSygxJA3#n_?%-lL^DLE79Pdt~P! zp5V$qZ2MHbrr`g%!!3ZZU9?)MN|8O*I$di$O&8dRJO-BS(8`s^!)Fb_qt-y zMbf(Sp=Rb@VsO1Hyf^%s6d6#RCRXKgWK!S`d34y3;q|+LeBl!%q#R&OquvOn#w#o` z{opaE8it0I8^8Oke7;7eyVW9ea+(N0>4ordI_v_)B{}x}awr+DY}k}6=<4}s5Mbp> zt?7QAEUti28BD*~nlKpFr;GYyrRIA)JwV!l;G&!48!%p0pB^9C!fswghITo+B`-HD zU59q1T_9LMUvJ1C7Yyy?fD#QG@y92`)9#%j)+S`$$FL@3{5M(MXccYK(~nopK3}Hx zZ<7PnhVRWd<4j>VHJB?7WYGDD`r@a4gcQOj9k1aF1O2&2;;VxrLuhnI+a~F*pRDzS z9ja)lxb&i^N4O7u^^)WXd*yG zy8%vUBZsG-Zk)r%0WjSP;nCG#|D}z=j14c_mr7P?0rNLyKzTX5%k%aO4@mddBO_kN z?t?B1nb9se2dKwi{BI&pjgy1qKP7IdyhNlpsM1XUJ}*>vHyYjzVo4ix?&u|_73I4y z9lrofkY;r7#*Pv^Nf~Y(HO8LGe$)D1V?{Egu0b}a0mqcq!dx8ri-KQkNuJhCSz^iy zJHu52Xjy^Rl~bGgqerO~0K&7;18`^2h&c+KVn4n}>&b}XddBp`h#uz3Zf*!k33ojD z?sAWxZx(eG6Ss2EOZv&!5!<&VMtZ*2xs~;R(9k`#%W~FpAp#uMN zpw!^0p;dEA*^474v~s%fU`og{w_a0WzCRM!q(6(TJf?@4k`2}yrp-U7gWh!|p+I#v zBR;vk!f*!UqBHaO>h?9!ty}d(ZFEr67+n6C4(Afgs+jB&(bX(}>;BbFp^=YPLS zlX#{+J2<##50!|l!uDavFX=W;+aYV(z_G_%Ga?dJZXbU}MwZO+mxM4opN%U<1MDnL zsr6|S6JP-B8U5sz(<|k@?hHEnKS@r8e}U4SUBSoiyx@vW!=K7JGCB|`iDX?X8Ohff z#)A5KZhY@@I$$-K7#KoL&4X31VnGK)gp5dR?XjLnTJBy)**7#SBD&Ov_&xXL5+=nd-<|oIxl5x=8 zTlto>8FtBVF(4>haA%W^_jYt?K6RH5DNs{({u2kK?c=)Me!X;(!QDvwh)S5)mNCcc zxJx-#*UZ8EHksaUUXedU&1#qjO+6o>At;K_*EH`C>Efu$0c7(TtJIcRPfkEcZsDm9 zk`R9Sfi6UeXIDH_|7>SJrV9v!^M&y0#rpA6Y7ns@FP|Fs2v5`KPb-h#*JDe34C@qI z*ANbo*C@GyGMX8IUcpsVIRG>aZnyYMJZ)-_Szg}p+8CcF;`{ooV1Xjcwt0T zSIFUssk*10W572PU@F&8G^{cPKJ@vO*yFHFx7tNo{sy^6sDaLRw@a*)#O_N>h3-Oj z=!5IU_Nt~r4A$N?G)KyzVFNMKE8+0ZWSR7L_jBW;&qSZ&!Ff<-cj|q-c?n6Ccm_G^ zy;6bOyRq9+zBG?=`3>`Ut`w)Owk2t+`AnOxgMFO<@Oor)Qnbl8j&9D)PNVs+pcOjd znaR})BkD%b>Xu6UzBEa3wy;xDjn+`0df7xkO&zHEHuKqt#BFs!a3oi9==S8VET651?%S=a59TyQ3a}m9NdKrB+(j)m z!8`O7vJs1H*K()GbK@B^G+499JCB}w*gRB6CauX{cbA@mZJcD( zKMf}v85x=GAnF+RF(|(5-8*HNQhdMd_LE30lVmh0<(g37lt{PtB+!SLabN=T0JDv+ z{AKDMAgqG?n5?8{iFF5l0(W4)$FD4ECm5W~ptcf(GKv!WkF{$!;bN~h?>Br@T;X2n z!GTiVl3HvQCg_3b_a@l7*mBJ~O0VivAx;^!*=>UEZ&KL8hwSjDXzh+c!n_|(8G^)) zq*DMDL=tsNWPxY^6Qtm-X?X^uoEJ%}+c=3P9WzZ-hAJwFuTo0fkRxzcXn3cNy z?JbzM!sZdr-%T!Un>XC4%sYAuP?DwL4&0Xz4d5?;6Ek8EN$u+8ncvG0SdRz>sE`(zDmwAtdG1N|z{WYTS6l63a=fZejLb$GRF z&I7v>Y=VE;#n+(zQYGRudfPUuCVzpN#YG5qrAt<0^rG@z-H&!$7 z(r$=~S$QC&tIRK^(!f;H&i|DEH&AIua>Bs=sN$Tgu0Jr&LkU=GJH*Y;i8|||&Zuo{ ze@okl_?&K(X652RwyVr^Y7yGmh@p43XbEA0?+)3f${+4bBnmS1l!3)o`0GU)zEiNA zK4Q93L4hMD_AqhupO(&|ckb;P8u_krICA$QVml))!i;8Kj^V3ln2ZqAd>%_%eegq7 zEjiCKH;VHkJ2LtEb(m%{jetseE5JRtlWg&@5A-KoCaIW(a!eY=ovy^d2Opb_a+@1$ zI-qvJ0o!yK$$ub#2=gP+%+xu#48Uwyt^TD|U}FE>1z0CtWZ$Vtyc#$?ygp_ugTuij-7ODN=X66wjtv#FUqqamt-oIn$vtP$0t zKeZ8SND(WtX=HAPC7|bp5eA&ss9)B@rEZNv8;H|tXg1JogCSW4YcRkUW1CJT$7OPoj6y3j;ePeK-SI91U@QO;e&y;zR*|dJPW> z^z;iZ@Q)|*3NO;GrT5Vtyt`1!hi{G;W)^GT4P&+&*^NqVvO_t;AH^SH|08O}LFx`GG zPL`fnT;m?A=A!AeC_5^lN z9Xd={tT2>80vCeKnbd0C`_=i*%26?^%Q7-OdWkE7v?%Hrj6DngnsCAXPe8D7+!K8~ zi!!zeAN(flpyGFHfO`x_+N{heBOYowG*O^ytUrvqBb*#2XaJZz_GB=JeFEZe!x_@c z(FTQR1Tu~BnIQof{}=A#Bp1*^nx3B<_aeun23c?B`0uNY7*O%N;AV%v{!utI1@>N?gdBzlSkAZTpzcOt3XT47i5a zQb1ntcQR;x!?lCG$Tx1!wHu=LOXP|^?;a=hNiQ%kj^@_t-XerP&x>YBib%8wKZ&*f zUynoK5RJYnja^j5G+EsY9Oe)UFx66$%?BF`%#k}$AZLp9E?qRexlh6Rpu~hk0<3S3 z^!2nG6!z0Z(29;;6UWyY<2E7!nD1MW*@S5X#(Y!OpuvYe&@GZI!Sy*Xj#OY7RYaI7 zUNQIKcs&Cox7)hwH6dt9c$j=VW{QscDL9r3E};OPM(i?lcTs$<6lPxFUme+EfT6-qdy1+}27x&yw(@-*et~0({DkRLqrrgBfD1HItVIj6qfZ z{v+@Lf&P;Onhcw!){HzGWO$Wme%APT&Ai=g6OIst80Ibf+Mu{|V-pu21-m}V!g$UZ zOK~UEpF4imgT9od4-c(nUd#j+>2$G_U~8ec1uv5P&IHG>(~~y87|?XM@Dcrxx;_ck z)$MQ{+PT3ww5!*F(%sqB8iOcM94|$6b3-&@oa;#IiAw;QBifpj8@43X8bznW z?n)a3=RwNu(gR;j8XH5spV+rq##1ep#7F;^jm*nJAegja_F(y^dMN)v_zmpJ$p!28HBHDB0(F0u1yEw z-BO_W9!QGeomb3KVn#gHUx{)D6h7*qQVK$Gu7Ugt2+Kj_nX6e7$BkP&zaXT+NV`uS z)eXteFDQCPC3YqY%9q8SKEw*#xb$r3SR#n5G&5UA$KiA|THEr*-#rRcpLhN!1%iNH zcP>{gJX}lnfEtJf+n#ifP;=9Nx~vHQ6{3rxb7!v`@EcIc1~z_qW=-h6HLQ1*Hg7!Y zxSwrA&>k`m-Rrn31SvtkvQbfr$7qvTz_uFodmPabeT`1~0*or7s__K?=Ey%%5+k{9 zmu1kES&E9U6)lj`6OKLJz8Qdl-T&qL$0>=VtZjJ@6Nm)OgDYJ{2u5j{+ElCvo;W>q z&&+rbq&LV)_qJZE2SY5K{*4q54$MfA11Z5TV1t_)JH*jF>&;O=mC7$Hdk($$p>hk4S9Pv~7^D;8ddz9}zV-`7Id-Z0jfVAd@3Jd3Ym^inySv1Fx&Pxp8f6{M-Y0(2TiZumjpG$gUb9|HgIzVqKUqK|gv5Y@nO41wC zXFNh7wJ8wfrGQg0nYZ{of}XOE0@Dg(03258id)Zst~3`|U88eM!gmBUuEKVJ?VKxC zkT{FrFh7e;7Y>eiUp+}$6W2Xu*9iF(VNKv3gL)9cM|yNw32%aC3qvUwJC4ZW02qqG z7!yzWUG?qezu((OW&EpLL5#dOHAWJgbj*dvH5rb>JvjjOaM6khDC$;uZINb8+>sgP zrHEY5VeJ8XXCh(qLQ&Zg>3`&W(^2=}(c50{9}DSSRf%8*SmoG)F=(y>34GBT>>y8W{5^sqLV5E0skv` zIYs@n@@J1LTDR?sY3$B$&XJR=oX!O!@1LUHv<3+IwKid`s;*8YSGc|FZ*?&Nis|&j zFfa~W@5H;N&EYyPL+DUAy{7>!?qP!KkV44I5aT(i zsM36KZ8-ZlTfQad%A^TKy-^-oHv2cFrOoXIlN5qT&VJ=$a<2-)e=@#5`^n?F_+E2a z2jEs+&AKN{5uYq{52t^kyUf)ZmDT(K0n|^t$xJ>U3LPOBek@*o*5pgi7M}8E3nCOx zU}fJ#kTFxgHfTO?BE(x;@8M_{eCpe3VsNw%ragVQ(G&F*DI)D;OqslpzRpU%M>IrA5UB2FMlyqyv^ z^x4f@DMPb07y04#ymq5dmRiw6)J=`8i(B6Iz_E~f_gBvdlwfNyM2dHWhFT&IR1KaC zAA*h1J~KJ@FY@QDXwVb~As;`30f{lt*q#5nCO7F6||Qjd=f>b^enL8>xwn$s{2&xmwPz}Yue>L_a!of7nrARB_7 z7B$8RqcSnnNr71j)&;ym*stL^zREO?=jtBJ5Km6c-LY{)(2f?&bT;vkw;_>Al#F&; z>23CO;e^`b`ynP!&ESJ6dCMODG%^F&{^qT!50CZ8u}jScV_VOAdHp#@)0d3d+ioWM zx)t8v2Q^K^2)&sr4}&oUr#BnIg1oL@el;Wn>Z-bufQ)~p$y{77#4oFd;&()WiJ7x? z*{_%(i2D>j&38rRVQLA5`6@hW9#i8f@E|GbiZX_i-w#$ZBz6JayEP&nhUe=*Jj>a% zbWy2OWONp;H{*s9zkG8RVl8uI|JShrX@2)`ADX8w3!mssgVsSGMLE85;A9ljDsWMq zv6*%C415Wb0a=CD!zr{&{C{+A zz}V@!U}DE1Q1_yANyd)k5v%i+i{FXwlG-7l67gTke4obiCG+``j#a4NJjH3cXBd}? zb^vf9?3>RN+cH6|zvMqE1#C#3QyuSB0I^1~0FXY@!TR#Z-g<_Iu%(QB)LdaE~bmh`k&+EK{=fzUj)rLKI`jS>rgk{ydY2bF^@ zQVQulY8N0ujV#lr>lI7$QU^gRKcO4(<}`96zu}H&)mI5s=m{Rolg*lRh#oxbv896H zN}YC^e0oLhrGImpUelIhU)Evxm7PEHF}8ID_eEhD8<6LK`raL8tjEnsgU;vz$3ooup=G-2Q$(E z=yid_M=sq>Ts5&0QC2%dYf;X;&sGnP%0?!N&HTYSY#H{+p1ac16{T{6i4^B(uVm(qYtb% z)}&L3maK^ya6JN=Yl;}qtm@j4qHK3fvu3+^c0d^i4a<0^o^_y3BfVie8nXmYarYf#FZV#!?nbMyPP_F?Chy z+AC)_(z<AnvolhHS*cRM*S~7f9eNpm@)?_2(Or z`@M|Mj5w#+*6T_fkj~8AGRyc~X-Z9}n=4k|Us-(>Z4=1R!=pjlC$G*7SWO>H%lI>h z_J3f>u1a*2WnvWK(7zxb8}(xPWNQR5pYM-IIa?S0(OtdsIQl>t?F1@+AX2(df*F8! zHbo1LXqLq(0a3-{0&pU|ureC`K$_X(r8aARplz`GZp_%4q> z;5>O7quJmgKuz^RLNP@RUh^9S$r&cfOU_O#4Aokk&^xRuN6qc6U8KI18UC>~~koK#iM zdAWD3ugVr-IYrnG-;t@P$H+c}V1pnLaz{|Nldzkwf2pl)I09>Bg@Q=5+bvt(upoAT z^>G*|qM0<4?-14}ULK}~nOIWWVayh9)DS=|vReL3XV3$cEt=gYj6cp&63wN%BvI#q z!S6FkJ2xgxKgLRY>s7`L6_%Y9ke4WZpcL<6CbsP#<2eRmo0gzpR~yEV;Z92yV+V27 z^gX+~jJ{vZC?_z4V*DX+B=t0Hu6qk~Wm9>^5z+3t!d^@~G|t6@MO!Y1LNO(oFGdG6 zGJtC$B0CxXmS=;7ybmPsg1l}BBH4pV=-+C<_IxMS2tFO>|DK$CGb@n3WI6&1&`_XX z#>HFcTd-U@vEdsaDHB7ZJ4$bA(E!DnvHZ(af!x9f0QeWSaVcf|_~7nGK2Yf-^%FE8 z`FQQB1C5LqLU75g*Ix=@z^N0=7zya?HUXr?A3Ogl40C@R(f8;A z9dkcnlFV-`9bDQ1NL@aAaDJo!T0=Z5nphZi7ygh{e<>wy353&?$uLlaDu_K{kQG?i zLPg9G+3pM4$j<*YhJ5qXQpx(pA0}sNDuG#onG(>m8K52a;5)KJK+>ZYLZ?>dg9xO8 z!hj8jvAdsNEyDxjfqmehOUQ^lMN#xgb)_JflF}Ye)Ry~TCqFsVLqg89I~3(uZWscI zUK$PezD%>tL&yFp{q4iDXI6$`amERxFM&xGc>#YSW1om;KD{z2|1_^pWNf~4%wQKw zD*56f5;j35-6OKOp$taIOaZc=@6=iD`g^=SZms&P-mvm|B49E=%WNE&qo}d6KScrJ z-MWSjQiA~}Cw4zh6o5Md`3@Megp=1uww~Iz!tml*Tf- z$Cu4|4Ig*u{Cy^f_K`f1W4`A{t(E+_f32?!pu2q?Gnr{oj@xug!OLoZV0<5L9-Sn0Bk7` zX~vV6k&^23m`HBpWQFaV8fs|ccQeZc62j3JzeA-7hgA1xe<)-K8x8hqQI>eBh+o1m zeGPWby>PZ+JY`<6soLfP#;o~2-lqWNpyo}(ySfQ*4n6ofKSH`KDgnTT@w`F{jb*5h zlWyhFOdk6!Z7L?Lo;>+ZLN9idXLNsDM5 zZ6g@zJrKggVkw!?DSe8vjKbn~QzoT>e;+gpKWu0%xl2I1bWI(mJYslk0L7;YDOc~= z3ns2JuAEJ@6R)hE3LXgQ29PX$k{9zLPik!yN?qo<%x3{#J3M`;$lc8*nz|L#^L?<4 z@mGj8iJOv~7ZL(>e2LOs0o_#Zwn@9^M)h$<{^ZlYW7Vo@+cZ>?LWo$#`2)&ay2ddc zxYTggsP3j!M{F=7Z;vy%k!7QAU0u}fK)fJnk2MfJt;xx%!4Yq6AiO^yCAamd3ba|H zJnmFr#0*ETSDDEKP-6f4|3JE&waSCeNiUBIyarzTKTs7RNi-?-I=sZVEFK}U84F^n zDOC}Iym-m0;hck^CfM z$rqC+rmz!=rneN%@93)k1)X%2$$Credg=uP83-tg7FGElIH}B+`?1C|lE)h#h|er* zcpk4j@HbV(@lkao_0=_-R;P!(*rM3$hE9keRNhgPcgs4kX*HNG8MltNqid)l)wO*Z z8rwHRh&8;B`De4Yz0@{m%o?GM&|~o$7!!hN`BnRR8)*7`v{BwuXPBm&>f~b?DD=K$ zQzFkmA2evK#HzQ6Kn6*Vu?t^Ls%Bw5Gk(aZ9xAYNI)`wo>OfW_m*Qvp>X&$KgijO3PuftRsx=2E=BYqwEXB{7WYnP))% zysL(G&LWfdirs=biov^EWFVJ2%crhmB^xU#VRor+*adn*0{pLD!=oKTIEhO9(Yc0X zG4dOi2MRvU+}^vpzKM(!zygxe1Q=aFaUd`yh4O!4EIi8LKi$Xp+u7=>Id*x62H>Q< zWarL!A9IW1D78*4MH5JJfj9KRWP_U3Qx*^xtsmu8pGK$^;N6phrGgUZME0;u6!&PnIt#1?!l$@B|(l$1!CQ2fdF6dpXa!ZU?QkIU zDyox>>NeIjYiA;VBs0y&oZBi7OQ<(=e)J$F-~*+1uU*w=apQ2O9m1H$>ci*ZBYe#R zS47BoC?TCjoM!-qjW*z0Yl|#D;Io1Z!bG0s!9XslZu!?SifWl0)yY??6Ka=~{CeFG zkO)UX6faPwKCrfM9X;?j{g$v_+*90$=9yGTMMLI;SeyOlye#pAD>DJbdm4Ud{fFJr*6`REyO3^=5c zgiB^d!q?yX$DI!BANwC`%`^nkx2@McuacDDe1Daln=+o4a$K~>W&0d}t^p6UuQE}+7 zm0`52AykLuoJtf!npWL{bHZ#{eT`teVwje#y0uc5$*%TysA>VY4qX3MGm~q3`2?$3 zOtSlt+j@%ZetkJDrCTnnjoKMc275iN+M6tn);LYFaLINYkgx<-29%K1*BTr|(x=jA zoGwIseIgt_zd|AgVa4Fg(bPezN4*4-SD~2EK=SLp3dy;6^_T%U%GoAsm00Q8q!pE? zbb>H{D2=*tS^PZC7m@6KR7Vq+6fso=Pj8Y8$3w>zAOFpV`s#RFaA4AqJ%~d;_cc%U z!QGwH_##}gPsK?ovf8H!tU_re3J)R15~5)ksN=S=M4_=mWsi_KVNv>9c{5%jFw%8E z2&Ko_&WtJT676C++Y(hxI9{6RU$M{>(gI?TGu1jIvn# zj7U`UJ`X=G6_row1zL*h0P`=t>Ti94V1=lQX-&EYLs;*fz7ON?OHNTkfCzMpkT8k( zy0S6aeGV<+&=E&yp}OO>wo&U#O@1Z3tUo=v`0QcSJs)`J&nhE>=Zx*6W5C zqaff4iU|O>sye8m4Ah899qIo>SGYjz6ET|;QSC09b{D{31nwkWCj)bDdU8eL^i~q+>T~Va!QA`#nN^tkQ*aWOx-rUi!;gt_~yYp8R z+B>;~H13ElG7~tWl8^L-5vW(>JWLGO^2-XEO;cv20I%+tp~h_*nLS8`ltshTYfNX( z4Q#vYF|Ux(@1U!wg?Lj&CB*;`xcx8E9RiyP@keb;;+SlO^MO!;!NoZtu5d3!o|?`N z-?7Fv7klZzy|(-*0kBSy9HR!im7-X3|Hn}57Q~+Ers4#*~jtUuOQ=P+{>vLF{MQihGC&dw$1KgWNcTHKGa+8w!S4B_~#@+5&6THbxIRxN6sM{atwcH4H#7XcWXV`yy zCZKiHjYj#1ixe105$|(=^EgE=Ek~J23jo9No#;Kd-H4tS6*GLQM5F5ng z<5$&1;V~Y|H+WEGL_smR6$xFeq!x`ZOun2Yr!&UW6NOUQ4gd|7fch<6#zu^&u7o3y zYzP(E;Pw}#m=P8XO+zcgM!B&<^ZBV4=YD&3Ity95Mu;YDh9e9;x5}h39eX7H>WK#+ zJaWOBK9=E#-u>tr1NRl2i6pfVkqTYqol_#W%DgT?S0#ju?Lr(v%sZz|nsW7k`GkjVz^n$RMJ1lZ1ZV8TXd*N|62@!T);p9UKuf^K z0j**w@(A_DJw)l)i~ES=(-PL;TU#bpJ=}1h z;)CqW*}_O(VyKGcrB0Y70zZ!IJMIiirxL3_=P`U4_FIBJEswx0aq}rk%#@0Qo!lp9 z4&aZ{p3hPg-rbpTh{NdKUiz&zoBd_Qn0EtPuo1Xa0}^X}8I=*RtL6kGzJf(a#c!X$ zNfqlAuf_Fl2q2Ex^i|U26*i$N>}v;XCE~T5&fZ`DP(2W@3A$XDPoS2-7>@^b_?MFs zaK1<%YLC075C5*D=oNu{U@R|c!nN&7V57FSE5BJUPOQ!_)}E}&6e_NhZ8_VDXv0m+ zs_CYCklP2=uk}#?AI(y-q_9zzElOLr+A4ishIQmYZt2VQZ?5l-*oL-l$g-1!!hhg^ zXUd$cC@G*%@m+|`!8!UZ#Us;scUqKBE{|08Ndgb)z+#2;Hckx&Pkn~uDx>q-)j2SL zpc9d9UlCN;Tzuk!t?KG0x+}}E7KS*dhYAH-N4S86k(_%L!LpV&gzqJ+UIDbDJnXd@ z(6_`_WW~!Lbc6BVIIZK06t4)kt(_(MoX30f$2{G5mStFqA|I!YtlN z-v8gff`?A9SJZ)N&J6hx8y+~Ok_T*E4t|PO-@u0fd%JhfG8LaMWmWBOQaAhU)U+-IB5EDCpN3u9{;2kd;S%DzQ5eFZyEH_tif5KABYE-z-lJnt<1Li*%tZgW6h{6B|@?&Y%DWN&gx)CjJ!q;CnBz$s1aY!`(uM8fj+ zr80kvU8|O6M_H|`ArU_O_X<8|Q$BsRpR5!Mi}EZlB!zFZ6$z8G zL>Prh6*#@pew$3#VgV4*2cuSZ{)_Iv5Aiqy@GypG7kPKH2K1?1E;-RYcHdxJ`KM&p zvmO8eM8iB30)2mS0Q;IJ6oquDvU(km-KLtWF(hwKfxp{02E9xg|=N05WBg%r&W^xpv>gVqMRGjlD(9FHj=@^9j3M>6^t z))-tRsf?#)?0bEJ-n8i@87(bT+Hj+_Z>J=Pf7lG17ve!Xw{31f7EjJ4!cX!I+x<5{uS zzTYx-Plfy6nPq!3SoZdQLBnf9TEGV;ysec?Z5m0MFPg?s$i>0=8E`fRh~29d&$uOt zV%HteJcwZz&Gr(N&nb{o!c&MyrrWQwFtxM&zZ%ygQ7&CtqFX-@cfLNv=6}iRgZixF z0jIXeLWSMEZE| zm#!r+Fa_E{=ndo}%D+ob;;+j}dO=9iNm7q6!=i=~m`}a!GN}H5!ho>RUgzU;jo=%oNW& z-u;UBcrsGwY*iLYkOOxSQavdP2DRc5FCsm$PX?CeK%}!CWB2MiG4&`HvD(5tf5t^M zoW1dn4Mw<;4(*`o+JITLC!dy2RxNZxdYX5kw^QFF!y~#M<%g(NLJW9#uGWe^hvSPu z8g8{+=~WH%)r48O-lC7P-_`;>5caWOL)6Vk(eAz=jO^xaw{ZPh-LOjg?cpH%=6zTp z4dwglON&yO3rBq7rFkV3q`S>fDn#!I2z{}!$la#i?Uhcp6TguBGhIR*-H4P&=V$kS znUS4broN@XYuKigh7q07iDj;zlDF|Kx^L{^7(V&^OES zf=a6Ybvgo|r$;!sA|h46VM&O?(Zc}ukTa=?B^|}Bw5o_NMnqy|4?LC1!a}frPNE32 z*44-v7=&i02a(#;{CUkJV3;e0-F3bEZTexA3vHR($Wk0cM9evO-uhQ~XUWHv>>?p( zlUfH;Otu{Ht1!&Fx^;dR{|h4<^v;cLTnFgG5kUsc6A*U`sqM9P3VJ`}6yBmSJQo+N zQ?{K69|uaz?n|esO~EfIEDn*j6o#Z%HzmeG^FrfzyI#==g6)xD`pG{=&10uN=l=pF zf4qbk#f+gi!pHYm$dlW~71DS8^OwZoHq~QbVWA%21c9$cu|C#X{rPQ zJ{Qafq9xxF?LQx% zmuNSWxlNLrjDc`=3EP;o`Z~ua@p%LCyc^)F^lc&+RQv$R{NYlN8_j*1K%(_jeA>=S z&;J@c{1$-TaY7Nr<$&~*YHT<`rq&nUJmH;})Iney9TaUcQOeJmYQ;CAuH?Cq=7ZNg z^-H#1l6bRk%1;&7l7AWXw57(QSW0XKhc()-PcvP!<6+nG$$o=f&02|AlAhW4*pq&@ z@t89FUL(f5!U$D*TAx&oM_28OI2BPddOl-v{ii9$^D}F1v>{aAi*1s2S`!vvU;5BN z72s+f#rC*6%Byiu%r|W<)CY#3k-LGxV;3v};8W5D-Jq`p065l&fq1P@ z-;s@^HhRE{!ck||n?|U?M2F_Se*Buy*~Z}Hrt~Pg|7Kxp!#6Ov>+U2Da_umwERpQu ztmE;3yx;}_{Ou8GOM~~xP~f+J4jg#-NrBK(w04HWHVIxF2iSF*e6Lrdsu>a@pG8Cz zKLBA|!CFyW`9PTW*zAtl$V`ht4?8-tbAcaZ9sq|0xsd-oWu}a8lg8n<$K|;w*aK}d zKUvsMpTR_lDy6%itNf2n1_uNFC%g|oZY@zvW;WXcWqr%n)3E;2!AcLy0i?uTLi_rL zW(B@Pw+NyUP&{hi4#i^8o=-Hoi!N2M|0fcXl-AJpn z@IfiN34Je{1eZ0b!Mt#PY;}J)C(`kp=$f7&qZktfSbNw<(p{^Yt0;u9aA7Pk3&2Z( zAuHupuc!&rPHjmQxmKlikT$vlCE8uXJoByY1tpK``QNNOS9!p&en)Gwy-G!Z6~!^t2a##!Q8hyx`~r z=o{};H5nB45Yv3LHv}hp;~`6eKyaw673*tLgnPa7)|L%#O+skr1Plobn~@l14%#GQ z78r`U%=D+X2@E5x20?2i@dca>&<|q{z;W?3{Ey@5RliCz4*UCJl)ah@8u6ZN7WYUE z=$qd~pJ+;31N3*KhKQ$OA>)nMQpV@M0VYOC*I)8n5+LW{6Rm%^q0`_zP=41wkjEYW z2;0+EHX8x>1SIpo`!#vMYpdq+p}48zoEuqwB3%e+&|laX*TMKh6Di@&{ey# z9{O0$&lf`Sosks?T;+g@bWOq6B@gcRc-90L_;5y0hq=Y)Y_5SKj2vT$6S+WGka&lrB~**qmkF&Ih0R-oE; zV!mDK;|PI%{X<}sg64Z_;s1~^p#tJK$&Db=guzv2wc<@$Zk zMO>gvcOx$910e!adS~8i*PEwDav0{eeb?_A0w=hyiuR=vvM(j%Z#Tijt>`>jIoSKzVRMtEf|AGAma$+x;v?fMWiixAJhwtDujZC8!#`O!2v0_|EsYNOPqqAhus z%2l6(O*%mf_>i5qy)G+0x}H>VB}`CF2k4a2K}O5;5=FM}-P3RahN`Tl1BhjGzN}iH zG^C`aF8)#~g6BsS>}uhv+S7V9%>yD!X$W_2bTt3pqd!+MBD|%)!RvVH3ENZ#Xu%Ed z-*r=Yi`?!`AG@UXwGJ_}>J47jMnvM;YZc&!EcdxnpvyUFl(-k<&}y@_+i&}MeD>KO z+UviBKK4ymt3scBgaBm9@#oVP>wmAxYTx&}mR#>+phd1o7J0fDzRBNSSKx$b z0#r=P_B#vofv>>lwq{{3{C!P9uhpg<=H~2fXsyz`d9ktVcFe8e@AcTmB*W;#I8-d6 z@l~FWOGG--MFfb|?B}L!QTefHb=e+Mn-Iz?IV=G~OG(o1oI8e#A7hcvShO?I;Nd(} zBL*p$L5m(HzzXa$Ls_+b;7l*`d~=$_-WDyEu7qWyCmSy@IBpGL8iq6caINY{xa?!Z z-CpV)pcuA?Ve?EHV-rBN%myQG&>FsM(Ec~7Qj9xu#xK*p$S6DbC>0&<5!!_6@TN-GyV?|}^rXfnqL$}eg*Okk`*rQ26$~|217YS1!(BgRyVi27Wm8T;=Ks~ zFiQf5pS6J4B9(f%q5c~U=Q|@OOIuy(T5Z)D*2)Fe=ztKCq_W+{<9QtI7Mr_XuHtDJe2JYh;YR$l|BIaA9PI)M)5 zk6>+@?f&mp9Ib)P&|6S8^_eH+k27AI**2zXx?}#=JKjqT&uH_o{5DHRn9p?TR9U|l z!I8^rp0BJEvO0#PT2Cl-?^b?fY@mo)q*_XuGulS?BAvjd%uyHwtLgeTH|EQt4HQLP zBd0`%ZPvB#&r}3_M697=gMM?JyBu>Qdxls+y+=gNg@kijT*S>X74u<2kXprC$l7eJ z$=qX`Srz*yFwlg}@7f}TOHn!3Mc^vbc20ySWuby)jwfb(9C7AX@D$~#(x&ul|2B&Y zz?v#-DuA>C(dzdjp0Uqjs==?z95F#=P*tsEUW{X0yfvohAz!31{$<1YI%a!|?Fr_? z1XF{r0=6c_&B+6=M?y%)Hj?vO2++fg_w`b$-phTzW5Rj?PLdD!EkJ&%2z57yc0$k(VA}oFOF)A5Ct!wC zvY(*S=wHW3sYI6V(xG%L9oB{1QFmHkds$YdI4ZF7?>?G$t({98?Lt{?Ab)W#$_TxB zpDsjBvccqnn>Nq>_&L;|7$FV_=}!SF4A`^*Y_srgK5@Hoeri)5xWArMh;EgFK=IKt zE8qO~cHz^B+wwvU!nV7@G3sVZq5DGK+P+bJzLO~G(!@&lF-2Z1F(cAof4)RZ&oG%7$fuQ#>)OpivMkGl&GmeK?A{E1k;Pik z@N_TIsnh+?m=72Oo>@th%h%3!4|0!@3Z#xn7~j2($UQKZ8FclURO`ZqPgEyxm|{(v zt(Be{BIyyE9hcf)Tksdp`jXxaU~GHa{GfMtUrKc^ zqr}M2wWLpTrfj%{j7)x|9a~Y9qL-OSsL{Ii;?Y%sd<0Aj6<;Abj&(83&3bWO8k#{KquHqJw;Hu_>e6N|q)Hd75a^P9)TRIYE8?TJN%#hHp$*!DVe$$sS{Y5CzUnt4d;OLZFx zEL?%tv1+00wX;q$%R$jz%<}9npyL{XQv!;}A^4%ysk6EREt4!BOWNjC()^K}&IwQS zAKYcarGW&1$Bq?IJk6h(@}c;VunQGJo%M;nD5g@|xmtBUX&3vzU$MqpPC-FkC$yEx^d$H4cUe{iYhrHWR@9mm563Qb?s)C0$E@AH5H-vyxf4sGrO zre{6{zS0(b1lfH?d$zSff&QYATASkh;D&JDx7$t<$VZIT*gPB6A2n9>5~P(`5drHM z#f~r)>+atqVf0Q&tg-J~+AolFN&o;ciko{_U#08H4iYkiS6+-9@^p+@ToG6eDZ1O^ zXDzB>PWjMyeIetjt2c?owQkEG0lPNB+qXiopn&LR6eeyd%ovg)$OFw5L%F|S{5yw% z?0(L-nw^S^0#L*<>K?^0UXXhk`POhJL4KILERZyCs;~>PAd44G(*_X$;TZ@H@{qOU zA>C?jb&0Tv_sR+z@IZ$Za>=JN@t*F*KN<_uetxa9}9S{S1B$d zV4My!xBPdU7Z*Bz`qrX4Lu^pxw40`~KX@-{P#z&VMpBc_YlS+j{YQ{3ieO{h++2RI z^nNF3tNNKD5vGSAy)FBX^Y&IFhqQyO$nlX!5xZffpS$d@%3MjxuO6f7wR7KqvEUgA z!N{Z+L+;9z%+r_@S2V|pb$|l|mN^(4tpLUWC)Jw<1>}$zL`JA60WyDjd^Fv{wYo^a z9(pd{J&V#UdyZ~Eo`c%3dQR|3i@&(8BiXJ;e`7VDerRtw!qn#C>SK*^hvUzo`r%bt z7d$Oa=rWyj|IIzp-%MtJ%7E{L%w+#5stErqR1=SnhQF-jn0vxi1Q|S!n(uPGe+d>< zZf|c!)4XRA~y>NIw?AUeD_r%8soI)C0DU+mnIZn+tsy1he3v7RqN1I*W))mN8^R7%dwShEpb!iK88WMx2 zRxAwE%Wv8#LxTEDgrTb-sZTKA+z;MV(P(=ueV+{Je zm0Fjot$1UXosF@}%Sj8V`4hMWeyHY}eKqiZs2Jd?(=b)6?JlvobNQvN`&h^*;j&)f zf0J!b4AOhVyO^1Zk-skQ6rpX+8t^w+q~%!yUGZKlpyY5|Z}1lMjRffqUmrT#c6o^O z;Xq}Fe)j7Z4_lMA%F=Gmln-6ul@AC1dXwtZW7X7=d6EelQ;fKRx8Bd?GH&V9E=zF* zyQJaapEBx@t|8*jGjY`Yx|szQei2j3{Aa!plz-FHnD+fEUi{&bI5z<_S1+ePfy{^3;6^t3_7No4FdzI>HHyMccIKeGLL$+-b630L0TGj{|SZ4%Am6vTD z89r6w_L2}u^7bXM7Zw>*witsMZ@1zm@}axzJv}Gn$-c!i30Q`bLOuhI#xk~#oxTIv zmW|%*wH*4sIH4i*3lf0~aF}%D4d!f<#Y;j=1&FU7?nEhW?oP^ra2*@Nq|v-`w2=CD zb9ZX(0=j{DgQZ>Nw){>@tYg5W_OMvuA43R;6<3~gv`L0wa9F$sr?j#ly@n2k8=pU+ zgn}OTiBq3xXuvE2n(isDh-zSs?PD$4smladatGZ2M!W1^0_e`PdbNL?qB!(tb zXAIh>t5JeWXE(P~$qySzE&X-Ob5-!pv~Vr{hHxlE5}1o?cut)`C`(pDW&m*7wIDu@ zI))@x0B(G5Km)R-~)e#lmqm|`b#9=sWv<#9KavKIi$rvxr9MEq#uob(N*Bx#0 zFmwfjKApQ5vu5ek{!C%c9lp<%pr6m21K%I1IMIAb(m_p@3PmhzwB+G~7f^1XYn zAkp!=fCNH9XAX;Z?U^3#w{UsiXvygVg-8}4wwjhlZZ0cH&voezFLsAdK+~ns|9wQ+ z_sAvLwgDUN3!u?r0xOiUKR;oo_|mx14qWlWVwGyY^7t1E98~e*yh%awY?^E>kYpgm zF4F+`+g|{69U)wm!s4AO_v`oXS`Tn0kbc7L8pOkr<&OVjT9x2$qNw%r(9zi`)`4*p*pc)ZbptgU?*QMjBJhUy%@^&#p^b}gFPE>{(pip*h+<(nFeSr z+zFjE5^5f8Xg2#AG)z}2;fDUjVK?=nGe8%)-b55kr7p#Ysd%1B3dtfl zEN-Ski>JUi%s*AFnyEoWxA&uI6U~YR^A$H8Epn4AEvN;F)B!>suQlNM;I)0$t+5(G zR$cbOu7Kx2MS1I}lKQ%V3z57}bOdBYsuv=~!IQ~9m2(8p>=I6W&R-PZ(uf_7MK=|% z)-IQ>1?$S+NgiV^>_fx+hO*+$hR;RYU`wQ$(>ZGW-R^%mgVJTp%|c5x;VcmEt)&4Z z*VO^m1@^aCut6Y&7rVv{?!WMk=p8C^oq@AP+`9Jde_DX6bQQJ>NG4FOQ^s;Ulm253 z8o-G`#gaV1qevgmBrCttH?Smp(o{mT6L+H$^#l{X6caL^7=?vrtP7K);Zz-?x+u$vEOf3$hI z=VNoXholOdhWSAq5=sbIi+LqqPx)qRap0X&sfRy4qqvX7I zkMsf5kwn(D&cC9XVd!<|*tH=DolJ|-I@j=*Gu%yAydzdY43gf}>30s;vpf>xK4b3DA^Q5^cJH-Fj?0O!+e}bhVtQfBB29Czl3@Q+NBCX%2 z3?h|Y*bTIR9YGJD+lur?gldlN=*US~QQ4mSdM)iBpF3M1^ zv73fMd&9+TnJ~`GoUsVZ*pJhC#Xl*lma_3OPyT#5`kKwRrsm{?fl0~w0FnN1yiZcwP0_{7~%;?rQc3-|LN;MJ4cjm zWw;+_`nGgRb{VT@N@T`2*72eH zRN5Mxvj+@?3J<_~bXh=2bOeb=Y{$!|rqz5xucvjkj+CJdcJiEh(~I6?RqH+864%s4 ztd*aolB~OJpG4A^-sPgDM7W}^LvKUVNwnM{oBd~;8HVD$Nhm)HUvq4|%iNLm&${FH zbLhqLbXlYU!4zXSE}~Z=VCai`-E<$Q3+3wE)`+i7`BKVQ`Fk~X{lodS&_>3ioG&n` zUsPi+)kjbF_Ls@cxFzK9f-8{Lh(r+A>Dgd^m>%+gi$I-11}s+;EfM#>YqzUO22QwO zp-u6NZ?A;}q@y603CPWvV(V3iUOQ=g*B#=m;G>nAD<$BL)zF~rB@39OgxqZz4}<~@ zRDgs&o{Te%wOS5I2F(}z><$Lk7wf8$4nEr%l%s;ExZJRyNVKkgMb^<*DSW~`JRdl~ z(PqUAB}J*;0zY9js1CkaEWA;+X57k@@0>D;K5R^^4s4V)32*Jv#Y`0Fa7HW3Q@6O3 zV{9nu4oRC;H(SZ~Kf|$;hVnPzRH>li6pdsbt1+5Wf|1;Bsvz_6y)(858xUs|$A6Hl zOhK4roT&+bNkFjdB;S#7>73BU0*OxneymhFW`kJAQ+;}FZ61iTPx!_cHV+t&*g@V$ zm#xmSZtmE*-6m=B2`KR)p&4P`S>f-<8Z;_a;awoAD1jUTrddUX?^eQ$G3lB#Znfkoo0-K`zK3{SH?#sFs z465vQkCKkm@FvM=O4ml+kVtJHuzWJ7cW?NORvOIyLVM+LIS9fh!9)6anD8f;@ss?l zAuM1c6#!AxjJCq>m`D;{F z3Xv-Dhx07Pd+u-dsOpBNL>=2bL7m`g+=oCpw-U7%eWHMp@t|z1E^|7|mCa_X~CuZ z4CxKw)&ApU@ps7XuFSuY6NWK??PJo)4oziSCV}7e-*y!R@ zCDxRJO{D_LMc`2XvTPfu>b2ufU?GwMGaFZ$dW7@9_=-@$KU~a{Wm@MPSEd5;FrL1h z)M~zuD6k7Fm%5ZAaAM0206m<{`*f&%Lg6AFKL%xzcq8g8DR!#(yf9E4>C(|*B??K` z9}J|pEAshw%hDqfUx8Fu>xM=rHwU8Edy>lL??u%?!gqrM@mH<|n=e;T2Ff?oum{np zy5rTVSGytlv&s^O6GZTgY;!jhAvHvSVmU`wSc*Ez*=qKMPX$4ahf|3R>O7*C)euQo z{$X-#S;i(>ft$AE9$}9kI7=38m_LsO7et9cG5Lz6KyLbBj@gyPt7{PmTepEQzSr5K zKA2H>IWi#K)A?pV7Ygt-a=^Xpt`!ez4y+<$4OlmtD00to|(D!$% zoxZQI1hxKPuYX%S+ltfqr1~!39tF4OO+rqr1_r1i(;iM(eWaJk6e%ebfyc+0e5YSS z3eZwUA2Ot>Ly)$`nW?%qMxP3SUzfoq;#QH*X?g}KK@`Zu&d{zsO;Rds$ z4Eudij;Mqeo!Qglwuavu>@PbFf1drni4&dNzq^?@{k2!8H5^nIh4HGN+D6;L1^AjY zcar)6l`u<$vT;?Asvl0jf3PVxuIOZ1@eRZ~t&$KEcTt<4*56Y}h+=4lvo^>k4q`@x z!XO?Ylj&3nqrNu@|F!zJwFwd8|L0h>WFBB3rM%-DqK|z^sC4U+wY{)}!_`J&FTET& z48`R2*)+Z_SvrNe=xI0&KEcr-`50xY8Os{014Wdik=NSvB`Qf6l^Y~S~ zF3{K|sCk;q=zN`qa+>aR9B}YN8S@y8*LXj%LEaq|gxXcui{t6HhvAN z-5Vf3@lf!?L)V)UkPMM$#IAfio#bvNaZnXIzY<6Bl6l#vy?V=fc_YreNA`hE_(Ds8 zi%F)p;7OTZDk{9>@8u12s@NQd3kIC9f5`|ICelbWg>?fOZ-=Pf(uADm^DPip35jiy@XTQ|S#A87VmGrRU&Lhku*n<W@|BN4X6H$SWKH>`(>m2=;8VW zBM8hs&X0xW(us~!q$UWm`7!_A)5Bu3HDEC(_b~VlZTSjB!?h^CT!ta(85x`s|I0ZZ zHnp$?Dt(R&6QOqe8z`0HL(yC8i&2O9#s|`~@a&91D|!jHs+rvUbcrkfqvrySUTi$| zW0am+LtoR?+K(zDNsrT^8qJQ}qF9lHEtYn5OUI<1jeY{1^0$j;a)=>4|7iJ=SWs8% z>17I1eZ|T*wYOsB1%aVc@a69-xU@KXd&c(|BV@4DTp=b=B6*|PZFe=B*ju!$Z)ZJ- zgS-4(a0qMjZQC(8j)VO2bmcF}8AWhZqrLXQTPdej(*z2SY7PZ@$Vy~%X_hr00jg@yRKC5V(*~EdomeT zP;-G&I={kr8HG+!zn9hr4Uu3(0ohHA$#g6ri{>3KTT=t$g&UX2uF6N`tX*qjjja z9wVPyoN04T%q^?8{Y0Aig@PmMvPI2r&43ADPP%)8Wr+^JdPvh)i)n~qK&k#Y&7p7% zWf$TjwOQN%`nc>Gog*a2m?9z#4E=^liP78SRlk@v>}Y_4itt9=sfPLI#1Z!U#H;Yi z8WngIr^QexR*wFGG&1Ap|eU^aYlK%lXTjDV2R)Uj?-u$J+Dnc;*Cml8^nN8Xnr3PMJ@O6I97wbpS%>Jpgz zqErq~ZKLt^4rnlP*lCoTnE9)EViU2+IRe@WU+c*mY3xDA2|vQhtqJ>CkJX^PmgHo3VFEzziP9O*!Eek!FW;f{N2^fi>n8X* zf@>EW*!28Le+tJ^b5}Vvu0?sBHpHa&I}iz17bFCV@USL5>kzs12jwbimHu&fiZ8D1vlVA53)777kURMeSPnsDzzF(F@1jKnR^bUE_Vkf6=K9yG zdHPP&msy$WUmD(o-1r|rviNrnz$gR?MR~5d_%$_@Ny7M|5zSxrlY^n)r1R_ns!1_B zn_W^O3vGU;u^OFU1T~bldnlCMQwAeRcM1p7BJzuYe#&VA(KGV;8|Ad*|XV!9-KZc>8q$G4e(Qt#-eBAcpH6x$Nse zrWW*vI+l# zu#eH1gQ3H|b8TeXak2;ck*j;JOxSK)lxV~|fss(O4pqIu>FcIhI_NnSazsx~|HXd$ zG-J7G^G4@h5GWZwc6tL>kX!@R^z9O22STYJ$5w+>JoRkeIycEO{W9x=_GINtfpF}- z>uaDx-&tJku6zQ8qWjPAX>=iz_y^!tE5xbQpB#g=sBbeH^rtvtNL z)IGsZOc&?E&rD60LcLKEQ)rGnqA&+gJ_GpcsI~U@BDQB~4-`lR$JTmTaVP6>`@;p_ z6Kdf`Vz?>SF5=^LJA$1hZ3^o3Ad87#-dISAl3{A7w2GqSTGrbEVELE=bOH@lzAYRx zN7fhDYL>?DAEtWV4q7H}V8)q>wow3Sn4K;ZkW_=zTPF+kSe9kMJ=j{@Ob#aTJWF&) z0bv^ryWTGuRYw@G$zGZU{yB`G;Q+ zW!9GXUPt@PotMq2`MeAYN3Gk?g&KIs1H4(umUXM*k(21~5SA@jFYQQR!p}+BQtvu{ zP%!J<{Hc~y^wD7B46eH|yj(ReI%;q@8yB-@ox*WD}G(v^W< zW3JB6H0rfLvkH?%V2slfWKKcmW%l=tBMe0qA;rwDQOKoDP@2gTYx_!KoX(n*7ZAh@q2;S&3@ z3>DX8{95e5fpZ=s>Rp3_`dqvajN^)fOF)IseGR5jmV@$FLyOHe=eu_Vv(oIOxnX~%k{Qzk3C%t?dg}r zFUKd5hKN&U#?pQg*bg^NQVTrcbcl$#$i8^l=|XGxV!fGqWO&8nsiYL4Gh?U{CzfvJH3qYR@XI{_*865x8KE|w z}oJ zaS#T~{xGiWiVHLm-b8x_nm$qwm{>_fheP;f)&NsKg|31~WV~T%u5#G72i^i005Kq7 zei2R2rTrM;a%(cn>U~60dyP)Y!fM_i-QerJ@$&Z{F@dEzy4&Yka(}F}+F$!4)0vU} zT*&a0dVk8#OK0Bg@jGq^G!)SOLr)yi>DiCaFBhDc%w1@&O5`#A5ZyqIIY?ngtHYHv zhj#|Es;n!(3T_Vm=YprMP_Ud{Ed{To435!ilRfta08&fLqjWVL?l2epV%6RtbTb~` zJP-ige=X??`{+{o>)9HYah%&bPHUOQ>N2 zUo`+yZ6yzlYCnUz;JIK|!#*VeNxk37Y;MifpdpiW=}hgBSwi05#w5mYSeF(qB*@Qv z2~oc+mcCP^&V@?Ju{@3iLgpTurGq6z6(Y8SylG;BsbJkz3PjX=jBWH|FiBBjT=(cL zpk1DvP8D8~#|>?7Dgop`dV}A> zKW3f}wq_kMW01=78Em4e^dPkex&t5=*f%T*#zF9yT}Aq>$-VObmN7%Y=$S%XowVZb zJ*cAXIiMwF)l1R<1!1*b|FQI0Kjevsd?>Xq^V9@a0b9_%UJ;K4I=! zb@H|_#gUG}OOYla+&v8?I>#3^IWOhPPxJ-t9ZOr6neHksrqr6t*6t~V5GBUF<)orq zdxriqnkzLLh^*!OE%v0@-n3jS2&%;@L1MQATlQ|Y?785mVKrleJEXVmZ5hZokQJ#& zA&R?tk6^}qJep`EcF=_o6Pa6P`iv=&`*1sFN@|^l56~pgHx$v%@ggfZQq9x=1vXUp zBH*NFT(cEuE80$Yb~1cRg62;uF^fI@zTG8Nt;nf0#s~PA0rX)b$`~uXQwyF5(a8-A zLjR9=Sb+vl4C+?3*q8fbh7NUs)lEYa+SUodYapy|Z6tvOu&m?S*o|z;7SYslSmq8R z>ohPVj?-1eQ3P`aBWc@Qu+^F$Hb_rOogfPdQc?i7adv~i`F3G+f3x7^J|$I~Xjgzv zX7ENMwk-3e^7&3$rIi<)wv)Ro?-!G2)&CcxX#283!j-)`C5woF$L*G28Fhzc^zQEU zmiC0c*P;fR!p@m?nW^Cj<*0Zyz~M+{mO1gK6;j(^8cUrm`U4))yK_O1H?T6{JV22b z3IL&Li7BcI0Y~4n-@zytS8qpz$(L7s2W)O{%r9e6f1oWS2}%s?T8L6(&F^}FGmB=B z$G3of`7Zljd^1#cniGg3h@u?}3Sz4LD0|%{QZIyvO{&nZN}vi%k7^u|WX~M|JASm} zqutRHY(IxG0Q2E&5g&n^@^d%{%|U|iTiaNhm9q=Igl1$j=pLHTw{rpM!UgTuF7F8AWa@wCWq zRi1VKl7#mH8G&Kf*}|3Tn$K^u0p?>CBAb#zC_b*^cmm*Dl1$(q(MdaJsQaSi%#4rc zP+3kOI9KE#CEp45+2LML!Ndj~^AGR$SU*tV&gy7{v$re9SwH}7 z6kRi^bYML2My3Dg*Uqu3jl{*)&=HO41oHtjz=|_lQvC?W^S)P*5JP{q7Hq&9$|-jz zGbG5Z5uBb50Mf1hE$qmGHYOU{HWmOt_TGGiO0F^Jd1J?)n)2$Yz`&gK3yT@-rkO9@b9)Zs!eQnNb^gWLOa(`!&Pz4PIB`0ZSt`J~}Ybqe-k!(rSK#aH|51@R`X zh!?vm61E{&F;ca2US=zMDLhtvb{Bz=+=9lylQB;5Q=(N+3;qhwuu1$KLEfJ=RixhV*_wv@b`%5?Q#4 z$DjLQ83Mn$nuKX(Yba2Xl;KyO1gfzm3rq7D(9*?5YagC6e!XMVxoih8+;+t#ta6&{ zjT|UnI$F{8$U5^L zqSN21D)Stq!iT*5S5?GJ;wBhWV4O~y%mE?6COe}($@E?Jg!0laanX@I<(|!my?PoK z>~xJO)CAz#prUF^oUh&$|y@*@XCkIvreM!byLUAo@B>ixA)%u@@SwR!vVfT-)Cmn&~Te4J9p2~6b` z-4hu$5mPH7?+|RjI~7ZgL?EA#T*Wq^f5QU8n;{6z&Rtt}Y)fGoBJh}6^5+p2St1f& zJfjg`Y)43y;D2mEl;UsCp?S~jDQYBc>`@Ru1KTf~N8lJmLbrqc(=B&sEg4iB)z zT^=RfOscS^`C0=miQW2j5;&6jeF?d}gBKvq#Ifps{4dwFi)6k~?Y#VOdYd5`%*7~r zn-nvo9nqP={v=``fpdpQPLWAdbR*G&lTjtI)5R=bhkk7s8f719H>GJ&C{!EJK6Nsnzlpj}j zy=Ng+vJQCCW5wWSro()1zy(v@WuU2;kUdntG|HKXyy5_NoDbY=$~X)#OP-C2?*2oH za#qa<(}iOoShJ|H>obF7=-czIoVj~9_mhLw7$>ixDIm*Tgh~(}@@co^9#P5ifG-*3 z@R6@pJ`}=bokxDXOMU2N0g-s^PSvvUOI{t2r3R4$Q@`($T*v{HZ|Wt$V(VlO>3$}BnKy@s+NR3S-4hDA1J=j7O_I3cQMK8UNld3r7I zU^u=BAgqXq=_W?LxUe_k+IkNGP$69AZJ#N>1C6Xiq?`O)c_BIv-bkVP z!(kLNxNfvLVkMOYY#x2q77r=k#uV@iQ+AW&o3QJ-)xQeoJ|1AE>QK#O_=b4`Ng;S@ z%X~*djr#8j;bWj+0JOvDer!>Aj!ml#mqROaV?kI)WybP;T4||mAA_ZHmtq!&Z3%$D z&OAR=IVDcDvg9mV)eTC;n;Pp1n$`}=zHC3F3jsvu)GXZ$j32+117qJkpO?!Zh1NP5 zY)|}$4+7pY3N)E}&F?ov_p8na75+_5yx%X2>jc8VXqc>cHv|`i6ugiTWVS@^ZJf zPvmq-7`{SM-NOS;U65?GWTWxsrYx(5%b@n&d)}QfWMF1D7Y2?HLrcVN=fhV6hFS-F zzl}T3IimNpkK}(^b~8SRU)W&V8dWfwGUi4RUU=OTZ(mCp%q2E|l7+ z_(L!5RK=yFVYpQmf1yzxzCPIgHH7gIR7GpQ5bJ9iv;AXGaAn&#*KaQABPAj*hBly|#<~?c4GetlY!h zS@CIrx&tvVosoVj1Btrm%d+A~TXCnhr6|;3k{lqGNYxAm|6svy*>rFJvyABRuK$WQ zF}eRW{;I*s!VRs!WiL-?pz?<1lgtOdG9kU9YDj)!`oTH-M816XjA|~OQE?8g0hTmh z9Vtv#A#r6ZZMFk}^3%Aj?PG#j+M+afhewL2V&F0MjhY*R+{Nmu`O^xx`#pNOcx?Tz zMCbzf;@QN%s_E#Q|7N%*--CJaw{T!1Vz2dvUzv2-Nv=1A%U}J71F!d@wFt{8>V+## z%UhctiNKnT3C;?mBrQExmPd!FlSX+>*`TfsmI7e zbS^{J%dA?{0U?rX<(FaI`$lmW%xhW!oq@K=9aJhdD0D%yt38dnQj;d8FR{|b$1R#m zG;(_gh-0z-v#TI=iAGZp!B`vZW>l>>cf-LVVwn(RKANNZfh+?cDRLDIXTdVw)MHWI zA=I^%#{d6Jr9X%9_bZWqVjT+u%t0WNl_8O*I0H>Ub_qaNVJ=mLVcn15O`b*=?)*L? zg1}#^Ro}gYEerJ`wWU~jh1?z(ms1e7mR*t@S0owgN8nQtAQBg6?uC59Au~z3Ee#Se z(Pm&@_M@=Uc8-w~^&|8y6(06T6&JX;+=BUzTqfcuhWx2fc1d~Yt8PZ-6;Hube_Vsn zDW=2W_T2$x*;&!JXV{l)0&~z>=Ts9(>ZSfkfi+^_AZn1MYqIrMs?-ygQTUxRERr45 z9dR9JoU3$9_$E(41W}~ zup;@vZ&ghHRYXnJtsJB8h`-t$dMWKaSeO2af$gv@G7JgDLyQfS0fG%{JbYpV|I03$ z+)Dv<-@&!$VUoLJDTO$576%_J@ab=uoLW4Qbih2uaO_f@nVY}+ASOi^O#kyEkT2Zn z?rfR}RJ|CRTD;M=>Z+Ij9IX{XMX7y4k)X>~=y*AF@vf!QM~T`K6N(9Z#}uI^w!%z4 z%uWM_mw|{-3gfbwKV6J8Q2RCs*=gP{C^hD$NXx$&(7|>1GDVRaqb{STHy3|LQ5XI= zs&YuQg?2q8&r-UOXoR48jDK4P?hd?ehy{^Nc=;p0p?XK&Tnj;NIk}e?l{L*w3jARz zvT%#_a^gujQ1W*{7A|;iwkG1_b42ziRtQcWBCBSbgEA@>HEK6?I-6SR>(0WH2l@pU=#vin%F4{c?0hn ztrGq5?jK(lbf0`m9&aQ+KiHmJ zndyp*Oy{u>r+%CSm%SrNP+x$slOV9U)gtpO5lcJfLin(e#fT7MO55em?vZC1{FF(z zRU;SBy?{0`!6{JFkkI+Sp6ah%SnFt9+_Gp^cC?Qe^!{PUd3i`&9#V}t+@P--L}4R3 zCKdzTujxFfsPNQlf=%MWl4uK^(0Qoqh(xvu)Ie(PGMF^#B@4V<&e;a{nuI+GP3gFe z+%e2e`Yr4*6h%7NqH@$?jSQh-yNB&Yb_JmKx?psC{LyqUE)HIVJg!x9p(#|14~hoC z`oA?GG$LDZi#%gNQMew5fQpn9UZVn@&B&5mK7J*9?DYN=(>XtpZ441YE{wrD7XAax z&70ly_f?|g-XTo-#|safU|kh4Ti|f(G0%RYT40c(u2@*IjEk|auOii|+(*SZc)@A}>)nr)GT~cw zaRVXIC0MGwQFCDl`9+)>GRswG*o?B0dD+FPf&c^q(2(Io(Y=V!3-Vbp|CP=I+g+nx z=$&~)9P1tT2WJH}bMh3J6c`jLix9*qBJEokzoza83t#X=0eFt5`kfDbETvZ3W!5`6 z5+lG9dZUSN8ipM?tjBA^qdR9q7{@zCxOC&)sC&exO4IGJaAahW>skF!Cn!pe){ysY z+jDy&zpF$EHzE>8sUZkYcih5;*mb6+;ASjaN=(kS%JHNgB=GmGtnZ=t)M#J`1s{a! zVNf}?eyqYjERXdT%;Rc$pQ0Zy&RXJRzDP=C)mvcDY8#b3wxxY#KO_#O9_bx|S~75VI;s9#$i8$PvH6w)Uf{ZEK1T@x-r0)hR~bgr>5WzZA3yV7|A5+9Txx zSaSEP`xW=@^0y!fAlX|>Vy#3%xMh2ANSe>2kZ^e7hj~Ky*7QS=Ax~aBHEunDz;oBJ2gV z!3JL=rW1krJ$6S-bTc|mF5t|Bw@o0_~ZcM8m$+j9cIUD0opvMRmG+Axrp#L=@gfW%`j{_R_^t=Q=$EtNA;7$ojao z4Azn?`C>>6u5+G-HYzNir)2raCF*KMZrh6`8LV>fDv&Y0_U|md4*4{4ZKKU($o&`x zYJXa4c`cT~Y=thZav}F4RzmRM03n1O!3H0|U$VcEkznBZuSJ6hRo` z+A1b47p@cse_J^kX+0rKe4@n3mEJ5?++h;OM#UPB9wIz26cQf|WfU_ECIKocN=2_F zYKj6EDgG?<5$*Y3 zo)8zN^zIe!9{{IH{aN{2Xa=N+r!{!;HF7}eZWljVDNZ!jnua&vmc({F)Yxo89?4{y zj!B*6JE6Z%+r(dOLP4rGTIOug9rW6wYd2d@Y;`$y0844&s$BInyAR;8#1>07C*H<| z5VSliqaQ*)$JNt{e=y@l`%9@TWvHX#n!wyW%zvhAH^zgGAGVra-ef!`E#k9=eA6ed_tARBYuZ1 zJD{#8T4M2otZ{TT4r4tI(5Kk(AO4wor79H51O_*sp72;^NfCMZ>FCa)d4AVNx} zrWQn7GqpHa5#>#az21s1eNaHjZKkkfbx<4j%&Eo4&7JnLfwC-Jh0~+kKEnM?q9_WQ z^7@VRTP}w?K-c5N#}26j}qTC7{N!4@%pIDi~YmrFy7XZ2R=A# zz9$(h@WaA&A}MeUn__nt>X)M7h|W*GDxss5@-2$ieRUL7+DT8|=x@;q74G(1IbB!#t|++G6v80t&ws@%0B+26GO0oq*P^QO z&wQ&QYXcg(3kE(|%Et=G0Nbbd9;CFzA^4PuEGk7=tADr%2V(XE4th71tm2OawwK$z zLMptvE^vO;I-s&Y!8I)goImIQA6a-YEs;*}B=; zJR|GnfA20g!0dM4NL?~C=C#Tc62;PzJr|2Q1mxB%oT$-kPiy-&6PM5w2?ZfjkvpYP z0NZ$XKHbRoR_W0`dcaQK})5@vJ2FjFgG6Ns^1No$_f zTwclm+Ty^t=n{G{j?H{EpEfpARM|&UyP{(huAB8pc$NE)aYBJatq~c#g+AdWCRJ|P zA5&ZHVnq4DJ8i*`Mk$n4e|WS%If6b_M*zQ~S*32?+`@8l->!aYIR=Lj2(>m;R%3_C zCFFVbZ%5>wWLQS($FPfxB$)#HUVvDABWpY{bF#&fhZ*Y5(rZt$~Ih0 zNK*>RyNQFpocRG7%>@#in^P{k1;JZ+$^rDNUxF$;<$?mse4~I1J>kW4TUk#%%(Ynq zRY7tZz)c`{B!A5Y-G3QuZCIi0rUDSuikPk>fc6_TPV}+0y433EBY;Q}y!za~ zbSbH+YVB&DZtu-fYM7z>BK;WXnUyg@MTwVJfB0x%t6FT18&(4l#IK$Swc^2iMh~Y! zfqtsD?@-W+96ri}t1_ETdw=pVS7NrO1`5cjb50pde(=g@d)S#!voNq|!Dw=mn3V9r zFV}AeiBTt)S(azPFah%N#`_jk#0`XE7{dT^_-qm99Pb5%$A_0ScXN%PrLrpw!=S1tR9+phRtV2!wF{9_<1U1OoTO4X5k{ zwrg}NIF_lJMG=?#Ag38s8a}!VVPBDvF8cy(Z-no|0Qwx-->$9N`DtG#-cw9nk)8%I zPiQqQ!(5e3LHHe~A-ZFXTSE2T6?MlU7+z&y1+yWXEYYNP`V`qEMDPJo)-rN%Bwc40 zHt)3!RoNwk%kIyM=7l)J4z{MD^QU~TjBlt~KSccSgF+qkGBTsx;$XWST?xP(|i;=s|pk%=DivBq9XH`l$$*Px#P2% z47)bGvT_9>x`85QmAxzCGNM>bycWtHq95Hv-3k+S>RvZas-%J>vJufGf!#__IObRn zF&ZIvD&^}3&m=J~0;7AQg|r-q4G~M;v>k^2BBumLJvaqbU{*pS<+oy=d&r_TsRZy zbG(n9Uy{}Q;1ud|T^Ln~+^ElR2#`Wv8#aW{PJsXY%ehKZ=Y})122!%Uo&c^Xh7YO^ zEwK7~6VPNXVX4DtrQ=w(y!S~s15=Si#9Dzrl)}YJKnzOValzaLt-iuyJ8Ru@_Q(we z$XFH7Z4OLjw(L=F4{=T>mQ23EMO^@4Nh;k@f+=lB|A4d^`mF#JqIS!WG)sc4!i^wM zk=!Z0q8qAipwufg@8#pL)3g+|WTyay2A8{?v}jw{1fyusv4&@t`Ck{IQw}I}o zu?xaL$a8;Kogpmx8`=8Mlg6I^K8qb>1I))pB*L$bp9(vLM}OxkmLx~p z)L{uq-IXy6-g+5iQ*fhA2R=)I*ew3fLB=%896uv%<4PN0o0(J&TH$*aCqLiF4bX%zP4g7a=q??+h^!K+?raicsLD&pHu z5i@6^@MZHIXBqNUtjEcB_m}%5EhFGZgqA@u2IB-i9!pkD;xeeWYpx#a2!zB!;-K0( z9uu7>0}mE6xipcd3w>{cV)ic-=3kHExs`tmLhiN?Bbb4((>|Jf8+y+zv`t7NYg47+ z*c4r^Sz$DJhpv6P%%)xX;Mj-VT68bZL#?WHy?cFShb!k+`LrB!<(rPe-Y8(?<-{a5DzoPc|2Ln=Lzgy zR-D~0?S>Ex)PcMu7LtXMbp_wCNHR{BBE?bBuHx^0No3DHUZ)g*jde%Y+D%F6L) z0*Uzu%ZcEJjLe|;_OzwtHNN|=(HG*WD7^qHnS%hL%}U6>_}A97_rA~^-3TV#CkjjR z_+l>n@*+fB$3c|;LNgmR+4*qduCJB8NA|RxuT8BcdJpEw|Bq`jWkYFL7)CRokSWeD zL}okvQbAu2_1v+T9aJouBxu8&|_<2htJ@2a%#cs7@X)NaDY~)u&!vG7Qk!d1HX^i z^I2^oUc!;C8;V-gx1}R6VW}N5K8u}>+l=ISZkgYU@KI7M9(&r|&{lG14y_|$!e)a> zR<}p(cv{O_XpL7%|IVsNT2G88 z7pBdI6sopYG6;z#PF06cTDNOX_aa+`9~j-vSMR#emW&hPawF{pkv>wJg-05u-Y|cN zZm5NDjdOG&?g*=$zbKPbic-V%PI$L1ax*x>{-mategy|z&Q4e?rfuz&V>f`u6n`o+ z`ik)*t=u=nM?~@=;1g&FszPkRBUKc_gt|L!jr)m~-L8hi_Is z1c=J=KDHR~VYW%@<2ggLU>3jX63bL(XA+hbjztTsJzLeO`YwjAQg3~f2oeqzVYe$e z;3T40Z60+)Kw&xM!&lRNDGsKp zh;dAzqeB1=RvQvOgVKHD%g-2AR5c8MVM47J%bw*(vl4Z1-k2p_Nc`(_F}ejS6ETMo zmQ$IZFhucA(sOTTVhKuqiaAGfnphn9C2e0hEih{?<^HU}6@jvK3%Yomi%+X+8@(P7 z3nEL5{z$tfwL-JiX$c-!D!Vm_7~|a1>_ies>$~WH348}XNI@oMQ!0@C#nI1jO?z}_~>(Ft4Y(_ zGo5#cmNWD!zyqRo6s@&+3rEIBcq6JJdUlqiQe60!d`E1#USEjP^~4+wQK;X>fDbpH zd$puH{~?OdzR*U7DphO(-rM8u6tIi@LMnT753gF|JV&}L@{X2?J#F3Zg3|-McOpG0 zf`dSEwwJKLPj-evk~^$RI+qPHiArvrgG9FXk=Og*{#NizZqg8P`Me~g0UPBxJQ!Yx zkIU?WqvTVopk^H+Q;QBKLN-`#B8GS* zcutsZQ#=^}?f)?yxOj#++d2<%PzhkgqCs%JW5~!2ARri``s&dB!C(69B%JzD_qhjf zUU@@S1jE+QG+ZK50f)r-144?n|AK-%(37grU_6)5;2QxS$QsnUP$ri`(QMg;o-qH4k-p@=s+B`PSEcT3DD4R2)%=M zjaVZ`%nAf_Xo?AEzr}c+ys4>JC(qr&> zFYXKa22{4IM`F?zd14^d4%jFz$$YLhDrtt$H;XZMGM!8sQoO8PQ;=B8t&ta{D0|7< z91T2RrPsF1ThLJV?clTQ1e;VGAYn&iezZ0OLwu3Sc06fBe|um zuecv{G@Ae|Mg~ONZ?fQ@q)X<`y8#lYivNOO692CP9Fis?S1!dMk#h#0XnWX9>s9SJ zk{L`~DKd99^Fe}xEJ$EDXBCs`Szg)e5Zc7tJScMVpK&)VL<4&4)h*?7c|#9aaB>QI z0W6i7`8R#cgboveF9H;?tPTO9`?(D)ncqp;vF+SD13lLa{QF_uO zr*!FeNq$YPm;0OmIo~9%b4QGb$Coz_?KCYY&xK)pNKUi}Jz5Fa)(h_~t z+SI*R;rrt-pSF2n!MbBheO8IgShK)!G2a~x{A4&k z*tsb0^e%9~BV6b}3@@Xqh7Y5|~63El9t{yPR9jFpQYWEXASpPqyBHdTtY z)H#-qC}BVBPY(We^+{D_nP+D(<-jjGkHvsv`%Efdd`{-$#6)c7W9Bf)vO|VXbm#&= zSb%`}+75?gXd$*Bk^{7~z=47^3`u2SW5W_HW@fnudo~PA!xn&mcYIhq%<}pJAzSI* zTNVvHg+5L8;E?&|+Z=_fkflGKXDJ8>=nUwv@e*8R_5B$Iz zbx0m&BMo~MM*nyLqP4lP&@q+|1gJ8hY-Uoa6Gf4;h)9O>N1ZYono2YD$^vrZl}ApN zCz#-*T;L@R`pG}Sm0P>?g2Jq-YhI~7tkGjO?|FEXT8CobV>3hvz;2CtVaDWiTpyD! z=6>=UQ(sCOuC3NghGX8ZrN}{MsX62K7SNom{5FFia`i28Q@_|bpi^fPLv7*H-Of|h zsW2rBMd(2;tfaj8Ya%mJZ;gU9mnxUbeQeEL67PHGDDXo?HAf{H8>NSS^MWc{IEtJA zUt{jm3;PdiPa>NmHsDa$4C^N)47TA?vA%DjpU308wt&St3iE=25PFAFU zUt3@U>QOq1ZvR_AQsm6v3$|kR%gsM4FQN>u;IA_H5p!J=j_DR|Lg9cvY06$_Oa!H3 zf-&a~glu`b@n{Fu5qrlo1y9i<_sy7wH)7fg)0<$$UfPb0sGi;O=Y`Biz_g<>oLqq7 z3#W00@o)0}2j75GYbv5vvJ57psd6(KyRv;EJ5)mmT~7yW4*@a%SyKRv`EnIH2< zCDyB>fkRB&&dJ@tXyVn68 zT?^GDJHkDBW9dqG^$lmY^PC`iSV?gs5)dvKYD!kvHErN3OLOtYE>aycfzy|$bEhPi zY`jQdjlY9(qR4r}2kzIBsBYJ;jAYRuEBeSn_q}8*2rH$M&|cIgIh-45mF=(Gv2+T- z=Q3#rVa`dO`5m)R4z9r9(Os;3M-M4^{zp?5AF9m=^aT}hcb&Rkw71ba(h66`!kDCn zNEbp1g67t-eH<`+rr4qAJEbt-X7SlK9CiQ(xq*6>*Me;p1x|RT<>qB(GZrN%#ZF`w zwl}+qkd{PTJaKm^cizvP_%G*_p`4Q1A&q_{9oACSehKHmVYmIpwp*w{>LR@QfeVgT zVid^FGOL<2)=EyK^E45HErD9P!z{`xgSLAUY2W1T1gQQReLX#%nhztyz!L zZ`Wl)Fxhcpk}uq#8eNn=VdVp9QAyn%D$eRKzU{9m`7Iw~;0|Oo#$o+fql+!#dWU6g ziqe-VBS^lyVqm`CnlvgY7a53BVV<{iR<+qfJik)zd(QbLRND1UEV45X+(3lyUEtDE zTACGfg8j3-;^@VOA5uhT2PW{Iz9nU-aYx z24D;A@=@lrtgql{ zS&n^H$hA^O58J0Cvbas-nZck@KsY*JS!=0}Tpd2029lxbzwC=Qyrsc2b+qH9oC>${ zZR)5T51#~Sypkyl`s zx%2}&8SaRHHFnKBXH^XwKD_C9rm-2S>#-PTB)JKm03$v#= zwZBJmAiDo6o2^=h2!pmT@)GKEb=FzQ=$eO5YgqbE#fNY$BtV0rnr$ZXA#i~Czxp0i zm-ahxeBtbs;B(6H4qdnCM2ovlqaG)xI|bTt#?2h{EpJu9c1X_$c5MWyi)dDMD-M3j zD)n!-M7sFC(UjdM-{fbKhV`fov;))F@$Go7+>JC6tfiCOlO})=>j;OIz2G z;iV*fz+vi4hNHXtUMmVLTJ!cg!nHO*Lf^wuh}uKEF<)6(LCA-7*qqdHRTOEaBnXJW zPx-e+i+1&Y=hwe~gNS6=p$!4@((l9zqLqnyVr*uoTv*f_FZdkcF}OcSE$3I24z3E z`+LygR4eJ0nYDihJM zZf*m@XSp7=KOX9j`Bn$~BdmeF^myFmqITxn4=5f*8&G~n`E6O*N#jo4YLqgnL<(aPe*>Ds0h2zj~Dc z7%1jV)gGmWjUdnCMXMTFi0@N2`VQ6q4K+;h`7(#bQta$qAwrG7LlF0P%3N?ttaeqU z)1751Nb(e=4H0xUEr5~uY|iRp6O}zRNSQ#ykP@J8ok)aG5+0$4+REL{_3zAOkx8jC zNt+ul=#uy$MHwjTx0GB#oIdm6D}`yGu-w~>(*WE+z$%bQfBBK%6d;rWOZ1*cC(~RB zQVg8gYKt}%U5z;#YDQ>@%He{+F?jU({^NM>ilWs_FP4znHn@98L?HjHsjJjvseJA4 znBWV#(n9KJN!2_03clqL4N7bi^W$2(=k*>?_BlUC>=>1LeoH+&<0|Rm;D9ZFKULH= zN&n7u(<}({ol6oL^0HYuSzqQ2n&zgDb6Z6d6plVov2n%#8MN%5#HJzjfv8XU$ksNJ zZPGN9Z35RSo-mhpTTze{e1Apr1rbEDVabaLT${@dzB{`~qcUkYRD3jy;w@buWkkG! znmB|K@k*bs4@%04T`}6LN7Xc}F^5?IShe5_I5{m2#3fmsjQOKXxc; z=ZO#9?7(a7VKqw)SH&UbsWqIx@f4;8yT>8MJfW_~Z`;7WZV6F!{9cGb){8z5@M5Ju z>Pa3vn0Saqhh`0U>$)Mhgb;@r+A(5U7mpzBu{8l*MDI4Lo4!gmyjQiGqqv{Z$(2`1 zAtP6&1G2b^B)^Z?zV-{5kITm*A)j-x{P)VE!s!f(GW`K`ltR(*U@$y@ zxv_sPtv7dr@_AwaOpvR5tjLv{AbEZ8yzM8VPlZT=-RVs(Pvty|gbK9Q@XLjia+#*H z-U(3ErK9nRlh;h`HWs`RQB&}JA+^*jr zLG`V*>uHA1sE&bwb6-)>hg-Ny+s|AtAU%h)IE))zLRSs&*04O&Jo9fS?XtW^)*R0hr=1D@U_{VJr zh@jpZ5;oUOz}BE3Y|pq@hkGsy7LFjy&uo}M^ae@Zz3)SoVQjB$!#Z=0a++LpJi+pd zK@$FN5Dg?l$BB==S?BIZQ&YHQkv$25R=}C~DBk1I70~JQjN+*Gh~GAUy9M$g+3oeP zon<(PsR{)3;Q%eSt=<0D+;jEbdhExi>u_{pBnLF{gZX29205uG!!9)%74e=(6YzbE z{76UwN?}jqX~J_sfY{(Q>|K5ht|vy|Yg`0YEj+IU!6tM7F-8=L<@JM31_^*E-j_qh zE8V#@@nGKHsJF{It+lRrH|wGN&G+A_6>aaAV5k!NZ8Y-SsJP@ER}+n96E zottbP8!9Zc1i=g?MZBOE0#jnWo7u-MWva-8eRs#H>9^qoI-9Cn+G;PQi4OcA{69Jdjzz>jin@o0Vy(*BBfp`pYKjQ$U+p z=f)oNOK2J7fGQ9}jy2CSN>xQyHt}2u_-}}$_FqYsi{fZ0MnuG!aI}wTZ(mO4EAIEA zr{>I2F%TH!AOwLA@$^fmwOLdQqv5FB9swj^O#~L#l}950+XVY-;5KzTK{tASN$l}7 zib>!+MPcCd97ah|v&)cbFLLF;zo1OlhqLK0}z`BMU?1oeR~aMlnuN zF~7rqVyAac{BMufo+mJPPHV)d_LpMLGrmR}Rh{ zAx>&coeK!Z_KUR;N^1Bi0z+DYGcSOp$c_RT55DC{M@~5{SDzb;QzgA*;2?Kpz1&e! zsVj3mfVt-5`-2!B_xC3BsOs90USeYDL);hQed%Rh#Q}(44x^KWAAecDoo(7k8GBS_ zC1oY%0E)arfl6dC6H2$ba;GezR? zOJg5&4);(=3dZm2wBt}?c2(0YCFu^2;SS>6>-iMcoq3dr+Q9CeTVi6#b}FiacqR9U z6zgGJE%v^xi)#ncaN{#a$r6|Q?7VWE1%RQzJvA~DP^a^a>h%@X z=`{_9Isi2R;y)`Y&Y_V<9`uXVr4Ra+ zW^r__T7>%oHwz|>!2c~2&jN_WbKeH&|Nk|9h=oJa1r`Hae|bNRzKYC9w*krIRW)Tl(n&e|8YQ7ML$>5+sC*~^Hu zgTZ>Fhdb!~hiA*%FS9Lv3pyLE!R8a?DM7FLTyC*)a)v>xsvnQ zC4Fia)#wf@%7aKG>6=tp#0Yj(488^q)pur2t&szBaQ zMB))Exvq?b2t!;ab=H&$>wKsr2l3s~%AfkFSOsR&%9J$U?DI%|&_O)acig@ArbCBd zf<7aHZARE5bn4I8&nZ`~(?skU_EX*>hAmethjTx##&iSQN@ISYC>OI{~#mJde>X=)9SC}S}astJwwUApROL1jXvZd@o8GJ56}wg z#+gtLZc_i!}B0qqfvr;s5xl+n=N2x&gI94vK8jo#?W(rQcFy;>!GFSC0 z5)geELDLTr3(Lk(Yw-nlvNU0f3VW;W96x-2R8m``nOg zkkrk(4>uKSey?A9voM{G!sDM$K5`0kHq%=C=9hg0mbE`G{g^TfJ3E=V%59^%k$Y$2 zOpyK;wR43`-qZ(U;r&jXSasey(CvNkT#<4t^26Jg3Lug@s0BjlHJ(sHJ)RK9o+2b6Vi$V;4y8HB?_ntu3jIRA7wF#U6FL zL4{4$urPsrnGtm5ivh^#jly8I6=3o|#%3%Ku7}Q5L7BA*`T(vhB8tm;`QbrW=aQs3Oc{DRe*~2~s$u zF)c+D#lLgXyQQ8Rbq2!qQYGX+ODh>Xq!Z^9ZZTdMFNfWq4U_LYB}npMz|F+_Epl+f zb`;ddYEa!yRuJ{Yor}&u*Q`71bvuj*V!gg-TU!__Q+}3E)R)6V#a^Gy3g4eVp-AM~ z(BxQa_V@wIf2zdNW)Q^J#2!Z=5Lvq-+zssG3`L`A9%7Opaxy8e)SuA>QM^#Fi_wYyhH1g zxK~D~1UMZ|J~T%k(FH#0{>`z1BA)FQvv`ID*SeQYj>}NSqf#7#z;@A0`T7T}JMigR zW}(Hs6LdOJ3MqCRCt&ik&zW2Gzqam!G@X0Fa#cva=W&iyHX3F=1N6-QFaTFCW5Dow zVnrg43!@1n7pQ6SsAMEWt<0L&#J7*?_VE%TeL!3#6=T|Y25xl?-2$PfZ$n6~5Yeo` zaVk$r-FUjZa{VC+dwGG7`C9u?INmKq0`3b=YU~Adk+T@?m~{rLL6H{&TzF5@Zs>th zI#Jlnx*ei|9$3aAdYg;iioSonyj#uzm^=9hZejb1qe-nO59)Z+SNq##yMGdrz97-i z-A2P5ERoYT^=DySd!8C9sYpf<2f4E+#p7fA6z(JaRP>=Ii-)x;Y5?~p{ktAp^g}JJ zTU*$(#t9%K({=3p#$u+*Dk4J7TE@?Ob8(L=)T~J+KQ2sMm*KFp*CfHk@^^P9S|yTi z@X%y(z^MwD*goFeFbO9O$g0el{tCt(fT9@c>XfBjFoZantXq2ZksjC1N zQ#_E=sSFFD6qUE-S$r;Gvs>C`A$-mV8gJ_mX zJsudDs!tm8VTZwvqZ{^ke~(jEti!Nvi({7Og%W$W|Ws+HM3OBXWsr68|t3*hxc+@o^ z2ZwILj0hZYjXeO^pPg@|;Xwltk)_W%WBWQ21Bah@u_?e-Rwcf%Ny9fK)U!Bw|EvSU9^ORF};5rJO%i?O5UYU=edLE%|y71${|iFz|~=I#PRGM_VPTUjy>s$)!BH*835t zo{+a?n4kRZRDt7|rrnki)-&cg3#=eHqgQ6n{lEzK=iy7E_dZ_j6@%hPN>JpP4Q%uGfA-hq*@Tzqn=Xgtqxf!kkZ*TiJ(SG7U|RRnRvwYF;s7)vok>3 zS>l5|bWI*c;PBWQATM6hqVk0@h*ZiZX~TJ`<>iNQIM6xZ|uTIj3Q8!*HLWCj1J6x~FGA;u#Q0;m>kFZIG+SB0D}s!Js$hhDbR( zy76sL-SC}RaBDd>LofFDy@L~i?GPcOhmcRtco<>eYbM>YR=N7|QiRz7{?n9H<=B&{ z(TXh-xOPlZo5N@MFkiS-jVKF%)HyHuxYB2JFXfzKzXgbJMJ!pz)qbH+g z?X&!5lD1D9g8XRf>XD-BuNW8KVRk*?5*fETZbWQ#;eWIFJ78JOqZj+W2XZ02B&@sv z@bL|1(8O0e{zrA#$i`Ie(6B^&N>wltRH ze0?-E9rnM9zOC(TRWJnugt`fbT_iuQg$-T#Gd4n_xjvpb_b~hTtB0FTj6KfQN(tOt z^|r}M6|om(P`7x^M{9Z6_Y9s-P+sl=vS)~hvZk$z=W>845#4;w#C0A5f{fvaPt`hz zO#HJ7^(GdsF1UCash0t|FtnH`_z2^Z#O32Bw)F5-)%fDUYOVoO2wrOZrR&F`wLZlE zDrcGg5geH8_fl6aFCW+RHW+dF9>0;`jUur(D!lna3cS)0bZlV%QXM{v?3h=DWlAuh z#X*+jCnw%S1)2Y=CE3KmxHuf$SP}b^6kRgvO~a=*OcjN(ol$6pcy;?nkg8mnA%f?T zge+B1hiCv%lJ~i z>+F&9O5R(6Z~-WbC#RxSc#loN#v2G`5AK6-WEcv_g?bUE0NxpHQfB*Cy|*aJKSr+t znmXA4i^-MGz1X)6tSPg10ig@HZb(RCRku?QO&?VSU0YmlY74cF9zd8KGO<=&OJ1{g zWZyHYfSvQ#TBIHg)CHcNa&r$i7v9-x%su#-{ij@Ei=n#TBC4Aq9^7__39@=;RvQjY zsy}Zv72`0SNb?WikLt+d*g&EX{?ycl>UyP37z(+2YyMJ}-Fxq+Yid|$Vyd?Dsn56( zGUGtnP$G~g)N7^}OxIURRzukT==x&9MDe(0Ttksf_^yK^E4p;*#DkSkhSRKt(FS2W z1SG2{0H~N?%NicnDT~y1+l$%Zh++pE|I z__!XGHp0cB=7yE$k?Lx={jJ{R2lx^LFpDx=j=~B9sL+yX1+=!T5D#7-^r<@uwwy=a zh(l<0KL2)Zlo0c^Cy1F27f4+%y(4yav5cT~J>7!lRD9aBnJlw)Owa03I6h?6E;&hC z5f=!si+6s9fK;aQMvaQ$*D)A6f&qxofq@X~k?j^Z^dh)TU!j3bF%IdZis2*b8{I|-g7_Jz1-&xYpR>RJ2Hkx)?$pWKYA9f`_}YU z5W+4t6P)`Fa8akiEHCHX!KnJmam>xZKCW5rn2~7^|M)$}Q-PQeIG_*B3OFI*OfotQsR2Z ze=(>yI?+6T0~-*SSc78|njHH*qks-u{~4@t2g%X<(Yq*rAD@0NPq{TjBmYD$HJ}0i zRmL$$As%Nw2HFV6pjUS_g=(HzNz`hmLHEiLwbeB9?Z^InFvXxc;e=mv8F3vE&}r09 zwGBdR6JgHRJOy?F*+fTi`2229FLR|}kHLBPvOC~HD0dzJM^rL~5W$2?_1%41{wW4x z$fyg)*W)$e8NLvXykgqQ$*PwIPOBi8k(yJZ&qySntW{2Wp_WLFX2cQ zk*i1j9l)aICjn<=B^1x&Z}*L0jS8W17f8+69$6i@gH)A>SdVt%k^e?NI)U>#<2<$! zV{Rny!$HII8Y!6qL@oF48Clvva=yV_tQ`RlvUEt4%JeU5)^7{sf3{ddEjbwz2D3*C z5CVZhP!}pH2-`Hg`NkG`Iq6GpN<*~xG+$5S=}WxRI>w#JB_pME=#CwN1z-5h!o3CPqGSrR!i%u9X6_3V7$ubI(MP;}rT ze^_XO>Cfs;mwQf(=@Xgfi9by-p`j+Q0crAvW!hzsp*Lx30hC4CwAR%2^9&vP`Lc1K zVZ7JYG^uFrwiJhG`I|D$H$=L6AXHDtrJdaIucLzkoO2P*pq|XFdD)`_j?Nc{3xIY^ z-g{Ej{v=mzS2@{lQG|fEG9^UqjJzw99#3%PdOil-M$qQcN-P36v1|kR&KFN>_>?1L zzam=m`vr}1M9S+ZO|h)ggY;!;=`NP$njM~GKGHIbjqp$@*srA2Xn)TaY@4NF5T!Zs z8D(ItsC$jICYB*n;%8~k>~?DB1BW5xbp1AQ)mYTNz)hN}iKu;p4eL%!(0KmHZXt0c zIkXn}h)LO>oXpc(>wVBIIX|h;0`%oIG|1EMXmWW=%2gLF#ChU&6^3BC_14WSByf?m zFaB-CuX5JcmR1kbh9(~ZWUgD~j-{B<*hr+&)k$dJnY7+tMOS~2lQ1*-uBWDR6iFfB zDg&yosN7b1=%xxP+CXj7L&v2;qTI#&cl_*Fu;DXISf6jUamyZ1oU(Z2gHH3Q;RCmP& zZ)_g2f@m!09UgzZsJQVAw~uog*>>kU64Gcjg77^nVW(JVbZSh`qOktjc?vM%RW+n3 ze;O%*YQ$tE5^BW*5pDbqUuU_^gYx%@B&cu)f+_L4!S_SxQvYc`DanBv_xB7cqgSfM zF~zpHp&HCv@^?Y4=uD|iRgEPQe1bD9a?#j+Sy`MxP7>$&n+%PLQr-T3kjo{d8ze}2dA)9b#le{KvyQs zenW;McRfw-(}X_xdvLbA$rMcpQB^`_IwFZbbU=Gc(UbP`8yqSVn3i-M-99n(86^+| z!r9KXtQco(;HFcLsRr7pdz7Ffzzus{#Z>)*l{M3+P$B%_X2_rRAp~bo;8txPzN*_cBpCcQ(rZ8od%b>XO!cpM)rl+yXAm1EUzH1a?f*4l@*t~*&? zwjOF!Xt$bg)SjBQso#T)(}0FDSf-c|u-TU=c5@FWS0fp#q=SeX!}<_@d`7| zlyfxFD`|!~hvE-6iP5Rgs@K%Yj}0koB3?ofyYrY%fkI<(bGj-M<*5)u>EKUB$L-Ay zXdjvgo&7Oc07P}Gf652#&9GpGfSty^!u2PN(O3*)1sS_@S-x1CKuem?)K^dHnDZI( zmEZIy>F9qM9M)YK9Nb3pCcLNHbF|3ZdC5;)Uv&VCpjz3;7-7dwh>4w$ZJheuDv36 z^Z_odCc-ZmC}H|c^-)|;NfG{?WP=R{t|ofws%_(_nNy zFp40Br{Zyl-IzaZhk8I$8wZ6hQ$l|?RttM$iP(ri<{O(femW}eFKAHaftTGf%Yk`A4b29@VT=!8dOGW}6LdM~bRfVRX#V-uUuX)bQ; zhe-Ou`p&1)`r_B1!0bh&8k`Y%kyBq|h^XQ7Nb^|FAgKzsMLwlNPeVmYX4-SJzcOV^ zo0mN}i~8C7IBV|jcfqtQ&^K-k7n(e=&T=g|!LTwTE?3eo$jbRRSN)`j>_pOWCffI} z)`QqI1J--9c4n`IVO7F$eEqDb-?i?VSpa?!5IX-J6|lL{#`g6urX#lcI-)4WE3xkC z?9Q*e8)WbJi^1|iStWQTMSOJ-<2tq$%m9lq9o(^U_Yq*&DBdY$xdpK`J`918q~aSS zw2ll+CBTS}Y`RZ|wTOn7IlJ7QVLBv{C}$?AmX*b@*aM?dPHC!YyP(WXT;d$A3pZzN zy6QgGm>-qYOj7xzW=+R!#&BE)wgb$t%&*uuO*_Wno^BKTwos-S+!7}J1+>tCzIxyG z+c#0iq0+Sc4(*~E)>smx%CPh;b*9)WTaJyOR0c+h)V985v)MaQ@GRt|AWqmK8@MGG z05j2A1lG86BS)8^Z6YdEU%FHQ#U1kTm-+Ig-p|V|LV}_RVjx2}w!pDn?$AIa&Na*k z3NS;D`8cS1;&hI?ssm1UTxK(KRLNDtX*L-gU_MqFlRoxSt3qpkVyprnc0SAoH5iwk zEpvY`Q2ZXx;sC!aDI`&Az%S>zK(7MdNzd5-%-J?RzO6&OnpuG7szi~)(W9o9Aj>S~ zK`+t>k;ZUQK57X)Q=ik2G4L(xWOF6tvoig3d^CXIhY#DCtI) zXgpU6Xj!WY(*%0v%d3BCb#W(onOw?o>6>f>qZz(BT1sjW4Rx-uBNCsvAu*p8?3t50 zr1soV3Yy=S?qr5w%0OR=-{d23TbGKJD?SEcJ)k5PQ?*&v3?0pRnqifs|5UQ3+^njJ z{%4e19-XTwHbIcZDtp+Rh*`MS2B-)Yws^s6Oit>9t@eHiWg?`;^TxT)nR?|tpyd?^ za^#7Caq*tRqTEMz7&n?_EZbj1_v%AZ)t`g4Q&E2 z`G;u*C*z3ywa50^PE6-gUOf-XRz|>~`FfZvL-k5#3R?{-w|{>c08JK^d*Wz(Qt5p$ zEq>mM#%pPMz5TwGnB@s3eM`<(*4zHst#8Q^FzqjiQyF|<(8zy>_bKX&q#3cYzecf2zPSk~^a#~cuQ;K~?eSTKb7H^6ny21=}m zK*y}@Ia8T@Vn6@c*RB(xh^;uRz?D-MeY>j=>wq4QydqhjETL&H1|*IuGnRnQoU`_t z=WtKSmoj2y$?Tj3484m|((SK+zvs*Yx!zB6cpNo0m5|*@N@3@`=XS&23p|QrDS4;MR4NxAE%U#lN?rrEZy*K z-eBCe)BSddqx#XPQeOGfEQ+;}{4GgQKB`^tJt-w{^X;y%O>?K;Rs&NGRv=kmK=k3b zq|itih7T7en23+0wGCe_V(L?D zQhiG~Uur{5n4y*+!5D^G=g(B+ z(hbD11zme|cDp-kGQ-ew99TzV)!58JDt@~dG@Z1mas#=7U&-oWuQEIh=jBvO?E^+T zoQ|&H%L5pCePVE(AM!49tEZ609=BJoXPByAPFyp|Hpvu}I#?PEvj+VmdQkl{Z!EL6 zO6_HnhITe+Ajk|7 zf8*~#jC%8t&X*BCddTv^kZ|fOpBoG#41)4`z%f-_>^EuaSGhm>gI-vU!#3_IiQk0x zj!&xStbs1+g05vDtGezWfWsl9xv04gzZ+|8hX*9=ZVfOWa3Q}3T>l}o09HWWg-lfB zRK4Y;g49*HE7d<~v+5wO1KWA_^$>ZLGuuB!sex)S%iNfc;I04w literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505110001-Config.rsc b/MikroMaster/20260505/20260505110001-Config.rsc new file mode 100644 index 0000000..b1444cb --- /dev/null +++ b/MikroMaster/20260505/20260505110001-Config.rsc @@ -0,0 +1,4506 @@ +# 2026-05-05 11:00:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505110001-Diff-Config.rsc b/MikroMaster/history/20260505/20260505110001-Diff-Config.rsc new file mode 100644 index 0000000..6cc3fe6 --- /dev/null +++ b/MikroMaster/history/20260505/20260505110001-Diff-Config.rsc @@ -0,0 +1,12 @@ +4169d4168 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4170a4170 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4172d4171 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4175d4174 +< add address=185.110.92.40 comment=pornolab.net list=FuckRKN +4176a4176 +> add address=185.110.92.40 comment=pornolab.net list=FuckRKN -- 2.52.0