From 9168f4b4f0627ede74d80beaed64a377e0a38dfd Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Mon, 17 Apr 2023 14:57:29 +0200 Subject: [PATCH] The BasePlus package [ver. 1.20.0] The BasePlus package [ver. 1.20.0] - New utility macro `%repeatTxt()` added. - Documentation updated. --- README.md | 6 +- packages/README.md | 6 +- packages/SHA256_for_packages.txt | 3 + packages/baseplus.md | 200 +++++++++++++++++++++++-------- packages/baseplus.zip | Bin 253537 -> 255097 bytes 5 files changed, 158 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 2d658af..a431823 100644 --- a/README.md +++ b/README.md @@ -224,7 +224,7 @@ SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B45 [MacroArray in SASPAC](https://github.com/SASPAC/macroarray "MacroArray in SASPAC") -- **BasePlus**\[1.19.1\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.20.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -245,8 +245,10 @@ format x bool.; %bpPIPE(ls -la ~/) %dirsAndFiles(C:\SAS_WORK\,ODS=work.result) + +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); ``` -SHA256 digest for BasePlus: F*B5BF05531BF78DCEBC436BD93311FED0436D83AA3D106ABFBAD96B04C7D63DF2 +SHA256 digest for BasePlus: F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6 [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") diff --git a/packages/README.md b/packages/README.md index 6574034..9a328e9 100644 --- a/packages/README.md +++ b/packages/README.md @@ -86,7 +86,7 @@ SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B45 --- -- **BasePlus**\[1.19.1\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.20.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -107,8 +107,10 @@ format x bool.; %bpPIPE(ls -la ~/) %dirsAndFiles(C:\SAS_WORK\,ODS=work.result) + +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); ``` -SHA256 digest for BasePlus: F*B5BF05531BF78DCEBC436BD93311FED0436D83AA3D106ABFBAD96B04C7D63DF2 +SHA256 digest for BasePlus: F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6 [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt index d1ae840..3f567b5 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20230417 */ +BasePlus: F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6 + /* 20230411 */ BasePlus: F*B5BF05531BF78DCEBC436BD93311FED0436D83AA3D106ABFBAD96B04C7D63DF2 DFA: F*924711C77E413B8CFC18336DDA2293A9F5294D02E267C1BB7BC876B4AF0AABE4 diff --git a/packages/baseplus.md b/packages/baseplus.md index 1d28618..55c4433 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -51,12 +51,13 @@ * [`%LVarNmLab()` macro](#lvarnmlab-macro) * [`%bpPIPE()` macro](#bppipe-macro) * [`%dirsAndFiles()` macro](#dirsandfiles-macro) + * [`%repeatTxt()` macro](#repeattxt-macro) * [License](#license) --- -# The BasePlus package [ver. 1.19.1] ############################################### +# The BasePlus package [ver. 1.20.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -231,60 +232,67 @@ run; %dirsAndFiles(C:\SAS_WORK\,ODS=work.result) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 14** Text repetition: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- Package contains: -1. macro bppipe -2. macro deduplistc -3. macro deduplistp -4. macro deduplists -5. macro deduplistx -6. macro dirsandfiles -7. macro functionexists -8. macro getvars -9. macro ldsn -10. macro ldsnm -11. macro lvarnm -12. macro lvarnmlab -13. macro qdeduplistx -14. macro qgetvars -15. macro qzipevalf -16. macro raincloudplot -17. macro symdelglobal -18. macro unziplibrary -19. macro zipevalf -20. macro ziplibrary -21. format bool -22. format boolz -23. format ceil -24. format floor -25. format int -26. functions arrfill -27. functions arrfillc -28. functions arrmissfill -29. functions arrmissfillc -30. functions arrmisstoleft -31. functions arrmisstoleftc -32. functions arrmisstoright -33. functions arrmisstorightc -34. functions bracketsc -35. functions bracketsn -36. functions catxfc -37. functions catxfi -38. functions catxfj -39. functions catxfn -40. functions deldataset -41. functions semicolonc -42. functions semicolonn -43. format brackets -44. format semicolon -45. proto qsortincbyprocproto -46. functions frommissingtonumberbs -47. functions fromnumbertomissing -48. functions quicksort4notmiss -49. functions quicksorthash -50. functions quicksorthashsddv -51. functions quicksortlight +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro ldsn +10. macro ldsnm +11. macro lvarnm +12. macro lvarnmlab +13. macro qdeduplistx +14. macro qgetvars +15. macro qzipevalf +16. macro raincloudplot +17. macro repeattxt +18. macro symdelglobal +19. macro unziplibrary +20. macro zipevalf +21. macro ziplibrary +22. format bool +23. format boolz +24. format ceil +25. format floor +26. format int +27. functions arrfill +28. functions arrfillc +29. functions arrmissfill +30. functions arrmissfillc +31. functions arrmisstoleft +32. functions arrmisstoleftc +33. functions arrmisstoright +34. functions arrmisstorightc +35. functions bracketsc +36. functions bracketsn +37. functions catxfc +38. functions catxfi +39. functions catxfj +40. functions catxfn +41. functions deldataset +42. functions semicolonc +43. functions semicolonn +44. format brackets +45. format semicolon +46. proto qsortincbyprocproto +47. functions frommissingtonumberbs +48. functions fromnumbertomissing +49. functions quicksort4notmiss +50. functions quicksorthash +51. functions quicksorthashsddv +52. functions quicksortlight + Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it or look for the baseplus_AdditionalContent directory in the Packages fileref @@ -293,7 +301,7 @@ localization (only if additional content was deployed during the installation pr * SAS package generated by generatePackage, version 20230411 * The SHA256 hash digest for package BasePlus: -`F*B5BF05531BF78DCEBC436BD93311FED0436D83AA3D106ABFBAD96B04C7D63DF2` +`F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6` --- # Content description ############################################################################################ @@ -4123,10 +4131,96 @@ The basic syntax is the following, the `<...>` means optional parameters: %dirsAndFiles(%sysfunc(pathname(WORK))/noSuchDir,ODS=work.result12,details=1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + +## >>> `%repeatTxt()` macro: <<< ####################### + +The repeatTxt() macro function allows to repeat `n` +times a `text` string separated by string `s=`. + +The repeatTxt() returns unquoted value [by %unquote()]. + +See examples below for the details. + +The `%repeatTxt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + text + <,n> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `text` - *Required*, a text to be repeated. + +2. `n` - *Required/Optional*, the number of repetitions. + If missing then set to `1`; + +* `s = %str( )` - *Optional*, it is a separator between + repeated elements. Default value is space. +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of dataset name: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test5; + set + %repeatTxt(sashelp.cars, 5) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 2.** Simple repetition of data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +%repeatTxt(data _null_; set sashelp.cars; run;, 3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 3.** "Nice" output: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Macroquote a text with commas: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + %str(proc sql; create table wh as select weight,height from sashelp.class; quit;) + ,3 +) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Empty `n` repeats `text` one time: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test1; + set + %repeatTxt(sashelp.cars) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** Dynamic "formatting": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%macro printWork(); + %let work=%sysfunc(pathname(work)); + %put +%repeatTxt(~,%length(&work.)+5,s=)+; + %put {&=work.}; + %put +%repeatTxt(~,%length(&work.)+5,s=)+; +%mend printWork; + +%printWork() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --- diff --git a/packages/baseplus.zip b/packages/baseplus.zip index 5bb6f17d130388da18c8a5f4b587adf948f60b0d..4eec6fa2f2f0237eb5372a270ae243d08a4c26ac 100644 GIT binary patch delta 15840 zcmZvD1z4Otv-ZN`?(XhRaf)k8ad-FP4vV`L3X3}hiqirGio08Jmm)3h6#EzYo^$^9 zJ11PrHB9b%GLt8ngeTdJ@94J!=mg4&Ko}eV0Du7Ka{Hj!P7z9)4i5mB5`7?G0eLR+ z<2{ZE+(!r%?QGT%c)bfeRg;|lUX)|Gc0II1>u_~2 zb`b1p8tPWeEOKptg3tKA3m5tQ!bh;8bRlBNoAYx1>7P@|X#_&y+-N0-;`nffP(}RE zD1ACuV`56i!Kl>cU8W{5b53aXXdu`8dbv*&Ni#hz`_x)Qh?y8Sm%yhyeOoI_I$Tb5 znP0Lu%*6d%la0_>u*7S_+vb8+R9BJ$)v1d9bXXxz_w6~8*p%;h$nrp2}+z=5I0(u!?1%?O=3!*N$M4u6Day4uW{d4UsOGrlte^2-Jm4P*98Ju z#?dc5XP3OwG`vnuQzB|GrXUhU;4Y?Bb2I0@3zvB9pEir0x7LkUqA^8q)KK)D4{xeG z1$KXk{49MnV(d$&X(}Go)zU3@4v^aLEnp!pHFjVqgn z?2u~|q|h}vUI%@c5?gP6`|XVvD^{u4;x7b_;(60z9->B=cexF;a_JJNeAXwSZDV~3 zmR|g5YZDO+oT%q-hzY1c<3tNm+tvNU#cPeHdCilWRF(v>STKHW_Km5z$J4ugsIe%y zC90hD1VJIQ$f7^W`$JV~9jJ~9Yf*mIr;Wv)mt|B#Vg4fj>I9e5s&XNoL8z~_{B^x( zZ&P0VtJA^nu(f=_$xWq`#gM1FA*I5{T`dhAm+!Q-+lJniA?{P1AhZOPl!^)-zHQF| z|35+#DAYmzZ0zP3$grY;g&a3FZq4$M zIUFYD9Zu{cD0Hf$=?jQ?`kAQwDnH{*#8JtK6MpcAnl7(5MwgLD%Aj`ik@6lfDf+Y7 zr}%rkcdCUICVTIZ04iHr-)_Mb5u9Pn(S*1)I7`~qca}xN-P(yCUXhyE|3v`7H=VVX5=rI6`%5wmg zXDL2AB%+jYcF+^Op*~qsMn=o?*n>yq2i#$jOq@7Qic)UY((Bwsi#`6fXzyD?Jb+mqfayGns2-MHCz92uQf= zwY(S*M=XJh#mV~J%zOUXoD*snu439uEn^QX=eg!f!Es$%mDIlAVAc%xEY`~Opg!nO zAQ60F22GvCWP<~-8pANWxLpUPUjlTsS(61ycEgxs^nSF`P7l4mgQ}D-d%)T z5c{yE02IiT-7_IwIyUL!gX{+nl|XDOAPf30_)cPKwZFR-YwVxzFBG;<@9pJQ1mYPw45-STY4K%mb-Iw4s5#P z{F$S~^x7TF?r{mwTfO}KhM!;i7ruc-uj!jAw-$a--qnSRs3L~2sb6~fY^!>s#^QQF zs(s?&?=U)A7mltm22>{&lNlh5Z6#j%aAYGKStzHKJo7wVC^2ABFDOUqskx%xzMxJ6 z#ldO$*c}cZ4Pde%8EqxQO=R^kq(kv0uK$#(+LAy$AobJihiN1OGk?o8M$u(2oFIuZ ztZ_q-ug%=I5sfN1`YveHQT=mxSWfh!SAg-lG|a;Mi@(Nj46t7Wu-P&3GAt$8Yy znowtvQrg0U={0=l0zXwhnVo-LiO#>+-l54 z@%}J{Yj0nyE8e*d!Z4nBXCX~?c{=g&-CLLxJer!H3%y*dw=T2yxY?U~@4<7&poght zCaMAb#^gQH!@h;>-v%CVv#fujf3v(23PwUUBq)f>1IjgF;QS~zvkO>EU!y%#U?oxCLvK+7kWdW8Mg0{-P2d@D5K^GY6N zQpyIC9Du|FdTZAuh7o=o_84LE4v8qqx@@l))4tZ4k%qN((EJNs$Q@=~3(no|7R?Wa z3Ty@h^TX$&+}&bfXeK4CA6sCTR{>5Ru?|$~SN&16W9|d%y~Jtf5ylc&C!@9YSwk>u zP>IigWWeA& z^iVRAvhxXP`oV2zHM(Et^%qLEudNjy9pWBC$%Gg0ir#3Qu?uxE&(b4kl>sgh)xH}?8AG^NxzT4cCqM4!DW1# zIr~|#aK7$$nY|s0#i!P6p;y5v(jkCahKBRs#|uBDDJGZ^E+{i>k|S4k54>}}SdG^a zB)Em74TXvwAC!DC61o&55OmM1Hfjxk#r56k8a>Q&g&y5|{Vv~*F~dEjYY`XZ*uK?0ReU+0@eT>De0Rc_rTgFU4U51cCZKE*tJ z_@Q)O9u+@&lN^m9VBjb9C$b(^o*z&5!s1L$UtYPt$Jx-Q`Hys>h2bt;>A95 z?8pDq#DH?e`XGs;M6}r8h`r-rn~b#EgoV*cVasz5dLk8sLmPJMBnr9<&cl{=XCV-n z4TT>-*rh|r5r1Xhxn(g>;mXc?bJ!?gAJ#T8IigMr@-I?Id0cz=eWkNoUH;fX{$<%# zz3H%#;AkZA7|FYj&?tnNFSOAK@3lbl?*is-e9_dfeAr16IZardD;X>Vj5Cl?HR${9 zik++0CKAPUTdW>J(9yVkYQ+!e-ZbJ-ngJ3zN`;=v&CsZploEaq!p-^HNHcc)el|%G zq4&<#Ai~WFzn=Wz-h7Kl$#cBjCKTtKbIe`uCjN1Y$nz{Pf3qa6npqL9peL2(7epK= z1qB@UDzOiES;OLVJHq8sP1w>%xO`dipZV1#Dq!(rl9~5S(SkPuewJ_Ilzn{9nJgtL zBazvWxhWOpl^jA8E;9;UY`nv@-vPj)a-xq`v!ZaKqW?n=d;WTmrGrKzNWK&6&Dj*7 zM6H&}DP%!?9YdZ_SPSU~r5i0DC5naiH#}=@cmWKHD5{Z?0_ju#A#tz`|yaw=}}G76A|&7-*Fh! ze%RBc7l`pInZyE#ILpcxOsKdEP_#<=fX#OI_T2&Bb?ulIO26(R@7#+3vN#pLj?Lq z`}>6*D6HYdY3O}{4_*N3qPjTIFMsaRxzDY$VYu^aJ+-#{%S#PQq@c+^VrCQ9=K9+rw)5DcQG*>BIHCU+= zongWs>MnG0pFUnj)pa$#pn{clG}Ur+A+B%7WxZ~!@BuC5t`l>YV6{$ocO6)4u!ZoVipn9=#QtMs`*e}TCKK}BJtFevQWU0ATKN?M z$`3jbmJ^j%0SYcrX>pMRZysnh<7;C5!_RLGR|c2CR+j?uleXmTr{=`vq~76p_@{ zymBhY-joXd+4}ZX`)A*I0WXXYfvzI5*0@hqPbz7RBz%nh=2U?I>Y=4McepD+_-KD{ zxL&x*7sgeMOf5Ha@xZhv|>@7;Ka=mW;yT_eh$$I*~B5PDEs z0f;-#iUlA9)t<0B8J zmhJT+50<$hFPC1Q+HyH~uSy_ldrU+~_{1Dwjo!lLBGFw+!_awp9b&L9a}CUJoK^k%+O1j8p6HR%Oo;?!e?Gh ze(F@}?oaKpZsB_`X8gJvl7@LrJr~wOQ#$6wKd#kknQU51eF*BZQXt`{*WNOIqaTXd zy9V4ZI`WXJW&C5z;wN(=TQWRz1=*NoX~7&3xhbp8}x zgI?vrgRr6s^1BQR_+#3f^?ly}@u2w1^!(cW>ir+DKH?W>Oy_y)0uyu7JP!I^IT90c zC~Xm%44}usC+a^6&V1nFR<_E*e1}8ECc2h|TIKk@S?dAH?_as(-Lu_diTfe8LO6jNg`6+}y;GjeoaoNP#X&lZYVMJFB;mOV%G9D<*J{Pl1KCShr@iBi=j&yp}QsZaR3QWg_`cTR{jH1oo*UrN3g>g1Ub*{>5+-0rBl`f(>|@&-j3#B#{cQ*qmwoLY=;;$hB!7$P=^dD06i&;avAoJNPgDO^A_ z#k90aWO&nC!$BS-RC}zGGWS0Ex9|ItsP!+~M0w}R3d`N=V2;EFj>9>!j^WXpyOD%P z-!Rx5FLUOjZ&z&Jd{u=0d|Kk=lzTJJ{q47j?zeuLuT4cxh$8a3s;CA0tEJtVP`_06 zTv_+$^rc=&6Dcy`gE%J_a}k-nksh{kdp@T*aj)jgd}3z$);oEEpwCOv?ryGLf^T^qZR?b6pgl z-H71?LGM)YRF1-eWEzGRpR8G{Z;3CSJv`d`T{8t5z>&GAMjXeGwG+G(=G&&8GQO9d%qUwN1=yA# z7&~Rkodtj#60+8vS%s_UB_%W9C8BY0)}{jvdlGbG*516OYf+B~9j3)>7$ef_xi<=- zE)vYp8HnV~>XNQ7Uj8UP7{DrBDZW8Tt`no zumC^MW&<3!I&r(X6}Wj-$zjnTj5%t}b~Z4RM0yzCe#`;q<>!Zzo$30>e4ke7*?+Gb zn{9YL;(QP zG4L>^!hup?FPhOSk32eye>y~{X}TbjVKUfIFGiG%BX)X;l6=dtiTNwk|XQ;Rc}g~0jKLs z6eVwPlOIj{^MFd*qLGxzX927b9#DkAH_4zRn^^yoQa-o+0n#^Jode{Cw{Cu-BCKvn z@_Lw0_Yu?*WB92oxXr>hzo!r%Y6*C%$GK(@QWF&vm+It#g^kGN4+LpcrAx3w2{dS? z^}#`~ps9?~oUVN{ZP{tZ-cKQM4E$?p8+CozN`YSzBxlB8QCbIo((tz~1LVh73splZ z(e6lXTht^;B@~c!2r%EGJ{^DWw6#~o3j!q}Kv693m(*K0SH7%{I9kP|T;HJKfDi?x*t2EMUFQcayb0Fg}YWI2gHGvG= zyX^mUoZL=E%C#cDRTO^)=PVH9Xtk`bdWKCxPTp-@fzrRpRJVRR0tk>jB?olV`-o9Y z(0}YOdf4bsMkCh*4at#OYZWSK3Hf-G7sq}rzv}&7={Ritrek`Ij+&q_iO6bc!IDr@s|4VtpyhM zg_IJ(?ZBe#oo$}G%$DX)b3^eu@t@}3DHcjy>iUDt=Tbf_fJEmE)b5k#?6NoH_UqXN zGnyyg-+hT9qOpbd9wDEODL1rR-oO6wd(?R)*HIzZcV#@vy)6DUb9byTGi*%8@@Rii zy=?27ys5OTd*v0|d=8(cG7hh$nxTS%KSc;>pR%;zJhZ-s`!A~WD2Op%Fa#`~vZQug zlJenQ3)Z^?`-6I0d#$8fN>N7U9Om*^ctnPR{hTC=r|oPW%CE$JCzJz&%jf9c*;*7-@0WaI9wDjY1S)Nf~u@%YQordi0bLv=B;*3TYi}|+hm{T zbKR?=>eZGQ_e(0HX;CIPT+d}y&;@MFGKpYz63Q7A^B#Z{_W`;IW5T9VS>KDA2+kX` zVm(-wOxp_K_0WW4e~zr32Y}30cOrWg^V)Vx{^+u%h#zEC*_LI0Hn33XyU%Jdsazx1 zRJ3RjK=vpBYkVG7WHRD&lwU0biY`_r*v^{N;BY9BEE#|Nxm=d;!?9#$?vKvWWyKJ7 zN_@;?O?fOAtsI-K*UY|wTmSxAs``>{T94S&QRm&c=$nc|>oT|Wo`^v;+wX0&)L37f zq&@Rli42niDM_F&N|SRa$zW~6X|oxVJ1He(W5Dwgmv7yago)1hH7w|F zBNc>eIl6_NVRnrLpy-?5k2ody5j1;JN`Ce(=Qwe{?&LeA{+(C{4@_b2bMhriR-j@6 z{iy?NGnEW0G8Moxjgdh5litWNLp&?}5LOJ%*zoSx^+^z_&(M9!$;8lHvzS$KL zPW?*cu7_hb5w~N&(el1QXN~Op4_n&{o%M_woHk7@`-xY5Y#Luq^1~Vf!^B7GGh+FF z$O#^gRyr#QX$T9=HXmL(Bww?OtgK)6~=2L9hWd{xzj!iiff}QNgV*XI2uo4z0 zzT4@d?ShHLVs@pkkD*ItBQ2@%#5z?C^79p3>K6atbt~rkjUkmC$hdO66Opc%8ug*6 zWhH7OH7H0gU6#3>*|c^Fa9|4XumP+^L-{eIQhNWk*^1Z%dEH@eyHLZR>K1|FH6d5C#&3ZOdw9P`=2=et^Px4g|L-)5D zGd=4<;?`RVMZ4J|BDh^1+uaS8)8db*BFwgF77Li8%|j#&rdDOFrC02>xCCzxdqiaX zn5;s5;_mjCX#{+94&Us+oe!krfD-7X$#5!Lxi>^AtG~`%iP`w8v(0=6Edwd)pQD&$ zrh9Zn4V>|g&uv`DTIxiqM0nEEQ=wf8qRO{Pmv~6AJEJ##pC9v4m2H(`Q-oI~m73YW z8O|r+lb*9Q6NsWypy&mUn`JF_E+1Vi{;JQ?tbY4B9&JjMw!d0-7A@ZP1U_rz+#568 z*41lpOa{OBry(%!?~9qyd+)r|L#YSr$8BT6 zwpDemU%zQepIlf|TMi<**n8i1C=lZ}%66n4tQV>{v{pav#~eD{@0GWq#Uu*al-7X?+Y_y3G`)x_Hb^&TWGs(|iC+W^R%oF4J7EG_4E)3Z%HO(LW*Hs|9wnnitG zuQp8irA)*Yik9|0CRCC*d0LxWy~604eS)jh{K(hWB3Ur>OfLqDZv;me6!ee5z7cnO zWFv9swYcm$bft@NAg5S0u*nll zT*TH~b$EZZ%(0_vKYjIDF3Q>uJRW><4h68VD%)ZQLIf!Ja{Lz*h8^b2z-!LSJW1gwE^Csz2~^|UJqiNN z2=R2{SCmC*?4G#Lg>!#+-;wHD5XmxL7EK?6;5mpu3Jzgx&fYj#VR32w$WI}lnn5q0Xxw(fILVn% zWW2EB5t;D7vQbT+6PUszrf9(@T-Jq6nsX37&6M@ashPN~s%uWrZv_Qi^;cgT0ZWn? zw-eG^2bzsx3efVpJEqJGjFg5XHSU`xU%nI)1-P0dB9(m5yWTHK2opKEIrb#DmDDrB zwvOmku7MZ=5(q*R`9gEbdAMSU#I@y%qy`#}`=5J74EE*qQ*`tX6}EmseHv^fW~1Sn zhb;#||Q<^{<)dFOt-|uuHdJyU{$Lnw1=sWgwB^_>^u+g~k;W(`TP?{Iz zl6o=h2u9REd@Bf8D*zgZMpeEjwLjaY;?)o@^;lC&CdcG=qcjzHE$eul$V$ddBx!xs z9wA0ya3y{nvZ~t~Z^sA}1@pW_aiQ&TtXnloP=jP2EtlrNigQ=<$h9U8_a#wsdA!b$ zkPe6;9y%eECY6v`qo3vH6^nBU?X0%CRG~?2WL$V}0pz6hXVrNzZzCTS@}JLU9jRI{ zUObAbUF)5kL;|Y1Dqb@Y@CSatW_tTG#>e@iG`(1+oZ6g}N$uewDq753F{pz_xh!ed ztg)Gv)duGHrkUlTIQx-E34A46kNpD6<$aKG3hXL7*^~1d0{B6mnaaeX<}#7Xsp4TK z)<)}(`YQ?Xe;yyq6dWrjUDSMk)o6#5)5Y=O)# zwhka7*0>Kx%6O=&iFF>m`6JG$9sUU6444sm1lM!|ZH)A3*}IW?`P{+7aDD5t^*qy` z$!}CAm|PoOgO2V#`W;K`u zpe-SHA$vKVzZrnap6&WgjPWJKAwo5%7R+f+I8GWLF5*36I~!9@_vc&|H&R{sRb$!= zQ+ZR|@VeneXU(zl{Gz0!p-@duOUPvh*Ku;ico`9I?O6a3+|%*ExglAGHhMYN>(M_I zNN$6=ENr*7)LtgyA^ifu_;e#2SlFBDM$})!QxaI%f8rMf-A|oysVoj}x}pyV{M5<{ zx_3Ey@^2{j-)K(D!C!04GOVTP=2jS~&6z&DhyVBLwG0l~azg?DUU4NWvCx1V)RvmD z9>-9g#J3pTyC%M4>dLWs4h3C&6mT#`;=cA9=5K&@#9gY*O67Ps_0&o-+MchaEYri1 zU)|NQ(Ml?==W->ytPr4W1k;193Y8)_z_Q&Btq&qD7%bFWZB68@)ZO+TVxnqziRt7? z9d#gW^pE!z&OXDb_mTHSl%62}1UJ1_rE*sow^x_^v_{p(t~3!55!-?6Kq5Ax=-t&g z0*B3P%1P!EzDsLs=^uoNh9#c&Rnwrk2dA||^!Ru1*~#B8dbxZqy5ZiVoe^zkTaum3 zxU?cXT2nH#w!o46(y^ajdFXBQorL?k2~~(`;)gW~44xB6tiG||Ux)+26Wxl#^x1N( z!tC6r=H)@--~Zxef}J}iwt|h z%Gv$qQh(f1k^a!8)_s?!j)b{RcX{*elv0hz*ULw;RVwWFgYz^FhriiQaGk9}W%G%7 zZfwz5?FkYlz)$(*Mge;uf>FA!-GQJ<>Py>1%*`9~eQ7r8xXICyopNS|!90&u6gYER zst6ZirkI`7o%|f228@B-XH}%V_?DWF6qz3^jJwwz=CX5xy^*sS;H9+Qg1dZSRWug+7n0uBDl?P-^vJj+gPuq z&pl-Pd5go*V*~JYTv<0NQIB_eu`Ml{|10M21kcww7==q*1O1K>1g^tq{s6xN_b5(O zXudp(bfhaJSkhlCz^q$`w>Ms2obnK_`H)@T-k5(mNv6AR)1F6d`YEvIo_!~o&p&3v zAHO%PYoUY;#UXV66(nJBR-v3Eusq$a1@Jx9t{9rtCu zZnvh#tRkgCt|j@nRTufH2fbaXSJ9+8eOdh2cq*>U3Vr3rzd;&Dq+n#x-$@Uq@|n#7 zL&>I{gy$yWCGu_TsiBDKV8txF1WvLTT@!>YZmpncCTD-FU)c^xxh+}MW&B4!g0^>> z9dYT-2($O!zCM}({!}N`DwMe1;4CRO!cI~1P(=!fw|UCL9EV!fg1%Td`nLSkfGaZU za`E#Bf2xYj;0WYL`CtHoNx3tS`+a!?_9dai(D!ut+>&Q>~O+3w`HJ!cj+TEsA$!*`^+mGSX z`l!PzamG?JcUWgDGYZ?Cl!3#(7SAf%qZ7= zJ&%OH{Tt*?-_D{$qP$;SDw$;wDJtV)ZEMa+hgh?uGM34z#+L|{X)Re9Xkz5=4DKN& z+jIh?S0%-Mb|MPtkP|OiJ52fri+FwAk=LSq8sq+FR!F^`dB%ggH&d-v=)uKbfM_j_ z%lAj6XMsh_JKPq=C2z;ptyo0EddxS74fE{|tyZ9=W_DWAJrLj8qs`l-J>-v*1KHCu z=aIrw^xE=#!y|R=B_vjQ`Q3LtCawnz4ux%mVaS91bD5ZePO?{WAi~z~LI=m3NC}Cu zN&6?;sNQSUYoUpoFrP6ABI@4)V3hXYb#7uZ0k6_x=?QcaQwKDE`kDQ(NyG4KCNtut zo7;k%vKh%F7qawXvV5m5lsBfEi^@+?C3myzU#nur;?0mZ+u@D~&qIA(s3F#CCgyh{ z>s7!jZw4Uyl`Yo)!zxtEJ@BJ(i}lE34hf8&)TUrII(BW8o#ba$HLk>9?0kiWQDC|? z�*!kt${l5Ap<$8Y;S*S7I3aj8j#&H{KYieB+(qJtH!RDZ)yEJBdOq5GUQ9F^a4P zlg9@WV;{Cyohgx$U!ACfNh7+;DK5|$di&I_@I?4S4)dvZ(|3erxj;E82^uDfkqk@a zM8&{Fwq7iifi#({w38_5wPwYHuFbroc0TXuUDy$CrW+JY zzsrvWBwA;_mkKDnaHV>z*v=h>A}GQ-O9ME6U{AsOz$8F!jI?bb&)9KUw6;MU%1JLZ zPB$2iS~R|Bqtu%ZBUiliNr8b`BlwU7w5YW1LFz}6AI-S=-8hPyowDxyO@oX^iz-(} z3T-kiV&+I&?3m&17uQhs(maHq{n!GAZiX{<^RLJZhr(9wyvd1~BxKH24s?TyI5{#K z#W;qvVJO3cnDj{wY5{YS&5TnTa*bqXzR~wpiEFIdXLSdKMbeL7$j) zrY3T-9+T~t-b`QW2xs>W*OcP93k}lD9?~R#KC9Ys&(hsGQ#F^UW`?u(kqvCY#=HmG zH?pe1=8NCr7_q<4gbn*F(psU>+#0Ka1dMcXWN)5+g&bp7HW)^PP21#BMx~`)X3R># zIQo$tmilMRFEz6Zm6F~h6k1Co8Bj#$h`R#I=%lHNzisMBr;kebM_Sht3^qcUg;VE* zp=`sI(#+o<;Bt`UP2az5+UQ$pKq1j^&<(3P9X0awqN0M0;V40Qo3VY;ZhjEcDgw9Z z$8`?QnWnnlh$b;ELweuWZ`n7SMMnCH^W^t8VdL3o?HW@KSOfj)2N4zSWiY7!R2&7} zaHaLJRH0sH189^r5Qz81i$^{rLd&z~yu?c%p|UpFjETvGr-a}1iT1r*@7Jsh4@%J8k5&8*xg75uf8Qu(A%<8FLFGNeB;RIb~msTMYB&@YuC6} zAk2%R-TAa7cWQxW)8Q)dhcF-XdX6ZcdFj@3`f}L)a1TNAtpT;w4_{6}7WmSKjUK;h(c+yH( zec=_dQksKBXP24Hjo{|bV`?V%w_fI*K=&0R@7FUwv?r?!WzSQq^lzE9K!tHytndBF z{F~mQcUIk%>n${#X&&yC8loE1;jce6+^+_$av8Mnb7;StJ2Ldc+Yct|zc(s)y+sVH zcj}_YCrH#8XZ~P6D`3#FAHC-JxN&JBqcs+dNv0OT=8Q{@DW98=eofte8b^0To76b_ zo?Ed|vr4h|6^yOjk zreitHHVcNhvMOle$NbuR_)k#iRdfJ4umwTiUTtt)eeCd}?GRi`VPnwU) zd9>(1+ELYy99%w=PwksLqzY5C$E;aw2Xt`+!%N-+!>{t^lh+-USa7b^FJS=7QN2M|j^(v)xkN`o2!zUmgA8mn1!KHckEo zWKZ&__qkfY=lwjx^!+HeHKeoVIsoCKak3N-S()YFNTP8mOhw)-xC`yQeG^x(_Kj|~ zSj$Ry1Ax)=;J}>tAg;0nG?VSvLfKr?;teQc!wcsQ4XPFVsK$|oz{�VYux|Jx%DHi8f`e#)?{W#-zdG%36T4fsVz> zx;vEeI(rX*c_PyzFBK90fh9O<%2?hkP&4#HlZXkn98FAst^6w_5c`J;CDpiLS|ixK zP{PE{{uq&w-3K*sU?LON5Q^(H=^d%fsU;HGO?D`WPxHmE)=o%` zy2{@|c1y2*Df=gAfow`SOJ@;O49${aUCGVXl|?Q{OdR_&^tTSrKFy%OrT3Zr$fHvV zLG}LdfMgWQhaD+tmS#Z15an@npyK+&g^zMf99}`Hg9`(GZ=}9ZV%QNwKr2ed?5isc zZ)W@uJCGp1yDvm7E0U*9u{nt?8R7L7hO9kV??a3lez)*DQP9x*mC-wkfX_kO=+inx z2P88T_-nW5@%*X@Tva8WOkf52isUOkvo;OmCHqQY^xZT@zEOy410v->xP_ zY?0YrG8Kz8)k`i`7{BwWoI%_AnW+rNqF4%B?kfb(OQzu7GVwGa1oE6E7fYbHcbEXp z5MRKr;e8~m1%r_C_a~b|5~l}<`qP|)YJzoobS@sPeHWc-Go%}X_$k>ri2S%lQra#U zUN3Cnod>fzo9my8$d7X<2pd_eg=`HaRem)psjH_==02(d2>W4(72wgW;kWVzX2Ir~ z6G`XlqIJ6W=yov7tnWRN+fB(8;bN;-bHK1x$Pqq+d^ zCgY2+HYc6sxD^FMxmw@#pcqOCw_auwdzv+FbtEpL)Pu28`;s-Bb^>@H{b zLIQS+(x4&B@1KC z7EEM|Dt z0new_IcMglice(46xH*M9?j7Py4=1oqMzq}qt}B}cel&4aOjIF+tZ@=K zrAuE{Wgh-a(ph`TqT??YVaQ@LZ$(~8b@4t*ghk?>~;1q0#Za^w9$ zmSr_+0O~g~;d<_$Y`!rw21sJwlzpzWp!B{AGR;ebo*`R-*L^(yEWjn-DrUx94r(_f)~uk5ej`n&kAKzx+=SExD( z`zyRUUx3DZ&e^|FT7xqnC+cL7*Y@PeCQpQ41g<*&VjgaYfiF!E-}C+z)SmEOghqR4 zD2~5UE-X|e)HAA)2_7o+uT+Zw^$%_c8A{+U4h|hk_OGOj1qJt4(!qrSz69E6L<|-E zmwQ0+UshbnpcY;nX?#Zs)&3%tVA4P#yflWx0ww>lFf|%;K;8a@>2pIh{nZihLk+(4 zSL3z>l;~duts>MU0>X31NtqPh;72uxXOO=l1l6G+ALvFwb>O+zvj)sD3e1f=lNm;xNQuGC-j>H;@AIoE#f~N`|tC8RsaCGe1yQ_ z6F@vL#smLwq2~lXngmk5#6peVLL~zkF?#rbmqGGu>Tj=mc!SxefK)H24dbvAN5~{B zfQ%U2f3*f31a_VRQoo>1g97wXSw=PvO77(U=X&uyN!0+L0){qJXS!~W-T5fbwZWC#-f z%k7^%VB;S^#uv9^e?UA#nE;pl_$Q9ZXT{Va_~-|a{w4er-fa#$$g~`Qbiwn4eJ+2) zx7z{p&H$-i?C8!wXe9e!&zXM)Y4)>X>o>UhzYuHBir6FYJp}P$`11$wm>I-y4aD%j z=RE%@`1R~R^Esbq7$^%t89-1(e_Q{j`E@YH91u5I^auf*H48*}aie?|(unI77;_GY z174m5;=Z(mTJvNb3$d{eu|f7P8+SL)P?i_2*c^mAclWFy0ejE=Gv4E#wOx2FczpLQDHS<7Nu;u(eRPX0{ zPK1BgfP~;Dh{2Z-YKO|M1t1Ah7ZL^}%e<7oPvIEl8Orp+HCTXf zJxNT!ZrV2 zTwH>`Pzwn3rE%{?NK9nJP+%KeD6;>R8d63MphO`7SV4^aJ2lWyf;SfbNe$>r5GQJ> zo)tu3nWcX$>ppAwX~3RKK)RQv@*oNz4m}juh!TnjJii1)p?scIrBTte)sVEY2$|

`zs>PP_`G#K`Rh$ncTC2 z4E%isi1Wf7q|w?6f-GJ}5F+KjxWAOaCo4d9iRWma7iA4^XaF_j18L}=^1NoY=|BNY h%+1Xl-Pn9=oRk$|ArB7#5QY5UU;+T|rXgVi{vWT5rr!Vn delta 14334 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