From ca3a001f65e2dac55b62b682e29322e1f52694f3 Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Tue, 12 Dec 2023 11:32:10 +0100 Subject: [PATCH] SAS Packages Framework, version 20231210 SAS Packages Framework, version 20231210 Changes: - Two new parameters added for the `%generatePackage()` macro. The parameters are: - `markdownDoc=` - Indicates if a markdown file with documentation be generated from help information blocks. - `easyArch=` - When creating documentation file (`markdownDoc=1`) it indicates if a copy of the zip and markdown files with the version number in the file name be created. - The `HelloWorldPackage.md` example updated. - Documentation updated. --- README.md | 4 +- SPF/Documentation/HelloWorldPackage.md | 19 +- ...(a how to)- Paper 4725-2020 - extended.pdf | Bin 336823 -> 338011 bytes SPF/Macros/extendpackagesfileref.sas | 6 +- SPF/Macros/generatepackage.sas | 347 ++++++++++++++- SPF/Macros/helppackage.sas | 11 +- SPF/Macros/installpackage.sas | 31 +- SPF/Macros/listpackages.sas | 43 +- SPF/Macros/loadpackage.sas | 4 +- SPF/Macros/loadpackageaddcnt.sas | 4 +- SPF/Macros/loadpackages.sas | 6 +- SPF/Macros/previewpackage.sas | 4 +- SPF/Macros/unloadpackage.sas | 4 +- SPF/Macros/verifypackage.sas | 4 +- SPF/SPFinit.md | 41 +- SPF/SPFinit.sas | 414 +++++++++++++++--- 16 files changed, 772 insertions(+), 170 deletions(-) diff --git a/README.md b/README.md index c272296..0d04b9d 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Don't forget to **STAR** (:star:) the repository! :-) ### Current version: -**The latest version** of SPF is **`20231123`**. +**The latest version** of SPF is **`20231210`**. To get started with SAS Packages try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). @@ -163,6 +163,8 @@ The SAS Packages Framework [(short) documentation](https://github.com/yabwon/SAS ### Updates worth mentioning: +**Update**\[December 10th, 2023\]**:** `markdownDoc=` **parameter added to** `%generatePackage()` **macro, which allows to generate markdown file with documentation. Content is taken from the help information notes and the description. (see [here](https://github.com/yabwon/SAS_PACKAGES/releases/tag/20231210 "markdown documentation"))**. + **Update**\[November 11th, 2023\]**:** `KMFSNIP` **type for *key macro abbreviations* snippets added to the framework. (see [here](https://github.com/yabwon/SAS_PACKAGES/releases/tag/20231111 "KMF-abbreviations"))**. **Update**\[February 7th, 2023\]**:** `ADDCNT` **type for *additional content* feature and ** `%loadPackageAddCnt()` **macro added to the framework. (see [here](https://github.com/yabwon/SAS_PACKAGES/releases/tag/20230207 "Additional Content"))**. diff --git a/SPF/Documentation/HelloWorldPackage.md b/SPF/Documentation/HelloWorldPackage.md index 532aaf0..e2ac827 100644 --- a/SPF/Documentation/HelloWorldPackage.md +++ b/SPF/Documentation/HelloWorldPackage.md @@ -1,4 +1,4 @@ - + ## The "Hello World" Package --- @@ -40,7 +40,9 @@ If it was - then continue. ```sas /*** HELP START ***//* - This is a help info for the HelloWorldFormat. format + This is a help info for the `HelloWorldFormat.` format. + + Category *other* is marked with exclamation mark (`!`). *//*** HELP END ***/ value HelloWorldFormat @@ -57,7 +59,11 @@ value HelloWorldFormat into that file: ```sas /*** HELP START ***//* - This is a help info for the helloWorldMacro() macro + This is a help info for the `%helloWorldMacro()` macro. + + Macro has the following parameter(s): + - `n` - *Required*, provides number of loop iterations. + *//*** HELP END ***/ %macro HelloWorldMacro(n); @@ -86,10 +92,12 @@ Encoding: UTF8 Required: "Base SAS Software" DESCRIPTION START: -## My "Hello World" SAS package ## +### My "Hello World" SAS package ### The "Hello World" is my first SAS package and for sure it will not be the last package one! + +Using packages is a good idea! DESCRIPTION END: ``` @@ -107,13 +115,14 @@ DESCRIPTION END: ```sas %generatePackage( filesLocation= + ,markdownDoc=1 ) ``` `Step 10.` See the information in the output window and in the log. The `WARNING:[License] No license.sas file provided, default (MIT) licence file will be generated.` can be ignored. -`Step 11.` Check the directory from the `Step 3.` and look for the `helloworld.zip` package file. +`Step 11.` Check the directory from the `Step 3.` and look for the `helloworld.zip` package file and `helloworld.md` documentation file. --- diff --git a/SPF/Documentation/SAS(r) packages - the way to share (a how to)- Paper 4725-2020 - extended.pdf b/SPF/Documentation/SAS(r) packages - the way to share (a how to)- Paper 4725-2020 - extended.pdf index 3bf8d911df51e00c7566f7e999a1cc1d5428c8fc..38df3bf72d104eecd43f9384af0bceabf77c5434 100644 GIT binary patch delta 81066 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

=` zvrW!B>T8t|IaBy8J~+l#$6lU5WqCqtc+H8=r-(QJdbI>MAk(q;Xq+sH_1m+Fb^cU?`^qPKvNtfyyuWCr_)*I*m zdO(H0B$rzQ>w&xgYSS$k^s-BX37ty=%GjkDGw>~gjSfB7c@UL&eY>d zVu7bsU6EGO$)##&K#2qp)g{U$WM<{6Jk0H^2!A7~B<+qlZ`=1uNT91W zXkhh`KLDtRvd+63wYETgjjX178|cKsw|kARBC&lL5VJN~n5Z+>ZT`DU$OpQB53rQQ zrGG3h6^H?e^AJ4EAT4t9Ood ztcJOyEslCj1H&K4H^*mvbAoq*>F4|A)Q0LWxTFgf@yHElgt{$&k6R#iLm9Wg;MPe7 zX;aBC4!5z0Ocd}r78LX7J^;d&3k-H}=YN3hmCK;**}D&=jgX%&1iZft1t?sITmiN! z^mf?rpgFWY-u+}l#rq~dqi}>P+QVtj^__{cXe2@tia1yM1Pb~Cfv8LM4HsOHaXTdeRGCV#JF75Pt-A z&3FAqGuqOY>Vw7lIe%bNQExs#-c8xQ!_EGY5jb@FS}MGM$y!TOQTIq`FUd15qEyY^ zR5X$z4i06D#OUqJ`kn!swi7Q#!}kLK>B4CsiCG^ThQT9Dd;-PUJf>H2%VK!l=Do-H zt3rfADoH*?T_cD^eeLYbZQ;sCOMkx+x_YN=W`39JdK|;Tp~og7i#|Q{=uE_>v!|OH zc2>G*X$;j(jGdriAk@EVDH&T3rLF0AN3{WH-FYt5RSQ?3dysL%?#K;F)bkTt={s7Q&f`4Z-|2dvb zX)8!t@{krRbLDFkID&3#ZI=YP`)19d4(Vehw44vRz3`_&)|GZ}vQStyNhJC+T5SMR zxjg}JFIVq+k2?C)0Y7n_hF~Y2$iyOv)ahj!T|JMFtp`IMrkzxFoZgbZId3t_AoPwt zH^5ktDH{kdxRAewBXjZiEq{EmAM1(uu0e2Lg})HdI(qu1K=eq(rjvZ=^$_gx6~c4> zA>|hsQC5v*mB$&aNGc1e6_8Q>+3C|DD1s2 z4sY}3TmYM_#9yRvutJ$fK2OJ1?|R{Z%_~aIVva8)<#9Ljcha{{};IsdF*ldd zp#&&@y&7wC+s5&`e}$?UPr!_c;vRTh+O#8Ca{Np@lHw$7IvI!rCDbH<5QJs5f4;l7 zdw25s=bXCIR&9(JvXKk7MFTv33BbKhH$qU7UV@a(Y5LzdJoUfAPcj zPpBsYseB=Q5lkHxB)*KK+v~-|VIqhDpU8nk2=XXk`dL`xn@C0oJJ-ti(#V53oN0uA zpe4KO3{U|oRO#aVOoU!~#REG;y`=UfkFCpenJuZE7k!9!A7V$Oy*jJwye$0LJPHEu zBwMA;8W-#c?t?vS-SDz1RhX8LHB4~mm|n*Q|)f4xz72*wwLqX+3!uxgn|QkHB%ki%Z{qPML1wg zC1Ls#uDwntc5ZRlZE+UZIxl~fK`@)^!2A11jzZO=q!4}(=;1m4y-)B&;0LXLh@R)g z!k(Ns6k>02oo%MvRE@rO0!kE-SO0lMtH|$D9mo=uH483 zRIk&p^Iy(Mz~91hSXxiWkr95Bw1Tur7hAL=CDM=>waw=&I$*34t%ih3FW1?S5k<+I zX{u$~$^4QAZ}Q#se(~ZR(hawNP(7Mr4T|@vH8&}Pq-%SDEL}Q5v=l%M@$Zv@IdOHM z7Y~<$ldQ^$WmYV5Ao5&k?d3jN>&!>P7^yzO79jLiMCc8HPxDj660C1~%31dNJ)8v1 zHc{wco&NFpDN%)vwk*O^Tk{9)wAsxJ;6psi7hp1OXHnqs2B_l8c@5`*u6KZeLqH$+EoI{_jrx()%Hhy4?gLw?H2ADC8QTVK3y-VsO0uN{I zD$QI1g|d(K_KT(ye62v+X|`?_*EE9ap4*$-Zc7ubM&b>tHYr2ZRqUZK=t_wc;Aq^mW%yx^U_`Waz< z!OQ*QD;ip)MXUCX$E&g_maaLQ3vcU8{2Fdh7T`(*F&sn*OmL)!%J;(BKtsmSj5XeP zixRJZramv~3D%m#Z#k5G%oY=Dgt#FNTHCj~t$6ES1EJTJ#L%&S0&iQ$AvWa(uS|_g zUQ{<#MI^3kl5LoqX^$7z*^U&;ZLr6JhtiLAYr*ZNu;D3O;M<8CfKi4>VQiE^vaAo> zWE^ieO*Bps%OV@=S~S=fo3N{dXhDZA$Pn>;>PAcMRW}(}K09^0&eqkZl`W3^NT>;A zQ{dUFZEgb>Y=e-0QUfD7;~*%I(`a_O6Gw_222n=rp_A4SM1MY+L=;WgBomTzHW6HS$)0LQ6P*{r z-X1TcK|OWrSsp*kM&66h%{5Wkc5KY*5a5u3A`TV%+QdVD;m+-VJg?iw)Gso`0$A~nrjJNYmZS}K%BNxHYaC&J4 z8z)j4L6Ms~%PD*vkD^x=MFFG%`NlMm`>h32S^^>e1bG5XQc#^01XGkWU1uQ3OBze< zCRfeI$_Kz-SVD4Wi*T$aVyq?-{6M|f<`wFlO&(1zWw3j!rV@aWXAIli z1wB?cNINtoVfar3h1`Q0OB!92n+gnJw>T|$<^!8e@N;!ep1a#@kKs1jPkN!mRaRu% zbeDZvfWS(G$)uvdVGa5cQU-|Bbu!A_y0A_NvV|^x=1{^KM3goa_gO5Q?Sd68kI~NA zty&%n=CKG`9vfmYatjE9x@4ht1Vzw-5?{$ft{Iq7)(i6_zHU-}G35D*K>M)u!in&8$0td*~WZ0sB)OnTN z-jv(rbn=jh_Us*riZnw?N(^I2PB4h&^NF$=i$0_1b0QLs67Mpl_$Z1gD2D&s=ETtG z6;TkB6w(6PFgbE5bbmjLqj|YiQTQiGz*ZlBf9$skgPj5AaVt_7B{W8#6GEDVeiA&8 zqH_m5AW8p%N|Ikz!aIDOFS4S}4r!R^kFBA-gMl>x4wutK*y}-`?-3~Pb!QKiB>KR7 zXZiZ$()yRFL&-BKLB19S>Ry_+9N1|#OkFWeM#An3>D`i@zOf2KQ<&^8r^5HhPg;3@ z1QNgZE3%~D!-C&fizdh}WCF2M%cIL#Xe01Qj3V$TuwgQwvguVRwo{mZWl}9FjKxzz z;N<+<>6%K|#czE=d@}CVSddLL7V3PF#9uPNPf&(3Y7jRnx4CBnS!G6Q|0cH?uGBAs*+D%+}j>Y6S zkz<=QoeBoNk*#;B$-9U|bOu8tl5*EJjFU+?Z6{(4RC9Y-Dovdj`zDOK3NELdc;-#k zKlE;hg)l%Eh-Pfl+BnK8XhqKZ+_k@UCFVvY#x~s@+?LcJ>9Bf&-O5IPmhLQ#2ccVoFOP9+WgVmHP=~$Z!O|myUWenP!F(K=zlCJ!vi0B2imd%!8bATWY z@WJ%gi;kgZpBECWysX#5lO}Y3ALQ{5slJZeyoSOci!aeOxI+*XNk541B}l(cJaoP| zQH+Ybkgz|wTSJ5kmp3hBzU@~Lxrp@H^5z4iCac>AaK|Wc>35kUZGAip3@L~P7jMap4dd%K z5jG{ou{gFK#2P}i%SozXxTY0O;&BmYqkt&&F$ci^tNeovZK*dfV>ob~I&&?wKh{et zJYf()B)8!fz+Y1f>2Usk{78lo`9U08=E!7{F6?8S1OMBN%7PoCbkWC*Nh&IM;QR^K zWY%Scm5=@sc5&maf2oSWGqHopzybWW%GdXQ)|+C;Dq5{tHN}EU zL8viCjH-=P)r=H*MEJJ_1>5RgyR~Pl6}D#F$tOV(W$g}FHO!H0EV^*H(1hOU$8=Mz z8JwQI?J?B2DVsGPc$s}OMFo8F*JfHJ&yf%t*L%W_hF9E?fN!6D{qFeH`E#S*9V>Ho z{OaZLyQjhH<99EAkAIZn?CAXDbrKvOzmifse{=lehqsQz|Nk<0*jdoW)i(Q(XEzV1 z6hR0SPgcT{xT}OGiM8N3M$t1gsP^3-S(M9+fGL!S`9lZXX&4a2ZH*1%CrF!5S@Lgp zD6dbPkx{-HKcMEtV%>1XG0~WIx>}tUERqm^4ht|aKm{0oSYRI=6Ya1LTdXyuq&RfR z19?$by~+Sip|xoDDl!a9bNoKRp0T3grT~jjA&Q@>Hey+z4b$-h2$!b7_%&E~EVV&& zd2!9Kef}VH#&4r}*=z|S=Z#W`p~|a<_SKzY3ilZb4BlDJR}lN&j#V7^qI)-a;48x1 zEgR5b;P7mJWkGWRTg7b=5!=HeB92gr0%Yi8y4cwwj&k2M;9B%P77IuQ`cB$F_G<=( z7QB3R3nae*PYbu6s=0)?tg9N3Rqta#)(=~*FrfB*O94rI++}fJheA>^Flpsy^A6A$9!Bph32XrKyf|6l@x1Ed7+*Gt%F zonw?e!`*{{Dd7Vs#A2er_r~EQRm62#Xb@7^`tju1OxtkQ0<>jU=u8D0y#9s@pV7Dm z8L@O=X=;}uB_}gV)2rSMwnvgT%hi2HK)fNlCrb2F;Px*ldB$s1&9*9Szy=+9 zcSt%fBvFgWlu*y9Eh?t{c5Nqv4|jF7@DtV z*49m83&}-Smwk|wsNTC7fBRUEzKV38Cz6%1iT*c~Mc{)ZzP$ONun&fQ1g=9LY$3VW zGj(QjjzOtghkhJ_5XlgbkH>G0fcjr7DMaAw2vbDqn@~K!ShY#cA4Bu>;?e&F0JRImXQ3n)s-4Y}!`hI4Voo?2&x{2~a{A z1Q-H{O8e`#d%6b#C@`z_>On%!+4t8y^pj_(F@Ms*ERkAh2~*kZpWfx0%lSfw(z}?4 zzV~LXeDCd#_}`Krmb|*4&(+5z5x>qgZizzg@4PZs#`~G*%a3oqEa(5a`T+!ph5{%h zv`Iib%lZf2GL$h9Q5?7p%fHQ~?_DiFzgxbeoBz7}a(Vvq=VvrhzS2S}A^j<4ej-$) z+<#r?6U?L^3#ntbCB`i${x?}2ZZbc@coBQIO0QAfb_x7`zlh%om{wy}P>G z6Sc0hoT#oTs%s+8fBHnkw$8dTZ)mXD*IT068$Pp3*I(0X9>DFdQH9w;`XY!Ve3dXE zGylCS+83lDM~Jn?KxP?%HQ*E5D6xm$qko%g5LLy#cd@slHI3e4;2>dzL85DzC>r{v z{N2=LS>Mi$*L?SMCU(*W!VhAScDG02&=eq?)pa(qgraR{FWGFL({275wtnie&2N6_ z!=JRL{ITgC?KixOs9)Z_|Np$EzQt>rV|@d5kF=N4r)!I{Xzy^KyluMPW2)9Pw12LG zJ=b}a?=jm_{MUl7@{D$*yB!_a?F(Lne>oki>ftD@vH@eoHo}RfDt5cPrGeuK7gltf zj};Z2qlkiuvc4vwW{vt4G~rxE9-7g4EEHkDW-IG7vtH3L@}aoRn+Dt%VSZJ#V$2y4 z>$JfvL$Wszk5hX(rvZd`M$~Q5-hU94<(srC!D215OUaPioRr%mkn&}J%w_1MW#^c! zx)!m_7^}OE11kx0xXG(2-LgF2!KDlB2XLw>u5Vfzq^r7P(kg*UH#8o~WCkMP75uI8 zJj*kbMk?oz2;3gb1x0`$#+J}y69I50Stcrq|T_N59i^68LGLE+NVQV!7S(UL9{U_`=}mIH_Y z`%;+XgRFn%P`!3=J`5%clVGbAe@FsjiUwCQs2mUVh83Xi74Irc;|tP$h|dT5C6Ulj z`uSKd?SnuPbT-sO+h}b>;74dA;XwD72J;J2^6` zcPb{tlR+Y4X`FmlHFl~~%s@?bzM@m7&IFrHT_TtMi892Rj`*)pWaEz30I{&M#=0 z97YmuXpQ-qLCK>F>auHl4(qxrIYd`EO<|Mq9cZAzaur5Pf8E2_(qSTu>SLBmMFpio zOvhOwg;L2uoY_bSe*!2`VSHGTxz<;xu?B-zy=P%G748wdGJ)lUL|M^%of0V&Ch1cb ztd-di!Ru{9sV#cb3^#UIq;z826gM*WyQy%H!L=OMFBntnh8xGt$O21x6dqK{dS}t~ zDZ3C6MTTE4{0cuisC0vp|BRjq;LTTPKOVAFuZ}%g&d@Y}e|jNq_%Xk`t@qhCvUpIR z|7WR>b}Y_BgQuv);Yi0=Hf!{B1OZ@60!~hr1d|9~_Ly4L*!%;2ukj^7bPE-Mr~CW@ zq#nd3GibwWx7|KRQjcs9_xQ?*c#!3Iz`D3k8n2e^4N~;{9AG0RN$~u5V~^SJQ-rp$)({ZD632Ezm|-R&58a?e7%$X^QQxEHEA|#E=cp@#f8G&;2tx%yCF>K(gm-`R4WWgTizAV$@VPlyQ!ATrg=KIuR}LVyY<_OX-+DQo_^8 z6e}knXwc|9Xk`w+%d3{B{y}JAH(tzNpUhA6%J1f9=cjL8AL(Dh6OwVkxHq(!7c&tGv)1XrX55PapU{BB z2y);N|2)PM!Gn><0v?5c6AQg4_D3}g-!pW7_5xTQ$Pwo(2?BvzOnpCLKF~Y`R1?ni zPKu4f_r@plck@?BZ@rwokwg$*nY^R$gb?WJSeD?Dz5Ri?v+CO1Q zC_*iAmPiSkb3irGo1f&Laf7_9ws{Tfc;kOG@PU1P_qbo?>W5FeLF2M2mjIZI8`klE z(Aq&pEZnnsvC3gqAjV5~7oTX*k*GJtkp;G-k;F4ie5zTLjB|%b!k*gHxJ7EJU2TZ4xs6lVN0t(;dNAA%+6(^f z1>UOIv@;F6N!J8a5Len2bu`_OVb8rdz@nUekztyAEnEJ5I3~jgIVQsx6uQZO>SEg# z)kb${wLn*tNJZn4%p5%h?$hGt*ikP;t%dv-%dggkrXl< zuapQyJZ_5h78esDA`7i|S&OKD>@RpF#)_FQUz)ADgVDthtm#E=653|JgQ2H+2^wd5X* z(i{F@dx$@-`$2&YD3*kC%#Xibv0~1+-zk<6IBt-o8{N1tNaZ>86!d+6j#gP*Ir#Og zalSbCbikqMjrb_?zZWAlD;5kic-X!E$td@Skry zc6G30^Ct>fAmOkNITMl8L_d8pnFhi*YHXRWG8$|+YJwe?MM*=-O*+7+oS>K>Uq6DM zPo8#4Bp?9b{Y`0BR+VOdan!+?)=?Xq)NGyO0f@~853#g07$`-zXViJq)f&W5{1TN;ed(f{5tsw2{82)c}2HTkB^HyN4{7vL=( zN>%XKRK3gV22dxuZrCmR69f=O4@Wh8Y^6EgwZL}5^f?A4fsM*L;grr zL{y`?Y_HQgKP2logpsH3Z*H95$IqV4&uPLbII{XO&1j*2w$k4Zpks$$V=sw-Sj9RG zz3-}9w7MfO-~t^hjbTJnt@G|^G^QdUc0?QLNUtDHsPBOJLIF*tNfJGnSpFEq4u>cw z^YdqCr*9XhZ(e_0oWdb3@WR+q(C>Nvo7D$nwd1nvMP_Y&LkH_cj->?EyenpWR7J8CW=w5`nvPdI|lZI6b77#$6R zZ_5l}Eo2x2acjCPwkFigz`x{Wf$=E*e7!5nbiGWs#l?;w$~4=#ku<`0+g#8g zUqd9aThqelyJnkjmPKRyLIKN`UE;7OdSlQ}!Tbq-1IXug&Co8Nt8&+FQ-l3U)y;O6 zFH_)ePB=qk-?YW2UCxFiaYtzL*C(_8o0&)>LTi zGe)5^MjtXptZ>HO`0XSaJM|-<_wsY!$&6KEjLWd^P@(N+4_Aby9ypE&SRAt`;dW6I zkX+|~=|-0eeX3qUCn!x_s45?Hq8IGyWL{wE6ITsYA^@b=G{uq@9M0`QFf7`a!M`H6 zN1^gNxjk%<)>xOfc2g+m8YEG|71FJtaha-OEI?g=X@L&vVo;2A$e>>h0#Gbun$oEL zk|pUM*Q+91Q89r~kGbtx1!rE|6-;!23HcU(sPfWXTK!ld(9s%jSK9%_Fku{Ahl4B9 z_{H;x#Zi1W5gk^Nh{b`8K_Au@W(=^20seB9+?Q&|q}Ne8#YjpzJP!ql6#7lNj%~Lr zt^tvLRcC|of+kl=r_xgQX4M+S)>W*;c%CZJ!I;u@_|kT+20_0rBq&WGtlbj3vJMG< z?s%Y(6)}h}43!`A+u7%|+~q@($D5SSDz<4+)2jMj1nAx=eAPzkvxiyl3{&uzDs=7f zaTQXAjCayCiK>u^A`)A%W(V}3mf~SNP{#Ga19f6o&LA{?M4A#1HjQ5PxDo`a>`(J& zgLOtBxub-z2e(*F%X42~KvLIzC(Gql?SRT3c&>K71`^qWLPT z1!LA$3**LWVX8JcnW#%&+_8c@w)jk!!3uVLfngT59U&{4L}b(COD4mPQ~w+w8zj}8 zAs(qiAfyTu^tqe}7KOcok)AbN=5?nXJdtR^Yuzfam;+giipW)mz9G)95OwV69DO%c zH&XqvkFASR0g18Vg3W7x;l*acGS7-N29jT~_@>%S2R4vsA`BD6WPDz1vcVhKd+tIb zCS~X7|6W$E_kx|jU7KhABth^&r%&as5`X)Lt7tyg&2od8efMt>GUkEI9?|wEn zhiF|W!Um8{BqThYP1IC}yx%rrj08I4>|V&kiEfjhZ!{*wB@K0d8WbvXb^P+yLKad{ zRC&RB^3{Fl=cG`64u84^DEK`o9e5xSb`)OKI3-UfzK)k`a)|T=`ay99vV)ZzGLi%7QO|x5@$0O3tNATALt+*<#Rwevt-TE6i15eT;4H)gOQ8cpw z?xVm18ST>~5Ltv0LvJWTtO#&_Y-tAqJCv$@6hD(#C*r!Pu*5Gcd7Ub$5|DaFf$}Xb z29H_}+j#qjHelruuzoRU%+ga&v^u-|Z&fo0ZQ%blZ6UvZ8}Oo7U+Y5UbW7^3l2_l; zm*hUAUuoG?x+l%De57E##C+dgjr}?lB!#M!V&$>0-cLo-s9+O+ zZ1u}KY?`N6H0npIPuqR2sWd9oFTL>VA$GCE!xQ*;g-2f;jJX~x2ng+)&J!#t=~sMl z#1h|iY4qq%JxlSJcVybajjN!e8|jOA=+i%CC`VsEd*%CsuYY_IN8P&r z^i?z=9!(L6IP7R;s7ADlKbE1CUb@>HE(1UK_{_eDhEr?#v8mN`ZlFm9G_c{J?ud@t z=BBLRKtdgQKc)Guf&W?6?RNiN5{tkj?z<(4pH`?y8Fkj>cAHYO&i3#MPCvyz4gSe^ z#YJA*v6{N&6+QRq`t6|#y_28B8WQR(RVc!M541U4;^erLj)MTLlgq@ce+m&Xd)MZq z3Y#Mw_Pt%nbi1}F>=@{7S=aexk&!;~YDOpU-U?H+88Qzer(dWW^`fDPC!={;`sebtxaW%K-^PV1RtH&SRF^tz;i zf(^{tZ04-3tzfc>I(3gHd$#Ja0mM?o-R^%Gyleec^#5eHE;sq^dS)krK!hV~)loo- z82Ju%U|@&9Lx`G}I~q(c%eEmx8w=oA4LAY>HT5z#@0i=zMBoh_e*k}UoAn3?$WEOx zn3G7Ta@wHvSmo!HjI_Wm#E6;{5c@3gXeHZt&Th*M)G~ z1pdG{{a8b&RK3OZ*VMHtgN;pAudAGo0tbe>26$@6a4T|df9K4BjxQ~!hoKZ~EQc*7 zWK73bL%XH;hXou#-bfCuA~Hf1v2sJB08CC$GVBc0)tM%YLJS9I3x>tsalj^}#}&~t z%LW*dgMkj<68LE5bcv=G0;*)Yi5PPMl&@n@ye_aGoD`kY#p?Kc^?WWy4TK6zA0QDV zLE2(sJ=R7t4tC=NG4p~1N~k1wP!7nm0?1kc0fm!Y$;1IQlOoE70hP0<%1{9Thm-ot zz<b`D^BHeD%eSX<8MUk#uGo=U8chg5|Mu)4PMC3F%c? z6y+^BQ%g-=vLd&HH7Qr*Ido<5Do-!zy1*E$!ejJDw6p&9`CQ-<$HVA(KL+$iBY&5p z8FtGcfNVIJT>dau2Jg9m%NJUQk1ag|FhlEK<}v~;?16rS-E`IDH|F?7B1t}< z-=lZ=uH_uC z9oHL;%d5@wq6`MWSlF%xH)F}50Dl{Jb$iKF+TIb+XVru=$E+rBcW*ZR_PygN6WgU9 z4QLa3Hz~91vTkT!x~b`Y8(6r zN4BnF(N`z7ZFlV=3A3q0;$y*MaG5feq-uAg+Q~kvio0(f%J}~W8^(uCv+2*90RcIe z(V+w=f4v%QbKAE0yMKl1+jdkhLI9HBOS|nZOPnJ0}o#wOa8K1p5``gvo^VhMQMJ$bjWOlWhi8x?U5Y7@2ut308 zG5f*0d~rEn1X6h4&L#I=%zf^?{09H(<(mt0f4ZQ@)mIm^_e% zf5~hC&r}F{_eU-w=WUIue+yR@(e6e81Dt!U%A2~N^(NcykT0Hic~(`*Y_FQCP+KBC z5d(-KkSt8Btacwa%Cb1Pl`@fbcMSNlF3LPZ(eCh%Y7H^_r9q~D0%f~->Zy9i=8KR^ z@9IWPks(8t#OVWMfZ~PK`%PvrYV-}Qf0tS$!fR?Hn`UJ$5!%@z2n35kTMHqX42|4@ z;;OkT>+3I$=nhEh$&g?w9RQyIROPbH)>AYGDGRu@pC7s8s|IA_#~feUBJJ6>MCsvH z*0$w!y#{f$a8*2e3^@yf!Xap#<=bXTgb7Q4>nU>Z74*mE1k?tcgL<{E^Ih50e-qfl zkjdac7<4an?ajB>HrpnjFQhNMRleR#K}}iQyG4io1TF-GGAZQ9COS9|VnjaHC3+x= zQM)BB&f9aNRB{scRMo{ZS{)Gqik8R!KOy*lFbGC=4YaMZ-IQ5}jK|Yvt>4iscShZb zrmP2NC)hXPnjoxwl*4_ZZXU^0f9idz&z9?I-4y#uJ<8%NX>Z^C-8is*`2->iP{-`^ ztgZIN>axq6 zS!Ec1GINkZ7?;xJuE=)T6mw82i0PnhZ8mQTv$|HbqP(K*6|$O9h_=!BeY)?mLhlMr+!!YX_`jb zwW1B}I*hG!##RFxIR7-gf993S>eK3m2@}*%tkm|K(ZyClnS%<_fple@YSLSM<_EI( zziFXymiA74ieZNW+&gh4aJyc$b-6h$08YpND^GlW^X~N`TP{gazm>+!JMIzHMs-QW z!h7}Z(m*jA7jGQVJvE9Nqu!}@cbfGT>Nl;Ws@Ze_zGwBW+}+S>f0O06b0NL#+8lMg zL6;pZS5Gz2tSIvO#EJyoDN*EI)YeT2(pB$9a<_UMFoI+=3J{TGK{(1tFEG%A5{xrj zZz_yLVMuKUY-aRu#DW`rmjuzMrFXQDw)-4Ni@g07J7EJY&kT;Gd41LFb;AeCvZgz) z5mI^WyyrvDC4Etz?2}1KTEhNja7W9-=((f2dqnfYf>1}x-@JIYBl`1 zROk@ej;Lo2eU^-Cl~J3Qx`8qhHfm?f9F?o}G)bP2{$RG?rxK%v^zJa>C8_5)il6Gp zdN@IdIS4D7e;6R7?f`+uwx_zUx$z?_SG2v!LNe;xv-^AA*cR?4Ql{Kxu_%A^Iaefe z?KrU6s$ci2&Q;H~epOGYid--h1|m7q5tzewgvepl%dP^ z{ndy)y2pJ%0?-#e#eEIWGH|juP|2fFS^d5tW0{mv%zE#;>IkmNcF?O^e!$V&BjLYm z*Xlyqe_s7S3fd2C*3_2_=vsBJE!8w*noh?s?qe(9AS$b@w>p>jo*kCTz|$i{z1t4@ zjIHi{;8+KbDRn{Ui>$sro0{Kpmbi1b&hMU0IUa@(8?rttuj^*3ex96eN*{{LVXr5M z{$^^{40MKlC_Fynjk&Es8zUu?k%NJ_e3NMdfA4%>-`34teNNjhdysZPu+7ed$HYJM z=61i)sk)1TXkPW8t{Aw}sBY}6u-)f3T_s8MIh7F#P#c(mUhKEFIXbAA#|?2;XKiRW z3;CdBqi+Q6mj(Jr;BW}pJ%03eg_q4{F1?R9H}6UzSYUxr(U4!7H0GR}nuudX+E3)i zf2A*>`8h*QQ;0>~&_ zjAmn_8ki;K>k2lYfuf4-sPRY@~HT^TsFL{?YjC%cXe@+tBtAJVJD+ zz0aMQHHH%r7;_E4ib_L-=^``|MTZ@SxQUXR=%%b3p+_V6r6@ky$Z)#l2g#Uce>~HM z2uJ8<-S$LA_tAZJ7^o^!1TrU?C4!EQh5& zdvHMW%naM0%7~yCcc;%lvW|UuHxvRI!Ut-!IA%fLZai3<-AAMtHX@-IN+K9e`X_KC z5HNzL;Go_X;A`enm-h**F7tw8ePw~5B^4Rbkf?S33`5S>-jlgYbwQH?WNGsgNrdFg;Qn{h@Z;scTb?MWGZf>(TxOq)?x(*0k=IIKrZ z#*Z3qKm*!`UR}}y*wmEfe+hmLENCaA4cB$>fJ*#?E~Gs&y-EM%A=Cb!JYY>zs|3WH zSB*tb4mcu6wzSiBpW>|FpGd%Jy{Sxcu|43hT|N{~%)xDK*Yo=2yKf(~3|qZJ?XUGd z{huZmS7*PTq0RA`n28uNq>N`Giop`2S-w8|;U_*T;1Eg)7N*JUe@-%&*ENMj;5Cf1&$#&Gwf430nea2i`+~VH$!yd;U2+n@u;W$6ud6w}sOHG*pWk zHr}`wG&36x5TpD*Q!~a4N^;R2drLpy!e31>I>FzU`pBg8BanM**1!!CXo0rCLW#)` ze=nQj;~1j@*I?Z4>o2D``E_6JzI5zq(vBqP6%xq*+>FLX-97&c#ys*ov*O%R0s=EJ zm(igFD1XgaZFAc;68`RAq4S3usu!VnAwaN6Z^liW*16`TvF~~}Y37EOXq!`sbVVt) z^Xt2d1^6P9O4?qU`yztCa(A)VeRdb(lgkO8e0%WC*}<1j6Fo63O_ZIST}(uxm{IY> z3dNLwsm0_?bb53;ohdD%S5wWSqp9T4{n;>IQ#CH20u;}k{BKR$FEFf z8oi|P>32u3kEd_Xo`C|UtALbDr54n4qMvz^u8x+OBn||}|DFmSogKe;a{Poi|Lgem z>B-9%59m#DshE&V@F8K`GHGPsbuu7KaLKGvfkX(TIpE%ajyPqhkp_upv9K&Lb}|E@ zsecgk&DmA%8K)gushN>!;9Hc-;{5AIeoGc}rj!X}S-BWtl{6|=+szm+&9rHFRo9!M zD(mUYrfHO|@vw3*n&8?*%VL9O&DZ#wEthvw!=tcR=NtOS(Ntf-v`%DnIG~wGIE%p! zUgS-+{+a#tI-CETUFI*cRn9KvtLp(xg@4eDnI-hTfcg{>?A2yvyAyjly65Twja~j=T<$msBTh4>o z@zwFFR{L!$Ayr+?hm zv?`*_uy3lA$y9&PIe|(Jyk?Qd|~v#<);j^az4Vq>&Xpcj8Ppy05nNRD)Z>$0jPP%`oW2 zstMcR!6@b2Yn_+#WraGrz)=RQ6PrFT6eVsc8FO*Vv}z*z>Eq|G2J`?Fw|`A4x~5p2 z=Zh@`7{t2*{wIwbG#-v9@Non%>Yi7bUuyOO<8x1Rz062g8_lbQpG4~h?cE^Q*GVU3b-jyNgUx; z6$ePHR@cQ6U5nN?S2U{1Aq7>0k)TVH+TtgF5mX5n^gUbE+c~Hx6CNG9V>+Z4*eH1e za4&P3^JnKq+vS3W=YGnaKRm%a%jyO-tH0{uLwFva9sF{D2IUhm5h)lTO((`^rlg$A zR|jw2^2q`gpG_b}pia7Rq$_Y$&1{Ti(QeZon-}RYS0HIOSNo@ zlx%%j)At$CaX@~}Qm%+(QF-q4_?jMq9vi>7C{|A3h_p~6yeZ!HxU>_0^K2jb6g;3S zWUWTQF4uLw*{;i>4@L7KnCfBgoCnW;SL+1MH~IAEyX$T4ynE@)CQva=v;q{6`VZwY zC1c7y_XAr4YVZbFFRJw_8%hHzW=1re5nYidr6z?=(8$T?(N9uHf-u@4aH60P*?d`) zG)5exHHXoTt;cAbbif7ACf_)UB5dy}4}6z1@&k)y{SM$l#24iy0RYw2fIeP-bQ*bt zaDbnTp)$51fM89&dinbK(b=%cItA~&l=T3JKzF|zFh}!**;IT^%!$(k`Y;>z641Z( zmqBQOGO-uy1Lb1NU?-#>LB6A}eA(@Wp;5vYAo%-u#E%1B%emaH@^#VQ3t?G)Q3T)Z zi5gXMewD4W`6ej(o0#p_%ZJDRO0$n-e>Vuf>uvcF5UQ|u0$=>oAT->abZ`)$Q>lqE zP+9_p?&d8E05;?oGZ+g%|<6!ildjJ4^mM8Ph-K^*MT6(I9qlP)04+N+3t z@v_?=L%!D1w*9f?A83|jY8VvF{Yw3JCYbT!K8A8BPWt(!{!sr)of0zbbV_Xne{MRR z5*Fa0*r#-aqm0PG!14Kz*(xKx_n>zuGt8|j=RQ`+9^oT%HNOB5b6 zmBjrF)k$y4r#GcXjGIXKPJK)!N~GA=JZT|Z^F*RtdRN9bPfm>uJt;A(PGSbKb5G=( zCmd1%jw6@#fr#?6(qkrP0d*24f6b0bsKHX>#|4YF({4Fh*T<J-wi9_Xx)KXq0(at#JN+s=yCv9rR_NN1%X!^Q)R)!1o5iw*k3J9ksNJr*L&kq4=! z$Lbb0Bkk0HiPLEF$=fQKLLD00&spL~E0|Ee(0-RKx4xyy&gbI=4(!wsf6X4zle>#q z9txhrGQZ3=#k-uYO_gzZq?f37zj&XotHW@Y(jk`(Ig&k^(etXfyy}%$hu2kIv=SwU ze6mv+b?T|`(W0=XgZ69+Q}cWh+XvH zN;ZVX)|nynNUPlsDY-^g6 z=id+23xFZKO=nJ1fQ=;91h*)LX6v3U5Y}+5D9KkaYWVI2@rYhn+o&$&?z2%MSgeOY z7s?5|Y?rQG!&el?0yjlW*hvY2C4zsY-}EKqpL@&%l*Y5{?`|$f8gT$2(R<_ zy^4$Org3F3Vq$RAwAHv?ZWk9L#bFy+RD^Ke79svN8pVYogokv6qoBixUqX4W+J^q| z(dqZYJwVDE>q4oyf9~zrop9&w9j`fg?5{byDVR(`v10%S#7Et7I;Gs`pHH5C@@$N* zWYhR_WMh{^paa5Nmeh*=e=HQJtGlQE9lL|u2Q+)Lrmi8L(X@t>bf!}C{kbMaIPvv%l>0Rb_W(V+w=f4y2; zciYAhe%G&H{m_!Gx!wz~0Gynj<5;req_I_tY1)(I^nk!hL=6HAL0VFOeP?!daUns; zY1+Psi`~J_?Ce~=8Hi7ACVcYd?5oAu^Vd;0(JYBnJXu^%M5LHj!6X)nDFIXY+J|L!4>04OCluFoN=c>OPsJoOO3?yKqQRIXfg+;e~A$E&dai# z%>y1zzdwIH3;49br(l|!pSTDrlha~R(R2#bBu3KPS#Zr{EW8+uv43P~Q||NYR_2aa z3l{3o(>D9%bzSCWiWw4Q#%LPI z4%KjLkV8M@hxCdwx0fJg5)3qoGm4A~R?-mzk7CAKZ`*9^T|HvfiZdRye9Rr$!?sFG z+V~amx!zaaDqwPzHZ*X~WyecHq?rDW+;=_>{&Ign&dNNKP> zt~9hk*=EAqdi#<69$gvS_+7d-?34xtB%dH|?J`e^yNx-G*}-K8I+(u3bkJEQJUEMk z5!tBZosEL9HsDd<>WNMCCdDffaN=jA6UiY5fmIH5f?)^U-oA)~Wu3bKfkr-9>b%Ah zLePW=c56&EcDIl-A|-!&o(Nu;jd=msHE-$M4IXZmus|GaWm?LCg#c9Ht)8DbxiNj< zz}%(lO=(^X0+s*0Se*TGhFthW07uE9B$;R(G9~3CTc7>-GoR$J2vL;<0EccZ>3Sj+ zq|yKrZ#lU-`^y<;@Unnh58942%rniSIGAjK&55NC9`_9o9fNH z(b8e{x7Ubt1p0qbhw(%o@QLYqU)qpRY)Uti7qp(aAXS)#7Hm`<@sUVCYzjUj>4+fc zB^}(dmq(nS7Wq2Y$0-|W5=2(CP`fjkG+T|!dr#8lBa)yH1VdKhTK0{{8sKw^I}Ab z1cGhS1|r8^i~(^02HA^P$6L(<3Dy)v!`$z-l%KIB#Xfs4*~7pNpl{6ewuvO90gMoWLl}Ke;9YGqj4S@yRUa_IwITBW5iLQmF#_ zEUt+vrFVaOaNCjlG>Sw^$C;!^ZT^!ElH*|Cq!9b;i%5h*{IYlE-gsHp#u+*tb(m%I z+=5(-LV4`dI#0T64zm_=TL>nJ$Xtzw~PTm#P3H^UF#15Lk03*b~S)lkaTLR%Z?a-F6 zc0F}U3uC5ra%6Zx>7a)%qAV_{%rQV2@j%ETQS!K9>JF(7>+*+PMM%xUPz{~(SNTd- znzR~|2@p{@>MKf$K8h8tFouEMi_8IOu3g~tjl_}*q(!nyxrN|PIN_#P65u=o#LRg@vf%#UYs~^ z+#dJ>5z9!;9`v>_9y3!Cbx&EBE+8(C)JOM|QH&;QzVjT_r z;G_~Y6XAd_cvr_49{y$e-9U_ozG|**;bMok>3#bucr4gr?&2BFxyFFm(oWl9W07?E zy9bl10x?DS8}R4H^>tGfn-hHom5f8sDCp|~8i}QJ#O6FwZUax^Sd9*?Rql;DDn85-)40}N`Qoe8F`<6H&F9-cb z917(Fl=|&=ujlDJ8XW{Wm(@+grJ_%`g8h7P*EkZgxo9ueT#=$6G}u7 z=#u|_A1REO2G)RxSgc%6;`!63PpJX(^~IkrX>_%C`C&mrSbhHd>B)bt(3h7s^&q81 zpg35Wazmq{x~^#iB@5W?pPbG0H*!~nT#f~~cz523G1kcfAA1EheQuiU1yO#vzPw?cl&Kj`iV=@#QP)VYn3NL8KV7A3(|eRF}DBy$Dn@O-}|;{>X~w{6IelAop9qbWLY?e5Cjo@I_@LQqd(Go$Fy;UTqQmm8FYAq|@arAI zm81tkk)nD~6pr6&+bZOT_aD9;?|MnuI$K#RiPiSr)&BV9i66w0vd&sW=$foA%cl0N zQv9XVzg>U#kRvWubsP9B3F#G~9T^3Xtm<1@?b@=T$B~wRtfot+4L!B01CqkcZMLq( z=o`m{6RzE(tZ&#Da9nt-=K(YC-$UDQJ>7B?5NzT^KUxZ?u3YFt)LRcaK}VaS{U;I& zSKXHpTY7={`&WJ(X^q(L7+tqL9{Wtn;?DklezHp6fV6TVN0{l-L( zwgNMy?K8CCXp^5X#4wRZhL{Ndkqbt7o$c4gtIqqiKqH!+vdp#&(Cfcgl3o?jshC?FU0&u$9ON^~U*AKF##6o3B zljNq|uOE4&6xmg>cEG+^6v-obI(02k6hbD5CmyQaJ2#n`M z$_S%?l{z2Xi_?qQ-1y3UH}j=?I@8j9`V0PA^7(?Lb9yXaEQt7hW>6)6@ZCRHGSjj9 zmgtKYr{{~=$K@*sAQ%UrwJ>o6;aS(OSY;ezB!bZE6&CMjO1jI%n`et>Wcjzn`Nhk( zZywN_mf8rVg_2XwWF&N;ds{CjoGEF9j0Y8EQ0GW;0iQTMZ_thmmyG=HcX%qM&isC+zNt&)<;kW5FzR)*qz|q;9cv1-!g`5*j3OR1c z_%7$AZ0oAwcuA0dm-ZERWIP+2W!K626BY{qGlf0R7qJhc+ z>R4}=RkKBS$QUMwEn7!QHdPokh2udkQx5DZD>K@QO?_To?Wy{hxxCA(GASr6D)1mA zv!51Q8_WV0M~BkAPFf-W5p_-oO^LIbdG1#tA;5fHWc2cXf%fd1y~G&d$3qpviL?X) zz}qW)6bEA?*c%(lk3|Te*oz&Y8r(H(V!K^-(B~C)=PA!77N3+)qz2&Q%k?H-Z-`79 z9LlWJLj>s+^L8yJ=ukQ;Pt1)$f=yP`MCB#coy%91#N6(q@f*YTabg{iW#Y1VF z01k*}vF#M&M?(5)A8loYsZ$D0iZV@xaaY+M2KH)yXXVg1m&AZZWKl8I8NkLfn8UbFp&9KGlxpglmWDns>`qaOUWc7}x=$1c@!a#>&)h9m2HjH;xyne1 zELj(S;IFFf*$Di~zSB`@J@~S3rD3Fk+ML8$nSzGmpvrVA6>v`4s_QVa-tmb?UEk0t zvA{7sk@*=uOi9%@wl-+oOSo@*YC8?B*hKxF;@VLWk8hSyPDg ziu3;gpK0_Ucq7$M%wAsdIaonNO}~7*1&BY~JBIq_VtMq}5nef^qu>&tMFbW#vPsKSG*%(YeBIvTDvk%t%B!nrv5^+*a>tl$D6d=&=3$AKDoP6KXk z5uNv+E_?Glj)WIPP5_sBRQi#rZnFt<*;oBCl0Sa@n239)Po84SQBxrYGhIC-`q86D z)(YI&jABb%m-|!Z+4@<6%{~|-lFw#;BohQgOLWKLl%L%uXNfHwv64;*K|_8VO7Hbx zulfg0AY7#3GAPY{f<}R-*(IQpy2mcPC9^+P5DxO*+3C~sx1__Ruxbjh6&&odPMT!P zRqErkysSfD<10)16w)0BsmqErFp=YJ*o5x;d0>s|J00o&=I8)Kh`N*S&E~g%wbSqg zsr7yV9}RxDyQ0hIMP6n@K#!+NKr3K0!R)HiuS|ZUtq$$uUDV?A8^jE2=Ti~hI~#Ta z6+f9q;lG0Em>Lj9We^|WWbyv=?A_}HBjVvuAubuiI8C~w?Xr5xKgvjJT_kOLaw{ZT z_(ryRZPMZd79;&bq%*wf6W&gLgebawL4m(GNPW>=oDbiC7k2pxYHQ0^Y>+Q3|e zBK_~9T^{^9HM;nQLK@>}fQ#a-Rb{~+ZF~cedj~1J*7R9qkG9MGqmRD{^P=ESK(+uP zx+AXbmwnpXZ4S@Sde_wO;d1K%`45Y4vnL8=Ze(+Ga%Ev{3T19&Z(?e0+&&b z0V$Wq0|63$;JcH{jN+=P+r;tNO4FO(%?(Y$7N-=cid1ahufJU^z&BBC(wqAb3j~(C z3+(Q*yI}0e!^EDvJ$bV_nSU2}6Q4za6HZq56COCscic(H9p-SDN+-Wqw~O1^nd5Qm zdgj^IVkT_s;z#_ehHsa8^^AU2-!EzKY33k_?^*wU&?_?$Ss!S8`~Bi(Is4b@2T;K8 zDj)=Nq7c+mqJPjNT^&Q_2d*Jl{ygKhwOU?%yZn|o|Fpchz5H->N>9QT4&#DxdrX)e zGT{ru>vBXGw*?Cw$B=LrX-;f?fWzPA>g2Z*4nupwCp;1?h@wdlM$GquNwPWl({So@Xg}Q#XoJ&hJT!9HgU2m&uRSX)hpcd z#ACwYlQTHW$P>irg<7!nBsY`lwfAvWbePe9@Nu0bYZ}IRUOrYduJv-Nf9rLoSK=Zy zQ*q50>j~^>an{w(sPbYyrr|g57Z*1lh_BwdBI95bf3U@Eyo)#bRLsGtIa$jcJ?d4X z^1hN<=lfDqpyFzv^-;R^bvji{#qSCde@@U~M`-1jv|o?;(cs9IKQG>2zgy~^oi~zy zv}kS8G_K>SmRobW!ef!`5C>c%sw9uA>gCa+tz=DfRa~uQzGWTyp~bYB;s<%EJxOK{ z>sooN+GtOJervZcUiQLuG(5eCGu!6>|L`1wg$h^S>x8TCgC_pO3lIY%V=f-_HlYBj zeFsMkJYDP%b7hQ}SkEF0%q9f4VhwD6U1)G3X1CCnXNfE-$-op12)48yqDLbHG;(vr zSy)L~fDu6&M0-{|kT}hZD6#^)b3+!ew}gO0tLf6h{w66FznLk=0t|6)sr4e4W+=X8>;gJnUek5Y%%9Vq2MC_cynb`e?H z>);P6ge!EEj_|FD)|96dX{^+L*F^6xS47je4bGx%v@@r)Jbk;oTHY*XA*B1utG7gU zq#~g=F0VAv4NEN++626;OEQprTSZD4ET!C<=BZe@{XPxQE$ z(l0p^jVmej8qaF!3?tgahb`=WX2Q&yzqBQmdO;=`@x7H_irdBigX;9L|0jeh5Is5Jk5y}0;s zfkov=C~*d8ZRm}X9Ub0f#r|pj@#^wt@>|DqndgW7Lqomr$!D_L$N;Oie_`S*WUr6)s*c-IH z@ciZkKB51tB}9-Dsj3eLzSgA~Q^Gd-$*z(QVWUrj~2FEj^g zUVuug+)AXnfrl*U`-gl|+>$+oW;F<7&=D$EN_NVysXV6`{8LrIzzLuv^CQs5XMU)y zaG&K8UC-2n$*&lW^fY~yW;=kWa`!yPTufs!Bl&O}#t~dFA%R!ZGWT?Cl*YcX!BX`_N^{z}}#MHlabjM6#w4N)f`D;_$9Rs&B zeO3a3A#jG?#>4PPoVm~thK+v?)f|HzaE=y6v7Mpp3o^hr3p@*ymeqOy4iqW>QSNqJ z5iSDedQHgd?W3vLf3od(Dd9MxANHphm)>C^hGJE;;ozWuG;$oDdCnl4C?4qY$cn(E z%2ER?^{F1{fJjU_iQ1$;e5nbV>DcxI7o0pY+xY`;7(*H#`uYY1r&t+`V;jVH82Mj< zZNhb}sZJ<3rVYSgU6$!|6z*J)1)@n8ZzLv9JQ&=#YY~3Msm2Spfn-$ycB%{4y5H|~ z6$%fJ>V5EkWoUEqXTuBmCgo-$DXmZmivkJDe5lgAsBctE@3s%cTHTgsJDU5P$w%t> z9q=HNH*jSgqqooj(M+psMdZ_u74mU)PO!U>ZW~C4*$$*n2TO-6G)8N}@}6c1=usx! zEx{C&Y&Yj)_1gCzP}C>#x)mPShe7S8c;MjX+?4wZrzMSIWIq8=RYDb>v}>6Vu@4V1mqp@6qn{SB<+ z?U{xiA)r+sKo3;YO-8+w@P0Y~kP1p>SurZ}R!v#cvzvU{<^X?f!rmA}qTfv?GNJvD z1~BuAjk(eae`Ry%MA0C+DA8REOdj;LI9byxp(;tD23&AP2d~W3LPeADy)vdIsf|G0 z-X#zXG@+9WiZyT2W3}IG;@vYnkce%$(<-J}1qbp>=>VSZ;wnqVc6zWE$A@#dEB9zv zU$@ve*UckpqLVW4<|%}xt1#~<(*sSTBR({&I%O1+f6H6~s@3|H*cb{Q^fu4{GCc>p zh7k4N{uzgfToR z1b}xsqVn${B7!V*UjpA0L0B_0lh;$2E)m!Lkv!7=Rmh0*L_PAq=CZacp!>+COg@a~au1)*G z$+F0w2Xr-*8;S-s#fi9}U+||psZJTAC4i$}(K|sGn3bruY}|ipL5CBZ{hP=$bxM?%)|7;mp$z942D=J*HK z+9*IBDJr0E06HxWPOJMdq?1p^9~AmXT2>*4%la6)JE5bi_PKT=Esfv_`jo+S^|q|C zIx~eheF)P7qpyD_+~$)|dt-`ECAJffnfZ9rt18+LNzjOx{gvCT`J_Zwx40^IDl|)T zc?3}tXm_D+PmQ}EwK6l3tKd~$y~{Ajs<9};^kVF!6lib5&&O`a0H)fKRM*v4cs26J zDff_D$ZUI9r2iy$DxVzk3mhhd_qF_1S)Gq*2c4_B2l{_HZi{`rre<%*4vPHftChn~ zw0L7A$5@6T6b%0Fu{?7}DbhXXO{GZ(UHq;M;jF=3HWQV%pKB}`y80vSY+Rb$y@lR=TF5_xF8B?4^^4sj*Z zztH&XI-3yYi=aAJnvqnGwwUO6w%$=!La*S16}o@L)rzW_PD`rZj5YLxy!)xv^C7V{ z_XEPkvLUdNHJHFt^`3{dqx$kPf(9^IN{CA6&M!7tsZp`{YNW$j6>u`3YuP2y^kAYWw? z?cXKvtS#aSvIxwyS&CRH*HD)gjBbp6Le}VjqyK?txjOkTcQ$fcmw~bY6Sq+i0nG&h zH8Gdbp#&(GNEQJ%f6T-JK@eCh_Rnv3ammHQMRM`oSKr=!_03;%b&)Zhi{j#LeZh0V zG9fPtE|}oZwYvD%;`aLXYAF<7{CuU7#r0L1EMEN$|256;ZtUA7{oH+jLydo22^^BC z#jp0wRjL>7sD1nW_4}Kvf8YH81Y{urY088yfIPGG4|YgMe`CS2T)F`_|GeVK;_l|B z*Eg?e=3j2!-@bYG(+he^lTa1OA3}|shjIfWHFuymS{hOD;)DxVi{-#Yo@a_ z!@)}_72{f7EMZa2IepWuua;?=E{>a;8vC;P{feta`CvOfTj_r}Y}R5Sd>{ zHXKYadt_dvSuS%oHaZ*UEHCoWbdibDjPYShaHgq97mpiY7RZ+6N?p?4E|wrTm(&*l zCVxcO&oaZJv|t60_$-T3kWS%-%$=c`$dl9bw9T@$+l76Dg47SdG7da@LEW3Wt!io> zH|`t%?Y8giJM(Q1;z_L)BS!N)Wf~SGMyFPNP|mqrl(DU3ObX?Q{G-`NHo|jO_4v2+_p093N7V8aJ(ul@26)oi`jKAI=LfWv_1elcN&=XZ5xd=KJ=86pEgYNK zzFCBhDVdxPiiC39fJR$?JW^{o;r(RHm}Ai4IRTaI`{{S5d%Fl4#PLc%G3~W-8(oS-FK!zY=Wx$FJPY_(a7`CH*u< z8rRrvr-=TW75X>97tPudwy7f{BY#q`E}L!dG~b$ly)mab^QOd)zGR%RXXXiWK}>5!!e|X}52P5^v`_dJ{Kg1t6jPQfTsL$sGAaDlu)ni?Z{OTehn<{y z-Pdt5xXj@!=MDkbkp%9w`hOja+^#;BtMXXRP>yg=4#>utdL)2U14&xd%K?vY02Ct` zq_Z}MNDgji{+zI493=D3Yfm!&Mv zo~3RnRRR!EM$h2-blgPoX_hmspQTc>L`_-v77phK|JSi8ivoh8>`SM-X+hTTXd|2~ z0Iz?N#(Xm2kJfz5oPSKf%Vj1CgBl{i5C@E}Co_MCDpVfpRc!MRSQmb87Dtay#@bG+ z$I4ij!9=J2abE*!2OSR=GXZ_SwKCZP1d}XN4Mzc3?+OGq6`^Ci$1RDB#_& zKkqnnHfMij4z^Kz0SCdeX;!FWEXT8E4QxLE#tD)7lZK7TSVc6;iFu(GuyHsLY;Bx3RA_Fa)BoE}V!9YH3)B`S%D87p#c34VqDmT%uKU%$TFY+mkm zFZPq81}%rp!4CN7e5D(WCs+`$W1o0a2 z)6XJaV@!ljY_KN~5VW?-;7Fa!uv!b24~Z{i^UT4bFMl2Unb-U*mzWZW$h2TuPTkx4 z`oE{<5VxFZcy{qji3lCRFr^iYs5llZ86fy`;0Re%+JqBH0{F(X$S3}kM)W4pB$Npi z)#4EWxza$=0TUD0kLQiQHq3<98WApiqFv}_^Z@&4T4auCU{KW4oQ@_lEM|`|L@W|J zL%&B^B7X-0L28Dv8o>Hw@oi@!RZEd2GMHO?JUbDszIi}lE~Htmqh?9{}HMQtPxEgSsuf)(21irZgr(R9_T=S%@-1=pV=R3E_&;uQ=ULz5=pFLj;F+*d<;skf53A=CMY+g7#YI{N+cB| z!X~rS(u?_8LV#~Si;F2s3ZKx1Xww zjL8W;{QC0%LY_q}3wZsEcn80f`9ZTOQ-3-X=$unk39*j&as!7bdX&t^HTGTKINLp} z3Jqm=N4^4jyY=X8X4bXvB?bFbWNK`mD61)y|L84D~xKly-ZZ{ELu_x>fBu^-)D@WHZ-9{wCe=nSEv!c^pTOK{lLVm@kd3!iFyr_4HgG?8>{Q?|~*3E4;{rDV+_Vl8CUqW0bvinO+cR zG3V2<1`%X$=~%H?fE&dIpvP)^0w;Y*=CpK4b$p0J!leWp`=+HKF8@p!c>G zqA_dGrWj=&$j=-Xz$H?R)+?71jD;46g%1d11xfiBI#jkU!`_l~MKF!5^TOE=fH&sLnc z5uUc(+KB--Q#aL&=7JRg3;~4p8PUp8V&yrRKo7euh^!14HxXJ`2LN6C#z`NUzI=`p z4hA3_82*_6BuhN5d)RjOW`F-!19=9FgmoHXC>bD;vNTO+4G>XYI?c@Kobx2$!EoXs zL%gdof$X;Y!`5l6PA(xL0U+96e!4a@DouBeh{&m?oT+4pL1D>f^2LC4gX;aT8yAsM z>{etoS%I7vL!ej6{}6S}=mYW#8AkdxBgA;K1vCSkp9Iz#v6F zE@20wa#yMlHqai;;D7bYE$KE3LzgaXrkT|FH0v1ij%46Xt)B$KC0PnRQ=>FllGmdT zj0C|4p=;KOge`gJwG$3#Y|B9^^eE+H8iqNsGO^eC=APvI(9~9? zPc57b1phmKsfKFz^Cl5wIY<$Gwn_BZ%9viyH)rT%!Gz%Fmwy~2x89W+gtAujNX8&~ z`6p+3sJd+G?S3xb1>vF;L6ty)dkRo7E@LfdPfy;};=>#^$dxPM@ezVDw$<#!DlN9H z!^LKIvW=0uHE-4fFCrjr4I zoQznGeTL=Q0UQh4l$s5y0eKANs87_$0axb5Syol>#F3hXvTZ0IfLa#0#?aG?k_J14 zGI@9V{rDD;TAV1U10SskBqO>2=@)8>oM;ek8gII5!3V5FRwUW?LTYg3fW<#Z9A%lP6}aG0-;v)K6Kubf{S_ zmB=kvf`8dp&2MRv*qdtRI^jUJFc6cnPXi$rm=9t_p{F-A4K5MZSqe^KLh-M#l7bCN zUI}iuE}W>CPaw=EA1bU56)1<>dZ>NkFz9gMb}-J)$0xZpcyoU`zOYFZ$9m`m|9A2k za`q6pC4Yu9GP$n`N z16pmOnPT62_%R4qrdm`mjX~ zG53_QG>K*M!fS-a;9;@Cf|`JgGrK6Jm&8(2R^DI9#S?`?v1^hpPM%zH^f8aUMw>CA z(tq(eg;}?|2hZAa!ULZ3uOtSBs zOf}{>u|PoaDW(Ir<$mwyc7+3L(lgK52Uik!V@I^z7AFl2IVQVioG zWJZgD7QB(hQR zg{uM}Pyq*rSyJt%&7b?T3T%12{R(denmd1_voeun?y$q_8a@QqT$0JvZ+tyXyMJNd zy}{Cn^q2X>V%LG6gK6nDqA(yAaRWw{k3NlpZ|Ei>-sG-VZnVej(Ei>0;eiQH6AvAx z7nVB$bYPf__scmIYI4xWZCRNV0N0Bf{F4Xs*80wz57+_PbS)mgG9DFr5JefuF{ELS z&1Jxtk~(Y!8|V2*J(SGw12EFXR2)5o;-H6?aTQT)Dl<9@xEda)`@OmQ>VLR%ec6|R zvH=sfjV1vZ0s}cUGMCYz1So&S8(nkUw(;G+LeY%tQ^tY_fFOx<@}Sys>?D(9Vol>t z)A3LwC2?}cyB_Z>tG~Xx*ai4;q%5b&^hE~(3+!UC-+-c{o1^IHnNxmqQ&`%iWV=v!@qy7`OO87p3=|d z>kDf9a-tC=F^hlj$ceIxAF2KJ_4&^iC;z(q76?fC1Slo6&44_I`dbF+)0l}QjXl7{ zyAv5LE-!v~dGV4~{`dfiq*GR^G2$!VZx@Dqmj}B>Lp=0Zb&aVp5=55$r2dFb)voyeY>T<%; z?ys)b%d%qPJW@M@6q%_5r=lo*zsig4dID{1MI47S-rZIWVSs-Y@2|SUX-B8pN)gHA z=u{eE;vPc*E{&!M(Wy{b;#Yqk2odvq0Dj3hOcA3qP6lTzV+j&!m?TA0;BeB1Bm-O8 zuYU>KoH{h20TaWNRan)8v1pvB)|_Sk^_=wABo4NhFkthqOJ+RUHF2Gy8{g6%HGl(jwQcex z^`Im=jmQ2EClYMJw$87X70=wactF^?Ix&lTYEGZXsZ@WUM_|4NJbSua=jBhdQ4|Ds zz=xXzJFirbp63(G8<288{`9t5ZXUU4+$|d9YT{gCk=kzkee*c7vqb1LC~C({@Iw#F zmr51b^mJ%Q{s{R3NjEZR1#DtQszAPDX~#mPjXe}9>~#7|qb0Yhk4~0~J;_u_y(}hv z&V=G-Y2SaNK2|;wkwtQb(WfR;jvo%~!CsI$+!A(>g$DfwSeqZhDB|;-?suowd z6Mk&28~P>Ap&Cx|Jiwza1QECKF68g74_i2C=wrp5}`h42zo-JzvDv{Pzn zBOzrF%BOWxEcazKC2&$?aR7A7E9V;S>fJ3N%gfSPEi_IznuBQB#d?)H^mReK&6lAhi zN4w)8N8x&E`v$h328Fv`?OJfQ#q9(SOe8WLw2Vli)vqxm@tM0RN2^3A4dN_SG(Jh=uV{tyEe5PyHxS5u*4ER0bHq{7NXDmL~_;dlq^ij!#Z z=9>CD^_0wi3H!OW-&Wyx^_m|qm-ECdmlC>%8cC*ayQTAFI zyr~-WC@290GL%h#=!O2yc$tNwC>?(XJ(jG)0*P8hDgdIxSlE1!pr>QM4E@2^TJ*Jt z%#Mbp1bO{kb$_?smeb*W+NI>=mX#r$LV{F6%7dLG576jaGuo<#%#SB03(b25NZvEF z+@2Y-zMc##rLZRMOYtYj4l%HE;(+7$drEDNPqJvixOgY*d9*N*p0^FG@w9&m_d4Ex z-2K1wS_U7p*;XIw>TW)7OOnGNRho$)RmNVo!wEraO1Dj?+vWk?1{Lf=1|sv*>TQ*X z%xs(*$JVR28E@y5kJCV;8>d6IhpmE4NGnLzzbv#3e zo|@AL(T7=6lzNq?r3j-9hL`rm6fLM@vn#Swz)hYbpYj6KGFr#jXif$eNW@Z>7%Yy?0~+6au5Y*%Ud zoUQq6CI&MDNx@KP#)bnG-?P9~Vji{;kExRUX%@m{0ftiX83SRAQ1XAE=H%33WFHiW zAZ;`#4Ym&L1NO3gP^=$Q_CbkMn%`3|Fjmi*2c1bW4@m66ZdiB7O2imn%Tc<4vT2e* z8jGLoTA}GeWRv)8J~>Qd4Ht!RuoHNMoJnJ0XyY`0kj5ffUkC{3j7wu}$YM3+?vRzf z;G#m(h0A>^nH3YJg7be>u3p&%8K1P{Y>R>qiDAeE{CAhRa8H@{f?i0^cqPXTY(N@9 zaS|od*j2cVSG@$0Vaxs237xc=tHJO`>NEbLYB4FnV}7%v5!wl-ofZ=*`koJk)T8n_ z)0L-YDqmO|)sM-yvdj$gE!=~l#A+gsQ^Kf#yI59vGnF}6k(ht5tV_b+$ousbcWpwV zJy|g^{dx<0TocHOCSq}+ZfJz%2@k(p*(YmL^~@|4Su(1uKf1zE4vOFRoLqUmaV780 z_Sl85gL^3)80M?$rf$%Vp;>v@B*SZjnq5Zxer#&c5~wL#V56q1cfvwOhEW5GU6^n6tq9JWk_P0i4laby^Ekzr(q(MV)T69A@f@NvD&X*7rCGd1_xBB?+}FZaH*J^!2G8Y>mr@`Eq$rBi=saL=37s!@pdH43I!w;tF8FjJuUN zq3lv+Bpkf=+o~e)kX9c5MAFyGsd0f$peM?)J$HZHOW3$T1D15#Q1fd&^TRjqU%mPM;^F#Cs)O6| zVFOc>6S}vr&y`7-n7qC9F)A69#qREFMqD!i z;rM^lb@sj`--UPBjKiy1A8ffUdZxrFqAT84;w$pS0+L{Kal*(n0oI8mO0)QA3od$Q z=x67-hcQYdh1K}N1AhJc7#2?hhURPfndo}<>dR-;`r-@v9c#!j%{qQg!<&3}i%%Wg z&|luOH+)qut8I1tUK~Gv_UakmjUc#Fu)lvk_&mk9>dwIYT!wc7aFmoIaOz5uNg)#F zvVFt+Wd>pkj!3rd{P@ZHhVw{`_9_|TtE1v!D3Z9T=u((OV<_s zHbwR42_rZ@p^W}L!uaAdg>g~#4i3y*H3I@-p;h_`!2_ms zcU-6+uGFxjh3VoI0$Zg-I(h;U)B$PZN<)|Aga<(ZjMzY1?CBt9#OvjUUb^Jt_<5y* zOd{%TY5GQNCIT>cpQOhT07pzpCjx&%CI$P0^uU3fI|6-q2^z<2noiwAoP2pq-J5*7 zqZZkL-i%&dU@*d7kod*wJvH4$5eY>R*irK`qZCun)zQn!r(sKm%dfZ^*ju!J_3v*Y zM}g{y>`{JuSQnxj$&j!GL96=3aX6iz<28!Y!LjPE>#NaFhxb zlmXzkE9+omyKh=*-MOe2TQgb$F^*EI)7dUni|*i#JN67!#q!Ny zxb66N6SYhI>2mP3j9&Y~LyBef!J_;$!{;H+_s=d;09x%;A|VSG?e4r_eVN+j9D^#v zhNl6es3>OS5zBA0d5S4km4;rWNd&*G>swVBMS*2Fwk#C0LJJSs!bZblNwG>y0v2=-U+%lgl8X7t}xcAU^%@FaB zF0Q7q0V1xhj_cd(9iInlB(j$JDrZ|08d=E-y4a%!9l(rR`q2L;ra-m}H z%FkrTjwWO|Z>!)tU`a2C`O+*Tb%N35on8Dp7%lqpnAfT=HU|CP7KgRo!eq9$IIAg} zO;z@G?bi6OlpJJth>ewTakYr88#C(36+pZ4b=wYc#T<_c+up*EIUs@^FYB{d>wcHe zfG5waG0&`oEgS+5bqSl^?Mrp_Y$BCqx_=>Dl60Gi430%)$o1aLw@?A$@9aoE;vhMo zAYC*J5^nLANgGbfN6bYOS5l-tu$R^{=`9L(Tz9$WzrUmfl@+cP%k-=sof zV+x#RiWWfEOjDp}iQb9v=a3lgEvo9l@X%{%-(9Uf_xhi2B-H;QbOBc2;U9#~#PT0P zZ_>PQULVHzzU~oXXTCx=ZrDnm4dS*m!-FJuo9Ae2tqzuqXcDsHF-Yjy$`mGT@W^az$LA1m;RPQELJ1$#xD0!5GnAMo>A^7 zjdlc~BWYd{FFMfxIMTE9Vm0Lrz$hycnZ7`wR^=pt@{oCMM;cmv@ZuGn^|)!sjwLUF zFd3-h2z%anU0_6~ZDo}Z^7HQU!V=bgf?%9K?+;7j?~L<2Y}mBG5^0jHTXHmJS?#y3 zJo&7-YtpzcrwjQd=@2KH@s{7$4XGV=va(x7_3t|M0iISlD?Q)e75jiHjbzr0>I6w- zSA{t4wB#bW#KL3ew&s&v{=#b8lG-zr@S|?b*)P-A>&v59rwX5(>V1XgkxxLvDczJ^ zK#Y$**F<3AnMoZ9hyO9h!IahJ@H<@l4XHWfR&NIMas+*xy2efK4dS_i28&!%zfqD! zUjt#ximPb>Y+*kiq$U6@sws^97YYf?I`iQ_8A)r_=<5LZjy0+`x4)sfeA!n$^10FuJDD32qMWUIaDG6=tQNlf+Va1mk*)>b2EqB|`sF4|t%zogaI-NNHSu zRoFEIE-6O(zb|gB$`zk%)*8`Bb zZ17mQ{=$^ba~sOr%10wmy>q?(p+^* zSnsjQnR{_FK;mofp;12$+N*CoNZ|jLyf{Cn${b!r6{Z2GXd*XMCwyus9=FUnjSXOW z|Lyh0N@0m`Z69ZIQm==5OR%<|RSbnhHIXd!+z`vvCT&!%!IniP!d>OS@eJTv0zC#P07-aG~LXaia}x9BdqvPnN5jw%qNP zmDek{up?hzb>tofH;>O>06JQIw6~{32CbL>nAUYK64$&*j$)dUtr^f@8_X()zjtuJ z_aidN8?Pr*;y(Ssev%l{3;t*N1+)7NgQ3b@IjO zkEoB^EPV`0`$Gh`vSU+4y&>H-K=%D!;#BRHw{^3QPFX+4Bps=Hy-q+!AA%Wubkj|o zRb2~`%_GIO%;)}cRC*~HJbIH)JSaUH4gooOE0<57K;YNCStw<+Y=Lrk2Q%f=9;BFq zr%wqWt#-=x5<)n_XO^07n{H`xp@}I?sx!NimZ&I%ZbY3I!oW z`bmrwJHkcvI|XLwCv)rq>CC^1!Q2NPdq>4eunPKJS^AwQuVBWP9l%>P|3GA_!w4H7 zm_pYF>P5%sNvF^rHMPwBR{7Hcc`6Sl6cFdXR9FI@9C)Pc>_9-1Qiqi^2TKn6MxOhP z=kqPhxu?*LL*2xDI;zUq9BBh?xWR~yI{!Mi8>(ERAF%Ekc7+QR^oo(FP*YPgA&-J9 zbc{Me#qTdNx^k0_?Pt4(6hi*jal#!i$q1w|F*XAg0n5-9X3K%-Xc;wYh~F1W+Rd4D zv2{o}SYBMT%zPgJW{mqh{5l=H;2w~H*slQMFRR3JoY<}ppC~>@nwlv9j0wWV@L$KS(z3PR{P7OV(cgnr z*u?p(8c$5h*y}4{Tx#iU8L`^h*op_^NxC7lJnz`!0ytp?oT+F zaXd^aoXtHcdOdD6*wg3uKD5t@dm2Sl^0c>dp@^m&rgKq=rkH?8Jk9lBp3u+4$}`bo z@Dp6P+}&%GM5+V$_rIIpwy=A6^K&EF%@3k^N9Jj^6+b?wCSJ@(zS~}b zu||a402wJ5_jnfbRIN?wGable9?_ZWKG$?1h>6_oo{A}G9Rvt-|(|_VZ zh@)v!Qo<*TGcP_yjfkfb7GLQK2Ki=`Fm~B%T-{7i5+?w7+_@B*y}|pZU>K}IvuO** z%=fF6@2(A;e8BNvzW%vF^vx-Jc$q_P5}*4AKBn=9^$ykm4h%2H1(({oMVj)Z2%M?% zHrw_q0r@ZV&;H7d%n+yxt2by!wH2AaY=1HRR`aAX%DYe8b!DT!n=f1ku9_Qso;Uxz zu>j}RqZt5La}=@g)}km93y`X3MpXVLAB6c;e{>H!5)P{j)ZU+poQhCm9C!uks7%;) z1UuG)4J$;MwmDo9RlOORwr|GUgr6QpIqfmJvtQkZY;QMFNRjwK$g*TUpXdDApnh*s z>dRsO!msfdV3sekKDlDgb-4ZUO!}vAig^BPvMX9jk@Ew3D4YNs?@i38X+1cBRnLpvHaxQQZkf|p zl{Z<7O!1>ClSN{%slk@5c=1)b2(ac8SNQ$Lgy8cI`H{=komI$F8mwDY7abQ{&{ zo6M>Bh-;TzRxVTctXW_d(J>}8<2;lGFR1jYb%A2nqf@6tw)*U+XpO+7NX%$y)qte+ zt4I6ZgAex`I$~l)sxjZ-&U5u9cxsE)paume;0auFEcLGtgy0sV9%l<~a~t`72Al?b zMRxTiyFUmaIUmz@zvT;`!S>M79*(bLHQxQvvrWWE3s{t`U6+estYsVdcwBhD=spnM zy0`BfMG-Aj!EQc7Y_v;z8H2a14*}e++qimtYJcm_QyT*xPy`zEgpxx)jS+~-X>v=d zcBA6jD=&&vA+-L$W3XRLb1ICXRDoseUY*`_MJ9>K4~^{0DZI8daWJe-S|-XPBhlgV zl;Z>nBPKK!k(Nho&)GNK_vgsJ6+|F?>Y?xUaQv=Ek^VG5W zHfO_D79Fmqa>Mz_?M@dnbnv_wK^;6f)X3Av4GDLvX&wZM)8NxXxGg+i&~{*D$QwiB zgjreiGXQuFu4TE_TP+w%Yqi*%mYV6ON;8`RB=ta-3IBMuw^)cc2pa++xCdDr!p=M* z^0t`BpNljufL)izg!_4re=sF0r}E&pcuqPEs3%=bbKi_hF>~lH$C(6cSg8baXw&K_4QyaO?Yd~inb0O zY+wu-s$aPy5J(HUY6s6sp*YnBM@Z?3;FSaxVzbf}g0vp+{^7< zc@{Vaf|jy-K5VRB4Mz9JF*WntIfa9cgxZC$(SmJw{TC54=@#YidfFiPF}tN)Xtyk@ zE_`hEU|EzWrX7ibn^RkUf#F$GJDng)!huu_gIVx=(~*LVk`Y=ZXvtH(dt)i1<0b_q zLE0&-o0tsG2yi)QpAMoLB-g?&3@|e&3(yT?S&1VwnjO_0g!I~4wF;${0{+7!i%+Ov zp)6JX5M&Ah?5H%29V=>NnlRS|@tyb5x$5Xgxmp#NV zHro&-2Vki0vZ^V`NvWp5y;T@@^{x+t;!;AWbX7+i5u@F>sGhrI4cBVXFhBh(R%XfQ z(HaW#s{0SM^?s}BMT?cVN#V-iN)Wy2qu{gp`l(6!v0cXmBXs%-vu#^_QgwM;K=-;f zvFrs%emGV-#a`V|sQV3oM}c#~r&QHj@*kKJ7U0%RU)~B^v$s&U9kfN5wz}T5x&jVW z(`$3HJB+iJ2E6t1V6_>$x#tV!d%K&LcdOg;;rZOO+W#wU^4qner^me0o_GusM9GpaU+QzHR=9$zSbL!y-Tz}X%d0=uhA(c|2d(M``QsB zTtGB5rvVK!M69Pr3-x^TFwvqO)~eFKl?gE7bFod@fU3UOU&T4wrxfmmiE;s0Qw*}L z=1*3Ha~A6d zoT?L;vjW8$i1Hb?zP43yF)bg4Xz`q*N&##*rje<1wf7($8`|3LX}5~(|lrG)AnI z9#bGEzR5ageQIZQVIDm4H^_pxWZDVL_enq>Nrx)YKs#+x7};PH` zSuD2>NAlEsF>iGEz`~GN`uGl5yP%EB@^SJxhlR$1ltqDCtTgjicJ%m&wYz+3)Fx0% zvqpyGzKupDiFG`ClPPB1#FCry8J(@e5B;AEay^pagC*1u?~?AW`}MNJ{-HdUjX+qbKsGEk*SV>;mHl6v+4p^^Qz4+7`B&dy?74E zLYwcqY42tQB&WMO&OY^P(ILchRcE40&Y!dE)yg*ZmB!d;;{km`;g9-oPxKB>L&05J zW&Spq%6}r759pqmb#dqAorkBOaVXo5+ckwJkT*+BFrapLq(}V&AI+KRgMdez4PwIy z|4}GmbPT?Ibg3lJSPvV(WJ$HRWMI6I)+3ry&||qZ_&rY8Dd@CYpKTdz1V}Kj zsFEUy0bOa)lz-MHD8z>HH#f0CjU}fZ<@N&Yoa;4J#Kt|GlLbwhqo{7}czbe=Dnu$z zLp9wOo)?E3|7ZmyD3*>p=mD7UFDT+~AZ~5hHJMsz-7!V#kSrLepYp5LZ9k5s8+hXS zb6T(CVIY@sL$*~b)m|Eimw6lqQXAQ|#f>#gFEnKeakLdEaTCoF3rc)|B~!XBmY*IY zyZgD=JVI>?lxXNiC{K1LWSX7Z4yg1*XZ~@gwFPDP0R=sG#G(wSxC73ry5H*cnkG`D zzp*~!WKRrUR|Z(E_tcpWa?+`O#g*&AE5dng&$A;Nw8@$RKMvNTXU-AH*w-_>;y+tx zaJ$wL-KKN!Be;^kMP1(Qvs}8>Q8cB!RHyW6LNsh;f(rB@PX91M^QaZS}CQqQ4$U@2HWl~ zBZ=Ht?tso6I1RHu-^aIW1Z)rwYJd&0>je%9bYhg56o`KVC?HdS8hpvM^Xr(^`rJDA z5$V;&Z&51j)G!T72yPE*zDSAYR1VC2J}l|a}Q) z9F+^4fcYrbl>>6W-#=Tk3h6!_z|H*rEj*mr@69#6SBTAQCe7(=!D#PknS$`a}C(LV~rhWYZ@H&yRG<}g+ALS!+o?NOi56iN6!mBG2%=6t&--h-=HUl^1(;R z;E(uE@NH?{ub*|<2#=5Tqdo1CVa-Ne)h@! zCC_tyrVQ$Dg3KR(Y^UDZUs7mWH)}%;-@vT`TI2s=-E?{20bmf$|KM$Eh$1jIfWT(o zv~E?GXB9Jyn;pSD=hx@O{_d${QC1vjJOMZ6N=%p!#(MxNZ0;LK2-8WEx1ST=oe$|| zD(cWyV))_pS?uc$ORn5irFd@SP3hvR>;7-azneRklOkl-uvWPMz`YgM+t)rM65%B* zA?ZUR)*$nbI7srHX_zJ|FvZ{*(Wr~j zk9& z(Yvo9B-{_ZKH$Y#Ghf*T`KZ($T4YW0-u_M#k*Kzo3Qz{duvlcq0f7&P0riyJ*&*}u zhf$2xNOGW2J@xr(+c$Dz1=pfY5;GY%BT!!o6zb7@4~ zD#FRz^FzcOQc3%7f#Iz~vT@lS#hs`zugI0Q+$%7=3 z!ohcK*+X3RB(Uo#`YRB$IZhz?zeT^z`Xl0yJyM%hfW?8WQ~#*|V*!T8r*u}l2qGWF z60vsX#3e42K%f+zBw%485LgBr^{iE{k=Z2k#UDAT&7E~Z0VB^iqBLM@JkWb3(I+B4 z?Sw?X<{*6>1*$%Lm5C+}x}M8dj_!c`3wxD+3|-#={I{=idJV3!$mWh%TvTuxPyx#! z4XoRr6!mfxfxRiy+W@)VRN$c?lbS3@MnofGUfHfknD`FEvJsQS`r$QI1vq4^jJJ`;Rh;-xoz>QL7W z(5W$Mlxj3{B@rM<@ZP$AYpqh@bg(*JolmK=+m8iwE<07O*#K*4^~SqowJF;mVjhTq4%Km~#pYW}8h6(ZQflMJw1WD;XG;D32J$sAV@R#v9(@R)*@ z323Ly0q4Nj(qs;&hDM*@WEHT8Q*0{SZGFIzSC#IA|cD56fV%*+-Nz zEfB+FQ4pPj!2sl6*gbcAE4W3LQO_xopz(1MN;t&5XE{5>p*|L7mPWQ?vtEBt&+Hg(CNL(|+$xJQ}do zE&eM=Rshz%w~u)Iqm$nt+P>xCFS0N1FooX^8x^~6I!)w)*+~Lo_^q0YqZ68S(=KL) zNWE2FA%Nqh3h%4-5=~sp8BllQ)R~s0Kzt(hyoG1t3~vPLQFY)x*FQgzh0HFgzFBK; zaM$mp&$mF#O4qF+3!&n17y8{ioL_ff;}^eiWn;wPNKGb*vEdHF(TZSS6Vy@%n?M_^ z(ygT%$-@MKUs`Bp^!dgne3~Hpi9)ZuA^(UAO#-UC%k4I#fC~obEUwFW>vi#ju9j#= zowRAd{N?p8HRjs0rw4*JMb&|h8AO4OmUl@mSm%SU*F6lljd_rjDr+v+6mhKUcLz0cG&zG&MIW)X#BqCPU^g)ocT9V z!z#?nJK;;X{VSdGBz5;t27^=RmfU1rv1nMmB{9!)p_BT0Uemx7yDVq^--=4R>34YG zem$(nZyd1r&6=F_#&g|c)3OWhxH1jQp9>^`-(o8Kmg2fgQ&;)Z{aD#-l?^0?10 zO{5X=?Q2s+!4Bn-8RtlA`anLIJ3P5GEp|pkp>Ob6fWZ0#AszD=JA0$lZJV#@Mk0iH zBWu$ItrRW`#aP3DNa%@tesVqmM;(xISt-9ZYtS)}c%+o7`7dBt9-&Hu^@k4d zLXf;gpPIGK|Am&vCe6drqiz`J`o4enIBVv+&LKyID~9nEAvME#jhShVY-Q6lGFMF; zQ0}N%#GL3lAfoMLyuo)(a~96|PO>#v7hP=I9?`9byplvF)s+wNCE#DwZpnUMj$Shv z66IyTqJlBF)CBi&y+-qTEg$ zTf_yGIon;79&Y}rNu!BJJO`-&N-EYuAKqR3498CY80ux2`EqL-w$;e7Uin-wAt6ykW_mz>HQ=`%+W;p<&W*p)3l}hJQs_%+eBBS@XIp~i?)^l3Gd-G_ zVgAb6z|G{Jr zFxhmBo}$3x_jWHcR@xHHjV@*tjL&EP&XY&QZK>H>R~`WK=sr>xj2+7ARgtJ>ra;`Y z@Kv+;ev!_WEx~jbLFEruKAj`J^eG7)N}kO|b)MnIHb;2yCd6m-V9qku^@t+fHrWu} zOauk8JTZoWK1@&bZH9$*WJ`x^#CmTccZo|3u8!@imo^LKUl0ytFIp$Z-R{4G0cMHI zMyg_@6@vh~Omdl<7ty3^Cw&vmI#jd!sk;eXMbmJN8>KFz3TTf-={q#iaF>9eyKwCr zeA-KnjGKFfQ%ko6mZO`6GrN}G8!YmYZNF(OCDUcU8{YA%>WOPg^BU@PO)aA;0D3bq zJCjH(Dz#V8SQ&vciebtEU4$(!LVMa{-WxVBd;Ea?Avhoa;=`=PgGBxVA652Ug%>v2@2NEID9yK5chbVXhZJ^tC`x3~!EVw81w=xm1Z`L|}bPk#R*f59-S*ODud3d`nwsWYMkF9OZ~g&c3LDb)^^4(72%##Q`yR`2Sc4^Y z+?%dIBRCNS75PudV8G%As^|_N1HFPmxn;jpmD+fYsccDA9+^1>2xUo}Sn2PQE0~qH zg4QclVfo*Rjrw3D>hh39#i_y?BUUJs1~09^tzn>$+VaP%#f*#+V~tvHxHzUZKn{TP z#RRxX2Sq_Wf_(2{`d9O!W|GOJB9v?9Fk+@f1)S?boj4l5LyZ=*fWkn?5&B9m*Z2at z+u}n74o`D@ja)?QRv_wxc>L>ZM&@5wI0CZnww5DClDcohs)`*utldD9Pmo76OVqZY zWuQS<&>CyFT2a#^MC;KH8_R|o>3Z}HQEZ5l--nx7p=M*L!_5-waMXi!ib6C7cru}jmP$ff3c9%XCao13yH8R9 zxLJsZMRhb1($#=n`Ry5rpeBG649y9Ah10S?bUm496WP^3Bh9%PjP_#Fg@h#CL2ITlv@{0?jev$RzG#tXlDeItW`cE1C4@`$w2RB(Q+u zb6&-Oo!=#SRD;mshi*%!Z;J*+Nfm+MJDrfG?{9xpTWuB)FyIQ-Lv{cihW0SG3#A%% zsp?!x(;b_xs^Sxes2JR8TeU|b@?B*!S|GM;fHr{u$^qQes)!gT{AI6Omi@^eV7xBa zkcGh6qH@8VLYM*_bQ*06X@uKP^a*F|9&_XkyNKpF1K0aB@eP(37M&W+X)q|GlG*0< za+RuwPOFj#jTfZ(jdg$)paivrg7cTU=-`Fmm}a9Ebn08eHT|2GTYPiJcBl3vfb2+^ z&LO|b_g83|5!3U_2?eA#jKNwXYi9pbt*PvRhnEi=e(UsAPsvWnY+o7~h^K(hjJl`) zzRtlt48VS8T3(L+I8|C@dtZBteeomT_C@&Lba$L2#}j zAFHvjC?DA8EoiDZhL~!K$@(0ii1ZGK>))_{h z_v0{{0p(ErGzGARA7Pc;<@oyd%teb+O9CHwS0(Ypf%P!Eg?Gk5AUkoa9RmFn7|HKd z^NJTVm)iiky`Q<ssefv5L+;z zO{x{HMh=9>*A=}D2p4^uBtMcKofh3zIV%@s`3S8Izw+n&3@ZBrqp&Rz2{dH7d@<85 zS&y6dMR$dTvMQBY#Nq4rOKo@{C zn21l>$}RC#%--{3S|T9qmUTvk8*8hyIvji`l+2F$N;}O?$5Pu-kmomO>t*)KkbgP% z5ZoiUoBEW=XP$G?9vuQAn&x0SkQspQq|8{HHV`_ zoJiI78XoyJqvo|))he^jzwx5%M9uauokl4%H*@)hjf4oBUTE@;CosRkVKuHT{u?cO zt$@qGKv^07Pte(Go6^oNNtFUBgX}ncYV{p%OA$=c27yiDq{o$^&^qlNW?^$LO|Al3f*EjQjPH?tFEzOWrT#L2->$(?5@;cnwl!{AFNa?ZDIVS%k=@U9-adu{aY$CRCv!7p$A z(13W8n`)1<>>|P<;*iN`^V{~Xq^>#bFw`=#8x?Z&Arn3g&|nw`4kLP$j1hbvCCgxn zEd{g;K^h>V3u01Mmk5lrr0j@IWq?6&T|wn`iKvK$HO3gj>z}UtQWV}u`&PdsE~l^p z987HiipN5h(~;4XLHwT%JG2r`9=Kmap%$uqJ;p|0QPO3yc#iy?bo$B~y1N1_6=p$L zVDQoTU`GG$vI*pl(T%tTw?x`ifiaX{O2jAWy37E7p>@$Cs#nx12ASf4Lf(Y?Os(fbL@eV=^!io{2I9`N^}gqRt;aIFaOXJ`VL7Z_0jhJQdb{*4~3M zHbnpuc=z!3LG+ep8LpopIh90Z1>#D&>{TkA3I(XXV`O;(0Yzu<$t9Y*$->h{8M7*0 z0>U+I#D+YwKJ2FZA34-=3+Vc3h@WxL;GVv0M%v8hbt1#*MMxw8T7N5+4SvUWQG9%{ zFWi}MUAz!Dn>Z3QC{j9T8bPhwLNegNze58)(%+yTa#BGIlOhB$!1gmYes576Qo;{y z(!w(>+eu>~9Uoo?Sgq_mVICuR+>{E+>T|xP*A1pxNcoeqptog}(p;Ct815g~_?bb6 zW}vCD772pIINE?6(CCVXE4c0Lgk{YvBR{=XvrN4FAamFxOj+bxRn1D#HUiVPz;}Ql z3_wN;0NsRs2N+LvZV&G2v;WLSd~s=u?#EogJ%{9moHYIoIO(7{Wb(!|k34WdQ{{)> z8U_7_an47px8_N7v21@@aZ`}4LG+m2S)@}`!U2sIWRYxV*)P|N)T>-XMD-d0(X*bB zc=qYy=GNv<_VxNNNqShYRvebH0~Mf1qlsiYvA3M+Bu$j!I40smU8#x0Z&rVt3FX3= zLn~$r%)9Y>(Mo=Wqs`~dZ30EbHl5(;bgi%_M6hCcSsLmOEwuiCmgo+#2>=z+22>oV z-I~0&fwoWm_L+TAme@7Z&>1}DGi_$Os)}lIHcT=LvCohd}?jN>#28MdnXY;nC`1rUX;R; z#KFjYa!P3#(D~w^u)rbVp^Cdd8v>RFr(4*p@$Gw$s6c_nG3sxu8HDAIvE}dd&z#hp zCEAfJ;tdgs?8oW?*m;N@`Isu4t>1gx8AtHXbSH#VmsR9G39NPEaUFoD8JNZVvQJae zX=8wSKRJr#<)!>n&F0?BO1+zB-nKx5#?+m~9BEtYlv5R5snlV~;2!Vs@&#Z!j>v4~ zR~PWy1+dW*1$GJACsUT{8zKX%@t_VseI&72nsONmM)lS#wid+(og) zUH%3r^0;_^A-*t&Ql<8dgQ2zfy8<@@CmM)Rr5d;cBLE^=yARC_B)~z?xaeeA*nk5Y z;gROZXe38G*6ee2xr=E7h**B9Q9e2PICbCnoUB5Fumc5bt(z%WUvps85;^~c4Yc;h zhq1K+!Bm!D>|q5m&)B(l4bsx!UZyQ-atUm#0=?sBbmwid8YNnNC~_=U-ZRo(cW){{ zEy0)E*a29(@_zjwG_XrekYIsv9XWfDt{NRP&h}Zi$@#vI65}H9?Y-s}+TVbucE68P z2hnLLVl*QV#&Qs0IubTY<0k4}hJ7K8Vo0L?;*cc2NMq+vCArwOX388^nM9$LlHOfB ztYM~M&Y{O8ilbBTCIZ$;Suh3%*`H2|mns-y1DGXPnx;d-x^43HCp2dBNb`vCmqdm{ zPYUg=$zDVnj56R0#c<vDN9Sw8yg!7;|#Q>{#h%`(t&sSE^=<7GQYUE z0L*K6?Wuz!ZHhV9Q7POLPZj8_i?X!K=cf1#&k5^=4Cxp|j@7a&qL>;Y!x!xsWDSi) z!!U~K9Q&V)3Vrs&c%VHusASC5{N<> zpL_H|{(SuFtzeeL#I99!sv* zB&kq(R(cP~_{_ZrM4dO(!43Rf$Jod7^jo|&{yxhqE8ioeSzKwTd^n8XXNY{Wmq!B6-1*O)5Vby{`` zFBMpr9VEN5?Bw@ns^(7lvN?iwD9)0~2v+D#43BB4BC_Egsm(Dmk^OPaDtkNe;<^qm%DH-z+dy1C<`XREW0hG5m~`d;r+iR+lgn=qI==be zFPrcJwgU$K|8gAlZ~Ju)wD0U5Vk=cJ3&!S$XuK{d7io1b>kg2P3(HIm95@kJ=)(!u zuN(6b1d`oat9ha(znGnm&YKx%6$}`aZFV~H=<8%t3bI<-s#2L_n0giitM++eoLMAa z7G=Jc;UGutCAh`+RW<|b+2Pu!XZmM;@*VDdm7|Hnb->;rzio6~n%ITD_(ZX$KDT&O!c@9AA&bGNZJs3%oNz^iPFI zXjDk>Er!nMiKLtYdPwK~nF+!6y4@!EJ!2AtEPt-c735f*_W5&poT*^mGB8e^snnP0 z0C+xn@7oE^uVZQ=P~?_qm|UN}0@r1?47a&P?0&%YSTSLkRca(z=n4-M7-dtXAcZ!0 z;jiuayISv&q~XP3<>gX|OUcP7wimiYV}tG4{lYkpK`NIf+kIq=Qr;Y063W6fA;SKYT!^B;b0L`isKLG{T$TzoanT4fx`iWCbfqBqI{x_!- z6KfRvwDh;V#c0gQ?e4{qLIHZ{3ab#7-?w%D z%Y^54Pl!If;3R4wU-_UTb055Q1Aq$Fj6aYi5IG~O5;u%}KDyQ=Pe--S;!l_*s>{mq zS2wtDyP7h(Bwp32FkcZmUdRs6K$SGj-3zOsu<|;y;zg6cq#i`8 zzP&}pZTpEHv^VVA#gXe8fkB8*%tb*m?&x*Lr&T|l5%st(LBCNr1EAEjIX1U( zayFWn3pAw7nG2IKp(9#bG9VMMuYmGG7z9&YarUzHPUX-^e1ux|`T2Mz% zaGpxHDnf)(@bG|GX1ek+sFAJRI$4aeZ&0l1C%SUlw{6D{v}4tvX5qA`A?dPrdV+Zdt|78G zJ-GO#YbR)XH``c}?H+F+IS?|O1EL;Y*(p2#4y2}JKAHzx4sEJ7>{GF>mPf^frsu8j zT|e^1x4WW_6wrE`ew%8fLe)$P*yE149$S&g(SaN3cEZ&G2I_zpSc%_j1FAvr9a3G# z(ly~WE8GRBL8X8K9+v?VJl|)r+2UCiGp<ZlwM72$j$>iK zjlHCV!Ho16Km6!f)0#AnIbHD;m|!Ttwh}@%*uK~Jo5y$|rt!yfx+sn|)>Ou`h$54X zjYXS}pbI~qT-|t2Z7s)D_GHU6W7vf}G+3E<9Pn3mn7pG<(Dr=rZ>7$_i z8vtdAvQ5A5SIV80BZeav^>HXtW9Ra|u7o-MOh^o)*}j17@chCrl3#z8Yzf~#^LSS%6`F%S$cqet zH))4gro`Vg%tUn*Thf7qoN-()Ez-A_n49Z)>|~D)?E1|!mVGd4*D|KEeQaT40Dvys z+8x?rC}luqVjlDd?mAe>1`n&^?cq;~(iD#U^zUtV7CNa6H9RyHO*L!OMi_^W}MpUDIczej@avF_IV*pS0uiQ8B#^d4k9f zgTy=Pl7Ho*#Zb&yjZ@W;I$IkXQ{)pL3qe(IzHU@h*T(5+rP&`Pr+Uz+IGhd}A3Hb6 zp>!SJAa6uu=>JuY_K^Rn9Gw4EjwuaW<&7WK=tr^?AW1%EAX<;l4KXgGC6oULNV2uR zF?)Fx=5Cjr1~P{JWkWuKWP~x~*z4+v2XtMcV#|D|s44%4UpUe|m@1m%t@Vn4wvoP} zPAm(g!B13@Sz;;yaZ(>`V7(9b zlI=_PhG@>h$Axcqr;oGf;?Lr5kj=CTnNcRGDb6~MR1|Y6iBL77furzR!{vtPlHK1R zyI|n0Ixs7^vxuH-RExY1VB)(N^-+w#%a%N-4xoTWFM5QZ4azWjvNaG^zAG3mrB}E+ zTlfCo(Iyn!yaujTC=w*7H~5F3WGX*OFOHXhFVZA+wi&l0 zf(Z}{D;e!ivnyS&tl+I$;c|(Y;b6^y6GN4oU$Sc%s4R9+fd?qkhh?pA{=dS$0~+i0 z|DR+;*|V}o+4mkOTO=x5MoP%YR#beH%xs~|BBQdhLS{C}CYhNfk*!Go%kw-v&$rM0 zJLlgyojUJpzF+V4x~|WCf9~m{w{G1^+8Q{T$_oXYQ2*71Kgm&U9_Qe8^Tv&Mmc&kZ zj}Y*}+m|YijGAS1-AT6}QjUejIC6?G-0LkjN@0v*g`Qa!a_fZzXMo(~823>;`x-JC@GTnn2-!t8oc_ z5UWRCZp`EPWUaM{vW_jl&x_M_Uc#$(p9YHUWvuVhCx)$ZG254=8KRB2=OT1=gNM~5 z=dTuaKU@8{p6=_yJQBj4Zan!z<$YVvM?sPDM5o~XhSyaLZy1Y&nA{etj@(-;(fd3* z?D5>%D<%4?WBl7*2-E7SV7f1R_%)YE-#&&I$N5Y`x^kQ+=eFW)<;Vg5u5(!R&WOI$ zfvlG;Q_KC%sIrk=$B?|`bMd)X+=fDHs#nhy&6i?Z&03Pmj~qjW_n2-azmsw!u*8^8 zPMw$?=k2~2Kdwrdmo09~!X@OBOs#4M58ky-Y=%e(q@Nc zpU$CE#uu{$SzWN%y-c(kj2S3FL+y}e-sSlUhD$RBiDd1TEp%o|)zROvb>H9J?Wdxu zqA+;>`S4s^AgYdkqrr4R&8Uy34x+US`0OIYnQ6=%>=FOg8NB5{$Lqu7nYj5dz6Lg5 z3~j0vPjkiqSvxel{4RgZ!fe;zZVsEGRK~J$WM>?;&&O&Zt78J+V}nGk`))p2i;wC= z+)w&tskpRL)Ya24(O`el;iyAFE$Z3PrZ%xe>sH?j`JW#jcsKr#%3pWz_|2*oYI!45 z-^CAKYn@u}`(UMM-$%%cV&nGJrF97WDzb=+&3=C2$dsd*4Wv1aiu2AL$+Um$WL(G{ z=N%C$_cg!p826m38&RMmrf#^~*2Sj9{NY)5RZSdca%DMzz-anz_r^zE9?eYKO}*92Ww! zSZrRa&rM2*nO$^$DIni**U0>`j`rxgW5-M%j^sp~mVCQk*53KX^G*8-lkTXG*mN#P<8tRa_6jG6yk4oMA z$eT@(=W63uYiih{Yd1b-I^Fo$by^8zKW__tWA~h3UCCDe zLf}OZGkR9lVEUtOOXbq*3R%uz)cD1NSMu^1_UFlah3)2N;i-nWKh`C3dAiCoMg<9M z^0vHF==yCOJcvF(VXEN{ld z11zyxms0Fn4+#bzc`H2!2lcW3DRwMD#m0Os2M99Z@a%rfvA}6hI5<0brJ}iFc zGZVunt3!~z$zs9NUz{H`=A8s2PRuh(mx_)}`(EPV6!{)PHnCc=9y8k(#CP(>_*;2r zl%bjiYowF(w*s-kLoNmN=>nm&a-)7H9bWqBR8#!gYTq)^@pFjTrsTK$9Dn6{aA3k) z`nqw{UhFRRN?ocv@_mYO?)qo-8mqCfUBpmloh(joYL}wFL-BB zWk-~&_au1`uXCav`D0?))Ue&p6mjzhzf!*}B|3SYXMTL>+F_A9zn&kdb{xH6*0t^u zecI%eN$-)+{jn6Ze#cd%MK9=O-wNH$`xeq5((qzNVG&yTh6y#;#VHo{GeScRqD;eE zigykVOSCAZVYP!dJXF|Lb?zk06b>lfdFtW!t?+st`lP^3A)n9NLQ3*^3iZZrgw_=^ zCiy%KAHj-qj;qBY!w&g{UE@yw`yCb>jceYFP^RQhqn}Z>_MA~JRc;S&> zTk2W`X{iG4)_P#z(_dB^5|iz~l^c`k zQ(>C6k|VO*6~_2j)u+c_Qd<<4)^fskgO%d*T8P-hJ4kYp><&NGBu2gTl5*o6cV?$a z@98kg2drc?j?d`jSW$Wdk<5upE$%V?%g>Efu2rslMFqEGjs1~t%0~>`U#kpz@G~4~ zl18}_>t95=pP044XX?FTlDll{$*M>ze~Qca>zuaN@o&YM44nsNr?hVx3=2@6N*8py zq_+BeeXA3i%}v({%g~P#8q#Gc<=qL!2OIOKKZiEOx|7lWtO+2w4L>3aL# z3X$f}8+6Ui!MNeiuA`M^Z?*h*5V@^8iyw*|zpaEM6g!|EC4S2}|2RcUZJt}v`tTxu zsY(5#w-(AZsJYBd#KJxl_QZ=i8Onn9;!2T=p0m@Ac`=>$Wo<6Krdr=gNGm>LKTmdh zYM?+a?uQC=N4$6DT^Q6&P&BY15*v=a)ep%!-xq(tM-0vrd$ui zf7&@7l~t+7Jo+*#`Q+z?ntrEHK^9!syt|p0y7Wh;qLXO5ZVD$48Ev`VQu=!2OUceV zVf=^Er#v23ux<753$gipdy`+}J*=n0|E?y@vE^__M6E{U`V-tPQrv06@GBY9Jb|TjwZyZ$39LgtMOr=@fA8g z&-`j=gP-5Oz5Mo^EHyQzbe6r;Jjq-3#OvFOy6wtOmi7<0TQiL-rc7NRcZpQCIR4Uy zXXN5I!zp@UzgNm3)Pu@L7^=6;cP>^z)toPeqHdpYYF?Qc?PAiDlkv>A4!BMzi&@%y zH5jw}4Nx;gt^E;;;g$mwh!Q9sQe2RSg@B3FsW~ocJF2prYD?EgnvPxdrMxNWXS1 z@sS3nwLuK!)ga28K2GHtg<$a_TdS4;9#i6t{JFN9bZ#$X2Y_| zgkuE|R{~wPCB^seIuKUwTJVjh@2C3sN|^BBIV0}7n?adgRNKKLk)6}iVj*;Ocat=8g1^4naULNncg(Ky z!P#($r$twVO$J_lcaIpW&Yfv(Ga)ekEZx2P*zIYZyENnv?$Gn=AD7oeo2#|Y91ugi zDZO>h|Ng$n7r7T_&%2uDoH`%$Rhsd2t2WDmZi~ed-G1r!u0Lls!X0>n_>K#iLo2RN zTFFduqx=r6C|$hd*siq{aBts`@14F3iue2%trK*ID?J&NQ=ZZxI6mn}24k`sBQD2i zZ13xNN7<=(M|WHDQ=(HF x2LtD<4YoAVWGLR6DEv$@G)8p#$GoK(cwkLlzHRyD! zSV8Sou^i3S_vznQl2{M3D0B%fT0Cll%As}JeQ&vIH15mC6y7RKQ$~IqdGc29)YVxW z<#sUU3!A1%3Ha_O{rjU8L1pHN_1F2{jHcgHunOq;aW7<=zh=2Ypu9_bdBO_%Kf9SbX{2I&pqB>)_*@VX#CCjUDmCjtUD2$??XcRn;AI-Yg8NZ z?gx6RKPDTLEwRqF&vyHuo1a{$z^ZZry1cTFens1<$16O`rY1R9rIDSRn9m|CUZp0b90+GDK03vIqHm%lDACRj#`NEK>cL=C*=k=Nq?w~ zw}0dGbw=<&SnK1#0~Pl@I=2KNw%k5Db>y~GCz&GH@H;*sp+r5Vdcfop5!%mX^NeU66G z`SaG?71|7^(#P?B-C7B+N93OgqP<=#+3i&%p>0q8XyAyjhaUX}Dbpkb{U@5KYj>A< zre1|<<$AKZe%YOH4w`+^bv3>yj3C{R$oF)iWFj!cw7&J`?C9w9t(jt-nvW91I>?g# z>94o7#)GdC)m2wqR$WoMjyLgMHD8JiOp~Q!@7uDoMPwdgvxW+5jGKKSU&@%*uRrTn zMcAy)ozqY$t1{c4Qgi!+!8=3z^JJm9(A5Msmz0j4@0nMbC>Kp9s~c%|*%Vqd;)8k)HYlR(% z{)kGy!(&={`ncEn(|+nv475GP7RaZU%|zFpW%RDU#ARN+d{W5or{Y5UbwsrOT6_Rs zfQ&^Dp{ATAimgejIfnPcvA_cdACDaI_wG+xFmSW&)b3}d{wQkY&Bn%{QQhGPt!&Y5 zrs|t@>9c=MHVeQJW2asEIojS1Q5RB`vg8>@;@NCswu1(wF+7 z$)V^+wpViLN>QL`m~5IoYRK#ov``mdY%hokpv5-1%X}OPvd41QcG+33**VPYOL&E*Op#i6cxfp(TN>&EUvh6 zoT@BV`e>$meSHJDQLoBK;Z2j9V+En@sH~IsxWv|N_+v&q>djP-y^Xzn)X~VkvF*C>i*lDFr&lHoZe=HOF8x?BmAUfpi4Fyd|1-^r8od(2 z{Eybc=_}0!w&y?H_j8?BZyl5B@$8=4kifrQtumB4FuOZ@WAo}#jBB^<%kZPilD%Qq z%8lK^hAnMZsy3soFX$Dl7tXHhL*6Zi-yUnqc_}zr&to;o{M>dW+v}h$cmQa{fP0`f zn02jfsC8t^Wu?N_p`r_i)@sb>>MBfjyLv>AFsN#-B%hH^xAOgf=NlA%=J-L~Izx1A zS=x>0@rT1D6Uw@>CzCP_AnkeF#~%)I*I7T5Qed~8+?hWJDLj;cCWKg-k3+)HjK)>V z<#O*$zI&&m-|^IJ9d%c~ucSr09xw1{O33+nk!R=Ti&$LRtDn;EosN`s2qn)V+S@lW z3dM9PFl6e!&d`wAjfgki7drY)twL^*hQ5CjoQza* z;e8Z8BZJ~Qo{;lHHnIl34i36Wxv64NQcYx@)#;S% zkTz42sl+=T2_E&1e0J&hv*tc<)NHPC^}d7dwH|tP(_nksPyIIZXrw*N5 z8qLgwepwzgPd?nZ*nJn9{ougJcR$7@YIB`TZ_CkuoN!8yk=K&y4@>21G!m>dtnbED zB}z3YJ7~6M4O2fA3OnDj;d#)`ty|egBAZEJpKO4 zv-qQSV)<8b(^opednE7Q?rqtWc;Iko?!|VCVsh;z;m+KrpT5UEja@Gex)(XiD@bn{qQdYsI33qL{>6+i zr!lPP=bm>f5bEaZicE+R!OJCS#Q2D*9aCV2rc7k?_o&W z#7!PcCWA{{9^`B+nwpL0x03yCcXnOxF{*dd_Ld3vbn$^G|lwu{9#YaCA*&SL|Y$}^FBfsXkH-jPMb6A`Q5`- zb?3MyEEp7i4I7gGjDDI&8~UN?hNr5fo5Jl9znZi{7sS4*3l;pbFW(=)e)z_Nn}>K3@dM8% zP#q?=s`<>hDF-VLU!b}vt15&R)U7$&e;rG_oJ?_>2Q8c5@Wa8RT7`l9Vzt`MzF;D? zMNwRD9k&b_acuFuK_*+Geu+7R>$%2b#7QZCE_=9z+vyH(e7l$mZ76qmRE6gOh!{Em9jcT{sJ0(W1`wKSmR=*UZ^ddY1v)A zc;t5Qwe{U-w0H7`lnS)sm*>Zn6003Hnu#<;(q0ks50FBruHZzq_33efL)H z^7oHh=ZtnOZ)1togmD%@?k`jVG6H2^5eovN1F^YNarHD*0um)kS+_N)HFx!7=uxfGMN2RLoEcv-en;*r1;1?z3c}lC5nKDltjM7wWK3mKpa(bo^mO^fLu_oBBhv z?c8ZZdPOQ{9hsL!-*zyc86-yMJB*7f*LI}GB)5Zdqc4UDuq-e@Gz!Jp?+aNq-&Ik5 zVF*&Rm~%EX3Tp54lztREz!El6WcWcS?~a6maZy{BB(puoCUe7iPUM?0ou4uSr2MK^v6mA$!Yy{Or(AF%7>=-FB~etDam_omiyw z`dk`slRZmMU8$de8zjO}*odl$FYQIVLw7S6&1QW>F~pS37E~6Gj^<4VdbyOoG(**n z>LWhTd{KMSIT`A~n<8P;U~!~0&Ri;aoTEegdTK|=`#G=rV_pJ5K3uH_f86^O+#fP@ ze7UM;G)p)0(A$nG0moUksA>MUv0ta}yF0}_y>_oSbxc1}_$(SyfAgTDbWTK6@FDh7 ztFCsl6UQKRdh6Ee(AL6jcN}}DLfr@TQla)Yi9sdrCmkOo*F;DUzVC}gvk^u@#56E~9;PISMRG|z7T^sEcKP(W)^V0P@Zb=Am==A73Dg}IK?6iJU}<>*@#?<@G|QT0Jz zTk(RFk1cxRTGN$#fI>w$RIZ=Vu`LL%8ag7rGt9~*WgB*rg zxlYOZj6R-U7S@-*op~Ha{iEnj&*j){V`Dw8&sjP94Vd5Y{%S&-HNK(DP+k8a#4v=g z^oc4=K-jS;i3qp!Lt#tO_Y$7xu&QCb<{t9RAM9|y=G=PoPT3UuQM>BQGW4}P->|?* zDcYhP*Pn-{PzIXPW+SXcL%rRF9#>w^MzBh@EAAHopZF=TFv&k6>G$Ra*XpI>IMLU1 zL-Sf;@+M)1Vj4PICs>KzN>Mh4GQ z>EJ+YL(zP^r{wYlo`5-Zx#Wi}1E=l8-UkA4F_+Xtp%Q(~vr`Dh z>N!Ir^&DmuQ`z8E!om}}8By|Kg932{P4y9+fL6%V-L1_p4cCVYMCYv-a*u7uRe!gZ zQ?sCDBw&3)!^Sied>PVf57l|@bDmHdUsnh+`*itb?A=>#eZ0n{ngw2#OjkA}sUMw+ zUxx%!==+{Y#xD;k(B6nMc>!%T?Br@o97E-2$jN+RpdOgoQX>0?CnwOmr=P2}SGssS zRx6Z$jpD5MK_6qzM^knE%M(U7tGN%Jnj16>TxnMfr+W#0A)Pir>C;yDhQ}DwK|zkR zs~M9x$AeF4`s|nPZS6Ch-ZsB>$Gxw&|zfzGsBjWHf3~3}Z(+h~G^2E2q*BsRgI9?(l^lm8j;gyF+&Gam3v& ziZd!ht{A;4-((BHF!gL|&i&*8d3+ffmm!{GImHf>jA-epH4$y|Nzt!apU>CvGTLsD zGp(tx9-(_I6dgeK%#*G2nH6NoLAO12XH6G#t3*$G`f$7I&{5n;mrqIp1*Mfb1b>|y zyDmk~!am##t(HQo>CRN2Q#$V|EU{`@%e>X$XFgTSe&#?zdTFZiq0r8!Yi3g0{im?T z>>3>k-bPtMGgP|5S4@9BE!CEjj(KQf^-_7o%pyhpsrBh&%P7M~S4_91po?On+NTF5 zRm{FDe!6vdB?a})wJlp_#Qz9Sk?4%jmyJy@povS+wRjw^RvP;x^ zfcq${d%Kd3zJNHaZJLy6oa~jP>GxEEAX!%Wu79J*RX&5#3YleVWB+rwDs@6Abf8J> zkbcZ*-G+9lth3{|MY^5di{#MB=yRzRp%=Wn^7811LsvxFqpKFod!L&Y-jm5q+o12u zbGD%VsP?t3Q3hdHbh!?tLttBqsU-}lbw>3>MMBjQun_R7I3GqLY3 zLvJV&Vh#+K5DwIngM5{J>x1NZU{tM7+oWN&+VyiGqQRMq!aST>SL|lz1*8f`BJ& zM&JqYO<*tu27!-Xrle%qdv6pw?VbRM{#yXPs%HI{07r;dqyjy_K1+ds6NAT~;5)_O zQNT)cd#wcU4X8aY_}3lKC=3n_47JyaBcMr8#bB|B_)O4Bfyd+GyQ#racx?Oz9i=RU z`*S7)0*}GLWk>=R@qfthq%u4Th9Uw;JqIa8 zAUsTE&;|nK&&{I|SPT|!2_ylHh4(|EPz2a~XapWbVnrkdjs9C9=s&CxI5ZCC@OvAD zBZLNznNYAr5J)@$?$-z+21$g^N5o)(b^pi45coe4gZXDS|854LhKD;mkP#8E-~o6e zaDPk)=0kz$;0vSB7z`|cfO0qj1Q(((C?q_zK}RIqC%__T_##9M8V{cj$dDwP#)A~| zHww^yenJ4@_P@~VX+i+{k;rhr2mdz~kH^Cu6otX!Vg3Q;Llgg04nm+2L=?#m(P$i+ zbTb4r2?|8uauleegpyn$dEV^7KbPC1uPEaGuVV!9F|BT1Cc`_!x0EDlK{8G?M1|2`2QQn z1b{Rw&x5RtC0&?^huaf@C1SB~s6ht6{2A{E&<}_IFL6PC(XPGJPXY}NhkzFo&<~V2 z7z#KL@T7}?#6Z%IK%xlXN;r}Pg2SPR@#L(OED(kS3=Dz~g}-yvf5j1j2h|6z5FYp}>0m60W$?gh;l7O{;xX_If)D@W{z#I0&Vfhl zh3TJBibnv4g3GX2l8D3u5gb807DJK{0S!cu&WA@saE%EFB#Cwe1b8(8d^1E4YH%5F zP`G~*5Ev4d03`7D*#C+n0YyZ?;Ua*<3D=H*z>!p75LECDqLCo8z@wCa2bAiMO#}Q1 zATItC0vQ?!pAeL81WCRDp#mpQ2qFSa>X-mQxN<}U$Sv^V2cu^}Q5q#MKoiuQ*l zfMg*E@Q4J&1n5W7kBI)Q@bBUXXgFYz@Q$FukqpKVNKpWZokTk%DBmRWA>hOdLL;## zI9zCumHrG95FCKX!H$Kx zD3Wv!1_M?^Iv52DC*U*4-*NoAz9A7m&C@IWLfTn_@ z+rJC{eHVg&hy*y<0Ugm8xb1+u!3zwSkK|AV#$w@N4EkY7*FgP!w%zmp-?l>|!1)=j z9TNBl%y<2uL`s z1Tqwf>5y0mU`R3{3Lfu!gW;qE$Z$xQJpqE?R7)}+fh0YLBp&1i zxS0r`Ji$^h5*(=@61WIhlKTj7iG#z!6A}@HCovrnMTBz$6wnV|BY+J3&&|$%{0{|^ z3cRub87K&Uq5$p=h;ZjZ0l46s0hdC6(!j=|@i658{=fsVaE1zG1bFfRr%fCl=3FQ& z0riJHfjPmID-KRxPOlqkzPda04_5 z6Yw5afa8BT1&t));Sm9}!2Zj){)G?){2CTwphBa;?*)J>*S#$D=e#H!Fa(JV1Lqgu zh)$BLfQ$gIWk5!9oB-F`zb^v*i&7v&!>cHefsll61_TRIP4>x~9f+aZ|lEdM=WpA-rc#Cf@yf3sG{(1|& zu%3#eXknv3`6gLpyNlm1RA7>T5k_5_(thLvA}{tlW!%*Bw>!P~rnz_z{~kMQC5Np> zr@dTXJbzApBzuKdtjhSoPL-}8UH z%TMd?V0}DVZ;di>00+{-?*wCfLZY-EJA~JtkGOYH=S9w&|NGKUmT(e4+p?*z7z(Ea zN^AH(b0+Mkyr@6)ZGWh?%GZW)R(@<$1hAEkl@5GHy?$|x$QQ5IJ)5-gR0w!B@RUuo zya{u9V0h0|4Oo$TA72psIm94QQ38MGk2WUuM`lc?LvvU}=5L;k9?*G)2;04X!f8{k z=n$SO0Raq*(n-RneRu*(#z)EQmyR;<@KLg`exzbQ7zTpTuw$EH4fE5fSL;`wAPbYzqb?P7&`ks(% z1q#Hg^+cwKRSDQ7Kf+x+;HiegM2dbvDc=?~5U=CqsX5%0^@azH0AHqU!M!=llmyCx z>5PIHcxk^RI}yBveUfDYlW#m+F>LHC({LGw<&YjXe@thHXV&7e!zP^5iB=$hQ3w{r zJZhF6@?(6E%zo*hSOpr1H7e0!ZnGvYP%!;?S+x5iE7PjFmsjiGuRL;lQ)JDKEEf!R z%>gA@-Y~86IWXYwtKu`AkSveeVmw*OPAND0rmT;wKpONe3=JAwWkON%5~&H}<+0q6 z4NM$`e<5!HO{IgfqbZ&N(F!X^<1H`{ncz)tze{=JrbT8(2Jv>h zQ~SKEM4AWaV+UskPissYm0o+vw;2MZ4>wS0O4yvM~J|u-h*v6 z%ljQrN|YOUDcYdzinG18@)DzMpyTe6EVpUSpqqjO4SJ_Tc^qgLAepp?`3J+Q$o+<ao8 zE2l8^Kb;;Pzowlb+D(F!$rQqS<@Ez^Aq79W(Ryu4EgVKO{Prwv`rT`<7$1U4hvP%C{Ip2~_@Xw-By9JLfLs_s^#M z@9!(p1Mz7)&_5VU6roLjf%=|E?8(X4^ljQJ7rmr8%#UtMov!T{!MQtRh!U?GDlAT+ zT*of|WK)))|gHXy+c{bl0EScICrHja{RS=a;xh7E;88hNJ$~5JM_&(}y ztZiUb0&?)k`IsMn*B{<}^Yg3q+jl>5#Z00!Z~5xokL%aJ0>7V9w$hMzN zs0s($jU+m{Qdu$bdUM$qy5bOG?}D5d9EuuIGmxo)4iK_`YifnjgdJ*@II}5TOvej& zkKzyT;&moaqA1kP@k7r!+G(oH+K=;9apaA<))7#*B}Lvix@|h?Ng#dCqkXgQs&qEF zE0k{Q!^VzT@2pcBme{3pY_)O3v)UGgK(w*gkVLF$Ostz?U~2)h?*Ifr3FN$9f!X zYKV6Ho;Z?i>qPsE$^g2i|BS+~a65PiGfD)3pp+Yb)Hp_MTXJWB=0bi#qe)2cozx=& z2&c$$Su>jvv#R8642X-3r)o#eWJvMsv_Lc}TZB|$lRQw2sjG%rU;swYB=Zd3@2fJC z2!Iq8Ygr#51N`K&(3VRv6|SoONc0b0KaEM5l%o`PaVGHM8~=E9CwWN_ilB9MmrJsuWB30qPCiTWUD zdR?3>>#XYXVkXzaDsrfM)m3?MGov_=(ItL=AFN)@>=UU-_e!V^``r_ESp`YpBI~p5 zz=3;%#Zkx2pO5X=hdv#P<9_|IRH!LgwuJ}r_%{%R=J{3Y-Sl`cyqI==kJ~WUBjxgMR z<@sq|3jo*?`p(iJ?w|oUpK?smNI4k{2HhH`T<9(*k1sky0J6P{x5Tth6`Z#v~JmAT38VS4p2clkRVqxs(*<0zYY_K~Y2TB4Cp zJlHik8+RO>2bx4UPMrHTgbk$<5!}xB|IfGaF|_)^mEnQ~LH!=pN35Q5N2k?c$m zPGwQycYqL3X34|}ex>$~N0QSuJevD*0!M~mujvbo)U^>5C-eo1>m^}mMBKUTMtgNP zqPcJu*X0rIk&iCOVfyM51_t8&yoAuT!{UAbOJ$Y^8AZ36q)&QSs-vmq29D2vWg5RO zZ3^~C2yo>$S%c*h<};3}CUaBVRW26A7U2d-w|l+5&@1 z?vmf4^*r8|{Nt5A?xF7JSr{xSC5nx=NIo;*&vVdsTV8#$O3d ze_Ryu4;r%F#m7(HB8Ms1R|TMGPbWg$Eli>;{fMPnTwlEJzmg8$JmOf{B*DU&`*FdL zNP{c35cmTYMEV|>jX*_KKA68DxvoZK4a>joK;u`r!jhy<;~4)Ni48K6jDr}{`QL7g zKFweaHO9C=55HZ~=M4G}ik?Xavu+%bFakI*lL1XEf7~|mdw#{%Ku|4UE2OAr?r?{+ zaognDBo`ak9+G^JCD|)fD{WV+IPR~%c~PQvm9zy8Ff4I6B!}~!(W=$mO0B+s^v(67 zC*LK}D)zI)q^s-Ol}?Nwsc@BQ;~Nd2a`n!;dUmzGFp>7&tRv+;TL;Sf_Fwp)UcbMT z*$aMLfB$gFFF&shqQs&1UztI`Ykt4_;n~~E^@r=1KtSvg5Cp!-G9ZtRekmv}jj10e zp+&g-Wv!KWefjG7<#XQoKbLQ>Uc7#F&Z9sD#@8DDmJU;?9|d-+7Yk=;mH0uNSd;)! z9w}iT;bwjo2QlJaghu;O9IYtZT$tg}%yCgh#+wmXN?r9IhPjFHAtuZMS(__B?v$`~HVDFf#FS ze_~k0@U}bfOTVj%`n}R&fn#K2hFrwgTrhyejVvpgyqBGCh6AG&c`Fb>8v3f_xBL3A zA!3nhVGsh>B0ma+;J*5ZGOPCZKW{*Ev7Au#K5h^IqZrsVO;sG~uH|ue%g=r&HWtI) z8b`G}iyYRK{GRh;mlwaTb>!uDmB3p;e|SK>>INJruWoO<{g!A~bE=mFto<-HB;fSR z0@f_x^jN?d3s^4;SWf~53FbE)vEGa%?|B0F&R}E@K8tD(h?$qyEd!j(_q@i=95xjL z%B~o;RVxSFtRwG%Cw5I%25dXgF1~l>TCs+k>txQw_u7O&FA{{3e^@X^ z1=ct^B}cqq-udl86zBA`B=Uo7v|>EQ-iUSg^dxZ5&PhJ&tIiY<9SG4PfR{tRCKCZF zVy~%xMfO)bLI$2v6UDxc{~9$BXw~SZ$_ntC#ey&Eo=KS2yPe+%QeP(^Rj1mxBBH8YEKCXHDuVUAS|0Bydl7{pVt zok~PeW42NRkd-0|IU8KELuR1YAgE9`QE=GE9he?iwqVOZCLkbp(GEzp_|eppq!qgx zc+PzXP7o2ImD7nh+ID4q`(S4T|E5Bm$op86(Ykw&IL;yd8pdbhK*14Ye~E;hP`nJD z9Em%G=gYhuauOKFX?2dTA@03j2N|g<%-mNt63}8K+B#x_MCXZ8{5p3S2x0mORyX-g zL%YB=TAt=>z{|JYcE`tTD$s?G>+yK@dM1tdLVwEd;kswEU9qW|SO&hT4x*7JMFrP$ z0pEA~U%$do5_vy$d(e{+eK-S1U97YP%p14wDuaW4>RjtQMhP*lU=c%mde5`0rP z0=(bXhbfoY)YjGQ4|UO0)+@o?RG{Zx>Hm@snFTiy`Dyg0@}V$G=Zbmuf>MIadwb4L zHf)`Gw*xpAwo(cDI6buWf#1jz0A9bzS!G$p5L9$!#YlBO+clfpf6PS)!Tgy!Vf_dI zZs7c;>X)1WGwiM+Yq`v;3HGJ{#-fG7=2Q7T0f9h);?V3MRlbOQ_5VJ%J_rvQUM=?KY46*~p1l<7=G z(_^Oqkoa7YQ-IfFfBjBJrw}_%0e5NnDZVW|bqZQihGXL2qO{^ulSd$!JRXOpjoK9? zoP+@A+qciCO3^lw0BkqhG?1*VW;{&B+4ZIvF#tfR%Ylse%zxQZns9fBX+oNhs3rOb&UOq-by5 zZ33_Foo%R&3IOc#5Ex|b!Oke7W9ZJ}jg>%E1LM`mlciW2Z z0t3n|@Fj0p?s@rO(He>grOfk#wW9+K+A?6ix8%EDkChBYGtdK;DF!n%K$A#T?=0cL zXVQS1s;#gDf0EFB%S3F)z+6kL#-k*Vb6(7W$QRH{*1SuLp+HdZ6$t0jGsB8) z@}~@<>KQk&C2V$lU7W0CKdROdup}{{2Hssq zMR+0!e`TV_JS4Dr2!k1@ofIRmyxes?g-n2yRbTAu8y;$}`UDkZ-O4005x`~L7ejAP zY32NVeOI@Zn!2oVp0{-6{E#!z&n;b%&q!0Dvup5_H1pVEej8YD)eMQ>Z-%-l8JSvj z2y@K`121qHvmBi2hnpVuqf~&#+^gt$bYJmKe|39cdds1xTbY7Zn$8+Evy1ErFOXd@yW>@#PCEPZO67Oe> zh#N|Dc%DK|L~fDKnlu8zVgz%Cj5)9C(d`}*G06Crax+$Jgm*$XGVIN`H;1J zEeG^YC2hFx~3)L0~@j0crw$8iBU5tKgqhUm#(9XUI$g-Qt zZ1pMM?#7t#xe~aLxNh4MK9>o;&H@e9e}y0E1gbgZ$0|v~)gG#b&rH3=_AgW@TKgIG zG%2MDVn0%%@jw6YY@K3RMrrViD}LtuVBv;iOI=Sbb&W0ce}1Xaj0b6;C!2NeX5~`m z>u9W&_^@c^6c*Zoao{JgD1>NloObs~+c`54Bn1-|i8m8T;B#PI*>aVEUCjrcf4PIq z#c2<5ctw@YBI(=Ofm6PaTf}V})Z5c;QV>Lb5~udEzt_73sx?%_kpJ426J$@MDw&!! zRoM12>JwsvCU0vlelwrbtE?OD^0M8e7xZ z8dSO5*B^m#XAEN2_I41d+NZXo*f~epovl5w^Hd4@Pij{529T-B>(Dv_iO0&@RLyR7 zFeYnX$RG^3(_xQc9|s{j3IOIjoE6{*;G);@qelGbv<8yA9V>2V2{YkXe*G(h4G);H^bg_!25N{(vYB*2@X#kP1CFWt< zlE0ZC6x*)*b>@n8wm~rJu)(G_-18F;%4&y-))qC%8mC>)I;pXl)Yu{GM2(GG#<-Xi zkrr+W`B??^YRkDvIO@6$e`fH48X+1V+T^Q56C{A;ht&P0w!VddG)#KTrug%VWC=(8e+L~UexS$iyghda zsNKYl9{g-7g@Fkqu|*K*31Dq2%5fGPeF&j%`dT3NW31HxOMAJL&HYT|ic+pb>7OA9 ziq}`MA1X6v5C_(yVs+X3!2WU^nF{p^U86JXP|WCrY^rRG?R1=|9L{YANiT6A%-=Z@ z3GHfQJCY`xoHU(kfA5;}*m2P=HYUbl=1Jp0$l5Xn=Hix{$4Q~K0$zxKaIl7wfxcbB zTS@_=uPO$&7|`f#s!$M#+FuARZRn^Q^80A0DjZuJOSu9B2NjRn@%ZY^cM$atexEOW z+=@d#4$YJ_M2dK+ZJmY0ydg_U7dn>LIWqe*sq#b^LwNCM0fb17C~6 zE(X_(mp|NP%2(l-?>(j%o*$|={7nrhw*(wrF^m1w#CG8}XD{AO;hUsEv7Ua{LH(82 z&o3p~Qz=QZnc^-m05(naXAA&?3fB)QhtM=QO4HL|3P0>Y5w+iR16R4hBw-iXETp${ z*~dPVc7L2Ff2!~#PlQuY$H%xi(s$IQ0?2LGl$K^>Am^8vO)t4GnS_1{=g#Z@rtjuG zx@t*+SLBb3OxHN&9`AeQ8M zfY%+Hjp%}&E`D@3P<$xV8LTg235Ru4@mJR(q_c z8`~k9+4pkkdeThuXEoyG^`qY&p?0g4UM0#;<9HQAj5T^yY#+V*pjIVJ!JT}QrK@{F z+^(X`e@_zBre<~Z=-&%J2uo8x$+8th>nu2_3IT{h1GJF*&xN6%W;xAP{LKdS!!U+B zxq(e!#vgSA*_dW1C(Qt`RWO|3-vI&eMm7i0-^veo0{hj8e(1p|90I$d81@`-AN7p;CXx`30=_?ZmqG$&M06JlWo~41baG{3 zlX`3lvzc3Z1OYRX0Zk}>-CBEd(?}BkpHJa+)z-;WJeEcpJz#6AvcW(W4k!|iy*jS0 z6kCb4$db>p2)R#x-P1jKMGgVNE_YRNH1Fx@$FF-H_UK|{kDlE7<@Da{aiB)Nhyphp zot}@Jz!l2&Mxo;h*MXwt=pWX};mKs`D#v;?QMPqBk+ya84FBtY90V5-zGpx;YJaVr>Fjvo3v>Rg&%mP!Th(0V_T>5 z7mwzTXym`mU!NSmd~rZIX-ii)4*U&GW`{yaGt}|GT#g+G=?A8Xi%ss?%syK0PBbxF}nQWoE zZT+Q$j}ut$Y{$zI&d?-IXq^|?5*h;6OHp&IHL@dx3YFo1*h!i%5+usAb}LS#%Ou8> zvWjymiRq&i4HKJq@qXecE50yYN*)6^P?+QtXo%mV4sxsFowRLAzO$8mzD0#A)}85< zRq1tlyiTYoS4E}Q1S6HuQLD;m>bNL9kc*>)@+7TCkK)?OI;)_4WG$1N^0*Y&_N{TA zERwQJcUM$@zC%tGRQEnFE~#{766ubraDkYQvy2KBMGhnB-pP{d@+H+RlTDJt%)2qq zu}bt(6RM8enIg}al9)c{$tBg4>3WkTdaX7ul9jK-S!wDG(&a0|cubz*$Y9mWB2TEK z$hpyq3py;u0w7mRroIh2y0^_H-tKt3bNXHu+xL`zq80tSN-44I5#`}%R2G}TS{j4} zye6$P+Z|7NneJ8{2C$UNM6Z6A<`Oy*#qn>% zexyr_VIN&lBwVkC{n@HmC$pbWWAk{O{QN0@A|2(3hDb)q4*mkxhu|WD5jZK~IdTYr z?GW@3kfg|ma5nIS7t|EKMH#ISi=^Ag71J6y;j7UqiI-QDB{XzBGDB3~0|Y~-#w+Qf z)&5>gl-2LjMQ5CY=Z)z@Fb@5hd>%RZs1apR5weucs9JE51V(hlMpjZAVF#APw=|o7 zL!kR2XIo_odm5sE|8;xhh{lBLa`HT(+&ab}mx@ZnV;gSsJU5~YBgGd+9UbbYkt<{b z0RROe%u)OKcvT)Sj;UdC6LEw3|w8Wwq$B|WA?un<|W_y)Bxgh(~kB@FH87Iam$ z>GdX+M;#@VH)7jz`?6Nzws0}lxDozsAw9Qi6TmG0*37C2VE;9qfWHN|J>8}2WQw7| z*pS^@8OKlPE!#Xv%Qg#_l%Wu#v*1OwCBfvoVFu|itIIKA6q6@uj$c;GsH0s?i`|rD9R6XIJsr zWs!G0#B2@LGJ{F*2X?a)Wn7ZI!0_#9SjIm>(41AvE_DwnH@i7|x3#!1 zdw=#>M%j)5zd+BTNb4DV#+zh+yN+{;P_cmY3ldtt;EVc2l7~!R(R4imC8f2}!53nS zJS*a*);sKGX4S!;Zkf}!9=WTBNMLR{R~jv<8b6>6m2@x~)GAxD&MIH4>H`A%&}lnm zFj&JAL+y}LP|(h)H@U+O2DWG*f_fj-XwJZRzAfy~?>ZTxG|g+|QvvgT1&Vtv21@Ff z0n#X(GU29U+EqgDqnD57V=64GvocvsS%sqjw$VM`y}OQr%Y@_aG%FkX2ZBgHP)h&S|MGx=b5rjq2~zn6f}lx zk6|leH|JFUNjF0i1)3E-v&6B{EETS`HDf?ChHR8rV~i3j0Z%Jn#MOZLPi5!}Cy4q8 zZmbwKZEVG1W5tjpD`ra#eYPs77_d|*HMIkQd}y!*678rRvWsGW$rVUYT$a_ku50@A zOdN{RatMp#jCZult4<`+3Z=fCsg^qsz$-FRTnyXm3!vK^8|~BdsTr{ikuAJ4O1OV3 zz-UQKFV-=HtGjfeHNv2zIqhnXa7+#WcCIGGBL;4YGNqxmR}=ii;cLX*>wFov#jb^cr$H1dTI83)HRYprv*{ zw_4U88vy&P&B*&(s`57u8v_P-+NS_#K4|u&SrY;L|1kI9{-42K!<;Q3MwP`}oMg$m z35w45vy#K1=HL%E!?6jT@0vQQu*KxX@2w9w5O*}j<#`JP%yATQ6t;MRhLsDuUOUJ^a1#Kr#gk!+eOU|v* z#fp;D$3aeWB`F6aaPz7`_2Z5T%7hM87AwKKx##I3$;)I+V`vy=8pr}6kx>)c5QL$S z?vS&CImB0gNcVdVe_cn|GPo-jd7Dt6wY9s=iOZjO+VUeV=Z>6>=CAh!{C%u}Xxol~ z)&&GnAL^qy9iNK#B4&iEbVLT#1BX@Dq*0rZ;s2g^?7Nhc!A4r~Z6)=;Yr|jFyYB-W zTLgjZ-ZnJK7Lun7z4oR`gD@0jfXfkXaxtSlFf?y}oTe@Yug!ZSeSt@})KtYgT-}Rz zdghu2O2&s9ye3XRQu!}qo`yTL^fOeZm$|$NRZAU_(By+w?u_a{6^HJPYs&eQ*j%sn zyr2reoz-42S#Nejn_AZvuIDv3EDaa*c7}117}yU`uAiobfzVTf90r>0*ObvnBA{jb9#5=0`F0p>G0CSjI!ycuu&*GB0t*6P) zxuuQ^FtIM`#|TKW4%vx~A(~Cl<>RMOmCkQ}JA1y=u&W)$*5|}coJ&`R{R4&5;lo!5 z)Ew_~)kO&n8Lco)DP+AiW}xvyN;D~cd7x8qPG5+PNX04JMgeS3bzsq3D!|)|-3SoU?QN+UOe8-0!1)Bf|1!mY z-NisbtY1S!gln=n7=biLLXcWl8EpVJ8IRLD#m13|t&q}>Q!oKobwH@q(iCiPzHbmd z29u2)V`dc(9!Rxgu(Mig*X!6gb%R_Q==I^nr_l4NiL(0+zQi6roK8OL5o3p=|XkQ(2!-XiSr zUaF)Pvq1Tf^veBnFw#n71MMkJ#bE7I3je;qClO$UY@dAE6T;E1q)d7FT5 z#KP7^xf?pn7qSNAW&O$w>hOt@?m!=NYK>{~2InkR{jd*<$&-cqUP?HTCz{Ky$H&j- zFAo1YAEFyWeABLd{NKF$pz{h%rgk-ZCk21+`+k4Y8vqc@!H#Mf;i(4SZh6`kRS)6x ztDLFtx~S&*?OEX0+wYRH4a);bzu_aKsT}!;`~*I72il!uDy>g#>3|o@&gdx)CWqH7 z17FATUl8QfYIQI$t}lXG$@|AAw~Cw&@SUGD8h>r8H$T1iUzt7%1G8~#hXw&OlL1XB ze_H#K+qMz@-G9aPW;~H*EFAIR15Vo+KhBBM#Bp+$rfJ>jP!jLNm?9NX^7;Pz?gQXU zlzdJyW1m0(1Qv_Mx8E)poZX%UXJ0*fe*Ng;RUDp0!p1r|yS_P-u@+%q&JwAGmQb}k z`_JU++0}HWLpgan4TH(EsR|}9{(*m~fB4m&rJUFJJP=|GfP1>h`}8(@7lZ-)m(5h|>q#u6YGzuei!G|Fs>O5`8a4T;&dXa^lZhs~ zRkp@b2)*vPYLV{ijO+Gg_HmOfcBq$=aCA2Trjw|2h94DymTUgqR4~iD$jI`m_>)a_A_0?=aCK7)o+=eSeAEY{g%(kh&UGRI-IMWkCjq>Z8Fn0h zv7e86&En9oH^4%j?HDD{-B1hv+!ob5Ex6pAc!ECyiEW+&UX3ZpDiO!cj90&0p}bk6 zqfZ`1Ks^~pG4KhPX9bW8B51;_5e?}i68gA)PT3GR@7CqCE1X3E!zlh9xE-v#skU4o z9L2)BK$NTsYb@=#bw zs>MQXJmJN8&o;*e>aF3;odFwh2gWc)YGD3Ja}FN=b;I`e z2KxUUbaE0~l#pR_ZpSeU5X{(rWPEs3>VA0|F0}|+Fmb#V>2A*UQ{40NaEv<3yvZjJ z0GPh&e&T%#CSQeVjvDQ4jvsqtM5t8@ z;nEZtA1IV~ft(Wyn<_`6rsX(>i{-V80`g7a-dN^r7#uTH+dQkEa0@Jd1uW}UaM&XN z$|b;!2my~F0z*fVn6oWJLr0o^JPeYO5U`zNBUU9HVR5k)w01UnIT0t>JXQURLM0`ZG9!1cgu9D?Ih?rQ6d zqol=(@CVH8hLLye-pX!&+#6o;Sl;Hhs~vZrSA>jE$p9C-c!g^E1RJXuBXJtvy8~bt zAV%6wUhcQ(vPVDyA+3$iie40;+{{YFU9W{f5!DS8bI-LDRVWIJmKc--7~IQ%Z4BCh z1<^@Bxv^jBrpi7#eL6{p9xwu<(Dq?RK+4e*0JE^)K{-;cAeVuEh0bco((hXhjByDF z{?!57`h13GyD5bIj^g84hhS)9`PAw#fEbo5P_>xDh-`ZbXCV?FZ&J_+e99;#jYW_& zyx;wVOyN*%-=dx7*ZDFD~l+W>alr!X@?ua8C!URNsDjpnzQ zZ)yPD>N6>SV%T4YeM&c&-&TK5p78Se5rSlJCeM_DxDU9Qi30M!i}j=59*K}z-49gx z-ZS5Q*6GjL;vQZP24%Q;z|=qdo|zPQZxdQDSm(XJ{Tz+FxY#V--=2SYj88S7Q*Fo2 zrh@4ogiGfyp1zaXIP;qUe&Qn!3Bh-F%n)!SXkhw(2iHgTB0MNH)4m)Ltk(f&!c~Hq z>&fU+AwC8oIxyDjRfh<69YF36mGh{04EKxG_|dV0ljFU>zV`UPWrw%zA5@n|gc7AA zyX1R7g|LdK(D3Ao5oCi?X<<`m3b?3oN9gS|q@-rdfuAy}7nR{Np#;SFs-C z1JOT!)q9{*NFoe#jX}Pg>WM3vh}+}I`P2m7OJd@_gGw$QIp>Z}=Qw1MlCq$Z75s6> zPfUE=_`ZM4qZ5iqaPV;;59naN%#d4yJ3^No+aZ!A(?Fa7CxVr*M0n`;& zb(g?xO$%s;7&4U4$Gi{3Wr=Lex4RcQu${es7|Rh!A%iAbI-e$#9ycc8TdD3)GUTC% zk?uTsu^fl=G=qx|;6yuSW+xwVPBB2`97MV2V#+@+vk#cmEu!PCwWW2y&wO7};s%P<&1kwI z5w^{+{<^sx6CN0J6!(R%c~B?4wp4w)cNqb$T4tMk!HG%FfL=XrzaKf5m?BJ6V=c?< zCfyfPwB-@DrvYahM1*zMECU{9PakCXRZETKX)ewMeApqm9K1TvY@;=bvLk`iR=6o8wP3{V+9VRUI z3l}-VE5BBACt#J;xLYH^cbR3*W91{snC-sw43nxCg7ND4-gVAfpV(&a0#*^aL;h(e zX?S)s+bZi4=Cu2;Tk(^7M9V;b^ga~xHuK`_p7wGq{ucr_ApMcct|T2^VG?_gSirif z#6}x%AU9%!F&LI@fMGsWllvJgW;U;?_ak-~8Uf(n_yY{~p5V>7yV<~**k$45bW*U& z@ttbzq8Tq5Y=ezWyMkWw)&@O)LLG2Jup#^Cj9x0dfE(PC?RpUg<%uDGHsr(&lp`k? z6gt*TXtm(JCsH~1mNU{tR@Ypyuien`u}g=TK6d#0>r$%$lhxtfgCc0bOQKhv?eW6e z`-eaTIvmSmBibg85MpUu=?jRFSeB6QbcSKDFKg~!Unt#`SeLBMO-?X8TU!fSs z%bAq`Z?X>$?mL$lomAyNWFer$%A-JOMI75hprms&3Y2Zi&*P+$3U{I8nVQdDx~7Q@ zUDL#8|2@r!X=1ZSw$ArBF&)^ZwhLIigW8B-xPvaV(e{Xe1BVO}`?+6cgdz&`F#tn8 z+yEHQOvcwaa9Hbq0#oF>NgOtRhVKU*Td9-t4?A%LOLM~hL)+SaXpbF43vqkvM~>M&#F0@rYWE?zf-V!F zxq9C-L~+6iDiVo)Bf3}OPbn>aL#X-+@s~|$(Hag1PA))lX&jffEN`2ufFpRL&`&q& z+NE2Fg~lLT1Dc*nv3_80V|9LS7bhT*vae1*rP;BDQ z>}A}4eqxNZ5SLQcN%2R;>>1gM0=A~~nYQzmRCV4iq(0|1Oe=-%`zqJlB_*La&yEPT zPD{>ik0doZho~`C`kn?gE5_bvKM$af(?GHK0VY3EjzdaHX2@W``k|hQ4&}03$8OSI z2K@vQ=Ojb-p;}(>7jRh3IFK&+i3Nwzit5%Wy>>&RY+dht>Fx=oJjy%4Af^4xk8EfD zwVp2@_?b2an-4+GxTWUy=oZ&ovGn72LJCkSMKKuIS z*^AeSJ&Q$_nDp%C_Dm&4SQ(wA$_S%?RGj^7asBf8Vri^eTwPeXczL1a;?)oM*EN5? zz2x2{{oH(aNsV7F3=WB-#b3Dx2|rQ$`n#7uUtawE=6l#cJl=rT!ekk2&n^8u4;k+< z6>$>z0hfQdP;zl|`Qta2-_Xo&FMqy%^V5&d=}Aj%gi`P?w3tkV)qbisfwh!OgpLzG z#Nv==lEwGpwKZp%$YLGi*kxptu(5wVTf&l=QuNB7yRyAlf}H-)T`X0i7Uze$K$1%2 zVt-!}@xEz_bJ1^Lm{cibSNRRxxEC_L$X5+A{vQ7@sl)c(5q2GqYEk6=mCc44`}>@R zx~GcA*5$hFy1aelK{%wL_M!7r)CD%w;-P8Z5$U1Y-*YGZ?DF-y3uPDiUFm-qI$J6e zix`w@sjRS(>N)Y7(=x`L>a2g*bPct-X6tE1QSGay&NuYDzpv`M4%^A%KHu%i8lI`E zs{IgtcZFMmBe-)bHgEs}ITyxMePrY`aLWTnuN0i}OYLYjo${Z*=D_R2&Vuw}-oK>Cu6hG;3I?XBYrU}6vF zegy)6^Y~R-3IA0<&oV7QApX5=z9vzD5t(d(qF{xQs74);;lNEK`M_g5aA$PMq7o== zIR2&8pkR9%UNjH&rpXI_+no+JMhX*R$b$0pO#fc(LPnAa+1n@xG1`Cd)VIXNc39CV zq)AgDqjY+3Z)&ogw#E}QkzSBW?wYP5V?fhDdR2SlFp*(CfPC9*oMB^o*YKdSpi!#} zyWrRN;e*q$h-7~PJ36s0z-?rOwr0w1oo}7Ejb2mkdpxN_TN7>F6wHf`MmtPmk!Jl4Wq^l7WTtm&70*WY3XM&3 z2h12S(61kfQk1tjFhqPHp}NK2WO!$+MKq$L-+V(m&kLRl1(M-B8HxiBXfn}A_wn(e zLbr)6cDSGt?L$i{!TOX&BGu7UaOH=J4mf|!5)FaU4eDT2$<1;H zUJ=c#_v;1qY$|`GI8AeVG=E2wZT?7&6;HWyDou=3g`duAGq$I~p#`=q`D(YBx;!=L z>aeg$wcoO9H}x9*LZlRW1oXlpp#Dl`!Y0`hjtfHpKcZi;i>qq#xP2T3hdi9Na7u$G zd2>tKJ7JBf$Yg&%_WJ5|Rl|t~Y*C6x^}B|!a6A>j0wa=mrXGN)c)Q)}7L3;g)PQFL zvFOb9mVyThZ~+1`o*f{FoGDIyk>J$V9WwR1hr7eJtoKBLk@f5y2k?+`h37U^Bj|p8 zVJw(GcJW5tV0N?tj{UBu9Fq`5mxr8MEQKAQ81iYP=|g{p^P=!P^1RY}UTDk|5Gd@6 z71*&r-HR5l4lVfsl!Kdl>{7zB&@I8GvCTd(BuK@OX9VqAmWeo5Kcm zL?>kZK+1nNgD0Wb#skR7fEfahiN{2)dg@s5F0>F&K)QQ6#J}L*Oi`^(Z_9RSw`n zHaON}mHUXEEtN_{3>n#f$Bg>_Ff+HG$9(nB)X3gHfWIGJLbCc|3()?P8GY|O!U;yL zfCw^UREHQf0Ab_LWz-G`$uqh`-z2u+N5$?zl*K{pHZT75TfW*fb@#4XA)~v)YE!Kz zEQf!&1?flGQBp?QJ;hsz9Ld2wR%|^|gmR#8Y62+TX1%!Hmu-h2G-$*l>GhfEmF20!r(A11|#O;wMsSgMwvBk%O&25?29W8b~mnbjkvo!@^ zEX`)w+GcD(DERY>RAD?xQ@gk({Ms`12EY8%nmAY?he*&;YigYcd2uQteJYXep2~lu zAuj7UkV)fW6ntPO9WU;oH?)t%5ZTOu?~JjxBcO6FIb(~#)!L~EGi;0cs1B_ookt?+ z+dmH#H4q@8_@bD+01ml5)N87_RQpGs6yYE5->(sZ&j}>h`cncL0;2e|IwDHI>><+> zdU4V6L%s!Zgxn_N`9>HsQ&5rcdPCFfOsQDfsPEr6i(>ftK%f z#5e3X_YsQUtDEtYpJmD#b_{>4!4t6tD==#?x67q*E&3U2%gNmpCteA_315TqHA4yR zCwFyWAl0sgG%EOHaP)_|pe9z9u-}`cBZ;HNgE2UX(#HELIShQ@yp7#IxS^S+%WDS^vXFmw@2H2>0aSrY zKqhs0AHPWTF2hA5bb6(eoHDN zU@UU0;hhQIbSz_)vLSz{5XZRe)NY4mQE38p-WyDoEYMX4RM@0K#(kW<{_8cpb9K6U zoN19J=Gd_-kMY4x5a7&G_IAls1)O*&`r#NlDIC;R<#>EUZQK!!9PXWv9*_}?8OaF4 zzIHauw@4D){H&<7&O4WpkOt`#5_CY!hu&tOqd$4*Ym2Rj|?s);f> zc_a@fk7aZ`c^pJ#Wau82O|sdtsn4H4yQx?o)NZQar|}8z1wbbnt^q#r=o6cL%F(AW zqxX1m*cHp$jegl8{1XQYaaw`-Ai~^y={{cE0s+ALT6fN#^-qBF2jL4b7Z~4J7zCH}{ z1S-oDTH|X@d_G3R0nn=@xB;0?y+`Y0Q5J7cCfW(4IJOUKcz2hWr)u<&hp8dIoQtY2 z$3G`jJX`-OBUGg9sp5QOMLJ|nc$F0!N<@q`6A4>0aYuh009rt$zmX^*1`usEfaqBf zhm6vg!2JhOk4plE)CxQA`1Ys|e=X4)`T-_gs&BliA+cX?q?2534Xg+90;o;5V9?7h z4JLFh4JcEWX3WU9j5a#mC#KvbV7 zSCE-i>uP^t7iAcKNhN82%z4)xwxut`_R#^Krp0(oHyPfkOLwFHKzAF3-{W@2fFFDq zsu`>B^cxK=;bEp8KQd+ueSZO7Rt=SJ%8czSlp}$z+Mt2eNB#hyCQ6a_H)>sp`WjhH z_cqXpg>Uy7Uqxd3JRoLmv@lU`tegCImynNi0Uux~i%VI5UMdg+66Ya!n)8d)IqcMC zcyD~)Z+HN>ejYHbScB;FtlZF-tzyb2paEWt+*`ACtYbCIC2esuU>X?yK)yLX>6;V0 z6HGtfH>WmKf59bPu!tvaI3v_;0esv5u^-B~1qOFcGDw?ChH!s{zDLd*frnv8_j4-TdEJ1#dH3^rl#I} zguL6Tdxx9-BO`F=_O(=a|D3g!rlRhN(w>uNTt=x{ys2p8nD7LMll#dUPgY)7#T^13Rl+v^0k5CdSUtFc6wwwUmr4 zh|)FmyQSIyv~E3`ai8)y!SdKqhGu-F2O9NZ>k8*I4bQUT&hv{%PQHz~FE?8_WnYlD z%4r%|1hF&`0eM#q5r~lwwCJJ(Tl@i_|2GJ+=W1d6;%o*>QSH{^qpBC}Z8%OP?8FtjLrN1Q=Y%U&E2Pc>ETB zzSxiTOng@$xUa%rh-e)>eN!L?q+-)qKJEp2`WjUHYIEo~ZjCr@0WZGVG>779gD47n@5=q#yge1bW-IX*DIBa&=8@0S zu{F3}cwqC2l9QMt5$SM!Gu>K17o>=P259O^ySU1UvPCRp+8-mc7|s-A+>i4i7Y$e@ zRBegyt6iT9Kgu~BnyNH$<dRp# zKj=}ZFzKfoUL>Eqk57FaE%jDDaguQYN#9UrC)A_e^)k+e!3>KfmVwhTo{xrboAjmM4e(ERV^&9i?4OlGQblW}YlvsabS0Rk{NlOgIUe;R9V+{W>{e}!tm z2ruxl+!x7Bn--EK$IryD6enp@1k@cRvA!cO$D?Jnf4(z2vwVps%Yjiq(CuS(cXr-0 z%jn?pAUgQ&!O_`+KR->(K^)pdr3Ysh2O?3SiS$7#RHy_DEf4+~oF1Oe=E{iR&CEo> z;Y>!slb874HNQLIf7v4{&n^O5QzH-NEs?? z0X=v03kK=qn1*qpJ;2G&GZ6)6C*L2R9MjJ4PTrnA|Ka<`)RU1^p%Cylby$>!M*6Lu zPn;#9B$RRDL1F}X5Ha~2tPO1}V}zY+WkYG@!5ogXLeP@ke^m~c#3tBei}y2Og6xt9 zc8GaJ?QCPjb@VNt9+f8yLvX4N#qd6Uq=9J^a%NImPP>(KtcC#RaYa( ze7)J-P;*uAeO<5Mz4PCjg6RYY@@ghJwwE1ILx*t0m`cL*CtQ1#P3+v_u-oD+aCKh& zDx+vN*HQ5Ikr)}(BP0lG)KY}c`R`qFC!#QlJ?T%2e{$hYPCW`qu(-;%+Z!6(6pQyo zc}WvBPz*MDL4GEQ^V5 zpa{`c=OLQKSoINh04BH~LazyYnx7((V0+tB-sZpG!Aa0;8ygSn^^ecbh$?inV-cR( zT0dxK&2DA^AL3cD0F!Yui=%)yKwW1ZUV=?y#|XpXYs^PsdV57n`uFgh)Xf zA7F^&E>)u?cdD9<9G|_aUFECIrxh)U!&s;ZMN{C_H`~GmE!YMDr3MCZ)$==ce=1DRXYvM?`!vM;P zJ#^AK6!P=QBs$aIw@22HW419|c*$OBM-!a~!rmSaq(MD(YegU3&pzIX&-E2i*>zmJ z>Ji{@fuaqSgxZeGec@K6tbmpke-H+GHrJBL#X)jI3|d^!=$?Bju%5{uxu;G2B8oxa z2(pE6=GYa47>!1b@ov7UoqqOj^D1bC*cBKut z-&!!GB@psYkR!k(1=M*-Fl9y4bq<2Oq_NCxa@nk%+~7!26V#>`Di$0^e@G5%5suYF zjMYSfAE+1GVuO0;(ni}$7u+5fQ^EhpE1EWML2qRSDTk)~3xA2AkatjHNu!Huy#Yhm zEzU}w`M_oqd|X|S*X}mkW4Nsj(_R>HnV0!C+vT4YAg~f9jVA*MgVM2NWq>GMr)FqP zx{yu?vV}h0P{J8Rls1+0e_1TN?Sd68kI~M#ty&%n=CO!c9$R8DatjE9y5yjC1Vzw- za$Vf-cCHJvNQZ}0$*wlg7N1IXTY!h0?&3j^*Sfvgu8W9b0~_#79BxEINB{&D3kD)J zAe-`jL|TWei(9bc6B*|dz?;_uoM8q$WlQ2P>0I4rTP;x8j6==kf7uh3M1c8eEvBO< zoV#sGyz65M+a1+mv|tnqkH!QJkgG}4qJY$SncrMj+vRlPkc#%~9f^vxLrO{vV@OUg zfaUXvvKq3^apXA>1;=S{o>6=hClnCFZ{hM`X!PnQ2ucd+09}Y2`}DcLAI8wU+^H!1 zk|bcOk3aTXg~85%fAhE%DU1>tqt6K;O--0a_oV3DLk~#Ozo3%jmz4+}zA6@ZS?3RF znCOqKp}m8F6#)*H(?!_pL7(ptso+&-50xbPzx2z~6GGtl^xNrris|CFJ|R9CcWW%grW%WM zp-7W28F{PD$=pB5O+sa-e3MF4uvk&xrV<%68yX|mlE{9cRLbDc*=U%r&i_r-FN9fe zpyLB>XMkaxf0;JeZx}zo3}Q_NW|41p6IY&N9XUzm*d|SCH?>s@N{E+Q43!4RpW z+_eqkWNN1EM52LeelJI*sS}gXnz*apa>|KkUg!NoZ--b21B8KS#xZd74x)7`;uNez+?rzhCmxahB1Ux3n^AzR;%Gj6S@!b z_=i+qelU)u_A7{7 z!1{>X2B~-U=e|`A{l#ppu%YTQ-$%f>otNvo=nbK%p3Ik%uFSEIPE+qK{td^yU5yIn zzEI9y9L9=O=Bsx7116*?25C}it>pq*537{}YZ7s2HpC%a@=q$ZmP_ z0aBBTn|pA_DsbtynIm0o+(ecXM1zZW^#_3Id$lHyn#TMc3jq1xpn)i7Ms3NP`v zh_g{Zl=_$h;O}Me!G*Te8<;U1xXQe_7CId3r4t?##SqD@xdrf7)IvI(K0A~qCO?Q{ zf6D@yOwxsYtaIRRyHQngW0Wq2m@!F31rMA*=9$Z?WG~;`%kf<5t2t5yuK<(dSH2cL#6)zg-loJL^peWEHJee_b@?f=fZDF;K?jv z;Hnj_X57gqK@nx$4p=oTkZdfva5-a5aPl!*Z&nOWFW&ALYFt;%iVr-`znP)}L}^Of zX_Y)hLacr7F*_PwaZ3WeefssgqnD@8ta^8(?AxQ4FOJ?liC!JOdvWxm6mJhte~(|K z(b3UMDaEtbN6&wF<4OGgFN2%Tf!7rN6%6ikQ4B!-6i*~Ov$FQ`(Zxh@Z z7c|_IU=cQm;-{*OSQco*bo}_irztRg1r{DlZ4h0aT`_E*KM0-kyJ%50TY@NfqYPrG z>awAIb*GrZe}Mvnx0dr2#J+c9l|-TF-c9cLiZJ)f26PxWJXcxJT) zeJsfOVapc=)V}X1Ac;@9Eba@Dul=H-m$?p~M_XhD1hEiO$~K1QV$sC;3Qp}xi0|F! z2RC>U5)Cl$Utln0df|9+e_8TVLHC`+2nophl2G7dgG@uK6&*s(84mi&(Krnt?p`@H z!;ZT;$|_INJ)zM(rYiolCGqv9lrmaF&twysGo+v3c-rqSIB$|#4nlt#p{o79G!!4q zt@zv*9}{+!-BBz^o){3kl?l1ZtuZd0GkRoNjN$ieOV8PE>o^EaDbHH{dx%-t@Dg>XZU+CFeQ8dg;-1!_+ERQq>8yt z3k^aFTR$E@ooN@&I)Jw93Z1E7gV$ek;WHlBAY)eHn3HENZ@xyXu{iO$=g=oeD)y!* zh6`f|KA&;}Q20ImKnlMdU zGQ4S@WLU!Q%wG5MMR(r-bvpu2rgjwW+qsqv{H&*(pBd2aZG&1MT~4unOg1rFEZBwv z?c2|?oYQr}?+XHwQX6`_Y-|5m94L9(<@ah|elKha(xN|uOhUFqt)>d-0`6_nds7KF zOl}p=@r}zBe->N9P-A2#qJA~hlUT%%FAUAsQ)lZYv4!NKtIOU?N>uONjK6!VM_)wx zPZPu=je z694YMLNH()1wWCz1t)$c`tswOFU$GAu6_UkqM-mv32h9BXIcNiTZS?wB8mgIVfnYY z^u4R)=Xc9@bn{=AUoOvo{``za%2!%Q3IC>;`H2XXyXt&@f|vAT;rof(662N=|C@{s zH=CIeCQ=dJya+(kC`e`t5YR|T3|n&034WHSi>#ylG58(FKsKRU^eGxB@}Htd&y?|oNn{iu=P`yZGQ7ZAO71w0_%)S_h`T2T}1uz?*0Gg zHT5lC(;Vv?uzRGvls;Wsltp`o1LbYg^?t65SJTjcx(fDO=T*MPWJ~c+3%<%T+L7*d zbYQnHcoF{ObgZg}qqNEfj1}7mCz`6*?edlejwf7L(Q!UjRCJCa3MR_>nuwY;>Q~T& za~XMPM(43mgaMnatkcYTMaRg8;x=y@aASn|RndwuXGE;i2D1#w-atG~?dhBb5aJn8 zw?%t@LsXV;(yj!HwahLhLvC|YZjW`8FZ*LILoY2m$86QLSjvpCy6ZTwk}!vxyqeN2 z%kv#vy3l?Ar<&sWrlmo;syimF5~y@T+J}y69 zxMFZD@nm3x>^l|I$fv7pN%Wl%dF>J2ME-z(l#n8p{R{jfeC=$Ax7L+9sXy|fPkNzmC)4{f8h z5rH3}k%TL{zciR%kRpGvl`8R0sWK&;ohpjCA|+nFrEG!%y1qLV6XMAr5wYw+&(#ej zlJuH<-4=C4gLRGe`(s=&VE%L-_{_vG6FyzESbqS!6e|y0!~5GC_N5(l4OI#WX1Q~W zwmJ8kC=wCqJW9dd*Uh2RHVy~$4gWV^1}rPFw5!FIm(hDJWavXxJH)CjM)@zDZSZIk zOxz5Ub!AsW^rj_Gtboxi*1XWO!DmqIT{?#*T&$=YPB_Yk#vAmG5{NNl zCx25oYB_cSg)CWM8)ooLC*oTA(Abk6iT=CTO)*EX+V2@&-PG=CXNu4(^K@t#i{T|i zCD>pr52Y%g2qH3?#jLC;2$YdRCwd$NjN||wv}gtJ!}pzauY?(1Y3Q4lRz6tSLCh4Z zl21}qAeyg}P-pgKVRH*+hp|rai?cSbV1Mf+!Ak||Z(8)@?V#)c`^~gC)WulnU-2Br zuXJIn23P0JVyX=_HY-(}cv+n{6hDY`>{Qe3cJ-bI|2V&(WpWrvxS=)XX9g{gE~v|{ z?K!OLuH+D1``y$y$lzLz`xlG}y5Yt#7+GLTkHUjaS?_FheM%G}qR8;eg&*N(2c2%v z@}JQ&0lfJN?Z-ow>eaC)%Nd&HPk%4O4L|00xAi{zMivkH^ZzXMQN-d*G>3w=0L(V*|hK*odWg$hz9N9qQj)qkWsA}ySn zt_^_XV-du`IHMm?B9w@O;II`1kS~-uf#zb0Q-hXHD=X|2xI(oPr)=%SDa0lr7k*kw zD_U_*L7KV~kw<`{f?ltVdSz@}DUyecwbzD99{^-ylChzV@b-n0vd5^8L#T0rzd21H z)G&_uX8|AveFBH~eF8_^Cx4J!@qX?T27qCnu5V~^Ib0&s1Aroc~AY!w|L$qM{CketCdm`MH`?rJk`?muwpj3#F0_9zSstnYO18N3f6$6meN^Ix0 z=~ome9|9ht8TQZ{1=#R30|lF5tl@(Mvp8%NvntjegC50Pp3&^e$%4NWt;;T(@`Kcg zNcw_ZtaH?rYu=FxVSfU6$oC<~%+`*X8Y!*^imPeGhuBviRZ=;iBem~%qLT@fYYm+% zI{4kkNklKJ=@-@0BNYB^byJkKXHX+A)=XFcjKt~7tk}bYw%*@8#~g?BhD!FFE#JI; ze$aPLUyLw?t1`~9jteHuLnopoUQA( zkz|4Ak76#Fv-#wY#gBkMXd@s5lSu;TsjYt`5F5vsg^_On=IU3Z)?nO+5kpYPjiY@vlXx@*OcT!aPKt}d_r@plck@?BZ@rwpnOhkZO#df+`Qm3BI$7esk0{PfjtNjy}gd)@uXNi=sIR{h|z4=N0 z88^twYMa-vjyL{C10UGucaQsJu73Em8#FGfatVORxM3ZC53LLKUFz?3Re#j27UxtN?qXMzOWmF7&o<3IPIxd*uV|A7!C^7@3yaeF z*G0P`_!@OGhYhEQ`Dn_6fCWi_4Ho!9qg-sR06g;4F7RpcRyP!S@ZGZ|GD3g`u?5%% ze3?o>Yq2VS2#838)>YL_Y`S@6b&ZHOv!3Weo3T@$#UWq{?3KR86cCAeQyf`fOBzW$ z)5NEmMaejKh$QT(O^sWmrrOnp2%FnDm3?F>(W(c-{h+_ivujm*%uk6$=9;w--lx|jF4k8j6tD)o2)LjZBcD>hgJ*pM2S>1F3CI+ z+dRPhW7v|muohtrkbKvkqL}$X2d`EaTIq1ltlCZj;F0=)+*IFDtN~Fd_cnj`i&%^bkoQ!|_UqP{iY=SZ{GLAtJKS zdY83-h{{fLm?n^i(S#syR&B_bi%p}uTqT5#bxt4#5A{Q@LkmVq0h?7-x2QC_%Ml*} zBTQDU!BiDaie}HH_BSmb$D^Vb4~=-_fB*v)2i=kKht^th4@T(?f3Q8oAJ_e$KnD~{ z!a3&0U$0m(9Fu;hSVrKuL6&ZG-q(vWhK4lpVwC??3)kKpH%r=1cB2mpA0Q<{~3 zRi#-Rb#SJ2)W#+?TjzKHVza?RENu-2O402Zb>6gfk+tB1z#bru>)|3?TngI1EH*i< zfZFB|x5`uH&^4iT3si#6IZKOxC0>uWPoBJ-AD_(6o|xZHd;VA2))dFKIsGoV(9qu) zdpQ~~rNtd-EN-{?Ok?&|OAnPXH_q?lXV2#6G~pB+S$&y*X0%XS>F)>7vBR&imqb9UVx5NGchxOg-4PgYfsU2N zFrul}d3Q7#Q;`rmqK$NVvV`aar~vvo^n>gY_cEQi5t;7Y6Qvz;;c(bi=)WRbFmwYWtz8 z#TK%F#qrrBeePJliB~x%p^~k@WKaWW_DfK$%!G?5s67hsF*;g z$K3X;f-^7f3MRULz=V7YRC(zxt$wT!=x7bNtL=bdm@p2m!@(74{Nj1U;wZkGhz=`B z#Nxolpbu*cGX~i1#^cLba$l+;lU_&Z6eB6=@H`YGQs_77I=0=ixCTV}RhUB_FjRib zZ)cy=a+eQD9&b`QtJtPRO{?mA5ukgg@KqbB&mLyIGfcr>s?fE^$5lufGTuqoB&tFt zib!n5njO%CT8fA9KpEEu57dcWIfKyn5ot<5*fe_C<4O>yvOmqA4b~ZjP;77D4N)URKv2C1m7 zKf5L?z)^z}_)8WmAH`y^U^KveAz8?|ZJQRK=#B+L8_N=nM^u)`=sZ)E;llw1NH~+C zQvefb-$ewpHRPR>IHY8LFD=Y+RAYJ6yTIC1gwSSxhoK|3KC4oDxy$?V;gMh*^zknV z$bS?8-Om~yqJS{8WF!N1y8+*ju1SL44Fh&yl>oyt$Y4%ecalC#9hS-{)|^yRfs@p? z+v=|FY6jZE*WYXfW{4`0sZqK`)MMZnu4oB;>jQnwDmA93td$6JgaKH07nyxKEvijp z%=4pviN};>R!!c!10>y5Nia6xG)6x+1+URvjA{;j!Gig>DM;`*7K}y7Arl5DU)*ED z`x{DK##DW3A;-6+_gt0Uwef00L)(>>eUn>vL#OSKr`;>smrS=W2|Ol6^4Cl?d=yDg zA$7=$K{K&sA>njYR_Bu}u){S~==f}zk1j5MD{F17`S7)viRP=U7K~Y2EsPthg{j)) zWTGy8amNbs*y1x?1}oV01%_GJc7&{G5|K@lFPRKGPW^L$Y>-rUhIph7fsiUt(C2a@ zSQPdSMtat8nb)0m@I;~suXU@yVh&_6Dk4`M`i3~aLe#ONbM)O*-AMJvKDI7O1ti9Q ziVHTcg%_I%%RDRA7)XA_;+twS9oRski7-qMlks`6$p&v^@3{+&n3SEP|9e@bOF9)$ zL`FsXS{yPjvGR^gF|*PL=$q)oTtvr8Aw-O?0G36ze<85cz5ChR9HMoh2pd2)k&y6o zHc?X@@_yThF%syEvwI;EC%R33zR{R}6qhvAX;7%l)$z+)3t31-QRM~i$yfKGpOZrQ zIsEAwpy2nUbl`zR*im>@Lq0XQVM!#gni_pq$&y1V0wFhIEmHc z2(<}E8F-Q&X~1ZIjiQ+ia32L8$Y`G?fyg41 z7_*r8PIqxhM`IuX}Rg(ZGr$?H@}m4MVc3Y2egF?iH+*v8vGv;ixR zfc1+(W0szJqSe{uf2*27Xaj$Lw`mLc-GCRx`dSw%r(05QmAv|%z9jb{{YuNG(miRG zGm&w?k*8Bv9FZ8 zXCH<*4S8e2?dL_A?Ew`YV6mcASqO(6f2K~^?oXvMg^PrW2;|V-eJ=`rBOdx zecJAGO{Gzxe(8l@53!3S9-hF*D?Iw*V9fPkK|pBVbe>>INx$NYBbNBCOQT1B>RF1% zyd%>VZd?T&-C!3@^?^JKC|9Uwy~5+Zu=+nxVtW~racmQ_VZWUN0XCBXO(>Hm!#Dzw zT9aYJA_5W0lZC@De+1s|{00YpruM}T$LA-9|5^PA0+^uyS_?l(Ks-D3k4!R@F%~8Y z9Kp%I50&&*C$C?gyd=)Qo}6Et{`~rgdRl5G+UHq{OrS#I>=5QJK!N+IzMKqjR%a2X1rgH;LGN4f!wzVTVZkwC3g7XM<=>3%D zy9WNxs&2RY?~+&qraSv3iJw-eHW_u+<#wA=v(EPL3J#N-#4-}*ELAANfDg1eT;k-o zl#YV{rIX*ptbgiICtmih%}EtDM>yE#X{dBrIR3Hno3uEv5H)q;56Ysl=mpu69{O334rza~s^y72H_TRC2MEo+l zmbF!Jz;e3{Fx+n$aG>RWXy{em)LC&w?fRx{iw#j-@_(l}d{=dbi*EoMuv^l5-0J(P zFUQN~`9+=9GskYE&^qXKNd*NPn6=r=SzBAdWEFMl9#8gc)nfyQrHH%T|1x;j`m5;w z$!=Y4^4;~!P6UAnN7$;PfD|$E9qhos4uOXdH7|EGm|m7`LxeUIz_A)|1PE&CWp3Uv zx3P)98-F?g{^&OA5fG4_I%6;=kx=EdLF=)~&np>efnA6n-?JzhwUDm;ge?n3(6W%N z3?ZmNjbrPwFGrRHU-g!xlf?Vi>Q#&;5rp1vXUAwDtJBwtM{q#lfaZaL)xcaVNX%OV zyvK9J&Q5Tl6GgB2RO+ic(o>Skt`!$O@HlXWy?;BIbI%5>qSFO;c>kEwngsk_=MKuf zQ;M<2x<5q-P1!|OS9y_He>AU_en-frw;X$QT-nqHeW`?0{@-&#{#P-=XHUuRK7IP~ z6;aVqfg!7vpKH|(Y6WvfpPk=hES<`i|encYgGmto2*_}IUfZM40jFi)Q;g+ z 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 diff --git a/SPF/Macros/extendpackagesfileref.sas b/SPF/Macros/extendpackagesfileref.sas index 697b89d..20fa799 100644 --- a/SPF/Macros/extendpackagesfileref.sas +++ b/SPF/Macros/extendpackagesfileref.sas @@ -6,7 +6,7 @@ when empty the "packages" value is used */ )/secure /*** HELP END ***/ -des = 'Macro to list directories pointed by "packages" fileref, version 20231123. Run %extendPackagesFileref(HELP) for help info.' +des = 'Macro to list directories pointed by "packages" fileref, version 20231210. Run %extendPackagesFileref(HELP) for help info.' ; %if %QUPCASE(&packages.) = HELP %then @@ -22,14 +22,14 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20231123 %put ### This is short help information for the `extendPackagesFileref` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list directories pointed by 'packages' fileref, version `20231123` #; + %put # Macro to list directories pointed by 'packages' fileref, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; %put # data, etc.) wrapped up together and embedded inside the zip. #; %put # #; %put # The `%nrstr(%%extendPackagesFileref())` macro lists directories pointed by #; - %put # the packages fileref. It allows to add new dierctories to packages folder list. #; + %put # the packages fileref. It allows to add new directories to packages folder list. #; %put # #; %put #### Parameters: #; %put # #; diff --git a/SPF/Macros/generatepackage.sas b/SPF/Macros/generatepackage.sas index 9b73f2a..7412f86 100644 --- a/SPF/Macros/generatepackage.sas +++ b/SPF/Macros/generatepackage.sas @@ -1,4 +1,19 @@ /*+generatePackage+*/ +/*** HELP START ***//* + + Macro to generate SAS packages. + + Version 20231210 + + A SAS package is a zip file containing a group + of SAS codes (macros, functions, data steps generating + data, etc.) wrapped up together and %INCLUDEed by + a single load.sas file (also embedded inside the zip). + + See examples below. + +*//*** HELP END ***/ + /*** HELP START ***/ %macro generatePackage( @@ -21,9 +36,14 @@ ,delTestWork=1 /* indicates if `WORK` directories generated by user tests should be deleted, i.e. the (NO)WORKTERM option is set, default value 1 means "delete tests work" */ +,markdownDoc=0 /* indicates if a markdown file with documentation + be generated from help info blocks */ +,easyArch=0 /* when creating documentation file indicates if a copy of + the zip and markdown files with the version number in the + file name be created */ )/ secure minoperator /*** HELP END ***/ -des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() for help info.' +des = 'Macro to generate SAS packages, version 20231210. Run %generatePackage() for help info.' ; %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %do; @@ -38,7 +58,7 @@ des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() %put ### This is short help information for the `generatePackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to generate SAS packages, version `20231123` #; + %put # Macro to generate SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -89,6 +109,17 @@ des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() %put # The default value: `1` means "delete tests work". #; %put # Available values are `0` and `1`. #; %put # #; + %put # - `markdownDoc=` Indicates if a markdown file with documentation #; + %put # be generated from help information blocks. #; + %put # The default value: `0` means "do not generate the file". #; + %put # Available values are `0` and `1`. #; + %put # #; + %put # - `easyArch=` When creating documentation file (`markdownDoc=1`) #; + %put # indicates if a copy of the zip and markdown files #; + %put # with the version number in the file name be created #; + %put # The default value: `0` means "do not create files". #; + %put # Available values are `0` and `1`. #; + %put # #; %put #-------------------------------------------------------------------------------#; %put #################################################################################; %put ; @@ -97,8 +128,11 @@ des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() %end; %put --- generatePackage START ---; -%local zipReferrence filesWithCodes _DESCR_ _LIC_ _DUMMY_ _RC_ _PackageFileref_ additionalContent; +%local zipReferrence zipReferrenceV filesWithCodes _DESCR_ _LIC_ _DUMMY_ _RC_ _PackageFileref_ additionalContent + packageHashF packageHashC +; %let zipReferrence = _%sysfunc(datetime(), hex6.)_; +%let zipReferrenceV = _%sysfunc(datetime(), hex6.)V; %let filesWithCodes = WORK._%sysfunc(datetime(), hex16.)_; %let _DESCR_ = _%sysfunc(datetime(), hex6.)d; %let _LIC_ = _%sysfunc(datetime(), hex6.)l; @@ -447,7 +481,7 @@ DESCRIPTION END: | +-004_format [one file one format, | | option LIB= should be: work.&packageName.format - | | (literally with macrovariable name and "format" sufix)] + | | (literally with macrovariable name and "format" suffix)] | | | +-efg.sas [a file with a code creating format EFG and informat EFG] | @@ -489,7 +523,7 @@ DESCRIPTION END: | +-abc.sas [a file with a code creating CAS-L user defined function ABC, _without_ "Proc CAS" header] | +-012_kmfsnip [one file one KMF-abbreviation snippet, - | | code snipped propper tagging] + | | code snipped proper tagging] | | | +-abc.sas [a file with a KMF-abbreviation snippet ABC, _with_ proper tagging, snippets names are in low-case] | @@ -820,7 +854,7 @@ title6 "MD5 hashed fileref of package lowcase name: &_PackageFileref_."; title8 "Required SAS packages: %qsysfunc(compress(%superq(packageReqPackages),%str(%'%")))" ; /* " */ %end; -footnote1 "SAS Packages Framework, version 20231123"; +footnote1 "SAS Packages Framework, version 20231210"; proc print data = &filesWithCodes.(drop=base folderRef fileRef rc folderid _abort_ fileId additionalContent); run; @@ -1541,7 +1575,7 @@ data _null_; %end; put +(-1) '`.;''' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' / - ' !! '' %put with the SAS Packages Framework version 20231123.;''' / + ' !! '' %put with the SAS Packages Framework version 20231210.;''' / ' !! '' %put ****************************************************************************;''' / ' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %end;''' ; @@ -1685,11 +1719,11 @@ data _null_; ''' %put This is help for the `' "&packageName.IML" '` macro; '' !!' / ''' %put Parameters (optional) are the following:; '' !!' / - ''' %put - `list` indicates if the list of loaded moduls should be displayed,; '' !!' / + ''' %put - `list` indicates if the list of loaded modules should be displayed,; '' !!' / ''' %put %str( )when set to the value of `1` (the default) runs `SHOW MODULES%str(;)`,; '' !!' / ''' %put %str( )when set to the value of `HELP` (upcase letters!) displays this help message.;'' !!' / - ''' %put - `resetIMLstorage` indicates if to reset default moduls storage,; '' !!' / + ''' %put - `resetIMLstorage` indicates if to reset default modules storage,; '' !!' / ''' %put %str( )when set to `1` (the default) runs `RESET STORAGE = WORK.IMLSTOR%str(;)`.; '' !!' / ''' %put - `err` [technical] indicates message type in case of missing modules catalog,; '' !!' / @@ -1706,7 +1740,7 @@ data _null_; %end; put +(-1) '`.; '' !!' / ''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' / - ''' %put with the SAS Packages Framework version 20231123.; '' !! ' / + ''' %put with the SAS Packages Framework version 20231210.; '' !! ' / ''' %put ****************************************************************************; '' !! ' / ''' %GOTO theEndOfTheMacro; '' !! ' / ''' %end; '' !! ' / @@ -2462,25 +2496,25 @@ data _null_; put 'put @5 "' CUROBS +(-1) '." @10 "' type '" @21 "' fileshort '";'; end; - %if %bquote(&packageRequired.) ne %then + %if %superq(packageRequired) ne %then %do; length packageRequired $ 32767; packageRequired = symget('packageRequired'); - put ' length req $ 64; '; + put ' length req $ 256; '; put ' put ; put " Required SAS Components: "; '; put ' do req = ' / packageRequired / ' ; '; - put ' put @5 req; '; + put ' put @3 "-" @5 req; '; put ' end ; '; %end; - %if %bquote(&packageReqPackages.) ne %then + %if %superq(packageReqPackages) ne %then %do; length packageReqPackages $ 32767; packageReqPackages = symget('packageReqPackages'); - put ' length req $ 64; '; + put ' length req $ 256; '; put ' put ; put " Required SAS Packages: "; '; put ' do req = ' / packageReqPackages / ' ; '; - put ' put @5 req; '; + put ' put @3 "-" @5 req; '; put ' end ; '; %end; @@ -2492,7 +2526,9 @@ data _null_; put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;"; %end; - put 'put "***"; put "* SAS package generated by generatePackage, version 20231123 *"; put "***";'; + put 'put " " / @3 "--------------------------------------------------------------------" / " ";' + / 'put @3 "*SAS package generated by SAS Package Framework, version `20231210`*";' + / 'put " " / @3 "--------------------------------------------------------------------";'; put 'run; ' /; @@ -2535,6 +2571,7 @@ data _null_; when (upcase(type) =: "IMLMODULE" ) fileshort2 = cats("'", fileshort, "()'" ); when (upcase(type) =: "PROTO" ) fileshort2 = cats("'", fileshort, "()'" ); when (upcase(type) =: "FORMAT" ) fileshort2 = cats("'$", fileshort, ".'" ); + when (upcase(type) =: "CASLUDF" ) fileshort2 = cats("'", fileshort, "()'" ); otherwise fileshort2 = fileshort; end; strX = catx('/', folder, order, type, file, fileshort, fileshort2); @@ -2841,20 +2878,22 @@ filename &zipReferrence. clear; set sashelp.vfunc(keep=fncname); where fncname = "HASHING_FILE"; call execute(' - data the_SHA256_hash_id;' !! + data work.the_SHA256_hash_id;' !! /* F - file */ " SHA256 = 'F*' !! HASHING_FILE('SHA256', pathname('&zipReferrence.','F'), 0); " !! ' TYPE="F"; ' !! ' put / @7 SHA256= / " "; output; ' !! + ' call symputX("packageHashF",SHA256,"L");' !! /* C - content */ " SHA256 = 'C*' !! HASHING_FILE('SHA256', '&zipReferrence.', 4); " !! ' TYPE="C"; ' !! ' put / @7 SHA256= / " "; output; ' !! + ' call symputX("packageHashC",SHA256,"L");' !! ' label ' !! ' SHA256 = "The SHA256 hash digest for package &packageName.:" ' !! ' TYPE= "Type of hash digest / F = file / C = content"; ' !! 'run;'); - call execute('proc print data = the_SHA256_hash_id noobs label split="/"; run;'); + call execute('proc print data = work.the_SHA256_hash_id noobs label split="/"; run;'); stop; run; options ¬esSourceOptions.; @@ -2863,7 +2902,7 @@ filename &zipReferrence. clear; /*-+++++++++++++++++++++++-*/ /* verify if there were errors while package content creation */ -%if %bquote(&createPackageContentStatus.) ne 0 %then +%if %superq(createPackageContentStatus) ne 0 %then %do; %put ERROR- ** [&sysmacroname.] **; %put ERROR: ** ERRORS IN PACKAGE CONTENT CREATION! **; @@ -3418,6 +3457,269 @@ options "elenmax_tmp.; /* if you do not want any test to be executed */ %NOTESTING: +/* generate MarkDown documentation file */ +/* check param value */ +%if %superq(markdownDoc) NE 1 %then %let markdownDoc=0; +/* if true then execute */ +%if %superq(markdownDoc)=1 %then +%do; + %if %superq(createPackageContentStatus) NE 0 %then + %do; + %put ERROR- ** [&sysmacroname.] **; + %put ERROR: ** ERRORS IN PACKAGE CONTENT CREATION! **; + %put ERROR- ** NO MARKDOWN DOCUMMENTATION WILL BE GENERATED. **; + %GOTO NOmarkdownDoc; + %end; +/*= generate MarkDown documentation START =================================================================================*/ +%put NOTE-; +%put NOTE: Preparing markdown documentation file.; +%put NOTE- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^; +%put NOTE-; + +%local MarkDownOptionsTmp; +%let MarkDownOptionsTmp = + %sysfunc(getoption(notes)) %sysfunc(getoption(source)) msglevel=%sysfunc(getoption(msglevel)); +options NOnotes NOsource msglevel=N; + +filename &zipReferrence. "&filesLocation./%lowcase(&packageName.).md"; +filename &_PackageFileref_. ZIP "&filesLocation./%lowcase(&packageName.).zip"; + +data &filesWithCodes.markdown; + /* break if no data */ + if NOBS = 0 then stop; + + file &zipReferrence. encoding = &packageEncoding.; + put "# Documentation for the `&packageName.` package."; + + length packageLicense packageGenerated $ 64 + packageTitle packageAuthor packageMaintainer $ 4096 + packageHashF packageHashC $ 128 + ; + packageLicense=symget("packageLicense"); + packageTitle=symget("packageTitle"); + packageGenerated=symget("packageGenerated"); + packageAuthor=symget("packageAuthor"); + packageMaintainer=symget("packageMaintainer"); + packageHashF=symget("packageHashF"); + packageHashC=symget("packageHashC"); + drop package:; + + put " " / "---" / " " + / "### Version information:" + / " " + / ' *' packageTitle +(-1)'* ' + / " " + / "- Package: &packageName." + / "- Version: &packageVersion." + / "- Generated: " packageGenerated + / "- Author(s): " packageAuthor + / "- Maintainer(s): " packageMaintainer + / "- License: " packageLicense + / "- File SHA256: `" packageHashF +(-1) "` for this version" + / "- Content SHA256: `" packageHashC +(-1) "` for this version" + / " " / "---" / " "; + + put "# The `&packageName.` package, version: `&packageVersion.`;" + / " " / "---" / " "; + + do until (EOF); + infile &_PackageFileref_.(description.sas) end = EOF; + input; + if upcase(strip(_infile_)) =: "DESCRIPTION END:" then printer = 0; + if printer then put _infile_; + if upcase(strip(_infile_)) =: "DESCRIPTION START:" then printer = 1; + end; + + put " " / "---" / " "; + + %if %superq(packageRequired) ne %then + %do; + put " " / "---" / " "; + length req $ 256; + put "Required SAS Components: "; + do req = &packageRequired. ; + put @3 "-" @5 req; + end ; + %end; + + %if %superq(packageReqPackages) ne %then + %do; + put " " / "---" / " "; + length req2 $ 256; + put "Required SAS Packages: "; + do req2 = &packageReqPackages.; + put @3 "-" @5 req2; + end ; + %end; + + put " " / "---" / " "; + + %if %superq(additionalContent) NE %then + %do; + put " " / "---" / " "; + put 'Package contains additional content, run: `%loadPackageAddCnt(' "&packageName." ')` to load it' + / "or look for the `%lowcase(&packageName.)_AdditionalContent` directory in the `packages` fileref" + / "localization (only if additional content was deployed during the installation process)."; + %end; + + put " " / "--------------------------------------------------------------------" / " " + / "*SAS package generated by SAS Package Framework, version `20231210`*" + / " " / "--------------------------------------------------------------------" / " "; + + put "# The `&packageName.` package content"; + put "The `&packageName.` package consists of the following content:"; + EOFDS = 0; + do until(EOFDS); + /* content is created during package creation */ + set &filesWithCodes. end = EOFDS nobs = NOBS curobs = CUROBS; + if upcase(type) in: ('TEST') then continue; /* exclude tests */ + + type2=type; + length link $ 256; + link=catx("-",compress(fileshort,,"KAD"),type,CUROBS); + select; + when (upcase(type) =: "MACRO" ) fileshort2 = cats('`%', fileshort, "()`"); + when (upcase(type) =: "FORMAT" ) do; fileshort2 = cats("`$", fileshort, ".`"); type2='format/informat'; end; + when (upcase(type) =: "FUNCTION" ) do; fileshort2 = cats("`", fileshort, "()`"); type2='function'; end; + when (upcase(type) =: "IMLMODULE" ) fileshort2 = cats("`", fileshort, "()`"); + when (upcase(type) =: "PROTO" ) fileshort2 = cats("`", fileshort, "()`"); + when (upcase(type) =: "CASLUDF" ) fileshort2 = cats("`", fileshort, "()`"); + otherwise fileshort2 = cats("`", fileshort, "`"); + end; + + put @1 CUROBS +(-1) '. [' fileshort2 type2'](#' link ')'; + output; + end; + + put " " / " "; + CUROBS+1; + put @1 CUROBS +(-1) '. [License note](#license)'; + put " " / "---" / " "; + + putlog "Doc. note with general information ready."; + stop; +run; + +/* loop through content and print info to the MD file */ +data _null_; + if 0 = NOBS then stop; + do until(EOFDS); + set &filesWithCodes.markdown end = EOFDS nobs = NOBS curobs=CUROBS; + length memberX $ 1024; + memberX = cats("_",folder,".",file); + /* inner data step in call execute to read each embedded file */ + call execute("data _null_; "); + call execute(" file &zipReferrence. encoding = &packageEncoding. MOD; "); + call execute(' put ''## ' !! catx(" ",fileshort2,type2) !! ' ######'';'); + call execute(' infile &_PackageFileref_.(' || strip(memberX) || ') end = EOF; '); + call execute(" printer = 0; "); + call execute(" do until(EOF); "); + call execute(" input; length _endhelpline_ _starthelpline_ $ 32767; "); + call execute(" _endhelpline_ = upcase(reverse(strip(_infile_))); "); + call execute(" if 18 <= lengthn(_endhelpline_) AND _endhelpline_ + =: '/*** DNE PLEH ***/' then printer = 0; "); /* ends with HELP END */ + call execute(" if printer then put _infile_; "); + call execute(" _starthelpline_ = upcase(strip(_infile_)); "); + call execute(" if 20 <= lengthn(_starthelpline_) AND _starthelpline_ + =: '/*** HELP START ***/' then printer = 1 ; "); /* starts with HELP START */ + call execute(" end; "); + call execute(' put " " / "---" / " "; '); + call execute(' putlog ''Doc. note ' !! cats(CUROBS) !! ' for ' !! catx(" ",fileshort2,type2) !! ' ready.'';'); + call execute(" stop; "); + call execute("run; "); + + end; + stop; +run; + +/* license info */ +data _null_; + file &zipReferrence. encoding = &packageEncoding. MOD; + putlog "Doc. note with license ready."; + put " " / "---" / " " + / '# License ######' / " " + ; + do until (EOF_L); + infile &_PackageFileref_.(license.sas) end = EOF_L; + input; + put _infile_; + end; + put " " / "---" / " "; + stop; +run; + +options &MarkDownOptionsTmp.; +%put NOTE: Markdown file generated.; +filename &zipReferrence. list; +%put NOTE- ; + +options NOnotes NOsource msglevel=N; + +filename &zipReferrence. clear; +filename &_PackageFileref_. clear; +options &MarkDownOptionsTmp.; + +/* to make archiving easier a copy of the package zip file + with the version in the name is created */ +%if %superq(easyArch) NE 1 %then %let easyArch=0; + +%if %superq(easyArch) = 1 %then +%do; + %put NOTE-; + %put NOTE: Creating files with version in the name.; + %put NOTE- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^; + %put NOTE-; + + %local notesSourceOptions; + %let notesSourceOptions = %sysfunc(getoption(notes)) %sysfunc(getoption(source)); + options NOnotes NOsource; + + /* zip */ + filename &zipReferrence. "&filesLocation./%lowcase(&packageName.).zip" lrecl=1 recfm=n; + filename &zipReferrence. list; + filename &zipReferrenceV. "&filesLocation./%lowcase(&packageName.)_&packageVersion._.zip" lrecl=1 recfm=n; + filename &zipReferrenceV. list; + data _null_; + rc = fcopy("&zipReferrence.", "&zipReferrenceV."); + length rctxt $ 32767; + rctxt = sysmsg(); + if rc then + do; + put "ERROR: An error " rc "occurred during creation of %lowcase(&packageName.)_&packageVersion._.zip file."; + put rctxt; + end; + else put "Creating %lowcase(&packageName.)_&packageVersion._.zip file."; + run; + filename &zipReferrence. clear; + filename &zipReferrenceV. clear; + + /* md */ + filename &zipReferrence. "&filesLocation./%lowcase(&packageName.).md" lrecl=1 recfm=n; + filename &zipReferrence. list; + filename &zipReferrenceV. "&filesLocation./%lowcase(&packageName.)_&packageVersion._.md" lrecl=1 recfm=n; + filename &zipReferrenceV. list; + data _null_; + rc = fcopy("&zipReferrence.", "&zipReferrenceV."); + length rctxt $ 32767; + rctxt = sysmsg(); + if rc then + do; + put "ERROR: An error " rc "occurred during creation of %lowcase(&packageName.)_&packageVersion._.md file."; + put rctxt; + end; + else put "Creating %lowcase(&packageName.)_&packageVersion._.md file."; + run; + filename &zipReferrence. clear; + filename &zipReferrenceV. clear; + + options ¬esSourceOptions.; +%end; +/*= generate MarkDown documentation END =================================================================================*/ +%NOmarkdownDoc: +%end; + + +/* clean temporary files */ proc sql; drop table &filesWithCodes.; @@ -3425,6 +3727,11 @@ proc sql; %do; drop table &filesWithCodes.addCnt; %end; + + %if %sysfunc(exist(&filesWithCodes.markdown)) %then + %do; + drop table &filesWithCodes.markdown; + %end; quit; /* turn on the original value of the note about quoted string length */ diff --git a/SPF/Macros/helppackage.sas b/SPF/Macros/helppackage.sas index 4408d43..da1db80 100644 --- a/SPF/Macros/helppackage.sas +++ b/SPF/Macros/helppackage.sas @@ -28,7 +28,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to get help about SAS package, version 20231123. Run %helpPackage() for help info.' +des = 'Macro to get help about SAS package, version 20231210. Run %helpPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -43,7 +43,7 @@ des = 'Macro to get help about SAS package, version 20231123. Run %helpPackage() %put ### This is short help information for the `helpPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get help about SAS packages, version `20231123` #; + %put # Macro to get help about SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -181,10 +181,3 @@ TODO: - add MD5(&packageName.) value hash instead "package" word in filenames [DONE] */ -/* Macros to install SAS packages, version 20231111 */ -/* A SAS package is a zip file containing a group of files - with SAS code (macros, functions, data steps generating - data, etc.) wrapped up together and %INCLUDEed by - a single load.sas file (also embedded inside the zip). -*/ - diff --git a/SPF/Macros/installpackage.sas b/SPF/Macros/installpackage.sas index 3cc5902..061bc1f 100644 --- a/SPF/Macros/installpackage.sas +++ b/SPF/Macros/installpackage.sas @@ -1,4 +1,10 @@ /*+installPackage+*/ +/* Macros to install SAS packages, version 20231210 */ +/* A SAS package is a zip file containing a group of files + with SAS code (macros, functions, data steps generating + data, etc.) wrapped up together and %INCLUDEed by + a single load.sas file (also embedded inside the zip). +*/ /*** HELP START ***/ %macro installPackage( @@ -16,7 +22,7 @@ /secure minoperator /*** HELP END ***/ -des = 'Macro to install SAS package, version 20231123. Run %%installPackage() for help info.' +des = 'Macro to install SAS package, version 20231210. Run %%installPackage() for help info.' ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %do; @@ -31,7 +37,7 @@ des = 'Macro to install SAS package, version 20231123. Run %%installPackage() fo %put ### This is short help information for the `installPackage` macro #; %put #--------------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to install SAS packages, version `20231123` #; + %put # Macro to install SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -479,25 +485,4 @@ des = 'Macro to install SAS package, version 20231123. Run %%installPackage() fo /*** HELP END ***/ -/*** HELP START ***/ - -/* Macro to list SAS packages in packages folder. - - Version 20231111 - - A SAS package is a zip file containing a group - of SAS codes (macros, functions, data steps generating - data, etc.) wrapped up together and %INCLUDEed by - a single load.sas file (also embedded inside the zip). -*/ -/* - * Example 1: Set local packages directory, enable the framework, - and list packages in the local repository. - - filename packages "C:\SAS_PACKAGES"; - %include packages(SPFinit.sas); - %listPackages() - -*/ -/*** HELP END ***/ diff --git a/SPF/Macros/listpackages.sas b/SPF/Macros/listpackages.sas index b582ea3..e14d849 100644 --- a/SPF/Macros/listpackages.sas +++ b/SPF/Macros/listpackages.sas @@ -1,7 +1,28 @@ /*+listPackages+*/ +/*** HELP START ***//* + + Macro to list SAS packages in packages folder. + + Version 20231210 + + A SAS package is a zip file containing a group + of SAS codes (macros, functions, data steps generating + data, etc.) wrapped up together and %INCLUDEed by + a single load.sas file (also embedded inside the zip). + + + * Example 1: Set local packages directory, enable the framework, + and list packages in the local repository. + + filename packages "C:\SAS_PACKAGES"; + %include packages(SPFinit.sas); + %listPackages() + +*//*** HELP END ***/ + %macro listPackages()/secure PARMBUFF -des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20231123.' +des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20231210.' ; %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then %do; @@ -16,14 +37,14 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE %put ### This is short help information for the `listPackages` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list available SAS packages, version `20231123` #; + %put # Macro to list available SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; %put # data, etc.) wrapped up together and embedded inside the zip. #; %put # #; %put # The `%nrstr(%%listPackages())` macro lists packages available #; - %put # in the packages folder. List is printed inthe SAS Log. #; + %put # in the packages folder. List is printed in the SAS Log. #; %put # #; %put #### Parameters: #; %put # #; @@ -162,19 +183,3 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; %mend listPackages; -/*** HELP START ***/ - -/* Macro to generate SAS packages. - - Version 20231111 - - A SAS package is a zip file containing a group - of SAS codes (macros, functions, data steps generating - data, etc.) wrapped up together and %INCLUDEed by - a single load.sas file (also embedded inside the zip). - - See examples below. -*/ - -/*** HELP END ***/ - diff --git a/SPF/Macros/loadpackage.sas b/SPF/Macros/loadpackage.sas index ad0f2ee..32ca4f9 100644 --- a/SPF/Macros/loadpackage.sas +++ b/SPF/Macros/loadpackage.sas @@ -34,7 +34,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to load SAS package, version 20231123. Run %loadPackage() for help info.' +des = 'Macro to load SAS package, version 20231210. Run %loadPackage() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -50,7 +50,7 @@ minoperator %put ### This is short help information for the `loadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* SAS packages, version `20231123` #; + %put # Macro to *load* SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/loadpackageaddcnt.sas b/SPF/Macros/loadpackageaddcnt.sas index f463432..7f1af12 100644 --- a/SPF/Macros/loadpackageaddcnt.sas +++ b/SPF/Macros/loadpackageaddcnt.sas @@ -19,7 +19,7 @@ is provided in required version */ )/secure /*** HELP END ***/ -des = 'Macro to load additional content for a SAS package, version 20231123. Run %loadPackageAddCnt() for help info.' +des = 'Macro to load additional content for a SAS package, version 20231210. Run %loadPackageAddCnt() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -35,7 +35,7 @@ minoperator %put ### This is short help information for the `loadPackageAddCnt` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* additional content for a SAS package, version `20231123` #; + %put # Macro to *load* additional content for a SAS package, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/loadpackages.sas b/SPF/Macros/loadpackages.sas index 0f5f66d..a59bdcb 100644 --- a/SPF/Macros/loadpackages.sas +++ b/SPF/Macros/loadpackages.sas @@ -11,7 +11,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to load multiple SAS packages at one run, version 20231123. Run %loadPackages() for help info.' +des = 'Macro to load multiple SAS packages at one run, version 20231210. Run %loadPackages() for help info.' parmbuff ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then @@ -27,7 +27,7 @@ parmbuff %put ### This is short help information for the `loadPackageS` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro wrapper for the loadPackage macro, version `20231123` #; + %put # Macro wrapper for the loadPackage macro, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -68,7 +68,7 @@ parmbuff %put %nrstr( %%include packages(SPFinit.sas); %%* enable the framework; ); %put ; %put %nrstr( %%installPackage(SQLinDS DFA) %%* install packages from the Internet; ); - %put %nrstr( %%loadPackageS(SQLinDS, DFA) %%* load packags content into the SAS session; ); + %put %nrstr( %%loadPackageS(SQLinDS, DFA) %%* load packages content into the SAS session; ); %put ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; %put #################################################################################; %put ; diff --git a/SPF/Macros/previewpackage.sas b/SPF/Macros/previewpackage.sas index 7098759..61d630c 100644 --- a/SPF/Macros/previewpackage.sas +++ b/SPF/Macros/previewpackage.sas @@ -23,7 +23,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to preview content of a SAS package, version 20231123. Run %previewPackage() for help info.' +des = 'Macro to preview content of a SAS package, version 20231210. Run %previewPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -38,7 +38,7 @@ des = 'Macro to preview content of a SAS package, version 20231123. Run %preview %put ### This is short help information for the `previewPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get previwe of a SAS packages, version `20231123` #; + %put # Macro to get previwe of a SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/unloadpackage.sas b/SPF/Macros/unloadpackage.sas index 2b2e44b..ca4a235 100644 --- a/SPF/Macros/unloadpackage.sas +++ b/SPF/Macros/unloadpackage.sas @@ -20,7 +20,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to unload SAS package, version 20231123. Run %unloadPackage() for help info.' +des = 'Macro to unload SAS package, version 20231210. Run %unloadPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -35,7 +35,7 @@ des = 'Macro to unload SAS package, version 20231123. Run %unloadPackage() for h %put ### This is short help information for the `unloadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to unload SAS packages, version `20231123` #; + %put # Macro to unload SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/Macros/verifypackage.sas b/SPF/Macros/verifypackage.sas index 0526aa6..75f5b95 100644 --- a/SPF/Macros/verifypackage.sas +++ b/SPF/Macros/verifypackage.sas @@ -13,7 +13,7 @@ hashing_file() function, SAS 9.4M6 */ )/secure /*** HELP END ***/ -des = 'Macro to verify SAS package with the hash digest, version 20231123. Run %verifyPackage() for help info.' +des = 'Macro to verify SAS package with the hash digest, version 20231210. Run %verifyPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -28,7 +28,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20231123. Run % %put ### This is short help information for the `verifyPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to verify SAS package with it hash digest, version `20231123` #; + %put # Macro to verify SAS package with it hash digest, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; diff --git a/SPF/SPFinit.md b/SPF/SPFinit.md index f960303..8e2f82d 100644 --- a/SPF/SPFinit.md +++ b/SPF/SPFinit.md @@ -22,7 +22,7 @@ A **SAS package** is an automatically generated, single, stand alone *zip* file The *purpose of a package* is to be a simple, and easy to access, code sharing medium, which will allow: on the one hand, to separate the code complex dependencies created by the developer from the user experience with the final product and, on the other hand, reduce developer's and user's unnecessary frustration related to a remote deployment process. -In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20231123`**. +In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20231210`**. **To get started with SAS Packages** try this [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). @@ -40,7 +40,7 @@ After assigning the directory do not change them when using the SPF since it may ## This is short help information for the `installPackage` macro -------------------------------------------------------------------------------------------- - Macro to install SAS packages, version `20231123` + Macro to install SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -149,7 +149,7 @@ filename packages "C:/SAS_PACKAGES"; ## This is short help information for the `helpPackage` macro ------------------------------------------------------------------------------- - Macro to get help about SAS packages, version `20231123` + Macro to get help about SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -225,7 +225,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `loadPackage` macro ------------------------------------------------------------------------------- - Macro to *load* SAS packages, version `20231123` + Macro to *load* SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -377,7 +377,7 @@ If created, those macros are automatically deleted when the `%unloadPackage()` m ## This is short help information for the `loadPackageS` macro ------------------------------------------------------------------------------- - Macro wrapper for the loadPackage macro, version `20231123` + Macro wrapper for the loadPackage macro, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -426,7 +426,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `unloadPackage` macro ------------------------------------------------------------------------------- - Macro to unload SAS packages, version `20231123` + Macro to unload SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -491,7 +491,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `listPackages` macro ----------------------------------------------------------------------------------------- - Macro to list available SAS packages, version `20231123` + Macro to list available SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -532,7 +532,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `verifyPackage` macro ------------------------------------------------------------------------------- - Macro to verify SAS package with it hash digest, version `20231123` + Macro to verify SAS package with it hash digest, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -586,7 +586,7 @@ filename packages "C:/SAS_PACKAGES"; %* set-up a directory for packages; ## This is short help information for the `previewPackage` macro ------------------------------------------------------------------------------- - Macro to get previwe of a SAS packages, version `20231123` + Macro to get previwe of a SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -653,7 +653,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `generatePackage` macro ------------------------------------------------------------------------------- - Macro to generate SAS packages, version `20231123` + Macro to generate SAS packages, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -703,7 +703,18 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; should be deleted, i.e. the (NO)WORKTERM option is set. The default value: `1` means "delete tests work". Available values are `0` and `1`. - + + - `markdownDoc=` Indicates if a markdown file with documentation + be generated from help information blocks. + The default value: `0` means "do not generate the file". + Available values are `0` and `1`. + + - `easyArch=` When creating documentation file (`markdownDoc=1`) + indicates if a copy of the zip and markdown files + with the version number in the file name be created + The default value: `0` means "do not create files". + Available values are `0` and `1`. + ------------------------------------------------------------------------------- @@ -779,7 +790,7 @@ All files have to have `.sas` extension. Other files are ignored. | +-004_format [one file one format, | | option LIB= should be: work.&packageName.format - | | (literally with macrovariable name and "format" sufix)] + | | (literally with macrovariable name and "format" suffix)] | | | +-efg.sas [a file with a code creating format EFG and informat EFG] | @@ -821,7 +832,7 @@ All files have to have `.sas` extension. Other files are ignored. | +-abc.sas [a file with a code creating CAS-L user defined function ABC, _without_ "Proc CAS" header] | +-012_kmfsnip [one file one KMF-abbreviation snippet, - | | code snipped propper tagging] + | | code snipped proper tagging] | | | +-abc.sas [a file with a KMF-abbreviation snippet ABC, _with_ proper tagging, snippets names are in low-case] | @@ -857,7 +868,7 @@ All files have to have `.sas` extension. Other files are ignored. ## This is short help information for the `extendPackagesFileref` macro ----------------------------------------------------------------------------------------- - Macro to list directories pointed by 'packages' fileref, version `20231123` + Macro to list directories pointed by 'packages' fileref, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -897,7 +908,7 @@ filename packages ("D:/NEW_DIR" %extendPackagesFileref()); %* add new directory; ## This is short help information for the `loadPackageAddCnt` macro ------------------------------------------------------------------------------- - Macro to load *additional content* for a SAS package, version `20231123` + Macro to load *additional content* for a SAS package, version `20231210` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating diff --git a/SPF/SPFinit.sas b/SPF/SPFinit.sas index d5d0a7c..c3bfdf4 100644 --- a/SPF/SPFinit.sas +++ b/SPF/SPFinit.sas @@ -42,7 +42,7 @@ - to unload, or - to generate SAS packages. - Version 20231111. + Version 20231210. See examples below. A SAS package is a zip file containing a group of files @@ -89,7 +89,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to load SAS package, version 20231123. Run %loadPackage() for help info.' +des = 'Macro to load SAS package, version 20231210. Run %loadPackage() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -105,7 +105,7 @@ minoperator %put ### This is short help information for the `loadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* SAS packages, version `20231123` #; + %put # Macro to *load* SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -360,7 +360,7 @@ minoperator */ )/secure /*** HELP END ***/ -des = 'Macro to unload SAS package, version 20231123. Run %unloadPackage() for help info.' +des = 'Macro to unload SAS package, version 20231210. Run %unloadPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -375,7 +375,7 @@ des = 'Macro to unload SAS package, version 20231123. Run %unloadPackage() for h %put ### This is short help information for the `unloadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to unload SAS packages, version `20231123` #; + %put # Macro to unload SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -524,7 +524,7 @@ des = 'Macro to unload SAS package, version 20231123. Run %unloadPackage() for h */ )/secure /*** HELP END ***/ -des = 'Macro to get help about SAS package, version 20231123. Run %helpPackage() for help info.' +des = 'Macro to get help about SAS package, version 20231210. Run %helpPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -539,7 +539,7 @@ des = 'Macro to get help about SAS package, version 20231123. Run %helpPackage() %put ### This is short help information for the `helpPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get help about SAS packages, version `20231123` #; + %put # Macro to get help about SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -677,14 +677,13 @@ TODO: - add MD5(&packageName.) value hash instead "package" word in filenames [DONE] */ -/* Macros to install SAS packages, version 20231111 */ +/*+installPackage+*/ +/* Macros to install SAS packages, version 20231210 */ /* A SAS package is a zip file containing a group of files with SAS code (macros, functions, data steps generating data, etc.) wrapped up together and %INCLUDEed by a single load.sas file (also embedded inside the zip). */ - -/*+installPackage+*/ /*** HELP START ***/ %macro installPackage( @@ -702,7 +701,7 @@ TODO: /secure minoperator /*** HELP END ***/ -des = 'Macro to install SAS package, version 20231123. Run %%installPackage() for help info.' +des = 'Macro to install SAS package, version 20231210. Run %%installPackage() for help info.' ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %do; @@ -717,7 +716,7 @@ des = 'Macro to install SAS package, version 20231123. Run %%installPackage() fo %put ### This is short help information for the `installPackage` macro #; %put #--------------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to install SAS packages, version `20231123` #; + %put # Macro to install SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1165,18 +1164,20 @@ des = 'Macro to install SAS package, version 20231123. Run %%installPackage() fo /*** HELP END ***/ -/*** HELP START ***/ -/* Macro to list SAS packages in packages folder. +/*+listPackages+*/ +/*** HELP START ***//* - Version 20231111 + Macro to list SAS packages in packages folder. + + Version 20231210 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating data, etc.) wrapped up together and %INCLUDEed by a single load.sas file (also embedded inside the zip). -*/ -/* + + * Example 1: Set local packages directory, enable the framework, and list packages in the local repository. @@ -1184,13 +1185,11 @@ des = 'Macro to install SAS package, version 20231123. Run %%installPackage() fo %include packages(SPFinit.sas); %listPackages() -*/ -/*** HELP END ***/ +*//*** HELP END ***/ -/*+listPackages+*/ %macro listPackages()/secure PARMBUFF -des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20231123.' +des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20231210.' ; %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then %do; @@ -1205,14 +1204,14 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE %put ### This is short help information for the `listPackages` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list available SAS packages, version `20231123` #; + %put # Macro to list available SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; %put # data, etc.) wrapped up together and embedded inside the zip. #; %put # #; %put # The `%nrstr(%%listPackages())` macro lists packages available #; - %put # in the packages folder. List is printed inthe SAS Log. #; + %put # in the packages folder. List is printed in the SAS Log. #; %put # #; %put #### Parameters: #; %put # #; @@ -1351,11 +1350,12 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; %mend listPackages; -/*** HELP START ***/ +/*+generatePackage+*/ +/*** HELP START ***//* -/* Macro to generate SAS packages. + Macro to generate SAS packages. - Version 20231111 + Version 20231210 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1363,11 +1363,9 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; a single load.sas file (also embedded inside the zip). See examples below. -*/ + +*//*** HELP END ***/ -/*** HELP END ***/ - -/*+generatePackage+*/ /*** HELP START ***/ %macro generatePackage( @@ -1390,9 +1388,14 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; ,delTestWork=1 /* indicates if `WORK` directories generated by user tests should be deleted, i.e. the (NO)WORKTERM option is set, default value 1 means "delete tests work" */ +,markdownDoc=0 /* indicates if a markdown file with documentation + be generated from help info blocks */ +,easyArch=0 /* when creating documentation file indicates if a copy of + the zip and markdown files with the version number in the + file name be created */ )/ secure minoperator /*** HELP END ***/ -des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() for help info.' +des = 'Macro to generate SAS packages, version 20231210. Run %generatePackage() for help info.' ; %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %do; @@ -1407,7 +1410,7 @@ des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() %put ### This is short help information for the `generatePackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to generate SAS packages, version `20231123` #; + %put # Macro to generate SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1458,6 +1461,17 @@ des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() %put # The default value: `1` means "delete tests work". #; %put # Available values are `0` and `1`. #; %put # #; + %put # - `markdownDoc=` Indicates if a markdown file with documentation #; + %put # be generated from help information blocks. #; + %put # The default value: `0` means "do not generate the file". #; + %put # Available values are `0` and `1`. #; + %put # #; + %put # - `easyArch=` When creating documentation file (`markdownDoc=1`) #; + %put # indicates if a copy of the zip and markdown files #; + %put # with the version number in the file name be created #; + %put # The default value: `0` means "do not create files". #; + %put # Available values are `0` and `1`. #; + %put # #; %put #-------------------------------------------------------------------------------#; %put #################################################################################; %put ; @@ -1466,8 +1480,11 @@ des = 'Macro to generate SAS packages, version 20231123. Run %generatePackage() %end; %put --- generatePackage START ---; -%local zipReferrence filesWithCodes _DESCR_ _LIC_ _DUMMY_ _RC_ _PackageFileref_ additionalContent; +%local zipReferrence zipReferrenceV filesWithCodes _DESCR_ _LIC_ _DUMMY_ _RC_ _PackageFileref_ additionalContent + packageHashF packageHashC +; %let zipReferrence = _%sysfunc(datetime(), hex6.)_; +%let zipReferrenceV = _%sysfunc(datetime(), hex6.)V; %let filesWithCodes = WORK._%sysfunc(datetime(), hex16.)_; %let _DESCR_ = _%sysfunc(datetime(), hex6.)d; %let _LIC_ = _%sysfunc(datetime(), hex6.)l; @@ -1816,7 +1833,7 @@ DESCRIPTION END: | +-004_format [one file one format, | | option LIB= should be: work.&packageName.format - | | (literally with macrovariable name and "format" sufix)] + | | (literally with macrovariable name and "format" suffix)] | | | +-efg.sas [a file with a code creating format EFG and informat EFG] | @@ -1858,7 +1875,7 @@ DESCRIPTION END: | +-abc.sas [a file with a code creating CAS-L user defined function ABC, _without_ "Proc CAS" header] | +-012_kmfsnip [one file one KMF-abbreviation snippet, - | | code snipped propper tagging] + | | code snipped proper tagging] | | | +-abc.sas [a file with a KMF-abbreviation snippet ABC, _with_ proper tagging, snippets names are in low-case] | @@ -2189,7 +2206,7 @@ title6 "MD5 hashed fileref of package lowcase name: &_PackageFileref_."; title8 "Required SAS packages: %qsysfunc(compress(%superq(packageReqPackages),%str(%'%")))" ; /* " */ %end; -footnote1 "SAS Packages Framework, version 20231123"; +footnote1 "SAS Packages Framework, version 20231210"; proc print data = &filesWithCodes.(drop=base folderRef fileRef rc folderid _abort_ fileId additionalContent); run; @@ -2910,7 +2927,7 @@ data _null_; %end; put +(-1) '`.;''' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' / - ' !! '' %put with the SAS Packages Framework version 20231123.;''' / + ' !! '' %put with the SAS Packages Framework version 20231210.;''' / ' !! '' %put ****************************************************************************;''' / ' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %end;''' ; @@ -3054,11 +3071,11 @@ data _null_; ''' %put This is help for the `' "&packageName.IML" '` macro; '' !!' / ''' %put Parameters (optional) are the following:; '' !!' / - ''' %put - `list` indicates if the list of loaded moduls should be displayed,; '' !!' / + ''' %put - `list` indicates if the list of loaded modules should be displayed,; '' !!' / ''' %put %str( )when set to the value of `1` (the default) runs `SHOW MODULES%str(;)`,; '' !!' / ''' %put %str( )when set to the value of `HELP` (upcase letters!) displays this help message.;'' !!' / - ''' %put - `resetIMLstorage` indicates if to reset default moduls storage,; '' !!' / + ''' %put - `resetIMLstorage` indicates if to reset default modules storage,; '' !!' / ''' %put %str( )when set to `1` (the default) runs `RESET STORAGE = WORK.IMLSTOR%str(;)`.; '' !!' / ''' %put - `err` [technical] indicates message type in case of missing modules catalog,; '' !!' / @@ -3075,7 +3092,7 @@ data _null_; %end; put +(-1) '`.; '' !!' / ''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !!' / - ''' %put with the SAS Packages Framework version 20231123.; '' !! ' / + ''' %put with the SAS Packages Framework version 20231210.; '' !! ' / ''' %put ****************************************************************************; '' !! ' / ''' %GOTO theEndOfTheMacro; '' !! ' / ''' %end; '' !! ' / @@ -3831,25 +3848,25 @@ data _null_; put 'put @5 "' CUROBS +(-1) '." @10 "' type '" @21 "' fileshort '";'; end; - %if %bquote(&packageRequired.) ne %then + %if %superq(packageRequired) ne %then %do; length packageRequired $ 32767; packageRequired = symget('packageRequired'); - put ' length req $ 64; '; + put ' length req $ 256; '; put ' put ; put " Required SAS Components: "; '; put ' do req = ' / packageRequired / ' ; '; - put ' put @5 req; '; + put ' put @3 "-" @5 req; '; put ' end ; '; %end; - %if %bquote(&packageReqPackages.) ne %then + %if %superq(packageReqPackages) ne %then %do; length packageReqPackages $ 32767; packageReqPackages = symget('packageReqPackages'); - put ' length req $ 64; '; + put ' length req $ 256; '; put ' put ; put " Required SAS Packages: "; '; put ' do req = ' / packageReqPackages / ' ; '; - put ' put @5 req; '; + put ' put @3 "-" @5 req; '; put ' end ; '; %end; @@ -3861,7 +3878,9 @@ data _null_; put "put @3 'localization (only if additional content was deployed during the installation process).';" / "put ;"; %end; - put 'put "***"; put "* SAS package generated by generatePackage, version 20231123 *"; put "***";'; + put 'put " " / @3 "--------------------------------------------------------------------" / " ";' + / 'put @3 "*SAS package generated by SAS Package Framework, version `20231210`*";' + / 'put " " / @3 "--------------------------------------------------------------------";'; put 'run; ' /; @@ -3904,6 +3923,7 @@ data _null_; when (upcase(type) =: "IMLMODULE" ) fileshort2 = cats("'", fileshort, "()'" ); when (upcase(type) =: "PROTO" ) fileshort2 = cats("'", fileshort, "()'" ); when (upcase(type) =: "FORMAT" ) fileshort2 = cats("'$", fileshort, ".'" ); + when (upcase(type) =: "CASLUDF" ) fileshort2 = cats("'", fileshort, "()'" ); otherwise fileshort2 = fileshort; end; strX = catx('/', folder, order, type, file, fileshort, fileshort2); @@ -4210,20 +4230,22 @@ filename &zipReferrence. clear; set sashelp.vfunc(keep=fncname); where fncname = "HASHING_FILE"; call execute(' - data the_SHA256_hash_id;' !! + data work.the_SHA256_hash_id;' !! /* F - file */ " SHA256 = 'F*' !! HASHING_FILE('SHA256', pathname('&zipReferrence.','F'), 0); " !! ' TYPE="F"; ' !! ' put / @7 SHA256= / " "; output; ' !! + ' call symputX("packageHashF",SHA256,"L");' !! /* C - content */ " SHA256 = 'C*' !! HASHING_FILE('SHA256', '&zipReferrence.', 4); " !! ' TYPE="C"; ' !! ' put / @7 SHA256= / " "; output; ' !! + ' call symputX("packageHashC",SHA256,"L");' !! ' label ' !! ' SHA256 = "The SHA256 hash digest for package &packageName.:" ' !! ' TYPE= "Type of hash digest / F = file / C = content"; ' !! 'run;'); - call execute('proc print data = the_SHA256_hash_id noobs label split="/"; run;'); + call execute('proc print data = work.the_SHA256_hash_id noobs label split="/"; run;'); stop; run; options ¬esSourceOptions.; @@ -4232,7 +4254,7 @@ filename &zipReferrence. clear; /*-+++++++++++++++++++++++-*/ /* verify if there were errors while package content creation */ -%if %bquote(&createPackageContentStatus.) ne 0 %then +%if %superq(createPackageContentStatus) ne 0 %then %do; %put ERROR- ** [&sysmacroname.] **; %put ERROR: ** ERRORS IN PACKAGE CONTENT CREATION! **; @@ -4787,6 +4809,269 @@ options "elenmax_tmp.; /* if you do not want any test to be executed */ %NOTESTING: +/* generate MarkDown documentation file */ +/* check param value */ +%if %superq(markdownDoc) NE 1 %then %let markdownDoc=0; +/* if true then execute */ +%if %superq(markdownDoc)=1 %then +%do; + %if %superq(createPackageContentStatus) NE 0 %then + %do; + %put ERROR- ** [&sysmacroname.] **; + %put ERROR: ** ERRORS IN PACKAGE CONTENT CREATION! **; + %put ERROR- ** NO MARKDOWN DOCUMMENTATION WILL BE GENERATED. **; + %GOTO NOmarkdownDoc; + %end; +/*= generate MarkDown documentation START =================================================================================*/ +%put NOTE-; +%put NOTE: Preparing markdown documentation file.; +%put NOTE- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^; +%put NOTE-; + +%local MarkDownOptionsTmp; +%let MarkDownOptionsTmp = + %sysfunc(getoption(notes)) %sysfunc(getoption(source)) msglevel=%sysfunc(getoption(msglevel)); +options NOnotes NOsource msglevel=N; + +filename &zipReferrence. "&filesLocation./%lowcase(&packageName.).md"; +filename &_PackageFileref_. ZIP "&filesLocation./%lowcase(&packageName.).zip"; + +data &filesWithCodes.markdown; + /* break if no data */ + if NOBS = 0 then stop; + + file &zipReferrence. encoding = &packageEncoding.; + put "# Documentation for the `&packageName.` package."; + + length packageLicense packageGenerated $ 64 + packageTitle packageAuthor packageMaintainer $ 4096 + packageHashF packageHashC $ 128 + ; + packageLicense=symget("packageLicense"); + packageTitle=symget("packageTitle"); + packageGenerated=symget("packageGenerated"); + packageAuthor=symget("packageAuthor"); + packageMaintainer=symget("packageMaintainer"); + packageHashF=symget("packageHashF"); + packageHashC=symget("packageHashC"); + drop package:; + + put " " / "---" / " " + / "### Version information:" + / " " + / ' *' packageTitle +(-1)'* ' + / " " + / "- Package: &packageName." + / "- Version: &packageVersion." + / "- Generated: " packageGenerated + / "- Author(s): " packageAuthor + / "- Maintainer(s): " packageMaintainer + / "- License: " packageLicense + / "- File SHA256: `" packageHashF +(-1) "` for this version" + / "- Content SHA256: `" packageHashC +(-1) "` for this version" + / " " / "---" / " "; + + put "# The `&packageName.` package, version: `&packageVersion.`;" + / " " / "---" / " "; + + do until (EOF); + infile &_PackageFileref_.(description.sas) end = EOF; + input; + if upcase(strip(_infile_)) =: "DESCRIPTION END:" then printer = 0; + if printer then put _infile_; + if upcase(strip(_infile_)) =: "DESCRIPTION START:" then printer = 1; + end; + + put " " / "---" / " "; + + %if %superq(packageRequired) ne %then + %do; + put " " / "---" / " "; + length req $ 256; + put "Required SAS Components: "; + do req = &packageRequired. ; + put @3 "-" @5 req; + end ; + %end; + + %if %superq(packageReqPackages) ne %then + %do; + put " " / "---" / " "; + length req2 $ 256; + put "Required SAS Packages: "; + do req2 = &packageReqPackages.; + put @3 "-" @5 req2; + end ; + %end; + + put " " / "---" / " "; + + %if %superq(additionalContent) NE %then + %do; + put " " / "---" / " "; + put 'Package contains additional content, run: `%loadPackageAddCnt(' "&packageName." ')` to load it' + / "or look for the `%lowcase(&packageName.)_AdditionalContent` directory in the `packages` fileref" + / "localization (only if additional content was deployed during the installation process)."; + %end; + + put " " / "--------------------------------------------------------------------" / " " + / "*SAS package generated by SAS Package Framework, version `20231210`*" + / " " / "--------------------------------------------------------------------" / " "; + + put "# The `&packageName.` package content"; + put "The `&packageName.` package consists of the following content:"; + EOFDS = 0; + do until(EOFDS); + /* content is created during package creation */ + set &filesWithCodes. end = EOFDS nobs = NOBS curobs = CUROBS; + if upcase(type) in: ('TEST') then continue; /* exclude tests */ + + type2=type; + length link $ 256; + link=catx("-",compress(fileshort,,"KAD"),type,CUROBS); + select; + when (upcase(type) =: "MACRO" ) fileshort2 = cats('`%', fileshort, "()`"); + when (upcase(type) =: "FORMAT" ) do; fileshort2 = cats("`$", fileshort, ".`"); type2='format/informat'; end; + when (upcase(type) =: "FUNCTION" ) do; fileshort2 = cats("`", fileshort, "()`"); type2='function'; end; + when (upcase(type) =: "IMLMODULE" ) fileshort2 = cats("`", fileshort, "()`"); + when (upcase(type) =: "PROTO" ) fileshort2 = cats("`", fileshort, "()`"); + when (upcase(type) =: "CASLUDF" ) fileshort2 = cats("`", fileshort, "()`"); + otherwise fileshort2 = cats("`", fileshort, "`"); + end; + + put @1 CUROBS +(-1) '. [' fileshort2 type2'](#' link ')'; + output; + end; + + put " " / " "; + CUROBS+1; + put @1 CUROBS +(-1) '. [License note](#license)'; + put " " / "---" / " "; + + putlog "Doc. note with general information ready."; + stop; +run; + +/* loop through content and print info to the MD file */ +data _null_; + if 0 = NOBS then stop; + do until(EOFDS); + set &filesWithCodes.markdown end = EOFDS nobs = NOBS curobs=CUROBS; + length memberX $ 1024; + memberX = cats("_",folder,".",file); + /* inner data step in call execute to read each embedded file */ + call execute("data _null_; "); + call execute(" file &zipReferrence. encoding = &packageEncoding. MOD; "); + call execute(' put ''## ' !! catx(" ",fileshort2,type2) !! ' ######'';'); + call execute(' infile &_PackageFileref_.(' || strip(memberX) || ') end = EOF; '); + call execute(" printer = 0; "); + call execute(" do until(EOF); "); + call execute(" input; length _endhelpline_ _starthelpline_ $ 32767; "); + call execute(" _endhelpline_ = upcase(reverse(strip(_infile_))); "); + call execute(" if 18 <= lengthn(_endhelpline_) AND _endhelpline_ + =: '/*** DNE PLEH ***/' then printer = 0; "); /* ends with HELP END */ + call execute(" if printer then put _infile_; "); + call execute(" _starthelpline_ = upcase(strip(_infile_)); "); + call execute(" if 20 <= lengthn(_starthelpline_) AND _starthelpline_ + =: '/*** HELP START ***/' then printer = 1 ; "); /* starts with HELP START */ + call execute(" end; "); + call execute(' put " " / "---" / " "; '); + call execute(' putlog ''Doc. note ' !! cats(CUROBS) !! ' for ' !! catx(" ",fileshort2,type2) !! ' ready.'';'); + call execute(" stop; "); + call execute("run; "); + + end; + stop; +run; + +/* license info */ +data _null_; + file &zipReferrence. encoding = &packageEncoding. MOD; + putlog "Doc. note with license ready."; + put " " / "---" / " " + / '# License ######' / " " + ; + do until (EOF_L); + infile &_PackageFileref_.(license.sas) end = EOF_L; + input; + put _infile_; + end; + put " " / "---" / " "; + stop; +run; + +options &MarkDownOptionsTmp.; +%put NOTE: Markdown file generated.; +filename &zipReferrence. list; +%put NOTE- ; + +options NOnotes NOsource msglevel=N; + +filename &zipReferrence. clear; +filename &_PackageFileref_. clear; +options &MarkDownOptionsTmp.; + +/* to make archiving easier a copy of the package zip file + with the version in the name is created */ +%if %superq(easyArch) NE 1 %then %let easyArch=0; + +%if %superq(easyArch) = 1 %then +%do; + %put NOTE-; + %put NOTE: Creating files with version in the name.; + %put NOTE- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^; + %put NOTE-; + + %local notesSourceOptions; + %let notesSourceOptions = %sysfunc(getoption(notes)) %sysfunc(getoption(source)); + options NOnotes NOsource; + + /* zip */ + filename &zipReferrence. "&filesLocation./%lowcase(&packageName.).zip" lrecl=1 recfm=n; + filename &zipReferrence. list; + filename &zipReferrenceV. "&filesLocation./%lowcase(&packageName.)_&packageVersion._.zip" lrecl=1 recfm=n; + filename &zipReferrenceV. list; + data _null_; + rc = fcopy("&zipReferrence.", "&zipReferrenceV."); + length rctxt $ 32767; + rctxt = sysmsg(); + if rc then + do; + put "ERROR: An error " rc "occurred during creation of %lowcase(&packageName.)_&packageVersion._.zip file."; + put rctxt; + end; + else put "Creating %lowcase(&packageName.)_&packageVersion._.zip file."; + run; + filename &zipReferrence. clear; + filename &zipReferrenceV. clear; + + /* md */ + filename &zipReferrence. "&filesLocation./%lowcase(&packageName.).md" lrecl=1 recfm=n; + filename &zipReferrence. list; + filename &zipReferrenceV. "&filesLocation./%lowcase(&packageName.)_&packageVersion._.md" lrecl=1 recfm=n; + filename &zipReferrenceV. list; + data _null_; + rc = fcopy("&zipReferrence.", "&zipReferrenceV."); + length rctxt $ 32767; + rctxt = sysmsg(); + if rc then + do; + put "ERROR: An error " rc "occurred during creation of %lowcase(&packageName.)_&packageVersion._.md file."; + put rctxt; + end; + else put "Creating %lowcase(&packageName.)_&packageVersion._.md file."; + run; + filename &zipReferrence. clear; + filename &zipReferrenceV. clear; + + options ¬esSourceOptions.; +%end; +/*= generate MarkDown documentation END =================================================================================*/ +%NOmarkdownDoc: +%end; + + +/* clean temporary files */ proc sql; drop table &filesWithCodes.; @@ -4794,6 +5079,11 @@ proc sql; %do; drop table &filesWithCodes.addCnt; %end; + + %if %sysfunc(exist(&filesWithCodes.markdown)) %then + %do; + drop table &filesWithCodes.markdown; + %end; quit; /* turn on the original value of the note about quoted string length */ @@ -4882,7 +5172,7 @@ TODO: (in Polish) */ )/secure /*** HELP END ***/ -des = 'Macro to load multiple SAS packages at one run, version 20231123. Run %loadPackages() for help info.' +des = 'Macro to load multiple SAS packages at one run, version 20231210. Run %loadPackages() for help info.' parmbuff ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then @@ -4898,7 +5188,7 @@ parmbuff %put ### This is short help information for the `loadPackageS` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro wrapper for the loadPackage macro, version `20231123` #; + %put # Macro wrapper for the loadPackage macro, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -4939,7 +5229,7 @@ parmbuff %put %nrstr( %%include packages(SPFinit.sas); %%* enable the framework; ); %put ; %put %nrstr( %%installPackage(SQLinDS DFA) %%* install packages from the Internet; ); - %put %nrstr( %%loadPackageS(SQLinDS, DFA) %%* load packags content into the SAS session; ); + %put %nrstr( %%loadPackageS(SQLinDS, DFA) %%* load packages content into the SAS session; ); %put ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; %put #################################################################################; %put ; @@ -4995,7 +5285,7 @@ parmbuff hashing_file() function, SAS 9.4M6 */ )/secure /*** HELP END ***/ -des = 'Macro to verify SAS package with the hash digest, version 20231123. Run %verifyPackage() for help info.' +des = 'Macro to verify SAS package with the hash digest, version 20231210. Run %verifyPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -5010,7 +5300,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20231123. Run % %put ### This is short help information for the `verifyPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to verify SAS package with it hash digest, version `20231123` #; + %put # Macro to verify SAS package with it hash digest, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -5189,7 +5479,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20231123. Run % */ )/secure /*** HELP END ***/ -des = 'Macro to preview content of a SAS package, version 20231123. Run %previewPackage() for help info.' +des = 'Macro to preview content of a SAS package, version 20231210. Run %previewPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -5204,7 +5494,7 @@ des = 'Macro to preview content of a SAS package, version 20231123. Run %preview %put ### This is short help information for the `previewPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get previwe of a SAS packages, version `20231123` #; + %put # Macro to get previwe of a SAS packages, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -5331,7 +5621,7 @@ des = 'Macro to preview content of a SAS package, version 20231123. Run %preview when empty the "packages" value is used */ )/secure /*** HELP END ***/ -des = 'Macro to list directories pointed by "packages" fileref, version 20231123. Run %extendPackagesFileref(HELP) for help info.' +des = 'Macro to list directories pointed by "packages" fileref, version 20231210. Run %extendPackagesFileref(HELP) for help info.' ; %if %QUPCASE(&packages.) = HELP %then @@ -5347,14 +5637,14 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20231123 %put ### This is short help information for the `extendPackagesFileref` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list directories pointed by 'packages' fileref, version `20231123` #; + %put # Macro to list directories pointed by 'packages' fileref, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; %put # data, etc.) wrapped up together and embedded inside the zip. #; %put # #; %put # The `%nrstr(%%extendPackagesFileref())` macro lists directories pointed by #; - %put # the packages fileref. It allows to add new dierctories to packages folder list. #; + %put # the packages fileref. It allows to add new directories to packages folder list. #; %put # #; %put #### Parameters: #; %put # #; @@ -5448,7 +5738,7 @@ filename packages list; is provided in required version */ )/secure /*** HELP END ***/ -des = 'Macro to load additional content for a SAS package, version 20231123. Run %loadPackageAddCnt() for help info.' +des = 'Macro to load additional content for a SAS package, version 20231210. Run %loadPackageAddCnt() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -5464,7 +5754,7 @@ minoperator %put ### This is short help information for the `loadPackageAddCnt` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* additional content for a SAS package, version `20231123` #; + %put # Macro to *load* additional content for a SAS package, version `20231210` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #;