From 77a048337160ff51e02fc8fda06f98ed23e63b61 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 11:20:22 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 11:20:22. --- .../20260505/20260505112001-Binary.backup | Bin 0 -> 269613 bytes .../20260505/20260505112001-Config.rsc | 4494 +++++++++++++++++ .../20260505/20260505112001-Diff-Config.rsc | 17 + 3 files changed, 4511 insertions(+) create mode 100644 MikroMaster/20260505/20260505112001-Binary.backup create mode 100644 MikroMaster/20260505/20260505112001-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505112001-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505112001-Binary.backup b/MikroMaster/20260505/20260505112001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..cf1e118df04f0eb5d444ac81b73b795d255342c0 GIT binary patch literal 269613 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

vyDy>IT|($9%d3B{Qeh@@UK)Fe&Pzh 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

#-H@ENh9l> zfHt{x$7u)!2qC7`n?G%1VS=UkLq`}3eiDhTS2M-gruf?JLYj1>(3ZDVsVgv#M7&*v zc|mMvsv4RDdU`OLfhW%Bv*%BQgdH(ZuLoJW%6k0v2~P=O@r>EJj?p?jC@|<9Y{!pM zTfA28e7;f=fhKW6fVoFn(0tu$HhAISX)y!V_Z+rX`M=%;(e`imyQk(?;nGbx_8q?C zAA5gRgBo5}aN>*Tm_sp5+!RrKrp1J*BT7U{=nFvCqLf29r`2UEr z3A$Kicjt?L2k)?zyJyCE^0Snu6VCS+keMyy}4F(0rGF?M@=1_Dn@ZC+*8C;fF5F!r>#~$;AG> zjX`NwC8*6rqKL?&VFn|2BsTyh-Wu4Jny^jMHioT?tC*!jo^~=b+iaQfEPhjd5jjY# zn;wGdSkpVl$xMb1dAr0FCY^Z-2Z?bko24Q^mouO_v^iLm-^ooEX%)bSmu<|Mn$G4QFYL&H{EbXp?mgUQQ4BFb*$`7Tf?~;PX6Tg zS&im}GyLwTBGRu|kM*beZ${d@;`N$25W|u&=P7}@R)N1Zj_hbmF67JtbkXh}N1Xg< zfn3w^a~75R(?si%Bto4F2Hjh>R$ih+vol}m#iHzmTds;-0jMUw{ z@D8<}9Cnj=b%Rx(^+4eYUES+@ha2*S7kdo#7dU^EEDhnod&?G?&$ zQ)YBe4~Plqco%Ru{M^4w;}fc}upsZF~G>(>68jc)?569o@pO zC68H4V_(G890d%Us1N%uz>D8{luVmmzX$mzb$a?)3p%kCjdx|PFa2J(h#3_}CuHBK zz|m=hA%fh++^BH-{M)WHmN98Pt=?i6(*P2Yldd}zcOsi^VrUkCLw@tFqv};D2wY7c zIoTV}NWCneM9b)!fZ-vZeqG_+lo<6XV42`HV>E*4Xh)Y6r>~*A7>!;^c-F+ham}-6 z0v5Cg%vEsiKZKs&4OWLdsD)(crzhp-UngWLyF0-4*anCXPtkk>24o5^L$=Xs(T`6S zm+b-Yk)6l|h}A0W^-p23GsCB~c{J2qE07RW#Lg-f>9aga+u(AD72mPCcXxg%jdDi? zA$F*Xw!(>HbyU%x0bd1c#&i9!+8SB2O5)ilLvRt~u8(5ON-#g**k?p!(|m1m<)}=> z)Y|Fs*X7EHP!EU1dUIN)HI8jQB;V8*Tj*KGV1(5Xy87ZuNek(#T+^s9e6p@_ySY+5 zM(u|7pCp|pGp5}?r`|jf~Y6Jy9pX6^iYLsILCXQ z^6H)`Tc58fwI)4xRR9%!{p)uwapY@Is^QlISHRq~E+G9a~$yvL=~KI^N&+j<^sA$*hnc{&Fyti`Am zP#@5EJx4=#*BR%~9JPQR=)`x3*};gmeVxh3!OjioTcZAQ!EYj%%{TYg#IL83PbFmT z_;Fs4^UJAk`z|ufjxqZ65yT=H38vU5X$?m+lBL#?WjQ;GS)Gj?1x9$na{D&p=Tw}k z_A=zZT5CD`@s)REn`$=>T1CV4)@b=+niOC2vc=DrA0^V$9ImiGLJ-Jd-$m^D#|-WT zVn%0dIJIicDKCUguC~{@*)Ip7(!M1sAGq$nr)gH>ls_@sRKaM?yZZnPW}pUV*+7F`H7SjhtbPCdj7ff zy|?CyG*iTBNy3}7(SmIJ&RZLsqPkxv$hoznVW2HR$_op9(eweDn6S&PrCMe)s)cNp z%UjZc{~%y_B2Z>tEgN4+NlKasT0tdibJm&_>Nx7GcBD(ne~T2*duFFfm@70SH6=8W zbqh$Ag047psJD<1^~bU_&yzW4tk3?6U3%+x^q#Js6B(laj8WW{e(W(b7wBxhF!dUAeA%zFMkxK9|GzAuPKta}U6spcjac zi%TAi2l<3>GGCwJOU*22YLS|s#0l6)&SuB5N#wFpnFz(b# z`;jlRIT%1%ot82--UGDsIw$Dn>8R)y36kg}$p>*wY(Aa~%xdnA>wDV%@smL7+j~Q* zC9{X@0t<+MAO(9x3|g=k)!%n`Br;P$eNrA#8G-1o-t5y`3Mj$7Z>!9EHw=79|4MJ&g${tX=b| ztYp7OX4#WqA}Fpcpl+nj=n+7b_ZXqnM7dqdZ-hY%T+dTdOuGW{LUMPh&dPR*+Z0;M zS`LO>Mth13v9XCNwAa&0TGm6WvgSi2P8;<3^Y5;KJBh<%_#xg*0oFFpNxE(6xE*U3FlY-B<%$^uh z8Sl7I@zabkhj;4XV-iQrx1Z}KUZZJ5{vlezKD(pNAoW|CP#pGHv5Z`o^-wm7Y?3y< z+4S}!oq!^INj*B2hM@SW)33j4!{o-LT4qqSg8k9knG+&47)(z4_5EawJ;Ten9xDj6 zBZf01K$r|{_jLS^#@>j(^ggf8+XZXAtiaAt*}InTEN+V7nnOOK%aZ*#l;W3AqF~q5 zc73f8oc7RAw9lyUW1AS-;_U2TT!Z)nLTFsb8N2j8|m0${g+9j%Eyhr$A z_dgbZk6c3^KXZjY?gw;idP8l?yGz4<`7Qpv0H?`|j{~S=t;Xiq7Xd^nZgvI7)S(yS zVU644C}&faNNE%x)=^G#U|-Ha@H;OCDPYY_ojO$xsAvVg z(1OT*!UFb33=@%D!L5mo_x{UBA_zpIw8u|9!9E@#8C|DUUG6kLfywJeKN;0ZCW<~C zUaWhN9?t3xq5{GMk=A;l`01=n0D6VOqWi6PwxN9ML_?$iJg5Aj#%4i@AE3|4hUAnX zUGJG&;@%JWob_^%^;{tN={GXyJwu8B*(r5vhwI_XVjyvr4i$5s9tYWQAyF=z&?E20=q7T1RmeiTFQdIO&wx)JH?Of!C7=Aux5pK(L8p<}~5C^NxW6nQ8 zf`1dfqG#ydS6><4LlqgiDO@7i2W2iC^k=XblEh6*MT)&^BN#uXOs2oLK{Xu;KK|Y+ z@W^jM;GSmB2Un5YIW=+pgy6IcE(PjS@PxbDe)qxsWse!{*wj|*yxcG`>SQ4GW6q6c z2vXe$t^?`}lD>;8;s5Zt{kG!y&!F`{7uD$PW5UQqilj-(VU3oF2lC=LJxAL1PG&x= zLG=KKI%Ky$&=F3OHWb`1gr7-~UlL5zrTZfn z!Ra);+4j;5U;WoB8(qzyAQal!(_P<<9Su?6E2MgLgB?%0wEOD-q03K24X8U7crR5wrmk+!b-wUO`8aO7`uamNm(^ zqI`Je=eW{pU(~Mas$lG>b4j8lu0=Z9$$^9|lL8F8xDe1r0>6y{kgMg#aM1PL$Ka>5 z%HbS4sX|7OtB@5AgP?9_Ffjn0RicGKg~D^hS#!ZpfS+29{)1PRJ8%PHoUnbgWrgAw zZ#n6{NSQ?$p~8UJ0k&TSsb-)w@f}s$ksjWNJ*Hj*L9^iBguAH`376ZrjI8I0GB*&# zwMo=FoN@NT91!D15Z-4R#_i$Q$@Nk_;puO7lH`q(c^*{sD^O>$HZ`~;#M0&iv`Vh` z)4*bUykuWzh`!y*ZtcKzq_C;X{kvl`;819^M09>tKefZH;OR9y_xl!+T`03Y6oM+W zwkN=i6yIl3Hew`!EWL}_R&-lo+z6P#v`J$1-RsYhOdeXf?(7v`v>dCa1y_(K< zC<@4huM+aDL}eBtGjzX`F^*0^zFfOeQ(GS1Hl4JE4}p%AF0s%pCl|V`yF~$rj=BLv z4*3uD+dysSX^+7A`ir$YTziXpve~*E4W9@{VKog8Ci5=Y?Bz46!eZWuWlfMwInZ1V z8**Kh-d_~d6{N1rb7?u1OHTYC8PpG{i9?IBINv*R7u5mF+8}gVP_qL^Hf&i`*r2T%oK*CW<*g z5=?upBWF%;c+qy>$N;?)OqZ6>p~zlN7uTL^|8^I}vLGh=UK|PDf~zz2c6=SRCc+^Q zKs_M~tOzCzB}YSA$M_wBQ{U3IW1s>$XNECoNZSZ zy0(1BIsmKmhtLRd4+26=8G!8Tlx;x7B&!Cs$69oNFMVD&F&~Q-H(ap~re}FHw^R9O z`n5#S#dq6CR#2!TBDH zZm`?+dn?TPn+kk+>@?;CcT77BOLtZA*A;cI4nq+;WI?l-4gYOu$ijGa<)EHtLNx(=R(g#7OWqM)wr+@iX`PvTeD4e2m( z@Bq|e`-Gp%;C*Q|Im5v0aLGmck8sOI#>pj<`T}g~YDEV3vL{(uiEt;s3$=7$?(CGQ z9X*kW88XX_)&8`E#WyerC9u)WKzO%A80?#Dd*O94d19hi6vm<0?h(E+&>3z~-j=?q zLzxqBR_0adW7L5WImxr6WMYx4Ztd19I9Z!)m54@xdSO)p{gaMUSTVB`OBZ*8&J zr)=Yg)9OGW11sV&D< zCPMeyaw|A$#>q>UbKLc6F6#O_?+|{R|_V>XDa#Cw*-sMohgBb(CN|WMP|?WiJV2gBEC;cs(~58XjOifT%8LegDR% z)p>z$MQkuCW$WYEqICf`Zs*dMR(A^{M`>>(JXcobg)z~t-Zk}sWhbxSm?aSjZg$a7 zlOR4qTG_z*etRfm97{2!Ty+z^!GMMURWqp3|LkbD;5(^@le`^m!)HveuG*4=34opA zH53zwHmQyU2yulxFz&M~sC$Q$)rWFzrm*WrSo?EF;H4pl0pl|N##^b7dY7$1bD#xY zmG2LG8cs!4L4wNV{JbUzv3ZM=jz+Dz;ebN(%AFYp6hq`_e-{Ad##^wZ)t=&8O(HX#>sO$6sB+@ zDb{?2#Q(p?J^?6GIKqUwi-`h1C7weTB&PiXdGZcJa0l8== z#=F(kB645pmOGVi+h;-mh-Zr1>lN&qZPLy{qnIYbfi0{$T;qF=82!J%ln@F;Q@IeZ zwmvm%rNRj+LQTBI9ghVXGxmF&XtL$00)PxFC>S*xgg3v{qQn?vGc zb1G&Mbr!Tpo{Iw}IL7Jr)k@VTKSc}r`Y3{){d{V5c#~(bN+0Fds6~Y}&R9!nf5V-o zCNsR&zf(aZs2k<(*Qseq9ze=cu^hIBkKnG~UC~NK&b#OsBG9+C7R>tN9j^n4GZ_?D z{HUKNTdZsMA1ShH!x!KRL0Fj5dY88*JO4P=NB^FNVd>Fer&1@~;z2>_8TRe;f+JM< zbGDaI{%WIjUB4{1Gxh+T6Biw7Z86`mov}M|js*6Hl9o%LwbudQ-Bz?9iZ89&Yh}jv zr`n@Gy1hAiOs8%U6lf|%Y_5WHdlTLdu>XAj8HL88!iN} zNHqWuS?yF9h7rwK`c#{Z`BKpThlNa}z1u}@!xy+@a^c(KEjxwi2*}_BxDpCX%duip zF2vcI7qrL6AfpR!OnHKozivoW^9*D!Wi891FO+kIiJ>?f$T2oPg0X$UH{(Lo-$N74HMKF@MfBY^9d$*~|86`ffAly3Y~ zf$<5Q={v6w<=48c*f6Sqe!9|;bz6tfxDS1%9S}Qz7u-x^ihpM`%LdKVEU1^6A;aL= zDuS*zjdYuz?-xYBA3ap9wGrPlZ)N7>N(Q=Zy~uqkEw+mSgPtl$s6Jnv8gq!{?%F7h zDg8tas{!4(!7&wyjqwQN*%B7bJOw&JN}l4xsjR;*e=J<*FS+T+Q?NHn*{K&D_9-lo zlzW+xG(PF>d0&nVTR~3%UucnpRg1(pV87|1Cfz?r;66v&!z)vU!h!%#@60^w_1cIIMh`_rkC3AzMv-im^%=i0pQcl4eb@axqGA^E_v<1mI#q zZ?z@}_-`4;pRomtS_+aMe}k@qfQTH$B>a{xT~`bfsEquLdqd9XjAp%X7vSS{eZDzxPBr080 zB3>Zwk>}NQ#9c4(w-bJXtO@{sxOl=Z8dvP2mbY^z*P9!+r}{=*wo{N|cePp+y3a#v zguPYbE6a^gw~;uH71OGV6NWjt_9or!St%zZCm0=M>N+D)n-)k}i>ZjI`1~GV>13~? z#>+uYVJHLKW)KEzzrrn%{hj8C7{-=gFn!{h6$CY~>z}^0a*NKz3pN9ERbPLMOCh=Z#` zXz4J^!{%!FvN84GEFMx(WRQQ}c_)Am1TnLe2$PttX4~uSK^}m<0!?O7Toa*aWGL!l}#ok=K+m-&UxB(AkIoCY!lCYQ&%3z`5e8p z)S#F3)O@1=77ZPADbl$O?OhxS31rPAE-u|g(^yY!8rcoTTi%=Pkux{($emm_6&JOM zy%Z;OY1qzM*Cup;(cLbdl{R_p1ryiD#8YtI#r2}izW7P7NdJ!zY!>CEIh1Zm2kPLo z<0F|$2Fi83u-8^o-XX>`Z69%6HI`86)>IYn&vN?-+=`KXCE%(%WJrlOFM!b|Iw=ju zF1QTkXTYCCAbk@*f_-JY5i!t-o&SRT`T*6M z74wkPPTT>X@rQ+V5`W8jn0a2@*ui^Cpj6?YMHMz&FMwh`X$Fu#h81DnO?~^NKyxy< z*ncEi;S6Vv4ooqmIiSWnxy&D4jwx;)3!OD1eN?(*5!0*_|;qszR3Rm?kUNOQD2egC}L3TK~`bsk|&n?-B z0Hem9KuI^dW)L#<(c$^cd?^<^@p?HtDV30{faHXOOG$T_0}j$o?X&S&LXwVU^88uc z-8Mn~S(ukx+5EvYZV^m7H?{@(;`a&ddj*mqOf`0D7(fcXK%ad)0?C`^dR3}< zGsphP9`5ZV1o~(ibo+?M?a=O0C_fAgcvR>4VE@aPU`qe5l-=S$Z%6>q2dX1ofQoPj zZNuC~{`Dd+u>XHptZliC0$41z_0&yI;#{sf;tA==;IrDLGSj5gc?hV*>?7yNSvSP7 z9p(#Kcm+yI5z8Jvb#rO3#tQfUDd-Xf;Gb!B`fk)KiTz&q-76}Q&%axlXy36WKf>ajr@qh|L7D*G6z*^k7$bGJoMQ#H9hE= z>+sr>WFHl?jg~pWdYMYH)s}#32z9r5rTV|2&S#Ok9Dq!rL_{=pcVQrgNoSeptSMEN zw90Xv#&=B@=k+#uMLCCMivkgDu3S|9yDY#EVy?hpfSO$n_y?J_5(J^+dpD|79-!s& z8w!;#=FSQ3NDoqn9)!tIz9KtbOMZzKGaYXof?ET1p`qdxyE8g4l8#V~hGZ2uW$Fb! z*HTUIqGNa}pVGE^)35cBGRWfq4hv8OuKlQadSeqU$*E-jNlJ{dZQ;PvxP$p?Hw83b zr*vyY@iDCKMU(mGXuoJKTJj3?sH95OJ*{qVg}Q$sr-U>&p+wyws>av8vKQ?3(KIlA zuK2t)%{ua-9hPm6hPGx^|J*iGZQvxQY=5~jbTUN~mG^M@#&i(S7W|+Lc1F#fV6tg) z127wZ1W>ipCSPbZtf~GkGU7G!%#jv#&d%TQVU?X(l+??JZqoh8-p9L-6H4=yhKnJF zRRMYvnXH!(-vlSxtwi`2E99T?wXDx-#k@?)O=aKDI$ENnx-%O?-@H6EW*`M$DqoPA zYPt^-K?5KMWp_e>@&!bYHB!4}OV*05U11pbxs7<@p}1Pe>5(k~6ux>!Qwl0Sy%4r5 z0QJeE9q*IO#U+e@zC-u9MQ#1Rfc8RpH}0;UR48H0o7=^(&PFrx(1%33HtN!a6xr3&dZ!R7IE0Jw9 zCX&3gXkP?F#H_kC^M$;Z+d35Ct_EBG(qYZKRe8glkSo}ZWYsGn2}8mRPR%hj1T@(^ zI=#cr398;zf)}^=rQE7>YCMIDVf+q1dNU;Fu$U46j`eSF$l3wUgVg5Wnx1FR#?xvP zz7p^R$v_UDiX=jLCJv_TpOHtzL0p{XTERJdW8DxRL44u&_!c}#b`phlW&3{oUyz!4 zLhn@A8aIEJhwx_F$Imx9MLFG9hK=~(ML4QDAbjXy2R@QA6sig;-KltKwc4icP(@IB zEi$+&K!~M$^G9D6GE@PZPb6IGi``*%AkgddU;YeAc0XLBe?K-W$!apylMROhbzkTp z*#y0Vfm_hv#(%7?<|o0R{N!EfM^p;4I|t+7CssV zCl62ji|vYiL*u(|Xr?CVP&s)%)8K=c&t26|kXQEg;!GV%Joen4U8pFr<24I#FPsg3Zi$@ zjKlWNrAfo`&<;w^(%lSpu5eAK_85G5sY~=dDqfY|>tRk@KkzOn@ zl!X0|Om=NKTBW>R&;Q<9k!V<$J_W~s1>;ZGJLh+sa6ku>M3q$KJ6wl_?5Ub5NC(Ki zARni|tz^J9hz86+9eI*EyEzJlB!u4` znzjHy@xGQHr>GX8Gq@?sb{($I<{Oz%B-#1FbprI3f>n2VcSC<#+Dl}eyg(4b$7WlM zJ|h*2_Y%NR{uCp$4xUu(pTjFYiPItC6~9^uB|rRJpd$nwa1Pa~aMU$;yzyVrh$ou4 z%hN5JG*wSinApJ>j6o|%V#IzP5mWXHU&5yz42}e+Zpn_rxUtgyZYvw2@-G=kI;PE6GSh{ z9t>${Qr$>jy6&mW)bU_Hb#9Z<@_8zCeX{hc<;cmCkEVz-PUrqaiYxX)=d}n4-)%p| zBu~4?#g?VB4bL66OMGV#NDYwz-$N8+HaS?z;|(@p%JZH*TG*%b{i?w(C$e8mKON8D zbQkl|Snp~+{n~M5CYL6ouv;%Fb{cA{fiecH?wwH z4uoTlJN!YbRC-7SLStvGde8eqpq!Z|%-G}l{SQi>2H3BNejWAb0HgAxbu8_@{0L1$ zT~6m0<|r!{#LF!HDZ1ZX@VcV2V*mhI77VWFLRW1ujVSz4G=P(Bq@Nb0qWX`L&fJ7I z=vJk(C86F8C1z6V_xsELk4WT`RsUeQ2yrVdygw+% z?q>o3&%K(D!aJyMrQp(y-+|xxNxR9#-EcdU@UsE_6_(z|TR(9c{u&W<9c6y>92W60l7?ftw02T$;HvKgCV6ts zEJr3c$cN8w*em`xLX`wKoe4Q{##-I3?HQhw1~1AlGoSNX=}}*oz+aXBNc{OWwe^7) z6lC`^6w6*9#4$IJN3YwzVFkY=5Rn5}I(PlXatI|{Q6ZfnX@#i}6*Z7u8y$F+vRi6C zK`5Ee!Q?q<6&LJOqazLvmf8x(#_Ue1D)#gIatSZ^ojRK)rMg`2CRc z#-yuI*ku@pdyXk(5G%~}5S)TVo6nA=iS2)JOlRCW({o93*vmrQWIg+{3&K~LGCqZx z#l*!;?vlVR^C8F1hu1GMW;++ip#6^u((3-91tSe#rm(P#Ja7FW7=5jnyxSEXzT2B2 zlwt%w(xKt7e&|Q!^6Aeg2>%Gw#tc3eC-Qv(1?FTDr=Yk-V3xDs{Ma#K$~Y0 zFpl=bd!dnX{aon)GN%G)w5sIESj!gDJ9Fz4U4Y`nhj_(>2+noNg5wsX9~Lu z|7H~^3oT}U;|@+67vxrhRO9tH`B)o~_O}6p7dBbY{a&Hc*dQO!@L}r;hN)yncwRW4 za7D#4PGXoHmF?;4Vz3dFP!Ad!Ik=9(nX|=k!-`CTng}4I&g4gd=>DGFonfDgvBd9l_5)3Z=s6HQY;kt z56x&4!T-tI@_5fvt^v&CPi!oVj_{3Dc_ZxQ2Y_mwY1jh4Xbe`6f|FS6bSaqqoHLT; zo)D%FUik1jLaY-T_RYM?&N}{7+%Z&8B+yn6cN^Fix32qUYCaqCrM2ddUeLl2Agd0F zy$L&5_7^^}=lhamozkSj!xugyiNM=%;c-e}sT^2AwyDwR6iP6G>@+C!^BVY%IcY;9 zMCm_z_A&Kczy0jvvunC_9T&|k5P{+QX8bS=X77&?HvR=g&9IgLA|P#l7|aO^Gc@)u z>n37;Vz7b(z<@vLcjBjX5*PmxKrKE`J1Q*77fkgNmkqVV(^uAPrcp@Q^VlM*=U*Vj zv(^23=J2jI@D-MwyQcW*+^|>z$w>GLTWywK@0oWZh>o%l``*R(PhRkGw^A7aY9f*a z6@ngQ$|e%+P#tMVo+hi@0=266zVTH3!Gj!@+W*vXk@pR6-_8M@&EyH`#Q+G&U{NXX?!*+X@|?c4<3x zd2^&S{r?M2Tleb9c=mL$on{74exd2F8JbnFS;1=^Hsm_>C8$O6q|p!pWo^M zO8kHCm4pFIDQ>43*e8x8L({86gNE+rDdDHd_6&K(&<+hxX^1X3DowhMK<$H^(%06bk- zHwym^h#DH7$L|JfIO|!+t_!QVWQd2CDmIqdQX)mCRhc$=Okf6j@l56V#)m2jeEZ*0 zF)jCZCSG1;E&Md&zZ4$M6px=9pKL`+Mecspmg;GF^H2>{uxtLkJ596Gok$q@ar zOq4o!rCNC?9%^jy%!I+kf)Y_LX&v3U%bIlPA()MT!RZv1FHAW$VW{rCb*n09BXgm% z=;^emUcFY-z~c3M%3!1u!uD#ZH^+rc>hl50zexYm)S?J?B$=B=m(%p~OV~a}Eer%%w_h4r#PQdm04}@JjWkIng8|zMoxkf}#GzE8)-BR0{#7v!79%N#Sbyg=s42 z#9Za?F03Q!8+`To`gPx7PDQPm>i!o;e^MD(*Yqn1_oJ|3#vxZ1`VxvG6r&86XWOi& zircJ&UJ7zt-25Ak-;zH(Ejz3=Fez>1Sfu*8dKBRsbU)KBDDd9sSV|a+ot0XOP87JNY4s1KZkhj`TU}HkZaHF;0-7$i&6cCXoLrp# zd;uR@49!*Ux=;Z?r>{wmAL`hljZC4t8iXX0M;ULX&;hTLZ7?c-{v+zq!KAH)r=698 z*OJdzqCoYtGjwI86Z^UrmuK0d%Sm0L#9)#5d%6&R z#OI+Rje?llBb3lKfad55YD-3D)C+8<8V+J$i6G387T)dr5|f~Cjxqb&lHI#T?ksc9~c&GLxGJK zeHmUDfgL11IXgF17a5}0a2~$l7L~d^3tpdLjMVY$V=|PZ?)|Am=n;5-Ex|Y}YNp1c z-qV3cVTaO54$(9uTed53>r;Pz8b)MnwK@fN=J356@a7iHUuXH#rmPm)`?3)xW9kTN z^4l4BA&;~^XNH@1WH!k&X!UQc`d}Y~L=d)hkowg4>5`72XN!}@tJe}nbTzcly zCHM9SZMCgt3-~R$yLxkY5DPRQGf6lIiR!-x@sjLDg+UmPZH_4sTuc`yMYDl3f?(f% zXI~fyGCYg&LPHj$MdBjt4963=P=*GVp1FE%sy4p`N5BBjvJgiJp` zwUP|By5wqOY$KYT#Is{7umk^Uq1ZVwU{r{Q>Nog!;EpttMm~HuDQ>fL_q-7xEA)Sd zo{qS<=7?dvv>ms->^B^fHF;hZ+p0uxvgr*cOH_#H?%v`*PsWbs)~(Z8{ik?5FnV%mIaUU3HFIa7($h4b6~JP+*e z%)15}&sh0xX)$!~a3Ut2lj5}youAls6j6$H(AB`k*~%Fz;nt~QNAlm~)Rx1%^(~N5 z0hjHy^gl&c7X*pfR0nhT0rK)L$IM7Mp?8NdU$hiiaXW;nDkoCY+-@6b@ z=H#$B*vLmyQMqmi8T|APa6-G2spoxj=V<+TWBEC))S%LJ9EwqTsQF4*X5N;x*I7*m z>Y4Qr*-5oMyvU54d*j3YCYJFs6r8lexm#Poej;CFnWTV@9jlh!rpIS(+_abpi=!-p ze7yHWX1gPgoVYUk7bx>?a8zlw-ous_RVXKwMDx?KJ@&QF&zdN+NZiTg?)>AXcVU;P zq05Vx*_XP>Y;+ne|M{Q-T`{@^j1xZXEC5?8UiT4&mg&)HrqLTRDC{I3dT>1MsOjlE zz{2lngU8l-mn3#-?l%2v<;uJh%J+u86{8$`s$l@$6eVChZ-b&!_uG1l|KeW%UpMW4 zv=1k-=NJssn$kKBWaxpMpe)W@>sq1B(^7mttV12eEoXT=jARr-8w+|#;!XNAMZgLtW4L|XJnQwE*rlb zmKZ|!#PS(<4>qs>QLjLH^4}}=ZfY?_y5DHQR4{JCQ&m!Lb3hWZ%!>fr9wwR7pVI5g zNh`T8tr5~v*l4|$YYLQ=!^|Z=Yl#2Yeg%#)i`Wvdb6FW}H zU$-}71P0&A1UTi)^2_5szi8STE+b>tz4AhfEFT`wPEz}0*PFf8394{Kj_R0cE@c>= zXmTWfQcTCt!~BP~j{=;%D6Of-yxFQaLsQm=F9VNWsyHkQ?12}Y0*GKf-+zqtSgxNH z{_*}Vse=>_t*nIh7Rbsy&BNSFu1i=gKbl}_iOU~QS6l;UOL`C+&5V;+B3?6o3-R9} z0h%jQ&<}=rbkC{Iwf!QYZigrC*;jLmAz4W|Jz}2D{3$P!a8`uc9zL@vN=+#&0Wx`L zU+57JC<*$H;<@$7n@t7m`AeOTrF{Epe$5qAKidiHiQzBi@7+_a|lia2lWDx9`P+iLG?S({g)&*j`H#8{-0IR2yQVY30Yx^YwdnK^ zr!11%$EhQJc-p9j`?2Q`OY?VI1!sz;g`B;)Zx7-l)-VKxpw#Y&xIuA|*^~!jj{^`j z!nmIBHV!clo|kzT4u_OkaR&Hy zz-MeRrj!3RbC9rGoU%YP+WDN>ckjyJe|TT003qb4on-Yf@Fn2fFm-Yk)r~j6DG8Ml z+pKl^rS)z)Q-u_6Pj|kA)8v_U0+VoEuaTov*2j~Cc&=X_I;mUJ)nN(&TakS!vJ!Uo z79SMVW;g~bSi_FXvaZadS+_CVGc*#O$+CDTpNNp$B=Ttdy=&ge^=NZv62P9n5{wB} zS@lB1d_ggK%g#{};I%8Hvs?vSrq3`RMzbp9igZYl_nwMyv;0Woy8MW=YR5v%CcN{C zA5>VZSfXz!61?S$QJ25&CeZ)s2H_q^nG_wqVMadm&zoxlZldf8HOQ@tK&hfICfIqi zL0*$um20=w8!J6akxdz&FC1RGDWQyoTo4n5G6Z?h^DE52@cmE0AMil?OOB{h!!*k@ zyZKbI0HUQ30pp2Z1~9aDI+Z0xhwf4&D&dv0=(iVF+_5J@I^+R*LMuk>Dj8XP3rYi5 z2Q=45*R6(CsFp6$Lb0%`nCC0WA#4kRn5i*oOJ>otAxXEfq->YzTaE;I;t%?@ zUq`E@s|t@-oJR*$Nv?LDKXEb&yAnivopUmNM)3%0I;^`Om2o+L(K<;#+`OPF4Brnq z=_ZpUa9=Uaj%hUoh=8Hz-;o^{JqN_yr;(vHp-)<aCOIC8OyA-faTd^8F%!>&v|6L4*!o@B zP50DH4zARFbO_cnU<*NMGo&TA+_Sz@LqxK?2We>S{nhv9fu6YJ>L~MY@Shm^=A=u> zG;aE=#}Rf>9N$sJ57N-jNizfd>ycaR)j^^Do;C_HxU3~*8-M<&A2PrYos=_;3Qm&u zZyBjKXx}saH%M187ry6U5gcE1`3#X0TbqG1n{GaW9U9Ws3-RV>74Y$pDzuEaG1!F8VRoczdA-2S z*|so~Rz+*DODs^%1}$T9!em(|9kMu{=_+p=IBe#$tT~^Wspc5yq-_s1v4b|&KQ&|k z-pSgoTdgTCCZ>Q2hC>h1CNp~lT1ZCp8FG?E-QXk1Dt)tK9#q;_5;F~aoo!2wM`Kd+ z-P9m@B2-?f&|fullZ0^FR0yaB678r2Z5KeASMI}?=vCWw^Dcq=LhovtsHu@#6F~k7 z)?kVGpH@iWbs=w+-_#Z&%1!0?R3P3NKLf;*6Ixe*xL@|Tx>~#Ks+m6Bgj^^LQcfSe z>o(<#xLQgej^r09ue8TJ;*Qa!{EoxuL7#!KS3J~Vadx!c8s4E&GBb%7Jq;#PGq;n)xt9Y_S+^eTW~80 zC;mu4x5HYqw_AWu@np%QUSQk)hohV03Go4<1Yw;vwHU&7NCU6c+Kf4GV{o2N2G+zb zzeu3GSo3_-3f!jQi>G_v*f-VbD68pomyWMjjqKx1mbjIPs^+;~Is9!fjmsDWNrDiH zwRit5uHz-_nskGSI~X2HiULF)+!Z~T7Bg|E!sdzqA?o7&AlPYbTzl+4tG?xpHUa-~ zSFfFy+JE7i(n5WczBoQK#sav_+DZo6c;(?dod{F*B5m5gyHZ&9*F zT+g(p`_D$xD+t9jGpL@xoGDpMfB@Jy0T3zKHTfi4c-NrAgX#=m9JE~3C6}|AC@u3!@R4UzlPx|f(AH?i zhm9h!YVCrK2rdWv8JNHXuycP?B>gLdR`nManI8)e+6e;@+}E2BNW#OKRYNsIPwmy^vgq*{Bok3koxB&PNW~)Ar*kMqt?B_UubqjR-5u<~bHMfn(_VOGR!7i@g2yDCRL)NW$3-cA_@ zpz8ow#ob4>mW=ytGFTV5U5_mZQs!BR5M&|#_1+2MopAA;AyZXP+pM-gR=PZjBo8ZG zf4ePx+>U%v-Ckj#Hdw4}6|=`SStU|9NvXesi;6g7CZLSWI1~ZK(+uCYcxiLS_7Zuc z+RNkae9`GQ|L>@uyv0hkse5(xuM9in;hB-bu#seJ{9$Nb0BII(mGycvbRl4MEmbqIqQi{~ zQUBRjG^w%xIk;J0Mzu%#BQ7;_Q2;wknzS(sXF1lK;Q*OSjld@n111Q#3MRo* zB;62XeibQsQ?Zr}?v+|JloZHy->a^Io1#b`J2^h6K3o`ngN(>KJEhIb&Wf~8C~^G_U=7ix4<(AmYc_Gv>pnMH%+pO8Vr5&wum>TD^IsOthk#MpKaxlHy#7 zF5=kG;lvF*1!pNhT`tdmftHll7aq9O}QDOO@NNs>znAlf;tZWsW6HoT7W6@4HKtIodH0^;Z|>s)!9 zSx1eDYdRt-R9=zr#^gHRQ|)sv^)?#GgkNx`|8!@-ItXVi^!#4B8#;xY8)X8)sbtE) zCtoUS2U5v58m@EDeIH{-AY3lHd{4{u?n^eU<>RiF!V({C&?o~%-K1KpCsLZ~`#!=|W>5WoFhrXrNgR)5;@a=EKlU_0G*1$GfVeM6z z0V3I+3Cvcf^z=c+nckGY3w{fq#%F$eku&vY$2~hJN|G#8GGw5UgC)p>UW*=Wk8OBGJY@}1r??)h(;#^LnMNGZ!NrPS?$-oVoTwDp(IT(w zE1wc>^M1!%m^aacfoCxDQu&VX7x`vS$?LYosWrUV*tGR%`rl6lbfIc6@x>w_btjju2>}l;z?Mnnug731-|9gz6*&O4>m-;P>pAf& zkTq4Zh%c|>i`Bq_(-X0JtJaKVm}z9iycOIe^0bBqX^are98;-s0X13*7n{V#_ z)^^uSw8wHO)xC4?jO!a;FgPw`H@wBy)fLcorU?l*xDIL}ooLcFtE912v_RxUQnqOZ zk0S_{)9m6tB~xz=0nBCSU!Z&e1SU=+?3gjH0*364OH!G>>!R*?dyRaRRKOQswxZwH zd315Fl|QT=atGl#V#eHVXB)EAwMcGy$ngHLqbh%!a{$*-5$Iv zyEpPK;)}gW+b&c0StxM> zwJwB6nSmNNh|Tf{YMU`oEO+1(PzK5avb_T4q*2&>1pT-4lb&Bm6Ak~(PRFML9r=mDyy$rIZgHd z+HPha!gY>MYElx$GrG+Mo?=vEAA1*rZvx{j(k(zC0+2{vGn5MfRS{SSCiT1>Y5w~w z+*iVsBaZyV+9<&LyJ?0S60FQ-f>DYG8&)2B$*cDWQ%rO_LP8CW3vzQVe)=MGcU-dn||(v;29DsFVM z0dq2+oQ_LFgi_=vHYOQ z7JP|=F%(`!GZIl#_D`8ZTpph^W+Ur3$7?CP-1LmUNNh*%lbZ=8&HqJLJq1tXX25#9 znphY0l>L`w-cJ~**`t*xPFpw1gE-qb0Hv@kbMX5X-#;3F;!>zn(P~8yu|`9ZG_lupto2B_#g zH}?BT{e(Cg_~y-1QLZsiTP-DM87-=?K%hQNF^nq7p>L486>Dmv%N z&1ahE2DpWAsqkj_yRP4G0X=w8vk@?zQgp$#pR*sSUo|2D(sFDe@*syMI)HCJ?_I3$ zkOZFRup}!D3%;2IXABT5(8{b1tEw|;ar*MZDIrd{A%0~PXg8=Fp8AX-IZrSWnHRKq)y$e1#MEBN zfoYQ61@EAnluOSc2NRD%UcZ(M#8kfnqL6s-iD)SrIXjsr9%cCuUvkDbYllj)X>w7Q zje!t2h&wl%IWK+6EPF050d@MnXn;8>fs+Vfb)IWc>nE&hwjGH4ygoKOWUpjp9n$~D z*^Ds^5}bF=LzLua9&MUdfKUh`$0+Jb9i2Apt?1nX65|6n8?-U;q=CTTNB&w`2>3*Z zG$+mFOBDOV*tPU-eg1&s3__cMvcF(1P&J{C-@M{e z_pD`wu}NhJxJsW zwG@+nOFNJsH0cTOTL=yy!ZUc@O7+n&fvyT4IHrA zi)bP@M})P#hRP%t#i$&M3u=`W?73;2Jul4Uv;E{`P`JQm;HuXQS$Jvp6C$4TfOb_zsv zs7+ujg8(O&%D_m70Ngfrx1J~EAc;z*F3H2z`G7A^_DUOwv$Mpeomt^QJsTlP2$69V zxvZg@y9f3uOS;`YiBTpz-vlnW|HQv@)V!XI_VOUAFl6u5BWs0vGe(;vl@ybTNjdxO zpriKzWY?o7C;VmYAL$Nn?V;%DDOe5Ec}x6Lc`$!y8VSxL^N(&vMK4?bo~;IdE6ubP zpaJT-n%rCz!-L{zx$wj4n_J}od_Eoz-vop7g@lv!{lYGsD%QEQT%U|0T+p1R-YHr(!U`Rp zDsT!Dm+V}r3dLWKFt9UlOHx)onljoiU1{Vf2lb(3K-ViHjGYH>I4!r8wZy#U zX5L<8T>_|{ZE2)5{?7;zKGuUb^o+K6skUzw8aqBxN{hAw1-ChP_XM@A4}QKTDyXye`}A{w#=lezA^*Jp2j^VV3^fUa*|B$6 z^McN;Ia%5pg}&=$8k#9zY!7{?i1FV8MvOH6W1#{`JI|fN?YwfGjurqk zu!Uwu!9XQmB2KJh#y3{t+fq7*#U> zOftJ$;LOEFIK{-6V2Ol2$%PwVni`P>o>;4~VQ7g5R)PY>lK zA0!q6E~+eJ)==JbMRxy00k#xtbVd7h3t0^_St!un1-guR$QHQRbJaQNbXF*LjZB4& z&LX%ne4d(8b&RFzo2&iU{tc`r?Wu_LOpQLy2&^~~T7~HV{5DE@&$j(Z0<>EQ%$xo= zHfT%MrodC4x(&nuKE=FtXMNNVOe9i6MLrL`#C`=in?165nheC0KPS`)C4dMmAa7T{ zIRR8|#A7Jov4H#C8XsO?6(sueUdRcPwX!axs^UKggtxg6K|GE-3J`i8i7mFdFCTkm zxtQAloy0Bs=U9_@Edv|3b?=Q)BJSDGD1xDxOuqm~xVio?bG$&BT2_?agbI%}U%IrL_IvoyNKB!LnHy~2i zInrT8KVe+ZR!T>x)X{}-U0M4$=av@xz7&^OiCAYL#qmdZKi!XHdPu&j7dqhqi)^^r z>y}RzC%WMKV52tfGww&?BKkH^l)muP-)8gNFw=0DFUh{Cd4kLCudG_oUEi2p!)*NE z;^tF>Xb#R^6okwW(&Z|nU#Hf^OEL&VR^$ZbgamT9YL@A@su;ql;R$n82-nLPG{N%u zt{$Y>q{Zrt`X}hp_|j1J+z>Bbe{yA113CdLol*Zu89zcC&j-W}`UdY#|9%)*vp^I&BQcxqOJNTitZnE?}J`+RM}*ad|VLlInpT=?RqoYyxHnUL5BpFUTxK8YHA} zAgg6ksf$@4lhgN9xTnMIo#sY;QE^g|sK9S<{1NQ4-yEK8WbEvdkm*dH^NGyw0XNXG zCQ2gCY8??bLsbe^0nyIWk;s=r2Xjgc3{16*F!8G-FL2uYQ`3L) zAC{oDF|aVt=XNsE_+C5oAttX!Pf8CAFL%#+DLB3K|FK`;tBumj0ayYH&~>3{tt86^ zawtb+(P#XjwhdS|wx~_X2TlVh`Snm~;H;8LFR~ZCI}E_n!CiZV6HccF04#aI)=o9Y zzboi<2aFop^nq@)T@1o8bNxfQP_`BUutSNdi1Nz%D71J9#(g1I&c^`{w%v_G@3~95 z?5arr0k`6a67=*CSNPS7K&6r61S~_2$!0DXg@P7Tng&(yTQb@xQ5?i#s&Wc|McPTV z`Xsi|UG$CN0++WpG&2C0?*chG|EH4L=V4|`?b&N4sRa4Q8>VlY6T1^uG%U|^GXAqeb={VI{G`{_+AK@r4qK)7# zW(;{Q%+&FnH9r+g+++}69f%aXoaIsO_a=Q_-mEObeZVrlO4&{%^8BoGQc;B`3=&L0 zcm5#f!DQ||Bx!_{cQCpu=M;@(Qef%;FIm}hBtGe>@@p^ z62U;{edb?XhXiUMV~5r)1;W8kNJtgWH&*4tltNS{q?!QVw?*5p8l@Z=o!xkw-=Xa( zY*!%_+h|{@p3Hx3p13tkMW^l@x;j%71``^mIjB?^W6#pFMe4@q;e0jiQ5fg|hSF*z3m+bD+ zOoW-FAH0K6-{Nnd;GNmO)A#bHnY5UZ@J;E*N`^phN{N69A0znLzPeV7f2js-vH}aIpT$D=h9_b{dO`1MYfX8uJFSwHO-?xcPOFZ&ODMoNB z{t8)@;u{T{U&qh0wTI>s)mHh;AuIqrQUW;yM*sG$lDRP+Mkr@V0YWB!0S>$_O6Jvo z*i8KX;8}23e{y$>Kbk8vk3 zZ3`<{xH%S?d8sYmk*-{qm>A&~OSeGi34+39Uymk+TZjEB?mgt>^GAw#X;ti8avdIW zoQBMri_r+C2PSv&&223m)1Zdu?_0@@BN4O%vCnMKCqz2w-^R~e)kV4k+9ExW&v%h?` zDk@Tts`F_Q_z)JNk~j}5S2${> zYV>4B&_+C%6*{e;nw9s3`*|{mwx#Mku8zntq9WZLiyb-~zaSbVy`R0sKuP>A7~h`L zJ>pz}dbRxwFRL;rH&^^P!nPP_4Cjb(8J4K0jN*-@Zg=f)-`cYSCBCXu-m`4h9BK>? z6FrPgL{Dm&vAK+z_M{PK5?qgwzlq$y87Y}+O+k}J#fX=v=YN< z8$zwG)uFSN#d{?bd4PExVv2KD)s1^R>TY70&qPt+dB=+X{dc2W zEN6)2t+_$~Yd>@wayW^xWfTLfLav#XfNiBM*6I7EsRy83yZ9;F=6j53(8MJtxJ?5` zQ0Zz-lmjzLUb%k5ROEPH(4{DpRjn`zpE%?egP``f#?B!P za~Um2x;6$at3NvG>L?~s0t1^9A#5~L9I_!~X&VPXcoGO7S;-oVPeOD{dXHNuO$uRc z`%3XGfJ0BmnLRoge2_|et$DUkBMnKzMSmF9X}JyVEB#K^S8K#5zyQ;Lth{Gm zvG7YsWhiG_`lW373AW5}w7KuFMwU55Lq8Fi_fQ%cyBCF$Rg{ml>fK(Dv*Zl|Ak)^H zf{{*?k~7t*fD$ttn5s$)N=?4?^&}lgXXPr<+aHgDp$6pInnaD^;XiL8&^TOW&id7J zq^3fp96gCY5lqyw^oPq@3U|6%4oHrx3WJVoL_nFJF98Qs9Y)aWfG`k^{0!olYI~UO z5XC7sPZM`9bOVx&OwYb5BRf#pockWQ*`Y8>ZUpcdA=TxYRH0P(b$0%sh6OP!v!tEd zgH!%=bM5jQZD~@v+_$i%a6BI_F5U?_CAU?`a9leOH%hoQ;ddpT#ZyaACwne(E5Dkm zCvU?S6gUU2lzV`i!Ih2SHi*ojo(X^aQwxJq_6NnuIpC?JTHoYH<+|6nOV{+YR7Of!;_fk{cGV zhvyK|Ze#D~9|Li+{AIFswO&rXx4vM!!N1=J8;?TDMha#VF9vaN#zl;_{-n{M7dJqj zix0|N&YCQP8!%m7{f0d{Ao+mD@Ho>3Y-5YCEhmH(h7q$}bIz%rK&D@5Rp2u9Jd|@? zpwv?_G66In7P>1&|5r0ec5B}~5sS0=N&U)}+}f7V;LJ!XrB)uizGYM04+SqOcE~Up z%NPoy6ktbVwIw;ut4;M*z81;Uk;|EloZnK8+dY5P5O z5^>vCc{L<`uGc5RGai7VywzvsxAe!4uDCD~> zCGsBe?(wfXeb48Y7tADe4#_o}irgV|aMjJ%ER{#q3H!Vfmu4Z;{~G;;(<(hg8&jcy z`^X=D!Nv+8tDia{`ZtB4+VTO|7WC2aJw~rjM!RuUlf>QKlv^lH{gLvJgdZHr${GD2 zP1`h%jp^>a$-4q~P&QFf_S(E>^#{@V?bQ<^qy_UpU`O_u9%_`oc><@|00^>&ruQ^ORdN%hbK|H=1nY+W>H1hhh!OAl%Y$T!d0~ z0&Ji{BYs6?ze4n>isru{>Xl>IiRYVMVPgyIWYDCraTi0AGo6!0)G9cj=9Mhn`ij86pUA_{F|H8)ltzyF%bo1$4oOw0WDQX{5pMjNDrwC4 zonm~kg*Y4@rX=0GtCvh)A|)%_B+Xz22hI1V0(aZiFCu&LAoP^TrlIKQ!K`N{DmLkf z4>voy3)7+K^x{}VLu6M<8lzH;DKw{KAimQ!Piy(zcE&o>7Gk%N3hfqlsZMb@ddjT2 zD|XVm<4!>eTZWJTt#=^{fkC(!t}FX+7z&B0)^~^V)w0z{{hy5H}B>UUzB2{ z|5`fkW}dM3N({Zha3sC}3=0o#WVds4OuFKz0m-M zb;vyIV_glUnJ#g69c$@g|I*9v6jUt|8}}Ibdgm|TikUFmib`LpdYf7W-J>_kv=FZU z$KhgX=vf_c`nNaR@w_5Wb)=Zz2&?%>V?avLB+iSBsKV~R3RcI7xJj=19bFw!t`Y7r z#&&FEBC0${A!}#u5?>_3XYuIFhAl}8kk98p3!H(V<_H+U=bngzMk~~AT?sy?`}0&< z^}5*zyoyWKd>Wu61BOAsvBi^sQq-6l^oDHoUjM|@C)i=sILw&(Pog4zQ@-6O&}@J7 zY8`&ullc0I3V0>N5*D;fYggFrK1~HGS7nnXKe{Zhr$R(_7y>OhRx&3A4E zDFLhwmf5I$#LoRreofg0@lxuyE4R|cG6P{JTyHbyW@Ip4#ML{H+*_*2UI3w|9q7m? z^;lip8oa=Y&C^brWmw8LKQ=Izpd@99Bo(Kss0`mFv+eAlyr2$5tU`g}q-*&hPj>lw z(su&{t3ZPZWb{KYUxbY>5ET9Ho?Lxu5f;&7x~Vqc?gudOc88iig2R|As0B zeHLxb@mq~12m zCPm=c(FRk1&@Ur|!yw6#Uzs7lRYqAHsogrc5FyXJrQQGg5u7f2YT9Iq$n$Ug^X2KF zll|q72SYM)%;e_9MB;HT>e!x8cO|^I#rjLr_Obky5imV(=GBH^cvk_-^s{i}0NJkH zyfGLoIad#lG$lCZDI#^yZE6rVjq5*P&pk(ZXn5K zx5j9UzHS2&{n;QFpOk7(T%XkB4+g~1*NS*@%}VO*qP3lY5S4R#$Zf9-{IsVl3n2k5 zZ4PJ-F&iELM!w1W)P*;XJ-llc-vMQ6Hl0`;2(Qt~6Q6o;sC~kjuMA`7HA6fedLU`;AiSYcg@iX(vS&OaOMX&gKT~ zgnd2AE&>WT8ybcFklcDR=+*!-`~{0>5@g>4*1tqkAnXXtlwlGHw}C_JoMcZ5dz5UII7*B-zPgdvP?IZE z{GmR$$sA7!*R={y9uwi?&~Ydefm-^U{Jmz1{Zf z{KI5j%Yj?B4tS|~pi5%6{#mGj?R31Y@=lX{;+!7?X>#>e83NT#lXPlx#ABycR3_}l z)4JM(f8KIr+Sqv-D1sFX=!z8dmLZr}N*~h;hLJ7jgqJaO(X>utTdvbPCD6pjKRM?L z&zLYP2^Z2Jy&8<}9CKBMk+||KDP$clmokW2096)K61N~i|9shI%O+NyCvdp*mO3<5 z+qOC6)f3fh!2!POp0~A=H~@!cCCBOa*D7v<2N+F$p%M=rixTej1P$4pQvIogT!PL~ zRAh^o%bhjQdgQ0>o**wC*1aiqPU&yLtBmRdI4O4r3zlN)s zCbUB3qp|fVv}0hJ=QVwU_uaDLL&}bow%c(~E?y1I<7QbZa}xv~1C1649XyImXOeQz z(fC`B;k}6!gF(y}*TtUeYj=Wu_=w~-cz&j;X|$~Rl8tgXu01~E(Zp{*D=833>C~qxz^#MMAV;#| z&>7pbIb-rWeA>#5mf3V1eU+2S4g&wL33@fGcYCE;4PBs6Y)}$oMQiQ`9ZzFpsfd(j z3cmh_in(=Ld|lw|6-Y z7#JOrFMEXbWr%52NjO;^L4OqBED6xU<~I}!)|TJF#QX~bcRyvz5$43I2sJZpkL+i^ zcVlE}%rTG3H-94B^VG`R-$agT><`RRsbHW2Y$By$^EY0R*6cBc6EmQl0xkdbu%HBh zygu=efXA(i)NgJ74dDCa{X0}RHJfGU)gFds6r%M9jZILA`ePxho8zELCb{N~Y~--k z7Yf$`Rq~HAHG=Ykh$<)sMH?BYMpw45Y1?OLY%t32aM23dW-ncyp;ITaT3!{ohHJ@y ze{UQvT>Dmc39cF~b4pZ(jw(Xwn_3Q<>g*X`=x<1_AcM$~=VE`d{vzEr20=3t7~aRl77Ifp?>6 zJduFRxR@ZPv3>nUns%*_ch748el&T<%-Xa&+I&-# zQ(W|KitE(P9YYT?E*`bX&{$9v3yz+Wz-Fpxne*9|)2GLizssF1zMA!BswSO*$u(lQ zO)TL&`c90gDd`f835$n)?g!pCsxCGDl1IW4k|5F%(P^aJz5buMshxc}t;t2l{#sLS zO(^^+t4Oo-NB1OKH5k9Ac@*g_Jmz8mJ@02h{7IRbO6&(FOmD~Fcg>3wDug%(K0?*D zs{(4QoGN@wvOs?OIFQ+@e&!jsuIr+nd;)1Q9t}!{yEd1gaA1;L5>z z!qo9`L^aQhcCoTbfiYtBrV!kh<8yp&-g9a zjFdI-*{*I7k&3c0&^R2X=;U;MH7fg#GJI1eZ(bryll{W%XG+)q;`blL^RZPo>icrf@H;fg!6> zc?DfsCa5QR*80(D*|Lf<2B$6Gs}{(+JKQ^7PB0tWs!2aX;$AZOqbx!~)Sh;ps^dDq zMgo2QDz7y;5F*h-r3!k0y3_&Y$}ygdd$$Z)!K7hvIzKTd*-JqDxhNMMtL6&}u>>i1 z6b^6EB2(ipK58piXiX}M`Sy8Bs4{F>MlpC&fzrA(&j@6k_4LeCi3bBsnloisQPtsT zZbmb#DnZWbgO!7YNUW!VWvx2XE!Yg7&&TD!P840d!efK zF^V;3Z)NkZ5Nt2!q1}ob8&tVW*rKd)kXy#3zN?9GSXQ6*|K<}ivi?AigQ7{XNYLECHW@klVq-b&4jLP1rVV}5`a=bn=Nb4qB@SCy zt#@ji{Mf*@0t`v=w^1apfhaiQdtN~M>t%sM#X+@==?@8{^J7-O)7X0ITthC4~UdCt z4H9)TN{#xZZae>CGzj&jN%H3h?=s#TV(i$!jjgP-z|O}UcU!3*J>QXV;NtOISmlRV zPoT=?%4#D;zx&3~TNDzE{nQhgCKqV8?q7M0M|R9R(T@~k{%Lihar15+l%2_jooC>V zf3;TTpSafSp_j(5711eto9=*C4NHkv&-yWCd88qxQZS8CsqKuME+U^c^&-*k4CYGqjx zf_X%7agZ-YVQEGTYsn#f2PmLH8&KJrCGf4ws7UZT$+X|2$9OQd=u5+H2-^HuD4KH* z#$~H*W_UE7%heV?qroF(G)^4qBVRUMbhaP&1OtW`aDmA`8y2>8u#ne`l8})sExc?> zAknQ=!{cgMrONIwWPOEwRA%o&wcT}lZVQ9w7PFj*RiXMqisVPYAg2aX|4W5`Ss=F2 zt2BOG-Sn=?Pb|xZGUa3#m>b?78Q^#xwlj5IR2I?BLo=#xglbDN0ir`8)JULkj=$qa zxy9io${j|`f`OzyoRSg}jV)J-@3c&e=PNKp91Hgh)b2aOa%>NO7T87J=A2Q=vbtUZ z==bjvUe~N>UhHtSD2JrDK&PX}7q}TL0{S>jv9c+Wf{9>dQkWK%7ks}9X1>M-k>VQ8 z0nw6 zaktdT*Ng_J29T`3^jK|#xUje6r{C+oM!VzLb$X4e@tqLt)bgg=DHo}Q!apPvFW$Hg zCo(>TE!AZP&`~3|2EX_|D4G>SKdWQcd0xwL!`DSg<~9nNBt+d%{1v?C8%9Nr2;?wmvi>ang}$E0phCI{@`qs%&? z9&d0;DKFME{SHHG2!~yqvQmZg^^Ie;o*RZI;y`s4aaMh!ri=*l?kZr=W03Uaj1ywI zkSg=&)s`|!K^?WCXE`eA4s+@LsRhly0mj8In4uJkpx8_m}v4-1gW$5pAS zgXiMux)@P&W+Vn_=P`N_L1yMUTOHt_&pww%_Va1@SOBt>Z95epcJo>uO-P@l&!DLp z91k)cu9WEz)J@P$X)pl7G#B%$xr|sc@xp6!57T<-mKy(mb z{|I>ku*qE>YShol*;Ax@GE)GrkbmEytQ*g=#;^wX=blJaq^?jgfxtiCv*+t?6T!6R zfUP9PANL?CSps)xU>FR2&sPw!FM3|&V80?Flc=6yX_{P^O@6%av;9v@-pmLAsIU(V zv>MO^iHh>A4^&Q(vSe=narpu*V<%i=D~XA4cmbVe^HpoKxrNa7 z09V)X_wdY(ty5IJS`f_tD+!f((?pSp(UoY#G$*LOpcp#2 zI!(M?cKl$9fqzKvX@`d6%OxKp)+4^`^7!<9XjEPUX+Pwia)b9r2cnYKqp5R8JQH55 z1m?^L>K)U1FCJiUD2r?JkV`BeBT4*g7>H!$h6as=bZ;U=EZx{-yOi~ya#x5i*c;$o z6$6t!GcwKncMe}a3s>~&F1x{)a%EFjjF6M|gpsQkr19W#E#*m&D@RsBXj24i+7K&y zGm{@2D*6zpBdz6Ybc#jITg?E#<71UB9-A8pFgt7H*JD%L7uR8r;GY;~jhweusFQySP-SiT_NuuOG1Z~L=1)&TbhiTcDVFYFu@ z(T?lrQ6yV;XTN1wHKM^%^Ghz49umBCHJygm#7Tf-(R8Q`h;q;Z?gl;mTk!!LHDZHf zl5&gd*5N(*& zhl2B?ryU9VYRSq@#BOxVaGm4+Xy^)|U@yY|g_b$o3sK%s;vQkbG#-Z|A%NV3OquaTebgOzS>a*d8}c#SWCBqDw6FObcY~+9n`lG1lH(h%{z&UYiK+ ze!k~2OqL9M5A9d(7MZuqgxnrd38CuUBZmH^YW77*3ntT3dcCtyTa|CzJXm@Z>4l6eUMOIYH8E+PWy0IDV@&BX?unpby+0pk`8plAK+Anc_&QVa3A!@c zzLpR|0o<)zDh3gXTymeX=NbDva7uLJ&HIY=VW?^;}QP0+v?+&F^L2;&gzJG#X91 z`rVeSLQ88dgj>_n@X4By9yNf|b_lWA8q?ClWUlOhG*h-d){}i6yPMphnFepIa${fd zXm91#eGWTh$bEE%?%uRfQpvCkI|S)QGc_)!ibppt7%MP?&e7ayb_WxGo530Mc5Fpg z&2;6DIe*<4=>$gUwrp`1HwbRngyqSMf%hi3Ik2*@2QlvtUujYutic17^>3ry6+Jqp zN&)%RGuJOcJ}ZAS%9TfPuCne;JMpj@5@~i*Ft&(MnfUPk2~Sqn^O8S*l8KCBH4ohk zD~9BrR(yaP1iO4y25qP2hM9u`)Eyly+lcaN>L2KtP>_%N)m}dS2Jh=lHBYZVCUs*k zHHLVU16Mb0ja2S;w(BuiNaUzn6yVkWogVCazPbtZhGp;|;wW5_WHcv^BA-1zx<>#= zUyR_w6G_y0`MpN7jAWMA<8e^gjgx|5+#b+C&)91@__5UJituV_lj+c)V!#Av(a0_q zM&G>rL}lYEQtOKT=Mdx$4#!~=an=5n--M%UlFZ+-$CHOy@NaOK4cE>+70+ZB@@xTZ z-Cb^6uS0jb8E(&%1yRUDVGfz>+-3a4PC|cET7#2G)JO55X5Q#O(Hn5{PkkC2y%}7l zc{tYi2^p)q6rp$X;WIyz$8L+MTq;0Dn}LZ2jGz5MIW|!nzJBlfgsNR?yMXb==CC}} zLjTATo?T-^T071F0NvDJw2@oAGZd-Yx1n<1UxpdL=UJJP^My-sE%&}IHa(2IgJ)6w zU&&5;(V~yyheLWx{tJUo1o+fUo6^@Slhi(bXdBMr;cLo?EfJ|X9|+aJw;-5jX4jvW ztK(4DfX6gg_Zg=1T)dAJvQ!;ue=|0SrL#Cllj$eXv5iyRxQYo?CU_M;Gafxw-g5~L z^$#N%Y2K=`?Pe^C#BeyyYTN;@J{%tpPAmDcl1ndYF_teb0zUhB>SwlNt0CK4HzWxi zpB@WMbZhxRimm@&Hb5&5B`Z*8Z3Kq%kS39XunEIsr=i>(kCV%v3aw&-FD|(Kane8K zXpe2F7(@_R+GUO0`2Z-I`i?@{(;F*%(&peFPHk$_=s36C^VU9tyBZ4@sHK~V$z*GY z?GOP~^YN?Qn3rw)e6pFy2Nb*~d`6cuY@4^#My`3w^J;(!L3uZdoJAO%G!6Nn)0F7mIc=(~b-2+rk zMSf<6N>jJ+1B9i|I}rCZaY`q~4EmHAN=nWU;Q$6zVIY!$y%E38+`jaAnL)BJy%ri? z_cm-g70Vp6kyL9cZa>zs$xT3MTLrpR%LFN(+b#q8VjD?y?f@s- zc+v#ovALf$_&H@e8pXy4{l;lp&t(JL`a=}<@K8@NoR0n-_#O_w0O1o2uvh!)bx6OS z!-g3H%kE@!s>|jCi|RRa%bpxp`|HI?_K!u7KT&+sB(GiWPSqgWJpp$nM%-v9s5c@I zHn8(ovN}WY16lfL?5QR>xNb4tUH(o|vtl?o1zs)(Vr**78Kqn%j+BR(Z?g7Y@B@V< zLvQ%z240N1elWR3d3^KP-@Y!dA}yTt(h3K#%1ohk1xQ!z$7xyKFrOED8r_~xqneTv zgQr)yij{Mc&6>PMJE?k#q~b&oiW;kMoZ#zlCyYb;>g39p8+mR0i)H#ZZnei7j(F-H~wAK7LGe+I`G5YrQW0{gul!Gsk@?jrt#iGbk@%xxEL<%eOh9-_^ zj0S!vE}KwsDdhJ~F9K0}0$0VAr;OII8ksp>o6>Zhz^1^q_EgS`0iQ}Z^OKXBu9kVC zG|XkPEPe%di!q!B`h3%w@PJY>?PxMHsYt^~g&FH?Z^hfIV*wyT z9YBtbNd#{P&Qx+ zYs4_J96(ea(6`V+cl=*$7L>W#-67xnBfaOE#-vHg!432)=bEmR%UqE{s2}^<<2#ly zz_b^v`1ZFxJfGTkWs}KNPlR-?BI}@b+E~*Eb6_WysU|VtJFHd+Wof~%? zkhq{D4|k-@7Js-@T{!^8#QQarp-(Gvc_P{=J6-21Orh<~QYyltz#0+6gYwh!-=!`h zTlSQBFiYO|3i#+jG5&@MD;qYip2(bcP8B(3B4vK+;8Z7(g;6cF9eV@2A0#k``u^Zr z&_&}_n{Vcl;15PzKVxlCB7hgK_3{ofh=*V727hXmS}AcXJ*=3L z9XSTGo8PSsa54P~WWG?W=ax^RY~n?I9g{bXVDB+rM+GsVsN_eTIgO65@hhG30#(

Q5Lonzb8hnHYG1NKLoaiB@#s~Ss4PD1K`p92{?U;V_wt&RvS3HP%rYU z=%eZONuVw|s&*NDtj`Eo6X9QWzw3@0-o%rQ8~qydszh4c=d?@8f^35%s}i0ONuUEYu(1Y7AD7iTjR|9@8$a(IrsFj3DR*;}(4#OJ??rCAwDL-s<^8MJtq9zjnEp8? zBx)9TrwPbL|!+N3~>&0M4L-(Jax?BHN1& z!MnVBt)7Zll)}vtIQNN*rVtriPpZv2uk{|GiS3kcaeQ# zNOCTTp^h$dBZouuoF)Rd=?`^*PM;0U#SXdu2=!EEW+`I&)>fz?>B4fxjBM#WC)o6r zTP7c3yHcVsw)ax^HZJ14VdLE8piHsl*{p*BeLR_iL!d(An<3LC3axDP$R5q+xlc2tG8M0b z!W2+!J$9wrt{>LI1>~KP6sd)PNycKV`E4`k{$V5-QnK!9kTcyxk)f&yM%2jf1(l(E z6yQ15FBzw7xh zF%^IOEphSLT=oV_^)tZ(NhO&8OL)i|dm10_-QqiV3?#W3Fzb|w2qmbxzxty)I<1&? zG1DnW-S=JqH8ZaC4~qXf9QSf^m7n?lV4~Ox{Vts1I}3w=eba2+6H5kdngDXhrFauM0~ll)a!!TU0C|d6S>0DWAKiQX$&mUlYgIV3bgy zXsnMG!qIV;2W*qlTF`Pgl3ZG);x$6$fJ5tOI^*|Xjaf78TIT?Nrq~=yWxwg8_uh!m z#WEQc5sG+zjT9Iq-_6!BMe}4_LPTil&RFXyJo=~Pz)ES6p=a|0GRJY@A2G&5j#Zt9 z%F-K75{{&kOzQRLWO>eb7|O;wgYmJ+3Q*od!k6hD%t%aq!P=OAyvJAM<&1v=)&Hn> z;G;Pv?T)m|a#ZA`IY_Fv;}rL~WitoDm+4FLFc`SuKE(3Oj~01#DYyJP8K0?Sk@2f- za@g)I4T_PaVh3dR=$wGTbsp3QS0TOrLas1pC5=nV+S`U~A!#cH?k{r=i{?NI!Dd^F z$NOUvrx9KO!(yt7gw##4*UB1!3Ng!{t{(EMy>bM$EP93isx@6+NC0`I}kiCMzQibA4?r1MTHyeYM+{IPoUbx!9O^GV7*Qg3!lf_vTve9%2AW5xVk)OFK3 zWKiY~@3)K3Ap`z&V~RPk(Us%Yqrp#Yp4F9+nnX5?Ty2atZg8lM=6(K=@BI`DK*e;G zEk^`&QDwprjYm? zTCa<&Y2Vz||&osJod5G`qNOY*%nzSh%6r(yu-X;z2z6ZlU{w3M{W2RgQgX@p2*37EUn$O)KS-uC#o` z!y;ZgcVwGJtn*w67QIp8ru1Sy`$6Iz{CJ;~km*cfyb?bN{vU1$i=L6&?AvFyO!-!h zB#WeFpJon3A5Sb&Ly&K*9)$}eaVw)is0$a?~W(Ts~-$pL=|viWVXMrhyY zw0y-O>{svD>;EXM&uW#L_2k7dF-2xCM)=|<PZ9rMOttht!7y7Qy0Hbr9Mrl(?4gPcAwe$L? z?>|jp>JK7mWY+ccAv>qWZw`KfSWotm69WDMr?!o$tf|YyeSd4)U`xRoO7O9Pf@`%@>G^c-GjQ3L7 zV+)Np{&Nw-Wvk0Rcr^v&We`E`AR*?8AZ7QZ{)-P+_Ii=lw0#6`^$0%wFo1FEEo> z0n_O0!wIn7YC?67Ba-G+IxKinPLXG}gcBu_n)ycsF&qTK1#a*0umKHVj?#KV{m2QO zI3OHT4s@Wpkcsi^v`&wKKQu9`9C|EOt2we&3f*UD_Q%W3-#~IYoqsc%PyHHJDBfvA zP(V}bPK?_8b#>Lk!j4(yypE{z#=F0RYsOVKaL{zq5`Fv$Z;{OIF^1*oc!WLQjK5MH zuM6o`HoG7|f7MhTcgv(-cSR?zTn<`!;;y{j&fR7_W}4aMlt}Jp@gV*gvNP{1)qFaP zX2~J#Kg{+%G-(MaQ!p4ina$Ebq0xk2nsa1!JY?34mWL}1Szf-`>2dVYa4O(@oLK2W z?;<(?qQ^bo3l`IW@XMu@TJ~PP$1!gX>$XZyGT473s03mv8d`tyGd4@bTC*9K z(i6JZLONjF8uZc6Sa~K8I;Gjk7k8XO6y94}z`;A&k8x0cRbsR|K+h3iH8Ri9PsR0i zq)kNKJx;Q4Q;(VsBRAr7{&VJ{axTT|$O?28F<1?}B=skp`#DjGxo4#8ZVhWilkhYxGq;<2=Z4~mTwFj2I$c5A$1?61SgFZBX;`$HDIe!>5W|MqLQ{@lKaF^Zq@Cu(&H#F%Rq+W+HPwXsWu;AAJh zAvTm)V4~x6+#0CpvjsrSzuZrV?J?!w91Z&qWBImTUPV)fOC6g-f@(iRh>Zs&PPsX} zh2@}_k6EnJKdh~uxlB|57a2)-eZ?wt`IV4V)KOpp*u!IYs}6}yU{?C^SeEMX+CBKL zPb&zuBU8upzQj}}qM>awYb-M-3RUc{s^37xM7GC79X{xg9lfSyEwcmaoLPUtY-CHk zkS2kw_53pdE(aDc$)H!lYY+DHSN(`hAiAiga08D2fTC0kI%ocNLYl{XCA+{CR(*p- z9#EQy3Tj=RuKC{Lq%_tC|G!KqxfSweJ3eip%`}ue#C9J5({?mHuipos(X0(7ctH(V7$f`VUNI1id-F7u+TUR$^{kFEe-lpJ>G`( zhU7(1up;kyt)#!4`t~k|(Qb zq~*Z~>Y;CK=iMdCK?1IDhQXVkkX#ffW4Zmp{n$=6$YXOuP6AoU--3Fz6(HL9Fexv? zl%^L;adMi3K@@fKW!x^ZAB6tARrOksYEpt{hR;YxJBiX#KX8$NU)OEVnaFFsSPECl zPFKs3n)*I(tiP!$h;orEUmb8cXQ90!Nb?;(JOa1>q&h;O#~)$++v`PE-% zaB!Hj8V)~?er@C#Wuj4&L1Q(Iw7Q8i1{)s@_YsaL&WFfBz8i|>#*=Jj^|ZrUkxhcU zIY_zZxVP`GOG|M!KC~Uj8oGgXFIwKZb_;KSWuO6)WWQZ&2Q$rjfHRU}-RnE!j%=wF zjB{8OqVXw8m}K!`@**JUV{&tDA~ef=H|QzQ_^ls`}WIw*V*_BdE2>FNguxN{!)KKHChm6M9ZW1U-xSM6r-6Ja4Nc?{${HcUL>&iFn&VylAQ_0~&hu znskIhKD=8_=+GCvBprL-0vn^Pidp3OB1wI9he7tl82Lp-x&B`8q_K|1F9@f%E7^5b zuLFa>M-YT30Wz~1Lxc7iabj?~G@kRX>Y2>&nsc@o@N_pa^=%?@ghSFLAaNwJf6l#~ zfWsQ2df#~;rLAYZl^PMspZ8cATg|6nzvMPA+7)ny5PnFCE9bW{ zWHK6iq`qT#UyPiSR;38tuDcevv5d>ZzL|k8w1v+cY0MEh@=K;tLGJJ}d|9uBPu850 zE5mZ=0RKM#!2g6B?Ygd;6f3AXig#M6n$XbD%!;YLTUNMTuv}OZ?9dRRfdz+%;`uA- zCZf*kj=3Z%dkE~G;?cbKNv49pT=ur|eon;7ewMRWKiJ2y$h$HM_M6sq9mQAgOzyic zzp4|KXXAw{Xkk+tAt>X5qtSGz_>u5Gzx__Q5W2PhDS;xZgaw++9#()!&THBzntF&} z)h3rRz}M(hLj`=408levqRlf~36qCp%+Bvos&G$4d;Hb~b?v^Gyjw~m5jQEfQBt#JGkH;gm9F9$`4 zC@p1MGsL0)EzrTsB{y_A{m!_f{gJTFm9@Ga8=kPss)Hyrc6lm77ekG2c-`=cwpRf_ zK~#A6&`aP3Cr4zrDGQv+c2y5oM@$pdnsO$WK6y$cG$Ts10ZnOZ zEbK55!$1O?7=8dzZ?PALY`pE$8I@&_-F>D`4O)} z*E18+qojtBp3wjO0|DyRAiWmYIiUE8M^vs9uFAznoVtcrZO`rlfxX`MM}Xm;^F3XW z@}VGbY*PTJ5lb@j?UqH=1cx7s8V4z>>Ysr4A-0_jP9{ntA!L|1XZDrHP7QO*ke*kG`nefn3 zRSa?G;qfCGJl$X9{wQ9Zi}_uoQiMn-jfZ}^kDoKBQ$ObJZHv-PS!D8kKR=zG8`3pq z?d5xxa?_N)t7`0gc;o5V0D$oVGj>%5(peq-XEJ6gaPh(EU@J0j7#(1pr^l`jk&Ke zX+CFX%tm?8Ge8Qi<&*;S-1y%6M$56BD}LGXaJg>aBG4A zJ0UHH>xAD+oz@U|aL*aCH22q{L zz6?s8u5eK+er74f#@qp#o|%kDawt>_;O!9uv75)xQA6bA^hPNQ-K$aX06)U$ zgvhXJ2}=vt^oO!Q8@a-Sr}QD*BpcLEVU)YQgHu+>d8)87h~~f;Cnex zYlCNn+r0mv#kM7c^;;JEhTXqT{!a4}v-_t145fcA^$&bw|HSVheb3W1c7zoeqVE{|2k>Q>Rw#z+)JJ3#u9}z8!q^h%{xOQm_3Ll zi0pNRfCqE(mZ^Xy9mw}Fa@*L)?knljA{&aG1Q5oM`XqE!v@K?GcP;h2;||zZ_R|`J4Scct#{TxRzGZO9lz=`B{sq~2pVq8XwE$0!`9Z+1(2Q;?D}`7YMGDsG5!>> zM{&=V^1>)|cV43di6L$|uhMTq24%%*B;05B!KD#~5{OrF5p<6M2BaCti;7!fLq=RG z@n@$#kwsQVKe=lC6F%0?XS+V6aEC|WIjeuSBZ5D@=5Y&j)r2LSA~ba(ylT-3p_607f72 zfHcy)bbL46^ZAurQ@1{*c*R@zV8u#K7l&SM{}68!WUY_)(mC#RJ%KzD{Vba7O_6UC ztGj-$X1y5i-{bhJh5Jn2)QRj!YGrx<3`^LUrrsTp1an+uqnVE@Ciu!f#r<)`<#wPn z(E;N#q71)OF1XDyR>lb=eav3Q*`Ux03A3J~0&d2nj-9t)UJPiy76g3@qkW(DsDR>; zOVuvW2|A6>ULN@y!3)72PIOw|`x_xN5H?md-E&(<-c(g51C0FL#oa>{3`mNhF$7`! z96yH^BXPf5rM$17HWzzw*=N&Ek`3%!bQ=g%$merd*Ht@v$D8Lg5pISLikXWyoDJr` zzzH4FH5iCOw5IOV6ZY$#ry08SH~MaRvkBtrg!0Y7yNo+&sSZC)VVcey6QW#`*!$LgW`%*d;!9o%PrpeO;> zPXijCn{^o)H(O2hQ9VS_tKtYEz##*K*n66fY+>+GPkX|veB7&`%s+Q8Y6s6S;_C}q z(;R}%4R%ml(-Fh^!jmpk=-3Bxug(~m+{MXYHH!dIXl$^AVZXhTM=HDc)5C-1F6r_x z0ZT)6EMa>pC^SeVlx1!R1Bpo1v6a-M8M<`u*tYr{XVk|jl}Y+McNBd+(_V=6w-`EW z>bv*tYk!MtZ~6;a&QyhLx@!V5wMa(^w~}_SS|lZNZWZF$O#GJF9js;t*<0~Fx;M1P z^d2#jg4))X>$_ez`@PI_r!V!=sS!i!*)moor~X`&ddU0o)hM7xz$UTI^6gIl3lP0g7io4TYxUe+Q2 z{HC{6LXDZ1`DH@nBw=@Im%n1s3DzQHneyDDRixF(HtnOGXw4#gCuTG7;4RJgld!`- z`_2yl7~$unic>glj@6yZIVkMTCu`LKhw7-(?9dw&~Q~WJz1wOMF0iW>S;V zg=OsLT@bM3eo#cE<*(qusa;8wX(LrqCoCht)#hCVhI}d}$J@&XY_) zU#MVIb|5#&er##eES#3O>5cdRjm)fJglP+AJ_haq?QzS9iLOD3N^%P0tMqzaXD?TR z6Mahu-YouK`;R=f1r^Gk;v;PL?++7%$f&#EyPT`LHV_UG-~lr_8@l8#YdHWWpTk^2 z{!c0^#fFCC@B7Wjmmo+~SXzr0*}+eIJN%jXf3M?syg>P#i{Jyg?C?ZAy_n@l=6l*K zpwG=PPv0W~s>wjBy6J%$ANg1kXgg|ub5Q`ETH$g}8;Xfy)hd2MM&(&&Q8im%IWrd0 zo$ZtuvR_t5Ot~=yB;y&)u0!8 z5h?}0s8JNBHk$^mQ5GElaV)?80`_?q7QjM>+Ao!!=K_QLk3tpz|$T|@4p z`wQrFep(L45GKsnQYOcr&wgvSsF74gE}u}rzWcVbQ%-mI`6VH6@*Y+Z5wWA`L%Ul zf*Q*b^alQ4yY!{(W_u-5=b24;PF=#H7O`o7iQkpv8Msw1+Hy!ZY35i=*zOi< zhD3nQSTS-^`hFR~4_YI)R!)wo@Fn8}%uebBeblDmSS--y2hV(wL!^5+)HzYBAy_{a zTr)k&xKc8~%(kHiQK~CV-f$^UFbU*nTf;k}G#B8t`W-toU?g>bgfMQJq8mdM`x7Xr zUrmhQ)<*?PoiZ0v$ROe+B>Sac?w1=%D!VOCQPGszP!F2;7#Jwt2chOxax~%^fHcr2lT@`h~GCt#}8z3(9sazLaMq}fm zKB2pm-ahF9i>YDq#dAb`T%S9o=alni?3zPEeND&`--u>gk{`5Kj*>}{!Fxqc{4|Nx zjz9G@EN5tEt`_AQj zo;XPJyTV<#!@y16EFxkke~0t$5rW{ciy#S22n$vm$Tc1+&yZj8rax^8|5lR}@pVoG zFWS|4q>CA1$O35U*tb=zakU95V#x-p5;Jw$hS$0f(yI)ZN!+1@tF7EUG>kJ~F+!F{ zjwiyr^&hy}Ig2xAS7_@W?hl-x0&KR>Gz-L|fGtlsV{~Oat5gf`=uICQTUlK4C9#Ur zDFL*Qw<0TL($6wL5uNkMk|PwBjGK!ZiGnT%OOOrV)3-Bwp<^=#Z-_m5<5Jvns1<*) zkaJ8|&Ly_Y+Hq_!z6C0&md==jw^yeCnq~&Rd+SuhG@YPjw1`oH1nl@A^5RT=A-;;Q z>*fs;z??arhPKbUkg`gv?#YQPXsy*Td7FjYT)a}lE<}?|; z@?HgDrnR=vj{-*{u!#Yl5~|!-v}x}akru$~t8$p+Bb^C3^PbpO<3U+^52UM z7@X2F@ipN6Jx$82FmQR)TMlfV{~sM@-FH>2g%~Bv8{n!ugM34j3-bXw0Q+zI@;)`{ zlZ#Ljl$m9i{UpAoVhN}-Pot2|ASZJdRUu;AYB5ifbqOa3npfa5))OMgP7nW{`5e@D z266ZpsQZAJ;=o2BgTVUf)FxTEg1qG85QVZH7#hm=741lOA+03$n+5Qu|MtTW46rd# zC8riwXko>(I3!awbTH9LH%N&~VxVWn4bfP~r~6}w{psTYi(l1&;dJj((Q-l(W~?cF zH>(wvivo3&B9KxKFzy4i?a~YpYKvR@huhRApV$KbSGkFGoE|m`K^X}d9pX*1az>B! zKj*Rirtv=vthLoO0|g51AFi1ac*B)CD&I0jy6h^%+ba2MjjLI*+pf{+h>Hs?c5 z-)JD|&Dv2a2Jl2p%*GCTVzCK+cbZ(hbizb%j~@}yH-ErvjD8e-?PpOydh;cH1Q5t0 zGmOjujgqi}WGQDe2@^)}?#Cyvp}$GL>g!U?yGI9)4D-~?ylsW>s3_Yll&AV!r>r;+ z?|&=~?!lLOZ1T%?9380pboICw3LmxODP z>7%?W{+(JMWX5!Z%V*BDfwSKcp3=}-H-C@xmO(De?+1#wW$RrL^=0<(3RZT*EJ#`H zJ~)U0PsB{vhkZ9+rv#b|r^Y7LiJz+xcEqpHeq4u8|Ds6zi%n?NOldho$WK31FmLl= zdp{FKo%<5bnsjOAnn6bMk3vS3mPlUb+YFOdKpU!qbdYAHv0M}uvND^ zjCQg16~$>JAPR0=Rv1aWOo1$LB^a}U_8p?9l@u#abv6-u*|RF)WoIrNg`A-`esU7A zBsd|ly4G702wn8))Rz7p1nATz5n6oxt2E%>7#(-yTxkSlYwFAKeu*%fkbFboXftsi zDjRWlk`ze6Bs9FB&vy!#;e-8x^&i<*j3s+D@H%^ly6;mt(8ALZ0nq?fIC_-~?Q>YE z-fv91U?KxP z?I%}8A$_J6p4)H`PCaBq1v?u1Adw1Ds#a`u4Q^=H0_CxnaTfh}&Hg6>$g~nZLFhYL zBvl4%Z{CK2G{D<$gaH6xCcGV)f6E`8xH%2c*XdnKN%iA|^FtyXRo!qva9E^EQfPiN z^+}(DA4-Vc1u%M9;?n^e-B3ZfvzgcOE@ZX;t&|mKu}8sWxi*@Xb7IjGRxoECGF|gP zBLU(aT?)5qm(H;dryX=Q#TT;=mN&;U`|U-EdI8Zi4=kr2|${h|e6Pp+r1jBWnyhhW-lE@40(yQO7>m@9 z{B{K3Ul-Z%R3~JDq?(_Ar3b?1@Htr1RzsE+wPdFUG*aR4Ac4!w(_n{if6I%W;CriNAu`4y0I zh*O}vygE-5R9sN$^>hz(Q;g&YzD?fp2)}?MVQ8c6B43rmFV42x9jZ^-`LM1@SE$(ux(RWHekRpDyyR=u&CAI&X;bCI13{fumw4KQ@bvfEMwo_9d^*<~* zULgh?BVtuIAjK2ZvlC_>iBBQ_k4*Gt7+BCdK8lNpfl<2*4XZ4#Y%1afSjYmyHiaS} z#_7!)TcO%0xHLAVa`>Oq$@)hn#N<$pb?64!nbISl=Ill#M3sG<8l0!()$F6^rtIlx$afXH;jZmH)*y?xfQs zF~7~~+9jeVNfk`0`v*|#2Y_8~cb0dN%HPHzw!8T8tCCUOMzY$a_yK4ROHJ99u;BVt zI`A7#=umgVrP=y4=L|1u14aWjF$radVIPZ9EDE6Nt0X^FShY1>RybjuPF!nBGcTjH zn5Y(xvRyX;^9y0=rIlN{2TSF%%arJ}IXNrCqdGj(a%B$KN95iG)TguBb?^$f1S^Ez zb8BkFZ;j=kP{bpmABP4ONLb?MTimxv3-DdCGr00t`;_x>i2Qyjz&CNEh*#yQf#Z-< zwzJC6+yE{qsPY2(V}`48ye(55lI$zB++o0SRdDb&SXB*TxS2V%wb^*05TQkIXv3>_itN^&w@q0x&Ok5S$lCFzl_u8OhK5}=naa^ z%y;}ltvbt`=@)~tp4RVtkF48Emx5&4>g z%X2;btU1BpU0&d1?fxTb8|2fn+b-+c!`ixdGNKWk39lZ0Cg;TikcK(S{yXNfiV7XF_YJVMbs-C z-Mrwz)MU!RRIvtJ!t%@lK9RtB>ir(cR3(O8p&Qme#WyUvB#V}hO7zlJQ`_sCaY*^? zlRxQ_0AHp6M=nQ=tJU2eV6f|RR?*Qlf4<=d4$_(Fwfww?eUqi!t(_f^;Fh!2po@bS0(*f0ZPAo+Zz*##MIq}vj{Qx9 z|L{lP5<#vVD;S%{7*?-8dIHJiH&M1}r-^Ec$|zhG z(VlPPAPQLkOfW|x*bc3Fb98d9V+hs95xqL=HcW+8T$rh#_8O$LG>wG9vP3v_+g_+j ze}hTo=EGd)g&|iMSVQ0Tm5;E7&-|!z>@~d(rvl^10DJElGC(f!@fE}}@%Xw~F|~Bp zR}_FRbzB0wPpD~mzHFq;*PrrpfzG@{O1BHL@Yg~4XecxErTiBp;B&-2B=AKcB{}FE z5Xe8MIrw7h{pOq2;#xNW<}{!dzURJ; zW|f+Gk|1C&qg7H}o57V)+%BNf3H%m5C+cn5M>5B-8JeTdk_=c3Zg4@x3B_8FXyh%+ zr8F#HqiQz~C9{+TNoi*p&m?MSu0^pta(wZffl#4FH(+*_oP4g8 zi&cvgLJWHqw`4~=ppcVzn+Ux$;^edn2*i401~4e)$*u$ZXDGcM zx2L!)qDpDJcMNVFjuN59Ah*VJ-sIID%IT4bTwgK{TgY`?s&uF5vaC3PAyylZ+IX4UJnKJT?!BoqL}^C z`%^-PKBEuFz-+}a=*j4hD_3SC)7(t+b7+AmUIAc*jM_gy(T_4Nb7?Q>{+zSrtAx^u zvMyi2DggAgZRz2rkk;!58YNV)Pt5W^2)I9Co+zrjE8QX1EhU*p94P#ZK?0~c)G|FX?HRNT0U zP}mhakuW6>5QY=1@htM`Af9#}$R3DEvDwHJ&b!-tnsClVi1k-;m)%eN&Qf6O>=DNz zjAu+M-fbri&F`un&xZE~EH>pZMd1E_o9ed8`Tweo; zHvAfnF7J{$@Qsd^U8P#bFKf;Gx1=My++T)A$9el7602E@d?g!xY(*iHmyLxaidu~8c2Z#CtjMM_9?}(up z4}Iw)DT}V*!xT_2;!smEWL%@T`guo=EYXFXe-hu}ZfyL2II8QcT9ApBSD#&w{7;TF z9~3!k(wf?AAr`=k_O>Mr0_f3Fch+GmPO#Tng2y#odks1Q^s2U#ocjvOd@%x>7AemT zKW~Z}bI1uE4AJ;{-YHmFki))YrF%mWfMWd#nf#!;KwK>1vi^kH6T|$|p^?j$`}B%7 zY*eRs*NpHV?>IHkVIu-zza~^~)G#KH!~&&)BGo7A*@)>aQ)RGiNSSJqBGWm7Go^Uc zPU<~(ru}VUko;ldr{{|nO}0h{rX|~bjE>3dMMM-}Dd}W`19@%*RU6Gi0EzkAyD!#x zZnJM|-_oQ^CCXe*shH6$~D^hy`ywx(H_2^hh#p=mA_RCVPd+Q1OyTI0V53L)5JWto~5Og+E2lm{$4+9QiW^PB_ z*t^THGWP7$p3-7xVLNzLA77?`Ui5c`S68Dj$&3OuE_5vQV27;rnymC(4W+#`STQui zH|GoxupeOYi7o|Ap!DKly{iYcCOFY`qwWay3o}Gx?G|Z9@nl~EY8#XCN%QG>xdUwC zFUW03gm9slg!s4M{mRmLkW9f(;GGJ4Q8>`{L&?E5x%#BuxAUUe*6G{PJp=j@wBY=W=b$a;y2dk}~K%_nEiE=azg^Q(3LQiym%H5*&D8?RX zS2j^VeOgw}IvN;x$c3wJ9w4)yb))FDARqfV^o@@m*RkPTw5zc{NR77sKovxPuqpY| zd_Y39_ZYqUB`Zf8e%Ab#zHIrLAP;o_)wsct|=BndX++#jIj*OPx(`c&bh9V#l0*n9;FGhembS9+TvTbHwM{Ri+JcUJ~?>)soKJreodh&Iw>M^R6! z#}~N4|E4wCgscGdKL|4W~A=TAEhO~v{LKB_zM_nu#|1C!Zi!r>(yPk!?+^WxM1p~0Dn8`ZPY7z;G zjm6$>AAKMXCuR0OQnIh6MtL!DCZRXV$io2WLq9U(%2QbyPV8{3P(o#!I`;JiO2W3R z70=$HJx2{EEbJcL%Oe*|7*t>Ej|N&*u!~wPgCbi{=4n1#hED$hVZQ7*2GSg~P*x9p z{Q<0~#sVa|;D$4dihZ*+A|03lC6qD5Dc=-gz1JB*TFtt5+8`+xe<2H=NiWjlK>CI) z0sINh4~(f1ZHd#RQRf$iUOg*|bMCBipQ#tag(<$YgwjUWpB;(N{@4{#;{w2{vblDQ zq}(w(v6B<@Gw+Uv^-7r(N6Z=FWUU^INMzY~if2U%e&q?Utco{pm0XoG<9nL-A1W6_ zCUgZdxFrebac}U~d%AOOU#hi=sF3EN2PH)SBz!oUwq;x^ly-POB>F9)$x)yS3x3 zqrF=(rBA=71@I@9HJk+fUq=O|N?h$&JY(C+>xEcgVJQ1_8vmHVC7Ouh@8}hy5#1;g zGP*sc4=bBVzTDx-+30mTh*{Wl{b6I}gB7VU8}nA@R1`hLlOb|Fo63%x;oXjUnD8=h zN5={zhQ3;dLnqha$xKlscr&sS~6=wcI+4`mP_$Y!y@=G|<+>_l!ma*WdYqV#d~wxys*wivtd4 zPz{`tDS1qF5kZ4cw9?7g5_?xD>Hw5VD^_26+H8GrJH6SdE-uW*n1AV@S|_B3Y|ZR=5yGSiWQupDYE*Z z$%n++o6wjeu4<)A=zfoy%IA*S;D}w=3Ta&KeIS1cg+cQ}RHst#O?8hX89p>SBn&Qu ztqEBDy{LDqP*tR!b#rkeTpVI!$r6yEZDQ#<6TKkz_vDph zu{aJo%?&4O*Cd~ybG9cy#RA4~ijz4{PeAx>lTbYhR-(FX?%@fq-DF%K=U72ESt)r?yiB%cy}GPr zUpspgYm(6$-+lx29`cydq&)oNd=|YA%EB8AREw=BJDPdmx{ws>S)p_Z&z|gfNoM>mg$~8+SK+7nh zHlhL3%EM77?5j>K#6i)QsWA+|G6{4*XaYT$u$8P$}czmI;Ye@3_)9vKF`%BIe0r19_|>e{}sI99(m_ZmQ6hT0PB4jyfZM(^$>wxJ2bRm*(Qmwh1c zj$a5w7KUNkX?IBJP;1Vd@cT|$2=aIcV8CLV#F9h;0cEWP9^0%=D5#{I_H~Jtgk6|0 z!1>GxW#KgHaDGV+I2im4fvKUY|0C66{Tuzj^GVcN<`{)q7?CS!tsBI`@>s*W%w)r9 z00L2X6ny8sT-oo2=WX<+665K$_XpS0Tyv zJMh(ZgEsVALLm(B>AN75DyZYI=LH~%vDD9SivoZ!znC=4D?`NcIRf^YD#E~KPK2rO zXq%=AzCh8iyi|at4qR2-XsMDlZy-nN=2_SbNg8@1&FnkL4L`j5nJpJW>yI#)AjXac z`(j~M)SiO&mDnB9F3u3l1naxibQep|^L*U?Q=^<3^K4~YuK8aFxGx4G*+fnlHH84J zi49A}PJ@Rez-n#zkEIR*8G6n?qIeWEcL#e7k+&am) z>xbs&PsD)B#G`tW_x+I&iQ<)7#mCSUjc$zW!GZk7mI{sa>2$sXBamYlJ%0|z!;vdl z;7!AOm||~iudgcBiexUFL?-i7divwV$2p)(t=i~seMqwB%&5B0b+sqvzp3Pnp~PfF zj=t+k`k$wwtS&6DXpm;ccGY*=1)_%nJRP#;bbY>;OtTi5jpPO|^X?E$oP9fMXIb&! zzo>9-_gAY#ZNpqwHg-^lT99*7j^x$*f3md}A>)Zk^VF31THvG_0Ma`s*6u*X#*WB6veSLV^zvtyanj z&1%fmQ7DD_HRQb#M^&$LAsy{V9){$=u9pKZPtDp5Q5q4uz&f>6!zm9u1lY@^0wKCjMW$|3ixE@>yDSMT&vMflJrp8zFy$T0oHg0sU zbYa_BfgTR}S>pYS@e4}e|4ZOH#%*U}17IlfsejFKdv^wBJh=L9QQ{mvh(w9(ySyn5 zISlBsJtG*MDwUzBy|pD|%0!e<6TN0@Qb!wg&*K-^(nIK;1-q8@>#1^eqC+Jy0@SfD z8Y%o&fV_AT##5n{1=h&TlUJVk(4C~7X#!s>`%T%sYb$HfD@we*rl`FCm|1Zp^gdT| z-0Ofz=~W=f>FVM_|CNA2;08srLGQ-=w*?ZWbZT}Dmf}h?X`~0#9n{EkIJgpnP^-gDT|VkRDM&Oy5B1Pg?0#GSrKbk;!P=m?36*_*t}%jNkHlj zCc)WL7{_Ls!GIk6MW`k@@F02a>+xAKs3Tldd&y&Sz1qFaJ(1%H;lWuso8(E za81Wi?i*lWBy=vrFIwFy9ea(B-USYE=k+lB_^9Ne zF^pL9abJ7{r!b=1V+>o_ z0IL+k3eL$1n6KrTjb1b4(b5VStXNvOS=VTB{39IS2IbgV{8N^z2gw)`LO#2??FV&< zTnP$54}n{$0iCr9?-Jcy6+B%xd$PM$NrJ+yjskkdoQuxYnk!B$ z;R-*-H+monG_n#lc?gM%a{cF?EloXiLphC4*bEVKGye~J`Vp<1;b_&&bov?BwSM}& zWjL5?U)%Y=h8X*vFO3EB4){VJ=wxO{*be*y(*f)I3C5EJUoNn1AF@Jye#wsR;y6IK zJ!Tq*!;MP0mQk5Brie|*H>L$e(O0zchCp2s!-8@fJzaH^Q-=j})gOeJo%=c-h%8>h zjOE-Ti$oxn9JMPX8ERtXU2x3D3Id>V zv%z81FdEn_hvz&}1fxreMv(*6if++Z z0T51IoPBwNM#bJ8$Rw`{elBE#rgvzAgS?h(H{y9w1WGA-Uiy4mhr$Lk=*q~O>1p{= z_goWGxu9T?1=k{^4}l;^b<2?l^S3cq9mqTO8R&v&ZiNF|F>39c!BUy4zUb)JCMRG7 z&4-6Oi=Q^zZAuF^4+NF*-Wqa*ODj@xiiLc?1K3oGfi?u=M?%~d@rx3dq1_Y(h%cSV zd_&6mprleborSPv<3IyXg=8`Q;$}xWpN?y_&F14_k!@x!ujI?`0p%gi{BR@-gkKr4 z-_p#g_{$Er$ULLPa+EI^_dRCe`NH)Sfe;Q?3KOCF6>E#|bALawEX?rH*A@$xYo7BP z$q_6gcQEbjIYYQ9q^UN+;5UDMSN9CyAb6Q_{F^{piM^aODcSr>P*8X-(zr~ou%^nW zOt6i7g;4!$d>CSSI@Ze-lg3MafKL(zWL;ckI}j_SBd%a1MKZWG0&rSHK(1}~LNFU$ zCV){~*x4ED1AQ(_Tn1`Kt#0Kc$mrLlaj$;BFQD#j^;%LY+GQwvZOORWnpSFI zUlU%{mtwzCs;V`yLa`j(WQo?~3e5_S0lBDuc+|o=HOv5HC5DRPQ~R!-jGJfW!L|47F}*LT3~6Xo)@`-0%Tiz zI{SXHvqQJ3LoH zlFSO%fgSk%y=R#B7bWJq6mdippZIywORln#;{)81v1*mZXGT3vq~(cZPve}av(^y@ z=EtN6^38XNL$K-B#?ATVz}?=B6Y8QT;o(cCJ!ufNt&N&2ux_PlI@;qeskOr*!dxc{ znRfd?9-3;i39p@#>b$orI?bTv8HE`HV=Kvmj0@?Ihy*`Iu*03m2T054?*Rg- zQzB$YY}BY_Glbzcc4D^Z!pCz2A4ky=25tNhb97CDrORjQD?c&vbcYv)I!<(Wz=-ln#En>T?h$&!om#`#*Kp1D-gr!9iW`b!hWr1`+Bz!mDagVopyC6}cqIR&Sjoq*HAns$wxN`nSx%z@ zb&^pGYHCc&NPs|7(Fd=dbcAv{gEF?&v^9oaO@2f1Zv}Fk zy@{uV&m|Ww)Yq=yh+*EGt0DJ2`g}1hSs=pxmO$!fu&G|AldDlEy=>){}ynQ$+>t_LylJ*tmF85nPK#=ED zC($!wtSO6%b2}q5PH^|PHAYVts4zcyoI;_Xt>e1LejAf0M3mFfwtP<$?a)Bb*w}GK zMBR>Is=hm`+y5Tqr*QsLZ)4~q$Q-HK-kTFU5E*dJxU;ZY*&ZDSCk z=<{f3(xz-m_6=z*SGPjjk^27yo(pq3PUZdmx9=d#fw94f?|1Mzh}0Ix1-d3gu1N<< z_P~k4KWBe4$d)YKCd?wOdP_tSbZ0XT!y2`6nie|6L)ISIpPc?;W2ov#v9 z2?|SfMb-b+3xBYH;Y`aCKY3P9i$x9we(tlT_76euuK7e6;8(5Ih-qbMGggmB*8@5c ztxk(qJfV|QKjPk~9nB{IB~IX2vp8Yly!6MtL`0b|13iAPJ&_4F9^xD91h_BPg3eQdj9xK7(T-$bVhS?D_ z#2>7Als$mw7R#~Jhzi63@keZ?Y|RZsmHcnJ?e{EcC0Olp zEBA=uw|=mw&1znUlaFyuWcy^S6z?qt4q#Sukn&oB+h8njCItN_#Fbk=4c3OZp0Wpr zJ|6#uwbiF^5V=c$xQ9sFjxEi!)P|*BNXR9Q5iyIk*FuIRwRl!=MZ*$>7Oniu*N|m| zi6B+}m;Ai?N=^#c0RKM#z&ARG?y-XoP7$4H4}xknu>Ki=6*qZ!#eDkrc@n0^*n$z& zua?Los_VB+2kRvmWP_hS-z#F8;$PC1l+Ny0-GoI*@cGUnn-tLM?u%U>Geb20b;hR$ zRXz_Faw_;XL!GA!13m#vk%U(jJF?P8HDOkQ53_R zu5UP80lg&?k%GS*10Jr(FEHIw8+z5w9IzkD>cRXW-B|TEianstji-Ab`U2>a${QT)(%mk_R7P-hr=lzOerePB#R;U}O3I7cu6q z?m&b0tIdy)4)SjQ|?`9WCaVaxn`C9`niRu@ZFN4R_8K z;C%m&Zm4u}l~dYDTUVaPx=#_`)#;@K|6tio5K{q)#+D+6+&tI#VCmZWrL$fL+k%s^7ic`KMxvO zfIo#G8{^Y*V3dHJp%FeL2z9qoLY7j(j1$@w4Qh4wxxX+<33!ewjpUaoGB)M213q>1 zPrh_+1~ns9Q23w~BN28cjz3n|o~Wx#sUXGmaT2$xlOB^lg8Ke+r(&>{HmywHv(v1B zuqv05)%ruMz=Ss1GHTpcoYDuxmOO0Jrd^Oyd!gyO!{2)f5Jz(6P2_ii&{}quOh$$D zEa*|ztBM61L}w}Gyacq;U@8I7b%><<(L48NtQKW#Y7pd=Yw2h6sfYVZ{3`9r1#4=H@*Deg(M@nowT-H1mExK!~M?a+9pf!h#-JUi zkw2I@!r4v3^WMjw&lubU_*GVgXpe+8V&GG&TR!nZIN9RfsD;wj5##k|G<-#`E91b0 zl->D6^pM6BRLL^+nlH%`Q*SA$LPQm^Yj1iBb@5gH83YwYLZ?Mo0Pd0drLv9ArOc29 zuF9Z2h-{dOfY&Y5{BFhSyU)|~%uN)lp4`+lfJojX1-4)j_TR()7t@}BDp-3jBAUK# zx@Nz>rTgXvhq~(Ao?JQ8{Tsq=hz{-u{KXbDsi^wKf}6AtGlJ>l^HsC5n&}699_I5N zL4Ja-jfZp_6e|w2Eax-T;BENlvY9fUq-^^A5pggif|xtRkg^x80;D*2997}c;}Qm# zv(}CB&L;*b4L!wYpM5)YH3?_lDiWm>m&SYuAz|Lj>PR#e1fWuUIcos)C>kD4UPu5) zu^-R!jfRqdpPcEb(n67h70n|Qqw@lWa5o@taSRxY^S1UefzQr3+OHTzwWPc+Vn=SF zL$V6eHS9-zHX~`Jx`!w-#Bwye^yqXGwQcus)cQ~fM53f0m!|jb-K!z|#o+S!9FU6G zYgUU)D!NjOB{NFct$>=w@#|WKN3FbL=Y9W(-fxW;tgmo}s*9e~1I0EQ>)5U7_xc~+ z1T+NX4=ChZYy2SFj)P9sf>;F%7bVX7uI-$E`5Q1p=#qEk|7NwD9n{4Z2;1()Y6z&X z1^o=~e~vMs{1wONBx-SRb})sJOiGl=gw`L z@vkir`OXeQ29H;Y?+Fz(ykY({`o$p zvQ6o{#M>kz8MYX%dUc{70#Lxw+w8Uk7Q)p|#RSi8~VsD0vIi?}+ zrItUA#!5*V5jOGi^ivxc+ObDRYZ?AFmImq}*^-W&V^s_grS(-%vFos|1IZRH78Pzc zJhr25)@S6-i;K;4N$ujrfZ)5m%NBAA;myV$%Ms&x8VA#(n_r^iC!cU9)E6>`<>=ls z@M7$OUPT|g>{qEQ8V&pY)r)1(v3neH@jl^Gt8_gPz-}rvWkwa`y#X8cg$56pwUkP? z1QI2ZR}go+gJT5gAIaU|A4Hd}xP$F#P$*b*q>(AoFDm^2>{={cH{rDT<{`Rm|7Vmb zMjtG|;^%pw3d8qy@)+C@pkPGNb$2l=;Jq-d*&=$?M;nS|V;qm|WJZh$dY@+4|?sgLVK!n!i z)|SW(heV~d64js6LH^AP9G+bc6V6p7eC;l+=OIdf84*jy&{;d9O z=^d5iqKM5uy&lv+t#}>dypVD371tEPe+I91p5qRi9QXRpyv>f9alX>;*A6HKTi2%V zn&JZdiTa6aJBcLCGFPlb|DQb9xcHo?xmSkE#oSMDAC=uIH?{wUf)!_lRTda`c*l`7 z+-0pY#a5<3J$Db}n~}`*rM5!R(l6z5DtNTX>zOH9cLi^ZDTNvFy;^@S9ksx#wVXvM zBMxf9Y$uX9D$dI?>LZ^rf1jvf)<^hUc?pnF8#5=A);uB(5vmSLy9UeS$<~#_(17wM z?N;b*r%k77-3S1wuAy56kKui;Rq#y@~Ob( zC}Cx(^LLKvs!_ca=CPiRB$XjZbY~?<|74g>rPz4)d+#S!Kp9Aq?o=O=r8|0`2ml4( zXXjk9)bX@jEN2KWF$Kk+AA|3^roIMKGTOmP@i-x0Z)Zwh0P1bDJ3yLp8KnIqvRcN% z@oPyE^LJZJKpbsGxQloo&$VUL)?1PCg#CtexFf1-%~-X_+Qy>Ir8^v3Sm zGECOKu1NnliKxd(Dk#&6|JND-g+!J*|G>KO#e$S#4vshkI)}=A0ABg_roWV%<)Ks^ zo!Tw(_Wb=EhQAzZ?pFs~xIj()9YLx5T*5SspSKL6857|EtJuwAohlS0bYqhmhZ3Nw z-5s&X~x5&L}%h8b4 zxq06%AP+dA&;GB8cjBTND{AGy)UENiLg3kXa|_gu{$8pr&M&5twT`| zU&R)z)X+_B0MvP8x`1RA9j!TGTq^IAEUZzoi&`ytm&r-K{}ryl&Vf_8F|1h6(n45c zt@Bx8i(_N4SE~L3tx`B2lQgHxWMV~kKpzgkISMhr(_1qP0HDBnh3UkhFFa1xQcBfPi1 z1f;d}^s$bzJi_JtL7KknRf#mUS|H{WO0e|}|7M}HwV%$b%x@31`LKhn%rufomso-d zU3#S?lvr9Le}_e|btCcyDqil-hc9;rF-H70-b|*e zhyBn|PP^D${E>2$ygXt5+ph>HxGI{Zz?IlRS(bvc`&(=jYHk#pTM7&jxVtO90^L%y23d)_IQ>)etL)T4PR;9s!1rbhc9c|+IdE!yLy zsbFi%4ST%a!D&N&`9)KL@1tJ-*QTjm-^d%WXT{dMr?G*!RID=?^*jZdB8RO{k3JQt z*nAk(o4|e?kPy9KDH0UnvjgnCta5~_6;OnSLpAn*0RdtJ@g13BX4}6ZLL9P^bcbDp zA{{v{0eO~9x#n2i%Z*d62%NeBuFb!h_tH1VkoUS(4+_BWjbaJ?fr{3@a!muUT#aS$ zvVp$egL7-olzk5tx9kxXeo)Fl647!-CTbKZ28pj`FmP9b@4B4!Osip)Hh4Z387xUm zI*uLt_N)i=BcRq;TrLZ zv7hA8%*Ni4N&1Gq_K(M}6vr(el1N|Mi;*FwJa-kUn!HhLsplUs98=)ei{5N#um)2y4HW zC7XHipiOL+B;!gWxNf?hX-H4vDDNb+^?iHbl~;?8~%!$%5Hrd(9AdO<2L&D<`9}c*EnDiTKin@(?5=?403v zO~&EbdXN<6+@>(Kx%F)(5KKGc%s)<%s9ULxhdH5#W)l=y4gQ~he02%RsRU_36K29) zy&lVspL_2Shnjc9{vSvxFZF?6WEE&vJ6iXsw~jJ&@IOzJJ*0DRD?)bE7}4oa1dY+W zpVI{koRr;H{@51{*o*s=Sg~@KU~lzMZg-_6Kg>5GD0)+W?dnHqQ)9b#6F&-otB?-0m^ti z*_vUsGU3h<0fJ26A2}2l&KmY6O>^izlIU^w_M<<0&t^~MrqR|mM7Jf|^hsvV?;F_K zx^H@$HeJTS--!&#e4}52eUqws-9o3!%U< z8%#y2oVY0cea)2B7-=N>KnLb^jsaQjKm|)uveo1XrLmjue~*GA8FUkC zg*mAyPevrg`U+)2y_&snBjYW%z7$oM6d7!Q7zhb5aMsX-XWy2X8C`yQh0AR-tx8fD zVPl#we8i0!MuI>jxpw-VRs4P0n=y@F&T3el)!Y+a9N2e-?8XBCQ2!(D6sH0y&3Y4o zLEl7zlJ-M~Y1Rnn&-v#;1Vy?GY?S~7N|zwsoDBy9<~i2DaM5QBRc zWN8zFoxUwz?b>4TW3*u|zfg%Fs3VD`@ilPDvA~vuKVd_vrn+c2IKj6fK`T9*M0Fb_ z19q!3^g-g1kX!zFz9BJ$T|XkL#KXCEhnnL$p5N`qcm&5sPFh2&nQZsA&l4t+OnK9o zLq)v=#M%g|zI)1S<`f>ns+*^hI;@@+qTlPB!?x(Tcpe&OdfKpB-x4okSOwD?7}Ceo z^48Xnk$^%ESrg^c>CO!nJAYp8$3$WWAv38qTnvT^;^P#9o;)=2caoJ;n#jifvSaJ2 zW6nl#8!io?v(1TJu-5Je-0IFk$Sv93P#XDfS+dPJGONTgiRg3C%a)Go142XIRlN?!y_H1Lkkksr1j>Ux)>d zUrdb>_HGoS2WK;aF!xxZKlU;3IWo!zc20aUydp+k);xmh4P0H365WLpoQnOuw)k{~ zK_N=qbgW{Q6`}Z8Ny=W(HUnF%U_hy1!z{a$+TU=i^^p35Lu3^LHEwF zky##p%CPR17Z9lp=4+l5YigQZH?`S*TY*`N87}U($twf_5O4&w0+1+Jky*q^q}LDM zMobLaBzfJ5{J7|60RUwPm=`Edsb)m=r(V9^ZYuN-LGT&d@&U;4lWexhDAxGu3>84P ze5V&Sf4q**Zz^jaBb zSM?Y7z))2Je5&4dz?9Up;j?=`Yqp8uQ(_Pi<{#2wAr+Z)qd*?^MkPvg^!y)B!-Z1vy1x&j;2rsMwyfam<7o&*sWcf6h#Y*xLL023L%FF8<}xga#nQ3C9(a_ zcb@ism~wN-6(Ha$=p-SC>4uF38L{f#Y|U)hb42(9`>qsBI&fhH#I2#yZe)Pv@}Dem zz_o^?^PD^0OuHXQ66>Cya*rdmzx|~FW<>emi=iMX>ZZ_o=i@#~T+%C;Tu3T~Tk$OSUdLWiFV5y<4j zwOlu9xN2|3dI5Qa06bM@Eqv7qkm~2uqrt@1JJcP{0EM72<}U8F*qi&}H+*>t0n;Yj5v6FXxN+etun@!< zaq032O~4cI^{{cK5)iZ0|MZjKcS1iU8CiQD`veHyy+H1F`CV{=d!D+*d3#}VpoZ)N zij?dj@LN&unM_{9dDI9q@Xij?2y9GZq%i3WW^{7H)TOM~^A_&s0MRt;UsQb_Kj_-) z8Aw0%V(N}#2h!0Fog2ftGOXyPoQ#Dr^6b~MGU=p*oBCf$tLKl5IDLD(Ja9D6= zy7?v_{42nB*1VUr^tyf=8JjuFezu|VQqeE?C6dT5{+U@s1;<_Xk1Jn{&(@I}8B$|# z2Fax9ilSLL#P0@~$acB=J~7`rZ&Qoz&892eAOf-Kqv5&6p`f=vxvEPw zFZy&f(E=g?=&Ft?Zp%Br@ZyPF`jwLbyOi6{Bj)U71HO(Zd{iwqF}!o5&QRO4U({1` zEw4ZtVCBw{h!I`YcNSTg0KRvR*S=AkLrvMI^dzF;vH@}*4Hc`o$`pwpf*l^OSp=^- zt3IwnqXwYD6(JgY+J8RyF(H#8ZkOeMX@8+e`)?wm-M^w|2_V!w)^$EK*~u~q2O;LX z5jAU&@P>g|Vza7miJ{l%=f}(>|6N=%=mc+t7rnn`)Bo}|70dyp2m%#hUlD(MSlcrU zLQTV)wLfNx^Cyk%zJy6T)1c_{OI4S?+N{bEVS6g+f7(y~?9hKKT@NH(@UTHRxJ6gb zTD&B6*9)Mo`bBUh-g9{*sfEMTT;81sW}1BNA~5e$?{Vk&i={2`%FyHE?}0qk+G7Xr z47&NcSS~0VvGpg)<0+LGXlFsWH;=*h>i?bNUxr8Idu^MAJ-cjVN@!3MafPd{S#hiy?EaHKwpZPIkaXKcc$mfNol%M60OOq%E&Xss z15B;r?x&mz=TV}|mmG_8W<9KUpxkjTis9B%pHT|0);Q#p%tST2c6WTZ8h@9{rXvP`2j(Yj(@ln6&(2_KnWip zibe2$S5~_o`t-NM_7`#u=pfcTnE>)C0Bv)5KlBv3-Y^Fb|QPnp=+vXjY{MWI83Y3aA5+4K*y>Ra;5v}W9FK=^%POjRSn#B z-}s#^`HvE(V3bWw+wg(Jq%iu&;CgwzyZzMw1)S&15# z(+y5XIm@us7ESKP0SdcNrzpb$x-{g6>kp<$_oAWN6JYjPb#sO;~)91CELr#;Ms(qU<><8|D)ZM zinQ*|jxiHG3-f`6T6JOj&ctToB(Y|LVdp8Y#!GLXgdTEoHezjlzbD0>Tkp-XU3f>= zkah66cf!pfdO1zfLiTA+q;3^>vxbqTpL@TPA`#K;SO(QUt?R%lxb| zI5=96duPk?OFWo9BiYf0IYY>rt4L=ZJkzZA$;NM;TuhHeOs?`KjqBP%~AN}<2f~W{s`CJqz$orv- zv-y; z*5tu^$y=FZeTDWHmwKDUk$s`BR<5{ZDgvP2!BJ^G*yxSmeyf?OVe|>0emijD)6&W) zu-yc_8692wan}2*_wVW!RWzhrty1V!no*7c3IGl#6o7)j1z6hIu>hqTz>)MvDMCkN z+Z_eZd&`iZ$XwH>qH^Vb6{=gTAz^K+PlgzvnMGXE9aYfIj>gRAmv}Z@uEb?1Ex3lK z!kn}KV9E%d)R+sBD`9bjx{Y0bZ|J<8yR9(;BuFU9>z!Te2W09uS`N9@9P_Qz(m|cQ zr^|;O2K{kKYdHi+(DXJS8@mWU4_n9A8ocY}0|583L2)!0Ou2X{Q*A~sYu{z@BPv|S za849oXA-?&#$n_ic8R6;X@(d7B7V&TTce)1|8{XDe*aFnl5J(0v$K)RbLCL&+Z=p9 zR(nU^dJE?`(@%r4A>-1%ZM}?etp_>&`PHX`?VTO+?d;pjYmH% zYP7h;Z@q3{oNi*FrG;YJwGI1_4d^2bNXRyx>Yj)sw;Q7j-@}n*;~2%(ex+t$P&%*k zKL6bNu&l0WkmkJ!NRk$E3Hbyy&x%(Sl)MH1GJ4-|=FB3AMWyLQmBY(lkZ4q!f5;Z# zR%VU*^7mJIbA1Myh-3ON1=No0_)s}HvINjt{IHpPv)@`f+Nud@U-HOrNl;DOw%DCm zlHc5&;zA3s61|6c1PHq~SHH)J#yBIkY`&b^D|f7qNc0ODuvU59L8$!===Z$_H^%Lk zwWIM8OHftKT=xUv&YX<_%eVzl;d2ou{|tO1gogs4jt7{_ZTh;wXEqs8(mP5{O`ddrF2hZ1t}f+DUe(RyB8Uy}9|1sbMtroW>e zSNhl*M8NwXsl&IlM-4$DujHhbtSaq2xI$Xm3o1b4;gdS9R3u=|vJ-@`>hJg5o_|4cKx(-jR;j~x$@LO0$;K|PT0Jnb~tsBqSGgrIa@dr4Q@w%89 zqQ$t$M^*y2?n7bn#EOgQUa@r;VWpe9Vy}}!UeI#x5Mq-etO?&eF}Ds12aHehI@_k{ z$EY6}u!=2L{P@;tDq^UkmQ0D~!%)eIrT~x3bxi;zF_vj5-WhZ@itq`g(n~7pywQqC z$YnWz#K%%#WiBEGRD!9FT8G4^`Ha!(~I;~X!~lUFEt}i^U=vO zdTps?kTF1*b*%~o-!L6RX0}kbXpT>2^rRZ|8i8pHfr-R7o5&!Y+SIFE`#?Xji|*2@E1u zf6-VXC?*D29l4SJf@e(!*(Zrc8Rl)9n6zSsc~S6;Z2<>N-?9xG9$BFlP6n*iSQb&; zMjfC1ORQ2B*0%ov|<8Y=W8*#kbEw>U02;s7{37ejguw?0$bUGsXRMVFJxw zen44RuWlSQtl!`)CWrO?y`a2t0d?HP#t1uJsvm7*-SU>^L|VHq7^LH#E7jg#Qw!gI zR$&kc>?gz-0euq}SfNgsyUuPsRDq#QHAeSmd~->lUR`bh$jw9)j!EY=DPM0siA@w8 zv14@5{G7~rSZAf;p0xHxJ~q^!+q4*xab84Y=5g?IDaMgU@zvD~=B43+MDaN#xC_#= z9-9KOi?iyveEIp+W_u{W4&rprFFlN2B7(o9t2wwG1q-)IR8Y zH+LXxH3A2h{7$73uDaYoo4CXKz5D?mtpj;Ty@}OL2I?@fsnLBL#$H3Ls+B%2_mE+2 z9EvLVVIkX<%QgZ{9AgXHROh(=JwE}dx&i16?LSgP@=$*uKY*4$yOy7V3MhuuwhTLs z`n+0f4a<)9$!xBYTTy(!Ceiy{e$QL3D22vf zl^JpUdWY%~J<#U9s4x&SN%V`yJHj+z{>rVRLyarS9!}m70MKMIV(4WEL95CaqK2s^ z=few8oJMAn4|elHwsJ@|KT^HkFf!LwizTb zAUyI%G2eZEn!E8eWATO{4vT#YW}5p|i;=LTs&O?~_B#HoSxv=A_PG8WdO%vo6EKN- z%zo77ci&fp&hDN&-$;C8y8b3!M~eQNvVQext%XAz=Jp(2^P6Fi;AmzU|B_i~wRgA{ zEpEUTmUbypP*sn^_o0W?oV3U_^yOnW&zKGesg8ln@7~<99+`}K~ zBn;(a5f?g)Y6mP!4vi@6OrV7SeD9@dd2TvsN7`NzA-em+qOIffO73^B6dO@9b$J5A zF-cPDyVI2z6_U`!kQG2V-7gTar5Ml)P`(%#E8boZCi@RWfk`-_a;9nJ zKxj99Ww7O3fL3)u@HcMDOD)Z6Mut0=5x|=XD@GL3Jh|W~T(^cCJTcg2rZoX;xj8^x zDSMs4$c4oi^pc@6d~P!V)=FPG(Xs#*@O+G?j$85INFGE^DZm<0zHmu1?|HOQMkN>;ThNvOUJ%`BENx&zyekAxSk<-Q^6jr+!XzXpC-pRl$x} zN6;{2rbe8)*{7DuNerDDyi9rtkf@Df@V=(&GXFWxirr`i>Ne)g&J@bM^d6iYC8rLe z%jp-?EPlUhUkXeiwO>8HGTZ#s4X`0s565u^0q@liWk0w|4c}c^&jv^?u23}YUBd&z zcd1#hw`8>7(iu~-m|zjv+d3duw`{NT4R}#kmW#?!?hqp3*@7Q+OpZ>w3uL^NgT^Q> zMxZmqi59Sc#4{~OzZ8q@j;F`wZ%5$6M|L7*luy#7|AFgrb6Ba6y605i+fdfDFgv_w^4Eh zSmIM^P1+b#`SEA*=U=FU;F{Cz>3i3E{P<#A=*-oO%bdLBrg|LAs0-szJ(z|IC|spi zXy@pHbr2g^BF7t9QGNu8NXmroBsyZOfp^ybE%fHEi^{}zgnxJ7rOAva!1zGv3AAI> zr5%=qI0CPBCMo|N=Q{q0?|DTrYnhMNFDuOqePJczYEEchfA`hrMuW5A`ak*6Fp-Eb z#UCMC_IQt=F_LeQCuAk6AXYR`w4}+Tt5Hn9ishw`ob1{t%Uz4u-KXGo0|4OF)ko;w zFeo6EZTN0B*+da>jAU%E0|Ey2#IDILSv6%AxA1(*i5+?FxpwB5^`Z6w%{VUYR}xk$)>v-N{^NLox-8UGO$+rxW! zw7vZm;tM`p=$mE+n&!2;eox(3p)R}Px*aqFB4wSU{RWe2Jm;RqdCLZHg(W4X47+L; zK>5N%i;;Lk$`BN?DQy<2NcJTVg!|A|#@) zjCUEWjZkW;|u1U9b|I1UV3vz+A9#ORrDo`OjLG}l#&h7cQ#~s37~|Epj#8SQ50Lz0lJdx`Nt2rCX&LLp_QpCtRL9 z^mlA!%;`EJU7#Ey^5pTuSgB9y`{yTjYQtUX%MhN{8XhR*#8{(|ZnK@>Z#v|**pt^bj@?oP($ssok~O&59jZm~aqe+f!VrAx^d2DomRV!oni2zCVeby_e%_5Y=>f*36) zP;}nOsf3YwNn-+Zqj&x}rbO&B=%i@s>g#f0VBdDXv8AX9=sp`*U25l5Ye zBw*YgtH}VXN5pr;k7ZnjzTp2KicBxiUzvG93vA}({=r4LgO$Q_3(Wi5Y~QPgqcy`| zkgdts0EJf>6%yV-!988?wVt2P<)O@6h=QNk#H)-<>tPC`K;e&|7rDKVYF^0TZ|3}p zP(^8Fbe#(wpWuP^1o^_ij&(Gc^b4{HpR7!)pwo_opO1!m@eK1dBw_@M%QnJeP0BG2 z^s7P2S)R3>7wnVaXlUt>XXSFqJ;-d(?w?Sv7`dzH2t%0_AmcFp+AQNT2vj4|bbM8ETDrvc{b^xjo&Z?$_ zX$?zG1R07r6~2nNqm(3nhR&qOWBDl2FY*3P{!YSGhCixdO;C?{mh`FZa4xc^k0WfU z%Kgf`KQ2&_FyY#yq6iQ%rN?o5Cw6`x8O#M%UwMxrUa{2HC}>cs*0oxj4N!F*HV~`C zxb$aBc#Rf#{qm_jv9x4Lye2jx#cCvP-rNpL1-Jj(t}%Q>j~k`5TF_{8A+ zxaCKg09^&vX@8EN2HXZ>rBhR;lzridnLzYhr*^tm^`m|_l!WU{Cwb#wC654}K}EjP z<*Bl(uf6(EqDCNuwuOfJdmBsZmtaYJL*IkTBi=fSHs!4V-i5SroFZ(YuSDfYH`6Ma zHfNlDK-}q?Yh(|fln0}3fyjjta8(8`W=c56^K+R29kD|H+^Gf54LzFgdV2M2MTUtP z1gi%E7cq=HeoSbz<1mKAsDTLB=q)QGnO$S3X=yef!rBhZT_K5{XW%=O`l{)PR6y@a zDWaTpZAQ8LltVmm?1Pd?W-#OXAsF+OAaJkS@?9wUCR;uO^s;H zSW3g|An`Gx=85V!^+D30FS6$ZTQ0p0l*H?RcCC<=$@qI92;1ejoFhm&RNkWqaLZ?|f$G0%%HD zLr8b^u8sHwh%9!$ishs)TeoMv?|bG^NyZN|pOFeiosvHSE`NM(ZAOyTuw+As!elINsi4 zn>d6O(b?{qXINYt9)6{o+~2-t`@TGnZci^xe$FAKu3;Fk=jbk@$diqJ=ckzaIp|~X zlbOVk{_cDnHcGgb^zSK|E%0)RMs6N^{UqS7g;|`a+D_s1FyA5rWZ92noKJ2OjyZ1Y z+bg5vKXlQut}krpwi|WchsCbSm)tewH~*~85y2z-7jh{lU2NAp+DwifNg`jeU#3yn z^_TyKe=QHatdvRowUA`itVw3Eyf%xt*4KA*mUZWzxhd11ih(Z%r&0XkLNINEk6W(Q zKBO=Ae%Jb|)QwABBsd*a?diaV+1|fu*BJkam>LZw7RVj=SfP5M^6txuIuDW*q$~g1 zE%YXvu0M0*?lwE7+IYNP96oa-<0fexT@W13&kGI6IT518LG=om*o0THr(_!H5tmnY753lQ2AUSZEsBs0z&AxzQ+^iETNxCl|0Q7= zcS+GcfBb&jUm`2k9FyJceQ`P?@9;F0q1~3U!RZyH12imXzMKK9I_MXW6*94^r(Kr2 z`%Q}p4krUn9~z4ltJ7c@2>&Nk(!4Nqak>Rbx4eZ9Rhl}I5Czk0r(>?ke_;*b(3%^64(!Uaq8`;lpUZ+UW=?CZ}e!soRWVXMjf z*nGxuX`NE8v@obbnf7d2Q^P)0-wB>Ll10P?T#6tzk5x(R80-p+rR@=br!KcM8Ka#q6G&T1H9tg+%B1~d?L=OR{zLLR7rd9k3&*!3qI5_#ON$^wp8nPd> z&sWIoyvDk`HQNG+lZgp^4%1NwU?8x~R=sPxFu#K!>@uBuBK0cgRngT;W~MNdomi@@ z)Q!iLHVyLe<`uLhd&(a^9Y0vWF-Up2_$_gvXh5XJAk$2!hzEHGw0Q6WJ05ntJ_P6| zy=U7)H^r0qlf~E_@JMJof9>9)etvWbS~$oc-OX@y(yfmzBc>;s)kjPhnzAzy0mKdW zm0#ulcf)*vD&UlteQ8Srsqn-OrN=nyKSS?N@U0f4KKkt=It}kBiVEZABKbozfd)`p;h#2#2?BzTwqF_N^`|7-G-tC>;t@wx^_8gS3ypXpxh^s zROYt9*|2H}XkF=r2Bl>l_Wp*uA`C8)0F513f(^a;((u*A2E-)#As@25g@3WWcHK1y zAslVpjI}Ww&X?f`hP@VGoNh3H=&EaY&pi2u5ej2*tXTjH+@YCwF3b*%gaqqMbB{uP4W8YuvDcq$Q)sRJuV| z0IIIEzEtTgP_k#aUfiJtlVzuQA;4A5p3J0bAA-Ww*hX^!H;!Oh<&`=)Ir7Raj@0E9Mm1-sP(qlvY+szn)O1f6yxQ zKxlg8P(mmRhpRbV{*#&!<2*cct7KgQ;OB__@*fnvP=>t1lElZ*&^d2Y^A6hjMleFn zhtn83zlcx=Bu>It3oZ@&OHoZ*j6ghpAnCEJ4(q<|cjz0&`(NpfHv6mbwUN zc@qh6B%SwHzb1r=rZC6~2O|mn@hHA$x4f2NyHN9Nb73A&7?yWzZDBYyfYz{!-@c=& zTfN4?+Y!pHHN#9j0+j-aSA7fTIM$8#lPh6H5a4mC?O+W*JUfibuDbrBRW8m=dfedw zNjeYz*|Dqun$f7tS?nx&!XKF=>qX*dujd;4S(BUvliYHWDdz^dWcVM{91WLt-nBA| z$b~&X3aikMkTmi1UdY93aE<#&sEoeBY_S`p`SVIa>BpF}L(}6txz&a?qz%Vc)8;mU z48!C1FaMN1$vK4GNe=>=XN53IVUSkJpLI)M(AAm)4`#09w_ALpoMlIJmmlCS0cCn_ zjP|n_`6FxU1-vYw>IWH(1?)8FwHSyRtLjdK%gx(u==At~+H^MK=XR(J%n!_j*RzPI zA1`*qUn5^G%X!O#q=qy2Ri|fkn=&w`J>QRJAaE<>oU;3+4DR`hrg1+%-4l~Qz4e9Q zL2D4YeVPG5t8>4)L90&(hE%@}3|{W9{4b|Rh~ zvj+n=@Sgu5{k>t{%&ly^|Po=)5$W15V*M0F1h=S57 zc;;(~0-8A5c7-Sj$t>k?ef}_kz;}v1jbR z{k|j4G+)Il4`a~jAvJGR8Dm^4c&C(TXEyoLVZxD1StIW;QZd-to?X| zPRZHjfbqz|IUz994KDcR>0METVN!f`@A2L0>-M(|S=GYv@6rw;5K~8;prp*bn*e%^ zYhCJmr2YSnb;tmO@ap?oHOsbz3ZF+RzBvzYD$>Q-IA!vUih-l<(y?7nbX$11oN)LM z8`N|v)p`HRV8U=Nr1Q&PNG>W^`&M52!V5g+ca!1tWooOU!n<{|W=ScUqAZHM}iF$@IK)0rd*frjn)I4`{Z;Mq$IX`$cC ziG)(oRqCUAu54u(8FshVyU< z68Qa?Y4Qmz#ybv0vPd~($s}u|@x)uLWl+rPP@}V4Nf#L_>vo2sKAaTIXKUm`fBvm! z)%-iSEh0e=v4{*4id4^bnfQ$o-TjMXevZss&8pg%Rq7Q=7eMR^EMar#sIm(<+rSQsps_5b{YS9<`-70_WK8ZHqvYdK&t>eY6_?}+2DeD z5iR|{Hc}oSjWtMp04{L=kMHS9(R<+v8<{HZkTruP1tc8{{;;+UDgB40fxCFHeLk0( z@fS^ed4N7irsP%atD*rnM2J}aw(RHnwYom+{^0yai(_C9Mkn-&Aet+9@(jwj?ERiqfF6z^jMBqSDyn7m&Y7NixD*% zV2VHh;Xjh7^}e;X*c}(7x3W>H7T--z@I@TWg5c8$H5yPsW`GD%yp}4=B~KfKqoIV+ z2rZaD6KJf$KriZ0bFqJgAQO(0V+Z^+tjHJp_kkjThs!4B>lvUK>TL%g9_Rq5)A*QO za>I=NrY)QOFxU?fr#n*1=7KwV4x#|!-`HK8ZhLX;d@sRZL@M%hlT-7`F_whtGFu5hA=RB|}I!xz3g z--K#%mOZXUrpJ=-C3dYavYk-)28!e6(Ca=M#qMi=NV6z6z7(Wr60?{yqkWl@&xc^T z7HqyY-I#+{bygN`QSk}Dg}F^*S{fC$3iApoQ-AE)1*%9JN`<~!jSaFxhmLa#=Md9I zlan;0sY$Mw-3YR;>m$Cfwy*SD_jY7DH`^v{Uqm~{Qx$4uYs&TxgKyw+SNd!vb0DSj zLrGzHFPMs|)#u~q&7OG42{0@@2BHiHtBTF47UvzvQVG1P3i*^UB*t<;86<@}E z*pK;VRUwKNUGi6L5_xyW2{W-#E9rG_WO7R>%X#>uM3i^vq;aJ2_-Kop zsOT>)VxdMuCXK)hini&4bO%bMxqx#V+2j)5|3?W9-1G)!-8&|?YF;OK90pTz6N zz9t8x{BIvfUhhhJd3YiF8nWDd(DJm2?o~6%5E!}DHaDLW`sA#3?ci?1h?#T^0M2^) zJqDT4gJ`$+IYEPemQ>)nSIcon1U#Pfv}yd5)z^&G8h*% zVywQTL*Gv0s9M4b;Qq!$YZmY{7`wEi-i>Aq28;=s=<3g{7ztAfm{~z2907X-!i`HI zpq}@sA)-<<@*9&CgU8L4Sa@|~UjKca0oNReqnQ)yn!6Z+pzD8rWRS6MbO|`sBNbSI zv$9u6zAytuP`T$Ie?=ifBpfC%qrx^R<~d674&@pNYV-|M5}~ z8|aa_U3HI(wM)9??SCIV(Pyssp`Z*yyn@lV870An?lt7Tb>gIPACfM6Q(9WdKitc- zC~gAceuYJ6#FD2SlN&M{s#Jt_=Li}Qh+QNZe@Vl?PKqo1J#KW`b_&8sjj${oEh^iH zO75KfKo)clU3P{*%KERl4fn33f4h)7*^SN0-o_>D69YEk=F*pH622%i*(3FfbO(7y zpWLK8S%fGUS{-_7nA|~6=b{gdTV_w%C$%Pt@8Y2`S9<2aiAFH`~(>(I~l0l2P!i zhZ#amM568W0+D|r1-8DhFP|#PbviP(SbciWs?$p6M)sClL5hlFl_yVc4RbctZQhO( zj#_SrhBE+-Nz6cXu4&#k8u(9AZ~7&Jfaj5X3BlDHwz~cLYZ}%E#SaMZhg|fKovm<_ zrKP)~zO)a*4zx4N{o{X%Z&W{sqF;ZFjxL+0&|kx`uVIL|{HTy#MSB9!LaA@E)Ky|)rO(Hb(S~%+O==}&yauG#l6&O?UcOH^xS#6_MCNCK4%DnBA2y@M72@mG9`)Y0bvR% zz{8v8%U&W68rS^eP}v`*t- zc4f`h88)i!17?_DkUQs;ktgP!imi`uELwf`8ldrl0tbhO$w<&W8E(a>hE~aCs4lH zROm+5OAN~PQJ)VTTn+5PefJ(R3x;s9;;K3B?~l}>rcYE(@m>qfMk&g!WC z{cvM6ss>mAMF`0`WyDpirKqvyNB*MuhwYyigpp#?>L=_*8)@=9Q*tYCTPxU$QJH;% zr*i)_WI{p^Wgy?P^=7Z6*_~g9HKq$tdLe^3#%0JP3m{P$8+!hBguL?8!{^^W&d^RQ zH!iqKQb=C8HmpFG5oW%;DvDUP&EP3lUPQOxBKmXYQd&MOu+WGeKx7dOwHCf|Dgk}U zw*h`u7~&DWF6?`@@rKPk?5>}!2Vz9fhDM2zxgb@+HI~}#=KILi3nbZn4#QiX$t*m9 zuhVp)W-EDv;%vV-7BLWtyae-iQh7gQDGy;+E6;ag00$ncIs_gM0#*qGCN`Ex9ovg6 z?MxdfXTi%R9#4?OS}H=ZS1JT7H;xkk8;&cMFG!d7x(1{u7w3}b>-E9|ww{f9Y8 zJW7IG{KA(mhJn_DVUYdsM*wEdKv&5{$bwL*PrkIQNa-5SZlh54Bc4eFy^0We6XLx_ z_g_>zuNaEn`E6Oo#_D^B7T@xT-O;(<%4S2;-b#$sNEvQ)*W4%@X=!v$6?tkSJaGR! z7{tCm8NAkp>?+Kd9>mE^2~>;-X#Io@B`-D!}= z$mD8oDzW@gnv?Jix2u*f=~8Q+A6CupcoVYvB{%3 z9zRwF)f#;{HF&ef^cUMm4r@8o&^qO-vKIr&wTfu`{g>J(SxzSLe3Z-^ru;1<=Oyp5 zlc6Ge?t|yBr0BpCr1&gQApvBEU@-)d>yk$wA{e%Tqow4_%Tw;lD5@r7exXJ8xl4th zu7dGto?I1pOHIq8mDMLeV65AfnIEg#WCCU)A{{K3B7PYcGWI)PzDvL0gR!m=M&7YM zU}xE1TxaydX8v?Be>TqX-;COPNN55yhO@ulhrI_T3g*GryhX}j^7+oX8E9t7Q}vr{ znzX=kEJ!wRA-9yslf$1G+WIIzY*hER-}NN^#5ih zMqhq1soU8hT)@L6!84`)6%N;b86n>_*XzFwt>{>{1#JL@9H2s_Eb(UFLrxu`RMv$g zT@bBB9ma*DW9@aUw+SK2T*6u%Y`x_>*0?lgw50JUCXhxGn%#C`h?yMO)|JV?Re1$V z@gEBsMsI@_yW zXjvGjHQWe@SDCPZEfYsyH#$QNjI#HIG4e=m3_6CBu51_=Q?sp;Np*8HLj#pxS&bpr zNO7G1p(~N31}|G*H5XjcNbl9O!E9BlOR3c@^+&2;jIaTjCsw3Qv+~DO?h^T7Ad=!D z{{N@G*Ay!(>0u@Cc9ibtq_p)Hlyvy}lHL@3BK7s@s!2U#KVf_lX!VuetVmG6S*Hd} zc;r)3)0KnL<6!80FPavoMpFK~r72n1gSEd9oWbB2MiP^lDQ1B#CLmRfbJT!jjN42W zfzChBNTzXi*>fIPJYqZNgld)9642!)?zAxjsbji7s(yrjZO*GkfbHfm89vheet6W` zmm?%vl&*oPh)wQE8i%t0;}rBNx)RkR8Ol);xGLkuVIe)Cx?o112muWweKKiOLbi-; zIP!BP8BQ3M_YzD91@?~)PHJ+&1dw@kDZ!+1ykL;ezUSguBmejDq#yVFn4XYDU40A* zby`7esNh?fTbfB)f0q0*V!rn&`AeT8+xskplHwW#Iya?*W0Z^r6?#zx;p01`+Ejy= zxrnPU)wrN%CbZcm*Yq5A#+_6J(3|hG$dlZQc_5|4aEmwWBDw|RfDi#iD3>`2+(_^K z2Cy59YFE6HmD8I@|81t+N7OgxUP!{A>pneHE!#CqQAAuHyQe zD?*l?(YqqX7Nq@QQcQigN4|uFYJ8hJvH6dhlh6tO4*4iALpXp2;XJ-h(}407$$6)j zTehN}A;(fO{OA$%_HI^b9(#pDNWqhn!sgxXkpABqO33Gz-@jdK^uIQY3LvY)Zp*A$ zQZ=gpq=yrkyIPgOm1qcHku~N1DLaOWW(IAOsl!>zeLf)w$$t@fqfaOfuS}sSoF$zjN{){S%1-S%F56M_=)w+4NvQ`QW^82`%Jx5twFFBHRU z#^`pv2-{8<1-NwJy5#S|!xh>dhbw99Z(y)PHnqAUMyB^;|G{aQ50@$(dtMgbr7dau z2FN`=bO1a~Z5#*oOTjY#|ENU99_um9Z7I2QRJp%1-@s*&NzYyQCL(Ub(YrKRQGUFe z%*szFFPaDSmax5*0;Qrei|bO2WdKVt1&vel>mJz5Yw61ZzI^JIG%jQPMx8o{f}dwH)IZL_$8E+_a zoj-}uwS_7>-FaC=vO)z}y8P%!aC&^*KL>H4u~ z`~215qGf;OULN%8(hG~h&Q_i@=#y)a#2uREGOOrvXN#fD{|+EWrt9P%pi@ZKGd99A zEp7`WSc|~g3`aocdmTLuBzb#H;X1XA#(Jse!b}T=+aShNq!_&)T6n((7-hoQbIzq{ zY2_9nH0I+<^s3DnKzd;gEGAWLgFgz`Xb}cCu18PBjR=8}LLvGDiSy_w8FF_z$LvD- z{9)qav}&O5&3H-e1`db8%`EBq`VbZY4brr&_`DlbCsmy0BDYygL?X^Ws`iLW64FQ8 ztowBC&JJ4_KdPz8`l9RekwuZ2^jDB&E@xspi_uJ7kcrm!(&b^8v?5wzC6s9w>&=uW zI#HXUtz672xM;Ud6}yYlZ&3TSlr7bph53lTFP3M=h0=xodT7Ss&axxn{i@n)CGHH)1(1NIPHzhLS?JY51DGW}t*DK#%z& z0;d5$VRT0!(Mo_@dw8FD{y$abu$8vX&%7z-AEZjL*kmE3i>-*YeKU2k_~d3&_F4z*=8q?2eQ{3Uf#Og2#YWin^Gbq&Hw++QC* z72$^34QG;?h-0dbN61=48AhR5zggS>Dqch!gnSDhri%*;SnPdqGKu$y&Ik?wp8h&@ zx{T<2{95&DA+BuD?A6EhtCMZGWZ$uxuND&tPV1Jnoe2l`7W@2iCC4?ba})4^T$aso zKhVk)R6KK3-OQI4H~dMN3tY*q0i0n5&up5%-F+nx0k^~GR>fV4c@Sg-vS*3Pf{THC zfV1q{)15p4GxQv2n*!t55pSxr1_hcBw)~eK@AQixOd5L|{GvG> zhE;OpY*DpTu0UECl(CGhpT&b8&2FMwniC?=4W76odf$O@_c#JaXYy1t!ktT`toz~` zt_4?<&1`f8l)E>YapxbS>E#2i`3YhU1Gcym!Sxh74Dw;GoSSG}(QDTpz&{g}Z=qEi zk6=)fB4w0p8z=SIIpzQn>||ho&aryYk~u3(U=2P2kCITZ)cX_QE4m3DVNjU@#A>_X zaAY|;w_1|Nn{_0-k^vhOWIj;eaXJjgHyX^B_hDS1t`U+v9$2vlX(e+;c{9ms{|+mv ztF%8@7Ku5`n%~cd82^c>0Y(T)1wbxb3FVx>Bj|E^MnOla7Zb#-E^gv-V=4$!fRE^e ztmQt&Ycpl*!;>@^rFVQMS<`v*c&-bYORshni=^bbI!uiHqaXLzFxh{Xc=BVQ=;(=} z8PruGyRCp00@=IvF~~bawVbK?>FfUbeI5QK7j_>tV{HE(WrRtUcG?}E_0%yCwk4ST z%vNspZzr6oU&)T;4d46P=*y~^cM59k$+Ct{%(k&zv$gX za;G5{{E0XCJ zf~rMG%-RkGC9%jQj6(59!HXBY{E>)p(-_4fMuInTX4sh)nEG%C+du*g&c(begK)j6 zsMj;T1YoWP=j`kW?IupgN;Gm@%X9 zihwUy-L7{1A&G3*G}OHmVssxJgi6}(SFNecUpeq__fwH1&xg*t^(@y`-3Zii%I(!@42Qh~dqdgTFQ%>ehx88z3 z#=5dgX2u`-%MiWh&ON)y!b?C-O(NbnC%*O9v6}(HK=`D3C<@y6?zRt5pB}xR{~T;} zYVbWp``-iXcqr>t>4Dj~eZ8j%9SHbDEdWca@BFC!fV$xz)OwHwkP4g_c#o zte9BeMw_{#^4+Y4wEF>P2^p1+Hw8wxck4iZ?i-A;SD7m;?eVAy`nk294OsFi#40|G zg~jdCDVuhyq>KIs8TzpiH#DvVFIkUN-v@&U>wu@uN`$ zOm1P6v!f|Ll9GU5liM#kh&aQ9-W=)@mIy4>LRNTgez@zj7M@!GRm*feV46URX`*`Q zjaH-H_m2%-zegE;X`q?6mce4qiS~~lncK|D$J9HuZis$v4vJ3SEwy9lU*u-IsK&sb zs)TdiFXdTa;z=aF(1xA4>nxq6xoRCXFvQJ6({K#c;Zk)#H*BSURj2HcN1Rbxcn_b4 zIls-HSHF%x{{k$i-v@ZYqU|fPH`a5CRx1Sf#K1z$aZ_1G_1Yc*@*T88e}TTmXGG0A znOs#g)!DKh#y9y+d{>x+W94=+Yf!n&VJ#AM?fhZ`4ma$=~38h z92DeF^;Q>C?@nslP~aD8x3(VexXpoFNi@wflopYb)p0pf95y{pgntN|AVQ&0x-|c& zs#0-71epHJNAoWXI?xLc#$L4O-8`TLQXo)UWUin0%`Z#=hZW*`Yo@Gy_E2bJ9f5pI zym`jPr}3tSRs>$M9$*;F3ux`Ii#0NWzOvuIkiLMqwHWjw>Bj@2`E(*qV_c=_Mn+AB z!?9BkH;2_z0Oset!jjB|(S~$SE!5iorJ^;`Trip+$ASbd3uChX?WrBaj{WWcI@c6Q z=8i*lV+!zY{(l1^P#F5ccq_L8o(+r9tx{b%-bX9Pk6t*Q=1$t?{>W+6RsW}0X-u@# zD+e%&03}ZcK=UEAqSwl&at94NOb{V5(E}WA$|{yN z5>**ocHKXM7NqvJ;dMTg9yDOijC8JgUJ}Mz(uTkg3Gj{1S)nV$k1&Tr1-s~#4#+~BnNBd&CYkCHM)l9TLgye1so(uZ6R4!Cs1|A}tT#|c&KG|EFV<4)O z1M1&-dLCieoF2_eMq;+(FG7^gnkIy`?L9FDo$i*@RKO46AP{hn+o`rq(R{uXv`cGx zyx|LJ5xI5^s#h9<)=!=BJ|NkvhaSM7TkC8dQEUNt@`ZU3FM*{X$N%inZD`2g^tdOC zEBOQd>+nTHnyGGlQU1G0hgorJR`0yD)L7{tx!(hxo2*zR>6(@%Te9PxzhQ>)S;e&s{4 zaOWhsIzXoaaq#&(p|OnhP^84F&USW0ehZwdtL(2!d6&CQS;6wPnU5ii6xva@ZyG-j zx+^BN)c^r+cuvFmsA0k~hTYYpVo`;lSC<{>-4iJzXB+s-l&@j5^)krM#s_0tunAY- zdEhU!U>M)|#3vyzPTv-Q(q?iemRw8h9qg?3PN?P4a$n~j3C)qe|K=m`$I3h;I4+}KXK$r-bqjM*cL}Xi`4Kl>Nq46Wfeyh@#s2!@Rh8!^oA?d+ zq`Od2A-RhaExf>uk-NbjTOg6#Fo zs(p;@r)jg>D+&_(blIT0z?pM^u=8Dlydn>jm?Q`0=9U{8h9js)&Ntqy(@gyTdgDW``#%G&PIUjD++SwFvRi?FtVX31|e(z(E8*1bR?)FqEZio3-S{8X-aNrT+*+x8`K7W`cbF^7`7fWnA8Q8?aS z&)|84*oyIwx z{*=JkmiVW(x+qVLnD81Bf$Q1wvef#Zh@v6@g;j}s)$>RYjc4KeqBP2r=``u$>8<60 zKhz`=|EoVqr{I26C58AFP|kA%TcjY{#M_>0c|&1jybLq=_eWDc%8wj#%6kz{0c*ej zE_0kYmU=r7<2n*S-^2zQ<}C-Wm`tb7f%*F`E^}DnW>J22O1y5YNB$`rD%GX7lg@2$qs4sq|)MR3&Y| zadZN4BZZw+l`3!v{t=|`f`7f8|AXS1AzMrY(mT#hYTSW_v#WAYvOu5IN#pdS*kHqL zm~7lrQcyB=Z`u+mJ3mM%Q9KsXafJ{nLFSRmy6K;PfYft*#$D9AlaOSr54b;Qk}zTi zzAg&${TcF)@7O?epju<9#)_+h#@CfMT`shea+8no8GLQe0fg1E;@{W0blK{ z;GVOZ$K9{R_yzKyy!DDWH}U5UA`gKQg$!DLNsc4MT`q4m*!~;2=_8jk4@x&dpY-F z&k@>n6#D)Wa~>!K1Ukv(4?8)?D;Bn3(%TlAn`!0`_-$cK0Pwe&lLFZQT_6Ou)G&iZ zu8k4t#9eao-aOVLe^OVK$hKcQtH0KnQ} zAJtkQoj$JZ;O1gSq2VW>c<%v^89z}yAHAcTIWLt+jM2cuQc8zn4Am9P6Vrj)W;*4L ze7Sn;^ckZ2zLsTtxeE5v1kpcqpafBPpAWlm&}X>jZ=#!sqko{6G-?l2_BL_qrRb== zO&7m_*mjCV{;2NbqG$-F+A7{wm4iE$_HQ;zZ?jz(P6IK0gK36dzCe1bdRzWF zm_$b@&5fQ9{KDSRnA^`ZhJ++ZrditPRLa%@+U9_ERSb#zr?Fx@<>;8f}^3o*dU46f@t61us;yG)d!we&?VV# zImX>`Q}M-_J3EtWXQ0UCXWq}xn(FD{4qtLj@#KuE&4?seE=F>1|CUexP^jgL_Nouf zg{XM+WGnrK^PHh3H;d{N3FX}ft?0c*9I2idZxaaWHBMJqYpK@m(#-reXql%NAZ$<6 zLGOaw3qh#t^U~#Mc5!Z!RgiT?U(gmKO@<#7({iCu4t6k|L|CMzW__6(setWdt;+?n zKZi|Nk}4FqnCDdV@5o<7M+t2P7fXIiD+=1VA zrJ}uNqOMO8eXZ)O-0YG9N@Q_j-)4X>5uLtQlD&vVCo`RSx|V;A|M1?XpdzBpi5m+P z&E7rJ!!Q+=s6vF|d^_&_?Gla%^ReiiJ+CpJD zH(U9IdS0UPfJe%#;cKsKH}Wuc7xm;13@QuZNzeabfHir}{PVl^UnU`z5TLAh8l1_o z_*NIW`h+fJnP@!RHEduP?rg##2FeS&DPB1DuFS05avRO{CZzc^Ow>HjiAN)-AcGL| zgzNK3NZV(BckW%7*WO$M>d&bHE$WX(a|H52hLMPG#@#rpRHxGuV8<+TG$_5Z|E=?s zlV%_Os5%x~D~?>02{T$*aaFTH@@EQK%FZ>-1!0{$%8OLqd5DS?eGBHJ@h5 z4wYQf&(VmYOs|C~mv^fhb=+Bw3N3;dcIrNRZQ2kcT25z{!ij!BgK3Q)9s`45ZyvE^ ztbK$!`Dq2Ov~an6{J@=rgUvDaOE^SF-!SpH&FoMl5vm@osJ)mR|uNn zkZh!Yx6G8OWWb6Mivly8>M7ILvXQwe%U}^tlIEZq3v-I$mx4Xy)1L9PapYUdvLz3+P9(9 zE`IP%p%<_9QH+UB6HeH2AY?f4pX&T9jB`;T+g+Ej(oV=pAnn=9qFCysd8FP!?<*Yl zPN;F(1&T%a_M*E{h^e_n#bMG~foF6k*BW>>sP!p3f_%h{ejZ(M_)W=>uy}x2j=zZH zUKwj|AYMlk|DmYAen2@a&5U6pgXzw;YhTyAh1)GxX@aMB56wC>bAo1r9;)shZ1WZ% z_CPUmzbPDXpm%ArgWjV#ngDb&2}}!mp}!j=Rg@B5AshT5>8NCSrJ8*=+Fl}3%qZd` zQdzuo7}`I|ff&do>avM*P>u_C^3t>AR$0fDk9Vw-I$lJj@}BSRdr7WXLNDDT-ti`t zhn&Yx1l+JeXQlX~g-;RYKcjUl+jsT<;XnFo5(7*JKc*wiQnc95&$Cdklr`!S`QVQi zI!Y>xkAHiyDligCouJxEx7w#pvN@23n@#mqVYK`WF)&HwDv!i;U*uwbo)F(`cGu4J1CH7ECNKX1&>#M_6xCJZ# zyq>)Z>dzw&F>8W_)4gG>E;7w{zp8YFgqHZdACE6a_ENk>UQs|tM=H%jmN|wHX4LeT(2=Wwx5d=9-)ypHX!rDZx^%{Bdy?(c6Vdq#G7Y`rr__Nl{;4t!K7^@v9 z4&nyD-&-%R7Hc<)-HdL#l;MAp{CWQqxNgf@?^TGdoljV!bMH(?n;p*waJ+|~{}z4_ z$=$6Z@IV3vK|;)oRRYE*j)wRpYxu_s6${ZzmfIOpkvs(S2^0hg9|(fpT^TSemdVTA zldh#2VXNxDr-M1yg#MqgQU^hgG3ohSy@&TD7_yi`N^#nf6vV@e{%i&{ody>AIazLi zF#AgR73wb#T7=$(hnW_s)H6nFT&|exA^!R_xdlntCTd!A?+{^+Dw{Oaiva-}=#$Ei z41y>&U^E0u37NQg({0Bxk8(eB{rJ%*d)iMZfR{+A1)#2LR|b{SHGEfwnp-w|kHr$j3on9fn;6_0w_ zidNwNLkby?cbl4mVeolZUg&@|kPc05kl6TuC-^epyTrT|1fA=ht!1{>tW7K%4faH4 z=5MN#dam-__UL|#2Z{c<=(X_U*Zlmm*C!u-*42Kh1$GWIbHq-3h>?tvu@nh%dfBj= z3N<&O0@dB%4wJ;x5s4q~SJIA%vw;j+_S zVx|ARp*q`d=*jxbE9-O-1Q5os9ZXvVc|{JJ7Ev8LIDnh0tE>y#P`(bzh&U8(<;{LC z7Pq+bHvxbTJVK}2E6-?0Tul+sjnm=;yL@+F*b=?~;qx3AGy#x*wMc$kuyniHkcZ`NZqFJN);EF7s!l-q%aS}`q8vDR_zbYnWx(c`POvl;y(&; zek2C2b*gC_YKn8sX2L=MFuv_(W`caC4P1Pc6*CTt(I>63ktnm|EVL5|EP3Czq#zi9 zLlaegX&!4?jxHNk)u-bwbi zCwru1R0Mpzcr&SM@MhNg1~xAW60Rp7s_2*10?oe-!JD6?4B1?v>zd4+N(t2Sa42`b zn6e+G;4||>p_x>M=;KUm%?_uF#el`Iq;B&ADYCU)`ibZ(2+Y2hH{a@o5I@7_qzzFF z$gTOQM}AK?COmP%l0mwJyrE5J_69_o!r^jS!lEihc5lA{BV%QXe)YbitPwbF32Cr% zeg(bZP49e1MSn0;#p4Wt|9KBz2!fbJbPn z{+b}verAJRFWFglE#LfnM-d&$%5q1N@(i}W%`>RW55-~}9ph@WLW2u;xFS=4mo3S* zvWK71^pDg_bu4q`i6{B=blE<@cFRal&v!=SPK4t?#Tgf`P~^LBa7pyXuUMK+D;zO1 zaiTTZOs7;A>k^>7V-wQFL&hEohygazdCi+=A*U)4ksmN4V$CEEf~p;nQ1@XI`Z6_R zaK2y}vo+UBoGklr;xd)C)sLF9i~{-eSS-E;C=v*ce9jCYgfeq~{}_~+{9J8%=&tG$ z*EFLhxstl5eOacGCpy?cW20GJ8Y3i#;L8BUPacxH67tmmHzy|C!v|?YxNLy=Nd+Az*PV5 zi$+`~M4r~AHr6{{c%(vFA*L(VmWhI%Y_EUzpY?KZkUCsQ|JwR=QwGauDzB+D;xnPc z=_*%G5G;8@8wnn)zy};oRQwfRCvnvgZ2XK4n@b2};G*s}K`t@5pVj;tMO<>RtZL6u z5^p!uRwVc|j0nqWxq-9!i?WLqszX@{mh22%io+52^i#XkQ@Nzplv zsI)y|h#)5?t{~0Y(7=L=O|F02=d;%$cL;WB3z<_hM)W~>I481Iz5;O<(>pXuP*MDi z!@_XmsT8F4^9ICL*>_HnUYYa+kOM(AgCr%C_O}!ytp=15%842wr@OsxrIyVwp@a7MZai4zTyWK*K2`}#Yj;i zaccA)8#3<>dwxccZ zxbG#Ye1*zqV(U#p^`Owax9*DbrR+y3Wfw5_=YZo8fU=2$#}>K)D?lUHcX>wbqp-GQ z#An+Vk2CZXRTY8-Q}^6R3v=s0zAvM0PN$H&6*8~xgBY>f&lQ3>HKZv?=goK3l9wbf zEHP;UUNi!%l2~v75oJLeH=6yx1woF2%Li#;?JCc=VkwmAbY&00bh}M8=iC^YloYZP zCm5@o)-`q0y^MS!T+VBY?O!CwV4D}rYKcfN4henrKR$>snYWll@}3=2l-MmR8@ zli`ldeLoO)WVyR;TqI2*VZ?55)Ej9_8;ws<0RMimd@ zvdbLVWIjFu*CW)L9Ve0ShpV_DX-0pE0jW9a;Cw7)m@?{ewx3raoEUFT*Vzi~lN7`F zlt^!9P&`VH2cUxchMum>@a~*7xITSVlN1s#w4H3tY~QcKnBzjJTmSjkh0~Gd>R%*> zR7>$;UKgCpBD;Kp(X!Jttp0t{+@Vo9ajo9x8-fM9-UwgL&&FdLVPD=@RO42dnD~#? z!QDGqpU7xY1`4J;K^M1KCWIW>)}l#Od+Ks68e6#W35xF6#;+~bk1H`3?m5ctgfuRf zBG;;+&GMt!@^OcRS#8k84e^G;1q9!QT~sh|4Z z1&y8F_XMpPe7-u3U6HR)DV*O8&MR27q>=gHH}oc4R+$oTvU12`2&E`af~}w#uAw$; z6#ajG(wHrC#RdF_GiMTUb_fA*zym2Z)`*p-dz4+AaVk>JzODOHIcMhQ9aoV8$c31F|-C#Dql9+@l>># zZo%{EwWVqkt!;xIr-oZ%k2f*$ z%c?#UCekI$l3^)IA;WEs)x2A8 zXEJyxs2Bb|uIPUoK}%hmPBaWT@?|rh6^dXo&Y9I&VM=bQOf*uGACI5$1=cs&KxIJYt2O^U>W9%_(-= zW%(QnL#$DvvDsx%EiZTI8UU@4DFSazdOA^u(VoG1}Pj&XNntv4tr1)67}OEq0y1LRzjc$IK4Am+xQweb9PB&iEz54tx$ z87=e;b1Y=QjX(g`B>ctHL+o>v)p=v{$c}c{0RKM#z(bpeVGY3x(GS%Pur#Xy|Y;>AeA!8_HjsZvHdNuS7s(cJW{XvgbZ<&!X8euWbkDst|N{ z$X-I)ygloq>NC`FJh4pCvb%ujacWJN+nl3!zqE8asvr`Q1z9N`Oi!#Wktot>@tI@h z5pP9E>IDo!GxUVR0khpC@|F#t9)ByhE7AFv=IO@nw^m*GbMxwuKiR6s_L!S8tMr;o z+tXO;t-`uFGvtq{xH5&(H0@Wnn5*vxLAnYsw!_jVVfhm{l=P#N=H}L3TieBj7yx~! zp^$eVz|GuR?3i7B`LB!h2)loo?E8>gxE8LaZc#&@tCNJU`@KN!8+1sSqD=-Nm6r<> zP~?3Ph0at>5!h9hBm2WNNIU@u+QouHZg-~W@_S^TTa-ZQZ~CW%rU78wzC2Pw^Ijgn zQhE5<*e=c17*L#RUa4!Lb zXf;#YL#ki^<)Ls}y`+?FM+c^WlyFoBo zg|j!6fSz)~)(+YBZBnxZ{hIJ+MlKE>55fFrKzZP@N3k|@mB>ZWu=d|baA{-r;$GMg zJIH7&uAJL|n^moQoXzLElMoeD725aodh)Umw=wXNPUYYL0SuZ~RQ_YN2MPyViSyp6 z4ir^Ar?4`sc&L!6LB2@i3{{6Cr<9Q0imfQr%l0QgOKj~9_Dx1zF{#xwxo}u(!d*^( z@(e1q5F-XK_>1%?0?NIbO&O64;Nnq&zfjk4-E%^Y2!&BUTm;e*>L*m6=FOQ5+9fTm zXbcq=PrQqh+-kMpAZ~jRAGim41jj8+>zOWz%(rPIReN-LtZxxx(Y8^Sv#rR~@Lc>cIf2ev^noJ`9|aj~fcVH}QtL>-cSkcC^7M;g zKOzQK-u={H=`LUvNnY|(CqD6o!MFbmA}XjRW}SW}GT~9nHa*>Hg^`}dtUSRgor5@9 z=Rvuk1UV(drI48$Pg1~unoyx;AJ)*9NXQ7B#B7(t3sL1mcc6>T!Z6j8W^Z`5zIr^D zvR~uN&Qn21-H}8vTFP{1s8N;tN+i6VA!CD_+1%&)Hub5$&Jo6S;|IRLn*aA6(}6d; z|K4-W<%?7=y4-^PcmQV3+n(5TOUy)P$iI*dJ9KTRVA*!v*1N%U-!s(@=Z^m@@)A49 zd9aw|O5QnO2 z@}*&0hF)6Ab-Y%I`-_rp9z#_FztHwuHO^7pm4m6d$rp^kQ}oSvq=Odi)o^d{Cy;aG zfRBe=0Wrmcpp^4;!F1=dT`aOYNDA*{)&1v�J9ao5C)1j_)P$5kQnK-tGbSg+v14 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 B}NNg5OlHY4IHvIuB&b_9|cof2+t8-G%^j`#fY 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505112001-Config.rsc b/MikroMaster/20260505/20260505112001-Config.rsc new file mode 100644 index 0000000..1c9d784 --- /dev/null +++ b/MikroMaster/20260505/20260505112001-Config.rsc @@ -0,0 +1,4494 @@ +# 2026-05-05 11:20: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.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.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 +/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/20260505112001-Diff-Config.rsc b/MikroMaster/history/20260505/20260505112001-Diff-Config.rsc new file mode 100644 index 0000000..afae987 --- /dev/null +++ b/MikroMaster/history/20260505/20260505112001-Diff-Config.rsc @@ -0,0 +1,17 @@ +4165d4164 +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4166a4166 +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4168a4169,4180 +> 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 -- 2.52.0