From 77d6b0a2e53f45456e29ab01b6b11e4251a316dc Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Thu, 24 Aug 2023 11:32:01 +0200 Subject: [PATCH] The BasePlus package [ver. 1.29.0] The BasePlus package [ver. 1.29.0] Three new macros: - fmt - infmt - minclude Documentation updated. SHA256 for BasePlus: `F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7` --- README.md | 94 ++---- packages/README.md | 4 +- packages/SHA256_for_packages.txt | 3 + packages/baseplus.md | 486 ++++++++++++++++++++++++++----- packages/baseplus.zip | Bin 275530 -> 280955 bytes 5 files changed, 443 insertions(+), 144 deletions(-) diff --git a/README.md b/README.md index fdb7d11..e6113c5 100644 --- a/README.md +++ b/README.md @@ -172,101 +172,47 @@ If you find the SPF useful **share info** about it or **give it a [star](https:/ ## Available packages: -**(!)** For "backward compatibility"/historical point of view the following packages are available under the `./packages` directory. +This section presents some example of available SAS packages. **(!)** Since *September 2022* the default location for packages is **SASPAC - the SAS Packages Archive** located under: [`https://github.com/SASPAC`](https://github.com/SASPAC) where each package is stored as a separate repository with historical versions too. +**(!)** For "backward compatibility"/historical point of view the following packages are also available under the `./packages` directory in this repository. + Packages: -- **SQLinDS**\[2.2.6\], based on Mike Rhoads' article *Use the Full Power of SAS in Your Function-Style Macros*. The package allows to write SQL queries in the data step, e.g. -```sas - data class; - set %SQL(select * from sashelp.class order by age); - run; -``` -SHA256 digest for SQLinDS: F*3BB422E8C94515DEE9E13E674A0D119794F464D9597C28D5D536E71F64EB5298 +- **SQLinDS** -[Documentation for SQLinDS](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/sqlinds.md "Documentation for SQLinDS") + [Documentation for SQLinDS](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/sqlinds.md "Documentation for SQLinDS") -[SQLinDS in SASPAC](https://github.com/SASPAC/sqlinds "SQLinDS in SASPAC") + [SQLinDS in SASPAC](https://github.com/SASPAC/sqlinds "SQLinDS in SASPAC") -- **DFA** (Dynamic Function Arrays)\[0.5.5\], contains set of macros and FCMP functions which implement: a dynamically allocated array, a stack, a fifo queue, an ordered stack, and a priority queue, run `%helpPackage(DFA,createDFArray)` to find examples. +- **DFA** (Dynamic Function Arrays) -SHA256 digest for DFA: F*924711C77E413B8CFC18336DDA2293A9F5294D02E267C1BB7BC876B4AF0AABE4 + [Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA") -[Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA") + [DFA in SASPAC](https://github.com/SASPAC/dfa "DFA in SASPAC") -[DFA in SASPAC](https://github.com/SASPAC/dfa "DFA in SASPAC") +- **macroArray** -- **macroArray**\[1.0.5\], implementation of an array concept in a macrolanguage, e.g. -```sas - %array(ABC[17] (111:127), macarray=Y); - - %macro test(); - %do i = 1 %to 17; - %put &i.) %ABC(&i.); - %end; - %mend; - %test() - - %let %ABC(13,i) = 99999; /* i = insert */ + [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") - %do_over(ABC, phrase=%nrstr( - %put &_i_.%) %ABC(&_i_.); - ), - which = 1:H:2 - ); -``` -SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B4555A963180D767160 + [MacroArray in SASPAC](https://github.com/SASPAC/macroarray "MacroArray in SASPAC") -[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") +- **BasePlus** -[MacroArray in SASPAC](https://github.com/SASPAC/macroarray "MacroArray in SASPAC") + [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") -- **BasePlus**\[1.26.1\] adds a bunch of functionalities I am missing in BASE SAS, such as: -```sas -call arrMissToRight(myArray); -call arrFillMiss(17, myArray); -call arrFill(42, myArray); + [BasePlus in SASPAC](https://github.com/SASPAC/baseplus "BasePlus in SASPAC") -rc = delDataset("DataSetToDrop"); +- **GSM** (Generate Secure Macros) -string = catXFn("date9.", "#", myArray); + [Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM") -format x bool.; + [GSM in SASPAC](https://github.com/SASPAC/gsm "GSM in SASPAC") -%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_); +- **dynMacroArray** -%rainCloudPlot(sashelp.cars,DriveTrain,Invoice) - -%zipLibrary(sashelp,libOut=work) - -%bpPIPE(ls -la ~/) - -%dirsAndFiles(C:\SAS_WORK\,ODS=work.result) - -%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); -``` -SHA256 digest for BasePlus: F*D6DC5AD1B60A92AD300B639B3C361C1F7846EB01E5AB35BF4FDDA6E783408172 - -[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") - -[BasePlus in SASPAC](https://github.com/SASPAC/baseplus "BasePlus in SASPAC") - -- **GSM** (Generate Secure Macros)\[0.21.0\], package allows - to create secured macros stored in SAS Proc FCMP functions. - The dataset with functions can be shared between different operating systems - and allows to generate macros on site without showing their code. - -SHA256 digest for GSM: F*56DC0DCCE06B4281BF3FA6FA3875CBA87772BDA7FAB601B06740A7980FFB0E07 - -[Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM") - -[GSM in SASPAC](https://github.com/SASPAC/gsm "GSM in SASPAC") - -- **dynMacroArray**\[0.2.5\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA). Development of this package is currently on hold. - -SHA256 digest for dynMacroArray: F*6E087F38BB39B93CBF983124272812E14693C4EF5EE0A3A218BD2BAA069A74BF + Development of this package is currently on hold. ### ====== diff --git a/packages/README.md b/packages/README.md index aaff155..154fa2f 100644 --- a/packages/README.md +++ b/packages/README.md @@ -86,7 +86,7 @@ SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B45 --- -- **BasePlus**\[1.26.1\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[1.29.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -110,7 +110,7 @@ format x bool.; %put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); ``` -SHA256 digest for BasePlus: F*D6DC5AD1B60A92AD300B639B3C361C1F7846EB01E5AB35BF4FDDA6E783408172 +SHA256 digest for BasePlus: F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7 [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 8628267..b2ecdfe 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20230824 */ +BasePlus: F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7 + /* 20230727 */ GSM: F*56DC0DCCE06B4281BF3FA6FA3875CBA87772BDA7FAB601B06740A7980FFB0E07 diff --git a/packages/baseplus.md b/packages/baseplus.md index 0d2ed2b..3a4fcf1 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -62,15 +62,17 @@ * [`%translate()` macro](#translate-macro) * [`%tranwrd()` macro](#tranwrd-macro) * [`%findDSwithVarVal()` macro](#finddswithvarval-macro) - * [`%getTitle()` macro](#gettitle-macro) - + * [`%getTitle()` macro](#gettitle-macro) + * [`%mInclude()` macro](#minclude-macro) + * [`%fmt()` macro](#fmt-macro) + * [`%infmt()` macro](#infmt-macro) * [License](#license) --- -# The BasePlus package [ver. 1.26.1] ############################################### +# The BasePlus package [ver. 1.29.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -90,7 +92,8 @@ Kudos to all who inspired me to generate this package: *Anamaria Calai*, *Michal Ludwicki*, *Quentin McMullen*, -*Kurt Bremser*. +*Kurt Bremser*, +*Leonid Batkhan*. Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022). @@ -281,72 +284,101 @@ run; %put %GetTitle(1 2 3 5, dlm=s, qt='') ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 20** Format and informat macro variables values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %fmt(12345, date9.) %fmt(12345, yymmdd10.); + + %put %infmt($111234, dollar10.2); + %put %infmt($111.234, dollar10.2); + + %let text = ##%fmt(ABC, $char9., -C)##; + %put &text.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 21** "Macro including" a text file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f "%workpath()/testFile1.txt"; + data _null_; + file f; + put "13 14 15"; + run; + + data testDataset; + set sashelp.class; + where age in ( %mInclude(f) ); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- 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 intslist -10. macro ldsn -11. macro ldsnm -12. macro lvarnm -13. macro lvarnmlab -14. macro qdeduplistx -15. macro qgetvars -16. macro qzipevalf -17. macro raincloudplot -18. macro repeattxt -19. macro splitdsintoblocks -20. macro splitdsintoparts -21. macro symdelglobal -22. macro unziplibrary -23. macro zipevalf -24. macro ziplibrary -25. format bool -26. format boolz -27. format ceil -28. format floor -29. format int -30. functions arrfill -31. functions arrfillc -32. functions arrmissfill -33. functions arrmissfillc -34. functions arrmisstoleft -35. functions arrmisstoleftc -36. functions arrmisstoright -37. functions arrmisstorightc -38. functions bracketsc -39. functions bracketsn -40. functions catxfc -41. functions catxfi -42. functions catxfj -43. functions catxfn -44. functions deldataset -45. functions semicolonc -46. functions semicolonn -47. format brackets -48. format semicolon -49. proto qsortincbyprocproto -50. functions frommissingtonumberbs -51. functions fromnumbertomissing -52. functions quicksort4notmiss -53. functions quicksorthash -54. functions quicksorthashsddv -55. functions quicksortlight -56. macro filepath -57. macro finddswithvarval -58. macro gettitle -59. macro letters -60. macro libpath -61. macro translate -62. macro tranwrd -63. macro workpath +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 intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. functions arrfill +31. functions arrfillc +32. functions arrmissfill +33. functions arrmissfillc +34. functions arrmisstoleft +35. functions arrmisstoleftc +36. functions arrmisstoright +37. functions arrmisstorightc +38. functions bracketsc +39. functions bracketsn +40. functions catxfc +41. functions catxfi +42. functions catxfj +43. functions catxfn +44. functions deldataset +45. functions semicolonc +46. functions semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. functions frommissingtonumberbs +51. functions fromnumbertomissing +52. functions quicksort4notmiss +53. functions quicksorthash +54. functions quicksorthashsddv +55. functions quicksortlight +56. macro filepath +57. macro finddswithvarval +58. macro fmt +59. macro gettitle +60. macro infmt +61. macro letters +62. macro libpath +63. macro minclude +64. macro translate +65. macro tranwrd +66. macro workpath + Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it @@ -356,7 +388,7 @@ localization (only if additional content was deployed during the installation pr * SAS package generated by generatePackage, version 20230520 * The SHA256 hash digest for package BasePlus: -`F*D6DC5AD1B60A92AD300B639B3C361C1F7846EB01E5AB35BF4FDDA6E783408172` +`F*9EEE4F4B99EA725B60141645AB6A50BFEBA32CE54848593F8D832D907D63CAD7` --- # Content description ############################################################################################ @@ -5115,6 +5147,324 @@ The basic syntax is the following, the `<...>` means optional parameters: --- +## >>> `%mInclude()` macro: <<< ####################### + +The mInclude() macro is a macrolanguage version of the SAS `%include` statement. +But it allows for "embedding any code anywhere into SAS programs". + +Macro was inspired by *Leonid Batkhan* and his blog post: + +"Embedding any code anywhere into SAS programs" from May 30, 2023. + +Link: `https://blogs.sas.com/content/sgf/2023/05/30/embedding-any-code-anywhere-into-sas-programs/` + +The implementation presented, in contrary to inspiration source, is +based on the `doSubL()` function and a list of global +macrovariables of the form `______` (six underscores and a number). + +See examples below for the details. + +The `%mInclude()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%mInclude( + < f> + <,source=> + <,lrecl=> + <,symdel=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `f` - *Required*, a SAS `fileref` or a **quoted** path + to the included file. + +*. `source=0` - *Optional*, default value is `0`. + Set to `1` if the source should be printed in the log. + +*. `lrecl=32767` - *Optional*, default value is `32767`. + Sets the `lrecl` value for the file width. + +*. `symdel=1` - *Optional*, default value is `1`. + Indicates if the global macrovariables + `______1` to `______N` should be deleted + when the macro ends. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Embedding text in statements (the `%include` won't work here): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f "%workpath()/testFile1.txt"; + filename f list; + + data _null_; + file f; + put "13 14 15"; + run; + + resetline; + data testDataset; + set sashelp.class; + where age in ( %mInclude(f) ); + run; + + data testDataset2; + set sashelp.class; + where age in ( %mInclude(f,source=1) ); + run; + + filename f clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Embedding with direct path (mind those quotes!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f "%workpath()/testFile2.txt"; + filename f list; + + %let someGlobalMacroVariable=17; + + data _null_; + file f; + put "options mprint;"; + do i=1 to 3; + put "data y; x = " i "; run;"; + put '%macro A' i +(-1) '(); %put ' i ' ** &someGlobalMacroVariable.; %mend; %A' i +(-1) '()'; + end; + put "options nomprint;"; + run; + + resetline; + %mInclude("%workpath()/testFile2.txt") + + %mInclude("%workpath()/testFile2.txt",source=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Embedding SQL code inside the pass through execution: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f2 "%workpath()/testSql.txt"; + + data _null_; + file f2; + input; + put _infile_; + cards4; + select + c2.make + , c2.model + , c2.type + , c2.invoice + , c2.date + + from + public.CARS_EU c2 + + where + c2.cylinders > 4 + and + c2.date > '2023-04-02' + ;;;; + run; + + + title 'the %include fails'; + proc sql; + connect to POSTGRES as PSGDB ( + server="127.0.0.1" + port=5432 + user="user" + password="password" + database="DB" + ); + + select * from connection to PSGDB + ( + %Include f2 / source2; + ) + ; + + disconnect from PSGDB; + quit; + + title 'the %mInclude works'; + proc sql; + connect to POSTGRES as PSGDB ( + server="127.0.0.1" + port=5432 + user="user" + password="password" + database="DB" + ); + + + select * from connection to PSGDB + ( + %mInclude(f2, source=1) + ) + ; + + disconnect from PSGDB; + quit; + + title; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** In a limited way and with help of the `resolve()` function, + it even works with IML's interface to R: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +resetline; +filename f3 TEMP; + +data _null_; + file f3; + infile cards4; + input; + put _infile_ ';'; %* a "semicolon" trick for R statements separation *; +cards4; +rModel <- lm(Weight ~ Height, data=Class, na.action="na.exclude") +print (rModel$call) +print (rModel) +;;;; +run; + + +proc iml; + codeText = resolve(' %mInclude(f3, source=1) '); + print codeText; + + call ExportDataSetToR("Sashelp.Class", "Class" ); + submit codeText / R; + &codeText + endsubmit; +quit; + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%fmt()` macro: <<< ####################### + +The fmt() macro function returns a `value` formatted by a `format`, +it is a wrapper to `putN()` and `putC()` functions. + +See examples below for the details. + +The `%fmt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%fmt( + value + ,format + ,align + <,type=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `value` - *Required*, a value to be formatted. + +2. `format` - *Required*, a name of a format to be used, + character format should be preceded by the `$`. + +3. `align` - *Optional*, allows to use the `-L`, `-R` and `-C` modifiers. + +* `type=n` - *Optional*, defines type of the format. If the format + name is preceded by the `$` then C is set automatically. + If the character format name is without `$` then set + value to `C` yourself. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Formatting values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %fmt(111, 7.2); + + %put %fmt(111, dollar10.2); + + %put %fmt(abc, $upcase.); + + %put %fmt(12345, date9.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Align values (compare different results!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%fmt(ABC, $char9., -L)*; + %put *%fmt(ABC, $char9., -R)*; + %put *%fmt(ABC, $char9., -C)*; + + %put %fmt(ABC, $char9., -L); + %put %fmt(ABC, $char9., -R); + %put %fmt(ABC, $char9., -C); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%infmt()` macro: <<< ####################### + +The infmt() macro function returns a `value` read in by an `informat`, +it is a wrapper to `inputN()` and `inputC()` functions. + +See examples below for the details. + +The `%infmt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%infmt( + value + ,informat + <,type=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `value` - *Required*, a value to be formatted. + +2. `informat` - *Required*, a name of a format to be used, + character format should be preceded by the `$`. + +* `type=n` - *Optional*, defines type of the informat. If the informat + name is preceded by the `$` then C is set automatically. + If the character format name is without `$` then set + value to `C` yourself. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Informatting values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %infmt(111, 7.2); + %put %infmt(111.234, 7.2); + + %put %infmt($111, dollar10.2); + %put %infmt($111.234, dollar10.2); + + %put %infmt(abc, $upcase.); + + %put %infmt(12mar45, date9.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --- diff --git a/packages/baseplus.zip b/packages/baseplus.zip index 47bd791ae3881043ac40afc2ac96073c5ceb337f..f40497601d75792d160350925a599bb7224f8464 100644 GIT binary patch delta 29276 zcmZ6xV{j(G*0vkl$;1<0f7OrRmWEIAPIzZfdv6cBaO$V25Q=b zRUICngkVzq1k3-~0?SC2ePtV(NZpc9ww6LOF7V3O>vNNwjiq^VIdeJkr@T-?tz*Gy z*959DiLj3x-gYg>&K4sYoYOQzPb__B3mXRAU{rr%zipd8*tZk;R}4s?VhY6XI3sMM zL74P93G9BhEFfqkF{WmuF&K%4%+}UxGEH<4^qyC=+Rn_07!S+u^00hnCH}tMb*hB$ z9@M?5wKF*i@x-+7F?eHbm;KZzN+_&L$ZpyQcd(gM&M+INU|XlcQ4zyi{%;1govpJ7 zKT2HW4IVse+bjxy1cwLcTi@H0;}fXQi>zn)ni+a%Ga%OK9AQ%}6g2Qt_`>Em4O2ik zLl~LRuKga)y=Gq=3O3TCl39p5pj&rNMfdwPpgW|R|An|`s981hp?VoJOEgOiAm+zr zoDth-?qo!-p5%(gM{JtF1iMyc9x5&~g8+j&U#8>hE*mQC?$y(yOgWI< zsA6_t$0{!6n58?RuU+*_3YGUu^abzPQm697a=FNJR-m!0@{!r6C7Od-f2O3x01_hAcs@C77nSnL8og7H;MAW^g z@BH9b1V!P2qNFt(aD6f#hw0F8rwqvKy0KcU%f4YY*;Bt$cQWDW(54^}>6@Cy;4nwl zt6i<;v$cswn3dam6z+6e=e-hs?*hMhFQuef|LV_OZVnz;wk&;#a)$rVyaJ&|(?y0n z2d1}FK*;=J*E&lXq3b`C-$W~t$tT8sBqT%0j!v4o?ZWTLM^*^KJ&?h}CZ6R^mph{y z<>2tu8-;F8XhCBh)KAMp2nltydVAyZw$>e-yX8!dC|^gxXLY>IQ{*L!im*XpS=r3tkP<@Cd#7M0c*Zm`2WirA!Ve^1B+PSY5f_1n-*;f%@+O{GAStQx^6ffZZC zQ)T-GhyJ*o3Q>3;Don}3V`ZRgZN(!tCN;Cc)eW)DR@&B3$f1?nr049MZ?1x|zODhK z%Y0{0XF7AT?(C^l3U2T=L*DL*oXMfQwFg2b@Pt?Gm-b46L|=aTZgMD`$+UKa*aWDi|I4lL|57A!KL)djv5tsxqfz zptiAb=vwDCQMd$8 zQu4&%fVY)|gK!JWuI0CXvyM)d26!2OZjNf-KdJ+OY7y_xxwD#um%XXYAgmYSKmsthGsE0I9_~WomYiEx?J>-@@lQG&FtX!A`Heo z(8g(lFr;sv21?_A>BlbNRVn=tq>-D7XL`^gdpYE-Xfz)#9;>y~8`P;_I&h#k64dR{x4tEjj6gJeKY8SklQoesW8}ti zYL)(Edit>g#DM%`SZQ^P3~30lYITbjNmnf@*`uWBWg?J2S=!BBgkkdug@C@fMDnE zOrs>vl|%9sF6I0f9bWF-<@;In1J$@@Q}Q*$^|0z5=)%D5bAib_?1Gt|kT>9n1!Ycp z2BKsOF?{_5CIH*V&SYe2ZP>>>7AYP`+wLiW^jjhdm!76+}Nwo9duns^A zo;_nc&>KUJYT+>TC*3&xbFP?quI-Dgho3eYhZztOd4l*4yZEAlq`tlZnA(;xHK^2- zwRQUH!AgD259B&pDm?%C<4)R@7K@lYo^B*kM0N%E_6b^REw@y86-A)s(=ZtU&3bwVgbe9=eP973~mApKms%7cMF%Y_Jy6miMyyl^O4@lDLYk1 z_q)93YEQ+_e4P-*Eg{GcL(N^FUa%vho&Fy%J8L=%@HUD20W?EQs&+@4v|ZLJ4T|7{ z;b+5g$vAzF_lZir^UUc3PK3{&4Dzt45B4__Pg5`9bH(pvREBV{c*}#OWdP}Cw&ep= z;Gn{pZU0J&$qpZ%!#+;;kk4_u0)M%!4IP$`T$8RO+Mp&ZH7^Z8JcJ^q=Ctvf@8lD9 zvdu)rm>t(LmUF0Bd+JTP*YCH$7j;&gk;+xeFZwyiH(irs`m1@b>}9mWKb~QKQ{m|iTQBjeTpFATEtTc(9y1-eqj#QWRSBvI?=Ww zPEN4Z+?!eKQpdH66KHFe29}Nh*wQ?@7Bu=6DV;&a;{YRDwA6G76 zp6t`a2GA`1{QoZ&3St8|(*G69hgUH&3<(6}C^T^ng$!url*x(pwUhn@z3lUo=%UTF zBb8nEMka%Edx|@p(!tDiH#-|5Fsp9Z4|S%v*Ebg8z;It00rO2^wn-AfGiK%i|EHux z-&#X`p*$ll{-^U}{i-GLCW+wbQ{`%{!geO)*@xlUrf~LSE_B(=dCBn>i9AQoc`LTh z0xZEA%K}i~WsNfBBG1+7+o*9FgcY0zqOft%0NO;*)y+*YdkSzVzYJq;4#~c97JoVJ zb;jaaR|~xc5O}ZteDSJA_Il?>+Pn%}c@O+VelR1P3E){(3wLF-BL);qV{tChQThQn zTNNCYsn*87Jh+?`w(lhODxW%BLv8F(gvzo=5P{J;gph97>1o(K$B+VQX1}P&&n?~E zxsHaqd`-^%V`{R~ZS)#(HHyPc{5!efqVuji1y$FmCGKQfwTpWg2?+=!K~9$=kCf2z*7njRoLLvS$E>nHx8GMB zOO5%Oa(-J(a5*5(1$aG?BRxC@pv)mH;XuoLLCq`8vB@w^Gu@1{RXy}IZV!^fbfdDB zHH8Z`picHrf~PM)H?Ek=O2-vc<0s}oHg1G=f9%{r<{4|)zK;1Ya?cNly@|8%Ws@39 zKt{VUVv&V`Y#RvE_iFVD!)lc~ivxKjh&|!>D*|!fXS#S|GO=RRkU6m+8n$3k5>V?t zXuLzEgj4s&f%|dTAsyyur4W9twS&ZugE+?_;>clQl`!E6%+q=}2ZBk|Q-^xaSe38` z^%Tw&dFRohB1s#bUyZ{MQlQ~z#o38e3t3L&V3j&GWiW5@RG^FXhRuJiaFW^ zk>oH?56NEJspZPX^>HGoA$f=|V!#}#Uv^Ro;1r!frn2FV_KCrddqe?5^}_cUl03=* zWG#~T;f@MU!9{r>0SHsD9%%NIQUySg^lwQ6P>Oaq88T_cU((=X_Ku?ZP?6<*L?Sps zYGmgqok|%fEqn@zv6Xy?-V(2hmN(T+vCl+YU&FWTSewvB02_@c_>&yoeS7P(S$!>i?NZl<0s zG)^Q5^;#0S2nl(LEBqeZuwTjfKc4FdAYzqV4%j0th7?7740FjW6Q9c=bYPry{U!CO z&tt4tU#S~+QLV8SBn8kP(SSb5rCK$$$LFVidY0hRA4(>bV*TmR8JwHYt_;N|#XIPJwZ@C#L4A!A`7m3V;olMV>cpm-7tdQ~U*OZjKsAPqX=)(0@}inq(qW zX8U@_9E=OD8LBvx6ady;Vl~MW_6Nb;!Ep2Tp6eiW z!ZNzY2Nt;GQL((?H}{UGylW|T_u9zcHm9@HkvC^6c!|0n9@CWASa;qElh{q^qaGOg zMWhGf#LMjTX``+b9Bl4ia(!Ok>%N>>gZS9mrdr8#$?|Ni)&c>$Y$(A3*R+21L2W_^B!{FRqtPE)D77RVb5ssZ{}fDwkW8CwMKKMa3;}xAU5}dU`ReE0~Sr=#02Eb{lKZgZ$6S{q8eQa37@=c^b1H*_zD;auT^A(EmD*Fie0Qs(GK z=Cvv!TBF6|JK&qp0E@j1U`Lg(H(-9wl`DxtogsKJVt|!dm!gt^LfPlyxu!wgWMr~{ z4a$qDNfomu|4AvlnpJ;*}typ%J#zVXL-9v}KiGxV`Xnrnm zwEj{bAsW+|5wtvmuM+NW74uo6E||}^s^D&~$=u70G%!!z6$&9bMNn_KeRhbw+flsk z(%;CijVM|p53Zcd-4Lhdio2mRVaQ&Px>10^UuqqZhe;bVS<7;7zEGPTn@&ncBg&dD zcgmGUS6jxwTTfxfSdc45G<{)IEYds|)MNibHE=R=e>fnRX4Vb7b#LOwU>G3G}rU9hB=QMy6Q-g`$AAXY}5X1XNFxVr}deQyoS&(tdLT3vMxajwh_hi ziyn3UFVx*i50W&!fYwiUnfI+WBk`2u8#;z~CQ7*Kc%~rEKh}1r$<)#eN*XgZd)$rV zFziBEEu(z}V{W8}q zUb}qjp8Hrll)y_RK~Bb7&M2lQgvX>1Z;PCCFY8yQ383HkTAurh;82)s3nMy(`|%}d zUl;yK8!wnGF(UFnE`|S@P%5^OuS6hE*~-P}1xYBAx=JR*e>9Hrt~kPyC!j?8B*-2= zY&Z*qV;U;u7u^|KBsrGFu~a7=H>w^38Zxm7At*+V;e}h0?Ih)m1Z5^rLUU+HAS02$ zpz)B&$2SR+OQ5}W2wU^Ul}lPT#!)dvd!34Axxc-%Wg zpk-EuwerA9I>->Pi07CdJy^>^Dhv!C;x+M6?2}UzRm!_yu4hMLez$pbMQ$kwF*d@& zT`wQkd0I;x;HBiEVxsz&q`tzMJNtW)K>>Tc)qK_DMUtFqeuKt%=xJtRp$+h5V9Yf#f;NP+~u2+a}1zdU^-+2BFz-$a8ZwREI7D+{$dLU)y|1^C#*zBNCtk)i{wH0!P6 zLLfSffQ)7d7#Sq=_sb;EXB1e@*r^?|JGUisjeBLdW|>guKCkV|d;~50>@R2BAw<5kuD|yS5~`$zW;3L2W8PbNop{1iGC-AfL-AkDIo+BI%T@j0cCWkQFS> zQqtDrb|ea|)uScN1Z;>P6pMrNFqyKz<#f^VA~zBXlOTYEv*~AxwiZ_-qsRP!TQ(&P z^GJ&pTwrwB4E7ER2zQeWHBx7f``99D0y~X3V|zTGtN+s6g)8n9%*oCj0O4GZxP!P28QTv zC~O0|s)gadwHDj<@jWSMKRWLpy#{|0gupmWn%?KF-@!uAKbRN0XPAF4{x1rB6<>VNP6H^W~v<~HmpSs)fI~TH~8BQnUqUF7t=A9LuFgo ziT$)Tz3W=T*_b{$VJQBJRCiaiC0uM$+hF8KfE4|5HAGw<(0gb;U7<~TVmsXoFlthfvujX%@LZY@z;9diHU{J|x+4|jb)sEniin%I``D3K)BnBqTqC+V zJ0t%|m`BRY=blZINJHnlbd#8Ex5v$IkpF%5H?V%l2`0)A(gA1X2N*GW5^wptP*SVl z1DTZdBcUM-0e&K>?qt)?`q9OiHl_W&J1%W|bMAL@!tdQLPw(|6_>kMARc309;{y+V zEX9MamD^x646IcI1;Oz9FIFH<6~C-mV7a38&XD#~sI?!2T=o%*4b%MuXLBFBY$dS@ z6<{Xcse&jX4}qNeAQ~ueqm@8XyiLls^Z;$KBgw z)0_o`jcC9FVGInHp1Kl+v&ZdfG5TL4CTrbX@F*#2 z6n7&*GOer7ig z<^8ImpGeKy<@rd&4 z6E7&tzaKF6#91N=ppD%oCz@X`)){cG0!w7(ZL7(xHIkPUnyO_1H<_-sxaki8l0WTy zJ+73p2sOj|g^Lp;PQW)3`d`_F+;mkX4M3n-F-F)so*GYZNkX zzvrsP{f5WQ#U&VHC8K?pBrTzIPUh;e}6nEek8QdpVvu^MvYU*hu^Q1R~{* zZP2|e=JfHpe=2u@>mkExl%}6s2qSKYZ6i|3kBR*8tG{4|wip#oC>OjmmCwaH)+=b| z=!)=!b65fZ{BxkTOc2bp(2Pz8T;=2Az<09N;SS7q`8ZISwXd4|8m`Ai!Kgx5BjX%k z5_b-PfQ=N-=)87Ful>$Hrbl}X2f zJ|NVnMx=;gI@d#>bt>FJGDByQ7()7>vRjOtRGj^}M*3jcsDoVE+5fR4OL7QUK@OP$6RdFJX#G}lhQDIMIL3vMkvrbtN)vg0M z%_NHh2<6&pXZ>j-Zm;6kq89dQBOayD_XKV2e$C6A2=V^&8K8%FQNUEU1aFi(M=Jr7 zjG&Kh#CWdpYyz}i&n!p-&SK^W?+^zc~dB?2|7I`rDfDb<&4# z|Bh4z^4xCn($nP(DE13aov1mY@iyWdu9}7iLVC-i3T&ZpKZTKPz8LH_@o7A_8?YH| z(T0pm4OmbkDJWT|lBU(J?0Fl?^l%Ke=wYv;iZ0n-71v+=Rca^<-VGl;P4LoKGmJ%i zadN`V40b@N3yqsK=}H}CAgxFitNP#u{KU3BMvKIbH8M>$uoHfVw@RsIFRvLdg+-l*t&LN|{ z!!6@KD)+TZnHbG4s_;C?vrw6aDK0;%a72 zx^SG9>cfr^%0;72w|AP_&ok3<)mf>gzdy=99LPaHR1-cHM$WnS5q)YcZEk@AQYb3y zQ1rhKv&qkI-btOo*+-PfC*MAA{75Q;B<+|Ka>&JW-x6MR5F2yhoAN85Jt3YCA9XLa z-lS&r!#+9wkw(=`ze^vi(l8NV5A|0rbsGkLXzWE`^A+_SXS5?_w>cS0?|>mnmKOde z;^!l}ApjA*I{?Lw)j*5Ttr_kQ(8Dema$f4tan9uM1*RWm=KelH1H)M{V_2n>lU{qz zW3|2K9=E{KLsETWGTHrEh^=|~{!W%R1U;dCK;@}SyFf~oc6d(2_!TEWmS#}*d^SJ9 zH)+@n2eM*V*0_COFu_ISED$-HVN#z`_pyM1+oHKoV?#WT#0OlqGWxy%h#BBny(;|5 zDy1})mbXTYZ;XZZxFR%iuld5yh=;%UuXlfA+1#AI`P_QqgB(BDc<_n+M)Df}lUS#u z+fGjeh=uB$&TwmCJWvYsC5zb!U8_6GpYdzo(tNi`?AdltUXnV4A9R_Ic=HsFr&u%Z ztjH`zGP{MFkHXTP%|?v?avu--x>aUZMl!0}Sux1&=eu&;ZS@R$&C^hC=Ihivdj@U5 zU+5t8kc3egTkGj4+x#fJEKU?P3TDhg15|EHUKRY(q#0e;;xTb57O-$<;TI6}aC#De zE-N#y1uNgUnHZ$itQacW-o73RQ_=5JJ#nC@jVMTG_Os{rQ^4s1#(skMQh~?01s0^k zft)E{#_VkoA=X=0fEha+B)W~6{4OTCH`QQQ0VVnR0m>L<#~Iyd9i_xMmy{pO_P;*EkdxJJqTY@K3Bcz$WTvShyjS^Ld2?<~;hR`VpTvSF_@ zTIM<4jS63eUyZqO+vsBgS^Tb6CdNw!CRbT^#R$Ko%vk!&3u8-52asL}#_P87Xt+pH z-TgFm>CCpvAGAppo82_==;$e)NPcyw;tfdZDhg}fy)KL-!j^J#8zoti3-3|> zfP&4t6k64ySgObZ5KiZizznKo3W<4TL;U@2GM&_M6iHjX=R^+6gmUxiS3T-mGH2i6 z;D3kXLP+U3IjmEs$HPpRv^arRJt@=k?LIf5`22*WsG=2$Sc^QCbGZMy%H#+AU#+kv zp%Z8f4FXc0ctXVrgqtbCme`OUI6B#&=pJt(Pp4pU+r>7D+*@ghBBLZ;Bm`D+^!oS5 z6(U~NJOLJJ)Ec@nAcp%F1#IwIT?? zKZ3>(?zqHqwL|O%lk$h2eA|&?c7%`2tmt%q5t&3%f&m~^8P+Cx4uQd zpMuK$7f|GSx|%2j4{YEe_U}}qZ+yh}!9%ytMYqAk_x`;upf?|&y5%eFo-1F+G*`__ zLG6-yuM=+w|Lay$!PfFq#4&?t8kUV%wi9}0sMYtKv02a zivQVHI}imo2ye(B^9k6MaVDM8**&(6ZJ!d83;7wL-l}zgmN8_3E$3*L>AQEGryqh{ zD!5=W3FCdP>4Z#U$ zav)?uh9V0n%NnUi9t3$-M1`Z=Bt;z`a>* z47hN9J3Sd)-65Mat}`GIX|p2C=kg`+K3jKTvS@vrzSll)L_Z3Rmp~b{}G4BRr|_B_!SCKwM$cULt$Pz%*T4^x{-rj)H%TT^_7zS8gO$3HDtt* zCwc_`5q_XR&pvaiD0X}7>Ajw<9owr7?99Ob@hc|ohyA2jkZM@J^fDn?gZ%TX2yeVH zwX+%7BUA9s5QiQG_BaN*9zu@Tme{saoA4m;B`&QHtzQ>54*ilhmd!r{!s~aF*5?;t z;@A_FgMecat84;Mzv2F3!6KJ}(CT$n=QaBu);-{_$5!pTUF45p|8BTPhqrZh>4;9Xn)Y&xC^I!ZEPvohl`fldWy6M{aF zZn;4J-{I$?nPT+e)MH}*mEj{R1_8NitanIij&Xh{>*0-B2PvXLQCb6o-L?RQ)P#a) z$LuUC8YoDDkAxbpqY?wghXU*Az9O;G^kQu}e@hg?mc?7uFa6NsNcbx$v4lvg;a6C+ z`mhJlnZ<8~R0!MkZx#V;&1(g<@Q>oPh$DPbrw zae7BS2@N)cqF^<-q){8O0b?<}j#NScs6>P%o#Y=|EZgT5FP%S~OAk`LrHMHC@spsy zb8`o&uzMXCxzp$+juzkXjNY?nh9?kY=m=eyIqmc2YBOSDYY{Lwp>oBUgR{ z9Zb6z1gCCEmWsvk<7!$2aer|kw92sK{|irO9n#6^>&#=JKCMyl9vekfcDEOFu%s*N zS4mj@I*$5H*Gk;#CnyZ;_cLL0N@@Q43GmnHbB67pw6UzLw{+vS0!D4*8Zc1@8W2;n zNRcr4gSoeoJK)MPWuIqXcF@R~Rktg0R4`HEX1gfWSJG3DRR5%10AVNJ`<9ex11V=z zsYWTPDCc_GGI?OGuEU@T?!f!`@Hwg?Wl%i__uJ{5Q7dq=1k56>wm;CQ(EtZOlLOEF zMpC0k&bpUpdl~M&E@?Q9?kRkYDn8Z$wJw;~YfTf`^; z%_U_~_{BLKsmZl6;=Y8F-<8zc8D<;x2>O=fh&~>^b2`SDIlEP>!Ar58x!F;Xy0>ey zSY4Np{52r77D#^{LVuXprSIzzYRLR!6nWtIWLr{IhcdcOz5iR(ZZ401t9Qdh9dR2n zpd0!^6a7Ns2S{ucL0BFA6*lJhx!@YA?}#qkV!x*ix8}2Xa`SKA(zCqXUYBYW9us)! zQg8ivjZu?u-H7ozE9$DB`NcI?9;^+)F0<%~(N(p-`hY9-5e}LuuQz48*`8%a+c$lt zEEknXPL3^9plKM9Dw{ZTSJ1<&cE8@m9kiEWGenjGd}U2mpiXxU}S2YUy=<&y$-+@-UZl^6UKStLSq&n^;w-lF3(gipUg zK#4;H+Uoo9j=^K9^sP%9QRf+GDH$+~bm;~mhNoL6@4;S#@vo~(Wqi}7O_MMttlX(= zzZ0G@vF$uhsYG?(F6TgbrolG^qGwv5c7;FY{4o{9K*OXst0hICu>*| zYQ!?62y*HkEw2bHDNR5z%fO!{VC@s1Qh-dih`^MJG;BAu?21lTCQpOt`|3lltU^MB z={HC(zLRE!E{ezg0E1^n(=~!w&5fyTXj@Tm2bZgWO?S7bUA{vT%%H>k#;VR94TcQr z_yUnd!ZCv8n)7u&!*^h6tOM|zry8?q(Eq!^3xAnNcr13FWFi2CEp(T^RaZw)4yrk_ zNa;-2X)uVHCx3&44wACYGzsv-!w?SP(QX#BfL0^r`3xn*vo+t0+d1nWp2%7MjS zQ)5@#6FX<`>~R1Rluj?XAKw2<`Ja%aNIcetA;3H3P}gc$DSx7|903xHp^MjQ=&c}F z|5f!G&)7!^;Rc(Xrob1ta+;_Pnrp_k=uSfvh1ig|kiYTe7Le;b%#;5la5Sw+9RYb| zJtH+sAQKD_Y(T-shV;2)K;ypmin!hJ+!sOJ(PNOo*bjUfkdL^{*Wi>0$9r44pnefA z<}6?x|^v_4CeNM`AbnV41{)kmN^JgXIy#-3|C_IEU-<`nC!NcmE>wmOvM4t2%Q^q9A6D=$-rgz8aO+hQ$qdOv;8TZXL11j*rLuOr|UjX8k$psfHYZ&OvHABNRMitwZqO3b8jW{qozdajkeFo6B_9?94J2yTi498| zK0pQVtRJI3Fp@kDrvfprn|ff8j+J6=iw)=mCV{aXQfV*v>{)Kl7fQz=Qy-E)$M;J7 z`7JY^U!IN^lI4d)n--^9nvXkX(YhJ4=H5I%{U%Fr(vhf0#j0_FqqtAOZZVH*xZ2`|JJW!ns5D`*J`#gNqJ= zv|S3J`si;S%lqBtUlKHV7E8IqxzS(dg}_FWfOXcsuQ)ID#wLXa2mq^JvXt~sRNdu& zUbI$7(AL&h;oA@p``QQ_>C#b7_?Op(Qt{COF0=#V5i06=gLiQ0>rjbuO%C z*or=ZJ^27`Q+(Il|yPK>%rIOE-@`&K_X(SOk%wAxF|dUGvG)>K3jB-Bry{LB-=J&L3K*xYcz%3_}9z*lQ5M%t$;i<=j+NeossF@l*;Bk1ti%XqU)mV^m z9!7;vI-&s@nIuY71py?$ilRLOldqwA`?87sgobQ=FoI6huQu zwkWnH?SgU3Ce=bRt*Chh^0&wT@skEgGC6g980M4L8_~+mabU%5&4CMd(}W`pbE(=7 z@Rqj0zE382UGSFO<6pw&nG9^Ilbwjd`R22E*2!Oa#y^ZevVgHyB|O_9^=&D*bjmq2 z^AqiG)pbh!QUckTk_?cfe?*_kEgrRti^<8QGJJ4;B97E5Eht5&U@n&;Jus=$QOAc2 zV{h#y!l!)YY^{ee^0_69&22|X)PPnn`3UA=GLtlq$#EVc`s=}Eu3yj^eK{fzGkc>C zC#Vv6ff8X-X#)}8n%mvWfr`(eYMr1PT_vL`fP(ph{ny z2U4DgC*3pClM`7HB+|bd=pEjt&kW9)Zrt~~&0WNC5c-)qkirFgO)x0qQCp8-#P)9O z2cq^JwzbMf=pS64?~9Ne3!1*mXwcYu4u$t#bBsnt9ALD?s5veJNpGO-BKbys@qw&A z;FZ(S%)NEH;6~vC#8vJZt-TIl!^o{sdqtK_21(_Bz@%Tv}xOoZ}W z_|1F#cB(n(oXqoW+R>x48iF*xvcv|3H8)R;Kq52vYA7Jhfa1xm*2FR;T#TKhY_x{-j>2R1v_UmGx+ve6xO<*@xHMR?x(4I21 zBtHw$%~2-~qeGrqSvtb_(Zk?eZvlRLZqBDjjXG=-)fAaypl#*j9HbIj20H}`MkULv%`yz6^!_BXx(j8b=aJB zadCTbQEzeZdYOP97ZC{>I+l=4mc8RK&FLE2x5L~BaW!)& zC$)|&0838FZnh8znF*pO()B$UeCE_Xf`ctL4#nLGQNAMVW$ z!@$FL3T+p1uGQC5QW)$M;AfUao{=6)*u0{U#huTe35_NjJ_d@X$GtyfG!H=hn5%4D zx(h6t>2gM}f4&JQEOhUqFK~zBq*C`y0|~Z1=ORXR=5+)5>E~hTRZ0@@S6uD)dNpfC z`w$jw0nV#sUhOs;*8FNdVT(7^SY{= zOZQYI50Nvv48pipik-+@^_szZcDf5?$|C%w<3HQaLJ3o#RYU-)L@1X1stJ}|V%C5| zZ{-Y{SJMULd;~-BV-&3MkUR(1ircI8&G2N>+sC6!Gs0trN-@Ivy578}Nmo}P#zu2^}%X^}Wml`csR zRy!r|?U^h9v&1DYL_5_rW5k2V6Mh$%Lqm{CXSPq-9!h#ck(tWz8SYpn?BBj2dKEda zv&4NrswUZ?d_;*(i9mXX(mwvamag;n&{*IgzD#$_yEV-mpA;&%p&J9Uu5#E;U_oEsST@UTC{U z_po8F2+#QeRw?OZ}h>Q*R8< z;xe`=DBlStfM{9UKKRl>p0Yp|d1svmT!lM#E?gS9-w;WBtcVvA+qwej{RIFh_!Sr; z1gQpQj>bbgMNpV2Ea5M2CMV;lI5tj<{3Pd%e}F|B*ZRJ&vUcTpxCRb+LH)LD({^P2 z%Sdkuvlt*MForzfiuq=aEnpkZdnB&PtVWC8KBZT8llFC-vPcPm`ccYwnltIa0vu8m zo;(TmfnaCSNs*17v$qW5g-!*cuOgg^C{p9CiuU!9wreTdlPbcX+*T7pv;{qgP>Y$G z$t}4muSLJxtl@*Gzufr1!DIJv$J#JA6yEY#P>AGO@2!YDP!a*HY8Ui|B-8t_TZH4 zOv4w38qxO;2ThAr@hItsjiM`_(s-e7hlb(|r~Bm1Qm?w(AGH^P*a+~$7pE^=`=$x# zdnN#k2YLzknxp0&NR|Ul0oJh_*|xwX-fbn(nS!BGKtkQ;5LA+lta?jg0(;1J9Roz> z{6F1@Bv#m8uVdCCP>~}XPsw#Tzc(}^?I(A$E55S`4K0nmw3+kp<##5E;eRnSPHOez#7AU+#0W2$ zFBYYbv>uQhI))uzP=D45a-Mr>*%{qwNFrH4g)JTUCV#@)3p~CHZFli>>-J| zoP>q(m9xO&0uJvauK1y!eqwYCfH`6)I7hz7Ge00j=70U~r5=yg0y^t4y8C^1M_N;@Mn?X_q1 zH<2-YQ;m#`wx~{91jP&}jh;IY?l+5tDB-{(u#wYb*9GB=6Hhm2f8|hv<#5AK(oZkA zd+)vu&;k`&oM5Pujd?uScV|GUw?|OorVFrlQz+#`8d7p46(tzRW!2t`%SQ`7y&btZ zak64O1Nj=xi@YKTvW->DZtMA}MWqR6>!li4boh-Q=1xn4SVSrKL{G!9b~(M@%E`^Ak%(eC3SLX1b_F+h6U;(&R=EP~e9370a8ACow+L7b7@ zX`x1j>{N3Otl9p>2AMGyH#E#(Oem@Rd@acGn}xdKqJYwF*YD5K!sqho-)Y=`va2N- z+^(1l1bKsM&^y2M{0_LhPsPE`X;YTDn+f~;ofx{Gh-9Ef(-OCvE`)dx1ZWSyn&Ws{ z8-cxSw#-Xy6o%xd`RNmZhBQnl~u~PaiVMetjp^|#;4M%2AAW2t{h>R-`o2R=@wng z65&7@_u!CE2m?HJg3j@DKux>Iq zTgHZb<@6+u#waWe&Dyk|_dX->q$@c1h;r5cudb_rs%q)}_rj$^q(izpC8WDkx;q3! z>5@x#2nZJ>1Ze>QDd|#LL;Kb~@aT1qb@{s_Ovs=gLv#n|EuCn|uwLH$ zCkF^>mAOAvM`2wbvzqgB7fhr3EVc|$$>F-oyBHQX`@~_8 zHSX7}3Ts_IBFK#^3^seyWdjTXSGP!pAFwyg(X!2c28pDk%f{p{jzq*kZGQ-^TeKY7 zkno%oGP^vYu`B;H8}6OX^ipy<^)#V|@Umt~R0<6|J!m_ev@~b=Y;RH68`U+1#k7W9 z?XeG!ohR)a z5D;lxMze;7YZ%J*=6t^30T+}F@E2Nq-CrI`^g=I|-^$@{6dS@(3^x(tk;d}!&JJD; zc`oIT1biD%;ABgjzCG;XsKv1FzU@Wu!{Tr#Y#Pg9=jEJ&u)~z5I#igTFg6L5DfBp+ zknr`RMt@8tY_vu+R=4Mv2I`{r@C1|hc3#!KKZ%qtEW|_*P$|M5M1(e<$l~-r8S?#h zI$y;mOYHkbVqNMyyg<*644o61x7?9fyv4ztW#_F9^Qal;Tg^33=b|{Vr6I!1gfag$ zU*5j?a;Jr7RbV$;%db!_{Ug0vGyB%Ql+K1kWZ!nu)pS|DDvKrVrJQQr_CFweO3|;r zXUL=kkqZxapIi5KebWXZewK?WnGiY@dlCAvgloQ}Y+zni-4GK$XiQFZpeNfI&a3(B zvUHep(<8M*`*L56WKH+eFio|dj6wRzM@x!Zm|<>eTyC9f8wXFIhPKb;GJ4ttOQhRu zw7h>l`BqudWdAG3*qa`Wq|k`H)rZr-7QPy_5q1`$9T*m;4<=JiDQ@XNG=6b7_#Rh6 zyV@5DvyfO|W{y!s+h{OmO(7L1FEO|X5ec67R$_Bd!h{r2_x4$N>I(w5ps$tqrC1z_ z;K-hF=`BX5o^LFq&=w7~?#d@e61nNy_TuuCTiFD-_|_4g*_>lOl;dxwIr;=mbKVIq zw2=l;o*85mQIrjQ*j8!P*pE==RF&Gf2Td*0a?mKEY6LlAe;M=%2i56R2?ilo>psfJ zh_CYtQMR41g0CD+v`o!1&<7Tghi{7adO3{eKB-bPTL?b!haRJEQ$B81DQ z?|Fdr@x8UdKr0c*t#?iMd5(_I!FNF$5^O=f%FSVQjBI)-5qQk0I+h24WF&84A&Ory z&lw#_PmoN$!LrHy^^uk(H%ku7Q?YgX90KXfo3X{QG@N{Bax2?k6|}!fYae`L+AeO^ zE@+mQXHwtS{s(%2I+Tu=FND`Qg`4mD%I)^a@CkA;UW~s}w}DN+J&uCfrQ4Cn#Lk^cgX&#dAD53h z;+mxD-E+uWW$Y;ric2TUecq+KBDnNzYyjf0kEySxsUt z4b7*RZPFPN^_tZ#Q?sE7CW(BEIJ5vPUiaLwkf)yc(3dI$M<{kl6*$9`Ld% z9weIrU&iS`z1e*j)=M3*oJ{o}|A-Qf8(oA&k^KV#1 zy_rf0qmu=qSr%!&+%_B~YD44qRq~6NIgH$-cX4Y)&-7-Nf!H;Yu{1%z-DCsPnlW{1RLEE?TEkg}5ytIK_j6WhNaaD)npkA~phGZoL2&vRQ)dbhXwvKT z?mdkomKlFZM$FR4F^q44rd9YUoY=b$(!oeyJ!_%xgvWY*Zuomz4c_X#bXl|Bn+2)8 zot-h%k<-Rx;)CxtxFyT+@h)V<5{^y%pQ{V&Y>1dsY3B!*ueM#zNat;UaoFA|Yfn&q zsDsPDx9`=-<{K`qWY|KC^J3OO(M?jAmA_~_*~LM#7@~%ydqA9|@m_j8%=zs$`~(^g zY8Mi;_D5*^CxI!7*Z#|Y#1i?`{0T|92pYG8_e{QtFlf7x@C8KkC1MEruZcv!mFcht zsg)1fKQ1ZTO|~~|ZZ^!A`=t=lJF$=Pd#7hOPA|=a2RsO;LmCAjAj}|wOCvnj_|&VDM36IoUG}a z)#Y!k`j8g@`niV{NueXqY~II@lJ*QC^l01ZBiZP*{)jK!K8sbX7b=CJZR=Y5;X30P zJ+vV@szLMBuZ2U_-39LYk+rbFa%v~I;Vny4)r?ukSv@>_%!v0};nnb8xgT44R7AsT zM00a#!zUKXq>18Ocof@qehh4#B`=bFnnQ-gJ2z8tH1WQoSz?^2v}~YhRQ%1u%#zn~ zgUEUzv@K;Bj6s6=W_`;x!`2QOY4+jg7{8&3ukyu|fR9Di2J;S>%Tf&O&`j{6Wj;@E zKwo4tkDY>sUzIg(bzqPlOsv#d``Hgje6L~M!~aP-DtKmC{rD$Kz9;p49hYg0cVdW< z^k;2;*nN$e)=!B{N?t2aVX`!A5>3hTo0M)9=u?hK{B(?{A!Tip;LLf8w~g6gPx^rk zI-2wFCoTsa8iyZ#7x%iiXhFuq_+@h84XRcIgxU9pYjBpvV^01aE zKMvk*%Rjhy=r)2(aggTC)97Vr?`EhNesWoOs0clyE~ba)W=>H%5|JSJXYfujFfHe@i>%CFwKaZeo9~ZkU9S2*SU_L z$^qFp=JD-4`itM*dr}5{Mme_TSFDJFCW+22R<&EZ8N%k`t(bnB)?F5G2awxYBk?qhm%c_2!=#7gXe=^n}bNj2x~EpJ)bvx(XH6=)&S z@E`iKak3bG{l-{_#*fdoMUw;Ni~`a!b(Kf4xRIbmj8zE?+eV}?+9^VTbqv+maT6>h zLUm3w7H%^AHg7R_>l1sQ(Ddr_8lT`(g$nIV=9D@%`k?IU9MY}6&usivSwXuEm>0+l z@%C1azjw1>562E8ZcSq}hj zB40m@YZbZm2ow{Cr)?%kRS>_HtNxOmrMsv5$>cyWF1n+MRsY-;FZtol5WZVNqX((#!3=tzS%;+GJyfdsmv(xW`5Jj!SuOQ>Jm8!~6E(WNxMS^t+fSoIS~lnZ)<1 zeYwNE`%w9VZqjEr;i_)??0xtz(9^Zl&!qZ@jRN*aU!T)xdv4ewsk-!2v21Fsa{PAl zBadyKtpj|lB$!G-g5tJ^dd9}OZx&jUd?v>}JMAmrhL3>3X9;|YTZq1fZ(^y_Odh+nEzE!a#S%(e`%vg;E#1w2?U|Fvp2%50; zBiP0F%OnOeQ?f>oQ8QRr_B^NJ;pD9|tYpwtdHYf*J+IoKVmdo-(cSHR)SDlxF)!r>*6eb|?1YS3H5(f#qFUVIJN-4} z+%Su%%#vs89+YVnzvXCIXg35_Yo!J%ZVagJTilpzcIFE;I%Q;9aYeJu<0*%V18oy$ z1oGC9sp_j%BmyI|_otGW<9JZ#ZT&o$qdNGX9x7Uvd>)ud_&vDS;Q_UN#OrY^_=kwA zCpQlrb*xkS?U&BTOt`WG*CN3Cmd)bz0YyY%MtGEppo!tWfB;_ z?%i)5=iaAS1)D9y(9#wj$am(9{Yqq} zH_iKPsch>f5^f`n=?!w5xR1{iGZRlwgj$lHKNdyPJ?6A9?0l349VS|0Z84F->O2j9 z@2PB*W;Cls(^41wr;Z~DCjQNr2Mi~5w)u$~O`l14wUf5t@8$e4^CCNa`WY+F zIuOqH3kgmAnY@w17}SYJ>hUJxClRNHpR@`hQqyyV;V5hCEf@1G%qICSqP zqE@L}SjOue(b>52g3^M^T$AN)tPAtwkrrM2HoRXN;$HC^lX&*L#3$Sr zWIn-)a$DGU6m&}cub z_I|M!5lgC0+o-I)x$xlhQ=FP_`+HszI(a)kqq#twQV*>uwaMQaNY%%>y$jD=i`ntx zTEQ5=Qlp)F{3n3!7cVx0Xye*u|6{e`{DESv`=%p#E`Bs5A(sNFkNiyGaAH_>w%dZ| z+IR;p|8=df(x_AU_6YKQU*_$>quNl-Ee&;S^Y)POY=#=`=2((?tsV6ywYr~lL#qu0 zgG=GAiM8AiaK~-(1QDEfo6JE07v3gS(ZRX5$wN$V+-)-QJ~;R`iH!>$y-jZ7gO_iU zV?mpDW@ z>@VR!AQ2>3ISZJ$7Lfx?b*qJi8;o$9e8>xiyD>zqpb$9XR$;gB-?~*r|HjNL0dBs< zyded?ys>HRwh~zG<_x!1NF981%fPP*{&-8>(*<|m*tNFR0xXPt10U=F9=uJCxPm!v z;h=hgb1!c(hAdoCN2>22U7i7Z0$!+3jX5s9_X6@*jI2T0-ZPIph8kfVm zi2Vdj;iW|AOOe=eeIhYTfSqD?++U9%77v!6@GyTK~p@R#?-zVhS zP7nI~xt$Ek+=RXc9nSA6rVNB85)D=j?fiaN_!AS;l!H)gR8G5Q4AqR5sx&rxW=qmU zj85D0B%x;f>G@*T%zb$NQK+c@?C^3tkwU@YhmU+EmIjpYMVq%`u-{B){3l{y1y`PwBL`wgWo6uH@M?+hwM>fVZ zM3g|oV*U72k%5iQz|O!vG7QSLIH()lJqAS5$?E}sFyW!$$1ZN_;=+_5vaSHfJl>V#-KoI>zrK&u8W0Rq95b2C|_|0Ys;F4!QivrhZ$O$cyO+WqzcoybQ@1^BSXK)l@`ir?8D>(Uq8Wj zqkNqEqtW)9oW>_MYHlpN@Yg3FlA}QpColTAHz`71<_jv51!n;%iL!_Es_Svh#XmC( z393%eNq+>m33uD$e(Fo6Be-JyF$$~C zUnRd}g!}gTnF0{v=OL<-+7@v`$ar`RL=jt0e$kW`fB1rjFtApU&C4;lCfTmn=(P`O zp&MdE77NB^)_cvJ-=WhAa@B8mx;gyX>|1+`2sDX(JBk2_p zSkPEZ9(V;tXdU!A`xs{VIBpw+k(UpfzcDm#kD1VMUa-thU*p zh1w{lPqnoC>#l!oMF<#zLUZMYc1Hs**5E;)TvQO?gzmT@yQhCSqH67#xN#XQKiOZ< zl%-j?WX=HKdhDDUigd45&pvM9E1zBSd!`vpYwPdhKHfW@5Uk|QMapf;|G5bEu{lU{ zvR)2Li?Pnx@*-=@Xle*JHveM=-W%WY`GUwpVq?QW7Dwqo@0>KI!WXP0rEk<~%M%z6 zV&rP{T?!Va_u?hnhkhm;P+_O&wzjAcFWh0`*Tv)d5Rs7e4PT!a3u`*6s`aJ2l+t)P zi?|%}YWnxo^6VK08hmW+sVDKvg>6j9%OOqHZzVeS*It=;&?&XzE`|HQkxnkKHH|15 zhnowewdT~1&rKrc7T(JkFw@k11f%niTiTVdV2#v_-lRBv)Buh;1_?x0RzQ}B_ zPKkUZ$wGn>xO$Tv*Yxi=Pdd1^M0Pj`JH7oW9r~R(vM|E+SBmE}f+AAeg`eGi>#6^n zNGZS<;i}QkO&CHycsPujueU!!zeoVfF7p$Km#!3jFQh~bs`z>#WcV#q0$W|mecU=H zl4l90t`pfJT42>s$sn713miP~f=IgxTH2wwWMN2~kPx`2)UGYRnFasR`{VQe&gTUr z!e*~8X_fSz30LynUg}cu~8EN|dF1Kd?R%DJbBc zC`1zTBA$k@*|!=-)@!h7t7Igz(iZg?xm5U*WT~WZMYOLi-j&}ez(wp(TG5%oi7h|M zd3IOPUA47xKNr;u)t- zG8-usV~J6)Tga!ClcvzeQ9+rADVLcO{w-|K2K20Lf>osW^ z&}~R+e2d~#F#qXL4BR^ISx!DZAfCdS=j=6+9X{df6=;YXF+&wA!0jtd5H00Ci9}%t zpOT%PO{DEe#2eT=q`&j|99XBeE*7kHyPCmy%~)zI*+>4hp@DZNqMWJ6&U$4Og5lU253>&eOD}Cn3S4|qUbh$e(8F|> z)Cj_9ju#E4ddh7)@h-XwdH0xolA30DGXC)6k3G<>35CjarV|$ZhTTbTp}XXq zS*eM@(PxE9;D8bI6zyc{f`W!|nW{nhIa(>~cli({9+Re0NW79@d_T`uSJ^K%q_4lN zHvdMiC*8!WRX0h)t!?_n%lLHutVUai@L$s0o>cz3}n-@^4K zPjFXP7e^5^-$w5hE@v4Z-AiniuxGBW5LtAtF)XrN}FJC^6BjHU?FgL z{cN!*N=4Dk*&;KiZyseh>0=mGR6HbJYCgTHq;+u#Bj`tp%j{t^e&FWpitoG+Hi63* zskag><4{te&LSZu9u?(JtdG!=5$b#WsBpg+Qf(al>|0AT!F)r#4-=Yx5Ue7V^&|X3 zIKb{c#mQT81N^}p4)ptBuPV{i^|9Zw1kg(IImZ-IZ1_!_XLT_9ECzCB&LLZOEjjho zKXXN|Nm~$7khz$66jQhQFcVKj(Uw>BkC*s@dUzEy(%G!vo>!S+Pa>tCu6(~L+v~F^ z9Z3Q`mj7{r`{s8dyWcvbsHhG&MT zz@VBV?|JAwG%mN zIqMR7^0kb<#VMHdu#qyENPFeemtEX~>JEiZ-s)7Q=RZ${Al_dYMf%L|b4H>g`C}M) z64o^=*JH`xAWKfvr8}5~AyU1VpQ_}v*OM~}wywaKb8m3`G0NysGSuf`-SS6}=qM)q z5AEoo7PGY=wza|dGwc{QsVbqy3ZBLa7FS>5OFZLWpCe20__ zgbzl0%H~9TG@;OJC;p6#M}d=jUQb!dlY-`B)noGLuTlL~#2DU>Klca+iB&8d7t|XW z!oQPw4Q5P!YK<4t-UlOj`iX9t{8#Y?xS3QD-tnHa{Ade0-_mP!L^IE^QHC1DDT3*K zrod{&l4`S`7Di7BHoiBvY`Fys{%{Q6HJv(u;vLBk_AEp$LNav%$AqS{IM1R_wh_`V zoSk=e&Ro&yS1R6g6*#GO7R;AT&~Lo|1(9HvYO)f~J8sHH9)IPF`kRhDd1O|>`e97V zu0d9N!Oq#z(HmiFd+BMjid>xdv2IGT$DGkUw1o*6uLOU`V1}k#p!uzZoERg;g=rXB zLZ40JdD5*|znA1e@rGX^728TmvWU1G#-)zfYwkewdxl*uUG%gq(Tb2(iSckcxj@r_ zy3vinK2#5$I1X1Bf9mqdm`Kz?Cev6uy#jw<*i27c@(k_#$)}I3y`>QAIYP8#xrvOd z*a^jGJ9#Ed>nJtRGpG2HOCK6;lHdeJDAdW_#bx}sVWMBQ>8FX9bW2RGwFe2J-)Sq) z!{6UB1x6QSxu?4g@6D09X!;ki5E92B-IE!aw0@z{ai4w7kw&(3nsA&(e(On!pXp^P zLNNbJF2V~hhODJmuZWJ?u(^&+?|%)^lAneKz37-b6R_yRItoG-@s!%$nHkui#EXM^ zz+I||7@2RIQ^P*{&Z)>Ee}_gao)_?tLluO2Jk&?9NAmMN5L0@b>UT7T>yj124{7Q~ znfn_UOPzCA)uumU9TImpPf-w~{yZu!>+`kRj_U39M$gF6(w@zO zdLqlpc^Q`~8RV4`w615f#zO%f+^vOB{!n7lvx%u7_ga%2CrRI$2t`L$9yoRCxDyO) zYggi$it>J1GGS3#eDqW+2pDmr>rLm+t+Ho)T?t3?N9PTEYKJHyE%V0=EBhv4MrW%C zer{Ypb99h`n%4*-L%(f(LAJzw#7TzGyx8(`cLmN2x6ubD1$)42w54F>Ij!A zXFYbjuZ-Zn1RD*DWo|wHG0cG_P=mZkU{6D$XZ?Uo=|${h=s;LS5z_^E`6<(0uTkAh zU}^5&{`R@L!2#H+s5_I$n?Fl)DNH~M-GDD7Yb z`Fl8~;qeFSnU-7;Bde6`BR3q*nGl&b&rJfITH37g@BgrCuk~y!taYv%z=)eJH&onL zJz`Gw&@Gxmb*0|4o-|GtO+A7tJBEKjNUihbJ)ZxyPMoOpiTkr8e_ES9eu~3OamS%( zU72H&UD+eKSEpT4!P3Qw3=WaFtURhebbWvm16cuk7Nity>`GNK5sRe9B%I%+F3rRB z6vCLJwcbVS2fnN4wKG6j*m*Uy{a}F!-erd%`K@1)^hWGFR<9e&SI;weXcK%Wo_w|( zrb3(U403l!J%)$=zWDp@75u4*mtLH4N)H)HDLfgnf&{Ez)ir771)E>+smL+@G6%A>?jfbV>wpq z^cqZcyH}Nz2_C*pI_7}M;IHGn$B-yZ!xHns0@piNVT1W#;2*AbFdzPp=QRn|NeWCFqoB_OM_pWxpZk`*iA=nkb{$%C7X+x zi<%-B?&|IJub&yZ4rT`cNC5x<*0_FdR4Y;dQfA&>ur>+^uI^O{|B25A0s$|<|KRPV z1gh}#|10C~SS{or5O8JuA96@cuqjFi(W5KvcW#v5;VR?=fo!cDp8YTUFb*ofq#?pE zB`OH@wMkM8E zDBh5{sUi0%udvArW|{6G0Pp^Q_3!G$RJ&p&hC!(z=r5# zivExZdq4-Fy%yWGYa0;-qWF9OG~ZR;kP9=TyH)<5J3k;0@B(%H-1JeY5?BEpgy~ur zEkWE85&)qH>)*Pbcf)o7T{o2_p$974{sok1GDHAVrH9~OH_uR(Z;2fs+z1E*z4RYN zSdLt=Qn3EpE}U{=8hMBykS8!~f%{1RkRY1?B@&H2fNjzL)g>;0GU2d(!AKY&jMrEN z@sv(p00vcJ`gh~;ZNMxU{%X7!20-ro5LUzhp}&?(dbq%04~*1q0P58kzItvfkqi&p zW`Iy#a~W(ru<{4Eegj;1H%zx&vWPG)#@lg1f%4kS0^q9tFI|`@FgM1(I!78KfT0!* zRtw18SaAA^Vu1-eVf?F0kuw1lwEHl176>j(l?j4-4Z~7r>#-nEfGSYHT?=L6+_0A1 z2cy8UnEoj754TU|dlrb8pYVI?O8qx@I*f6sOC3pmsTx&4=zB-ND| zImiFQJB1n2UP*CWqaW;`dnXL|UQ2-UZoiIWfMv5lm~N{66{rUs zG1C==2nJ!jbxHP0gKGnTAPgwtu1m^h2E%sP!FVu5fcHj)DJ#(F>)CGTTz3Bp@_!DA z{;ltT^IDD=HqH81OKo216MJ}D4h0+J{&j`&>fOo{z3c!ul% zJW(ky?2!bR_`jO8Fd~w+3~)N*fS$XJ1D1ugu-`TgA^3OvAHZS11Uv%6ohF2+!tQZE zc&}@`gYvy67l1_rz@odurS|xW3lCAgZZjX~fstXXoPS9Qa{`&eR=1fe7Jwx5@65QXOuVPpnN+ZWzvZtl*JA*rx$To9UTuRf)J=yDFU z4l%Ixc9&~98w{g_feB!&+z@p6t192!qWdQ%>byIc{@SqnU$9`p+>^ScmsKEU2^-vX7U87>FrR0w zax@do;KJ=7^>=Lura-rB?aU^ivjw$|I+FbZ^UBiebDcaTw|=>ny$0zi8{}N=^|}k4D2+mzoSQ+K%(h>;C@o%7CBO&ookJTW* zrbF0qbE8V-#SKYHEwFtRJZv2Xf6pouhK=reXG5v|&@ZIN>X09T`o91Eb7GoL4n}0d zZ~5G1#L#pg976Mf+I8LQp~EoStJ&%1>f^g4)Z66;81{N>3BBDDuiH}(azNuHAb7qw zk0z%MI)MwZhpi=X%Ze3|uU7IJoITFWtl6x-ni22I>C-1e?#Nn<>&PdDDWMu8mLC^# z&|zUkNZ5_;p<7cCCI(DpxVR4;Zu;e6X2T4N;Y{zv(2|~I>677Ow{c7UrDHM69f7VS zgb79hR28tm;%9%_5jJxum`$uK$R{rM^@skHM-5Y5Z1R}CqGPzLaqV^kfU6OvrWf^cdMRQX(mB`Pm5gdKJBr_)YHNVaz>9e8Pk5~miX*SvMJb+rAjPz+aJsDH6j zR~n^TfyWZ?+t2I2%0{;5h&ii@T{P(ac}a#q_!j?xNM)@J0gIN^>jW*q$Ye&8DU`l> z0T!AdVAU)ip#mZEYZvkpXo+G5-5x-#JjKcW2tdm%Mm}o^Sz(dhy}f_x_{O12P@u>v5P663jI}K0wrL&O0K6Ny14)R91CC=$ zn3$D#XGrmEuaCZ6dA+~(Sk&!BS&`%mvHvT8#6i{yEe}$=0M0j?Df}G1fLRH>8eteW zZxre8F2~=Ey0ql(#c{*!4K%V=0I?hK!2M8~j0)yz@6de8MbW!$)ctTnNQ{;oS<(6l zn#zITdc&~~l5z1Laure0-6av|Pe(f`B6skc4CTk?ypHQvmsRlh(VfDhe+53mmc2(K z%Jm8wSj+9&St?NrEUMbnNAdOxva6I~^qpqE1zCy-v$Ah!ZUe%sJ`J{^0B#c~bnmD^ zDC4*HTUay(k46>nue%{OqNj{u?RGBdXSEt}78dz`dAi0uRIU_NKDsq@XvZ z)8wGffJ-X+_XY9q93lMEoy})~1_Sup#*t4~5FZO0Aumpl6@>SRM(Gk#idB1iEWzMO zhFW^_W?8B?uxN0lBu7JwMe)_2V>Ti4>uPQf{C?9 zUcroN$u1pYQ{jNK!9ZZeTombe1r`%DhLWMvPdxgFN)7i;aweE$pW*k59@y+QtTTn= ziUjx1iKJ*#OSOaFrAwU-ATaRAX#DJab1cPh5IOzWL=yK^K&pxIn?#1ST#TG^{bRUE zwmWd3`UP7QVc>;YLSHgKS5eRpTQ49+z4AeX(W>PV^GO6-JmnW+k*3gAKsH?8YRhWO z=kn>ZQkyzq;m1IXiWN&ol{JN?SRY4&D;)4Ib^MMWG8r*@RJL)~Cf(%(`(yhM@l16w z`Yx1!HQ<61cxf({#%E2imtQo*RX+byUX_nOC>>*9?NxuqnWQMFbeIH$DAN$(w4cGS z$k$BQt}7Ph^Jb|OL$d-+<^HDtwxmRMU;l+}|2Gfp#MNsON~7VfanAbt6I zd|tKANa0IBq+k3b=pnVra_PCUsQfipP}-(Q-bh&n)NKU|zQI8G1>uXddo_Y6gVxDS zrk(BJ{~CQn*57)mN9b+(ku4{yD8%31V}h)^>yJpARoEKEiWT>23yOdco#DM)zS80% zYYUPe`q-{h!iFI_z>?5kUCoCqjKrzs)?zi62`Q3DQcYCAq*M)pgq09G4{PE1VW!o3 zh#jf~kULAazW?;{(?{h#aX>__AU)%fT9{Ai>l=ZnX_wJJP)}RiY&adZGv1;hGS*S% z1S6ktTdMju{}(gjFskK>6gaLB*abL~*NX z$n0e#kxzxuPhor96SmKbH&q`yZ;;{zQQpwKtZ!xA%_{SoeUX3k4_)tKy$FR? z;D|SsRv!;)xLo1wK5MOC+Z{f0Z^YZW3tkrh=>N@U8i!!Jz+nC-v*GpXl}ijm5CJfn zR^iwlEHF16R_o{Zo~TxEHjMu`DhxQ}`j$t$uyqLU65Vy~Y~}W05e|fOsb=DC?tnU| z!(FNncfDWMgWm~g?qfC^gYyt`Nzrd7wIV?EX;ulnC%&UZCx=YaL>8K(4R5KFW_O%x ztH7s~zJlFxgo@3AiJpb87`xWN2Ltd>>hm%tCa`59ayFD2Bxi80a%$Js3;IW#C@IEhXIraIxxy84?P?!rFX{$tv|$MnDpn~zK^c1 z+DU%5kOnVE+8Xc+IJ47_L$1j^Fz8`zjWxok6{2ronU2%oB1zWIfHw73~hkUTnWHF^h68x?Q* za^e9f&pyF=edy-Q_uPzsPP^nk($^5uPAwWgq=IEyvjz5Bs3QR{w}J_6KK5pmQMK{T1O`RQzv2ZHP=`E##LLs;4?L)6qJX*InS? zZ1QezJ?wV?5#xqr41OM}B-aog*Ul}@o)JjM*TXNQPnA}J!JKp)%3A^(o_>Et9UC-4 zju(*Aq3lxR3*2WDN4%vT_ETOCq{cfuJI7}oK9R{Crbpe4?Rp@@*Mlcg#OCD zWelYai2}SA8hqRhuweb^Jea|)rgaAg@*E$%pOei#9ABoq|RYya$Mnw^1sk zb?K1}-&UZEqLat8Y7^ALIr7i#$I%Uunhudh4wGtxiHS$vs|WKanGSjAGEA#s?(>JE zjoyV{r6qBcn^Bv!WC`Pv7#37Hp-E&oDf-DTdgz9;QJcdhbL-1i@MBOfXGPu}?i*l` z;8bZ5IUALz#t*BaN#JC0)dSpj;^Xe*!id_JXc?T8e^E0Tilq<+U=w&Kl;W$zz$oe! z_N9{oGw3NHA$QG<6~_`uTt!hn(Z@fOWZ_w8)s4w?0>Wt!Ne0I;{c#ye!2)+JU<~5R z#P%atNNs&64B+c%g^`4H@?aiiT4>^xz?{=H8=SM?bblzOG7yy}R{=z&1F5lUuP#^W z;`u)e)Xx-;QajY@o39=+kM^Lqh$a>(T67eXaDufcZ)FM?baEk1_b(PRey|H{B)6lC zuQ3)YA%!o{T<7v<^L&e21`AX{_a~}nn`RzyM5ws?pyg6nCqByfF+ot(_EFSfxJb3w zcqj8-JG9814dpv}-U2;;7piBq>fby%m>&ZtJr)WU&5S38;0de6JBL(I=LMAHZFknL zq+2cirm*TMHXxudYc2DJt4{G!3zwvWTSVGLdv5_LG-}JXwCN4PS@OImhvOXASs>|j zWplwvr||R-aB$B3j~}c>Im8gy~#nJ4J!R{q-p}dw9H6HB7Y9n0RkJ9?1wAhM_k9Q=o zaZxwZrCSOTZQwcDOJTt>@uO0O#ICTUOj^x4y0TGjy=2ZdjVreqe_aC0O{1!B00}V&z7Y{i{Lp zgz~=e>fNkj%vF?>Pfq-}khGygMEv7Vq8}GKjSU2pr5XX&O-Nlio->HYa(e0BU(Cjb zJ>%I>t&ssk9-jdzm(A5e0FEli2EYhW@%+)_0bdA!rfm3h; zY^;niGk_Laj=#;pZOicsW>iSauyTfJH@~(I2PT#d4e7<|2-T?DoeY0gSZxz!%R4r%JZV(ep1Zsnn zR+Hcw(vTlq<~{#nb@P3maGS@Y&i|EJl| zp4R`;lixKS@&_%Ftyn24Wlj+K?(cIolve8C1SGyz&NbBU@of5#_)U3RCXUt2+hYy< zw>3cMWAnl-8Ptx~m@&3N2YDbsC`4?=wI%+pp}UsW@e@RxKw!ZzBzsdfEqL~R2W_v~ z9>xA&X5A53(~|#a6LZv$r|E`|?juIFWASnUwvafA?0M2gxZPT`F17DVU ziAx1%y>-a=5R1MgXxd?~KAkR~eJ~#In_<8h+<<8fG+00ZNc}*97hm9x)z^FN0aTM* z0`Kuc#ZF4Tay$yeq4t#K^89pezz(h^lwLM1W`F zB41{^ZD*PAJ7dWIgf*QS+qMepvlRSkb^XycNpw1cS11RRs&i!1EUCx5IU$-OHi6%u zs{IkF4uczX7D{06x58mGKQG&MnDQW=OpYB{r26FHB2RUh8pM) zK!G%_MsX2W#yoxJMVc;UwMjr|_}oj7yNCzVj90c?Yj^Xhope3F!Oi7*<<|;>{|W80 z`F*yabQ6L*+dDPMTD6=9i&O=xNy~g&yyb#8|4siG_mFl0qo>iZ((NTh4RE9Rbx=LM zJ+!W?8e8UB5}zK(=W$1fip*gL_&7)96NJ?9$t?F@>Ja(v5k(g`C&5Hn3rhArzu89P zMI*SHtyoGk0L3gc1pJxZ4J>nMtC%n67`w>Vj5IW`1vAkyMCeXGN|)_;{zR-JI~(O1 zYmP|}>kXd6oCzYS`Ppn-0fk4Kgc!|RVy#L0dSg%}7Q$tyZ_2pqFr`xA#Hhwg3!%Jl>$hb{2!?is2b412O4oH$8}JUn6uXvdEJ{L` z311c=Il}n%qi>`eJZSBkWY9thmW+3~L8(JzJn?q{0nV^*e)1|I9yE8888-=_!kqORAuQ{05%8It)>7qMN$E?Lu zEpqJ~iLd7jY_w=bI*?c@GAG5=?7L}?`DA5NSm7(%%9QUVFxo{BcyY4XXW}F-cs&G5 zouDm-WJv$dmi9W0seuHsB_H`WA1(gXBrMTVc3I+-LnT~^e6<=3x(@`7fiJ5`_|j}P z!az)Nfiu}3ImCL9g^~Eh0wy~g3}P!J44^h8B2C^n%)Z@>o}m-Ab`Bl|lWF++OI zq0wV9fG;q$jUwg^H$UVXY)+U zjejcE&A>Hx5&VC0Ytx2AJJ)7GrxNx!_O0F6WfMAMQ3)~Xd(6yl6Vn6kOZ+{C%DJKP zYO75L>Kx=H{|w%wKKy9A3SF@2G{zEAK3O$Lgb)^7@YOJdefN zbo!6nj`Q9-caYNe<-L#uF3nZn{%Yj(6lQ&nKv^5>?WM)zHRD4g(eUGfwRdEfee4CP+N`1##7gP4u zZCUT+pKJNaCr~eu`bV7FS!dbXI1(E(#a-~KV#q;YvswiW`JHowHhZcwY3A!_&+*#b z!Tn)$&+0lu5EPTF2i}0`(s5+nR{S7Mt;l~}2xvQCbuIy&NXJ?VWo+RhC248#sBaDD z6#VFf!Fm&~?ylvWpJ~&Nd);{!%}X*9ofX zighZeV2Cb<@XczR)#X&@^0J6Ql*O@F6N`W!@>ETJmJI~3aiWB%R0pM)Z3trN_e=zF zfweO%={X#bTd{vyNFPv2Ns9Kj4T1g8?@ewuEOnuD8ZPwIMXcsf&hX6l4wOj1{f#}uweL5?+I<9 zq*lQP`V67AzW518A(PBe3MTyQtQ(o1YFRj~bt6P0z%%kb74y0h5FpkYQJEDO@O0(v z)O9CvC~=;@e)KZdXbxHO>2M%@^^G=B%`aGE-y+>q4z@9@B<(6tufo`k4X`{! z#_vD~7S-M^hIQ5<07gOOmN5TfzemzoWRSB;yR8Q6VbGM1@Q3uli>^fKGfVpjAruEB(UXY2KF*#&k{$#nCrz#T5V37Zm&k=Z$S z2#={)BxrQNGQ1`(i$A6*63?4)d>a1dTMf&&kH-CNy?F-4WB%!GztQf;k|v&b`0xj@ z%XdZt3QG`bX5rh$*MN0uHiSY4WeCC=3lhGU#8naZ3N! z#l-q6x0}!)Ai^9VAaMV2vCD5;dlU0SM-m)hDf8QYqXV@MV4nT`ZNGvG#hP!3GQv%B`=NIYRR|xu$2zW!zjXj4 z1#?LL%0?#s@yqV?`XJ4OgP?5-lN1o4rluZqj1H%-`GY7U>oar(<1IX(B&luRJVzju<8#^MOA;IY8v*^&31d$hp)mUN;bcERh*G;L zy_iE(~JkOdR`yJ4l#?VrvJs#6l1h` zjvM2$)XR?r9so@b&IKFeFo~K?DiT08qeR=$&#Gv`FXBIZf-}_zE1gLtleUX=pB6$S zDmsf%2qFos(8(-;&Aq-p?9PvqS@tCLBaN<4Bqc2E=4kBg=eM;jB0=j4k4^(Xz1HT) z)&w(pGQ2eSd_D-<73-58$Ux2Na z`~A_O1Ap?mTOI8p@ywT#iqo+KfFf(?0KVIH(rO<-3^ePV9aXo~A)Cc+kPPWO}W$JcJ zrtX*OnDD{nx>=rJrvieM$04{_p$c;>j2=f*x@jY6{RUyHl3oiL(s;QLSGsHDszU== z!+eQYq(7Wx%K&;@d!#P#-#h-eeLZ!T+o`Gkr5G%?s%z=q!S)E9Y0bd1DCmwF1PXVM zq5#?Wlg}!5wNi?YiS`r^cjTT0+NQCH&rVKQnZb@Ib)j)HCOsXgKJZM?g}ytlTn<8mU5_rG3d#-3 z$E4H=oz7{}TmCjnR|^1URfHe>gyIdBaeDL>D9PJVA%ZBN7f0K-UyjWVrgYf18P58L zVX*qX5U(zjBX0DK>x|p77CK}5@4L$4jbS{a?mqVAM`ZvZpVa#7se)~_Cx}W?>fsPN zsk)wX;aSSSR*lGvC7y@3oIs4~_=l6p2L3N2Sfwtgb7YT-olKzk&XLBdB8S&C8Th+G)NZ9mcWVUbS=d| ztGRrF-{ZWkiCS!MN!epAu(JR3NhrE6njiiZ4m0j8~&hl-|%u(qfMq}1|Foz}jV z&?HQgrJ$1m;{;&!9~F2YpN4sjM`q8XiS&?m-e=vWeQ$w-CkgTJ2qMe*qPb>D*68>P zy@zm_%`^;yJT&&)xBi0qjyu|slDm`yO})L2Z_1B|-W`DA#<8bI?A8o- z*4{J_Xj$yUd)jdC6=V!^@_HYk!+%=95lNrV!z8-fehO?Fdce;$@te~<9!c^8CK>BL zUtday24TmwQ7b&v6;+BUQ>-n?=!Ouc$foO3-<&Lqh%IgnB>k-&6Evo8SS$!p-*y9U zj@Y&Ju~Z*|<22y|ihUrc=DBB^)@gu6(b<|uPncXunFw5T487#QE78Dh-BWEM_%Hlz zs8J58ZeZqHWaEfmNJ)PN+}OLPT5-to@8D{#AT0Ay^aa|$y=~n_b$eYfdMeffdA-Yz zq0rzUKImglo6lB-ch?gQUHW2Xf)xq+s|&0PV>T;{eMXmbAZB;BFb@eB)PSJmlFhDbOPA87H1d7VoYEMhq8=d6Z1XbiT zoCy!5yJly?x`f(;W=vzN%ik+m|M{DrzJC69SLgmnEGlzGkgCnw$)P$A>ftJ#9b4h3 zm3@B2lLzwK7!uqTAbY+b`D}i<@1P&*P$a}q65N;|B!Qp1TRl?b{nQKHh~fbLzxF=cj~5uDH3b}}y938&Qrp^*KbCeoq-stgS)e8(QoV5dO$DEfQBcPS%LCpk@t z4Bm*hj+<_VT`^d2hn`#l^hcN{Qh!|0F);Re6=qL(V61P;i2H{Ab`feM^i?6+K8rpr zJj(KInp0D4wV=D3)!3B^g!O4}E3Y;BwbU>=x0(1q| z)Wu&jjy6s&XPmjfqqyE2Jn23huHz9V5Ig3{t;3y4LkDJa17@f z=fpMmwoxEQuPeSKw2?$NgY%u;0C=o&SJ{W+J#I@7Gwhb_JJIU%@r$`j+5iskZd!|` z6&c~LQck0*dGh(LloJo(O^!Bjf|dek!|0#)KKJ%U`Jw%bE8av{3l@X2e*~sJ0%Lg3 zQ@?ZW8xp?0Abw)yOH>Wtr~ruz;5fwc=IUdVf9~3O8brxjG7%H9^UmLw(#9rf!Tr^bT7opX&5MU9 zS!xgU%O0xmeecHG+11xm*Y1;a4_@@gBwy`QUX8X!ANOc1&&OVM-p4tVgTCf)+SQei zcWB0ml9d)y&rElFGM9e3w+uF5DPWzC49@JEY7psR!!m| zFldEB4(n1cZUhAFsh<>8oYRuPV;8C}Hj+fT@<5V7 zkc_&t;y`S_WOsLFPoUI+pwIbN+>cQnrNq;=98CSviC*rV-iJ~hsz5|1p&`P`P%L*& z{tG=9R;$*BsXv70^{r#@qVXgxbBpvMB&Ofb^@AV*054vdHwCN^KkPcA_A2oU80H;8 zx9BhXOk{u4`psmRsNV-DApTM^`a#6}5Mlk!Y{9e08Wa&V`j=TV2T{BCkB1HH-8tSp zU!I)*Fljx70)#Zdii1hq#SKamF#wjSzAqH$}6Z z+QbUofVi{+w0;%XICKJmSWf>82r0EDy}*9rg;_`1dXa`?jz}}15!1be0=pcVe6#co zQlh5>ZCfRM*a;24qLD*{JW#8)yOoM3gZW zb&^(sgxqC{jFS`gun zOIw1U)nZ%xRrbh&r69C$K^RZMV81kl{Zl|iYKEEU%j+191{y@z7$WD4j`xhNBERo& zk5>xOCo$QUAUKk3>K9Sg7R_=Fkeq_~hNL9dk)2*1|LWFoB%m+_` z0sCL7sH=5gDkl}iwJ5Ca1w2|H3K zB*5b^mUI*5x0p6ByPrGe-O5j*eZRA&VG#+DUWDuzr(smgumkLR65ghlXLRm=ZGE*9 z?V1|R!GmVVb+PDN4^8>R5w10I>_0aCqouVQ_uaR*Pm`7IhbQX6qr7SNRMoyki5Q1~{lJyT-$-{<1k2+Y= zTaE8ZK)Hf8a-P;Sl~<3HY;m>X0FUmH!(|9k!DW-Qu)`2{ds`{uGCYIMC2kEHHLJ&( zPKCeK%@jHKE{aUG4Ai5%erQt(+R7S#*pm-HN(Yx)2a{+hOqF9J=_OeO7Yoxa4xXl+ z2>e!svkBHr%TR+}!_()&ln(SpB+4nlPua72`w4z6P(QfjpeE5ZW$6gb0^IRG9o|FQ zW)VMzR9h#BTc|OT+V;1X8I{^gs;bmVs{ZFr&VpPBbf*ko1SOoSd@DW|fVpRtXu4%pg7a&|a>%hX-)0EUu z;*1SL^iX9cADvUt@)#u;RtH0XgEf9Gx{7LO!tH-%+{HnNXwx-rt%(dN|M1?*WP2{6 zGhmvc1U+e|A97lph7ejZpoxs=@^8#3OrT1NNa@ntN2a+kM&rc_XTP`F7x_Ft=CN%d zeyfU^k9SA-9&|&swU~wf3s5sT6Z}mT}(Y=8fuakpEkEOCXF>*};Q=oN*=gu~Gmw z_8VayWKtq-9GoGj2+nc`PVk+<#HM4J87)ypJa3b z+ZLF>d-#0Q28663j@-2TN*RV3ruYLz$i3erRxg}*M=dX+WO zVaRJhd?AmUlm&#G1A|kaIV`q#6$oc!vYDK;GauM4QS7?AgImWa^db5w?Eg(L-C*AS z3MvjKZe9I@#AwTTmB;)omWm9h>~pT$SxSL_$z5A&2S%YVlSQ&Tg3sgmyf6AXLPFv$ zGG+DqO)4C!9E)1aZ4U5rJmf{>*+^(8f^IpYr|g@vH-s7BY%-cOg_rF@Ai9X+VHaN9 zU#Dtur|yiHbM)|7fdpkTDH;#WLR72^F(#D%A%z$$xy7%l*1lMLgX9Db!0(DwYSx68 z5NzLcy~;D@KuY+a4t}B|3BPB-(WCyM{H4piuZ9}PW%_x0H3~kDj!)l9{Aif;iP8{Cn#=0d~00y$L!pO;`E z)3_64zANuy(ztWQ*n^WM;AY>j+;`dbPJNoxn`K-ApShL7^RgL+Wk?`S3I3nKY#N`{ zn>HGkSBwa}TC6{Kp%qHI(Bm8O6cdA=DK+h5asFENP1CKV13n8pWoQs&T-29K zrP#1|G}XhI;cV$z9nE{sP<45%n4v(XqF!;AZ*U`%>TRFmTy9jr&jvpo0Hc|naagZ| z)|Ibhkbb?`_e*wB1}%-_0qzp9Vn~ktz#;o%^Ovp0upyze%#<%CRWukMJ?Cd0QCZP> z9bWQFs~e@kwGB`p`!}YF*}o~+yZs_31Q8am0-p|-h<_0_L&ix zq+?`QEJ|AW&jm`1&O1#e0lFI{=a@nj##j`Tfgx zZx9`#q8mArWawPji+jw^4XJZMbr+GtlXFs7+GnXPIp~~95qT37mre4ApB6awI5AmQ zMNQ?pY$FSJ4$tL+f4JEU3O!LGD)G-oP6s1_>N{jmb7E>j(UwueK0c$gC2FryABOQ1 z%x@%PW=PEH1OCJXG!?LD?;F}SUmfsuwi z^CU|btj4C4LiKYEe&v_wVZxFvSfs>bP7f;KP@EGZyi@!V8TiM@a!SSJb}1u0;9Jp67tVhBvcC;AEQ6g6oj{*zU8WRyQa5;*@EyC z*a3RJ7qZR$xoHZ^g-WZRnA!_t>msc;CL6jb2~YUKN1wv6C+iCz@E)he45S5nHlt?! z-wUK9BOhM3OuXpxZt{A_gOQZB;|4$96r^bs^YBCp)ixl6cPUl$gM>O^jRVKs14JlI z!c8>Vpe4R#3nX80Cf@-hcbeFjr9nFaQZ(n$*Q}$w3UP7gE1DehGpz` zWIs$usc6UGAf?sEbY&v^WffH!KoU&rSzA?B%lGDWp@0C6?C89KKXb~k#)la?oc8e6GTvx9RtP;h>0XpYETf8 zCVsxlin90l$gv9oXq|L-)6wMm?voY|<%glP$4QWvM19EDUR0TxNu- zVW!YY>va=tkDYF8u#AtKnU3Y|gB{lZyjbtJs^%wF3+ABMk>?bHPA1tR%|I4eRS`CSLLnP!8XLDzzXL3lO>2Gj^stHgWket`TqSlTPrOs5L z6pd<|jU@+{l;%T32sNZdTi+xeDe+hyXp6KQ30EW{2#x%-7+_IX>dM8I#FRzB-j*3Z z&M7QV!vy;vs#t`r1FJD>@Gr_;(l*+C9xe&hy*?ksYEv;RiI6hj7L0N}42_naE^@+2 zKLy-8#W2!Gx(h&nwF(bR!Yn3xA}C?=Q5NORPK zh+vVW0L#(n$EvaU_*ZMgKa?Ek;cghTm|1jh#1`W&4+lPmnl2GJdy$Z7F5_CK9&)rK z(_7D8+L_JOQ+MONTEZi@-=|wQex}~t(&|3Nl2f$5jsq+ybY#~Rxe+u$_k=r>(yzR&97pD_H0RF zC$L=G4%O+W!e3E5#CO2sq(%#|GvWPP&@h;~dyk}g{nQ&VC zBewZ)ss{EtBC-K?gPj^1u~JE!^9(RJY0#UV8lA76W!R9T4VFZYdahB)z`8 znq&>oQ~2uCbsx3XlsGvxn`~BBx{B#jzvz}M{{b2kdbv_YHFr+$m0x)3EmPYSh}ldv z`En0nAHCGR+<7Y{Ht4^yF3#3B;k^=>P8~%a`rg@l&Jy6Mz5n=wf}dE8C;sCjhN$XX z^m-HO5@a}~(^1K(wbCyGH-EjazcIY#?g<|?Fm+wuw=+3gW^|#o5c@6hg;z2*%vhoY z<_651yTg!sd)$~PC@9KYz3XEGzj}Y>=N}K?F+P%gmCMr6?bu02w=)GIe$Q%ufiDD| z?S~RA-sx7iwkMky#BSfx*dCVMDVPZ8qbv%3d(ijTok!UFZI7@$bG@U$&c8lO7~Cq% zPzh4f`?zohKnK1ZSFG%Lp=}P_9vPOlcB4H0Kb^>J1Kq{x8Wz*ZS{9nU;IgtNLodmSi@4my4l{~u*q24OeDldVZy`84TP+9Jhxu+mJ(b0$2sm#Zc%EmTD#dVaQvC9WTh_5Dik_P7sO`%xN0>>6Nsl>?!o%W2Ey zGUE7<(Czz~(G9q2pUMkVqKTEVx@L%!3Y@EW+I!kZfPW8Q(5kV1D_yW)8r zK6RQ|CVIyuzwTxKPWOhKkpCPkC|7)0{t2u7p8PNW)H=Wk`K&F>GzF}>CY8@OPMO=> z^rcwH8t`ooAAk2Q;+f7KB5pLtEtw8@h0X5{Q^xb&@NG|7zQvUy7U~ z)Goh74g;Wygq8ASgkJsll_gnk3o0J!$btU`c)XGh9zF2GH9a|Eh&%o{q()okfGfPU zAW*PCrk3}izR5mZ)d?$ER04l}Ba4`4k;UYv7WiZQgm&9CCNSPgjoQRg4bFMk(X_xZ z4L+wQ%&t7Af7@ou3okS-K;XfRYqRlGu44yxm%ALs)+RWYuPRX~;z;h3 z{z-hUXYYI%9rs%#SLs%M(Zz56;=OE&?I@VI-dgZ|KD~VYFq3j2g3fa#x99s2L@6=A z&Q*brRKB!+YcBXGs$E%=8fBJSw_?qFYqwzjv^V>cK372V$79Wj?`3;4-x`koNfQL9 z%|1|k3C0l^e~twh8^ki343G9W#lWwH3vf`M-1Isf1vdrh`FW%5fWJbhdqZ6)_j682 zzc`--+v1V#%Tb%FoR&MbH6*5UKQVjHFb2lEw^gadZV2p?J&CS>uTLhJ5cWY=g^)bs zOv0ws-ct7A2D*?;Bl|h&AJTW(A8)41n*#O$88v=%xF32FesG#%#UUeprw351<*A?-leoLmr2}`23vVoY30shqRKvb)YdzHiFgk=`|7uwPrjQsro zih}IH!x!RJVnLxGv*>E}$E`h3fYT{wNWSw$@qg)nKu?9OS!q3r#XDn5YLz zbK{uQD2Qj|em+k_La=H2UyIuSALuu1y#gf|vLPh`&fW37seM#EM8-k*3m9+H4hFI4 zSrpEJ9I>%*rw|^Ms4QdBHCT1Up%>Ar(-W< zCb{qdgBs23%8?uLTk6mVlyQoF!GQqxkJu(f|*Wh;W`&7q@q zEW?{pn`iAX%%EyTmLmzGD2t}!xWR?4M2fh-ymmMGWTeXFIsU@%g%{%Q3`cZuWVF0_-lI9H6_jlh3sL7C)S+>PC7AXDBZE(6TW3#FTMLW|hYYgb5L7-w;h-*hYAOGkilWbissMP>pHY7QS_9`S z9c)+98N(`0qz@&Kyf}F3@A2~P-&-B!8^>_BRbeBv1J*Wo{pP?)b+EjsDtbWQ` zP-fZ$dqQ&kWhc&=@ugjNY_|oilsP#X!gERdg%QJAD%QS2(wuTe^;+N)9j%`79hbw1 z)-yRIr9k*TWu-6c6^V5{Q#LVq&ddf%!Fj~f7Tn4OvRCMqJwOK5bQpn}qe`xE2n9tf z71UA#<7fYG`plRo$uMsP*dX*dcYQw!PQuHmF!6%1zS?@3BRH$7*Zs$Rzjk|%=RGJ& zo^VACyBe2kEvnqLY<*(vV-MwY%55n zprTH_r51HsRK^z=`>8^!^X9IoQNRUPSHpqq(<8^DX1lNEoa25QJy;4*xxv&sm5(bw zBp2T8vzARh@9ssVnvVatMH3fgJ)DlI!7GlKBhDgfjs0s^R)RT!OB=Kr*_{?@hQ@_6 z>&TJq50si@wpd+PvIVdxrwR$SAS-PY8cJF4mv*~;e~uPDl~2i~@m*wB>o6n#V=L+B z52``${4x^W=k-3(1G8pMS>kIZCh>P-?tUau2&PSBs*7zb43OuK zae_9%=lb0#BY(F!l+(k&WOB|zE@B6EP~LLd#uWvVBn|~4z882cI%J3j$(^>QTrPi} z3FuHoR#j;+AiWAEj-g&4#6Xp5`hCG??I-x0nugeM>OdC7|Bxn8{H?5!#O0JV^aGZp zEJNhsQoif&w*c#$cD1CmoQ%d_HbkmbCZ_%J!Y6VAIwR3de`+Hb(yOj4a62s`A{CK+ zOB<>|V-0#j>AX*6o={M81z+v*M%mHuH2?;|au`G`M8_#LS9ttriuaF1LtZ?CE?Wb7 zTvw|k^KNr(SFuEgNuc}(Px-H*^IrsL{JC?sDmp?fiXS%-TX)LG{BWCSvcQh<@yi^( z?+|1GP9AjRz2#g}2j4jAmS?EX<@1+qpaijtg+eF?VhIkIN~{y4=h%;X?Rl(&9iZhs z^punY4==i7ULXr0rl)IE+Mg>Ca`FjM*V=wB`b7Uk(+yc4h{)=zyo^IsVMK#?mni(t z*C_s%`9VW?DW=du-nwUT6?W^_CD;h&s%uiN9oL8 z`*NjycS!B>lN61RcTX`hj(5jI6RT52P+xqg^+voSLAz;T_=x|lb)l*RMR14wm`eO- z{s+|6{Vr8X)MQ!-TC6%TT0f;{qSyUdYe}0>mzop{TLrD}^ao#27j{;0Pzk}r@}p=C z={NRXbtfXcvr+x%qb_+D**r+?4da@)vR^ci%}Kp*O<{Do7QlhLJ?&eO`bsOr$ABh< z{L8*dcPucwvk3k1+%}WEq2pAC(IFEGri0F-IP5Qc`dmSymDj%&+_=YLZpmisvN6S; zq1oo*|D$X;$0hh@*)7_gw~E1-itvw{#6bftlpa|DMC&A&Z1%Pe?Nt~D_p9`l4$|v8 zYuW0jqDuNV_H4o_o|ZRBtB6*w@3^+P_k}xs+7SQ2J)Y>ST;<~Ln-nEXLnBkQK0Q8F zRidd#o|*z9sSJ2~waCg>Qm?z5?c^8J)1lmF4Yq2gbhy{EIZuj|Fl7IX#9Yp8IbI~% z&+6FIYGuSe@Ij5!fkjT%&<5F(`pP4~J7OhcTQ%jv$+dp481qPkQJO+=F{e#Q%S&ro!WTyn9dN(U;laCkbR7LBqxy|glDC5@4Ym-1-qkqCWG zt_sp<9ARpVpB9!{4lj+uWZb4|-0Im@;|Tl|)$G8YzG~2FzMf;=N%Ku9l>ZST|7tsv z`*c;Oxl>-Wzn0cG`Q*1vMyJ^8R2(wTOL-hEzsk{*qaC!{#oRkg_98=l+s^eA#ib{; zj)c2UeyMP^tgM4mPKY-TUj3kM&w4M`(`dI9buLpqXP# zUN?(wj4@c8dGdPZ{5^Zo>=0Aq(?Jp5q*IalH!n5b^L>aOwvX~=lhcj3wm<7R%H?Nms z#ub%L{MgCm_DxZK@c8Moa~RbznQdn=`_$~b8sP|(iL8CY;_bOpVwkO}=KeyJu!n5A zqzCoy>smdkkZB|S$?Sn+*C-Dny<(Ji5-_8jWFwn^q9>-7%iEj=bKCh5E8uZEor}&a z+*v+c2TpeLlvw(WGew(XQ9Gf!zu1+ohcVZDi90LivV!Vwd*GZd$M`<{JTLmgO|yOq zl5Nvh5>l}Gjp`}R>aVWNK#VbmCF3ad+X(w=rdDPOCGi2(2$!ZYJ?8BT*ZrA(m^OwO z2?(e=Cr_0Yu){&8v&L&#xr&*p@ z$6C(Z=A+nc3ONxKam!Zysmg#=zt8rruiuSiVd|fir<~(gpI)v(%b*b%U9@{kRrdi0 z7JU(SOstaNd1=3YBEv-yTfoof4tz_4R`oUC&1zV0ky-(r3&#arl#t zcWYVvnZ+pxg@@;tFhfuJg|r!Svj)Df&*r^Zz2Q=53NQ92>puN1h#t*2u==59OK}ck z=i%_N$IY;*<60vsK@*0OvPvWO)}t*XKb!JS_@8PSZrhS4s183(f z@?l-kBu!$W0~xKz4^GzOPjaXPTf82)WTMsNHq|eUrpN+IftVxFpaIwPhKp&coMS_? z@Ei@#z^kNB{E{>}6#YFK)Ms*}KJGqPXc^Ox>Y|1V9P}ukWnB&XN^y|TI~kC$d1BDn z^;*ChKg~`_uj8<0gl3O{h4C{pDbm0!bf1gMkh8nwL$|0s>bc~&JT8=iQpvKt%93?( zC-i^sts;AAmI=&_?Pb4DJriVE&Y`o{IM)^`CcAo0$6EPu+`aFCuCC{3ouHpDN@@kLGiXlOo z7rQitr`UgvC^*_wXuFl2uoq#n-xsNM8QoOtS8x*=K!$w4XogW9X|>@TBI#**Itg1> zfy;2-Xq}U#FVNO6T{ZojJi6<)lt-`1CcWt%^u2y$ss298FK?DPyY8?y`Ey0@$*#VC zjrtXi8Wa(&n)2Jdte#Zv*Ca`Pw0Su)U;leB_19r;f2n5R(v4=LC zf*qEfzl4qI2i|tf>xXBvUo>j(wVWL(3*t`hr08_M`9$u;ORulKw&8)WkZP8S^<~-)fK((&J{w2R4S2a@m!iRRtuYNouzWubN7JXrStqZa|^|@cB zCN~ojw(8ot-x|@@&z{?=QD*U}+>)>SHr?Ka5g|!wh`=C}pQcrCIn(SLn_S{Inrc)K z)oYOO9c9g6t7+j%MdWmdAYRwIl6(iKEf&jHSsC1Zd;B7QpTbZ&ZjSJ?F(6fUGas7( zlWi(o)mY~PJ$C60FTQ_iIM^d{bf|WSbbW%lF?Yt6Q^zAUUZC%Eq*~4#@x+eH?*#|& z#i;$oj$0V3Tdz>|+qyS~?m69FSAgj!Fq)wobD+O!ANwRBEt1~d8E#6?G)7eWr%=SS zj49nZtKd5)q?qL$x_r;eI#nxrR-yE@&3?@kx8kCGg}Zog6MFAR$m^HS3h9(#9`bK*#;*QJTcev!2bNxIh;8tW5z3)|ha z8|xoBFd1Qd%9CkwZRdY|UZ7kPE_>vCl8aApv9lTVY8-qa?}Raw<(UEO29s;@*oAoA<&TU`HS0wf>Yj353s<1_XA zJF${6DyBAYGZ|CSaCyKb_G9z;5HTdRa>!!x&qawz%=%OgFOTD%N07AKVvfEe>n^5$ zU~+a;EiQj`pAHf5J6)VR+F~SH^pDWiW@5LMUd$+zgzhNYWH2bu?ucUOZbJ^NCrx0Aedo#@9Ywk8JhTal zue1U@wtr_n#7qY))9x{q4Z8c()8$hp&YFHq;C0ZwnK7{Aa?DLVZnr7hlvz{>MyDmg z0W*C44D+$p_Ps!>*FfxN8LJcaM#V)2ymd!xmRc6CR>pbOnm*h#+soQ7*&pXpXpI?> zw9HrG%s>`*cN;e(-Y2&v)9Nm<-aQppG%?A?OlyEXk)6W~S6mlNUwkcKxFEv3<_c!%= z;;9cDc4kepd)-bPwXx%MxogkTyG}mMuiL~~-%Oj3boI0Tm&B?`Gtq65h2P?dIhnD} z3c|xyO=t(xTPimZLY(*KpRSux`3#}F!^(pr`9Nf0tSDLhjY}^-g~?5M{A$qXjp8F!_MB^!QdmPFJ&6>Bvyb^C2a%FE1H^F%IAj@LZHE zHqHJv{fqI-GBa6F7IOLnMK_4J!?-fjS$W)8Lke?^%V9|Ko$*L$;kE7z>*GRC=gs*1 zwpdH|J1fb{48bEyvF`KP7FBQGWPba_Tyi$ydbLwdguZRYxnkxQ;@*ONe4BYqPh3q^ zwzFA33FL?kRtk0Z2O*9nl9`cAKiSU7VHA_})BR3rq?&fYk;a;3_SNwMB9n>5*>T${ zfBO|b46K2+*K5t0By5G%#dvxS^NOvMB#&&dEVjQQBHAX4NQOzGw157%xI(%o=&ypj zI^ucolQq;;2D7)Rno8$CThyDWnT>?b89i!w$5$@#SDV-j-(F6$ z3JWnTvfejI-qM?K%uKw>tCNBLB#>0PDK;vZR%JyN`iA2gyZT4@m_BN1vhyY5SE*}wd1PdSf$cb@9sA5N^o^ym|I`rf?GAnfn?4%ZTNB4cZW z%{-22UP}D#pXO@&5xhjXm4esRJthW9iEzp~Q&OOVAhJ;aPY7ZsB~U;ReQ1Ek1n~qt zkVp_qjsj5xQJM)DC5Ut+s| z`WiqpL8R3N4#@CYhI4=p9533M09yorr5R99&@x#8JxA!V3~#l&nwFtcjeRFzFg_6B z39y2nG~rZrOwIrWIi7;o6L>=qe+2*%geXNqfLv-kz%mYiQ{ctq2Y@L7yOIs45wLA# zfC9nuK_xIm5Z~7U9K__&4I2DMHhFjqFbN~6; zCU{>OE`9;K@hlwpf-Mp{_=<$XV9<-AxC?-B!CJ#-q3?3KyE-^|`Zkk>(iVg{OL|;MwuTT%4KK-|49T!L|182r%0)HL_ zI*tOd9nQqSNf^xA*D1i&De!;M|MQaVf5SIHfMGIlCfp4Mrpdrrh;|ggS{XPmUh@g7 z5mW_LW#LR9tt^}#mkovNYp{DzHAtWjVnL0CyYSf{(!@dq@y2elknv|-ym9&;V_n58 z`yV7Q*kdT!hm9i*aL{B`LlV$Z0Zzq@&FKnEz~VC%w8Jk2gFzep|MJy-9+rIBj7{Xf zWjCJ!iL0T4@*IJ|*biBJMT53-aAACO@p4df-<`lhIXE9)^A^$&ll#MxD*~9I*B}lz zlZRy=`3O{cCMf2^%|v+>2D3vTWbHiA4!&Mu?v8$*|EmVP#~XRHpj*-EI1JaL*vRln z6NvhYzypkyhtuJb{n7?q2OKa!jft4o%kyy&i5DG zenL6lhH}nwh-3CXsG@AvF;q7wl7j3*bWf=dBAE zjO`HJvm%gQ5iW$cLn=aa=el6Y2|a&@gz3JbX9%Suf(ZuQ%lHeQj;uZ~TM;gX^Ykt& zw8Rw(yonA5gPI<9;ZbMaVNuK=nG&24?~Y3e3UhZ9R8oSU!nMwp_|E1>s0oJo|Jyoi zldxpbX*N(y8BT@sqsWNbxduT|LNFLqpMUvbTn77<;QTm3iI3J12GEUX3=tk~-LXwr zGRqbVju0P>iZT?<6#%qUhV$SxVOR}69DJk<=fyeYqDVtKKyy4bR>Tvy2C_ru%I4>@=qB~$ema76n9d1uGDgX?l0gi#eDulsiOZO3L zLs%OKd$=1GX~0z#D5=j?;B@$)->N`Chtgx!r|=pUBve)SF#xpZ0gi(PNcb^a0LxU* zBhnyJ4yaWRS89rhfK5Zf8F5o?f*Mi5D+n6~VYzU_{xk4CFdPX#0U|j8Qg9XdCkQ|l z3SyBB96-W3Kt)wJJw6gcNKMSmg=6Od6IG#p#V$9{-V>x(;Kk`Vz>iowPQQ+&@elwh z)!;(hSk2Ryg}>yX1;P@F4-Na3NkAt+&h zSO!5Eu<;Bunc-Y5VKt&kppiP91>{mEa9T={waY={vw?UI&x8%iSSZ0b3^F2CLqct$ z2AmN6_r!6RzHmb zK<;zEslQx&qZsUc47uQgTnHTM2Qed@$uaPY2AmUDGyg2#QDgv*v3ca3qqi~dI(w_5BJ%e1rEzD@!y#mJK{qRO@~}mI^fLs!A0mH3g@Di z&wM5vS{Cdee(poq?{0)}#I@jzxDwZX-jrQ|hKYdihbNitE1;tmoF8Aycr7SbyMX|x z7y@vCFSY*UkVPA+ac(pyqx}b&jnxz?KlW(Z}1LTVMuff>mg2!~> u{Qo@qsp-O*_`>r57~0X%!Sjk(h^x1u9tl)y7)%%X;eqBp1}?}U?Ee5v|2_8r