From 770ae068a495f06c3b694156c2250f753bfd8aff Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Thu, 1 Jun 2023 17:03:50 +0200 Subject: [PATCH] The BasePlus package [ver. 1.26.0] # The BasePlus package [ver. 1.26.0] ### New Features: Two new macros were introduces in the release: - `%findDSwithVarVal()` - `%getTitle()` Documentation updated. --- README.md | 2 +- baseplus.md | 349 ++- baseplus.zip | Bin 269206 -> 275492 bytes hist/1.26.0/baseplus.md | 5143 ++++++++++++++++++++++++++++++++++++++ hist/1.26.0/baseplus.zip | Bin 0 -> 275492 bytes 5 files changed, 5429 insertions(+), 65 deletions(-) create mode 100644 hist/1.26.0/baseplus.md create mode 100644 hist/1.26.0/baseplus.zip diff --git a/README.md b/README.md index e88ebb8..918b76f 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ libname NEW "%workPath()/new"; ``` and more. -SHA256 digest for the latest version of `BasePlus`: F*2A4F3953EC56DB914024457F74286D565C23DCF220FF151040BDB704FD8DDB06 +SHA256 digest for the latest version of `BasePlus`: F*B3CACDA32A5E70940E667DCA859483BD76DB082D19BAF326F28A580226DDD962 [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") diff --git a/baseplus.md b/baseplus.md index 7ee8ac9..a3baefc 100644 --- a/baseplus.md +++ b/baseplus.md @@ -61,13 +61,16 @@ * [`%workPath()` macro](#workpath-macro) * [`%translate()` macro](#translate-macro) * [`%tranwrd()` macro](#tranwrd-macro) + * [`%findDSwithVarVal()` macro](finddswithvarval-macro) + * [`%getTitle()` macro](gettitle-macro) + * [License](#license) --- -# The BasePlus package [ver. 1.24.2] ############################################### +# The BasePlus package [ver. 1.26.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -218,7 +221,7 @@ Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](htt **Example 11**: Long dataset names. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas -data %LDSN( work. peanut butter & jelly time with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); set sashelp.class; run; @@ -267,70 +270,84 @@ run; %put %filePath(f); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 19** Get titles: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle(1 2 3 5, dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- 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. function arrfill -31. function arrfillc -32. function arrmissfill -33. function arrmissfillc -34. function arrmisstoleft -35. function arrmisstoleftc -36. function arrmisstoright -37. function arrmisstorightc -38. function bracketsc -39. function bracketsn -40. function catxfc -41. function catxfi -42. function catxfj -43. function catxfn -44. function deldataset -45. function semicolonc -46. function semicolonn -47. format brackets -48. format semicolon -49. proto qsortincbyprocproto -50. function frommissingtonumberbs -51. function fromnumbertomissing -52. function quicksort4notmiss -53. function quicksorthash -54. function quicksorthashsddv -55. function quicksortlight -56. macro filepath -57. macro letters -58. macro libpath -59. macro translate -60. macro tranwrd -61. 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 gettitle +59. macro letters +60. macro libpath +61. macro translate +62. macro tranwrd +63. macro workpath + Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it or look for the baseplus_AdditionalContent directory in the Packages fileref @@ -339,7 +356,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*2A4F3953EC56DB914024457F74286D565C23DCF220FF151040BDB704FD8DDB06` +`F*B3CACDA32A5E70940E667DCA859483BD76DB082D19BAF326F28A580226DDD962` --- # Content description ############################################################################################ @@ -4891,6 +4908,210 @@ The basic syntax is the following, the `<...>` means optional parameters: %put %tranwrd(ABCxyzABCABCxyzABC,ABC); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +## >>> `%findDSwithVarVal()` macro: <<< ####################### + +The findDSwithVarVal() macro searches for all +datasets (available for a given session) containing +a variable of a given value. + +The value search is case sensitive - but can be altered with `IC=` parameter. +The value search keeps leading blanks - but can be altered with `TB=` parameter. +The value search compares full value - but can be altered with `CTS=` parameter. + +The default variable type is `char`, the `type=` parameter allows +to change it (possible values are `char` and `num`), the parameter is case sensitive. + +Only datasets are searched, views are not included. + +During the process two temporary datasets named: +`WORK._` (single underscore) and `WORK.__` (double underscore) +are generated. The datasets are deleted at the end of the process. + +By default search results are stored in the `WORK.RESULT` dataset. +Name of the dataset can be altered with `result=` parameter. +The dataset with result contains two variables: +`datasetName` - names of datasets, +`firstObservation` - the firs occurrence of the value. + +See examples below for the details. + +The `%findDSwithVarVal()` macro does not execute as a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%findDSwithVarVal( + variable + ,value + <,type=> + <,ic=> + <,tb=> + <,cts=> + <,lib=> + <,result=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `variable` - *Required*, name of variable to be searched. + +2. `value` - *Required*, the value to be searched. + +*. `type` - *Optional*, default value is `char`. + Indicates which type is the searched value. + Possible values are `char` and `num`, + the parameter is case sensitive. + +*. `ic` - *Optional*, "Ignore Cases", default value is `0`. + Indicates should the search ignore cases of the text values. + Possible values are `0` and `1`. + +*. `tb` - *Optional*, "Trim Blanks", default value is `0`. + Indicates should the search trim leading and trailing + blanks of the text values. + Possible values are `0` and `1`. + +*. `cts` - *Optional*, "Compare To Shorter", default value is `0`. + IF set to `1` execute value comparison as `=:` for the text value. + Possible values are `0` and `1`. + See examples. + +*. `lib` - *Optional*, default value is missing. + If not empty narrows the search to a particular library. + +*. `result` - *Optional*, default value is `WORK.RESULT`. + Is the name of the dataset with results. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Search variable `NAME` containing value `John`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(name, John) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Search numeric variable `AGE` containing value `14`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(age, 14, type=num) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Search numeric variable `SCORE` with missing value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST; + score=17; output; + score=42; output; + score=. ; output; + run; + + %findDSwithVarVal(score, ., type=num, result=WORK.MissingScore) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Search library `WORK` for variable `NAME` starting with value `Jo` + ignoring cases and trimming blanks from value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data A; + name="Joanna"; + data B; + name="john"; + data C; + name=" Joseph"; + data D; + name=" joe"; + run; + + %findDSwithVarVal(name, Jo, ic=1, tb=1, cts=1, lib=WORK) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%getTitle()` macro: <<< ####################### + +The getTitle() macro extract text of titles or footnotes +into a delimited list. + +Titles/footnotes numbers can be selected with the `number` argument. +Only the text of a title or footnote is extracted. + +Author of the original code is: Quentin McMullen (`qmcmullen.sas@gmail.com`). + +See examples below for the details. + +The `%getTitle()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getTitle( + < number> + <,type=> + <,dlm=> + <,qt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `number` - *Optional*, default value is empty, + indicates numbers of titles to be extracted. + Space separated list is expected. + If empty or `_ALL_` extract all non-missing. + +*. `type` - *Optional*, default value is `T`. + Indicates which type is the searched. + `T` fro title, `F` for footnote. + +*. `dlm` - *Optional*, "DeLiMiter", default value is `|` (pipe). + Possible values are: `| \ / , . ~ * # @ ! + - _ : ?` + or `s` for space, `c` for comma, `d` for semicolon. + +*. `qt` - *Optional*, "QuoTes", default value is empty. + Use `%str()` for single quote symbol (e.g. `%str(%")`). + If there are multiple symbols, only the first and the + second are selected as a leading and trailing one, + e.g. `qt=""` gives `"title1 text" "title2 text" ... `. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get titles in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle() ; + + %put %GetTitle(1 3,dlm=c, qt=[]) ; + + %put %GetTitle(2:4,dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get footnotes in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + footnote1 "First little footnote"; + footnote2 "Second little footnote"; + footnote3 "Third little footnote"; + + %put %GetTitle(1 2,type=f,dlm=s, qt="") ; + %put %GetTitle(2 3,type=f,dlm=c, qt='') ; + %put %GetTitle(1 3,type=f,dlm=d, qt=[]) ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + + --- --- diff --git a/baseplus.zip b/baseplus.zip index f5594482ba142fda1dfc058f982c1e2e2961430a..1f7746364743cd2e2e2adfdded0df2000d62d117 100644 GIT binary patch delta 22613 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 ############################################### + +The **BasePlus** package implements useful +functions and functionalities I miss in the BASE SAS. + +It is inspired by various people, e.g. +- at the SAS-L discussion list +- at the communities.sas.com (SASware Ballot Ideas) +- at the Office... +- etc. + +Kudos to all who inspired me to generate this package: +*Mark Keintz*, +*Paul Dorfman*, +*Richard DeVenezia*, +*Christian Graffeuille*, +*Allan Bowe*, +*Anamaria Calai*, +*Michal Ludwicki*, +*Quentin McMullen*, +*Kurt Bremser*. + +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). + +--- + +### BASIC EXAMPLES AND USECASES: #################################################### + +**Example 1**: One-dimensional array functions. + Array parameters to subroutine + calls must be 1-based. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + array X[4] _temporary_ (. 1 . 2); + + call arrMissToRight(X); + do i = 1 to 4; + put X[i]= @; + end; + put; + + call arrFillMiss(17, X); + do i = 1 to 4; + put X[i]= @; + end; + put; + + call arrFill(42, X); + do i = 1 to 4; + put X[i]= @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2**: Delete dataset by name. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data toDrop; + x = 17; + run; + data _null_; + p = delDataset("toDrop"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3**: Strings concatenation with format. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + x = 1 ; y = . ; z = 3 ; + t = "t"; u = " "; v = "v"; + + array a[*] x y z; + array b[*] t u v; + + length s1 s2 s3 s4 $ 17; + s1 = catXFn("z5.", "#", A); + s2 = catXFi("z5.", "#", A); + s3 = catXFc("upcase.", "*", B); + s4 = catXFj("upcase.", "*", B); + + put (_all_) (=); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 4**: Useful formats. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + input x @@; + put @1 x= @11 x= bool. @21 x= int. @31 x= ceil. @41 x= floor.; + cards; + . ._ .A -10 -3.14 0 3.14 10 + ; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 5**: Getting variables names from datasets. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class + ,pattern = ght$ + ,sep = + + ,varRange = _numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 6**: Quick sort as an alternative to call sortn() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + array test[25000000] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = 25000000 to 1 by -1; + test[_N_] = rand("uniform"); + end; + t = time() - t; + put "Array population time: " t; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 7**: De-duplicate values from a space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 8**: Zip elements of two space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2018 2019 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 9**: Simple Rain Cloud plot. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%rainCloudPlot(sashelp.cars,DriveTrain,Invoice) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 10**: Zip SAS library. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(sashelp, libOut=work) + +%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 11**: Long dataset names. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 12**: List, to the log, content of `home` directory. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE(ls -la ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 13** Get list of all files and directories from `C:\SAS_WORK\`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 14** Text repetition: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 15** Integer list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %intsList(42); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 16** Split dataset into blocks of 5 observations: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks(5, sashelp.class, classBlock) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 17** Split dataset into 7 parts: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts(7, sashelp.cars, carsPart) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 18** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 19** Get titles: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle(1 2 3 5, dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +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 + + +Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it +or look for the baseplus_AdditionalContent directory in the Packages fileref +localization (only if additional content was deployed during the installation process). + +* SAS package generated by generatePackage, version 20230520 * + +The SHA256 hash digest for package BasePlus: +`F*B3CACDA32A5E70940E667DCA859483BD76DB082D19BAF326F28A580226DDD962` + +--- +# Content description ############################################################################################ + +## >>> `%getVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%getVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> + <,mcArray=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +* `mcArray=` - *Optional*, default value is blank. + 1) When *null* - the macro behaves like a macro function + and returns a text string with variables list. + 2) When *not null* - behaviour of the macro is altered. + In such case a macro array of selected variables, named + with `mcArray` value as a prefix, is created. + Furthermore a macro named as `mcArray` value is generated. + (see the macroArray package for the details). + When `mcArray=` parameter is active the `getVars` macro + cannot be called within the `%put` statement. Execution like: + `%put %getVars(..., mcArray=XXX);` will result with + an Explicit & Radical Refuse Of Run (aka ERROR). + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** A list of all variables from the + sashelp.class dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** A list of all variables from the + sashelp.class dataset separated + by backslash: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class, sep=\); + %put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of regular expressions: + a) A list of variables which name contains "i" or "a" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=i|a)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables which name starts with "w" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=^w)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables which name ends with "ght" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=ght$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list of numeric variables which name + starts with "w" or "h" or ends with "x" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, sep=+, pattern=^(w|h)|x$, varRange=_numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + array x[30]; + array y[30] $ ; + array z[30]; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + a) A list of variables separated by a comma: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables separated by a comma + with suffix 5 or 7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables separated by a comma + with suffix 5 or 7 from a given variables range: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), varRange=x10-numeric-z22 y6-y26, pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Case of quotes and special characters + when the quote= parameter is _not_ used: + + a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%bquote(%getVars(sashelp.class, sep=%str(%")))*; + %put *%bquote(%getVars(sashelp.class, sep=%str(%')))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double qiotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%bquote(%getVars(sashelp.class,sep=""))"*; + %put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%getVars(sashelp.class,sep=%str(", "))"*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*; + %let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%'); + + %put *%str(%')%QgetVars(sashelp.class,sep=', ')%str(%')*; + %let y = %str(%')%QgetVars(sashelp.class,sep=', ')%str(%'); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + e) ampersand (&) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); + + %put *%QgetVars(sashelp.class,sep=&)*; + %let y = %QgetVars(sashelp.class,sep=&); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( & ))*; + %let y = %QgetVars(sashelp.class,sep=%str( & )); + %let z = %unquote(&y.); + + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + f) percent (%) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QgetVars(sashelp.class,sep=%)*; + %let y = %QgetVars(sashelp.class,sep=%); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( % ))*; + %let y = %QgetVars(sashelp.class,sep=%str( % )); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Case of quotes and special characters + when the quote= parameter is used: + +a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, quote=%str(%"))*; + %put *%getVars(sashelp.class, quote=%str(%'))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %* this gives an error: ; + %* %put *%getVars(sashelp.class,quote="")*; + %* %put *%getVars(sashelp.class,quote='')*; + + %* this does not give an error: ; + %put *%QgetVars(sashelp.class,quote="")*; + %put *%QgetVars(sashelp.class,quote='')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%')); + %put &=x.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Variables that start with `A` and do not end with `GHT`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data class; + set sashelp.class; + Aeight = height; +run; + +%put *%getVars(class, pattern = ^A(.*)(?>> `%QgetVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +The `%QgetVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QgetVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%getVars()` help for the details. + +--- + +## >>> `%symdelGlobal()` macro: <<< ####################### + +The `%symdelGlobal()` macro deletes all global macrovariables +created by the user. The only exceptions are read only variables +and variables the one which starts with SYS, AF, or FSP. +In that case a warning is printed in the log. + +One temporary global macrovariable `________________98_76_54_32_10_` +and a dataset, in `work` library, named `_%sysfunc(datetime(),hex7.)` +are created and deleted during the process. + +The `%symdelGlobal()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%symdelGlobal( + info +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `info` - *Optional*, default value should be empty, + if set to `NOINFO` or `QUIET` then infos and + warnings about variables deletion are suspended. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete global macrovariables, info notes + and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + + %symdelGlobal(); + + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Basic use-case two. + Delete global macrovariables in quite mode + No info notes and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + %put *%symdelGlobal(NOINFO)*; + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + +## >>> `bool.` format: <<< ####################### + +The **bool** format returns: +*zero* for 0 or missing, +*one* for other values. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), bool.)`] + +--- + +## >>> `boolz.` format: <<< ####################### + +The **boolz** format returns: +*zero* for 0 or missing, +*one* for other values. + +*Fuzz* value is 0. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), boolz.)`] + +--- + +## >>> `ceil.` format: <<< ####################### + +The **ceil** format is a "wrapper" for the `ceil()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, ceil)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), ceil.)`] + +--- + +## >>> `floor.` format: <<< ####################### + +The **floor** format is a "wrapper" for the `floor()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, floor)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), floor.)`] + +--- + +## >>> `int.` format: <<< ####################### + +The **int** format is a "wrapper" for the `int()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, integer)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), int.)`] + +--- + +## >>> `arrFill()` subroutine: <<< ####################### + +The **arrFill()** subroutine is a wrapper +for the Call Fillmatrix() [a special FCMP subroutine]. + +A numeric array is filled with selected numeric value, e.g. + +for array `A = [. . . .]` the subroutine +`call arrFill(42, A)` returns `A = [42 42 42 42]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrFillC()` subroutine: <<< ####################### + +The **arrFillC()** subroutine fills +a character array with selected character value, e.g. + +for array `A = [" ", " ", " "]` the subroutine +`call arrFillC("B", A)` returns `A = ["B", "B", "B"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFillC(C ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrFillC("ABC", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFill()` subroutine: <<< ####################### + +The **arrMissFill()** subroutine fills +all missing values (i.e. less or equal than `.Z`) +of a numeric array with selected numeric value, e.g. + +for array `A = [1 . . 4]` the subroutine +`call arrMissFill(42, A)` returns `A = [1 42 42 4]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFillC()` subroutine: <<< ####################### + +The **arrMissFillC()** subroutine fills +all missing values of a character array +with selected character value, e.g. + +for array `A = ["A", " ", "C"]` the subroutine +`call arrMissFillC("B", A)` returns `A = ["A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFillC(C, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissFillC("X", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeft()` subroutine: <<< ####################### + +The **arrMissToLeft()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the right side of an array +and missing values to the left, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToLeft(A)` returns `A = [. . 1 2 3]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeft(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToLeft(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeftC()` subroutine: <<< ####################### + +The **arrMissToLeftC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the right side of an array +and all missing values to the left, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToLeftC(A)` returns `A = [" ", " ", "A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeftC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToLeftC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRight()` subroutine: <<< ####################### + +The **arrMissToRight()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the left side of an array +and missing values to the right, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToRight(A)` returns `A = [1 2 3 . .]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRight(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToRight(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRightC()` subroutine: <<< ####################### + +The **arrMissToRightC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the left side of an array +and missing values to the right, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToRightC(A)` returns `A = ["A", "B", "C", " ", " "]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRightC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToRightC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFc()` function: <<< ####################### + +The **catXFc()** function is a wrapper +of the `catX()` function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFc("upcase.", "*", A)` returns `"A*C"`. + +If format does not handle nulls they are ignored. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFc(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFc("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFi()` function: <<< ####################### + +The **catXFi()** function is a wrapper +of the `catX()` function but with ability +to format numeric values but +IGNORES missing values (i.e. `._`, `.`, `.a`, ..., `.z`). + +For array `A = [0, ., 2]` the +`catXFi("date9.", "#", A)` returns +`"01JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFi(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFi("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFj()` function: <<< ####################### + +The **catXFj()** function is a wrapper +of the catX() function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFj("upcase.", "*", A)` returns `"A**C"` + +If format does not handle nulls they are +printed as an empty string. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFj(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFj("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFn()` function: <<< ####################### + +The **catXFn()** function is a wrapper +of the `catX()` function but with ability +to format numeric values. + +For array `A = [0, 1, 2]` the +`catXFn("date9.", "#", A)` returns +`"01JAN1960#02JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFn(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFn("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `delDataset()` function: <<< ####################### + +The **delDataset()** function is a "wrapper" +for the `Fdelete()` function. +`delDataset()` function uses a text string with +a dataset name as an argument. + +Function checks for `*.sas7bdat`, `*.sas7bndx`, +and `*.sas7bvew` files and delete them. +Return code of 0 means dataset was deleted. + +For compound library files are +deleted from _ALL_ locations! + + +*Note:* +Currently only the BASE SAS engine datasets/views are deleted. + +Tested on Windows and Linux. Not tested on Z/OS. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +delDataset(lbds_) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lbds_` - *Required*, character argument containing + name of the dataset/view to be deleted. + The `_last_` special name is honored. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST1 TEST2(index=(x)); + x = 17; + run; + + data TEST3 / view=TEST3; + set test1; + run; + + data _null_; + p = delDataset("WORK.TEST1"); + put p=; + + p = delDataset("TEST2"); + put p=; + + p = delDataset("WORK.TEST3"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST4; + x=42; + run; + data _null_; + p = delDataset("_LAST_"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname user "%sysfunc(pathname(work))/user"; + + data TEST5; + x=42; + run; + + data _null_; + p = delDataset("test5"); + put p=; + run; + + libname user clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST6; + x=42; + run; + + %put *%sysfunc(delDataset(test6))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname L1 "%sysfunc(pathname(work))/L)1"; + libname L2 "%sysfunc(pathname(work))/L(2"; + libname L3 "%sysfunc(pathname(work))/L'3"; + + data L1.TEST7 L2.TEST7 L3.TEST7; + x=42; + run; + + libname L12 ("%sysfunc(pathname(work))/L(1" "%sysfunc(pathname(work))/L)2"); + libname L1L2 (L2 L3); + + %put *%sysfunc(delDataset(L12.test7))*; + %put *%sysfunc(delDataset(L1L2.test7))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `qsortInCbyProcProto()` proto function: <<< ####################### + +The **qsortInCbyProcProto()** is external *C* function, +this is the implementation of the *Quick Sort* algorithm. + +The function is used **internally** by +functions in the *BasePlus* package. + +Asumptions: +- smaller subarray is sorted first, +- subarrays of *size < 11* are sorted by *insertion sort*, +- pivot is selected as median of low index value, + high index value, and (low+high)/2 index value. + +`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+`!CAUTION! Sorted array CANNOT contains SAS missing values !`
+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+ +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +qsortInCbyProcProto(arr, low, high) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `arr` - An array of double type to be sorted. + +2. `low` - An integer low index of starting position (from which the sorting is done). + +3. `high` - An integer high index of ending position (up to which the sorting is done). + + +### REFERENCES: #################################################### + +*Reference 1.* + +Insertion sort for arrays smaller then 11 elements: + +Based on the code from the following WikiBooks page [2020.08.14]: + +[https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie](https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie) + + +*Reference 2.* + +Iterative Quick Sort: + +Based on the code from the following pages [2020.08.14]: + +[https://www.geeksforgeeks.org/iterative-quick-sort/](https://www.geeksforgeeks.org/iterative-quick-sort/) + +[https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/](https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/) + +--- + +## >>> `fromMissingToNumberBS()` function: <<< ####################### + +The **fromMissingToNumberBS()** function +gets numeric missing value or a number +as an argument and returns an integer +from 1 to 29. + +For a numeric missing argument +the returned values are: +- 1 for `._` +- 2 for `.` +- 3 for `.a` +- ... +- 28 for `.z` and +- 29 for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For *missing value arguments* the function +is an inverse of the `fromNumberToMissing()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromMissingToNumberBS(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric missing value or a number. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = ._, ., .a, .b, .c, 42; + y = fromMissingToNumberBS(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `fromNumberToMissing()` function: <<< ####################### + +The **fromNumberToMissing()** function +gets a number as an argument and returns +a numeric missing value or zero. + +For a numeric argument +the returned values are: +- `._` for 1 +- `.` for 2 +- `.a` for 3 +- ... +- `.z` for 28 and +- `0` for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For arguments 1,2,3, ..., and 28 the function +is an inverse of the `fromMissingToNumberBS()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromNumberToMissing(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric value. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = 1 to 29; + y = fromNumberToMissing(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSort4NotMiss()` subroutine: <<< ####################### + +The **quickSort4NotMiss()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + + +**Caution 1!** Array _CANNOT_ contains missing values! + +**Caution 2!** Array parameters to subroutine calls must be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSort4NotMiss(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of NOT missing numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM, + array of size 250'000'000 with values in range + from 0 to 99'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + test[_N_] = int(100000000*rand("uniform")); + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSort4NotMiss (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortHash()` subroutine: <<< ####################### + +The **quickSortHash()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" is set to `100'000` to +use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + 100'000 then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the reported memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHash(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `quickSortHashSDDV()` subroutine: <<< ####################### + +The **quickSortHashSDDV()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" (argument `SDDV`) may +be adjusted to use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + some *N* then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the report memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHashSDDV(A, SDDV) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + +2. `SDDV` - A number of distinct data values, e.g. 100'000. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortLight()` subroutine: <<< ####################### + +The **quickSortLight()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortLight(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `%dedupListS()` macro: <<< ####################### + +The `%dedupListS()` macro deletes duplicated values from +a *SPACE separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. + +The `%dedupListS()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListS( + list of space separated values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *space separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListS(a b c b c)*; + + %put *%dedupListS(a b,c b,c)*; + + %put *%dedupListS(%str(a b c b c))*; + + %put *%dedupListS(%str(a) %str(b) %str(c) b c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListC()` macro: <<< ####################### + +The `%dedupListC()` macro deletes duplicated values from +a *COMMA separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListC()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListC( + list,of,comma,separated,values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *comma separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC(a,b,c,b,c)*; + + %put *%dedupListC(a,b c,b c)*; + + %put *%dedupListC(%str(a,b,c,b,c))*; + + %put *%dedupListC(%str(a),%str(b),%str(c),b,c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC( a , b b , c , b b, c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6; + %put *%dedupListC(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListP()` macro: <<< ####################### + +The `%dedupListP()` macro deletes duplicated values from +a *PIPE(`|`) separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListP()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListP( + list|of|pipe|separated|values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *pipe separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP(a|b|c|b|c)*; + + %put *%dedupListP(a|b c|b c)*; + + %put *%dedupListP(%str(a|b|c|b|c))*; + + %put *%dedupListP(%str(a)|%str(b)|%str(c)|b|c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP( a | b b | c | b b| c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4|5|6|1|2|3|1|2|3|4|5|6; + %put *%dedupListP(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListX()` macro: <<< ####################### + +The `%dedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(|a|b|c|b|c)*; + + %put *%dedupListX( a b c b c)*; + + %put *%dedupListX(,a,b,c,b,c)*; + + %put *%dedupListX(XaXbXcXbXc)*; + + %put *%dedupListX(/a/b/c/b/c)*; + + data _null_; + x = "%dedupListX(%str(;a;b;c;b;c))"; + put x=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(| a | b.b | c | b.b| c )*; + + %put *%dedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%dedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%dedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%QdedupListX()` macro: <<< ####################### + +The `%QdedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is **quoted** with `%superq()`. Leading and trailing spaces are ignored. + +The `%QdedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QdedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(|a|b|c|b|c)*; + + %put *%QdedupListX( a b c b c)*; + + %put *%QdedupListX(,a,b,c,b,c)*; + + %put *%QdedupListX(XaXbXcXbXc)*; + + %put *%QdedupListX(/a/b/c/b/c)*; + + %put *%QdedupListX(%str(;a;b;c;b;c))*; + + %put *%QdedupListX(%nrstr(&a&b&c&b&c))*; + + %put *%QdedupListX(%nrstr(%a%b%c%b%c))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(| a | b.b | c | b.b| c )*; + + %put *%QdedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%QdedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%QdedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `brackets.` format: <<< ####################### + +The **brackets** format adds brackets around a text or a number. +Leading and trailing spaces are dropped before adding brackets. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + input x; + if x < 0 then put x= brackets.; + else put x= best32.; +cards; +2 +1 +0 +-1 +-2 +; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `semicolon.` format: <<< ####################### + +The **semicolon** format adds semicolon after text or number. +Leading and trailing spaces are dropped before adding semicolon. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = "A"; + put x= semicolon. y= $semicolon.; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `bracketsC()` function: <<< ####################### + +The **bracketsC()** function is internal function used by the *brackets* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `bracketsN()` function: <<< ####################### + +The **bracketsN()** function is internal function used by the *brackets* format. +Returns character value of length 34. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `semicolonC()` function: <<< ####################### + +The **semicolonC()** function is internal function used by the *semicolon* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `semicolonN()` function: <<< ####################### + +The **semicolonN()** function is internal function used by the *semicolon* format. +Returns character value of length 33. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `%QzipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%QzipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QzipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%zipEvalf()` help for the details. + +--- + +## >>> `%zipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%zipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple concatenation of elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, a b c); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of the `operator=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let y = %zipEvalf(1 2 3 4 5 6, 100 200, operator = +); +%put &=y; + +%let z = %zipEvalf(1 2 3 4 5 6 8 9 10, 1 2 3 4 5 6 8 9 10, operator = **); +%put &=z; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Format result: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y, format=$upcase.); +%put &=x; + +%put * +%zipEvalf( + ą ż ś ź ę ć ń ó ł +,Ą Ż Ś Ź Ę Ć Ń Ó Ł +,format = $brackets. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Use with macrovariables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let abc = 10 100 1000; +%put * +%zipEvalf( +%str(1 2 3 4 5 6 7 8 9) +,&abc. +,function = sum +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** If one of elements is empty: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + abc efg +, +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Use of the `function=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str(,) +,format = $brackets. +) +*; + +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str( ) +,format = $upcase. +) +*; + +%put * +%zipEvalf( + %str(! @ # $ [ ] % ^ & * ) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str( ) +,format = $quote. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Use inside resolve: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; +z = resolve(' +%zipEvalf( + %nrstr(! @ # $ [ ] % ^ & *) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str(.) +,format = $quote. +)'); +put z=; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Use in data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + %zipEvalf( + a b c d e f g + ,1 2 3 4 5 6 7 + ,function = catx + ,argBf = = + ,format = $semicolon. + ) +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 10.** With 9.4M6 hashing() function: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %zipEvalf(MD5 SHA1 SHA256 SHA384 SHA512 CRC32, abcd, function = HASHING); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 11.** Use middle argument: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%functionExists()` macro: <<< ####################### + +The functionExists() macro function tests +if given funcion exists in the SAS session. +The `sashelp.vfunc` view is used. + +See examples below for the details. + +The `%functionExists()` macro executes like a pure macro code. + +The function is a result of cooperation with [Allan Bowe](https://www.linkedin.com/in/allanbowe/) + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%functionExists( + funName +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `funName` - *Required*, the name of the function + existence of which you are testing. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Test if function exists: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %functionExists(HASHING); + + %put %functionExists(COSsinLOG); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%RainCloudPlot()` macro: <<< ####################### + +The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e. pots of +kernel density estimates, jitter data values, and box-and-whiskers plot. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%RainCloudPlot( + DS + ,gr + ,vars + + <,WidthPX=> + <,HeightPX=> + <,boxPlot=> + <,roundFactor=> + <,rainDropSize=> + <,boxPlotSymbolSize=> + <,colorsList=> + <,monochrome=> + <,antialiasMax=> + <,title=> + <,footnote=> + <,catLabels=> + <,xLabels=> + <,catLabelPos=> + <,xLabelPos=> + <,catLabelAttrs=> + <,xLabelAttrs=> + <,formated=> + <,y2axis=> + <,y2axisLevels=> + <,y2axisValueAttrs=> + <,xaxisValueAttrs=> + <,xaxisTickstyle=> + <,sganno=> + <,odsGraphicsOptions=> + <,sgPlotOptions=> + + <,VSCALE=> + <,KERNEL_K=> + <,KERNEL_C=> + + <,cleanTempData=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `DS` - *Required*, name of the dataset from + which variables are to be taken. + +2. `gr` - *Required*, name of the grouping variable. + When more than one variable is specified + separate plots are rendered. + Can be numeric or character. + +3. `vars` - *Required*, name of the aggregated numeric variable. + When more than one variable is specified + separate plots are rendered. + +***Plot related options***: + +* `WidthPX` - *Optional*, default value `1200`. + Total width of the plot in pixels. + +* `HeightPX` - *Optional*, default value `220`. + Partial height of the plot in pixels. + Total height is calculated as `#GROUPS x HeightPX`. + +* `boxPlot` - *Optional*, default value `1`. + Indicates if the Box Plot should be added. + +* `roundFactor` - *Optional*, default value `0.000001`. + Rounding level when calculating maximum value + of the cloud chart. Should be adjusted to data + granularity level, e.g. for data with value + around `1e-8` should be decreased. + +* `rainDropSize` - *Optional*, default value `5px`. + Size of data points in the "rain" plot. + +* `boxPlotSymbolSize` - *Optional*, default value `8px`. + Size of symbols on the box plot. + +* `colorsList` - *Optional*, default value is empty. + List of colours for plotting. + Empty indicates that the default list will be used. + +* `monochrome` - *Optional*, default value `0`. + Indicates if the default list of colours should be gray-scale. + +* `antialiasMax` - *Optional*, default value is empty. + Sets a value to the ODS graphics `ANTIALIASMAX` option. + When empty the value is calculated from data. + +* `title` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `footnote` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `catLabels` - *Optional*, default value is empty. + List of values for group axix labels (vertical). + When empty a grouping variable name is used. + For details see notes below. + +* `xLabels` - *Optional*, default value is empty. + List of values for data variable axix labels (horizontal). + When empty a data variable name is used. + For details see notes below. + +* `catLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on group axix (vertical). + Allowed values are `BOTTOM`, `CENTER`, `DATACENTER`, and `TOP`. + +* `xLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on data axix (horizontal). + Allowed values are `LEFT`, `CENTER`, `DATACENTER`, and `RIGHT`. + +* `catLabelAttrs` - *Optional*, default value is empty. + List of attributes for group axix labels (vertical). + For details see notes below. + +* `xLabelAttrs` - *Optional*, default value is empty. + List of attributes for data variable axix labels (horizontal). + For details see notes below. + +* `formated` - *Optional*, default value `0`. + Indicates if values of the grouping variable should be formated. + +* `y2axis` - *Optional*, default value `1`. + Indicates if the right vertical axix should be displayed. + +* `y2axisLevels` - *Optional*, default value `4`. + Indicates if the number of expected levels of values printed + on the right vertical axix. + +* `y2axisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify Y2 axis values attributes. + +* `xaxisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify X axis values attributes. + +* `xaxisTickstyle` - *Optional*, default value `INSIDE`. + Allows to modify X axis tick style. + Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`. + *For SAS previous to* **9.4M5** *set to missing!* + +* `sganno` - *Optional*, default value is empty. + keeps name of a data set for the `sganno=` option + of the SGPLOT procedure. + +* `sgPlotOptions` - *Optional*, default value is `noautolegend noborder`. + List of additional options values for SGPLOT procedure. + +* `odsGraphicsOptions` - *Optional*, default value is empty. + List of additional options values for `ODS Graphics` statement. + By default only the: `width=`, `height=`, and `antialiasmax=` + are modified. + + +***Stat related options***: + +* `VSCALE` - *Optional*, default value `Proportion`. + Specifies the scale of the vertical axis. + Allowed values are `PROPORTION`, `PERCENT`, and `COUNT`. + `PROPORTION` scales the data in units of proportion of observations per data unit. + `PERCENT` scales the data in units of percent of observations per data unit. + `COUNT` scales the data in units of the number of observations per data unit. + +* `KERNEL_K` - *Optional*, default value `NORMAL`. + Specifies type of kernel function to compute kernel density estimates. + Allowed values are `NORMAL`, `QUADRATIC`, and `TRIANGULAR`. + + +* `KERNEL_C` - *Optional*, default value `1`. + Specifies standardized bandwidth parameter *C* to compute kernel density estimates. + Allowed values are between `0` and `1`, + +***Other options***: + +* `cleanTempData` - *Optional*, default value `1`. + Indicates if temporary data sets should be deleted. + +--- + +### NOTES: ################################################################### + +* Default value of the `title` option is: + `%nrstr(title1 JUSTIFY=C "Rain Cloud plot for &list_g. by " %unquote(&xLabel.);)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* Default value of the `footnote` option is: + `%nrstr(footnote1 JUSTIFY=L COLOR=lightGray HEIGHT=1 "by RainCloudPlot macro from the BasePlus package";)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* The `catLabels` and `xLabels` should be quoted comma separated lists enclosed with brackets, + e.g. `catLabels=("Continent of Origin", "Car Type")`, see Example below. + +* The `catLabelAttrs` and `xLabelAttrs` should be space separated lists of `key=value` pairs, + e.g. `xLabelAttrs=size=12 color=Pink weight=bold`, see Example below. + +* Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`. + +* Plot is generated by `PROC SGPLOT` with `BAND`, `SCATTE`, and `POLYGON` plots. + +* After execution the ODS graphics dimension parameters are set to `800px` by `600px`. + +* SAS notes (`NOTE:`) are disabled for the execution time. + +* List of predefined colours is: + `BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`, + `MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`. + +### BOX-AND-WHISKERS PLOT: ################################################################### + +The box-and-whiskers plot has the following interpretation: +- left vertical bar indicates the minimum, +- left whisker line starts at `max(Q1 - 1.5IQR, minimum)` and ends at lower quartile (Q1), +- diamond indicates mean, +- vertical bar inside of the box indicates median, +- right whisker line starts at upper quartile (Q3) and ends at `min(Q3 + 1.5IQR, maximum)`, +- right vertical bar indicates the maximum. + +With above setup it may happen that +there is a gap between the minimum marker and the beginning of the left whisker +or +there is a gap between the end of the right whisker and the maximum marker. +See examples below. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple Rain Cloud Plot for a `have` dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data have; + g = "Aaa"; + do _N_ = 1 to 50; + x = rannor(42); + output; + end; + + g = "Bb"; + do _N_ = 1 to 120; + select (mod(_N_,9)); + when(1,2,3,4,5) x = 0.5*rannor(42)+1; + when(6,7,8) x = 0.5*rannor(42)+3; + otherwise x = 0.5*rannor(42)+5; + end; + output; + end; + + g = "C"; + do _N_ = 1 to 60; + x = 3*rannor(42)+7; + output; + end; + run; + + %RainCloudPlot(have, g, x) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 1](./baseplus_RainCloudPlot_Ex1.png) + + + +**EXAMPLE 2.** Rain Cloud plot for `sashelp.cars` dataset + with groups by Origin or Type + for Invoice variables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + %RainCloudPlot( + sashelp.cars(where=(Type ne "Hybrid")) + , Origin Type + , Invoice + , HeightPX=300 + , y2axisLevels=3 + , catLabels=("Continent of Origin", "Car Type") + , xLabels="Invoice, [$]" + , xLabelAttrs=size=12 color=Pink weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 2a](./baseplus_RainCloudPlot_Ex2a.png) +![Example 2b](./baseplus_RainCloudPlot_Ex2b.png) + + + +**EXAMPLE 3.** Rain Cloud plot with formatted groups + and annotations. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data annotation; + function="text"; + label="This graph is full(*ESC*){sup '2'} of annotations!"; + drawspace="graphpercent"; + rotate=30; + anchor="center"; + textsize=32; + x1=50; + y1=50; + textcolor="red"; + justify="center"; + textweight="bold"; + width=100; + widthunit="percent"; + run; + + proc format; + value system + 1="Windows" + 2="MacOS" + 3="Linux" + ; + run; + + data test; + do system = 1 to 3; + do i = 1 to 50; + x = rannor(123)/system; + output; + end; + end; + format system system.; + run; + + + %RainCloudPlot(test, system, x + , colorslist=CX88CCEE CX44AA99 CX117733 + , formated=1 + , sganno=annotation + , sgPlotOptions=noborder + , WidthPX=1000 + , HeightPX=320 + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 3](./baseplus_RainCloudPlot_Ex3.png) + +--- + +## >>> `%zipLibrary()` macro: <<< ####################### + +The zipLibrary() macro allows to zip content of a SAS library. + +Files can be zipped into a single file (named as the input library) +or into multiple files (named as "dataset.sas7bdat.zip"). +If a file is indexed also the index file is zipped. + +Source files can be deleted after compression. + +Status of compression and processing time is reported. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary( + lib + <,mode=> + <,clean=> + <,libOut=> + <,compression=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lib` - *Required*, a name of the library to be zipped. + Must be a valid SAS V7, V8, or V9 library. + + +* `mode = S` - *Optional*, default value is `S`, + indicates mode of compression + generates single zip file (`SINGLE/S`) + or multiple files (`MULTI/M`) + +* `clean = 0` - *Optional*, default value is `0`, + should datasets be deleted after zipping? + `1` means *yes*, `0` means *no*. + +* `libOut =` - *Optional*, default value is empty, + output library for a single zip file. + +* `compression =` - *Optional*, default value is `6`, + specifies the compression level + `0` to `9`, where `0` is no compression + and `9` is maximum compression. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Generate data: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlcreatedir; + libname test1 "%sysfunc(pathname(work))/test1"; + libname test2 "%sysfunc(pathname(work))/test2"; + libname test3 (test1 test2); + libname test4 "%sysfunc(pathname(work))/test4"; +options nodlcreatedir; + +%put %sysfunc(pathname(test3)); +%put %sysfunc(pathname(test4)); + +data + test1.A(index=(model)) + test1.B + test2.C + test2.D(index=(model make io=(invoice origin))) +; + set sashelp.cars; +run; + +data test1.B2 / view=test1.B2; + set test1.B; + output; + output; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Zip content of test3 library + into the same location in one zip file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Zip content of test3 library + into the same location in multiple zip files: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, mode=MULTI) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Zip content of test3 library + with maximum compression level + into different location in one zip file + and delete source files: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, clean=1, libOut=test4, compression=9) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%unzipLibrary()` macro: <<< ####################### + +The unzipLibrary() macro allows to unzip content of a SAS library. +It is a *counterpart* to the `%zipLibrary()` macro and is *not* intended to work +with zip files generated by other software (though it may in some cases). + +Files can be unzipped from a single file +or from multiple files (named e.g. "dataset.sas7bdat.zip"). +If a file is indexed also the index file is unzipped. + +Source files can be deleted after decompression. + +Status of decompression and processing time is reported. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%unzipLibrary( + path + <,zip=> + <,mode=> + <,clean=> + <,libOut=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `path` - *Required*, a path pointing to zipped file(s) location. + +* `zip =` - *Optional*, When `mode=S` a name of the + zip file containing SAS files to be unzipped. + +* `mode = S` - *Optional*, default value is `S`, + indicates mode of decompression + read from a single zip file (`SINGLE/S`) + or from multiple files (`MULTI/M`) + +* `clean = 0` - *Optional*, default value is `0`, + should zip files be deleted after unzipping? + `1` means *yes*, `0` means *no*. + +* `libOut =` - *Optional*, default value is empty, + output library for a single zip file + decompression. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Generate data: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlcreatedir; + libname test1 "%sysfunc(pathname(work))/test1"; + libname test2 "%sysfunc(pathname(work))/test2"; + libname test3 (test1 test2); + libname test4 "%sysfunc(pathname(work))/test4"; +options nodlcreatedir; + +%put %sysfunc(pathname(test3)); +%put %sysfunc(pathname(test4)); + +data + test1.A(index=(model)) + test1.B + test2.C + test2.D(index=(model make io=(invoice origin))) +; + set sashelp.cars; +run; + +data test1.B2 / view=test1.B2; + set test1.B; + output; + output; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Use data from Example 1. + First zip content of the `test3` library + to `test4` location into one zip file + and delete source files. + Next unzip `test3.zip` library into the + `test4` location and delete the zip file. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, clean=1, libOut=test4) + + +%unzipLibrary(%sysfunc(pathname(test4)), zip=test3, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use data from Example 1. + First zip content of the `test1` library + into multiple zip files and delete source files. + Next unzip `*.zip` files in `test1` + location and delete zipped files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test1, mode=M, clean=1) + + +%unzipLibrary(%sysfunc(pathname(test1)), mode=M, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** First zip content of the `sashelp` library + into `work` library. + Next unzip `sashelp.zip` file in `work` + location and delete zip file. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(sashelp, mode=S, clean=0, libOut=work) + + +%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSN()` macro: <<< ####################### + +The LDSN (Long DataSet Names) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro has some limitation described below, to overcome them +another macro, with different name: LDSNM (Long DataSet Names Modified) +was created. See its description to learn how to use it. + +--- + +The idea for the macro came from the following story: + +Good friend of mine, who didn't use SAS for quite some time, +told me that he lost a few hours for debugging because +he forgot that the SAS dataset name limitation is 32 bytes. + +I replied that it shouldn't be a problem to do a workaround +for this inconvenience with a macro and the `MD5()` hashing function. + +I said: *The macro should take an "arbitrary string" for a dataset +name, convert it, with help of `MD5()`, to a hash digest, and +create a dataset with an "artificial" `hex16.` formated name.* + +Starting with something like this: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +the macro would do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +%sysfunc(MD5(peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s), hex16.) +~~~~~~~~~~~~~~~~~~~~~~~ + +and (under the hood) return and execute the following code: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data work.DSN_41D599EF51FBA58_(drop = sex rename=(name=first_name) where = (age in (12,13,14))) ; + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +Also in the next data step user should be able to do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data my_next_data_step; + set %DSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s); +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +and work without the "dataset-name-length-limitation" issue. + +--- + +See examples below for the details. + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain dots (`.`) since they are used as separators! + +- dataset name _cannot_ contain round brackets(`(` and `)`) since they are used as separators + (but `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(work.test)`, `%ldsn( work.test)`, `%ldsn(work.test )`, + `%ldsn(work .test)`, `%ldsn(work. test)`, `%ldsn(work . test)`. + +- macro calls of the form: + `data %LDSN(); run;`, `data %LDSN( ); run;`, `data %LDSN( . ); run;` or even + `data %LDSN( . (keep=x)); run;` are resolved to empty string, so the result is + equivalent to `data; run;` + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSN( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is concider as *"fully qualified dataset name"*, i.e. macro +assumes it may contain library as prefix and data set options as sufix. +See the `%LDsNm()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options nomprint source nomlogic nosymbolgen ls = max ps = max; + +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSNM()` macro: <<< ####################### + +The LDSNM (Long DataSet Names Modified) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro had some limitation (see its documentation), to overcome them +another `%LDSNM()` (Long DataSet Names Modified) macro was created. + +The main idea behind the `%LDSNM()` is the same as for `%LDSN()` - see the description there. + +--- + +The `%LDSNM()` macro works differently than the `%LDSN()` macro. + +The `%LDSN()` macro assumes that *both* libname and dataset options *are* +be passed as elements **inside** the macro argument, together with the data set name. E.g. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( WORK.peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `%LDSNM()` macro, in contrary, assumes that both libname and dataset options are +passed **outside** the macro parameter, i.e. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data WORK.%LDSNM( peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s ) (drop = sex); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This approach overcomes some limitations the LDSN has. + +The **additional** feature of the `%LDSNM()` is that when the macro is called, +a global macrovariable is created. +The macro variable name is the text of the hashed data set name. +The macro variable value is the text of the unhashed data set name (i.e. the argument of the macro). +For example the following macro call: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +creates macro variable with name `DSN_BF1F8C4D6495B34A_` and with value: `JOHN "X" 'Y' DOG`. + +The macrovariable is useful when combined with `symget()` function and +the `indsname=` option to get the original text string value back, +like in this example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + set %LDSNM(John "x" 'y' dog) indsname = i; + + indsname = symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See examples below for the details. + +--- + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain _unpaired_ round brackets(`(` and `)`) + (but unmatched `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain _unpaired_ quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(test)`, `%ldsn( test)`, `%ldsn(test )`. + +- macro calls of the form: + `data %LDSN(); run;` or `data %LDSN( ); run;` are resolved + to empty string, so the result is equivalent to `data; run;` + +- created macrovariable is _global_ in scope. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSNM( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is considered as *"only dataset name"*, i.e. the macro does not +assume it contains library as prefix or data set options as suffix. +See the `%LDSN()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x"[ 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x" 'y'} & dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) (drop = sex rename=(name=first_name) where = (age in (12,13,14))) +; + set sashelp.class; +run; + +data test; + set work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) indsname=i; + + indsname=symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( . ); + set sashelp.class; +run; + +data %LDsNm( ); + set sashelp.class; +run; + + +data %LDsNm(); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LVarNm()` macro: <<< ####################### + +The LVarNm() macro function works like the LDSN() macro function, but for variables. +Supported by LVarNmLab() macro function which allows to remember "user names" in labels. + +The motivation for the macro was similar to that for the LDSN() macro. + +--- + +See examples below for the details. + +The `%LVarNm()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNm(test)`, `%LVarNm( test)`, `%LVarNm(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNm( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +### EXAMPLES AND USE CASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options ls=max; +data test; + %LVarNmLab( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) + + do %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) = 1 to 10; + + y = 5 + %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) * 17; + output; + end; +run; + +data test2; + set test; + where %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) < 5; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNmLab() = 17; + + %LVarNm() = 17; + + %LVarNm( ) = 42; + + %LVarNm( ) = 303; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNm(test) = 1; + + %LVarNm( test) = 2; + + %LVarNm(test ) = 3; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test4; + array X[*] %LVarNm(some strange! name)_0 - %LVarNm(some strange! name)_10; + + do i = lbound(X) to hbound(X); + X[i] = 2**(i-1); + put X[i]=; + end; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%LVarNmLab()` macro: <<< ####################### + +The LVarNmLab() macro function supports LVarNm() and allows to remember "user names" in labels. + +The motivation for the macro was similar one as for the LDSN() macro. + +--- + +See examples in LVarNm() documentation for the details. + +The `%LVarNmLab()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNmLab(test)`, `%LVarNmLab( test)`, `%LVarNmLab(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNmLab( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%bpPIPE()` macro: <<< ####################### + +The bpPIPE() [Base Plus PIPE] macro executes OS command +and print to the log output of the execution. + +Under the hood it uses `_` filename reference to PIPE device. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE( ) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +* **NO Arguments** - Everything inside brackets is treated as an OS command. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** List, to the log, content of D and C drives: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(D: & dir & dir "C:\") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** List, to the log, content of `home` directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(ls -halt ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dirsAndFiles()` macro: <<< ####################### + +The `%dirsAndFiles()` macro allows to extract info about all files +and subdirectories of a given `root` directory. + +The extracted info may be just a list of files and subdirectories or, if +the `details=` parameter is set to 1, additional operating system information +is extracted (information is OSS dependent and gives different results for Linux +and for Windows) + +The extracted info can be narrowed down to files (`keepFiles=1`) or to +directories (`keepDirs=1`) if need be. + +The extracted info can be presented in wide or long format (`longFormat=1`). + +The extracted info for files can be narrowed down to only files with particular +extension, for example: `fileExt=sas7bdat`. + +The extracted info can be narrowed down maximal path depth +by setting up the `maxDepth=` parameter. + +See examples below for the details. + +### REFERENCES: ################################################################### + +The macro is based on Kurt Bremser's "*Talking to Your Host*" article +presented at WUSS 2022 conference. + +The article is available [here](https://communities.sas.com/t5/SAS-User-Groups-Library/WUSS-Presentation-Talking-to-Your-Host/ta-p/838344) +and also as an additional content of this package. +The paper was awarded the "Best Paper Award - Programming". + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles( + root + <,ODS=> + <,details=> + <,keepDirs=> + <,keepFiles=> + <,longFormat=> + <,fileExt=> + <,maxDepth=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `root` - *Required*, path to be searched + for information. + +* `ODS=work.dirsAndFilesInfo` - *Optional*, output data set, + name of a dataset to store information. + +* `details=0` - *Optional*, indicates if detailed info + will be collected, `1` = yes, `0` = no. + +* `keepDirs=1` - *Optional*, indicates if directories info + will be collected, `1` = yes, `0` = no. + +* `keepFiles=1` - *Optional*, indicates if files info + will be collected, `1` = yes, `0` = no. + +* `longFormat=0` - *Optional*, indicates if output be + in long format, `1` = yes, `0` = no. + +* `fileExt=` - *Optional*, if not missing then indicates + file extension to filter out results. + +* `maxDepth=0` - *Optional*, if not zero then indicates + maximum depth of search in the root path. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get list of files and directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get detailed info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result2,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Get only files info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result3,keepDirs=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result5,keepDirs=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Get only directories info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result4,keepFiles=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result6,keepFiles=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Filter out by `sas` extension: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result7,fileExt=sas) + +%dirsAndFiles(~/,ODS=work.result8,fileExt=sas,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Keep result in the long format: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result9,details=1,longFormat=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Get info for maximum depth of 2: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result10,details=1,maxDepth=2) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** How locked/unavailable files are handled: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK)),ODS=work.result11,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Not existing directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%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() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%intsList()` macro: <<< ####################### + +The intsList() macro function allows to print a list of +integers starting from `start` up to `end` incremented by `by` +and separated by `sep=`. + +If `start`, `end` or `by` are non-integers the are converted to integers. + +See examples below for the details. + +The `%intsList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%intsList( + start + <,end> + <,by> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `start` - *Required*, the first value of the list. + If `end` is missing then the list is generated + from 1 to `start` by 1. + +2. `end` - *Required/Optional*, the last value of the list. + +3. `by` - *Required/Optional*, the increment of the list. + If missing then set to `1`. + *Cannot* be equal to `0`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple list of integers from 1 to 10 by 1: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(10); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Ten copies of `sashelp.class` in `test11` to `test20`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + %zipEvalf(test, %intsList(11,20)) + ; + set sashelp.class; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Non-integers are converted to integers, the list is `1 3 5`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1.1,5.2,2.3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1,5,2,sep=+); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%letters()` macro: <<< ####################### + +The letters() macro function allows to print a list of Roman +letters starting from `start` up to `end` incremented by `by`. +The letters list can be uppercases or lowercase (parameter `c=U` or `c=L`), +can be quoted (e.g. `q=""` or `q=[]`), and can be separated by `s=`. + +Values of `start`, `end`, and `by` have to be integers in range between 1 ad 26. + +See examples below for the details. + +The `%letters()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%letters( + range + <,c=> + <,q=> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `range` - *Required*, letters selector in form `start:end:by`. + Lists letters from `start` to `end` by `by`. + Values of `start`, `end`, and `by` are separated by + colon and must be between 1 ad 26. + If value is outside range it is set to + `start=1`, `en=26`, and `by=1`. If `end` is missing + then is set to value of `start`. + If `end` is smaller than `start` list is reversed + +* `c = U` - *Optional*, it is a lowercase letters indicator. + Select `L` or `l`. Default value is `U` for upcase. + +* `q = ` - *Optional*, it is a quite around elements of the list. + Default value is empty. Use `%str()` for one quote symbol. + If there are multiple symbols, only the first and the + second are selected as a preceding and trailing one, + e.g. `q=[]` gives `[A] [B] ... [Z]`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Space separated list of capital letters from A to Z: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:1); + + %put %letters(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** First, thirteenth, and last letter: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1) %letters(13) %letters(26); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Every third lowercase letter, i.e. `a d g j m p s v y`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:3,c=L); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Lists with separators: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,s=#); + %put %letters(1:26:3,s=%str(;)); + %put %letters(1:26:4,s=%str(,)); + %put %letters(1:26,s=); + %put %letters(1:26,s==); + %put %letters(1:26,s=/); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Every second letter with quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,q=%str(%')); + %put %letters(2:26:2,q=%str(%")); + + %put %letters(1:26:2,q=''); + %put %letters(2:26:2,q=""); + + %put %letters(1:26:2,q=<>); + %put %letters(2:26:2,q=\/); + + %put %letters(1:26:2,q=()); + %put %letters(2:26:2,q=][); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Mix of examples 4, 5, and 6: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26,c=L,q='',s=%str(, )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** If `end` is smaller than `start` list is reversed: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(26:1:2,q=''); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoBlocks()` macro: <<< ####################### + +The splitDSIntoBlocks() macro allows to split the `set` dataset into blocks +of size `blockSize` in datasets: `prefix1` to `prefixN`. + +The last dataset may have less observations then the `blockSize`. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks( + blockSize + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `blockSize` - *Required*, the size of the block of data, + in other words number of observations in + one block of split data. + Block size must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.class` into 5 elements datasets ABC1 to ABC4: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoBlocks(5,sashelp.class,ABC) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `partN` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(123) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoBlocks(100,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoParts()` macro: <<< ####################### + +The splitDSIntoParts() macro allows to split the `set` dataset into `parts` parts +of approximately `NOBS/parts` size in datasets: `prefix1` to `prefixN`. + +The splitDSIntoParts() macro internally runs the splitDSIntoBlocks() macro. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts( + parts + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `parts` - *Required*, the number of parts to split data into. + Number of parts must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.cars` into 7 parts: datasets carsInParts1 to carsInParts7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoParts(7,sashelp.cars, carsInParts) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `part3` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoParts(3,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%filePath()` macro: <<< ####################### + +The filePath() macro function returns path to a file, +it is a wrapper to `pathname()` function for files. + +See examples below for the details. + +The `%filePath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%filePath( + fileref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `fileref` - *Required*, a fileref from the `filename` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%libPath()` macro: <<< ####################### + +The libPath() macro function returns path to a library, +it is a wrapper to `pathname()` function for libraries. + +See examples below for the details. + +The `%libPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%libPath( + libref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `libref` - *Required*, a libref from the `libname` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(WORK); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Return path to `SASHELP` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(SASHELP); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%workPath()` macro: <<< ####################### + +The workPath() macro function returns path to the `WORK` library, +it is a wrapper to `pathname("work", "L")` function. + +See examples below for the details. + +The `%workPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%workPath() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +*) No arguments. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Create new library inside `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlCreateDir; + libname NEW "%workPath()/new"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%translate()` macro: <<< ####################### + +The translate() macro function allows to replace bytes with bytes in text string. + +See examples below for the details. + +The `%translate()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%translate( + string + ,from + ,to +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `string` - *Required*, string to modify. + +2. `from` - *Required*, list of bytes to be replaced with + corresponding bytes from `to`. + +3. `to` - *Required*, list of bytes replacing + corresponding bytes from `from`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Replace quotes and commas with apostrophes and spaces: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str("A", "B", "C"),%str(%",),%str(%' )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Unify all brackets; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str([A] {B} (C) ),{[(<>)]},(((())))); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Replace all digits with `*`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(QAZ1WSSX2EDC3RFV4TGB5YHN6UJM7IK8OL9P0,1234567890,**********); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Letters change: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str(A=B),AB,BA); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%tranwrd()` macro: <<< ####################### + +The tranwrd() macro function allows to replace substrings +with other substrings in text string. + +Returned string is unquoted by `%unquote()`. + +See examples below for the details. + +The `%tranwrd()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%tranwrd( + string + ,from + ,to + <,repeat> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `string` - *Required*, string to modify. + +2. `from` - *Required*, substring replaced with + corresponding string from `to`. + +3. `to` - *Required*, substring replacing + corresponding substring from `from`. + +4. `repeat` - *Optional*, number of times the replacing + should be repeated, default is 1. + Useful while removing multiple adjacent + characters, e.g. compress all multiple + spaces (see example 2). +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple text replacement: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(Miss Joan Smith,Miss,Ms.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Delete multiple spaces; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(%str(A B C),%str( ),%str( ),5); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Remove substring: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(ABCxyzABCABCxyzABC,ABC); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%findDSwithVarVal()` macro: <<< ####################### + +The findDSwithVarVal() macro searches for all +datasets (available for a given session) containing +a variable of a given value. + +The value search is case sensitive - but can be altered with `IC=` parameter. +The value search keeps leading blanks - but can be altered with `TB=` parameter. +The value search compares full value - but can be altered with `CTS=` parameter. + +The default variable type is `char`, the `type=` parameter allows +to change it (possible values are `char` and `num`), the parameter is case sensitive. + +Only datasets are searched, views are not included. + +During the process two temporary datasets named: +`WORK._` (single underscore) and `WORK.__` (double underscore) +are generated. The datasets are deleted at the end of the process. + +By default search results are stored in the `WORK.RESULT` dataset. +Name of the dataset can be altered with `result=` parameter. +The dataset with result contains two variables: +`datasetName` - names of datasets, +`firstObservation` - the firs occurrence of the value. + +See examples below for the details. + +The `%findDSwithVarVal()` macro does not execute as a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%findDSwithVarVal( + variable + ,value + <,type=> + <,ic=> + <,tb=> + <,cts=> + <,lib=> + <,result=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `variable` - *Required*, name of variable to be searched. + +2. `value` - *Required*, the value to be searched. + +*. `type` - *Optional*, default value is `char`. + Indicates which type is the searched value. + Possible values are `char` and `num`, + the parameter is case sensitive. + +*. `ic` - *Optional*, "Ignore Cases", default value is `0`. + Indicates should the search ignore cases of the text values. + Possible values are `0` and `1`. + +*. `tb` - *Optional*, "Trim Blanks", default value is `0`. + Indicates should the search trim leading and trailing + blanks of the text values. + Possible values are `0` and `1`. + +*. `cts` - *Optional*, "Compare To Shorter", default value is `0`. + IF set to `1` execute value comparison as `=:` for the text value. + Possible values are `0` and `1`. + See examples. + +*. `lib` - *Optional*, default value is missing. + If not empty narrows the search to a particular library. + +*. `result` - *Optional*, default value is `WORK.RESULT`. + Is the name of the dataset with results. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Search variable `NAME` containing value `John`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(name, John) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Search numeric variable `AGE` containing value `14`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(age, 14, type=num) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Search numeric variable `SCORE` with missing value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST; + score=17; output; + score=42; output; + score=. ; output; + run; + + %findDSwithVarVal(score, ., type=num, result=WORK.MissingScore) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Search library `WORK` for variable `NAME` starting with value `Jo` + ignoring cases and trimming blanks from value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data A; + name="Joanna"; + data B; + name="john"; + data C; + name=" Joseph"; + data D; + name=" joe"; + run; + + %findDSwithVarVal(name, Jo, ic=1, tb=1, cts=1, lib=WORK) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%getTitle()` macro: <<< ####################### + +The getTitle() macro extract text of titles or footnotes +into a delimited list. + +Titles/footnotes numbers can be selected with the `number` argument. +Only the text of a title or footnote is extracted. + +Author of the original code is: Quentin McMullen (`qmcmullen.sas@gmail.com`). + +See examples below for the details. + +The `%getTitle()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getTitle( + < number> + <,type=> + <,dlm=> + <,qt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `number` - *Optional*, default value is empty, + indicates numbers of titles to be extracted. + Space separated list is expected. + If empty or `_ALL_` extract all non-missing. + +*. `type` - *Optional*, default value is `T`. + Indicates which type is the searched. + `T` fro title, `F` for footnote. + +*. `dlm` - *Optional*, "DeLiMiter", default value is `|` (pipe). + Possible values are: `| \ / , . ~ * # @ ! + - _ : ?` + or `s` for space, `c` for comma, `d` for semicolon. + +*. `qt` - *Optional*, "QuoTes", default value is empty. + Use `%str()` for single quote symbol (e.g. `%str(%")`). + If there are multiple symbols, only the first and the + second are selected as a leading and trailing one, + e.g. `qt=""` gives `"title1 text" "title2 text" ... `. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get titles in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle() ; + + %put %GetTitle(1 3,dlm=c, qt=[]) ; + + %put %GetTitle(2:4,dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get footnotes in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + footnote1 "First little footnote"; + footnote2 "Second little footnote"; + footnote3 "Third little footnote"; + + %put %GetTitle(1 2,type=f,dlm=s, qt="") ; + %put %GetTitle(2 3,type=f,dlm=c, qt='') ; + %put %GetTitle(1 3,type=f,dlm=d, qt=[]) ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + + +--- + +--- + +--- + +## License #################################################################### + +Copyright (c) since 2020 Bartosz Jablonski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- diff --git a/hist/1.26.0/baseplus.zip b/hist/1.26.0/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..1f7746364743cd2e2e2adfdded0df2000d62d117 GIT binary patch literal 275492 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

k#V*2LLWE%Bs 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

bO%oPxkO$(bIKV;~cDoV@vHZ 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�R$sfGUiv1D)>Z_>*6*k2J&gM^A z3=4 zRR=$;+ei`A)#*;9r1QD?aNYN?E3#6b(m)2h07dm-U(2M)Tv@5^g1;#CW23EB!Nd?q zxA2CAp}J!u_pTa-WAdu)^q9=X6xH0LKMgq%qwQlV^{XZ%C0LcW=$a}x*lc+SZnuq#@%D(Y- zEP-F|N?J5Dh-}l^?bOb(7K|^>HL@~^2&!SmMlQxr!X#>nYWHI6 zrxmF2PLcY%HBPbk0XrZNRF5x5ws1q_m$~_OGbFn*n!sLhXzp8=O3gaN`Un=XE`+$C zu?|vkB)`BHg}>SeM}luF*9zq8_-0mau0-0D|cu`l(bnE zN92~IWQh+|iyks%kX|rc!$aX93ELlfSsYEosiSq~;e{j>a%VJV-`6u& zi%|+d#m>yNenXBu2%RtI7xGU?y+T3fHfY>$!cXjSAP7MRMcPld#B;g$ZiD=?%24Fz z>?b`KtR&hOlk>U;H;`|Qz-;xdV?E)4Q5`-uDln1*IoDq8#5P@dYkzNY*GLqen{jW+ z!Y|&w%w|GeqdSI8b+3^=rx=zU!jqOYuQoa7OE{}^D8hP&=Zx>q9yvp<$qT-E{VjL$ zT46j45a1t^gk@InKSAfjOv#;D2rSts$MvYO+sZl~le4s(_HLyMMG}kei#In*alCkSvhIAv1R>a=N`g%rcVo<^T&o^uL@YIFR>HaPYGD8q;Uq zO~ZdCI{KtZvZ@CGLQ9{UmFqt1(+7l;wta_sC1xZ$isN;WjZD z$03e0`h|=#({u)j#8B6g)4Xha7}*aRyE$QImTjIoeZ+3;|Hq@`m_>6j=2>qgJfm;( zkX=+80r{D8Al7g-j4U{+FqWU1a8oI7$`fIEHw6cadn33m`qkHZR$6a;%x1+X5L;~! z&3eUm{y#?EImQ=WZ~Gm4jcwbuZQHhO+qOOPo0+x7wryjLZS&mkle6D_lD$vz{MR;Z z(>6`MpSD*oJiF#mF33iV9ryHZM?TOsK8O8ZSKU^YLF+Ao=X1VCC6gqWZj+C-30gUR zRAxUPl4TLs6f3p1i04aH9@+Tu5^GPea?_S9zgo0pI8ax$oMzRbM&Spo5L7>`@oQ|) zXCcp%U<_)b8&~Y=>!l&aNAXjtyz6FcgO#V+?idFF{;Fa!rY%)Z(*CQb*Wj;9 z;0aQ5YBkVc;N&DxD=Qr#swm%xI0Bi{qKyjP5R?|PQ!0FO#kMBPm#p$CkyDj)K7J$|Sq_n~5 zvonB&({*FkJG;22wwLK2ZE8^n{hPY;G*4e>| z9%+#s`h9eDS0LYjp!d1fZoQ?kx;BnVw0En5Sm@O{apg{DY>KIunznq$yB=3Tn0%Xp z2RoaUz!#x0!x-|A>;0SWd z+g0}tGGUVLPQ8FpMZ&xXx<#W%pLiM*XyYquP?pV5u}5o@w2GS8Mex@`_#UwKJ7Tl& zTodQ@ zF%hx807twrmGUNG(F>4@5Gdm=A+xmUCv`2Ij~65+Ofy=4KA=-Ia!6e+U;RTLHNaY- zAj9+e)7F+NcUHupmDSpvCv+zs(PJT~|H}FKa zU6_4_+AOU^a7J7h=tDM2x5fREr!*eaTs>)`^RZOl6J(lb0hX;q5t%T$uJyhW13|%G)ZR`7!$Kbn^Cj- z00jU5tqyO;13eT9d*ydTNZjXHqhO~K2dRfWHXEU}xB_3%H=J?|MTPmXxh!>(6MRKP|U3e30ssx{w?AQdbOiCu1^7dWLC!|t*1*2Av}Mmx5@9E zHH37e7Nt>C;N_NF8(VU4$v9j-r)j(}PX=vcWm?u0*36=>qS&HK#v zZWQ=QsF#&|pJX?Lz?L)spih#VqtdRDYBUH(3Yv-IR5bI^t20{aejnJZc-bC z^wwM{t+Hm)h6*m2ve}+4vh$)|KcDJl|5l2-5aVZ( zGYLN0Ry>?qom&SY1{IoO@nUXiSkUc^_lXL|d?^Db8j>ZMiTiiP7VwjezNQn73Er_EONkS z`O)(M9?nyrlu_Zw`K}RC?o%Dkz=U0KhmYHLV#|KJo|>{MWO94O2=h|Qal_CeUl#M} zBMApCH(kLKOi1|B<`;<$#$6Xl66pya^o?yE`cOsJ5^SivU~kMkmAH92c;?hcW=Yt70FbF|CY@xsUmPP~|jueG)2-zTGq6D%AZ zc-U?$iu;hdMBb3B>C91!+FRB38wI`|p z)VfZ7-9R{vk|QQL+sn`PHsqz30uVXgTa1_^X1eOSz=6x!%SLdC1ufG_3F~HTPD2ZKF?lFzBE}aYUgV zZW^mH5PiA`_-%2L6+UmuIb}T7*E864rQ2d`SamJ^Xp~t%gm-~|vN)%@U8A90tg<`G z+INUgk8^OidcMm;CvQ+MoNenS%U#dwzr5cCvYz{0{u{9UOOeUU!pZ*cQuhA@Hje)V zuq|ur)v){nYy!Q+t6`<-msklzV9Z&ibDeewkHwGGSLo8MbKUE`23q$Kmv3WU9vQ-3 zUM}XjSX$}$G6{#7u(|&4ue0NGy-2r*p!xovAEO2SF7F=LY!w7QcT55Po~06enUk*X zpPOf`47@>He*QlvHD22@&(`6aSoMy*aT*VML55q?25~1iK0FC`SOq=cU2$i4-n2bj zBf#~da!!F}i)L8j9-vbyvaO#%QkI{rt;DGee##O<#(ATQWW4V(WvFr~&7ne8P@p{v zE-v2k=vDeJPEuN~*hd*iqI7lzrEiLGiC3wI4}H2BO|>h-)zO)(eH*XV6#6kW-ld}h zzhs|~shDbTQ1-G=BVBm3lve^OVTN;heZRjC-rnxE(H%z+>02OYS`Nf?uoTUGUGWFX zsMFDj#7#BKAzuV#k*|lVfxzRnJ3y4MHHohe&;Gc2c?1@1B)SW#cV#j4GO8!AVV>a; zJNzzSlA^U%)8J{ec(Nk(NkGwu_}zh0WAF=;HT}EO7rdW0u58xvlg?3HRr%8A`x`P8eB%Tk9XJlx_k#pTgTL- z4@?FXRv}Z;6ID8UFz-7#=r&%coG*9GTll?Sl=N^l3o0T_DPGRdwmxg1pU+yzUU#R& z5X$imN2X~ProxCBW7Vo@E(Tw(=~q&4IRoiNmKJiC162K~cAw&@1?oxy zZ*OZ{_P81`h^Lp+qpU%xQ%1n@K(Z)?J?%E7MD*lF6faO5ZN-241-Y2awVsxc(1;+9 zu7aIt=59vnsX*H#UWfi+JoeaLTiRUsf4v8}5)PK0kgX)4oRUY_<0 zOk0a+AO?fj?--*6t5Dgiv^PR_Qd89mOM_C@li=F8=mv?XIZ%HaluQI{%ak?2+jXTG)$%ObZm^IpG zTXs`K{&-F6N^(w&#^5n(2!=7hzLd}l+3=#S(`#08-&rlvZvMTn&%Updbcu85boi{d z$G-^}`&za`Eg(6>>+o^BX!|X0sVq#SdxyJRqO&fkWwCsx+*9>((N#LXIuwz1p^_2x zo6Uxzov2(~g1jk+bYD>=Wr(Aefm%GH1ji1qBu89paf25*plS!<>SYe7>iKnv9cgJc z%z$rrO$3EIyk|Z<4rypIt1dFb6ghsACc5Ij5jnLDRc6M6&Ir z+GdB2OH7NXtNysCn_KJD+iMT1_ItGkcT)H&+J zZoz*p+)=7fU9Lo|BjSF%PZ~Gbp+ej&&lw;EurT(nS*4s6BRyc z?^|hsT?|}VDL)O)g|)idpQ-0L=;DSk#bSGR1O{fQj*6#w50{|GMqjMvmUxDf$4p^Z z(k{x<&!>ol*OQ9JX#)QjBl(jx@~^*#;-$U55A}-#Hjiy>U~OxL`UiCTkA+B4bpn9T zf*~AXVaQNiy5|``6};WsBz$PQI)>flr8-B)Oxs?dP~>E3IwfJ{UlQkSss*R=)}Lxm zs(uVn(qSn#kma$=Zg0(frhk9<8PE8g2;iAdxHlJKh4f@f+fYqB>p*CICR>VM$o| zB2{^FVXTwXoGU>O>x@YsBmthxK8O&&v`$U>zd4K$2NDyKseeDbA%=G)&6>XMk!j;D z%)@b@SYmXZ-bude!Z=epB<}vjI|IFWAW|l)G^&|RnN-$ewDnk&R?6=O(s|VS@fY!b zEeW}2F`HB4xZJsFCtrAyV;UamIHq@Hi-~@((QiI>;2Bk`##+Hwtc_i2)_&O#ZMxCd zHC+wX=ScY|U}Gav;8<2gd$aYn-jqPCp4HG<=zx+F^V!Vf0bAodJ{a-nmEQQ_+Ax17 z*fkBvd*gDo@sMuvUOW<8JVg-u$!hCfdoc^mji1j|heNQ}*lVyso|i-2;2hIcdxi_| zS>0tf=HQ^@d2Cw(i|7n1=cbbXTMo;On;>mjJZjAEsvSJ5PzHJ=2C`NpuK8{u!bP$R zUESZr5Ia2NHR?nko6QxSU`pY>i*7eg+)o^4*~g@@cVHEZdi-IzWJlK*&d27ta>jml z+>)erl)wd?r(maRYDBLW)nlpvMI3l5Qy#*Hq)D0^p$>MH1*OxVq}_IJM`A(Hy$^HH zGmrKZW-yC363|G~vScU&-%8XTeA)MGA``8Ta8{iR0I-`&emq__^R!9bvXK3K!tfl) ze&xaAIWj2xOC_3u_%u%bcKv98i|;r3-$0Y&|Guhn{QH|IGuM9_+cN$yK+{iE&Sr}d zvHL^gRJVbLCA|y{GpL&&Y-a)68;Yw;u81}4FuAt?E6$W_hnyB}!SeC=Y+6So;<(I< zxlbU%)R*w#v*zt?{Bu%^ake+d%Zk^jDq;@2@sqWH!4h%$-jQb?_bT#a&6)QO`8blq zTWY4mZa!|0)JeA{vQ*kZ?oaD)vhH#qZEeGw^!jNpEBkMW3Gj1CsU#uEQrk#7fdM9G z3+YLIXH4akpoe7cA>^*hq*Cs?z(g4*KEdvk1=qSZ{dA#vB2jEK+$U8>-*6?Eo`D8_ zsH0m_4VuFiJdHNEwsJo*Iw!=^&)RqW?o*FKV(PREO*7rw2OdXIYa2Iyw|mpx1IVME z3=p({3ZA-mZBK{dqMI(K9cN!2rM~S0bz}Xh=0y%UwnMoeCze%%^$2>6xXYmRO&8?j zfl1&LHk(db?LUEVDrP&Gb`l`FiI}(N!&>4>tgr%A6`Fhk+Gb|EPONrQNt9?I#AtEC z?80O4aA9{NGQnkhE!398JiKZjYJe%rmAdnJ(ot1#wafNzGx=tBWQOWg|EKi`JZR$! zRHy_RzU;EV5|o8tA{m%XCPVxobFi0$U#=lu;}p9+tcKcq2|Fc4jIQz=0n;xuEKh-- zOy>x=_qcB|Z+&o<(USyrUMBj$oQzax|IME3Ur+LEjQ`$IEdRwS`G4b;e1$t1Ps(+- zW1wVFO23dW@EG8%@~L^MuXoBZZ?=f(Z2VeU3d=#+_Pm(Y3HFnAa5 zxFl=g^8R!tP(k&r70U<6;rqI8tq}M+e!QtT>uP`9rTVtB=pF7AX|U)2x__xy&QG`F zo2@7)Fc+AAHK4$R4A|M{q*D^nzDuYm@PA0HfXYtq_jIz5A+(mHVRp@RhWlj_{CwPn z7>T_Q4fjh0Om5Q976kYZcpBs|oCXR$y>!0IOVEWToO9NZGbphOY6SMWH%&yl|8*Z# zh#~mqlAXLBpPp>SimZR+2YP{+uhkjq0mz~p(IT_kN;EJ9Sb3lee^ZM9%Yt`s0JF$X z6Udk*yo;D1_ZSm*6s%|MK^hX>M0;?wg6kM19(t!9sPX@Fz9g@Lg*^ghmr+S0Xv|lN zhJ{`Jf5yE=_{MPy2asL!8dU#P}7r!yt9rI>hM-#;o(%lKa)2uQz>HZB*QuU!o3{wo55Tg1rd9QBvzAFDe{JC;U$f+m z1bB01w92Wx=~mpvL4>MGA#AH_7O@U%hnWQDv$G3$|FiB*MmXu>Q0-2+u;6gm-+jP^q#|({0W=L;AHd6~W`lb$-ZixiCoqufe#U4mCR`aCOl=-AFV(|MeNnR z2R1dEfO$o>?FIV`OpB=ksEYOmBbVv9`Ns{S;B)b#@SL)3aW`5YI~7W7z7vlf&c-C$ z(#9fOUf{wAI^YcN!y(vx6-ZpXTDn++_NzS8M?u|h45JD!sP@2Rw}5Bj_VDE)dP-Hc zn)K5#vJo;8{Y(F*ql@zowc7~y%hfO9+zP-i(plxn5w@gr$bCTn+D^_f!KzKjpao`z>^nx^knRnt+mddNQ5k9Y1)U|(CTq%yJl|0L!KbIuhWg8n@*t*A8%ZlGZ0y->5uG! zP7iN>1UokLn{-b|PCG=8i)kdcvsVH>8n{-B10D(sZFK75(oPP+Dnr2^+-QmLk& zF6wK4KH;4UBQ6mi`5g?QOjkuFQ1`sA)*Hq?*_}1bxX}r$PbW_dxAyzMI=|0dOOy>l z`=%+^Rq;0OKEz3#qv=7SH007dC$A<8pxcV3nSJfbxctyB8M-Hmp=h)&auMQjNMd4xD1t^Tw_=Gy5Tr;1-;47Zh|Lw!DEstOjp+13(%~9IVz>AGBzV8l6f- z*9%kmE8SY#%+1udJ5#&nW+POFar_w}%85{si5oUe>jV1(=|sYLHxg0>#8RC8v+N^fBOSu!98ILhUo@y>)6_th`JL1X5b z;PC~d0p)LtQHBXZ0To=YBuud>hnJ0P!X&^C9wM`SU_Y;WSpLE`Ybz!_gt%sSj(fBl zYK(li78m;X6jvfgebK_CqumQjcGrg4%F1n{ih5BZsH4Rn9+Y~cdFJrT z;kS!XvY$Xh`N)beOI9*W0=lZId1#>rQ&kqV^?NuN41<{?KXZ6uuiG42(iVnYK{V+{ zQ|6Xe9ec0AF|r;}59dlt?H`Gl+)csC>F_#=MFek;VnI)?g+4yy!09_8N4yuNoD!h; zMr-O#x-vI&hc$&(8J?Z-!6r{?DVip|M^502==IwO678 zQHs7MQIptw)cCCH3lmd`PPU2yg5NqIirLJO`hFC93-Fk zoWDxYN{{!_M-L@SJOXBTT~uC+uXeQ-mTbt_kxA+x0IzW}T^l!L`r!?GW!=+o7(t!Z zdX!fq`ndeA7VEG8>gonuqvG*OdXGR+oVQ?l!z*ZAj9*78p21EK$iTEpWK|w<^#o$G zxB7oZRa)7C!W#Q3|1PHYsJwK?%NdtLbQq-ll6(`ZCVrRNqi=rYHZv3wWRZ`OG}^8m z>X2ro)+m`16hfR*L#3E?mKN5u<*G~d2pcGNP{S7yP1?77z*ZBhc=7wYtiE|t3jkmk zdNPywEJ?cD;58#DtFfqrW2LC1b)h#)S3PsEc~VWm>W!R1!C0+fThuT1^x&Q9iT#d} z!gAe_L;GVS38g;=co^*}1o2cI_payb6Tx$%#Ok&9_z0ZWZBjf~ukPTBnFL&}&*=2c z=~J5}&ef+J3Md2Fod-`Gm=e^(^vmrimUB_AB|CWt|7M>31e(WGQ_n%wr92pW*WW0V zx9=bT?=-6dzX1Kln77CeUSHB=d4RxJ64z!`N{h&ybfQM?ZCJodVxZ=VFIg-~C}Pgp zm-h_iIt;DOsMZI*PFW{SVp(E~Q(T{5*Pc689XHHzy^8Uy^wq8F8c&%C(wvqHL%C8* zDoNn0gO&j{7ILt^W<6=yI!QFyKWxR&JJ!goW$kZp@k zZUP6e`noF)tcT{p=o}Ixfx%r?e|dvvks6~@NSQ;bL_D0E zTY2hl(sa7W!rvoiyeeLP(HVtrp)GeHFfmiI4(W|Od_f8N7I`#Ci)x~=76PVnc^)pG zjiioVv;C5qlj{e?Q43w>*{pD$tP0F0y8yJ#3d zXoA(3=e0QkQ^)jF?O9|FXVjl0Gs8y*aWIk8@FrWbS4vRwn(QuX8oY>6`j*MGcryGg z>?M#98E!O`LqUA*k#i!L9B%uw5^AU3Dp_er*{crdx(Sgk9=J7Mr8ZX6Xc5B-%%Yud zIST%@TRLbh=5dE9M*W*ctC|`m^FRSykdx{ABPR{Ib~QOB1-)#Im#(E}@_ z3410ntzmka)bwIVdetvNqv2k{Z`{p|w_E~gZiQc6vQw>AbmAEVW6INEurfi}4oG%b z?$t_!FP4n`+WOk(nRW38F_+3fO%}orWooqGuqU;n1g#h-7E~&-8uvNXfm&hT^_s_W z{op0mK7s}Q+hAJIFR^RbU{0;mZ;&hCe8MJq7uLUzgMaShxwW)tYFWaNc&RU^HDfM%C+eD(v*Q=K%N?up1UN+Ubg52(E5EI)1&RF)T? zq<~vMqG>UU%lHB{a9>?vuIV{FiO8%*Ckk1jHd_87^~wxdcJ;Ho1a0Dq)C% z#;io?${djxT#&-Ty^%^P^jQJJSz#XDXMEZPxcfG>XpU@;hX}1$ItV$%)dBpjGzN@U_ZW+#o+x$*XHcu1%*|tE^HVsPvaRA``X8RCYn2_%@*PbCJ~ME(zQs4jQ(?DMFjig^m@qb2#u)YI{KCK{EN%U7mkIyU zsIf9~{9C!k@}F+sEdLw3?<-B2giUtDo)3*v+&=nUVqlTLZW}yrSi`~yF$XzqRH>lj zh2CASsABx4t|y2yBb`1T|XctMB2~Q zK7#|j;9e%|iyVjE8|}HJv&8Iro}1J$1MFlqA4b9wX`<*6g3eh2_o(K}K=Q14qO1^5 zF1aBg6TyRI4A#kD`%MuEkTbjTG=bWm<&wNjOd;*=M7n=FoG@OoSF8bmRZPu^OyeM$4S zgrqg$JY{^>Kft=UZ6;c9O@r~UQY+AKSYR|+yy@TbjbCf&>>FQdf9 zl9LHWXG@loPf`A76y;<>G1%kQK$TfZv8q@V5UDb`gjU4&?|sWYc0H@dK6c*-HYo_& zVG^frFjK$?fPwSQ@0HJ`3-OEN_qU_UnLK{$#jDK{m^_|pnbwG1{9TAwCHMf})(DI3 zt2oOzAQvpOsX${(Vn1zS7V^26dE%H?x|aP8gL;7*`qk~x_2-n}tBAuu#SQ;W(Y3F6 z@{*2=0vjm6KK9{}B^!4oo~@paYuVNF-^w$M^$m!oeqzcgGNuaG3bZ>TM0|*(cIJIX z<@2Lo)e+|&#o@|&>n(pQW2ZfRx!tgNJ&P#_xd(Uv+)&c9_EGt9fg!_^hVVet%(NGJ z+&*CR4hy^FV-wI{_A%dFheGcXE?NHOPg_{Bvw{5c32UxhrSjYh1YW}IK!VnSrflf= z69H%L%U0!7uT)YBI;3*If=NXiZAho*@qpm2afle)?fPV(D$c~h{ACoe<4~|?xVHW& z=gmZQuIe>vR_ryKI9TX~n1|J-Hs5fM+F&k8&Y2N);b2N1tj4C3B|2ptpEXMC;5y{P zn%8J$t%bbU0^rj`$zNqbI9LJ^HrTKOoaY9^D+Rw}l8h0W!jzh6DQq;e_@#2h*IwJy zl=OuT@=0aZq|><$k0ifkToUbo_1GUQ-2~&eY+t#QEG{>MIQUPuj)EF|nX)>H={sq@9AZ+?w_I557n?mo zj`3m*$7fZWY`LZuU%WtIytEc9H zqnowYZ>(Kt+Bj@o!k!4`j@5lXcI@njjV!UYq#A~~+9Q-*4k#kqTiQr^M!Adr67vhV z05k5)&6(L+Fau#$Uyg-qLA6}JvP$~gAiM)0t;Py@F>uO}l)0U8HW5PH36uUfOL{XJu2ess%JDTy%cixioP!0z276 z=L6%Lu1$rD9E|#a<54)rFnTrgFhP1ly0LhiKKoui8K16aCt@V}$m`6_g^17pCJkgZ zdRBpXdpbN8Zkd4fn&nH#;oqHH9no3WMtID2=1v2(W0XY@uVb8CTtMS<2ixKUFM_uM=?DqEKAKmRM&0@nMO1Xm^=mPB;S6fS(TMfMNnxkKd$?0u zT(YWMw_z;H_LGeQ4z1W^01LNvI1vxqtWl4%`07|DUhf|675HkcpX@k@f!@G>*Kzba7Ujf4W&p%mgPbfq{jmpngLG8}G`-!a+ss zf!UhCwV;uZ7@0PX5jHs49+2rr=MB3XcdqAj9g;De#cYwYN#RDcSmm_I>@S@$=qz5^ zEhIL5k)9HC^w_rI%gu>CIh-KWFEE%hy-!qfj&zgt`0Id&u0P z_zHku%@)!Z{)L46?1!}f{J1HUJ1r9& zyd@*RB$$-SDaOjuEiyGRR>)%EYK~f+*lp@L|NOH1W9kaD%k_ zc=DrzPFZ%b>3hpH;g4kY)r$X$`_A>wC6NZ5f; z88J_Cs_#m{9gdHvvuXn4P4r0F;g!E~LnzuE2Laq%tdA<(IY;D*y8Wvg9n_A1TJXpc ztaiH9h)+<$8M(eKI6UKWRq=hd$TxgJpJN6&y+N@$^`{lk9pALl4Uad_{GchSG6CDEs zd!Ogk&J}O#qi!zlolUn)eM^;Y>Y{8MOvOKAId{Pc5C=rZ8KuFr#}-k=Iy-U}wOpAN z4;Zy*1FqVYd93_-WGh?(8pD(P^Aq2S<;O9a=`fmA%r{pVU7 z#~>8;-@`P)RJ%LxNyAdlw{jbHkjfXf4>u6q@h*W3Ye41tm~{7I6%=r@Cxz$iAh3#| zB95Ak!Z_;?p*p*aTopO9SeV=`b44z=aj6TYPxL^O9)ja2kn*mt?TMURQ))_dpjZlZ zyRw3a+d9LTaG)bPJ3+5oxKG`*xD(emTE14GT{ICCJTy%c9Mz;d*rYpv|?`D0rcB%gr*RQb3%sV`r5%t>Piu zZMA@OO!J48tdd23nX^PnLC0A}aAP4*N+{SoVN5!k#vn_s_P5D-O^fzS-W7Ma?rerf zn8^jM9L8rZm;?CD!_fyS{U~CE6MhM>mCbXWk&$yd;V;e6Ob=i06YiY8^$~e?_IU7Z zJVt95oJZ^e|NBBN-GEBIDL2;x=}5luz;`pdW%HUkzw&k7MbSj%M9tsDJc!`0tAu=n z6P0Dt)PjZTP0cw(@^)aYK=J%i#6tV&gSawABuw`iv*8u$!Rj>QGa(1`P4L)%^JF%Q z?SKI+KS1rd@R*LduhM@)C8aj-Nj=08^Lo*|u`%&`Z(L01X) zgW((O8?wz3NM_~G(N2BR^)NZOfsME(jL-}l1Gyx$HaUzM&9J%f?m)~wlXh`38qLtx zzt?Fal}Qz(@CBJf&Vr1Bb(=Ldaw}n$ph6W1+}EvhiAP`1VHO>LLD}Q7 zQ`mhC&!jN;8+_F^QE*iWAhkFA1&yj(O3J(WFyO)W^FhX?f{F!4RGg!Q4xPW>UwY9U zz~9vK)H2{X;FNzhs6-5sDL@3z(;0JTX9u7Gg1{Pl<&}D@CZ$&4Du*=Lrg$*oL@Hyc zXtW_&**TW6mhm%%GH2f2WPGwTmSi=xrB>?eL(h#Rv~gL3&e`HK=T!r~m;Ky+VT(n3 zyg54$oYB#_^0VK(qwd%1AhyHowsegX*V);zUAMUOnb}i@{7GhC7id~5B8Dnls!*dv z!IGk*3Tas9zW@;2M!xTCtJLax>6jKA8wViS*KL4oI;Z|nLt+{g>KCJtNT!nI>bMb4 zP>a1bKkja&ibWP~KL3R+qY){z_iQ-5s2PCG@~<<~4pJB8vg;_)WdON+f+_bQZFOD# z)aVxE(B2C!{&mb3ijoW31hv_+znp%shdqDLQYZ_n$E>K4`~9Q=uNnS?ze0 zMQKh`x=^PJ3Sxl*u2|H^?6Rid?Q57T>2X-RChq zKLYmQ4cHtE`pZK6CQ~xoE#w|A>%TS(LV8Z;XAvsyt=bbP_OJRjXADnN+H{bO+Pq&q zw4@)HMD z@#+amV0&lk6(d zO4JUR9N3UBxT{A&UEcR-n3GZ$<=AM6uCvGT=#6ytj5<1ZvvbKy$8!(kmooeWzNG5M zCX7R#y@RB(aU3oU#_)i;&o^sF} z_ukLz1sn7)$FsbIJs|mZ6K}aXbEm_Ch=9j)HvZK&8VBBu`Hth8W18w+y(>S<1RuGs z9qWd#)%c9xUP?2QF?HQ19oPoND@J2oc9z=;TN?c`P;6g}wMkM=+arbD^azvGCa1FH zX=lck<`uH^CTXZUMS@LRgstN;hxTt!*y@z1h%3xt!6G23g}34*&Q%Rl6V7ImBjaFL zbd%|76Lrb+k4c7b@kSnsbPF6&4FA33>Ptm_m|uAhX|9QBlzLKdBbR!dynp z^Xi(A>ewwo<0r5c?!NBv_#^k?3Z+=P7Uo;hHj=uz9kfOzBcpGz zI0qc0BV=Sf>4|BE0epOXG(~-%*nb?;$zk&hmH4cKGrV=3snUNCZyB1v< z2Ey&QbK*;dV8~GnAjXp-@H8dR7ldm$QIo{%L+arIqB{3J%qSNSxnOr8d|@&MUY3Rk zh!b{w1n7I+FM`j(bGXAyX$%aUFHQ&4(D{=(tn4+4VZ3wWm!h!GZ_l>dSez;RRB1}R zak@I0%NHh|Ix@!?o}i=DOapddYpxR-&Y9=QHHv6gFfR%hj$|sux3RZ3LYvR{I(i-JXi=pDd`^0OVd)_(tbzUut$Ty}HNqEV*H5(%ms z!+H5R_KQfXZ}e6C6MR{IwdfGjSp~nY7)BGLHn&y%itaDcl|Y~d;Wk0)m76ZjS$9-B zdUWUHGk5lw%6F+^wS|$ghu@~gcSht>niPyTmkwj2Ye0T|h2cJ(<(ItPU2b;dL*aiH zu?(2}@m@^WjrlBZGTv3cu{$bD`>4BU3-LbFJUpoTm9y)2jd{%OYUgKiuJ|A$5@G*L zYsW3X=suZ!s#ReLq4O}uwThG~c69c@yb!weXX#IE@@2BFM>Wr6-X^(0R`uUYEBA>R ztY<86o35%Q*RjXQGm{iq`)cMZ7CaU{L+|NFg_Hr)fq^hkCNi>ha~Xvr6)*n+LpGS; zG^E`!_y`D^)*y|so(b>3Iu8{J!opJx{xQ7 zZX3w2MknPsva7vIZjb04liq6Kp4oL1x_@fzgoC8=~mMel0l6Bdb}9I;ldafjCUlRPvv5TT{5Ppou8WgNW#r5UYhnlf{UG z=TOHiX;WXTd+{EoHg-U-FBbCcLW44iC{x*`D2M9=1ap5XbC=Jqi;@>Zqd-O zpw2g*{0Z_RL*}wue;som$9+2 z;nHJKQ4oqJE6zDyR+-#mY`_7{24E{ojDHtgP+t8=u(_d5u~C&!szS#E z#9g}mMz(iHE8(FMZ%GLL64xrK97j~>SAR>?C8sc}Nq75Qa<7!0wCJH!I#Wm)rVcNG zN0l?=BJUbVvJN*Y46MF30jJoiY~wt80%3&ANapiZArN=@ea|mR7kNK(mT-#qr&AH8 zW4>9uOkw5Zv<7Y!bK@5ugcwXJIl4>m_yFUF?6`OeRaU(tX}x?8eU^M3(;bMxdT4ei zJZGu|c;)1>HPL)%Y_1aH!iXWWe7Q2RJZVm|HJgtvsw&w4>A`)|qi*c4G5jL#7;By&46%G7{)_Tm3*#)hN)S9ptu;<9BV}D(BPk`j z`Hi;Yf%xK!wxTUfX+{Ta6PeH8l-@Gj%fUm-Gg<=5VU+OHVGPTh*!R#(X$sluvR-N5t9E4wxs#gxyO9 zKnQvEDcxN`t7)W2gKZi@5|38*)KbdJM^#kqh#nOfplL7m7~hwBKz#3<5p2(++~M`p zDdhI=MBEHl`50>xC-GdzUvmFgA3g&NhbPVigr~c(&V$`E^2?~$li2^T9hV)u9V=;9 z5iOP_98GY}xatlINjc&USCmXdMAM&B!G>D}KEr_%^kFHvQ@feEmHQp5k+Z(M4=mCJIQ=)6sX) z+E83B{6xymdY4W{hjoY#0($<6YUfsIeqBt#+@5nwPW+6ZuK}|rsPqm#a%r|hp*!>} zn^O+(1pwY?7>z2%LQ#y+4goM}g(7wChpe0~`wMw#BgPgYx_OOcoisk2JnUFiOJr1J zR8$`@(Q)A5!)0j0Y~W>PWohm{zWpg?_k4Hse#Tn7+(~)5sk*Q-TwJSjrlamY?{~U& zncd5X+pi_{7^VK?6n&&GLGr$I{toU{*Q=^(Jqa|-N|`c^7ZYZhFr15+vLJAL6tLe9yN5L$}$HRH9DMb55ox9E#?H;W%BAxmz*6{pWdj^)OM zV%T>~H_8;T(O}Bld9Y9Pc;%}US4=6T(Vn8yqK(32lLjhOsqqz}1d2=LBv2En9%k!i z$;*Cz3n~B%K=Z$SVCA6cz+$a2p(@8IJY(KUJf8`C&pst35X3$HW$!xI$KC8D^0Ytu zQ+B|yMew!>%h7%Hu@mz6dzM&+ona;;Z?fC^?gQc1mVtWq_fcY_@h^QjULB^d7Frx) z+rVtMdK)znWs!4;aMha4Dd+Ba^Tvf#%}mTfMy66VOlwK3{qlcyzO;B*S%sQ2D*3XM z02{SBnRB#sf>Da*gs`*@C^O!ob1I`sjI4S{jzMJ1N+Z>|-IB^LDk0YW-%J${N#_PB zLGk3fw&4?hNGRlUBpeLL^fZNI3ctAd5=;CD;gf1Zqr(A0Zg zXWba}SR6dZ!hP;6$>%J${yCez26Sq}3=?SWB`a}!y?tkB)Ge#~#ZS%e+VupyyY5cS z5-cJ}_(qE$62Sa+loFUBERBt$&3T}S(*Df49vCeJBRc+n2zd+GOq*UyFwD%%%=m_x znUhY^VPS~qpjzg5zbM~U!3)cuK0D#nG)y3HQB=oQFR%M;=EY!vs0hBxSO9cevx%1 z{vm8NFDJo0zi$s?0o9i7beV*0Agi zQ~;SDP);~$4FsnV6g9#db9QK&WSjt*ObNVPDkDz)V2hFYLR)L-#@HgGpNNlzp}47{ zpVC8YN&fl+p8=-!QyX=L5n1ED>VLkvImO4_Ay$Pquo zL!&;V(8@%P;bFxL%+o^6Xrge_|MAHs_ao?Qn4ipuQZ`wD#0ZOWf{LQ1OmWQoAFo(u z(nG9621hPvPyuPZ=uQl?apN--lZ70bw8ofOW&o)H1hiE;)WHdWYLm@B>k!M-#_^{X z?J_tI%_d}k$OmXj`O~?Vl*dBj895wZiybtlT$=B+P!T~Y$)Vd&q7+IaQD#ghvN`kx zGNW1a1ybW?nqGwgaY5?@iPQk)0r4+Z)O)f|iGTLQ5pGqSA0UnMFf=ZaE4S=yn;n{k zTZ3`H9~0$U6e;m;lJk$N6||b@afcL^q8Rt8p_frX8l%X7zb|5nS|z47{l`wrFm_haKAJoSMX;yu6x3R6qJzKePdOs;iY+|44A}0|*DDlY{9>+3;OV76obCA%3l!ShCQ$&M< z;w-K7cGQ>e@OdaVtl_s}hyw5@zlxL{X((Pk27?rZlFpuAw7iABf!jzd&KDUw=#ePdlVj`@+ zL#sa?pK*kyq=)cS8w1~fpT+9a&X}|Kmh>~IxAU*xoOt+C$V&2d8DRlaEbJL9O$^ed ze;6)K7ZnbYIWz}dtM7@__ZQCCw#1KV=JHL`MU3Gb-3`?SqQd-5e53e)8Cw80s+l5E z@Fh{LsW2cOI&T&ajH!`^ME0cLbEqtlB8gOc7W%SUB5!UxN8$|<=&q7N;>`gzL&_>t z{3KzrLTL>f^@I>D6q4xQUA)BZUXT7h{c;FZpDqj~`HnQX2QiHEYM831V#0xyGu+6# z=l|+dVn?tBo%K)Q7PYkw^U+};M|oZ|u8Y?Wv+0~~C)Q*X$SuXWoHT(06?W8D zMZI95EtbGFHv9WszU0B*JZ!bz)D&zBswiui!|?A<{O=kfvNdqD9e%MbBBVFu&ztbrKHlUuyr+uZz_PcFZK*JhW7TjLI|F7w5NZeyrty^(^~ zO@|cS9Wuooo$Gd>fa_f6HzhIl#$CA()gAE%YZUc&LdOYq+0eYlS8jj6#|eSH=h7qH z(nED?Z?V6Z=FD@!ut$O41Hx?O(Gwn>nuzf3|J? z*w-Lm5tDcw1QO7~?us2go^k7Va)uTmYOuRQr*xF4_H0bkwEkVFc{O78OWQ_LnS zugCZO_YXVn!?yumHHqICb)Ce6^}XqXy-$DA0uG+NKCWj@qg;eOYQxdfl)eGs^nPct z$wJTwmoXnP)7WR&(-e2;jsnfyNda#NGX=P{yAJ$|V>^xwNkXnHF~od7CIX=ALP}y@ z`JSn6p`VU#-=EFz-=E%IE}jARKD*ABwSS6TnO(aq+Vgk1o0E1p*T*{DnX2fwc(R8b zB1TS;xQI7{^!Tur(%1dqedBuE4I-EiQ(ScDiHS3&=npjoSxIv&Ea@F)E$(?b)@>uG zChDff7Jrr6sM+E5S1Igq9-GGSlCsJWVmqi_AWF8TFI1{q$3=hGwf-zppNo|bV=3Kl z;cHEm>rqqeIL+fIl~}5P?O>BcEeYFd!fSHC5D3v1UXZrZFFb5blg+PFzN`2N%`8&$jb*3ykaVu9`#I);hE z&l--gau{$QX0pN;eS<=e_DuY5va%ficbN_s2jG9S?Bw`=bum!)ax`O>bg*|7H*+y@ zwsLfJaQ=^~Xk=%`EG6>qpw~2WHZ`(0Vw7<;vb8dS`!{K8;X(r7hWn4DsHlUdE+Ypk z7YQRf3p)ub2Y`iym4$^>kNLmsMeHqX&HlyUm_=Mn%mFP1IH|8 zqz6T}#qR+TlK6#lCxA9r0=&oIwRPj3pPpvuLp zlh*$+q|OM<&LS?t>9-H!K3w~>q$=#fnN`&3lHWlw_vG?Dw}`=-``A5=KYXjxUGopZ zDaWt~8vk1;UkeB0N2e;WpF4T)!9;&4k}GIJg8--eoL3!Zq-B+EW}+QA$8I>UHl789 zFcOWX^xiBie8j9~Qpwh3KE+hpZK zbRyf%-%vc{ij;TpFPPWk3DlhB9o&x!5HxSVDK{y`qF2FH#Q9w+Y$FpXC*_YXRx=#p!Xo<2PkOT2nt`!7340IUEK06QBACl4nHJ16TuRAm2WvXT53$iqznU;&WuaIyc# z=-R%?2{D*V@GYkLM$C{k~r^lNAPn81)8#~~Cs&csO_VU#je&yz8w-EB+^DuC^?$EYR z$Cn-xg%NjNl`u7+kPZa_9YBJmiN?bKMTNB6s@+u`t_?+D31n2S+PL+UwME1xawxV&*gD3Kc2j^y`S7n*Qmx%!fho(!ga|2)L8cT z2F9a!qm%y4>@1Vu`lj_oGj!ZfeWk}@=)T?y(juYwM|_(Nf$OhQ(~@7IiJaI)He&-L z;aH#_s1SCr$ue*54rG8xTiD z)aihq&BhrhC#dV2U@LD;;iYl-c}mLzk4mUb6ZGj^V*JqUR{@dR28~rt!>#OsMBppT zB&KheLq;$23An;Z`snf4;xd}*DQm{9R_+lCM^B!9U&1V@nDM7`e{(mxe)x+RsdW8T z+DV@GH#@>i`>cjiMq3i{DrbI+n05YHX;U(9TI$5lfw!jNS@+ZLPmbmK2h^2!+JyfIYo6vnAZ=o7luxPeoriPU@n6<$mMg?d#6|D@lbR?6T*>@EUg$ zaY(E}?7466D)a`iQ~Fm7Ds>)?HXvNH2>Q1-5j8eNKp>v@+>$ahQJlo+4Jum1CjK1u zYQ&1uAW6n(vK_D_kuLOnPV@nUHQHLflA}ur`i)U=fb!1@wY8O)7(HgO_3vhaPq^-2#a)6Ao2H*E@MgiJKXZKX zJCubuFs&x`6=RaZW5s84vl8xVd}gDC8MH&65)^qqu+J@gkjworM}7-0LR zs6FMgoIi~(_5IYx)PUq3;C5o@VQ6mX8tq#)osz3KiiK!d?DAR?c`%1icy#Xl<`d!* z7JfCf_GZZmLuq)W{~5}c&mZG@Kxq$&<_O{o{R{4!@Eg5=9Hxg1Hkk$(?tr8%QAZ_2 ziJWwBBOvl6+jG+O6M%g}*MV0TuZz^WK4cehEqJ9S*hhSlGCOTHATWSrlyMV#Q|ze2 zA;$%j_P_ry*^<~IrdBp~+0PgEDJFlVbrvIrD#RqKfU@2J*^!vtdG3qch}#}8x9kLA z8VI>Pnq_OgA?rdj0B7s~6$%WPKL3LM0Bf1|dC{$C4h#K}_ns`vmKqyzt??_VhGGM# z_ba4J&VQF;dT5QCOKT`@|GY!8E=+e~Yp~VH!I{`8V1L^AWH0AXLvX<2o>g!;w_rUU~P#W>XX{ ztc3oQIkI`?w4BrZg7Cud09dzM=DyBPEax6cjsyI$_F~*t6Y;8|$sNa1-&`MXzdpZU z$}iLh(t2a&D>5Z#bVH1fWMT$+DU~bI2Y7qR9->Qfaun4Wpso=?!k`kkerE8*jmJ+k zCsTshV!ErDQ}dS04^X#${_WVS;rkcJQzZ5Hl_KU@bQXHJFf-$%(~rib#Cttc4~1 zdYFUE&j`&zmdV_N+oJ(#=bt!Pf5qAopMj>%GsBIab|U@LBBVx5psCVB31ZalCwp?tD)63 zG*dGk=^4*9%DMH`ee}dyNKE+&Khh0)x)-`nA&KN`Q$j531hfC zx(+c@_6H_B8T#uH`X?O1;$roYYj(Wiab4UBIf6Nq3(SgE!sD+(vR1!T@dRia%T@}r z1&7}v3A!&=ZwR{4XEM17cQ+zV7SHVT5QrvrFA>^62;v67-(YqI_Pp`)YZEN-JIwde zQJW*g+!78S5nvId4kVX(lwo$>KQ7Ci^RqcXu_sG{jcm}Ny z*ME1RBHpi4$>$0hd$QowUZ`z`M@&s+ErdIVx2^3nz~YTWTcJm^%GBU=NA)27QP@%Q zHJw;iM4ZYZG1^(quUq<%7!pY5iwB{;rPD6B6x+4-=l%)bD-vL8F`HlS z_7{6L@GV!mC7Q~&UKP;P#beR+29FbX#u-Xhvz+{upFZ3o$x~t^+;ZmPRsnn<@GJ*i zv>^y=n~Nl1aagG?ob_C@w}x6kl}#x=mm6hmyr^ZA6tEk zWBfY!Wl_=piLi;4(2j{YM@ohmA{fStWWJK-7ro+|oSTc8jReX;oDE{Pq0H3)ku8K* zO6aRw9(3F%p?fiOR%t^x1=~hmLZQDRX}-WG#pbc8c9yq1nU_CmandJ!WysLfsSyA8 zVVgb5W4zY~`1?w1&sBDnkd@1Bz8`z`7RlJWV8>@ZE}>QV4(@$bS_C+0IQyCSixll} zRSzeX-3M(U=Ij_Ci0n^>zj)6}i7QDN)BiRGuzM<{?NyAE{LVmjqf%NZ|KYgT=*qbP zHNxCO69WQqD3$!-CR%&+Bp6MOx@0eUhO3dO;-3 z1N#dOT@lBKsk2H)6Y97+%{ag<)f=)s$tNLYx#HU8x;l3?i{Iph0gJ6wcy-(XHUGFb z9Wre+?W2=lg*Sy7aTv9B*Y(_uN@&}r&V6>Z+mW$cEI(YEfxl^GujrN-KjWonva3tZ zbojbg9D@?FBA(8XzaG9y4rNz%nR1R&rnrhM=q6K|$`C^%K65vY7brZaNw=FPn&T+W zO?xw7#umq(Ci^2prxXyC!V8ofw4HbJ)YDrSQ(w&D-!N(}1$~nQ`It2VJcE!ye%V)G z!3#egi*))rUCQVBop=7Z&~ncMEnl+alGjD?J_p%P3BXZqm-^K$#jJSExnbp#2j~Kc%wEzbwb85Oaf;rmaTC|hTh4Rczw9>3}K6?5tN1kC?FWQzY<7t4iB^SSfYFX;-9 z=qvo(Wi;#=w1(_uf7Kcke;=4wh`*ViGiS>hs?^UYi+XtD^Cl)~o*Jo}!NXctlVKLz zAKrEX#ZeFMEDn&+-E|GDf%%Kj0+|ddXgIBQN{AROP;2<>bR72R*MQie2VsjZ9FDsV zbXZzVMT>ga@pTa;ZD@KiicTBbw2(DeY*_OdpvD0AdcKbj{%WAS>>Z=(vZ}VWvTnp( z%B^?a$R-Y?UYijBk4mYX3Ymq@xlJIBwMHaP6MrBfaiJn`xno(HnL-$IG)h+_^iw~f zysIW40M4cLV!PwK@ix11(9{6nv`-kqOLYF*_3UNb+*#{+d*eMWo7-!{T-EOi{4`G& z1hQ)qSo3&ynij(N%2J?dj1@`2gv8!U$OhS`EvC~*2H&%gEWnfl9w%;9hV(kw) zpG=zoa!I~<35TQ<^{h-ENtU^oz*P8;X3{xRtEe%K=02v|I!M7%({rZv#Xunu1We~=Ozgm*9`|R zS4XwWG%Z9TUe{TTIu>Fd)1y-Gf=OZxJ|B(e4UFa^s&B>U(Dx+l&pi-T(7nSUx>ac$ zFyU%qa@)3wOfe#bs15ZwaPY-4vl3fdr^75K)nq9ea&tL)kOa ztesA?LaXWA`9IcwY+BSTtWQ0`X7w*C+A=b1>Ot88d2&w7LQ3cJ)wJ#FgR#aNJ5M7? zb$0KvdE}zGY*#xS3fT2g{7oYOzi(C8Jm}NYDeQOFKT{fqL1hU+-tP@SpV~_p)I;+y zNb^`F=Wb{2$z95hCTFZP0W`*HhOG^vR)8&rOr``I4uE{{BO~VV1ed$ruO?E=%>34q)+8K9Z3K5!_1{_}6YEmB$pyoF7HI*_IZ^7_rjnOpx)lY!nsGF!b7Qe&EKfQ@Cf9<5sPewY&I=`+6CeKtLC@f z)Sl)(nx5QBV{LjHm8c2_A*33j(7**4>V$@(cwDx^gCB!9JC_KzRP{z@@?S}hAz{-n zIvgMd&HfFu53>F$5;>5%V5qV;_r{p0fbRhw%u-Z>+flD*eEuh&y6h25F~UG#h_RNuUR4r=u1j!`E@2R+K~IMZ&cqz2JB0y8pyx z?G|xj)G_FSz1}lM{;^*TxD-po)Nhhor+puV9Y06X9-o7TFr_}jthywsf9Y`-udp>2I*W8l<+n<7b>v`5L5Gww`k7nusl#L}ExR2{i3-IWDx7 zKau#j%iRrZXnRRsq_{F89`Z}LV9Ky%_()m($Z=hk3KH_vyYbte@q?Jz{rdQEix5{m zx z{fpJ;gI7j9@!04U5tq&MLrCYd$4N>7V;1Ml)oAB6<>ksx_Prp!&YkkqDy-j?0xbHn zJoQe51()MQ6+g=mX7bXvGP@N!#MTnuL+`Wpv3X+l5nsAWO`>-m;Y8TdP-+pXd$R82 z&B}NeI2QO9nxyrAF{ol^VP#=!^BNPrwtf7t_qR9t-o&-ev(mTK7m-txv$wfYT8xoB zaIaW@a&&|v%5(UFp@(wH(=e@H+^PR^M7sgvJm+P#QpA{sZK5evix7kDx&TsX47tyg z_r?4al0c9S-w?~|i(>`#MWwoSGVabYAAC+TA1)qbdKC-qY#wSq5WZjdfN7Vi_Ne@S znAQD?VX)^^Pthe(a~EuJgbP4+FFqfNib3e<;8q>o*OJ&&b(eJ{$7zVBBzhM44MTL5 zTG_J3L3BXjaQt;(1y;)D+M62B*Ics^JTHk6^3tuE=fUjEv*Q@w(L>K%$;Wn>;}|Zq z;uU7XnH=#Tsz+FR(j;sDN}!$*_7$QmyVpWMjGJqIq%Kc^Wiq7luH$-z(wZDT!=Av@ z?Puz_SSrS$H#2&p&_b%B!29*VckZ%TPr(-dC5X{xQV;n}VxTh2O)QSe7^B$4omQ+$ zgzgZ%f3Z?8)qTuaXVBWTtv!t5Y9`^&(94Xn`K4hC@D9W`T|mJxdkKe~wHilVYTK~y zw%_7R^AhrU{kj!{!r0<@eKVMDXwS;YS!TTRlnus5+Tp7`JGw~dO<;y))L-KMNG34Q zUpsv~kgR2l9AfUa4|15Fl+oZRVkpnn6*S$N#O15=OrKsTM<+hWnPdG`?DVdVQd@w^ zcMCxt-hn6D5N(qv%l%t;AH-_clLMYniVN%xeO7US{8B|JYj;8u*hLErAu5I;4z+jqk9lE(#^$pgYaSWi6nE+zySrgl>p`-Ui;d&=(#piAHOwWE>Nyw%M%KatZR)8xy0 z_a~G(i=Yruw7RX-szXDT;SZX4ch<7%K&PK;2sYT|S#`bmRN)>&ILFxbF2rVMjzOqo;( zGV5sa$iP5I*0i+c`qA68M@tQ!BOiMDDyA_=d#c_jF{3@&v589bTBFXp+fL^KjIU?+`S+al{I^Oo6o>W45Jvz!xV|b3Gj6p$t|X zE4+!{kcUQ}7Q*SNp6H9r!cI}{ZC_wzAZ^uOwx3}z<4PV&?w}=*-Ob6?w5h-WQ?qy$ zsXZrw1+Jky9n1$TSq1e&*U~c1%g()oowpq1#*;t2n@=*u7sBslahE<0Ym17x+~4t> zQA(W&pGQ;#Bk5c_p7$QTUI%VfA%V2okWKIrUtI>LN;{&3;D4-zA>rxi)Qqfp)id)( zMagF_Ya3uujUsNM`Vye8TlyqIF-5BrF+3ApjF8I34YJX5@a%C+_)r9c6~)*;sCix@ zIFwS7Lo}8PE3-(;%O!%{@IipFiO$>7jhqKBF&J>PzVK|UBvCr!jq}x>(cq0co1_FE zMij&1b3@`+_=4eJF9tp^8kD%&RTCpwzY}+kQ51?799LaajF#RS$b~-aFOJ;{ zu!f29Jf5Q!#ijbca4#)PP^83|3$&~y*}^;}u)pX;ARL;2RsY=Jq()n`sS~X36>?cW zQP`+^#mf#eJo^H9t9C*ZVPm1@cHv_&LJ^& z+P)&spVce%x?)%bK5oyme}KZK$y+e6ZY<>#ro-@0Ce?^g+(m!lI1-a_V2)(ZGc{v@ zw_x{jEvj}wUCLRtcE@ct^{~t_QY{PFGFay~9Bd-GmevbjMqd#}#F}AT_gLHGS?UtI zUd_XFF=z;EK^YS4hRkI@ni?yA$(dtsk`YK9Y;wdecs0Z4s}2N{L`W$9rJzTE1RmET z1jF(~D!`be?6F)_sO(cI>?Yh7+-$lN-RI%pm%$#B&r_S*cjD%pwVJ2I%N4ucx-R8c6)kqgxZCBrGd?gNuHm$5X*tZt6SWeB5h;bu z=9sL@&(0a0o+53J0O$J;twNJ`5CfG6^;_BExLq81ruT|-*~f?PB%;WVddU}ryvyGE zrM5={Is;7ID{`m3KSYhWvx2U993L;+RS^5lg~2%y-epcRozezSc0J8Ho7Ak-;%N$K z$}wSSQO&~UtNuz$<*6q}^Y?j~hu!!G|66>+;dj|j%h!TpjGtQ?{Xr5X zG3Shr5-|)463ue$KLA*QyIw3esl$50w0yN@f~9}`;RN;q{uuUtEBC8>-v;k=3ehD- z_&8=F+49x0N>FD7>B+1B%2a9g<6icMB`}wK-EJ+v=J&0f^?Z9aF$_$$P5q}nx{uy} zcUKKWd(~3359ngKy_#b(F;j#Uq1n{B<+w#~T4B2X@X+mTb=G7bo>*4TVcm`0E336I zVTu+vd+W=e>`fXYuhK#31mE~ zGA*Ic#g8jQNy@9gmlzcfA2kI#vp4xLMRJ96?g+ComW|4qbef2ACJL9W$GTDNY|RAv zb4)iV*A>4>bFOK}RcHP2hf!NRd2Nz&MvfVkKtr_&@@QtmEX=9|$+DL+y%T&Kt|T+z z5vMYW`h{`MU@ z#$PdSeNE5%?RLL_&M}wL_@9=F{;cfuO>@VIi~?Wbz{ zeEVG+tK^`WUpN?!dfCAN{Om$uYdDqJj1rT(-8kuaC5BUS%mKAW< zpka@7Da{x6w{>4B-!5d9^o>E!vSvbeA06zCK|HVTIL`eA(Lv14v~+Xr;q*MgT!>9XjV~I@VEu!FxYOe~64PX&?%JLTKZB9bc_n9yS=qh@ z#QWB6ccjL%-N?x`dBt?U&kTuKZ|9@72qX|XVvX)JX2c8xBN?nzJVd)BeuNw-?bX7j zpA%J{NPCB17Tg9gL+NrPG4A$TqDQdXD}Jc?y>8* zj$}CAx|IF3EeX7s2e+a^Tyu$E{wEH)d=$ME%6=bC1tOMdkwE?IQ~OXY-PuqZl6E@8 zElLL(Da9NmK9!}ZuDcFv6W;RLvgUEE|Q@5F&$T=d;wWKHiSi4N2kl=Ejf6g+R zo(D&1TD1WX!*&aU8`FXM)|Y*h2KtMJ(Y&D{lZb;AoK8W^b)WRbGAEi60#Ki7gita=FHuJQ+HoY zU}*@FY4=PUvX;Jn$XKz3?R-S_`>vuhkbj$BfHgm7<@4gm279k}a~QaKn5)#YzXQ=^(V$ubI6`Zy-h2wfjjeq36I9>)ef+z6VsLfNvDn3d9hNs*6_Ia{+ zxPWZ}=Y&02L{dGF;OO)DS-%%#86x{u{qqD5|JZe{*uZL0v6{FQ-GVFtF+k40W+xd2 zF8w6`eUG@M4L#YwSuao*%u`ZFvZ7%d2B8)f-x5p*RA7`(lnRKwudsTaZrbKMJlirv zG1zhgyt!y>H!v^Gb8qR1`KW?>2A(z?nX|A?to@Uut|WPY#Od- zB2(BTGivn;D_yz^^(tsG*s=ilOyW-kP~~#^q}z2|O76a~YQWbqO0=jp7wM=Q_@aq3 zLay0TxfaEfR(RK?)spEnhq(I9U?dpsn$hS&lcQwv2%EjAuE%l&qHe*+lIDDh(RQnz3ZG?zQ<=>Sc4(2@2OoLEZGKr+;x6+w%15>lH5*1QSy-(}Q{} znqi^Q5y!okPD*=S&@3Cx6WvL+AcJ5V=8;Ae`VygxDZ*X-Lm zxk1VCXTdXMI8SI1%;;Ytg9T!VJaO!laWwuF?+Q`xVLsu7Mob4uObkiP)O<{jFcnDe z03nmNQ7@Y8Cso;9o=Z}Cem()a{9h5zC@TR5oL|foB44O7HxFd66s@LzzgVxOVL>Fm zyD>g0OFg6CJFP)G9}EMkEz|C5ig_X#n;1(Lp<|Ir(<*SMd!?gxoCcFPdvO*Ty>CM| zg1WE1-t`_6gcb#2_?yoD06l*0_`&?1Eh6y=K)k1mjlOX#QuSjCe8NPpzLz^gZ+m!gMcxfY0r;ab-YDfRWv;^upL_ zp5?7*du-LMMOy&#C)YMbE}#&aUR}TK%3?77;mYc7c?Yet9OG0y(E7Ez=Qf zBKHLA0#z#P_!i(W7XrN(EqMTLbGK#V9)Bt!P{5YY{(UID&Nxc+@;SduW$61yO#`!l%rCt# z4n?Z_fV&fCmsj(;u#@{c`i}Ei7W)=gujR}V#j^E-$G5&U$f7rQ9SB+`eMU+W}y zbQW6EZR}QTs$FvK0nWPe?K*9%_ABcN zW#(`^qd?ua8pLfpihlltQYCI7GoT-hVtA17N{k4V`kHUy zx(H)_qqpNu3${q>a4f#CQHH}gkz(eZt}_18Xr4WR12?--qH zO(l7MpXz37Wnz26P&0LBoe1>i#Zhyu>&$2L9-5iuYVuJFh75E=xHrJ5V`0eCFdB$; zr89QzU>q5WC1zB-(Ki+9+v+$D?gYH8KI4alw4LNz z`~30-@elC6XvLrT{F^o;bTxWyHDTXtY#yY8DX*mcG-?pvi?4-$H1AJ&FRLRfEn{&vwEd$XI$4ozH1dJb{qa(F zvSv7}r}T6D_gCpB-1u4RPt_kkV6C1sG|p5?(#wz}RG!*wlRwoK+kgG~_9WbRIC_hF zYv-;1UWA5SH%pNOA3`h^v6Tgiut7f#=YMvoXu#6kW;j+JOeErljpcUx8dk($89pJe z`7mBIHnvocxLaBL$$TUXJ!9en&kVWCvZyG6PJ{2PmLqTtTG2)9FYD39kDgWUx< zC<=0lj5Thkc_IiqKWTZ+UDQ)t33+okeOEi|O7yNLd0w1RJKdTj?Cn$M%YF#%4R71k zX6&qDAV1)9dYqK1(K}1UZZ%pv_gAcWz&muO{(k3Tro8ew!tA;!-Ps*x*8Bdk?~x#s z?s)>FcKT=>bpo24^z28!*HqMQknnw!(tEUQAX(7FR}P5LlfN4R8PFla){2HGF-lbR}$_2fThp>&haNyrKVGsl9$;0_F6U`)l8o%jUso ze9!GPetoYLEe_}78`_~7Wf6!V(IdWb%d1ktW!5NJ{3B`?CqT}v_Q?*BN>=*#6I-yN zhsoPW8|0g;@ldP$j;!a!0GT5Fw($xPK3z#$3{c)uMJ}TFL16|SS&o-b9ol}VO~)|E zC|X+0<_eirtmv$O#7J@bc1inp#*#KS-jL^p~>w1e!TXa`uB3VK(G7wq_eK` zI4KUJM>2YjtqfA&(}qUkmo&3-W-|ez&%R|p|7U3B(X5kI#taZZCFF* zNTh>DCZoK|H)SMfOO~t4`A8CyjcjSa5KU3ymf=cO-ryL6EQ^>eOE9Ckd7D+6$v}0N zp29{(Y3$ES%G;Mlll9Kgmi7Z%l_W*DGT*r8*&&i$X>6u_cn#;QPuX`u_vyN39%wdO z^Q>Ldk=WaoBJpBO9UA(A?DKp;e!`*VO|iC9w8-!^isw)a)v#$AA)d1{6Dx7l@9kYv-nDfamS;-jHRe8lb z7;;Fxg?sxDL6ON6G*xstlja)D8+Lg>Rv*a2S-zB#xYw$ws$SC!Q@tiW0w)n?*kIEz z|LNu*dRQ?U;ZayxX4w4kp+tYfVbTe@Y@2gxu`~ss8+Mx*WH7dPYys7nm37V8kTY${ zkH{8hLrQp6g8IV~OZXba?#Y$mY}@e}8xAe#eBEqTVEI$adpyFCN>_sxc@`(lJSW6H zWj)&~dcA1=7_7_hg4g}wI&T-!S$7)c>HB><9Bo|5UEF~x9l$EWv>F{mH;giSd0o@H z2c#JLWgt8-1tz4KO3AfQH3tc7NQR%}vl4$nlQqkVQ0Z@yENe`pBGH28^rEEm-64^T z(lGD*L;$p<^hAC$wbGSFke4L5cRh-3io>;s zdWo?kOaC)>rD!wLptbVDOiLxV1OyJEqc<(-*xnrvKb6zzu3D?_s~WVsx_(oDNAba| zTG%zHisw!0r(09adkCmz z&6rx(pF^7d&n9j2qpPx7(X|K(=XTGVIkmB)0h2#edzzlW5RG%qIH*gn;n3T|oty4? zGM>Q@2mJE?{%EzBzDkqazwY%lVy(>dKFPKS=<%Lv9_YUcu*dJcd^{d%kMalzzvkh8 zY%_7l^?b#7_(0i|!AdG+VT(rmhHDBYH@W?h`Nb0n5sIlkeyp{rSnXS-|4xt=8`dAB zx$kXZwkQyau|MtiPD9xY>hQ)@Xo~k`lFj9|(I9geMTRy9hQn;vuZm_NJu@AvncvRS zz_?Mce#+5rATa2T9FXAK`v|&$x)sBl2b2=P2GcYI$o1r@^s)1PWNYtY%;H* z=tOraVJ#TUEK1uRV${2kUyVZrx5Kqh6yL2Ku^$V|EhcSW)U{L^5~ENCi^n&Xfo4WU zIXEn-72+-`@z-o5W^rcsEb6^R$rlOl<8z#3$=?#f0180$zY^btIn1ZCczWM;zdJub z^3|X-BJ_uoN0_n^5fcJef|C+zS!TWK4Ek{vcBgJA*1em3&MpAl$!$!!4K>T~&SW2t zV}M{LvVsAgE>U^dxOHukseDi*q3pJUFNITB!H*Yl3W*Of4%c3Lj<$PI?O~pJ%z5?F zrDIDlLR)3P9y$<-Z?8HZE#Ka^EXQj)Dv<%Fv19>ZLT2XE&%_ zWH2=uVOGCK2zz26_0@`7Y~#*Ol*2|ded!w9%jf{e=~Z~ruF1&tcanLT0y7&G!}qm# zN_>2F32sGu#AwS}p#55qeJh_jaiO~PFqim$hX4c^}dA1ulBJ5^lqyw5nwMZis=F@!xv(_+5<*et$}&d)>LGhOOe@wXwF zc)8KM!v@z?8F#tPJkyAlL76t0jod@1Gbm~v>H?P}$~!ddEYcZA)Mi_E)C{%sF7q5% zr?%_b&F3L&($$|PBAi(AQ$cdM6Q%g2b|gOxPe8QdmW=B_-N$aA=xVAPIfUy-ah4o6 z0jCC)|cC!J2x9ox2T+qToO)v?pDZQHhO+x8vX$$i#Z=RA9# z=j?sPdEXE7syY5uHEY%w*PLV2r=MHqSyxlTZ8}PzWf@+Dv{8o)z!W@l|1|aqYwI&e ztxBg2sYb@vp4a6>L3ov_hC*sikHO_ri@v?SwcLMze@ftEZs*g>XezKjZkxKM6{L?R zBj-a%1B^B)XnUPKg=RdTx|Xs5vpJA6LWqm1VN#S@L0XM^J+=v#mw;#BbMv>~d2Od5 z=N~zfPvQw%XXCYo`c|U4UOkj~;sTll9rf0dS9GX|hHA&nV>drA5#044eDaQqYmKbY zpl|8Y&^LiZ3I3MFkXOnIu=#|?0n@c<(82Da5o>h9j9jB&h;}k5b(5vV7w|J#X+#l^ zGR$s*K@$|_mfb}p(a{PD!U%%-$+GQvl{S6n2)QjM01yq%XWW?>*qa2k6Ej@pfn z6J-c*2~Siem)d{EqaB}FOAOtp^!I|)@4I{_MY1BWnJ~V{9$(X8SZCU)gX*sPRoXD# z*0<@LXKco&ZPJ5m=}t-dZn# zTc^0OyTb>arZicc-@FHf4GY$PB&~t~;YVg9Sc>5WP{=9)bxUeS!I&9#w{UD3v`+n6 zYRLUd1gVX$p>SQI*4_OC6?x^ISZtc|7BHq{pNqNt$a*}wo~CExNeqsZ$SPMZl9Um^ zJG~p!p6J0Enk)UWPeQPpojw#?mOA@Hv*kl*grm&lersNk23C0PD1lj2r-ZfF7pk=| zTpe4waIQ`g_@FgCOkuM~60|M@YIN8LD2T!IlnTd8xrdLnK;lKA$Y^HMbIB1*5d2z) zVQb!i2lx7NR{RsQAt%&|Nj>Suk@*PmuO=bZP*h> z|2%k+&+4fQqwKeK zp4v--%$^ZovuD1@}2|%~wDB`%aL+a?Z2iolE~{ zN%te74A&Sx6u3<7J94d|O*7-VaD#O-qEKaO^wSYex}eX0-(%>)hSS`WOD&t|&pM1X zAS+*~5NF}G=SSp1*ya=aG%5|eq7HA^5*07|DVe@k0-lZw*BtQ>nYVgDqC71*aA+T2 zW`G`5;NBvKKzsLxN#4vsD z)?$jFA!kR*#vy5=@Nc+mFE^Y55 z8(WF_c@$QhKcnY`9NxwO&lh-pQq2F^e~^Lw25Os~{^8#;Adxr!vFNl?_J@JKwI3}) zeazZdIW>s3z{+LN*!oa1%7m@CjB}20nY*ltsPCb)gQ6tyv}*QJ1c2MHQyA$&II*b4 z8SEE3Tr5sD0qyP*+O7|+xIv%l(BnUS@8{^(&=;FN5Roxzx?s9tr6w3B!^hO`-uBJ} ztldR9k$IK@7Va8a)LB$JhI!Wcy4cgUY3UfXFE>ke%D0PqPCbLVt9z|Hn-7=wljMZ-F3H~tp2kG;95Vb8tB=~Gzn{6&5X=|g z5bZVf*H_oPRDF}9u<3GPGHOrQ&I}Z)6t1!`cIIjlW?Uez^!;YqSG%gjZEG%_2&I7z z^XG@pf}l=-ogn2<@A!+TnS}xg#A!tI{iMsKc{DDB4QWxrq0UHbOY!D=Nj%zDd*3-x z560sgO(I^3Pk5gK;+Lo;3$I=H%c+t-eUSE0S@-0ZDt?tMXjSRVG(&RM()v{c`iLyJ zK?bWKuH8|k8hSd&_nb6NE58ECgFq zHdsp#{tXYR8{tjUiQ{MGRp;P+?FlD5d#!!8#9i4qBP5wWeR+h3pj)SNa*{?Bp%#gc z)wfHB`q}_BqTdMW#K;6x9WhZ3Zn!ze#NC%e1OS**f%m)gOJ3nE+tn~{&rY+_97*`6 z#o&(z7cZ_eEK z(4D5Mv+BIv3ix!|fFH~5v;AB4UHQD)_q+UZwXVx+l&^-tldN{+5xU1HivwocquFzR$~%z_xmnb@m$azlm_MxKp1xuvkz&jyQ+?^$C0!XcxVp+;kA7JQAymU5r0 z!XG_j2*3t0OYP3-+Kqyb4(G1aHv{I9mKGwID)APD2b#B{<_N`v<^lS8S;OzT>E`=# zcLAXKA@;rpaL8c^L^}jb!Ii8LO;=h#4B*qvbgjZ(<&Wjy5bh92a&B_S6Rr~ovk>h8 zyNGKJKJ*?Y-^&Fk$!5;0YOa@q z<43ItMBTmygDKNh(+w>fuT;$3ptKhwBWkziY*Zd>?Y;*0`S&zr%HfgYyv<ekckvK|?)j*lvApN6}+tJ8)R7XCWVsk0FzSrI%IxaXny>A@-a&D#Nnt2Uz% zJ&&VHSN%LNVr66`G{+MXE zP`Nfq;pAT#Hy@Qeb17Ar;v#T;M?;jQEwJ&!h&ut-t5g!Z70O-}&#Km&s#4?M{i2bQ z59JV#lyv{y#34}D6xp(P>%8w&CfAm&PrX^wN%NKMtIk8}L;5NGq36P_f*Q;ze=4aP z4uc*}b5b;YvhT)6?`)b<-WvqN9FcWQlOZE<#9cR~@I4zd&Sc_&s+@U3hjvMGgLc($ zT$lv@;4%&N!b#xaz2%-rY2ycuwFid>F5Mx!HeXb9`p&y?Xd|h|3Wv>+rs>X5q=>Rd z?K)OR3T^Ry7yFrHx(@M*{iOUoSu!I*Cp9+5x4ZT(|0{F}YEf8K%IR{o!^%pm@^IUk zd@MlAhBMklm|96wuDJ=XURbKhJ17ZROrv;39&${hr}>RT$MC}{LM=5j^i%4*)*@GX zuvElvuR)`=qd)UH)mX=U%4Qqh4|_dVKa1lRbekV7%uUWD=*#Vf;=LUqecmbtiM(D8 z28r3BAZL2~Hju2^PvSon6~#M6D-0OLssHH`ojqsmfTxjp0S8~WpY=u!`+JId4H2SD}Saz$vTCKa6*IOlkZ?M!gBuay=uMMVS zT=c>gOBar3twK(@7UiyFSRIG$XdLiB-DiOt)VtDrpJ`^|TJlC4MQOk`Wh>?oyHIgf zgR5j34Z|AF+5Ft7W7gB?VFSkF#IhhG>-X*$oU`LQ z;2I$u75t{bJaYj)foM`d`uEA*`5D~5>hk66pgV1R{PA%Zfi{LzvL|Lrzzq(Ae)+_K zd-HM!XW{#H>pd3z#G`x)eg_f`CJPY9Tg~{iE|RF(vbPDKK^@Pos%|xe@I)1JP+qT5 zNvL<&Uh*~w*edRJ>M>=>oPfTC3 z69FykEj;$(_wZBscb`2sxbVIbcAfq)%{;A5LEEk7nJiex-;{C@MVA3cG5 zY3C)LJMojdgCJOgg zDTyEGQqD~??l)<~*^$>a(GM#kg4n4{T<2^uEHJNL?Jc?O+ldUziApfQF?8tAW<=BGkXE1lxOgVF4oF}ZFA{j99hqgJ_Yv)(7Xrfi%J;5BEnH!iOBBDaDw zT3enwdNEgA6b9oZd#Ve+`_*)-BNUh_<8$MAbG@JJKm2DYpnex$Fd|zS98QI&Sj2FaX^nupx%-~&irHmU+ zKJ6drlMPV>cqJYA{`e#@hx7?6tJw(MjgqD!QCx7&q2bhGOgwZ35Lz-FrA4X{KvWTr+*6i0PU(wSHbD3zJhnVQ6vi|;HPXA+fkE)~No9br}+jx!2q~Z0AX)RC8dN}AEt}b`Td^B$NOHZnOUHK7a zc=1W6`CTBJy@sOrcYNG-GSTa(y_2c*zuS=H76oG>XG23vm~QlsCIrh8Z34BLe4lny z-uHXTp4Q53U1ifRW7@CX<38{-fWADCqC8NndGDbzr?vxAPI0{95~@ElVkf7e$L4WR z=TWYhbeCvFU^TwbJ;s1OtJ&_eNnNyu9uIM5aznme<9c>k#*3d6Ii6nzbUt6WwqQ%r z%X}HNJmT8-gujSOA4C0Xb`BU!g8eU;J?DAs6NQ*S)1>47d?tnsI@I?g=Swin0D3cw z#j7^pfdkbKdCQ(H-7qnOehgVO&R1GjF%->(%H*-c$@Yh_g12$g6C%V?_2^n@z`X0 zF$HS^=7J3Tj()uh*VrHKQlB9A_c@-wV*6r@wPafr@jBxRy z)4H%N33fI$Bm;*ja$`A{klC0^2xN?hj795(R1!vA=&dXoGV!078*pHY;O?bxxzhn* z_qga~C}}_UWS+cj)!kMUsLkCGL<6d#@-H)LsQvd{G2B)EATbwRZ%~;z<19u&ZCIyj3m@MN zO*adheUymM`IWy71j5FqFHS7#a{$?w7;keOh>6(NME#k1hCAmzs91{J8{HeDs1NUH zhL!=FNgr4ftjn@!Ya-v<*5`M)vLp9`rGt5vnHI~p#jj4T;;!Oc9pt6*16C`SmHzlW zh#3Y=gstcwLD2Cx}qlFC*shg0-@zhU4Xqw5B$kK zwKVUS6c03X2-1QJdGP?s>w8v;oLek6{K8?BW75Z%BbS7x4TEkoBUE1Qx$;1L7J+%_ zRqN)jjJ~7;2>mf=L$mv%nTPykC)$lHzV7{eCfHDLW*b5d5$oyQu$Z7u}cDbb% ze$k!kaC)vZH@IfzeD@zpMz!-VugODzCpaDjj}5P-{a&HCwY^IBTmD%>_(=2tX{Nt8 z30xLXeZPeAyh|Je$R}Q9tH8!*CxS~x?eYLW6*`%cBIXuENnm^|t@Re#OB~6i!4wYV z2*F?iB5rmk?}_^d3Q|?h_(Xjb;H>5olniGBK)3=L*s0MtxPuSsJC)voK%n6Odb7h z@CI&x^WOH%hi3|QeAx)ncNL!TA9dt5{Ze6(J37h!lywr6_!W=aZH^8yfcz*UPl(-Y znZY)Dg)!;`MZI8Jh>s2G+k|T#0+zY-L)B`H&K}X8cQCj5BcE1k8mF3G@~_@o?9z24 zf={R&-R*vPZWl$H>fwGj8KIn_J4eoSto$)b`yAQvTqjayZ~swYh3~;mP4BvSHYl}e zH?Ry!R_4j7uGi$U*dOIoIR$=oN4#fa3=Vj8HWKO$)=i&4eSiqyskx;~SV1|=xw~rV zwm$0A(~mvX4EFAH>|FUFgI-LnZmxXUkjdQH;I;5g{kz@$wmge(>H&^H!hSRW$&{S7 zWX9@?%#rIJFbSB{H=9=DPT zvY*qH`tpj;FL|-~OqG3GG1!AN;s6eJHB_8K!Y93!d9%g9Ps<>@5w$P&ZitRq5apm- zrVH4YJ!WX?dwNr{nu$)GoK{P2VkwfY0Zf4M`t70LXnx736aurr9-d7V7fxtvD)}=^ z8<;=zU1cpzLNH@zk+CIN#)FlHT>??ISzX3-op(s|q^*Znx^C=0k3QK*Y*FE~aHHN+ z@T8nv`6u?O*rz+!Y(S0EKUn4l?Ib_I3y(o=Hk%foP+ngRgje5`hOZJUBHM{Sl*5WM zR_WeJH`QN|Oiktu2e;$DXySP1rIB7cB7KSYi4sg-$uQH)6(Pz)Oprt7i-`@A58qPGUHI;kL$a96wrHDm2U6E=^cm3S)I8$?^yrP&y$(mI6* zd$lr~&ePecLwXa9K3mr+7b>*$PiacQU0R=W!*o^= zR3OmcNk&YLLh}jygnCaWU>|D`(LPK+(X`P#UpHUdZ)bgRjG#Kb&;UpNJQ39ESD-6~ zeuL=jC6ocuO#4$COm?{M2;OnrB?O7_Eh_n0YT-;ZJREV&tr^65R4n2cotrSq%qS8m z95Bx?vpIO;>yzWnUim`f4}z6)78>v9C3 zD${~)nW(Hd3Q_4&SGVUvOVoTlFXIjtJBwWDc^zDd*Um^-vD>WXUVEAdzISTEKf(g!x%0e%l((~D$8Iwl$<#M~u9 zmQiX_8#W|O{m113BE($GHe6|S=28~9qkLB6+v8eqH7XPZ7}T`!-qWVGRW8NH*0RTT zKiGxdLnp_&g<~=wC^IJij>F0$(S5vfTo24zI3;9zG%u(F?WQBF?^- z$-FppP?OF8s?R(*Wm<7JZKLh25El3mU;rvt(jwi1SubVYv+Pa_EL+H1MMX~WlMfvs z%J#~*7s?yR3!nY^zQ3?wz}>p%W^?4~XDA{$YwEX^a7l2oWk|ABd#~}?N;FIXg2jk?@izRZ{ZIIHRvQaF@hZD$gFj!=Yj_s{$id-zph-mezHLCP(5P(e?c8DcA8CZoOmugq;H*L64pH z$}Kps=%eV-QM_)H24#{!#}e->!}x3=3)Pd-zOQ=ca^9<)*JwqaFly~_f{GAmyP{8D zT=|wJ+f&SGvskLXK;sg!ux7M!ts<+j7^$%6d1A!}W6oWm2gdm?bkGVU-II2`(q@nfNqxdZKIY6}{{@_s)6k zIO{kA{YAFT-+bRQnwgRI$}9|AWK8S|NCbbL;~HivK6Q+#9UJZpqeA>xO05s;{?!yv ztpZ+=Rpw_)w~1ew+z{|kSVVl8XX*0hOQLf5JvkoCtj?p8RW4-2GYqEF6?Oz{kPZ0( zTqXIklr60xKjl{?S8DDuBZz}RYWG7$k zySYITp4hb?9JAcRKlDbCA#RWQ#RPB0{RwV)_Q1*e(UAYp9bfuO=ATfei%=T3*ti;? zKQR32;8ESO?MGCuvgiyefPyUu$DK@8vS&y)HKcM?PQBzd47u*_E#i(&W!pS-ZO?wc zb$_SfLtucq#a zeG3V)`?0@#?#BHqSJZG_BpIoyQD{R_6T#MT$EfJ0@E`{$;|12HP?1%7^BwBI0y7Jd z_iC%(MLej|a`h69v-CA{Y*<+vg<5Q0G?@ja?0uE1w+>Hv;i>?OSC+;cg-Z!?hQU|n zm(6l=rDvu*mp)UE)fWQ=wOmdUMK5KMP+6GPfW2QSOUYUA&(HRy<9aS#wG8mkp1nd; z#!Bw8Kao>@78&J>_iT7QqL=}47hu~k?Cn-yI8T`A)M zSFkpmS=+7WoK?TkA?sdnvE1(B7SbqOoTNMUG0HV~Mk9e{m)<9T{Xql}^xeqz0-du% zll7UpvL2_Mp2OnklV-iTrrk2`(f6&Hm>v5QM4FaOpW`Ll&2pQz%hLk*#+aJN*dE>t z4Q6JCC)b+IH6NyiXE&0E9!&amdTKCE9|V~<`lsUPj`#lBZ@uq*2c_b`3&Wb2Ie&hP z0FYhiUPq9hu@Q?%)IA9FDCp^YXzt-UqMAw~iin(|tjgH#x~y#~OC-PZ`|Em)^6N6? zY9p?gSTjT>5d&qj2JI-yp}j7zJWawxaWH2jJd5ZNtw)`l6*`Gos8 zyjwZB@595mjvF)YOB%y7UY@ioEv!A+hVW*CGOko^+|OEn@1k6k*|0qLA$siA^hO7n zhy&*bezD#RH@cI@SU}Gi{W57VJccKm=?&!`cq^wfvFe{5HwB)8N0*!fzo0$20OXcE zeybP83eVWSLvufggY|-heb0QdX^w`;#HzJdI&rW0dRpGeReV~*H>9gg8x{lA7OL2H zisXC0rbnYu)lx-Nkq~0y2ttePP&6U#0!iA$nu?~$a!2&Etx?BEQV*JpARP@uOQwB5*+iZ%90 z7Jz;R7;{FUf6%-b86X|t-Q?HF*-Oo*KR%YcKNO92_lW4^a*F6=e5n3t9-*tFJ$p^d z0&vPOtX>)oxINa0-quV{S@f##z*mGcp$(kO-)Q zv~x($imS1qSEI!HabP*1e4cfrd(|~J;hFX`A>|Vg*phH~C9AzW_gI0K7@G`}Dq`Q) z8XYH=yX&lB2s9I}@+m{umB4SeH50G(w7(`5zS`8&zdapV2$snb4(_bYEqFge#^#gF zd|Rv1=X+LkU3%djuJZVpJFoUm&#~53;c9leVfW4C=Dw}ju>-V&#`K-vDEDkX?!U&I zxGN%k96uELm%6WB$;&`?m+r^8!)Z@`^78XGoVtQ z`it#v-f>EP)u6Lw))YW|5M2gKTpXe2M=vj|F^2cLau6N(hGaYG}txv&S%Q^>iPDXIpk20mu#loeuqyNyF4-{!kV$R5&i zY8>I=7}}ZFlPMqVt_Kqz@FzvLunZ^&Z*j+#oG^^UQ{`pq%T(_r78v;m0~;-SE3Q{ZeOd6L2V%8JxfY zOl_J9@y;?1M!bWEtC?@GU-knHQojt;tZ&#+Rat2&wLJ2+@I+{y_BxYM=lu?nBh*y# ztJQdNgw#sb6rBf*V&nN5KM`*2XZx!YVf$JC??yiW9dlT=QxNm<@dJTwf`#(fN8&*v%PYgIJX9=vbc-^80nV?}#jNj;HO_ z=KJzi&+EWg#T7>TUeWYp&%1@;%tNw2@j07bn+=KUL}*Zxk*O{#kEe{HD`__{yhD5i z*CG&f38X$++zm-{7HYs_(ck?AF-=`yxR6JLvai#ynFTDqK-r#$x&1_Q1$Wo>ZKUc0e#WMYdruaPN|z(@)KEZ%4)f48ZMxS4pa!Q!%;`!aI^W4&JY=`&LY z-|b`gR6u(`m(fMya9w9)Q5OFjh6*op_y*1c0)9c}2}eL>{{1lTVUDYf^c$TJxK6f~ zAsy=s+YZ%ExivdJV-8z})BSg50@Q@e?X&kz|0yz(hRY6%Hd^#TI$boKdK!XAXCjad z0t$si_4aV%BE{h-5z{k&|FfS=wn;4$_ECRU5esrX(E2v!^D)>i+8G21iu$b$I_yO_ zXnzQiuXV17q=B`&G{tMxE1xVV#k=(G97#)V00Q;_E>Vkbi4j*ZqHImfuPrV^e=G<( zPT$Pm9v~&uK*rwmR~fZOP{tq2n7x@~KrrV&&#rGDy@}VnZ z9`K2NXl18TbP;z3h~-hw_C!*@loosD&vi;kw>bwoH`=*58DEXg6%@1mrk9-{82 zDkY*)SHe8h;3cz9si!!bIBD%Q&N(k&c}Kb5L$7?Vp3+M4jIa~_WwmTGC(GEQn(<3? z)0nGGMcb#$!appPWQOoJC06iotT65X#Ba;M-{W9)c>0Lsw*hW6PNX+o|e@^97i7*4R5mY@YH*DxObz2?YgotpWaKT@aksQTX=Mn<(bWA$!171 zxbIvJpWN5GIUmRoZqpCmM?0k1UmGJ~+Q>Vw8BEt&A6C|0A$HnJH^*Q6k*R0(Bs}c0 zn6sji{{Ht5FOK6il#^0K)J(0|S`vZgiHNZ5tm$GK; zbiP)HB{Nsx-2gMb0rv8a+hrR&629-7hhjIrzR$V$09z-c?>(<@Gcft{i02dfSG~== zXHGZQgxbA4Cq;vAzVE}#t7w{UQ3(7zafIt$OU;DFjzcj`V6jATw2v z{kINVF=4`-w0^Tt=^c0h4kb76u-FwrKX#!sVS;V4t>_OB`C!lcK3*^FkUYR#?L9P-#!pJ2fSmeqlSgE9SOe- zx;bAd7rlQD;_v2&RuFu$*#CLxpngd@EO0|k7n}&Nit7xi{^mwgs0+HX0BQ@u9#EV_ zY|i<)W2+OMa7Z={zLW4_u*VC)1VF#anI!#QM`8M$>Ri2RestepX5joX2L>JdJmGZB z7Qgf8ECF->W6)Q>yEyA#8MXJTm6?h8&h_)xVwP?q@k!;_)?bUFkKXTV#;$2rwQeL8 z4d(JV!e=O}&+bikF5&^CzVy1f?Ntv8KFvM_<5c5vNg-5tRTtWvb-p`PI;_rqjJwBY zR^`6j_KO5M0Sm;xkkaLV3h7@REb|IK(;-x>33I?5zVAcC>l2PU%*_xTJ6>=m={j6c zQd>$6;Iu<+B?h}oI5NRP3n2H%4G`5Ea>7cV5eu`@(2Xm?rRmu(U6uR@kLXVR1Bn68~?4$*gs?g)e4KUq><*`)eA{zd+ zIh(3FD3ftUP}3C90#i&|D2dOYVSKC4tYLU-hDoEWfreQ*%a+J%fw8V&D?2b7eD~Kg z!iHieB{&cEsNru_@bAyh5(9JLA`Vz#Y^t2UT~=kZ#=Q1~KB}scBPNIp^DUYM3~STd zdrWJS8!8B^M%!d;jEnE925aNL(53Gg0=8&!N-!@BZXq!*%x1bLcL}8L*#a6g(v@MN z8D3Zd95vtWVd(N}RZZ;iA>Juy8s4;xU`$OkCn&7thTu&ZywQ!jV0eR^RDz}UHt=&P z%?T|7?P(@wOm?+qwPH=pCmC9`z!@H~3A)3IPN7|cb4hQO45C@`z;C>uElt&<5ZHvy zSa)Xv5`{r*{moKpJ)vhU{jdnGMoeHYl9Ygo>wg&T&9kQfcg`w5IaBg|Ku`tbWB^M* zw7<>iHg(~iQwm;VjSOl!zcv!Q_daU?NwzeNLf2RE7o2ln-t68j~m*XYg>rBpDy}z~kr1Zzvc^1wbHSp5#G~<0{On93lc;m`O%JnSNYZ=+$EqPLs z;w)n-G`lP!K2BUEbQc;O^BR{bMUU$+9}kjq6K3`=jKfhiLz?>@cG9M?6-S@>3_Rg7~kdl5sS4LwyGfJV?-mZ5M zE#R|$Ek~VDXKiGm)n8V}uQv|kE3@e9Pd4>dGIBg9XN|glgVS7EtTk3T@L!U~QZvcM z8YOyky6Cltsz~2+@2a=6;P3iny|Ae|k&!ZEM`>KumcX7fo3mk`Un+ThvCwld&NofY)h91p-Q3pPXspFj1J>R zo>OFA<*=iPr(6VK@6V}i!MM31m z`T5qw=A&{l3g_*+iWFMSZHDW8F>{G7E+=vM9vc0vdPC<3z8VKu8&ipfT8FXl2<=k( z-Q6Q=TlQK_um&vcUyF494)3S~cWIuKP{L+JSq}HDkgdF%^lbyXaQ2XGW?sJo6vS3#y<3scF4J6-mP%YcXaRDWFGL=5kz(m>S@?3 z4w>FQ=#+$`AGLX;fe5nIi>|_3Ves_u_Y>EqNi(50hvk}PzZdSu(XLAXH%zp6Lo36e z)$Y!ZYSc|z`;fjY5OV()d{b9v`-#3w5ZCzaz4}!pVGLq{LCWT|bo>4PiCYJDNnIV(#zp+{CLC>Vxu;iO0bj zp$KwwvRi_Qb1>o>*++M^)z#yMaN-$6+hcHX#`E;=xkPkXhf2jCY99(9-oXN-wg`1S ztDfp{h3SZWg*y6hAx7f(`<|8WDBI&Q3vJ+hX#YwVE`S^EO52`@^XHEI?mOcv#@eWO z>31F4R?S@(KW>=6rjTBLctw50okga~?`hcwejs{9dHtw)Bz$4J0~NrJh0nFLYf@KD z!TlxBNdhZ!H}A)u3W1YdFL(F;bPa7FGL&0lAcDJJKle*z+N9;=F~aG0_fvYY1o`W| z9xvV+XJKMz)Os&s>DY$C-G&4tJLsmhJ#}vwNEh^MM=9#2i#>N=)1LrEh;9fu@|plo z^Jf5W3~` zY~jUc5s){EMnzS)3U zU@=0s1CQWrD7g|e)T7Ql0wiD0dYHzq6dju%oZyCQY+&Z(SiF3ge)tUmyA4YVU};`d zk(X30#?zMWGxy9>wGnVBDvIc#CD2(*G4FxU((R{BzPBvyU`1@(1=>7zo+H!PcErw%}}i*(FNQ-gm-@5v3?PgTpXPj($eWj+(7GZX28Rj3zkH^ zQwXXbpxfZCGXeI{?0io6ClW%n1y~Df&LVCs>@`1KHxOmLbU&@;jUupjqX)TTIJaUA z+2aL*DKK|bix8#-qf&@u|EaCyWr4+OXc`G8hOA5CYvRB2K2QtMj6rO~xlY{9K%p&DQz(R1pa!z*Q-E_<4{S5~DBwh_46;1M ze3B_sYbgvJYiOQ#-pQhKQJ*Ryyr>i-Qq@$EnCi84V zH-C6?(CzFVX8FgXq$TB_Uun4$3KX%WMda~sog(}2OVK};K=X@$*W zjDTSo%yl*bzG7u5Im?Rh7>fil9ZqlfVb?`LYwWenu(?D)7Kdbk?ayY;U`1>p>z<=0 z0$6CLU;sP!qwaUJrY&aEyNBkIhO_l?irC3=?1iU< zvA0P85@> zr3+C8;7Jrs1e_4+(!mmB<>&Gw)5$ApaN#XDd8Rvx!|WtvOw7AEFHX+0cs_1h=*@5T=#Z~5asm<$Q%*EGnB%xWd`eio1$fk|4=F)iL!!MxYz${2c9!UxvSXty0=YImb zfa=f9EOw+JPlm*i+6s=iD`uJL|I2O*{1U5VAx>m?UdPG#os8MWz}2j)4$a<4TKiE9`UG zPXMJ(J0B&9O^0c;-II0oW2&+A)vZIuz~gLA$P(39H~o(7{ewgf+oe5JPW;9BVsP0x zJzyc`(!rg7d*oKVHP}b)-ndI{!(Q*qt9pd~k<~c)(aSt#X6wUEPw5NXi)T1CybE2# zBA9J+xc#T{mcCH^_`P%c`t^$B=?1X7YcO%4?Nw7=+Pp6CxXn|WUQ0$DPpb@kU6I?| zPV4t+d>fi_8XfI(kO$=FxK7YEgDdpsa4M3AbXUl>qV^=Wqki7=W`%}R95ci@_^Y%w zx$i3+?koH3;qxy2sJ?#*f$!@#+*fMzJI@G0;IL(UkI*&vEAQKN^tsC?Xa)Lt%!=!*_<_+71TK7XAJ z{`HsU;c)oeYnu`_%H46 zIPA>-Isf;_&cyVuSWwLWD?TR+^FQbRJ@>c$Kl@oZnEx&I-}8Upi;TjQsfsysUp+El9|Nf2s_)kmu_a?*gUz-f;|BL>}$jZdd^l$V>PfstEq1R_-$LXuJ z_v{PX`nK521ZyNAHum477-K?oM2rHhX&`enZLty({iXqasCCKtaZroP%gbn}A|lWk z-<<-~YWbV=ESs9~ch)0P(5h4mmM!Tm>#vy`$O&(s>T;fAp6}gvuEx?{rqtAlCc7bqIjypPTyX`v?U?f%Je7L@!qfI*Y#LTnl_a`BfJc*c}{m9VBCbjD-MT zu{&B^b&~9WWPV2senz5Z9X*#b#ZH(6NBSD#7UWRXX|00a6rdQgw%a&cX*Jv1U=}JE zF3+!Q9?46pWJexc8M2z!daCGU@C#GnjI=Iq?QHoUvMPmBzi0(2^J-f7f2=C{?W=3} z=;wA_52ZTGe@pzO3fDqoHsGm@-f$g*Jo=*qukA+dXnD1pLEh(~aT z?zQvlRz&>}H<^77`xW^UnJQ;~`}CTS1I*Lld-N{zcP7L<*ye$#7oKl+{REpoAx9-o zLvZaeZUYWW8sV4oN!#+^zaXJP5!~Uf0xH5#A9nr7_b@fUAc@{Xktbt8R1y3X_kQmA zif$7&6+%*w2(niCy$8AOwuls>pY1z;#_7!dLBtC&J0)Gc#t02!YQ;$I_qbTtT3s30 zeI}7sM|HVu@NJG!(-#_=y1<)FUvR=A&(Z-@@L|Jh*aRG76 zaq4l(;Ptymm5#hR5I#6dN%pilkShn)Tfs9iy9Ary&%zjDdn_MVdco>@-Y?{JaYDaA z%Ls4_02e^$zcZ|fN5&}cK-`mgN+JGBE`1FRnG9(IHxcl*g@M^VtAr2`*@YHDRy=`K*N zMEP>i^bkce`8!fck3)A5u94(JXTt5mfXivl>;T(kZ~f==D^}i9lh2^Hqc^!v*GGfT zh@m9=zH#`%- zkb)4sp)K#aU%QpdP=ZwF&$)3X&OA5(*Er+`qNx{)Nlu>({nURpFJ(`QNhk$MKEbi| z4o}Flj5w0jlQ7w5_h9~r_LeSO=gS2RhP0+Dp5VqWRD;DBSMs!#y_E7 z(k&GSRgXZAgV2_k_wZO^%8l8pl%EI>J=m#ezj9O=*_XgI?u4iWu#-!3mssmzNZckX z)9d`os?!B(JPPw{__|>~!to741hW;-PRKKAsB0>;q7%)vT6&l1j;}iPJhn(F9$eZ2 z%Q_#LRQ0-F*^Uh-qBdz0%yIO3u%MMc^NCjHs6xlyUeh5- z?0-;d4?&uMYnFg3UFk~Owr$(CZQHi({L{8kY1_7KXU=U!cSqleo{4XB;yasnah6YJ zPDaADgp^83@}Y)A1mxXyn|j&;0?~$zYSfxBv$!YDG-W_GrkqU_=D0OvL`LpVl#|B# zfmncFWQix6Y7|1x2ci%gQ8Pp?;lVtzbm%d8T||X{HMSvGL;ThTsGird36fqEeQllVDNB zQX>Iqt_VSAS|vY<9cfW5ltdRsa}+Fut#X*-G~6}pL|ws%^iZCh;ZbbGFwcThQgC19D{Tr11jI{O!3Gv)=}AdLT{+~%-v(wti%A`7*7k&Y z^vp=8HV;tDkgMOV0ZpB`0gnqd^maLH4sQMBk`HY#PDsRz5JkR-VnE%2xhL=~# zV6DU>#(mgde5P0mkbzGL?0Zk4wY5pwBFb#>%LCwC+OerM%#z|QxrL zypFk<-~48?z7%$3z?ns82`p{IZ8flAv!u(*_3Gu>?{TSy01rb=wxP#f zW+im#3AuAT6Z!r)s7w}H70p3GB^VyfZ8tD*%bttteW?O|>d!Troad;wx1g>WaA`KRJ4mzm^85q3;Og3S>{_KT1FIa$b4EhQW_D#x<0)uY7 z@^^lrZx=8n!bF}veJef-DGMnG2r!{{A(R>4-Px{@{7~a6sdl&k=ljSi>DWugH7YLJ zH=#Fq_^|z9)lK53$IwJ{XY>pP*igD1w>h@~w^20u(<)BFZ_fx|goZL=58-{oMAb|Y z{y4P+>N(+Zg+xzbfb^}Ib2wooJucNI2``!AoLLK66bQI;hVV-!*qv@|YoNOub;{0z z?cKg_(1MTTqk-Puy-;HeY|dTPm)X^-LKIC& zCU;6{0J1z~`>dDLnyYuM6QKKz#X5y3e`bQ*U~e5qJLA>-S;jW3Kzl|>N!$+1K{BP) zr6sPBAe=1%Tz;4PD68D-d`{wUnPJB38kvFj6T3BEF{eh3hPE5=QDf)Pp-iX%FT<8R zuQ`C}Sza7u%Vr(Lf$B7Tt3OExBR9Mn%+7}L1nknu;MDEk4Kj4z(K(K873v++hVFv{_!Z?BB z*zwHdWP(s8F@3tcm?)fa|xgmUBCJ{oZA znd7M8Y*>COF)>N)G=zden{P5l(K6Qp(etvm*4o2#cm2}y{8*y&;dKJRx;RJ);i-DF zr6_1iYSPR8zD7sq$@k%0Tp+`yskO-tA8A$m)OOPtE=O%?xIOjCj> zEmAa@MNUv{>eiE**SW}f6RGFLI6G9JHzcde~f&)5+hIj)3BNyCFq#9W z4n`!eK)rh5pcxf~>>)3ibnc6Wjw=8#M-rsus%VyOeXo&X%u%e6B9MSmK_3CEJZ(#S z-}E&awU9p^DdpNA6G6v$WwL=J`gDLUyyyH#p77Q&xN~@qoiyU?McPUwe8)sUI5wPC z){5b`{lJy>(fE<(OIqW3rY!o=cf7n+4@*?t>DKv@^WNg5ATls#D)&;Zbr>@A^rD@x zOk$e5+E8-Q(6XEp(5^MCHW#*HjI3tO?!NNM?sIHdyxO`qn1e*ByK?cET3`T%DXKQD8z>MxpcCsich$=w zR685)*%9fSIMy7&y;poMfGYW_qZr~|uQjVwN+V*@H3$=TvBd$yv zJXW!V#}@a|-`)|!yRegP(^uUDd4^`9yL!D_L34Rq!L@i3721+}X5OlsH>f9}%h1Zu zUEQYsc|A30_Nn|J{cd*B*fSYAbm_Ei@}Q&YH6Az`S@k@N>k{g%=7Nf_@22yL=pN`< z>KXa=*{GiGj49ACGwa@C1|k3^UhOlOj;PO$Wx#XJ?lv*@*tWdv3mBkzYcP`XNR6)fSMzzjNXF) zJ)jg4EHoujGP$(3Pldb`pLG%()uMo=yL?6=*6pP8&|7PS9iR|WYiDYpvi+8omQal` zBfDCca#oYO+~o4Dpp%sm!s-CFF(+7;2QKPcQxG3|=p!FNrlJIQFpy^17cf{fE8ar) zGYUk{vsWNY*;Vd0f)p%?H|k+@kSqKxjh2WgU>}d}#aJ}qJ|e&-M>>HJZd{z6oQ~AE zXCI#wNSDwgiMk#?vEn~`h0bnR3*q@Q->^PF~7=p*2H9C(_rUmdrOSZXk- zkh?SKz3A}Bln%sj;W0nK4q0b3EVb$B`!^YxYaRg2z%njHA+fZaU&o!yad$1(%G+`W z2fX9+I@2Pzjb>+V!^@E%tCn!V1~wBR0a^l6bp?cZJVos!_vd z&$T|Fcqql+1P8J;z1Iq1>at9Q!4334 zxkM#Kzt!I8)8GN2Qk}}0P0tRsf#$5-BG&^|p*cOoc+-plHG+%BHUw!NG9#&sog{~G zB)jU}m=Hn&4lpB*se(TVCICN3cG95onJW+i!x3cKg*M`Pn*PW!^oML@PR(9`FR}GF zfxK3$>j{rJF3(C79bIU|W@44N&)n_AaI=jUAcfSz>}2Y3I+&DIKelZ8ZavJj^Hd}~ zOieq@{yf<6xXG)QN7?2&)napofmCa%qQd8JAE6f^v|kf2!Re$_<6Gk#^K;_WzoIL} znvwRr*g`!yGu=aJAbYc)LnhX1W^tyaq@JFk-qGTIlrquNYrDnSw2&AfHDrf>V<9h` zC`N#ECR~|?6+0Xfy)0Rzl6{dWHT3Fua6b7wsYB8MVlqzGZR8R5X_y~Up z<&4mEui+e{JMwkM;<4Fz;KMxvLM*^_clYTRE0!e7FUULC*dE~t#BSitv}CaY?F@D( z1{=p{7bRReezkl+jf|3-lA0porVOzmFcArg6+;V0HjSJm8g}eA<>y~wGO6R~?%nnwF>0Xm>e; zkmz)AFv1tR`LHl8vQj0UPsNtD#HKCtsHXce5Cz9Q^gN^JESU7B7+Qyn$tSFWIEj+NDGoqcMGo zf)o-~qp)EqlTaazSfO!Dxbe1yu)3MO`d%~Bq*=Y;uYPmrm{^Z+RKk2^_?&f1o#tK5 zYrVp~L?C9(O80*ya z{>|OQOzgWF28!ci4$p***0&Z@oLzV~r=BZrLH*KX24Al@%d7#>K_@>hn;MA9a zSHoDJK^Ny`G^sB>SGC%bo1~Idsy=w5kAB!c3E+Vy-kW42S8Os(xKEJLIEP_HBm)2A zG*LL&U&KK+BmH@AhO~2+w%%RpQaa-IGUj75B8rDZ`%$K<{yg6Ok^5oH)_Ees9Ih6X zu^V{vp<3YpW|}vI);dzeq&ca&i7CBy?4jD-r{A=0jTo<zXxX%yv}^Skumg4MgX*|G2-Jv+Xm zMk$-=J1qzzM2fEl9&Gg`{FINPkETh;t-X6+NGLGCuY?`>buHrokA@WUvGX=prmxIL z?f9q&3`uGYR_LQRkoiC=tja8}zz+^B@=IQ3q5$K7)f1-TX(S)&PBZ!G06M((4^XP1 zcHnz)N1jj?dbJU6m%y`p#x>%82qZ(1(jDYQ(7fYWTOhf~u22{KmF^+~ zo>gZf%+!31m-cPT7+#{T{bc^&!AMDFa zzA#oS(b?#n?5SgRxFc;mF&|dPoq4T!!ATO`m2B6^7^HJJY(P54!QnO z5`@wye3dd!9`+uk&qRIpggWRNl5c`gA`1fX7Kf_}kTn@;!*|aH+5Kq|!b?*&p!81< z@lAGfh~b{p2)F9RIzS=c2tNv%ol&|%Zv{N7!fePp5$w}aZ@{7f;G#P7pO|Q-@=DOE zO^9Idp8?7_3W;B62vy&{)pV4|22@T3=nAOI6VAZt3vqT3saZ^b<1-eYj$Fj5Fowji zN$V_C$`>UbJr=+)Ew3$KkHEA7)^bP2ix<+kI^MUFuSPXb*RXl}Qu=v6vXOE~N*9~J zG_zGZMDbe}c*@Gw*hsOVo>#&E?shG0P0kD6%VDEuWr;k?N>}2G3sFhho;nx17&Tkk zj1isn>~KT!iF0A_lqKIbqKf*o7SwGv?ev}`48&`Ap%Y+#GIfAEJAsrJGsUSB=K#po zOd+<=X}0eJ^RPh|W}~euuC>)Ck^+SUXuC9jSONZoG4uH$^WFU-i{m7z%5K+1dRn}d zbvn0PS6E8=nTTGdHEzQQ>$xqZ72)VWa@%fr^dycT)3l>{b^VuFQA}-@98;g9vr}@& zyA!=BYMa2t%gM^tgCG6#LvyRll#l<$%AvNb=FCZqeuvG>8EW&m`g}lWDh(7Db*eUGx(EIqYp>RjXEM6^ADL!lh^oU1LF)*J6KQ zprVV4S*PaC#sb#n_DYTF6ZpF)$hW?lom_55U8k1LTys6sYHf}AjUBwTjopM6`sux! z9`>V~TeB=`=8Q>MgG2rXo;)DqVWkP;y&koh+|IT>Q)Oof^YrTG>i2X6rC187i{w2N z)IC(|U6pqAy^6w6jqg$|ILLR)^VIiW(&p9!=#NU*r!s*_t*r$VYda-1@UK2s>dl4J z9V~e-2D1E?XShdD5S^J*+ zUOq9M>ydNK&d+nnAAUKkSkW9U-rBlyH~y{5of^2uR--t3P@HZa0hZOu7MG_N7b9?2 z$t!5*f;tqZb%y7cN}sEMDIJ03C)kZQ{`in*TvagBI!<8ib+l6(EOXd~Io-7goQ!4Q zVI7|8Ef5=axpQMOPp^*FN(~*S#pfxkx@(Jd9=&x=H9I2!eA7##0;A_N+aD9H$_rrL z!YW#8lGUCJ2aMBx)eX; zA1U3*qL({8y5nBmNx$y&A5Vs#wC?m;Z(8Y{2``Qv5WS{Sxud+Dh!*{dFX-nMb6pmT zzsmNZ(?!%B>tq+XYa?eICtjPeRleWq>eFiMX(hL=*=#>2mLg88?7B;;>NjSh>?uT~ zkt&69+T_zn(4|&W@hd)iYg|kxRF8Sc(s!K}|8j@pDT%Kw2T$Jl$7D9Huc>Qa7Pibv zR)$iL%gt_O|4+)*Io16O-qMSTjjTW27i=}9dps@(Ft4X`Th}OBiI~{osvs)76t%}p z_>hA8R6n{WsO+v6_>S8hO2MxIlULo?TK}Oqm>Z*au~52`xzYL1ejVzbqMrCtpC~~6 z7-me&1HeH5VS$TVu`#9?J`Q<0uB7oqbm0tRwM!b_2yf@80B6A4o9eC`Tn_<@j~g)y zo5s|+-Y`rQF$wC*?37@UJ@^Rjju!VmgMOo4x>vgJhL)Ph&cFu3!yOi$?!*U^VDbY|nVD`Y0?P$mz=@i)2fG(m%)H^*RUyn-R| z@t)xke|ox)$&h5OW-;=;G`Y=i3dzVtlA)<_UvQbs-ir#+ywd~nA^0>qElybmjkJ|=E2b=U7OjX`R z!LY{aZ>@+WgD1-0#o0>V<=kc7Wz-6}lRat}BGq^>R0br}h09lK2A;JuHJfEsf2VVl zS}3+8u4=`=?p zw`(U=fF*PLvnC=~*~r#gsZqCTCx?gU-Kki{Ei30NsW*NgEPfO$eh@5vWG#LKEq=h} zzZEU~BAR;n*YoJEUL-%5ioV7YCwA#a!L#}d=`moyy9Jo#LD01?qZ-n_qPnE$8pY`v z#G>06VuOK6F=|l$L&{j84Lr?W#xZpt zPz&-5K+BIk=Fi^(uOLY%&-_bK=;=V|-j+)yn^TY`=-dC;pb_kOt%e_RQQW4NQNrfD zuB60scqhH=l6jFGyNpt?OBoqRSq`PvS6pb15+Yxt=%q`drZkqNICek-dDs<;xKv+} z#HqTR_(Juyj^@$LqBE(Q$_9s_ub{N_ZvKxeX?7oMWz_A}<}KWH-JvJ9OX9~G$&H_> z1INeRzvqU?#A9|coHaomldZJmt(O`c(T-`2HO#xICx*XU5ooAJ1aBCfBv%mKgv4c|H6T2{>{t%C$M8>|F6Q1g@NtggdGDD8wWlI2m5~q zb~H@?kHn6HgYBOSyMLuF{~f=u{SW-Y$ieu(3A=;|+aUTsA}`-ibPFPbM8p=v!O4R0 z>W>A9zQ5`rEX&a+(!u=n;>c`@X{~eaHmzc60S)Dt)!L7yWOIQB-ShMP+%&4cdi(O3 zr4(sX>|ZD^4KHD$x>|M2AdCPX6f+u+*Itc{R6E&6&Os2U-I|c9X90G+}{~lHpZ*9?B0;H)j+smT?7H)68+YkKrIU(b=Bu7qS{0^Ab3iLAUSHIV*8+P3CtMx6!w@z zc@m9czJyb7?L`knjw0HGdcbA|xtWipw`CuXuiTSAWUREPRzAjiNrI~BiSxG~ai)x? zP#0J*YO$IBY)0(=e~j$^wwr&d$rxDvntA)&zss!us>uFBgE9WQ`1%*k z^-mBL>;FJhZ2x0N9RFiStn~jIqGDoTVfgQes@uamd1;B=_r~Yh?Ab@6pF3%cH#pc> z@Hgl^s30iOA5|pg#9u&#;)vqEY(m-ycLP-rS`n*(he8Mxr1^=jrFMGeJCJRvyJ%3G zOYU33mB%JuHo1^em!BVe{C0kP^VkNuUp9~a@tkHj+%gJ`RLqzd3uy-leD0cMY(DX} zy}$?_@qQb8?6crtdU{`q`^OOw)2OevT&^dhK6nQwI|c_^rB=7uT9}Omv?4Ixh?b3a zbhTTIbzu5es}04>G0dZPeRJ@4oz+b_jGc6}i|iNxx&0_pL$L zzo@m*Tw%@Jpb`9p3%8=ms*h>XWw%dNH!K>L6kzJa)Lz5aHQHvylWb6BS^kGn72qQ&Om$$4R!b7-4pWxU^i66ZvX`48r-FGXce zg{q!gTxjV)Fu2b52RiYOz%c$6qJz8p+|e`s`3*DQ5s)vjWt^Xd_y)zmsEG zlk7hSUQ5ZLmjHPMr3G>Z+<)an1e{?zP;5qcuVMYK#pLqQSrfr+8|=|FGeeI7Ddsfm z(a-sAbvP?fVj)R)ctdjd2psZokL6%K0aCZl_r!M5a?yU#HT++vH0X3+Ft=*AoxxOw zD0gB9wfJbBK$Wi|pAGWFn=H;opY^Yee-kv!ndOban;L&_MeB;%0e(dNNU-*?W|f&C zG<|VO4PecHhWLni8*-~owuJ!tO|Y{YvP~c&2BL8JL8pIak6TaC-(k2Mpn8z$`d@Z? z5s5Sew~ug-a}Typ7=E1c-F}+@$8gRjne$bh=oPxv|9V2(*Ysww9fIE#yJJ8k(Mz!N z$mq@Z$;Cr#FdQ-588I8|70^8tODnjT1JA#jk*D*7`yzY)^@Z{Un=`D+jY>BXw@1z! z+Dix}LB=G3wI-TNJY&z)=GB(=hUkmv2m2%SZM4T~5Vc4=H2sg=VtJ81SH42u=>grO z7kpDI!yS@xTY7W#!1D#^jr8{G^^+rf6eZmi zL225MRQk)ZC3ubb%)WQtatQL0=Ed_R*|7&moebMwZ5nAOUmV2R`|VeIqw+=KP0bvl z-8!Ua5bhxw#MWuKOS+4&Q=~>o4YJ-jospiQzVU_Lhx+0P)gRTHSE0G9fy;K_lHVyk zvfq9=(L>z)68S;$^oGd^)VMvspAPj++q2XTDm|FEOKHQ{31-{R+r4@<_+V@%YZ#0`-La%gi;z#$1xh$s;?{Eg7=VxWPs;Af9C(5~e#Dzm8N^R4_JJM=(kw(9!pE!5 zrsN(DqOe>5^SY!iF~lA5BQ^!u!x#~Ef8O5KDbwzY%PFrntZqzhe~>$N4^Y}Z?5WTG z@$s&fyvL_QzY&<+02#vLudPu!0ktnLitvfqn_0B_ynE8`5&XROS=RKq(z(*tlT$A0 z!Cv6A;Q(e!U6UGc0|ccmBYtKRY5b3NeH!kw|YBa}tkkk0JKI*ewyo z=aK4Bze_*y4vO!*)eY*#XKmHpCgw=$40%ClIY1pSI}ueopc;yPtGdu=`lse&@t|poOZb$k8we9RBymD>AQWe6}kI!k{wqyAOxBlhqI{e8(4W|(RIhDE`%4qw& zJdj@}x=MM8kc*^?=t~g`Zn+bP3m*FoV&4cwq#o@X(j&ZMh;cj|CR+IW(T)1C8?GAv zX_J5%<3j>K8Q^`O28WPPEa#0I|^JYTL?$Pd_ZM59+UP`j-Ep`gZY?#LXn zi5`4u--jOLLjgm4nev*?e;Z>pl624c6LgoQABqLQtW5fefW*wmO2nJmWFN*qGDy&k z)uaZM>Az8chKfG&$8j&CjF=Vc{TBE5mHeCKVkoGHqbETNODn)Pz!%P`@WG0>j{R}G z-E(LV^5|eBC5DD30vRoamKr^Uk1;zfD=8->13?nrG62D%oWeJ6<-nB#$2DuokQD>A zf>5gPuM;RBK}m2aMw7XcVcaaFM0Tq5P9BMvStouLeF?w(eV zQ7(CLCS_2y8aw4AZm}e|>6ETgP!ms=z7lSit5Wbu(>cCx0i!FWkJLX%fPc2cJx$F* zVY5soLbX<-$3xNxMY(k*UlvZrR`o%w(5C{3AB0~)uFMASS$Yr#KbPX*8G$$}UrE8Q z%u;d@t)h@8+%ZEbGga8iY)PhE5)%C4K}_`SaHv2;0XY-7IamXMIfDfWg-ncOIeJ-8 zEU3l&Lln-s2QU+f$`TqQB`B3yQx)YX^V9^Zg}z=L=~=^f&4U**ewB2=s+*qGZezf1v%R^8HqtJHl!X(KvtsZy zQ%K2N@?c3*8Bzv{X2;uwNIJ&P33;lAcJ<)p;_J?6luu-XyOkC>TD2(nJgY+Sg=6k` zZRP3RdCJW}_IuPvRV%RWV=|RkpIPTObKZo}A1c{`%(WBpD2q731%HCVbwgNBMYKSM zm}1=r^(K!yb#idOC-k~PDSc7R!tul5sbvS|oPDtnX)E!KPgr2M->|+e4w6cYB9l$N zLFD3ZhuD<@-}Kn9VE_-0WRapV`qJ5v2x{F#K1Ufm3?$1&%Rj%~#KuQFBA!mZ2|B;n_w`=1o%#ht)IowOg!WmoK{IUa}q*xx%@19l_FHBP=Y zs%%G+j}8h~zw8>aklt9F1X&tU7cG=n*+?z4m|hCi3H>hHyNHopq-zco#SsZ9uqVJu zy6&|NFw2=l-=ts37)x{!kNhb#fR`%(%fsc6y}GdAKP0kw#CraVXnYd&>h`!aYZIq! zw?lV#XhU@8ISxz^Uq_ANQ=4E}Y?Ww7DnY;2yV^O6RP1awHy6=vG?C}43Z}k{(bk&V zZ6ptFgP(`sttBE_ByPZk#MX{gEbRldY(o zfmjHX4gZBVyNHpbo}=Q|swZmKT!?_yY$_x!c(I@A0r>Pe@H?)>=dUKPPLRR8fbIma#{o?qCFJ*< zFWqZIAUY&o%@_!*Kr6>)EY!U~8& z1b7s*m`o+ai77cK9e6*eS!T66ji&(^YQ10g2VN`EJ(iXdt@eL$K8W3AgD6P`6l+E2WKb`7)$og~hf45#tko0C#7PWt+l}O9vq`qlgl(L#c*RH#HEGzCb zRBbf)?su;AF6`vpm;6*C1IRPAZRbv=QJr+2dYTVe8HbgQQ zp6<%TLUJ=eGij(6Q|ws+j1>$1#GVCfh#B#r3Yjc4na?lGyfik%w4$6vn)1IoSn0}2 z*C_)%BT=|(`4BIOaAqD7=Za#BkVCjp1zDjB2F1w>E@TJ7=QJE^5{)Y0(cRD`{)Qij zS}#srhtKgb1ro*7h2BsOqNAOFqj}zz;&LxE&Mutqarf+}jt^ot)n@X#SNPN!gf{Ov zvmh897$EUtFRB9~R$D&ShbCC=)m!0`%FR#m2!^Ub#+j}XUj!E*Of;LOh znkAku+ViyMU50M({krX`VNo$pTW8DZBaq8Vk*Rr6Luq)#*M{!iG%YSqFIgpX4u*IK zQLB&d*QS2R)~nEaS$%9doMD{3NeQDEadBjpY36a6x_D&RiBl45w@)s_q8kUWuj&&!`?X9A=we$id?owu$7&U zML>5a?hX)7MQ}G=I^*?W&97`+j5Jq1m!TbSl2@N#^ct21jOr^dky#Q+Y3@xr)r zjtc{y(-p}XEllZ)q%S;*TTq$%o5^;;Pr_ugD4q3>Ks`tawuc5+3l%m|U!Be<%4PZ6 z2xvJnHAlrz3Dx}zM3@+z^)N=QsCoEDqU6~muwm?P-lMDUU+y{Su6sBAvY7|be zn!mbcy0*5B4;6+C;L(S+Mw{Z4(M&Oet76ON?TNt&;|K~<0+A{d%InCwcXo9*bx9%5 zu+QDkM6TPmA{yyNRsr#}o3J1FdDVq@rGDGRw?lWtu>f?|GZesjDLJ&8b@`xe;~13Sr$qE})ZY%Pp&VKNBGj%+PK%;I)-h z?x)JedFp>c8Bl{rnV>-Gl4@tscyG4g4Zm={Wo{5|5OxrHxj9T6&kvj4dcxj5y1ia= z${S8sPUGLZF_|zSiV#2?k!v$B^&-WcKmRdO~J382q^Yf>W7VnT=3tr zHfe(AK}9_^wZfp&ngCq`FQ|^bvufidXmbfl+?OJtfRmn~%O@PqeM-J$X*`E3K&GEo z>MI_Ki^1V)!5wrL0%-voS{>w%gM3~D7CzMQdc!py-oog<=C#S z$FyEOR3h6hTR+?Ov-l1P;Ey;6RsshCk+y57RZnF+z$(2Ae?`joZTa)PI<~5t?UVVj zwpQ5_<0CA(Yi9_qA1c|E&=ha0UqHyC9`2$pT3lycojr`wk6#HoZWsf5X{nxZ`YTQ`&3_Xj5Dhk=B?)tjgitm;F8RvDV`MPOza$gu9#@dgzg?_os z4=Xp+Z9ngN=UL=v)5_@fr9qd&4eU>Bmo_9a4rJFdd`oq(>RADBaXcNerGUQ+g%*m$ zAn+LIazcESJGZZIkbekoc5P*0(Vk#azdcDB@{IjVOF07^ujt?rdC zryAfRX%P^F{w>iWvkEcUfbYuJ!}46Y%Ekr_F`YYXWypuy0p-^~@ysm!^5&5+yY5@` zD~0lOlDrw}OtEm>-%(OY3L1b!vYP0C8tmc>iUTqUj$TUcAFUjb9P+mJ zw(oP#H-%;o6`g=o<*Yo=D3-<`JBd%uh1ZMsP~W(tH*V(h!|>+>H+{-;cHg#1=tUAP z&M2Tu`}o5hJAr7KvVHtMMCDKUT(W7>BpqDf$5!3ju;*D^*e%XN&iRT_4l~-Vs9!l>_5}2I4Oo0wS zP=fz`tT99LRRaT$t~PUE+w1#kM6`y<0%yN+lATBGUO@&B>6@yB3s|A6I-rll z!^cp!h5(uzt|ejr;qA*UZWv&&GFw_%#!h7Zg0h@KR!qF~c~y$E$iv%ZfzH`XSuhdy zhFw2hKkS8U6r7QjpT#ZBq%fsRI;PrDZEN=nka*3aNli1II%(1_H9!MqUAu>{nY-7m z1{uCn)OSV!xt?u`IIrJ$+@}BHfK!va;CNh1J>{If4DaneKo||*yB$&-VFPg!`}G8G zW@oGIx^gv*L^qyqL%iuV?xUI^Eo%-`)>RK z;IHEUbaITlCBHAwJ8#Df98-3pIhah#yr4;(3F*q-2;p`OL-M*DjOflLEKfub4|jpS zclIj8tw9I`THSg!=otw)1FuGFKgEy;vt`9h25$ZZv_lQb^NZvWn=b9Be#S|K-HrW) zvt86I&8hMs{GmvRU$#=o36;~Mbf&k)%RNsUi3Uu{nOnW^YZL=7U+~*na9B(3t?Z6- zbXqn4)WK2)B?v>mKoKG+(@haf^}N7Kcl9%MRgh$eB!kuQ%b$RYK6(^3EyACG8XX9&f+$9!s=9 zX`6VP(1~?Cv!YKZ;_#5fEaT8l+5)6=7F(FtPv?lkBxkh=uA!KFQbaP!h2m08tBbpY zIv5KZforR_BfCy-YIMBIU(eJI*YmK~f%y4ZjW5Ed6T@mlwWjOmJB6w>;gPGZjpO-v zDfRU_?|OUdYxH^x-|;}`H>3-`o5`am-~IvJ84@fB2<0({?k+LzVP(8OOJGj0 zerjO^A`f+c*I-1$pi!(nR2->KV8KGH5Ij=-9cyen5xFzK3q2G5z94_z9Tz zb-JZRt>coRr|a^s@#D4?&g9?vkgCZ_)kZu%+y9Vd<(j2o;0 zO2T>Svg0-^MZ>Ov;;5WztlPVy6%%L5D06$0j_rR?NKM(2PHnN>j9z*ZP9wc#lP6w_ zqK~3P-a;I?9jx!*6T1l1`{C^UQ-UCmahXB`H=`ZGG;7wJFrL9o)ueS&!hE=nX*w)t zSm$vbaIJ9p8Xwqkf2DvOY=SptjZnwuon=7L{nb@eVDk9Tg>%9_m87=|C!PQ&hHfD3 zk&;6jL*>z7Tgt?g(atKL5N1{?D95_=#DxhNeB1xEWtKqGJv^6#mP_9+FUzJ~7WWqb zp=rG`7%(bL1sIl#%LDtsb_OWJTfKE5mY@#Ynqf^7sIZf{I-iQ{{hc*XeA8iRcQ6Nu zF8^~p4MoKq*Hs7~&dNY+=4G8b>-yn(0AGSWC`YjkA`NmWCBYJNq139&nzx)UdSYc(iufj(Lr`_-#9#&4ftnyxPv- zY(qTw=Az+Hcm~??phvbnE%FoZ4(9>4B2V-oa}fp&$31~FB0A*d4Lu?Ms$tk;I9oc~ka;QYP5t)mK$m9A zbl;9kT*pOG>fX5+tNl9$z($puiJq00dngtCQ^HlRImxz9>y7C2TZ>>h+(UJKFElYf zy@Uvt?ojSN7_P5cXzAK84(`d*xoi=TmMqHsxVZ{2I}U_+(&Pqm6`t@qesfW8N9C(| z8u=pTcy;wepZJaqvv@@2X^;^{8Wgv^LprIsx?PFiy^ns~=rF8PQ+NCe!s*?-qipJo zIYGW^L=6Jv(>^0V3|BzE8x-tj%$NhV&&5TBm0m+EC}+-nx<=jy+l-pzYHInD^=_`Awwb9?PEJ(uw-K(wVc772TYA@ja+?BluJayExB%S@U zdyICo&gi*cp9_&el@MEy%tyWs-Qzb6BW*}D-pfmC`nid zhdUU1-rQ$B3POi=bmt)$tErD2B^d&BuykrUKS_g zNJtz3HDeWciVUit>f*O9oWg2wTPm_B-QPzmayCGBZmK{CJYz(RWuWw%u|$Fml-^5v zF@$4NjM14Se^+o-2=VCG7(aKiJo75oJB)ISyauz+s2iqfRlyb)Gl*-5A112k0))-w zG7&ayDW>rOY^@FG7f=9bq1k~|EeYzRlVmV0J!>xQ94QgkP#1KEpGUTzoOYo z#OG@L*h3~L6=)E)xBYCNL;v2Yl#b9xZB)0w@IgbD+xFiDqwcz$HR+}Tqes<<@k0@Q z4~TjFIB(@z^{lY8td*m$2)?NY$=Tv?4x*q8Td%(?3nEZDUOIzEj-m5RS8y6mriQ|b z4I6{B3E?apYhHbYvfB_CXFl?E_Q|{zuF3~xEebk-me_M#5-R|dSO6P9lejwM+eq}-E;MQz;sDP`TNKTBdFny})P$$2ACt@I0V9i5dmZhoXTP`3aBnQuu zKMmZoLY56jRspj|6Oo@nNmXu}#-T-@F%e~5l-B3DJO)}5ZM&s;ubw4sm^UiJewu3L zP{-9{s+h>H8DgVzAnEvYrJD#_yz{;(R_-B@{11U57Lj?9uG4j-W=KE#{2y9Nf$$68g}Bu!EIaDo@oI`sgSnW`RLo| ztHG#x?KIPjR4qIW8*MWkbju+%Ry*reOOuTNfM*a?2VYRA8v}Hs>QSR0Z9xz2?&|ES z0BgYx=1c9}FJ!PT(`;OP=66a4VF4xzEALs7kXlxz&`L&)+>Y^jc8}7Q$$HMUe|5Wr zG@20al9^*r31m4buGg`bOCGAl)4u8r9Nir*{uDWwYWSQUs(2s8n=G7+iK0WMUKFvh zA<=eZrvoy)KE_YT%9n|1{N9^KuBP~ zB@xK-c=1Z;ebtlogQ-g2I~S_9Ff30R6jv^|vVWv}(TFkrPMC9+h{T3)_CTER(K|93l@*%%0cTMHX2cv%-#6(Hzsv zY+ao7@^5Y(6Em;NaYh0bq-bHj$Iwdk13JX4=&RTGP}-qPzmeh2n+$u6q93{#EH>{i zCzwtw3fD!40a!L!Ds&E1v7M_fqFA_*o@k$NK8fy==L=JjlHygdm^{C&Mw?pNuM4h{ z=OL0alZ45@;uYNWhHtkOeQCEbXPh9LKyC8y=~K28jS>yov>H}zo1#+ht%9#(KqTdO z;d#Q=Il5DG`#NxH1@H!U>5v7E5w21D;Jii8^n0$QdTG@|wM3^*`<9zlW?5TKuwhHo!`V9qY0@rxzir#Lrfu8iv~AnAZQHhO8`HLJP2-(s?e(m^ZnN6LfsTk3;|n2kRa>E8@7?!dbRIY-bHdMwryJn+w&s4 z>U6h-`I{|YTZh;2Qq+ko1h`3$<6>g31g__XQa#^pMCo~;P^=vj<2jkON3cSkW!n!Q z!8WLsI(+Z4**2NA!_C8O|CUHw${WWU?4G?OY0}X&!wKi(4z6I?BUXWsqbvWTt8r3y ztrCJG2zV%X3R}lo>>wy^c{vu2}wW;Wp`w9D9W)9-Y)(Zw+HvNs>~}y$7w<6 z9P@s(t)pnQce|Jzn^{$k$zR8BrokTIY1!XHd$H;GsqX)F)k3Y-ah^=AzcJADX^vLBhP%x%JTb4n%xY|< zKtfC?rC?s7%F2O2IvqDnwWGE_TqDaud8PHw*>w;n+Z5|NQSfMB<^Lgy8Jg30XGY5B zF?#FsIec`K&Q?Xa?!9kWbX=kXw?nlS0TvBAif&ZNi0|FSp)|c zk>&2ZPA>p!U=`CKp+1_dNpZ(Bw&WqL5G3|0$ah&7H#oPyqoYXH%-!;4^}R~F=5>6m z)J zxDzQmrQmVEsHAG_906F4G|9LWdn|K;k<@`iJ#*mcLb6d$5xYbLbGCFmUP4ZSj{q-G zZX)u+PB>xap?Ip~MbSoaX}I`_(=x|f6jnlr9ZvyOZccJQE3Rb`9G5{a<~q2GEbq&< z>+)u#X=PbdRp^r^&vCt`^$AJkgb&U|La*RrEjqB;-k)d`#?Jx{ZZov`GYQuzL1fbgn0 zpKFsMU;Amgai)hoY7a{buM5QrzGkf0xA{&FpU?dO^yt{{(U#VypwVHK5xfW|k!WbkmB??e0yQB=?abD`|K6 zRTBgtR*O@P%XGBL%ipD{d@(fyD*?d*NKI?~HH~NiE~V1dpLyD@GiBH+IsHVj8`iEI zr13t2kd0PE`6(FUm%qi=p`+QJS&ma_vwa>4$V0XVIdVVRoX!XC?@=AecJzAcB%q??IfQ$K6KU5> zwc0fD>TO(mtaeYn2mEHMnH^dz=r>{>&?}Y>HDER?ah+bxVh<88mob;#TUYE*3`<`b%$UWL%~FriphhO4sbjnS7DOCL)?yZgo)|&?dq9~ zb%e6ze!r~c)3}iaCi_~G**;2z?!w<4ho8o1 zz-DrS@6YfwGo!n@7fCg?3B0*G=hk3!in!O8zM5zna-Hv8NVhE8kXTgx4sx1FVjA)6 z=La3!4TK0nI!~iK&dfhMgcT#L91n>7@%SpvW?vHNY4VYulblQW?GGE)CmX|W?A#9~ z+-3%RFUJGlaeYEH<0B9QYp%s`_1SN0c(p@zZ6l2TxGmn*(cfo0t_~J+LN9(yt1W?x zuF!0MP+r5nk_q!ft|%rz=~h5g>HD)sQQx+t0xn@fGuaP|h}d1`hkR=MkyoQbb4N+gRepmHZ2+k4TPhLg2xY@VaBs%3q4dZMNruM*I^>(2x z$s$f6ruGco5^B|7aTjjo5lgqqlF=URUhRsdk~+hT;)kVB7TO-oFTB#LpsQe?8=*MyH|{Q`kSr!Bl7rAp!^-IAkF*H!B2Z_mY60 z5{;DTynlTFU{1my%#BRl-ugkIN04Z*6BxeDfu#itflcd?cpFvOfJX+Ny9+;YQ$o#M z(fl+lh}`t3@TSLUN%t#@Gc(kAgR3GYIe<2%_`VvH;)Sg%fgtJ~|h9d8(F z&>Nxsl}c{ViLWF1s{}pc4f$~>`rWAx+a9l0okf#p=Lps4t1h)|lXbtT)7m5yRDBvQ zs%ofw3=LSvEG%#?4}7a4%sOSrpEWwBPOzIi-(r66XYxK2y|_g`-ef)6D%yHjw9aMP zR1EdLR#?Xtu+4sn?F@?H(A7iL1vyQ4so380(AM-?$h{J5&(I(-rG4MLQgcJW;TEiS z=P8AWXWOA8acX4GI>fr*w%7#TrB*Aa<^2#OY44Zwc|0^MhzO zea4TBOPr8$4WD@5xKs(dXpG|7*6lKVY3y07oq>)>Q#L3I?2w0Hi^Uy?jAiN#12sq} zII4B`wKYg_Op{lfuF1OtW5A&Fe%Av+?VNP+#g^IDQ$2q+D;NtxgDSK zi^NQe2INiZ$Q7z+qk6Wik83gI)~!1{PVkuBmI4yXB^x0<0Rn@s)Ai~fR=m(0c846E zF@Cr|^*o|e!Y*0WiIARz&mnEZiJJ}pzuUqHBD%))(5gW=gtq}1BL|cEv8q?sLtoBa z0*8O<%?M;v&MlwrpAxLO+o=RaZ{=_j?HAaJOt5cVM9R0%hc-F~*I}IEVKp8w7L~?? zlgx5t)so(z4lagz?GE-H*6Xov_E>a0E!oo}V?iM$0F&FKuPPC1rW={CwLfO1NDgF_ zIm^m8ZB~Ig^K_x&h7GQVB4tdaq%GiinfK}+=&V*8%1yrYoam^#1Og0ETnBD zcM`uq+NU-xzIMHKF=Tj>yr|V+9-$qs2#)M+$~g{ec`)h#-qEJ~5Esz7FKu6&E=Dm@ z^iQo~)pU`xuux%L-6IqSp%hHA2}8_bxt}!{YN+wi=FzYDk%SGAetk{_^2<-R16xuA|=U zU6w=raaML;uGumSQSRf`KX$H(hr=nAOOdDjVGI-pqg|{i0w@(Arbc0>#G-V|~>0sw;kdj`fD)+5~y7+g?5HoB;6H zIVeFT47-RcB*#}km@rSg2jf#83g3?d!5rlC9gK zo^V})vug&LLcE?GQ7$3!5hjsYmOim!0viM+E2g?O*f8>5KS3Xn;+Z$=t!^4FWszT* z5Tz}ER5$`PP*qYoMF<-UxdAxTln>dgzl1WxeW_F{ zh7`g|T@1%1lcM^G;lK=+cO4*_NMLL@Cz|O{YXi1=oTKsOIi<9&1ep<1cgO7<9i*S$ z0Nv2>{$=ZkyKv(ZE>0BSQ^?ot2a2l?FJ^q3at=86Pe7!x&@ZW6Wz+K3!RO@#16%u@ z-R_we0QbJvkSEw1+bVpIUWDGbUOTTnPGZgx&XEq;juZ=jK>NcIt z7ppO&aXUlJ3U;p}WpX7XgLJuHd}9|6DDGGmtP}JqO0gqK1_9z)%})SOJ=h7uQJqjy z&)ZkTwLc`2K`5uEC$8W)13q@V&+~^0I3oc2>=B@E{6LosQbYh}z0?rb!O9r=G$xnr zmks-EuvqTShH0giy;isAWXn1p0z1w41lSOH$to3LC2~7!Q@lbA#A~v0>3F{r6dJu0 z)2z#rzFr?FG)l*6h>P5w0I?Ubh6ub@GF6V1+Tpag2ks(M;m*lgc~Z=j>+%Kqjf4I{ z#=1XM+XL1GT2Hr3X@SFz2HqY|=hIZavJK?WqeX681^AUanQFMEjTB1I=WHEwJJFp?5uU zeebC32yaip7h=N8;ZzH*+?DU8!aJBLy$h_b5H|$S4*VxqSePz9ua9654^zt*B&u}i z*`Z_rEqE`B%kDmwoVE?z(&+thXd>z;+i1)s_yRQcJQUuV+FbqC`yci0JuGF z6nY}q76}1wpQTsQiF>XGz|FvxnH#o`hnjVc1%^@S@BTcQB*_t@Bs53$dSv)d3sSP+ z(YLvkA9qo$wuL-lBPM&D{;up!=`~AGX*>nSVpBiN!wXF^fs3fNYc}YKmK1G=U+Jq9 z@V`ra>Q-iXn2q6ePZ1b+uw7Rptmown8;de$szQBQ?SHqK>_P*Qys>x~71qt$X|P-G ziU=?>Lr;gW3}6L@@h3-sDW~WSahtM}PU0l6RB8a+BNvf>#n(7!_-T_YS{_<=kC2m- zzv#gVIUTS=h%(~&42e|-xquh5sZM>6OWDnrDJ>m5>u;np)z>2P76%|cN)a#8Z9LI% zENF7C(LNpQ?7z8xrE{j%s;1uls<^m?J@@`#J@b19{N{S9veG z9|mpYkj>85DZJj--Q7`KXu99^-BPAh;b^eJ6d(Fn6mf8}`Fc@C=YF=P4!SisZ2jL+t zgr^s&r0z#h%^Vvn?`_l|gRr4=)344&qAswUB8m#LN8;3kNJi8%=%=7N&7+(1R?$6~ zJ?kf#gV9s(BjP8agVa+d5%-Ai^xLHOqC0{eDx9CWY(2wNg|ANe{L4}B4=+&gl`q&w zMOT1maS}#yW`W@sD4+m=aCk+$3z_WD9>T8kiTR|=CI}osq&eB-WKqWtrF@W@NA0RG zU3pK#(4Hd7{&nKL2|}Wfq@SY+`s~pn3a6H^c6H_qtYz>)8x?BfW`m*ewrwc%iL6wORO{e)I0;f$MvBNzO{$ z@pR~-)o;~Q)M>DPZC-eZsQkpZf%Z^C%1$70cnps^M*+!$7!9W^wQB&BR1(x5*uI(c z!dG7)mQE&|yF%j9B0bqYg2k`av8%kuw6{^n_DwozOhqL@Q`j$?n(UEtyyiI)UDKfL z9Z}$W8~An?VWMAgFBO}?)6vhv@>Vx!X-M9obqSQj+%47|+WI*8F!whlFE4IHZneb( zFp5B4g1ctD7PuBTB6Nm#_4CYB(mjr`GgY<;;0!0OTrdBzz8$wJ8F@E*Hk~KF1Ih^`ZXY-)XHoB%=4^wV4HdbiGXkf4GO&*y z$2WwZ5c?Vn;*YmmgN)a=F&6mYq7S|-2v*Nu5;_!puR;A5r#U5}zR&Cw?#3~e_FzfD z@OJ5q5;i5mS;oxK&L0F^1bO#(I|}#Ax83J@mwP|TANb-=ugGSny;-`+5Ob2&u4UpU z;s}6^kWW{5nwsFf07_S=XFF$C0mupxc(O9NJ8W8fa>EYpQ60W9eS)fFL>pSpk?wZ4 zGRGe)A}>TQAY_2S8BBF&(FGHW{hn#J`&;!5a!0vvh^`3IaTN=rme1rsX-WM9DA`wX z^#@NexBe@Qk1moei`D3hJv=15IQ)+nOqT<4_TgA62G5{hI#PRFyn=!#H3V8x=!xF z;DFrOeqRFK*`?J-o2o1P#%qn~6X!BPH(hzFMCTZ{A+>R9%G#cuTpBD`j+m#eYi!+r(%phtIFfumN(>QruvIUPW4zy3$U$AW-_#@U? zk*Sf#K|XRAqVc8&H`YX5iV)w8$GaUSqtWCcR>M*slKJ&%c5c+=BK&t&-MN-jM3VyWYMR{U$n?W~whePN3_^WK8OC*U{f7$lcQo@vuq zr?gQ`!%uUDW;IQ#Uz%*{q|Oz4qEbCYeY`+xEYhc+b=}k9(Alfzubg=X%O@C;+rW#R zpU=;WgQdGdr7`5Ipy1ZB;XI|YGfw0#Rz~DAD+9i#-=|VhJOL_gW_MO|hta>$oq0Z5 z`7AGpnKnGrP>{#Ae0_)SR|KWr*c#+adYztL@h4|L0|+m7O#GW)@sgAidZEXQa+w)e zfn|8V5A?oo4b_oF#F35*f4?o8VSS4=feuL0!djCU*OjV8NAw%V^O&&&JrMem6zxFY zlA(PeZUNiS9)c5O(M-j{3%HfulC6UoLlFw2guK%k?`4)j-d_9Jb*hD&6L!JlRG%o= z!O!`GdCu|3@38E4$+sXc_yRen7c)2I_+rr%T?uRg*x*GAwU5WO#OvbX2Q`h3gPt zEp#f}q#R9dp3q$`K1V#Tpm&JT%t~RaimdLm;<|Ew#)XSC3^0s5kV;)tzIh+BcHB8A ze>!&8>?Zemd4>M4`~X*)P&_W$OuaX$AdilM06pwWT;I>bxRgsxWMV)}Uc`47c)aY7 zfSThzJ#all6)&_cJh9U)7?SfNa$yIMkJhA7Zx?JM?#$swudgECR!&UGXRxAbS|+PbQ0bwIGuKqN7MLdk8~Wb z`<~UGq){QAKp(r=5Z_N!6zSmcC#^lBUnhJ<7ArNtPvwpjXe`b)@sLO#+jUO_MwRq+ z|0IENN{25u(3I0lqMz66#R(~tJrP9$^Qanf0r*a({ij@OB{#tD>+FIA_Fl{?`3G?GFlBvR=$iO-`SizG0g41Cji=tW%9wj}y^=Ep-`?doqg z3G_*=V=&M2_bHDgFh?|o7+HcRON@MwgIO9_m|3E~4b>Ba^7&Hmnb`X#c9Mh4-$1OH zPO~&}WCrL9JFtrIAX` zlu=m8CUpO7@D2sm=w82_6679K<(i)x==~D}Oq)=g1a?|vQh_OGQGrSWvIbZ?bX{%2 zD6ASN?Oi5rdq6TOAWO0dh!-mZ)_fA67r5G_-UK2u{}JmpwQfgM8O1Kbk!k<%P&S1`nthHQ$mTy5*Cv6u;V;w35M}4c>qTp%7(p4#zJ;je7oG zQk+JQ#jNW3$VwV3su$H+&<6a1hKA?dcQetKmhA=S=dfgrv9~tZT{`_ranv<4Tkfo;gvIj3nQ=O z90dcol)5gLng-RYl$r;&V=Y6f+!Ux4e}kCiW0Wvr-tZ*eg&O@GtBH* z#38$C&V>k&VHP7)CxcZhISiZ)EOGh+m`KGg;O4*>=h zdJ6D~6G3qfJB5ZFKCPFD@6h@`ujTRfcHQAuOE=ok_LERiJ3?FC&DuNkDMVZe18Ur= zZvCF3C-RXF5XF^-_|^vHmmBu{vjTNn*_tF@ExM!%T=|+r{e|rsj?w9G53_Mp`Td={ zxw2eKk>Fs%ruNCq=Cf)lO|BYC%N4TL8VgJ9<)!(B4u>R_c7tHnPUE%vnC11$dd!;9E)II3tvp2{xavFY1epYj?BA;maP3~t!~_xIz3fosVyli zI^@{l4_F`X7->X2YT~EDo&Ke$QDfn+lG;?G-CodaK0YjLCJBREa|!RB z@k^djDE(-fYMr)Zjv{Vwy3XLtqgdlmP{zex7W{mOZ1Is+7S?*)p3=F54|Dt<#8ut&XqO_4`m!|sFZm5H1MPvDl^xm>vd=qVCK z(#G{H(g#{uzV@;-O9EnB<3@nR%g*S@U-=)Hvc@Fy=mKzc&x zI_nZ;cP&xwe(@@dEU<8KmU+>MHz-+*C3nqzpMM^*EmYBTp4XXlSu=L7;`|tHk6D zq^1ga3-D&3yATZ|`RTjYV6DKL`gTN4r#~Klw6U|tY)tcPE8+TK2K+EEZPZVnav9{1S&_(Xn`X7hj=XLt3Z4FT zep&D~$r)G;&OT*(9}jHMVNTDfa2HNbhx-V~3ZVQc2_6x^D}qv{{hjSf z46|>WoBECjIQv!yBnQEAT8bk`H8^|9sj3N4##U7ZRO@PH2S@!hM}KO-Q(`d6S|ilz zOaBN;>rE6|)ONxfELzxhf~sTDIy>|i4C*t07c*NG3%y+eSGvJ>$ZC{~+%&!F@NP24 zdH&*o`CQ{D2iJa(&0(ya^-Pu)2xSv{jxq!sKrCATGhoB_X#ndG^$i%NW=srIBh8&HgKZw1(tLaESF;zo@JNpP5m2fBKa`eo2_}FP&j&&*Q6l zE;R<*+Ig*?_FCk1-~Le{3fIhx#gF;t>(u+y9fq& z|FVl6mjRd3xq?I|@#i-|x-B9B?CdOKOzaZW5iOS=wk4SIyESI?TOj0y$wwamT=3rx zxOGCr;Gd4GXxX2jZJqUTqmB_vyBxGH1(7xQqe?ki|3Zg5%i&W zmzGPxS9Es-1!#-^?!`Fa!((Yw(|IHNZhA43)k*Mi?r+|B6HO zjUN^vV+?SBqYVA*Vd!HR{^Ri|(EIIe;j{0FEGp{^|2@^#AE4;JO15 z0|7Rwz*_;e(Agun0NQ~4{t_5hzj{@2_6TgyC<;AcK;jAd0zbrm#F(Nef5pZaTYmGf zf5|j`2Vf!gUy`Zs#58gRBF6A_BK^jfgXKV6lPK^jfi`P$0QQs$twu~t-3@qsbO66F zoB9K>BRu$5p(0w1h&px9yV|Nh5aTsuk_P1#0gy?6=3gjtI6KdNTrhHmQ*FE4fXGB7 zp6pg}refR$owGWU%j6h|A)*-+*D%lF!GbzfZZf25#^AIx9MJiIYm+aq+g>nmNstdH zFy%OiCTu_sO`u$e@Y5E7s|)TA8$8~u(3j)A&Ih|4_YOgtMAYU3VZJbweQU*J0tf%22`&s7+owuKq2M8Wb(WHZQyMT_9>2_=#UFto6eD%(&%7+5K_8X~Ygb zA~U$gN;oBLU`(O`^#n2^6t|5`QCMu8BtwoD zNs;R;2OuU?gUNl_}wStqt3i_N_#rg?U>3 z)7*Uy{&#|YQpha0i-`>sH;nV%)Tciw_lAcQ*A@YJJkSdr?(U$O2TMTzIpFA|GY@mYCGYIYYrJ;5eoEG{V@R~p4 zm58J+GpmBF`B!8TP#MMiyLg_hjtTzJoqMtOYRQQNd2#gu>H>**7fQlHF`{C|VbWED zGV7$Mda|*4l6(4?xXS|hu>Lzy-wzFQg8QWtOe@kQ^2>ezA~mv8MHFW{mLiiG5-nt0 zwI~ZT^Z7+bL2tF}W&+9}vc0lyu;r<26kP0@v&8+z!s5M*vY(zJTf9*>6`@NM?cMN& z?atopvWYe_`QM|U z)h4pqPI4OFO<_QHP45|}(T~1;=j3Px8H&qtQ_N+x7bhEG#uHW@ZE?k|4kNzF6b{OhB{0pboa@voCauzsuDO%_N!HMov>$ zCcEcrL^4`zy-n|Zu_rCGn%p>GGcyXa^N%Y|-{q5AY#%H6;yx*-@o+2FLv^wlTWxkK zJsg#1&AcCzDQgW&3h6s_dsVnp%y+%2$_h? zu9=FDu@C8VfU{`h)T3{Vl!^PVSojj0zRpB-74eo}vV8poB8{*waBP~Z!Vkww!lQG!7l|Zh z74;Q(3!<>4_Bc`-r4&l<`@nISA+o!0>o~y!Xw1p;n*MtFB~bi+-oZYzHI=Lu@ExJ--HuJYGN*`$-N?372i$1FmMYv-nz? zyPCNAxc>N59Q?|T!&sG2Hka#{g>w#4g+~VJi}6T$b>=j?sn1zrUa?~X9oT!nwRnEU z{v<9B-3bDopG98PTOqIBLv-eK;bP45!{I>0$~8*aDjP=V=tWnk0D(_ zm67_V!2A5Rb4f!x?H@4X(DKG{e3#1AF)g;#RDjpT$i#Q$*a2%f1dar|wQo5;i+<2RdG0m-x zC{U=}su}-S{ccq$rWsXw>4crHC~T&fCjjA=>>XT#ebWY& z@gc{%=Q1)Iv+c7T(+$u45Pgs9MS_2`ti!xlT?qY9`S{_hPwY#>qx8jINZ32vPW=Y! zp>eM|Hk8mihbDx5lTn&+3BAnV>G#ZU?&($1Ub&IjcjEu_B>aD5Qvc`9|Bs_Y zS^qPb`fms{6FbL$j}QIlXwkpx|AJHh7c?5`uiRhtzx-eO{N?`!L;nq#{u>beH<0>o zK=dCE^^ZCO{l9+y*9cRle;$ng15EuFc={hu=>G|-W@m!>``Z5vmgXQ}X8SLQ^k1;+ zzpwv~d-${8Klb@k`}Yy3tpCQ5X8kvgH0!@}q*?#39BC#NdV1#n`Ajc&yXv8gKC$y| z+{l(LX3M&kdWak?6)#GZZc_;sNDz=@Ac%_tvHYYM(SsS$tFs^OMo`rXl(OQdC9#LL zw<>NUvA-l~IY>B6yeEuFjCKCl&fHqYg-HE){X(7`?D6j8;^KOE?@GtU&psveXh^gx za=6m_CGH)N-sfA3I1p63#eCf*a~`C0+SDoeL7~Lx=HKAs--8IfR*5#eHV*~CCPY?zkHYOf+sB3?5_bT4WnAz-D z@3nL`5ePmxd0qZ(==T{Q%3aoxn?Mq?hISb55`qbHa3(Reil)&|Cuys!tv#nO>SKu0euB~33GLK5o6Rh+i$vP6ePNG66d0HZhjpCTVPuAcaq10 z${+~UL=3?g#DsaLC^PgHz8QLOt{4W>XB^^Y`_b?eyX;EFSVXeHv#N_)o{6duWL97V zb6USP7}HM$+VY-ap8Ub~o%Y^(&)&xEwO`BLNpb~ZZF7yi#2fBOO)W2jy^$N*VpLoP zCVe?EF$QI!qaJP=vtMv!`rV3y9vZ+u>0#L*F=b{7vpn^G7d#hoSsKQuthfxdY0Y#L zlB2ia^QdDVoS*u24yC6I*n9dGEto*AQ=NW4886>qx3sFx8KPuWxRGX$IgVaMHd0(}O!94DLbs z8<^li3G#y=gdijogc3AE%!d^WA|N7x*b@wb<`WelAs`}zhz|-Q!ORa9#oP{tR)WAM zS0Ty@;RJ9%f+Jwtt+tbkahM7;#H*|3=+CxlR(I?MeFH5>ipv@%Gi5l7GGh=~y{wwv zmkmSrI)c%fX3D&8NDp$82wB(}F&VlbFZ86B}n;!8GCg*4)+kB`i&qpB3lm$N2; zlB7%`qKKB~%nPI1lQ@No7oWogAt2_z^@H$3jlh=VP4b|ymLE!%cZLT*mREDr2y*4z z<}sZTG8GjHg}{v&u}2bkT~wyUxP@?Y1d#|)1SkfaP^9RVXBAq5J|d%l=XVF2ppxGX zxo1f76=bOS@KqQesfc?}A&MFRZvm`>gW`h91<6JVq(RRcH4x`RaY50@10+C_gh~>m zaLj8GIty$7o#3Tl`|}-sgps70-vxYxOrgu4pKITryla|Oi=>ZI#vXg<5l%V)@R&YK z(g{s;DP6<1lbQ+&QJ)g-`E43yvV$Hv(z}S8{iHQ%JvnNt>ps0;-AZ5knG$~Id$)M; z{PA}waE^cHl zz(@d$h$#?8Eo=lzcuZ{IgJ3{Nga$^afiNEsCNcL71X+r24r~VcIflwK1qSOEQj7$K zmBLdTA@CLhYM zQ}55-uy*G+Aa;)`f0k(beB^HjWw@E}W1wHn`d;^zh9FOP#Ijj94D!yV%-2R*B;ZHB z8&kwi_oM^0Y=SfC z^=P_Ol&>msq#B2Pq?trz?d)W2?df3CprLdpbZ6SD?xsGsR@z=Yy)7!3uKCyFky3c8 zW;g3~`5gU7lJYQpL1)DFeCgMDO~b*c1eDo_FRn+fntKf)Vc1d1ms6oB4luHSGov-w z<+XcFe!gL#tF4jGIA(_KQE?_GW7;H>Q&}FTLOeZlsAi}>zr}*N(p!5s`Jn!KfDxcH zwKgnByCNVlV4UdY{%ji$(*YC3A64wbyVln>*z!_Bws?3DgWV@=L zIhmnN7BeZjH)+-BsKR7KjDZMiVPkNDhXh3A5DegmjsXachzzO%ec%j9w73AM3Rk8< zCYX(Kdb&uVKe`~Og9%u27=kw)qnP{Z0Z$oSL!u~(CB#eG#bxuZ5d;&W4Ed=T;X)F$ zeK3Ll{M|o=Xay0V$}e7)9Kbw(ffxqYcSAI4;5 zq=Y03X@2U0LBz_hHNQ^jzIg`y;z#;P&o)tLI4&9qJerl801K8Jg1`!BHP8vbDmN~q zhDkC{4dtyC&@opq7mnM(jc-x1&Wzt=&WoVR`&k*f5Q1)OodLhjoNJ*JDadC$@w+n4 z#w}T=z}~FTI6es^U<^9o6r>&?BGjK75UNiq;WSQ^YEXv77*Y9sTplWqnO_~M7=6No z!ZUvpzX&A)>NsQY|e-|OdoFhdE%@It~p zG)xpp0bJpIJm`C4`hCLIxJ{$9SqcRGa-6jHCGcP?bI3gqU2y4>_MyzqVEqrzE$B&B z-W|=oaE|u&9s|qx9Qg3D8Xo3SW8Z^CF3S}mO4W!NALyu|Tdg+z&r~O=lC8Psx!< zaC;Sj6bg=V0UoNCpYP&T*PbBNS(X5kI(oCOh&TX#jl87!sd&B8{>*mTE&D4!$Zk0q7zR%2Xu}1AreR~t{%PvrF?Rfq7)uj&X z(3kEF1dTXZx{xMXfH!?tckt9hO*!cvo%mkRsYm8Nyf(IE3>FB3Z(ACdC+3x-` zUAMS8$unL2raF|GUAI3`xKWd71{nZGDeQ3i?4hVH*fGu__|+PXMcjP6m4m_x2!tVt zB#j(%2`|r(N#O9r^B8{sp3k_cs;~tsm1!L2&_I+@9$0Mwq0b>W(C_*vI3`nKswj}I zVK^XUx(6HWs4;BMvzdd}_fV6ZVaP z`>~PUN=vBsIQ zumgI#y=gX+r{%P91e0xU+UGq8%%^xG^#ew;7fAx>;GHmj~FLLy!Nf`8< zqEv6t4{|Y9Y1}|e9{-zkO2)&!S~z;$vY`&&}Sek$q7<9EOG& zE%M+n%-HziTMjQrtp19{NZBh&hB>(5`+QfT?Q%Q+@$VTKXNa^xb3Wx&JGza5Ms{LNpour4%aB>~gp3MPV3c85^jRUwSwl3XafiEQ#Pa+E;4ia){UoOiD_%tl1?HaOCk~g^R&-3@epx@Uz%~h-4P2W3oCsjVbId#pS zCoF)dxv4Nt6fKO(+y3Haz`gsbha z;|$T-g^KY>o6z%e)sOuP8iB$fgoQx}6%pc*f*^t%$OMd`@~{;2il$%dPveR)for%6 z!+=99AekvA)K8@xdpJ__c|eZ?0N8JJIMBhj*pLbIwX_BTj8cic4tL5^RT02~gL3L`i;3Adk9?%`@kgym*K5R2AfWg`XEQENm2d^Yx*~)v% zy2cqfflG)6!M=jvM3&6m7BJ>P8u2Gm0%!1pG5f=q0b$O8{7Jdxg-`gAo$_LLoq(`o z>;@=EAmOZ0K;CmA#xk&T8~9ZyhtJZ8wEHX2*s_j{F=WuOtyN9DyWw=Wxl>Qyj({?6 z5`>Q3PU8{HvyBcmgDH10^ABSAm1F<0)1CkI8$e-b@=rrWrv7QD{bIl&Dd4eqbh95ro;KQJ}%h`OLUC{BCH8CX$d? zd})|?5}HBYG!=Tc@%ojvsQ~f8p`6nKNn6wMK6=8g@iN@?uXnR_94&p2Xx4$(8e84P zdm$-J+ZYX*|u%lwq3Q$wr!ic zY}>B7`}*UK-}7Zo{MyQi1dTFsvrxIxY zvSI}oMmK803_QUulaHntp-{@!6IN9Zhfnb%Q3D#!0~wTnR0|-XM<6Nxp}wc znGF1ytoX)67Wkb=tr#<95ih0WN#%b8M8X}Il%f_V8wjEwMV@z%B#enPN%v9|t52)0 z#B2ND;>uiuDC9g{o^m&Dv)gpESLNAIu^)+{PqvR?O>sIKJVHNn&3V+Ep09~%>7rT} zi)lq+E?;Gz(i|MDJ@c}Cr`As#kLuqYvz6g>8qz+8X(;8ccKoJcDsFHJz5Kzh*x6!b zbKdEWkGIgP^9KDaR3GSWk93S%I>h($2zXJ5AnIIcVQvmH(nBMIvQW?H!?42#TAL1aD-Ay?C*U$?XeB zJN%(03No26pBX|vChQJhn1qlr5aBY+3|^30Xs{lC5K6cbLeNTRuo-{QMc9hZb4@7c zAgrYBmKZdFrp9RqEZ#b|$WI;87!@t+17O1=XxD9Skxe=PWmM%2Mo;7xjr*1$9ondf zb~kHOb>^VV<2%bevGIN~^XB4;d~P|V>uosc7qQU8*~Oe@6=n$1?GZM{J4s zaKe~Gy{-BXyYn+opYmsA@)HP#dT69UApvr5`#7jfcl1c+gpA}SDUo4XO9RGV&^#OB zFN?xf93HLVJG-RixHg1d=7cW_;XA6N0lMiB*vSyn=7j7e;X7HR0gf4eIS(>~eQrlw za=iX`peREFf2B_Ft}Z0ZSOhDyqpRRnaki1W+Bt7c?15o6G-~5!OfPqS3@Ry%?c%mS z)nD5;%kDpZ1}}|O$v&uVCn&b8|B@E>i^h##Y@t{RV; zhpCjPkfMfbN~#{!tu0|8@NlbSpki2BRn65((-U_#abCLmlxIdCNhp-G1?1c~^9{O0 zTxJ}P5?KO)Lkb#B0QYS76U>6_&SRQ0oODDJf5j2_B}+GSy2dqDm#0`0!Q8ym8 zk=B)^?kcM8XOA?THhtE%ps#1>D^@sl-;-S*o&+Q!>L0VE{)uTNwN5N5VKzL?c6MPC_eB&;RE_iqyQsm zgzBi5&^UW4-pDOHbeDG(dIz$5E8b+rD5Ix9F6mDm z+6eGpRf;_iggq~~pQhthEYhr9Z@jKLjW@uJ$6cKhzw!FJ<5eKx{d@r%p$-X=%6Q)u z^1(mb#|AN^f#TNzmc6k2;SAuYAOS~QR4z-Xn%TgS9H;^+@O&#!p*^TpIe@tqAdWg9 zVHc3F2WZ#>6v8Pg{yY_bp{k#F4M4n(fZ%Q5HqZ{d+)ZFZ-WHSwU3ncRJ^~m?4yt24 zF@t)uqV@6y5GDnJyR!^_4?wJ28e-CGKt@-vKEJ38yAtfC!!WqQ(iGh?@wx18w2cjw z-|EIt;SHuST@Cj6b~WGk?@!-)#!>f#x|Yp6CBEvaKHJBiP3urO+0&1YDlOVBtK-$u zQu72Y91i|@3z}DL9-ppU?5Zvn#BBPsbtwldy6afgruX>+H1R(Za_CmqHr|h#n=R3d zCMU?HB5#F78%tP4mZFxb-eqJ(!R~bi4x0wnU9i`l4t3q9mB`PqgGD}9Xxn^jjGHuP zn=S1d+-Xrls zu>*=|H;q9p4o}7uDpoxM%KF3?Yy{etJX}> zK~O}#e#YLD{Q3m%T5Y*{f@Z^QVkDTRpow<-p`-W$iV~SvDGLYYN zRh*x(OFsmSRH#nzP6{1QcqGj%L6Ri`({~KEJ`q7>Kdxw$cf*gKP-ru2lH4h4wUi0oWhB)9f2s;`JI*UBxnR-MM<7@r)N&p%9cFsCGS@tEQ z^zSBfO;*k-4Y)HAG)s$?W4tPLx#H8;a+ zNb^3P+k@HAV2AE&ew*9$kRdJNQ=k%v+;Si_3Lx+(eG9^o|M;f@UnGyrB0oiv^$md8 z3e|?OehhTkP7%aX?@C5wfG?C2@Jq}A&p1cVAf5Z@ifumk4(qeW!I-{syZa*cV*N%iw`+5}exnvhpKpv2&vSjJHuoy9sXwRHNic+;boW6@h zW0il5Gq9gK4kYVF)o316NU2+N)VlmKNx+4V&=r&^k4Bpi$1eg!jq0R#dM zgG{mb-tXnBONI&}B4P%~DbNl~6Xnr{ei_ZY$-hbDTH2K7_qtQ;x(m&7$7#lDWNaGS)8&~I{a9n1;}M&| zkJ)~pVzn3&LlB!?w$UG+afNdC`2z1UW3NuHqLUDVASkag$+&WqOS4?Yl8W7qb8Q^< z{(wq%&_EDWgp~piB)j;2a!7DM5JOe$x*C(jX{IpgvJ^f(ao4kjYSoCdI>@N_X&_V; zPFWMoeUDOk*%qKw$Gr1=>Zau(7-~jNh@q5*Ku4I)k5Y(7Rv|iZV`Q~!1*O}@2+p0O zmIeb2KX~G{*iChnlQaW4C>w!i~r<^5Vyvp`OU1cR6G|TT>zRX z8p+YAw_qku_Q(6pcwCt7;gAqO=nr$dymah#e$H3^e6&ae5~DSp4nJtNOMsrFq?Hp-Y1 zG@#-!Nlg(Xz1P@NVoUQasxYkx2W3@uz?GqV2nX232IhAgL*BkY?{qX^0RdRlAv%4E zVXs;YpdrVEe+# z>mMJp+P<6Pysl&gzLs`}G!vGwkMBL_HCoR^!?!-ik+7Oq>8{|&u6xxJnopHgJSX3} z<5>2lUj#b+(gF0m!bbA<(k@5DbAZ;8N=~N%gQ&#=ApvSFeU1!^#C8;MUa->Gox0Nc z0_;M4Wuo=MBBPKu=Z9oG9DVzBZ@ zbB)OqRSaWOLR_?Xx)_$MLsgA!88tH#<7F|}RCR1D#cK(nHni2-3Ry^K+OxSB8W@&p zhp%>z!w2H3qkzM%uRWWhWoii#81XIWR-0ePKdL;U%(H%fNQHlQogZ~Sd>lqU{U%S@ z(r+HVet8Z%|HbjTzFN=rWoy0)rT+C>04`17N|m9-V5>%0qO>aw^a6`55fGa(STqCM zU6E#h+7N%Dgm_ez-)kyZEl|Qi10X&uY!E*P3-Jm+2p+M!p-LbwR548~@=pAPPHU2y z(gnR(B4b8gzMf5II$PJjjN*LE=C%DZhYDV&4N|p%NlUiUnDEN>g>&%*cOhOyN-m?IfFemPjgNi9_r2<{q+9n$R^83h_oj0IB!}7b zs!x?~!M74{@<8tWM5|b@ytbGLB4#;@Xx(Vw5@vteOh}4*nuC0p#UAids`Ro(X-mS4f>zWh!`DG=O0Mu=229a28(p_eZ?=QHmW*3V^N`_z z5Yana5y^&54yL|Z6XzM&W_!?&v~8m`_ne_t22+;xmA4WLwh}Ld+r%lr0UQq`ic_Nmrl-b2WvX2%z#6g}cgE(0NwX*s~6=B#By4R)Ua=S!cKCYuh zPpwitOX}|%yyQU4K$P*^w+sjTNKwh;a9mo(@RP+}vSCFkAt+me`SL?%6F zl!419hc_rJ9~LGUL>4NL2?{}s5iSJ5t1ok`iDUle|Ma`PDw--y^}g!K>9cpf^{vWL z1tPV@NOfx&`7(<0ZofHebO)JIwi92r8pypqtj<972pNugJ;FB1S_vK4{qlAA{+ihT zxwP#9q5>;qho|b>-ol}%`XhpAHhAm9)YaZg7^|!Q`_d%osd8f zsXC{aSE9Q<3R2G|#F}Qb1qyQB{U=8-Ha6~Dz^?=_l2#ER5-IG&#|ak8^=LxNN-Azhxa@ET22+$s zMU>XKeCA84bF_74Fj%&YLtiPFU83{zDaG97Y3ZZ~!Dq=4)ll>)I9;)$GM-=!qy^3dD&A^Xw7{s$j_EuJA?u5kbFDY5?JabZ3rb^;Mq zkTecfRRLN99Ia8NDbM-lmecJQoKgZDwHZz+9?sMc%1}10GOW(uVO-C%rd+$LGLNe= zZq3L!mqCAfZq11r+pP_<-!N5FTso6?^QFR?aN7}+EkF(T6z=WOt;PWcVE3(iNKvx5 z#Q5;TWbkOzv0Nzrpc8@rgDOmJKvf7c`x>a^C-rbI7;`fE=9m{t$?b{A?F-5Wqw_eU z%@hKM=>yJ~1HM@PFA3&i2z+Dyr<6&2{F6r|yj)27ODj9QuW^ZJ?5N#-fcs*o%Yftk z7@tf}NX@QJ?+wkAvON?x9oORNq${oPz)XQo)cdSxxajFmM31tnGYT4%1FL*1IS z5Z`3!w#475U1Qwy?f3mItKxpe>%G~F^=wn_-S2zn&xOA3>J5E#>2Z`;<@)~p=H#Qwqw;VKSlIS$Xde2-57?V>QLv-FOwLr=y zeK$uPSt~-(y}Ndl_-ZAua%T8alsH2tAcbDTq_q>Np^69<51&DE_!rv1B5SNetSSec z!gNK_y~QDRmC0ms+_BdocDV!CilO4;j-xt~9AY68sk>d1RW&w<;T<`>Pd7fqs-PH6%lDI$>k**Rh0<6xcUK!MCwu zQ1MAr)Cx*nRT(xJ=TZGRvf)65jz<~o00M)zVF9v}ETt;9cN~uNA;_3I`=@=G(80^1 zk`97)@WtIJ#FOm8b9QhfR1Ha z!)zY@_dO4cS;h!^7+w{ic5Tp3t64-ys}msQu5m}iRe~;&)Gj=(r*Kp6WPv?UYvErp zOZ0|4SY}l`d%oR8J`9P9rl@YTgq_?`hD}44U$5#yO|A^hK^-D8d&JUbF9k=VPCpa8 zU~OMlVlDbX{1=ofbHiXd*g+mivSW8*;t&vmsJ^}@#YfwG%h@b`arl*Y!&Wl#a;dI* zb+1CzI2^>3E}$(KGa;ipRWd>%9tC={#bOLt@6kI+uBU@tN-6%m40I_L;9AJbHlLN* znMpp20-c5%*EB10OeN#jT1MnKoCiBw5ibE&(bI`TP5XhO+Mi7BSVF(9oHM6(gEz=; z>YjxuY!-mv|5=D4OigGIh~Ogpd#0l=GJsr2SRElB2obeUUvZb&$BTJx(n=atB%3q8 z)g$dnojW)(r8Mzauan8r6eE1NlR-?yg}>A{bSpdy;yroc!pz--l#W}y@$jkiM|X$E z>VT?n)rSMVRt4;YH7%uiMZ57&W#1B7x}#Im>+Tj;ni)pI$459DozK42ZrlN=PBqVo z`k`m|RpjQkTu!|t_FoDpnLbU;JxV^&)G17S=Nvm_;5l>$RpRP;^@_I_Ch%Mb)5ltE&-+_2{rv43V2$|NPa}@tWi1fwLSqM zlX5c_%)l(aTpNuOM zeV)M%Dc|oXsO}(qTgN5y&oicr64MMrDs9i@C%I*qe5IZf9gpwLVWtYxB>8@ufx< zh-%8qk?#BAjH@4$du)*~`3()mYNH8@rt3+8*eBnk?qv*Z(({r59oYN0G~E6hqWcdt z_44vJrJ9p8dSmOb_U?;HXToj9Ibn5AG=6d*P0#AyVu(p>2E||KEF?7@Xwyi>4fBu} z)SkDQEMIuwkQGyO56<8G>8^eEs5EV5T$i%XjVJ<$XYs7}Fyix9q&t&?IXBmuVuZ`t=F>Wj|W(Cv7Ym9qq zjGczJN`HsCDLIbSUWqQcw`Q`~h!B@*=!V;y%|zSFIZ^;l78!7MVlVMmGTNK^H&7-U zmhW6q<}Lh(@Spw{B^%P#BBdLesOH;Aq1s6$chcljM<@FU=(NrRF#y-voB$yjBU4ns zK64<^6sNNkV^38ovz0?XAKqqy)pQu^X<0)3aH>Sf&UQ*?dmUPtr|PVu8%|wO)#Yws z8zVV2Od$CVk{&c zL{&E4o^LmmTOy15JD(U4in#5pr~pg0syfaZifV$~An$zFZkgkDv)4*Y&m}{&jh-a+idyLTEE(ybi=wOp zN{GlGr9q!vG68trpwn>feU4|!nqo*=m2M*;Ljkj_Le0T`|EdJ6`EzGC8TTlCf;L`Q z-a_q5V{?9m4UM$L2Z^cu;jGKpdy2;$HI$Z5E#vrvowM_B;hL|p9$#sHddeZ>hI*!< zx98B*XM%_3V!%2-4b?%IR%c8WYP=&nv^!e$ofWs65%-PtKb7-Db2Wn`$bo%tL%4(k zMd%+%WG*W9_gm|3@<)5(JA2~eLus(t?lvK~#uB(+3Q0>*W~Jnr{_DS%T=0Fk5PERJ zw&Adiz~SnF!B_nQFM0)BcJR6E;&9kU|1+%2+W99rWX;kJ?+^{ zoHz8uJhH7YV)Ls@_ANI%B}rc4xmzEYu+`A5GmxPx@czL3##@g#cDXWy;~7@t{F9n~ ze)psM2icOUlY8}KQmb=o_T0LwMJ;Eg72e(IbI2}q^`4GDV(gn zkCQbL)es28@+?#=<2Ob~)|}gmcP94%*J!1%n<3lh<`9H%v{5A3j83|pg%uOpFdwTH zj!Z)9FAb;vYbLEF)pvXEif^9vI(=gDmxt;o&i93ea$EjwEW9ykC>eHVQ{%@`JGG~_ zZQAj?^MEm4cRdd$1xwH?oNDc25#5rR1ZcKVc(vO+)8^pQS2pCM@5}zFz026H*pCw$ z6WkJ)^piEdm!5O)4ZM-buH4J#(D&Gt2isr!bvSN@b#^?YJLc(Sf4Jo!}Xx=2JC5xWtV|lg3g_=T(WLNus~^t zT|b?QM!qvM8>|CFXT&=Tr9Hy%kTslQK0p~beSNCF%b!Ipk@^Q2ql=}m45IDm$EGH~ zdXk64JL@ov1#w5eM)*_L{0DLqjC(Xwo^9fuZIrh<1pY~X~`ZlG{_pzt#Y;{HEcA?yF! zn8(4k>js%|zH>l+Z6kE67Wb}($e{{2jyTaJN`fOtx2%_=nVMTFbMo~(dA>{cQ7slU z?}=n;XB!Vw9Q^RzwNZl6#^Py+lgfv-TGVavqe6{pcgNILuDY6`CQ1)p_xQfK=nb^) zPMCbcQ9o=-^=h=-Kgh6j@oBe_9~1^sqU;XJ&z>$ROU*ZPAA{oYH&Gdd2E5JZgsG^_it`HSIN_cet2lL zBcad}J#h0*vRD!A3ll9P!W8*dIBosQ{v&ybUPuv+gqoSJrw*_DS}`4(42*YvQh=*6 z!r3W*GXF4l&Jui6l@C{&TXWcm1odc(>M*hrKQOQ*z!Jwv0eeAAU2?e}R^dpSW!uv_ZLeS5z@brf?E<^I{?*>@7*}6C%OfV-_CMEwB?mB{8?C+uqURjA-BBSj zW`eVOeXNOVtJ$uo?s)@zd%_445aX$dX0PYEusV_9qF*vkbp`6Fa*C~p)9w?XPr&+r zqWwI$+5ZLqq=9sG``LNfE|)p&YjIeyEGLhwN(g}n4bQFInqAgOdVbQ3`bZ%%W}d+;$abMmki+dL1Vzy3b zww`abaR_;;pp6kk^}SfBtA$)}^qqE+p>gV@SE7+cq|iVjC2(sOWM71^TxcRe%?P%P zKv;Qo80zfw0e*X@j+m*QI3qFYysYu-dvK;wNLU*o9}p2%AWT%48SF_ag^3ObW3(0O zt-?imm}QKeC@6$;nsHHK0={LkTG<30h$}3o>)Mni+q~DWHm-0uom%Ba-<#>Sq_9SP zOLg1l zoMTmWPYUGRj~GX8fqih*awA|*7cXKjv_Z8S6s?&d?Y(!KMoW4;O_1Z5TQsGY0pH(H z2@)F^i5-mC4n}+j9la3!EmO|lJ=eiduLbILCHm%>!)v@#whtz|!g3cW+W$n*pAlA} zQkam6mU!DcW#xv2cc&6^^k+s50lwv{+Y{|ZD-?V76S zFYja+h*maNchAwSa$Ach-Vc;NS6;R!x{Js^_qrS%ul{6P4JnouT^CnHG|y7SD@I)X zlTUa@^%JJ`h3W#D?JZ3nUg0yC3EcO2)k>Z4$ZmZ=3m7=BU6MTD2`kpTK;IJo#O z7vaCfOLX!Z&V6M)bG{z&;Tpc1thUOE++~Ed~p(PjfxtTP5;N-Y>E!9k@Cb7BoY5fBH8Q^+_ ze4K!Ni--j7ygr0o>Iz>s;E2%)y(Kh?zHuCE7=L4Hki11q13Aj}uvz*Yy53w@p%y zjGM}boQE)0g*OW^)q#>(_paIRiDJ~<&;egt+;9XMYnALr9!=MS%lMwyy@CdVJA>ol zaQmevEbPbWTQ}{GWXK+IY;iBj(^F#KJ6lB^+3Z{o+chN*-C>sWr^;q(-=}S!6}Onf zi^LIu4De`(T zztyt;Tw~LnDeQpkYu!y@7mTEgt(4+8Ndj8Y~cZv8Thb4MP^>f>34Rq5E zyy(a%=*6V57yPMAbo{ev_`!kgpb-_`3c84uim(riH>#OCDvEo3k3g~S(gnR^gs z>XziL?8WAOkNa~-I$nbQ$U8a5fM9O{@9wwCe@?TC*Pqi2&{Nh+@3QAf&Tj7$%p8_W zRVzGS#0bR&(4%ywsAtym0MrZQz-S)#RoRPVZy9G(;PEKICz#5zl35(x z)UqutBbq?A(-h+mC`KL*ixp=qkK7H$Znc);JdRJX934BbU7v=tqd7LmFJ`K)GkPm0 zV8=I{rc4_QF;x{7W>?pjn7Mw%z2LBL@EpL$-r5D)mb?09j2~Q!EVSDThn1Jt8eD69 zTRqF_eB7MuDhmsneDw6tJPQdqb@s=DawjpPyu(N5>p9Qn2JOY~xR~M&v{qyU<-gE0rAkVay zn3ovsr6s=Bx-$se>>k}{uq+Ri7@K@`&9(rxnWwqG@>Dod$CR1pu1+!YXx98_Fo7S^ zJlu;JRE2!?Tq`fn@l=M*8ZEuhb2uvidG0b7iJV4v2IYKVy*}AH+wpV?oAYvA2BrA) zxWslW{iN#fLT1juP2s&PZDa4&a&qQuOm$b}TxWWJ>%q&76j%Scf9m&g6Z)aVPJjOH znFq`&#M7k>u(Q9ZSGhh5JJ3=HX;u_k9wAd)%%$ z!-Za8tu6FBAl)R2_DUVP39MZZH!%Hcd-hN()SC%YIA-=;yYaolgtMpPocrN7>;oGs z@aQJp0(KVY)^AkdB%T5$w%NW`IIsfAqMxOCRI@N2Z@nYWv$5A0UbuWdoxXY3peK9x z4WnjDy?T6bYQDC5?4p5V_AuSvIJ4q4g7Ja9-~PDvGERo6Fo0xP$5fU#R7Hx^cSxP5d^pL4_8 zHs4*@E_J#*pSx#l*qy!it5uiog=FzMomVV7LU%iN=MOv9U9LC1Kd;*4ny;@mv>Q4s zp1oS<8#*xUz+G%ZxsLcaT)t1Becj(YW%0bd9=&V!S3e7$aXrrtylb}k-g?hvW4`ik zSIfkDo(CmsI^FM7$+p?Qu*iT$@VH*7jum~qZn@~XT`$a!Z=Yp(kG(#AhZjt%UU^=H zPOEl%T@58Qm2HczgW7QQq;#lXCR4%teyr}s>b#zU^KpL6&FH@0h=s~_eI4y)267&Z zCt*yzUT$%pKi#+RTlenj`n-&bmB8hCTqfuGc)X0%-22Ajy`Q?~ z@ZNU8Z+RS>mXzr5Jz|#;3>XDjkrWi>J|yto7-a3Fv-gqpl}%#50jG-)1Jmp5`S*DF zmG6Wj-gtWe3?GB_JpwZe4^NlX zK~=-`GRWMVa+=G~w~Qay-_V334^WbM9MhTgkE;d~&7Oo|T+A%o)741LB5K?bx-7 zYxV-(2^r&jX;CjT^eVolXF%ksulc-2CpbL-X$oC+Is(~T#qj$9P)ZVPM-!sgsGax) zw249*NergX{GbVp9w7Qeai?7$Tj@_5XKOHajVjd^usbU6zyY(ok?!f{aLs}4kIe}U zY%PqX(XWk{?Y#a@WC{8D4X`3OvG?!LKrH`(pNT6i=C12Uoly1Z2tw5#lXh&?=e|_ z6LtP8V~6d(F?LuO82&d*R?4qvsZ8`PbAt4pi?0PMQlvc5I6JbD*%uTm^n~b zoXD4t*LgeH95w%n%jTYvx=8z~?Xx#q319Iqju-Xp_U`Nt=T_-xRWaYIH({(Lmnm%3 zI~&@^w8B2mR$Wuy)#noZHmUjC-3v}x*T;H`(1P!T!tIh}S#4hxx*pchTHcM}+t{8L z9~E^4yU)U6}-VyJI@lg%rA`A^*obzE>XWyqW#tF)% zjmz@E=SyEx5t)hG#gFO|gmNLXl*4MMwJ=(jS(V1IJe=pq8|vEWHlI-1(ji?1%@ek{ zB7Yq_zEBRSoOgk@4FtwNZ%2y^*raN(Tc}F)e+9#a`{je&6`uT5im~Q zh*%bs*}4!Gr%Hi4YTT~5%0BU&M@8JbAGWgxuKhoKLVe8dxZGf0VV_`Maqh70Qc0Mv z3B;m9KH!?r?^5+x4_x!dbOZYQwv9BpMSRHIRW`sg3BD!Jduqa-Vf;Pds04BIuBY-GD&(ww3~@D-B!P`y=xCz5<)*)kc509J!sx- zgZ=-ssryDke!bNe^8v>d`|=C^6~5qq+vnvQQ)FSYfFi2k1H>4a)?fYn{e`?w-%m25 zyWI%N`0r*2`~N?9*8emk{yjd6<-g*y7#Q(cm|5@{|FY?s@mbjafwW>~X2NIUV8Lf* z`V-Q`|q)`vO)cg z#iD2b)Bm5gtp8~D&+-?3i-Dg0zXtzV*qIprI#{TGcK&a8TCD$#r^WW)<~qlJo9k@! z{~J$>f%VU5|8?>odb)dIEj4}POqn%QZ6;X#Y!*$SUQOv7OEK1T!6tFBGPOsl=M3K` zZ{8!nMO$ZpB1x$7hL*%Fe1 z&kx$7x&H=BxdU^g#O`99lfL=f8np#;h)-Qk`9ZDE zK_XeBU}|)7{uEX;aW%oZDgHawM?xGmJl>|YbXba5PhgOxQuU`CMtB?=Di&~=csqx<~`6m8uN?K z!(Hu9`Dt>^xVxxRGx8HwCw3*!#f5c$b!|2u)lzd-LDrO_7#_3?sRy7T;{YE*iUVk_ z9?f?=Tg+a8r=%f&-taCB>Nb=B`!&r}){9&9CodtlYrt?aLD}gFN5vghp-P`j0w?<@ zWh~WLi{Gaqf{5xy1ineUmN-Kp+&tWAP$7N?!3w`kppjEwpnZaxtUxK*zPy4!(zSGg zm)f0vT|bf^sEo3l6#`!&SUo^JW<4k)TpN-D6>$OdR2%rX5Q4~$N6w#uH$MV;piUl3 z!WYl6*Uqu?GZ!c@EJ}ZczyXU8KI?1*`p+YA5d(w^Y7kiBd&fl*s0us@!3p5{X9aaa zxntb{4*o`U^`Rwe$2l3HlJkL=zu>oIK+{v}!oV zXkt?sc7uM1V&VF8+kAzxY|eQ^dr@3z^|BkuV>G-VUEA|}nX)IZ@@!%9p@?6A|OhvWHIuk(EE=&JvV{2`35mR3u zqp8wNQh^oK7Rkoqa<#pJK?$^6QsVzeM`24^Q9F;xu_?@q*m6K zVFIBb6o(m;=rD=Mwi|$&yd@4hoFA@VPR;7c8%R)xhE@t{SlFJW&r>N;Rd2FBh#VDa zylh++01-g$zkT11!gs=(RHUp~Ri0D!j5G7tK`ly3MPKy3mO(v@N$)KEx#D%?Y~o-q zRbUjIX}hDrXQ6q>oT)}iR6IAxUc|_yYTKGbk@5Bp=&B-`60T?mi#dcV0xhs$wNOK` zt%OU8CN<<-7`y3=?X4Vd)%e1$4q2r&YcSgm8XcMf2wR))9#u^J_je-zJK|N8ejDN_ zGwuBb3&>JIAQIqsPNsFF7p8SsTp$Q?RA54`4=^tB*JtL3i)!3YB9I2Um;V$fCC zHZTXQ1Kv^jQCa*RzbyX`9Ky!)d-l0YcF`lf3%A5Jn}kY`#7aIA=4!0y^AxNV*q+Us z_5X1ZJ?vayziFn`ve63dnhz{+W2RscvVo0K9K&4tUe+gT?-^AIj{O_oY6nGzloJkn z$iINy4h1}BuU8(MJpx$Feuw;Dg8WX{VKKmS_Kb7dt;pdg?D(O`VblJi7{>Wb23Apw za~OT{qIOA$*v24Y|J@AK`(p|?i6Uep3Y#W{U-f6t_B|Tf1(ulalm0wl7U}1#*WnjL zNKrXRb$+oLFs0(V??? z$`!=ub60HQ+kqG6-u0R-mVl+zr!e+o)u&Yi!3Y;p^SApH2)R3t8IbyHvFSFrX9Lgd zu{%~=?_qgd+uUUAWKaXM)p;LB;>2f1HrW6hpULNrXdYVCBfsAeqRQPplYLR#4HElzm>*;cB#Zq+Tgj=Jqi=y9M7z-FCYk{`zr+YwM$THu%fe z_+mSjTHE23==$Pocrh2R+T1te)O&Ku3`aR)*n(_?(M#F2(a_YTc&quPyBvn)eA+&^ z+A3PDxB^Ea#h%I4TC2&UYg&VP8CmAWDdtXNemX4%_(=lk*M|^Q1O#P7n3lY-9c=&w zVqa32o`f(x31J!%qEt9Uu`q}tA)yjV8~U>d(?YMXysbng7@9?GAqH{4cT^TaUI>52 zuQbev1sLd3eSwT$(U@z4#QI>>mU9$p{#KQ!TU?@dw*Zj~db~bbK0k+ieyo@+gwkIB_w-Mu5Raw*)lG_7vDrUK6AjM%2kBSZD-9pb`so zhGW|XxEZbjlm#{laS~9B+KjTqt>a^8i^Ut74XN=kc_lp-M$Gvi>;oKg#Cc(d#R89w z{PFnj?D1dO{{$R{PWXpT5GaQgUMNI5l=`(&;|J&C>do0H3PS`LPN->@a?sEvp@-+^ zZRG0b0<0SGv1kzTK=J=tkBUP7Gc+n1Sz;!@TKe8jNttdT7YKWgw~zxlsbAjjf=y5! z#$DBz@8Zw+5pRL`gL!W<1hi;tFQm4`%3|E1Vxd7Nhe4;XG&sZs0s~HAsnD=f1O^-JEB&sgoVKK{R7_O{&Psc z2@rwi0)dV)4hOKum__55MQ2CHl}_&mqLQ$f?q?9#0f9Bl%e;Bn?`-#bBaOV&gB(-D z-kHKqs}j5~@~z^SrnuVfq+FS|ZoK9uYty~e zl|Q3=%($$~Tz`qFmQH?1xOR{FXmlVw!XYGTf);~UksqT}7_cb_S;^4HdVNwCm_QQ`N9MFv_te%!!e2^FwX z2#IcnrS*Bae0@p4wuYuhW_DYNjRlt)<10*Zdm!*paC{HSp2k)34Wc?FV~2WFtEy`? zdU}c&prKg6Op3S^<} z*~yrKn{lGVm}g|^`jJxB?%*cnWwU43RA1SS>-2E5M$9y^qTXTs@jO;#g>FuoStd_9 z2Bs20`y9%*Hi(dPWJ*_ex=`BErapA_IyoQrHKT@UpxD>WT~x(5^0U)*Nqi){gxr&{ z;V9SIXPCL>#3{aL#aNWv<&p(2SHO$Vpz(W(1s&a*_c#+y9pvyYfd6WKPm#s3BOTN; zZ7GJ9i&q;Rs8|0+%I@?eO*dW?_+lD}WM(2tU!E7}fER#jJqQ-b0)!UdpeLHwj+%(^8uW$?^z_-F*>|m``YV|;E%&x*QtFXRy z*lg7Hyw&5*H+Qh$^;Sw=DNyZ*!mM3a$EON^?EaiEj~QB#_3m6q*=CwsXKdJJKmN4n z(^{~-t7g~;ngLK+`%R=jZErZM?jlOwSZ_tCfvAXR8@tX3;Y9<{iPPojLG|#QwQ2q4 z>}$OG7@BtJTrInd5m!o~?$7O2FbB*A1+WJD(<)u~@sj{=M5&To93F6GZoZG0Vvo>?XAQTP{{t4@9yd&puaulWF71)^U}XphK% zPQIQlR%O7ifOB6BNY-zx5IuOX;R+CHOLO16InmgKn+D=Q!_X|F%F z@tCO_G+P1dx3bk1=jy1cKP2{+Hn?0;KBO@((W2WfN;4=d)Stt@kaBqhj_GC*i4Q|Z z#=%|7OALz>@@dI+5@$02#Sa?94|>m{pkV`u>GPOEkVJehp#2N?o=xsnAncaLC=O48 zPo*UmW$FjI`HX^KY?Jqr0+dQ3XdqC}&Jh!ZA4Luu=Pee@#ajs;BLmRS+QCvX!qSZ( zq?NWeN(pda4&Q4%Y}MHZZR#;NBs}Z-VH_AC3rdF(Sv72g*o|~IB9Hw(tJC!Um zgEK@b8_T0*s5egIJP^Ocq@ZrroV{rddD9&MH5-*-j?^g7KL5xh7)Eh^v%Hx{0%P@0{V_P zW?3_So3?O&etdORFcNf5DL5QF#s-&;N?#O)XH~_8gXY7C?MkJF(5EJaeAjvwWV4n9{ zef$4M9mDDD4bX6d1{^F^Oqi8wh2T3k<_w3IMrF0A_pFlg_n z&(=0$^9M-Z1|n|m0kuql|NZGY_!(BMlN*NLP|X%cmB9Wz0&m&`Ns61#LWHPbI1uVA2gs* zulwq8sI^TNx17Rg4=*lSYa+yA#KV3ue$F3|&w7z%vEeD zn)Z2H`pX3xlLo9U0QSO?xt5Gq!I5@U>(scGQ4*V1Wl(mA?O}d&X1;hn@ujhrA1qU3 zG<2FjbTK3`Semaq#j{1bm}$Amy9pPbmL@jaD}l| zMYJ52FEQ4kJj(h}PtYWx9To!SB%rAYb}Edyi;hT1GMAkI0dRsVl=_G<%9H?+E$|ee z6)ONFm}SdBb}IN$FKml9j3@oB$6ay8>{$yWVi5{3joqxhO0lzVwNtk5%pN9}5<1RZ=$9S@kJPVm@fhqV*b-8fG zy?Xo-AB?hqf{_X&({w#p6|juU{sFnwYq%ZHiB0+dV6Qnf)}h`TrVngmhlsx@O2$b? z%D~v%+c0RS4y|)MSTvMtakeg)PBMUsCgQX;MyyC_*gBY!%4$|TPhxv}pLgHgT1(MJ z5j)&PG_B}bl!BmW0>Z%U#4#7G(j+tPv|6e<8v8BOHVbT1BOY6O(X-N;I;Jm8?<11d zx*Uy8qr$|yx47m3#e23Cc~(aEk~_pw6$C#me|RzL?lSpwrFCyfZeI~yJHbD_*skN%+bjz=V#% zgyOx*3UG%W3&Vbp_XFD~b+jGUCMo=9nGOgyd|2fUjP^TpK8GNxsXn5=AZrCU(x{~ zGRGk7a7$_UqHD6(%@nk{OVjqUgI~VRT1d)z;ICk^-Xfb*&Uvs|I7T1?VqsR+GDt|Q7J?X zbdSM(r?$nk%G+ru;1zHUqBAEc3cO_yP>|y<2nNaY%;4b>z=fHC5WoqV^%zNk1Zu?q z8?TI1pkD)%iy@elZ?!RnHL{FQSqj^cH&AS0dw0Y)A6GyH2N16t3QR;;wPmgFsk1Kg ztgm4_r=~22jNqC(*t^JaHqt7-3P8*VgUbQL?DP%&G&$4J8YHGR=x_tDJ3?Q=93P=e zWfhlN?jl7Rt}zBQQ&wkUspP~MzKfvjyiZH=+Dql@U~(IID%zYSx2!Nxs}Hj&WGgGh zr;PH#CE0&GaY~7bC#IdY$2_L^8nP49z@Ma0rJ&D)gK;uf4NxPbwoE3Lh=hl9X`zZ@ z(^t%^8SZBlXCh(N?COp2SV00v%P5$r7xYs7^<`UG$)a#sP6p62s6h5G(P1ne=7@ z(W7e~ugXBpdk~367d*KdP-6K9(Xa3DjozT@-Tst1y+|p48OIFSlo1)41kmr#v%co|SEv~t(bqT!I zX`6#<%UiUdJ37l96|A}+2n#J$&n09m1HzNsiHYV~>Qa3P$U$rwWK*JD_2hNJ&I#`S5fOUgqzZ6rNUAEu zh1s&QoC$w!XS@CD#9cyVa(}9wy(DF&93ub1Wl{;Tmxi|Y(wFrdlu(m2Dy4gSd4;*e*#$RL2Lt0!ce$QUQJjZD1_WVg?bs^lVk= zXx=HosCuE@CSTP5zeAHl~^Wv}2mi72VGlr;HQ+VXMJOF~(QysYr*3WuI?6+V+9rYcm( zPBYBXpf31!E95%50WEM5%cG6S_sg6i#pX)ij36=Z=pRPuFVX75lnRsbE%Qxgk7ij@ zEC~r&50#sRUPIUZHy(AH@1X@0Z?EU1X{sho84xg1mYf@E*{0!cz)Y^|0~VPlnqT9L zDs4L=^N7jp`mvL_!7T!_tQ1XGvG#S_RJ$j z5V4npO2Ned1`-trq>QBciJ@!{edjUui7LtDgd36=;}*XIu=)dF)vAbS4~=uBt`t!S zG6)?7BlFur1ZAmCw04!o;q6~PZfphl=54BkZ2a=;`mv+Nv1tzbC7XNLL@+!|T z)pfx+xKbCz*{_eS5Nt?tXz`UviS1P}JD|-f^WZH)D&k4Ti!G zDdB5;DT@lbw?q+QPRSXGvSk)fAlg%ADi&yvoZf34V2KK|Cn$@ty%w)ipJ?eRhwhcb zUm~t$_jRC-c8Rd9mb{D1ZuIBViLqH1+=8^G=!q)gzf+47MU<2(&(0VrcI5-am5LK? zh~FwQT!QI9PRV&l&#JDolb%?{7O>%-XldM0*l&X`*_A5)&Xn4MdF*B2XJ9_QV=1@H zZ1$HjzuH22ewnCDhsg9sb(L(CINNHKCsb?fq=Cj)OnzC2Hor|8`1xK-YDMg1EQDm& z??emH|4CLs3k0POODpM%-2|7YajMSCGI6K}6g=%p^)saZ&qp7I!?(3F#E7;=` zp(bSMNG3N!yBonmlS6n{R8@Id8AU}I_{~meC>j?R$9mTO5i}&k6^3}E|MO!{Cf(=y zSl|2TMxUtXfXvrq&HVIsvAu44R~9lA#({8b-bl=ifz?W_fR`QxBg;Hj;<5C@uyDIG z${snsA!5gl0ZZVK@?wILfH*nXRI5m*08>)t0U6^c@pXIWJV|Q$`N5D7T*rt{|FEN{ z33wNZa`;T+pgMBVE1W+242`{&j!ASD=VmI3=>4{l{WmXQc>P^Q&`#EbV^q$&riE?dP>pA$QyRxI1a2%edE}x4o_#3dsla&skLy_fGgBh)>xE&`GcdP zLEQlhPQJcQU-M(XVo6uJb#UZt+P#vP&Ww+d`W=+LxDsA657BTzZCjY7O3`ovU~17q z*G3{>o4w%|HHPKXb&gsqSh{A?YZQ@oH0to3`ZIcD5)J@TX4Bvp7C%1iz6CWfazHq zl-GHdYtj1#YEn+76pWLDCL$oWxQ{#l(QJJVTIWsK<8F93>t!#guQ(L%u$?06?*W@! ziR+md7#33KKRnqnQD?a3;yv))ZGTBzdck${Zs4;6KSunLzE!v6wxSVIA_g)AH%g_g zrCR~0s^iBU)G>N*B7UZ{|0OiL9Xulq(wCKt`o7uka=i@x9x+L>dmWbCH**dTZ<;L; zIj({8b5H0eKCV6-6kOdzc1PBQyWFw6?Y40Joqow@MU-yv6t|$z?gs!VTD8K~FBYNM z9hT5etM5Xu1OiYxpHq<_U3E!NBREFAF0QOuk8+p%@8wdH+--3aCm9mgWmfrhmtN=j z^F#SC+c{HU)^wcR9;Q2zksz9>7m~N<&rlvgiXl)+an7Qrb-wve5 zhMG9sKQ5BE*=hav7O5+mmckrLAT8~^@?XQM6;<#CCrtY31Fk>ZLcf5ydEdAFx(GclAy6f(4)=6jBby=E=P_uJU@|!Az7Zon58=( z#(Ru2IbU{D{J1?{e;?d-F1Rt?SHi3~;;<6EIUj$)nuuzxKnly`Go(t=ezzk~Y~N-s!ms?nYoxiP}a$ zM0HDA5zWyu*MUn29G)u(3VMw}5@|}htsv`JE>Q->NI)|-xxMo;n(0BQ??)Z!L|jEu z>>sgRp!b{!D^Zc&E4nd1e47yJdFfmehgc>b_v{w;iml`Oi9J49J|A~S4GDbC;C!=q zoy~%TC`q4L-!Q&P>S%L3V4sVBs&XrWEtv4L4b7 zX#RJgbVtZS;q1vD&$AQ z1-tKFqi$@IT=h9VTF$x~Au3Om*AFCgcZf67h5gW}_j74w1>F6y)bo=L$yH{IGgm$$ z1Cp=GV#&p)hV~==i1+!>?rvA9hV;SSCkV&g25nuZQtwW-fy>fr(X$7{2v$}Gfsg;{ zjlc+blj3Yq{1a?b862-rr52IVG})r4+u;z57fUc;_^cJA``D|6#b~5J zIV-Lg6hj)Y6 z7r!s#vz)Iu&CV0D-Z_<9%9G~$&1!ih_xCF^dM>l&-xb^cV^7Qfwz~c;FYiyu{3l-C zf3%=vVE!lH?H_F`|FpOK!_E5#U+y3NpV&XxUvacFV1FoWfBe6BaDUE!&7)!dH&i#~ ze`y`b{4cE|ng6wQB=i5+I+B)_j*jL(7v_eGi?f1a@BsL666$adH(AP80 zvv6CP@K|V~Xnl(Q%H)qBBzx3>mCwL2z*L!*nM&SNQ^M;n5wbEfqm+CwG?qmWpCKs7 zjvyt+c6pyZ%oeQ3Wig2p6GH7FV45YEFgVw0xExSLB_Dq`9&5Q2pj4BXQv$v{w-Rj{ zoC|QG)O3{hmx^h|eYY9n9HJT;XCPq!t4%OeH;tTCi#?OYLvz*l$PXQ$;zxl0*#W3bya*hYAf_WOG!56zQ;i znRdjYs>UlzCWOlQ-Uc|Z7WF|kQ&n$6)V~yiQ869w;80JwG+9-9K}thwW(zCHjNh@^ z*?mM>hy>_fq>Go=GE+*5%KAR^80?$eJdYT)m~)hir3GJNFntw)Pp!r+E}G|%ta};2u79=YoUiIX0a3E0xNmKAzWfXv4Z(IM5QK~ zhPM{!=l-z7r3;+g(Er2NdaM%^sgSP3Ac?UG1+}L~({*Gu*$Z5xwtlUR-vksxPSO@+Cg}R74JSgecJ>*FKz% z+1+|%A#G$5!- zwgs8X*0p~i`tW5~OL$NS37U?&)3z}}+R8!z}v92o1g z8mLb*FYF7>E3r5o?_O}(&F~l}=>ag`Mr&J{({e-{qX&zpN!q zn2$4+!LyE?ukHk(bAm4oeD~{_B6|x{ijPo0ZbI&7gOtr+M+cgEFk*qn7h4kVyz0>#MJ=^bk=87(jIz+V{9+LfKwwqPO{4ww zS_?93V|E8}bs;b_2>llVoS}y6g-5BcYd|t6EAbSWtI&5T(v*1eE*?iPOR`3l@#P{O zq;m%I!Is3oMNjFrCc#i(lHqQX0!N%(sX4Zg|3 zAqU+@sHcE>Ks&u{;RBoDF7W^%@kD}EGqI*32z`=>BA`F6Sj;#&Y6|RambxCO#q0$@ z4)rH*BPpYlqGMd{@JqWQW~byiJlu9hTbqu{&r@65-CZ9e7XdO_U<1bkr#~NSGR1n% znU{gF+X#uoa^`Uo39i^NQ^J`(^7EawR-#-+v_o+wg#Eh4)31}fc45;|hVE=FFv|G# z;*D*P`Z{?xYmJV2f;^AE8@p?>NS$eJteIgNsqHh~tsd>;5}_eG6CqdcjYItTwk?!j_tP;8lCpAn-nsj!t(@c>uh7FAfxPzLKkv8jnb2ci5Pc=e7B5(p zXiydp^VwZZ?~PUvpnBf&NF;*Ou7~%B|MWAnKrej_GuR3=&yrE@?riB_AK5rWsyO$* zCb)DPNoI@Z(6uoY4{3uj&A|myIvtf!m*<=!&KyprwXSP(-t?G?c6lkAi-l~QfBChL zc${DB!#;|K`!-|d@f=6!gb?3KmnfvDOdoDG-l*7OV=rqJX;E0+SS&Jd+}^roTZT}& zdpK#PYworaCxu_e;}+qv5I}hFLfY-Lxj=og)^k{Ay(mSOJYW*t-<fo_yrVM=& zRe?;QNLpeZQ+|l)mZ*b_>SDie@J$&E7LpOIj<3Rtk-Y5IIeT}}b!nU-8rqhTbrb_% zL4d4TvQlyN1qPjjLas-kb8wfpnMqoRe_n2OQAuun^YJyChukHVIq37Edlsa@S4sHk z((_n&yykH?_R%r>+08tm7vbO&1hFtBXRvsNn8*~$0-F0ZS;v6U9+UD#n0~)W;M9Rn zc)3Uat_H3m7t99}?xa9ZHFQF49^-YxN4kp)n-uc=y~--OfXd5I-%(Uc`6c~P<9_l6 zdhz|_NnKmRcq+&w746ee(m{8kjoY)T#Tk1OIRWNw2p4)Hvz&JWP)K#Or1hs;+K5@b zBw}WBcl@uA4SP3*#DD@=1Dw<%#YV{{ELH~t$$YVqzE~6C%TGr7`}URkeOi zh_4$SQ{zlBp$eU4k@zR3RQU&q`qTwl7G7F3rdQ^n@SUnhf9?qVh;pXNLi)g#d0jaf z2!8zy0$Pbc%E4wZ?u z!dhjdJAK+HMwA)oYRjpnO7v!&VmKrD^(%MCP~#gL+KW^D%0lteqt(Wn^c$wVY0@vA zilf|R!D3=nblDj9G;D0i{biMxB^?jXbjtoRZz@|kd4eiUmO6`5?IQWogTkcF=tZON zAs{2Rde1Sled*5*Q{k1H{6+HV%m>!|TvHw6~xRFx^{9L+XY_ZBXf;9Cpt4#w~`zGO%JV6z`{jvItMNm0Osmn^>Rpi=qI$)lAn-hoBie zN`wcq+F^Pz3U^XwVF=_#Md=cSr3S_E*492>2IiUQU?i9bbA>Fi4I3*>#cZ<=?{BLF zVM--BsG)pjRD{;|^B+x*gC+JH19k*MCiRQo9A{wB9I$C6fBmWp|dQe0(P3?-OUWj+3EMSNDR0XdYwXv`A%KY=-W{c&G(E z%R;dV&&VHBDGfp_mGg8efsVzdiTsn|X)Mg%E4a0xh<@s1orRN7YQreDs&yP4EnTn2 zV^qdsat5b9t;^@Du{?=%vAd@#o3mrb3robjIGWrAdDr_<#$n43!);Y zSLlq0p$0K4)!LmcY)z9jP|gf<#{)xW5)^C_02b!#IcG^928%0pYL;X?8{wc_)8{Mn z^pz}4Ad~}_xD@5f65n~7AC(=Uk8QDdX_9$IT{MTKV88=R6vA(#MeSoxdN4}C;4lCf zBu!(Wa@b8PdZ+hi2~Slb3~vIlH##b|a%C&seodw;lC+MQDXs#)CN*p+^q5$zGVqs* zS4~Q@&gQVM&l1d&FbIO$$)0u{RWw}J`<53KyD}Qn5C(zI1OQDyvcF0?X<+hA0#2N) zfAy9^GtFqAFu(?@0gTHC7owJF+gMsCik&ViD4po>} zfV~R1IDAYT)G!Rtf<9!s9UwYQ*sZ;WY8385I%umdm=!acYUoabWh_R9TJqjOMabY(<(t7;ZAL~I9ujR2M6SDo`Ag0L4 z6}t*1;ME6+aIP7P52*qnN0xdM8EuE+vHMWu5~wjvvYash-AOJ0(g@Aburknqz<;X| z|Fu+o{JfJsqpWTvkV>Q&OH!BIvPKKFShydBz-=l)$bJMQFNbl(6`G z%P5vuT01@$@Rg4EDa_*V^8T6Z#Bf@2L;Bj+>v%`W_H{k8y$s}HB89r1}vfVNI!L`OWW|NCwTL{S#9lTt$q zTh+PRO`NalV)Ml68$*vW|6__HE*swGqm>7KosiI@X6M(zV6p#tLaA@PLBV56LW4M+ z|6^b(lW?BfRwqAn|CFl7=1mH7E1tsU4Ue%J*}!Ic+JaYo0_~wn_>aDtma^1EZ8FVy z&#~V57tk6&2=uIER8wi;u65d4oF=!W?b0i*VJlJ<*SXCe-(F{-RX4=wJ|UbShi#Q` z57^Po68Khij>$c7ww{a8FV8M0)Ix35-5I+W`z+E$lH0h@NCkRGVZ7jsdQyjj8F^u* zd-ewg?H5q7WN9)JmcutD3|0sG*l^>*7*gA=SA+yx&`&gGYuJt#J{-$iB5&p? zRR_;t!yu?aE2d(`XFP92(u>Zd-VslNsk(aGk1o!FVR;n5wo!JUJjlK5d7w$Cx(4`%C@?!jU9Ni$AzNXa_X zn~jKEZ3W%sCb(mYf+=RGGqH=k!Ni^~x?IrP!w~XVNGBI6J}!wRQIV5sHX;yGP*Q3( zme<>pPPgiGaecQ<*anj?f5Zh5T>@Oz8+nm0!ng@>h7uW+9Rp-S8q+)9tTZ5*(VU2~ znCk^?Dr~Nu%O`Rns{GpCMv4>r-cVcebjunkI8tMd6mL~gQ2*kZFT+4VE%&?FG-l!~9gvv@d*G&_uHb>#6;ANn=FwvUe61JI)n3utk zR=3s7N*U~NudO++Vlj7V&I4B>k{sGCN7bl$E_Ea5Tw$Yd3uBnfWa`l|^iR=^AqTODQPae8W1!sdjD5>=JG=~qgsAVmqY z>6ynH_REnIXM^|-evzqR6Su6zF{V|WY;dI_i3IV-1EVyRQ$j1+=X?hVX`uc!PHJTV ziCEIibN{8HIM@+!vLi=l!>p;1Nn>K-ebRRqM&QS14By}+DbHxj{9dzNw#^8Bb@xgY zL&>&WY5v_FnMa3t_S761SvU8H8;JOfeLXbZhs*=BPoRyDjo5JtLTNlR+7e&XT(qD^ z88Rxn`<96|^poJ^dZ*z;D?QdwUHvh2tq`#(c{&0?UI#{I`5PfkLA;@8upwk+Y)@iN zvRKRbD+959j#j9(Eq|-A0>35|Gr~4v%eH(sz!zWD@shZt3mjrc*k@{9(&HojH{e&U zX2oRmqVQUkxQ9&0rl@g^ZXB>t-BpB^2Q-_t%e5ah9O*O)44_$sB1AT{L&)b^b%!kv z7|3x(2hA7yYfdJiLe&1uSFJ?@h4VA*D8}~Ta_nyJKW;hdEF*<-67|cTwNkl`)}S`h ztzfEPyp-5Z-Cg(Qqa>8Mb-R4TP+;5N-_lqDH=G^{OuGbdcVD@QJDZKD;3DpW1ZX)0 z;%kROTurJ19fLy&Ij%X=TK!bO9<`w^@NQXRK#PcetU_K>K(B)9XwYwqITQ1(LE1ep z^W}cG{t;f{e{;bD5Bl+A+Mw6%+v>w~rMHWmZl~0-oed55oP@zQAU9a0T`U7Z_35l( z_gl+b?h>F=k_Spn{w>HV>Xd|W*+WdGq>Wy!!~1ouOW6RWnPTVEs2!&pFFBwDFU5tD zRz>9bjng|c-o$lLh!Ac?Pi^S>Wi2TusmC`WQ>JpyT{^iQ$Bu-cv^t_ zA%k(gFHlrFnZ5Kl8oVAMuXtL)k3S-Z1rXr|@3M7K z<^4e|qH8jO`J6_VdHeH(1tfZxSB?!q_i6};^+T&;Tv69R;ZrDn&n7kwLHV*w5o{Di z86+FFpeqEye8K;H75oJrl^w*#U9F!XoRVNGo<=Kab~qUiB3^OOkuN*e@Eiw^L{tc9 zu(cQpG)(_0krvCXD*VDf(^X>7`MeI#h<0jT9d1zHRA`VUadC86s(;QAl|5LcRiGbZ z5wSy~cX#>Y_r1V9R0bV;#j;{)k3$pf%V18plW3QdKI_7DDFYK}%LfQTl7kvK8ta_4~=t@lRCoBNLpbyHyD9Qo?VEk?4aBX8ul+Or5d8`L|SX@18F2Oe5;C zWIX3b2h_FiUBvp;m~XH?UPwbjEntuAsCEKq%0znX_f6KGr~qH<;4I!d>;SpGZ)$@W zI|@2o5kI$r91zJ3C1Aw_n|`N)Zzrk7PljB`8$e*s{w7i{E*v)JXw4Afbw~O4Jw{)$ z!%gu*x$*UZj~yZ##oDhxCXWNz*;#O`3)U` zKD+?j{ph>|rPv<)g*%jxvXOB%kpXFbgkWUQMqg`JiJyX#d_3N48QY2518{bK5Ba@p z(-Ifq-rfzEqsJ4sTCDhcD9m9^eQsgZ5Ih=CAWylEw|27GldEqg6$(UnU(ptPtO-Z& zJD0R_HTC=wVLY%e0KehpC0EuJ@J3v^a}Zx|^%i;eu6bYw-_vDJ_q65n<7RY(D2_c~ zpdS`@Ia`hA7RY^XHC0RvCyyU;ugC2uO^3+0@$h>2mQ#vY&VnL z8v=Sa9&8m%%?^+6D?+@|B;WEX^}ER{7;YfJP*EPA5`6A)Ra&8uQn$0E75ekBXtMlp zAX&&4`M23PLA0V9hRCVU9)Q{cw4%D!&d|}WeVxLc-D}w&ooZY@g4&7 z9wIB`akc`m5umu&t0$1MYD?d_b=dkV*oCVU1<$4HPxxH@4?CQfKICx? zQ9E*d0KP`MH&1{rQ;f8%WDrcn(5{{?(3>Z{j9+wLJZV9&j=?M7`LJ|){8W#x;ubLi zT~f1`j?U137`l?It;_=jnB0@p=ii)E0bT@sU9Yd~i zXZkElqKfExIW6)+@wyugN-9h{_=;JM>%5*Z*7oH1Trl=}*L$z>dVB5~`g#mH3H#Wc zY1(3Y8(txn*6KdKXp;Kc3!ztr%6eTHf!=aGdf@JIe3@m<4F`eo>u19gxrgNxpiVdZ zxvT4Z1QT#Q>NCgrDHW8dfrqXI=q;w(kCX1*?tSz8-2}2vgnHbU6dBGlH*7dQ>odz} zD!>tb8Y1+LG7y%_rjd)slO;owTc4EUq33BnoL_GYe9QR*_W2xW6sQ-#9?J%cdz?W! zz3C13qjx`U1y7p_B@MDdBbiwFyw6tOlYV=R((~{=Otq7{?}?P2h!pf?{YCoglbHpr zi2mRGKmJ?zh?#+g>3^gDx4K7S|K)cwpVcpee=B>$_z$K6Jq|4^?e7CE>;GTbBi8?h zr@;I#vPaDSDtkoF!t_7#6eKPEXkdh%(tF43VSO-ZBK)J_;0TaDWaqHFw{Zo@fKY3< zA0Ni2l}_uxxA3hbXQ0m#y^dVyTUJsyJXLN*22;1D8jd@^nWdpN^kqq1EWvl~ow^ph?<4M+8--n#9^(*ak`y$Dy%bpYCh zyW=Ur-lp8awd_MI8umN1i`RBh#VCLMNcmvQq+ZdM_joAccpDNncvL3dU%<}NtnCu= z8u=vMXnQRhKCi-#S<&9B8(zqwJIB@+s__yV{{-7g(ECEzic1pFY@shzR}0SpM9P=^tzT8*;?I=m0VQiw+R;zv=+7{Es?7jI94f21wc58DRnS zb8>u=2preR63Ac?21W$uJ0LzUoGom4Kyvma9wfyGf$H)()yhwh5<((50@wk$7(6ny ze)Nbj!Qf%aD7AXuTs&uGg?{jYMRk{7I380?aVTeRr`K>}hzDP8TiA5DQ=JO-#g(?&TP47WHO zu1N97f3-IBS|?m`*yaJb;h*0i!eFsDWz}!_bJpk9x{9_JgZphjv9Iru+i3F1^Yl@C zGcPa?@d~8``>Y08Ze3C|CBPmb@y&pELhYiKkrat1k!vgf6F}_0dMktYx{wvM>YLL0@-jZAk<3S|mrIdgmO)3HGp&hO3^o#jCEv*qp{$R9+D+vlWk_Nw zvzV8vk|(cR85J*<6*6UzG0i(+fG=Q*&V^7i%dSGSKq!$=Y7Ble^{bWmm9NU+AE>^1 ztZq9E)et*4lP5+y(L|w4Lcs%_qf`%q<3~DbFIZENcSQ+LBAq7bMk10{BF9;P5OgrD zD$9>}kCl-+v8gy;`3UpG}dU zaqRFzk|+%ARyx27B!cJjmW+Q(d-hWJ3%nn7UM%my9{K)(K@q%Ht*8(u&gPy~)9(vp z`Amn=Y-zgAo)~fVY?Wfw8^Wq_(r`=4Aq@q1u^1C!Rx9WLRh)Q0$DD12vM)jJ46Gl_ zEG~X;RL?B`DnZC1=-FGzG>sOkM$d1tcpN^5Hbp8xjh^EM1(p4>juxN)SiK_JF${qa z&F;>5X}P^PLk=&V!<;l@aWc40FPw3tRWf}+#5AADro{oSAdQF zj4hE-hHOT}{udn^XBd(^J(4imf)3nfUpFLIRwVH`fLwivy^T?_VqI})wgD$wF@YpG zq>$7zOPP}T1P`(Ubn93bULqvjEp20v|22j^gHuWNc{f$kDyJm zUR%5I>J~dY93)nr0zgz(ODQpOCZBhuS|pZ6Fq@z{MSBXXg7hBgxP*Du0qY>*GuKLX zVv@t&YC?V#Q{c0N@}r!Rc0S=;d8^s9!UU!h7uSF?gpeCdsJszYAW|gO_3jiXH=4PW zX+g-MJF)%~$~_epsW^Dp!!+1KyPrQ(%-^=hJXq7pcoMS99fx1sD-=ec`YpTC%W&eS3lu_ z=9Q7gokLIy!7mkUsmSg0)_e$g{7Fi%3V$&?M+(fU7U@An*T61cJ&=^4ZB9DJq&o+h z_nE>3t}57EsA4jn;{;tGdq2Z33|%ldu&f_@PWwm)-T*xB{}^|)6eyVa(K^b;XUXHM z)?X&Zj%05YItHPi1^3>jxeT6 zCjW={5Dd~yf& znL?3)Q-XM-kgk$7PIK0KbDoefiJD~7XQNsq4@<&nTITun*MtvC#%Wk@6~tTuUB}$x z)#BDjG-6svkIh*g3enDVY`>%f>~>$hm)Z?_W+4C7h*t_LQL9@{V{3$2n!KxTJvky~OF(RLiMh?O>)( z)6=P8tgrL(U2RKmKluU-Wyx)Wuv3nono%semD<~t%c^ng%rElWMt?ecD{8AMbz7Q3 zZv)aI%3SOEt6biwemuHX(o(V7_N{9fB)|k|B&JKZ^PDpQS5sRq(*ymWNLMFv->PXENlAZ<|2QnHB<;tQFX~$ zd$!%k%*4)?cga;-WOydrmNnDVc)5~sakr$@GDcoH!RR_5UAdiE;99w#MJ)EeD0#;i zUx2<@aB#-9|HCu3ZQHhO+qP}no-?*>+qU+(+3fDkzVFT5{n{Tooz$<>Rh6nX3+#%$ z{ysaGbG!Ebc|ROIL3paw@k=(9M@vb}>VBeFbAAA(8W#a{%VI0Xy3rw2-vG{?euX9S zG#12payAk@8J{1QUV?hpnfB&lZ4Yq6G|63cWc83vso_rB1O^S7lhr-8SDxZ|c3 zS&-`l3(*!o4W|jYg}g-Vl#_#QZ=sQcknLh0X-2oL$1gz8J@9%TX)l)uFW7mJE3gOA zS@U8Wt?Kl5x$;?mBot|i)Xi;bsD>%V8NG7D3&RveGAkF*V?>iAaAM9fv> zJ{9HaHC=a|#rr#PHJu%q|6oNPpC0qH~HX-O`P>htcEg{?X#hsIg>Vr z=&g>m0-ne;mhDp465Wclfqz*n##1$?AQy^2OoGYC@xL5uA2AP$qT}qRrk(%Z8JuLP z|Dv@0AW|V@-UEihvYU;$|Fb*LYFA#P|EqzlvUk(u#;c>%WyWuULyq>SdqX!!dumD- z)^8uuO8x6=w3|a#)w&nixLO2P`xNEN&dl1B)5egAD&vl5n&j0RbVrT;v0L=ybW0O1 zLg|F|Foq@QYgvL6^Fud_y`OFWTMx`E%~eMTe4mos0bGXl%_W(yB~OAdd`3N42lAXcU}s`cIQ$uz(UqSxJhNgdCl&>x}{U zT5&l(eRF;IPEQ6;_+T^R%yvgRBt%NUw95h;vgh@w4YCK-r{1ha)}z_>7j<|q*&0}) z9-SH8=y%54K@Xp!nXsbVOQAC`=x6k^XWpnrtgs%j%3Qs}rRz@KJgSfGP;#cdp^eau zNMB7EAFD9Q7)&;=%n(Sc7Md`Dk5LlHQ_7c?!jhlwZ~qxEl69PV=7~@|Q?HEVVK1f$i{n(1T`$_q^N%#8of>i^gBg6RLLy_7s`4DGD{ zTO)wsfBb*U$iYs)K+o|XfyBuEzw!at=o$WJAAp1XfA#^`8QK09Ho$+WE3p69x&k93 zdj1ZwcVw^#h6Vjqxan8NQ%!N>p`9xS8e_88;U3_< zeCUmI1t+UxZY%^AQ9)%^}>~eeLdEsStHRVp zUGDMdwcES%`nX+CmCM=L*?CcMT3MEP({jm`0Bj?OtB78sUGJ$q#EDJ#L@B7Q>8#tv z?VIrd=O0H<+;NhWf52szBn??p z5y~n`9TIH=icm=i_pIQ2K5+x%>Q0AB;KNf~r#;_d-v4)E(l>ae)7g(KOhwUn+d4A z)MDVCvPE?6;t9NHoLZBlYWl{$a|=*6iw`+bU{8V_MV45R=v>-Nt);7=p`yc7*lK%J z{t-G-YFc8#{PFvO|BIx}MnpFRY)c4Dkj$suy)&z$NIna9^ms&5&fVjV_ES1|Yl<#A zngq?D84X{Mat7{9b)>StTLcjwI2G>)=|KO~BoDd~IV0vL$n>BmU<_sZ(39)| z8Jzv9^Aj|i+}P3Nqu!y}TiPSce4PWRN0J{ZeJg&LNAjn}&&5~kSI$^)tiw;h?g`Zc z)qX9OIj?3MZ79H6uvfTl-*rL!<+Lu4cRG;QT39Y$%|27?%bTRYLjLpgjI|kpCkDQ- zZ5{&Ch)MQ9<_*qUJOmv62>wWJmTter7upKxvr{tEd}D9VgO6Fk2K?c)j56Af)+a+z7quyf|$EJLzp{Jqc6pEJ!H-eI6cVQo4j**BlV{9 z#pH|R`%C%2I_i-2KzEmSvNLu0;C6)Xf9jclFisA}q!c#e|LzUv19Gbt$kdMYn@}tf zI@oPMkXAJjH)}V=m*)o~A`f!GTF7uWlQbuN_6)8b{5c0>e`|I2dM5NFhxr%&vi^?| z;UQ#h=iT5%fg!NQi+m-NqkfDVUOE!(RIZJrP-hcoIo-ZyA&!HB@wrG-0D_pQy`kAXMtoCHBye3(S8)lu!K z?#cF-O~-ggO2?)n*W>cLgufQ9A|YF4=q`C*DONe&#t%jG$@ZB*dPa^vk6qzx0}O;c z2QOY;h}r(TJH^dF)jhU1(mzbmXW(v_+d;d7-o05Uxuqfa!(`H^F}ZQo#wc6@yTl^g zgP9{!2dnm|_L?o)8stDCo*_X|{^!12_8M-#yN^JnMR(HXB3=I&77?9l6s_=#fbeU%;^cf}Cl ziGA#(2JM3f%99tR?a*nj4V5nJem59@pyy5E3)UCCH(IaXZ|L@b4l;Bnt-lVS+7Igp z-#v(TM7SXI1KaBt@8{q^JE-EQqK(3azjFe8Bk7)})#28G;6AYV4*etTOZ;0HsYIi? zUAR%oneQp_9HFT^OR*4sK6sAsO6iemcc7YoT^?hHS|`jp&FUhKN5o2Ed9uhlc3qsDH9pD#dJ*~@I%e(2kr8(@C|7tpX5nvf z>QI+(Z479O=}oX3uq%kUlNOGC!&wT{v`3lR#xaMRlBamZ{Po%>l-!H0QbjiUf&L*z z+y8-du18WIzP+>FirWka6|KtE4kL<3cihua-j$(Opr#*9fY=jeb68Mj0R_s$LY!TCkqG&uH!a6*c z`hPdcy3uhajGnRJ->wa9amMz9;JRCPr_3WmdH4RIenRw!_G7yp0>>5f8yke4 zydHsL&rG||>;}kz!SZQ+_w`+WEq|GOdHxvg$?O6zcjIn{-|)`@vvokcse+8$!(vW% z@Oz~K$B~Prl!NcoLdAerI&&ts6g2tg&OlIlz-xxA03CmWd177z!LuNZ99p;E;x^+x ztOAF1Lh68A{z5y$&G~E1`J5pf2{>Y45UC}ej(Zqmc|!CI_KZ=yQ9FnCM(&2s2rDq7 zY3+}<&`Sxl-)4T{+%=;oRp4)ekc%MT3S_BQBqAbnUrKWOHgKnj}|7_i^GF|@z#xAJ91vJRv9BrlNJfo zEka|rM4m#5W;7%?JRax1eF1m@9M{c?nX%OV(O`p&C$D4iEH_7-JP+QgGQ1t7AS|;S zC8dhx6|l=ggET;pW^y@TcP&Ol*N$?0L1YYXp5QpZ@F9EP9@SRo zm>m$aX`?UETz2Ot4UePzPFzo&E8R4)BdN);sw)`C4!Nkzh*mDP6_azr1s2Hi5rdmwh zi(}R}7n&ps$Hx<@qugsHGdMc9`T8Eb4Sz2Q>#eWp!@c>{J_1>8rO>j3$qlpTy~(`< zMjw<9)sWZA=;#uT$FxbFjj^+_h3U!D!6kRr*L({c!5%j$3uyO4_up|5Yr}9`q>MqbS*{sZs=`ZAtoCLyg z-QuCSQ;~gK%k%k7@HV>25X*aYc!N4TQ3j%^&*oaEcIaaB-kyGOl%%3Z)4%-wzzILI zvNIa;QwpO)egx2p+*pDvus_9B+MkrFN$)+=x#FIo-B3MM2yi4Fl zUHLxB=%IY5g(%)Gd4cGHg=ULO8X?Wm=$>8)i85`k@$bz?8U4tgu$qk)^~Pr}??`<| zI?@gGuaNfzex~yVcwNrQ2(DjQ2Qz~2LrladWiz>dhb*;`S{@{%c&SK(673IJA@ z)H70%i1&`wsPT?B@+O(-CTIIbcXHG5o(_4UK-I<^>VQ?^8NM3C)=R;H-@DR(UujRY z=sE2*Yty+3=ShptWF>MJxdu!ScqfO(2T$u+Y?rc>I1s4jk0%aD9$P2xSr|{pY&6kh zhQ^NoME-*;wYVHU_9CD69yKqo5uHVNx(3uZ5bM9@PqC2y953L(^gK?kG`xi6A?mVu zt1yJKR^E#?H>Ctp|M(8mDJX;}1dUwFTYc0UV8qL#$pOQkFHr&kPT3FUEzNfhF*`yi zFgg~JhK=Boz_CfAcA2G-A+Y702KhmIC?~3@38kowp=kE!9WuO5+6x7D2{Zh_b6q8V z=zkHH8|9%qZ|@hSQd9lqH^cxc(&8a18r6zOxac6XnSVW-Wb0OsVIiDj?G-l*E(fDr zNrk{6h9Ys{*Fnbe+bn>J>Y2(@*c84&jpRttH%JT{5cHaubQ;H(!Z$7fHkg zb#%Bg*Nn(buYsp8n{?Mx*Rp=mhad5;qahXC@II}?@YWPnpr|GBB9_XD_uacoJ%_?8 zCCk9{fvT#P@5R+^+BhmH#qNw<<_@8F{SLjXe(Mbe@mG4hV5I7NKTouFd_PmOc2D>| zY)cj?J8t|e1`{6X*uD3q-taI;;(D9Ex82%ypI3Va)^rh!ywKaA*v}!m~0HxQz135H&Wyo>*927ZfoXFvU0(->=t(*!ZLS~|n4$2@_ra}aK z1=B;SBylyggQpF|iSUeNEZU?>Hq69UuHkq+A(&|KRH4ZEd29H6>v9g}zsz*bYG(~| zKXd!>h!0B~ZOLIv&D~NyX`a0w^_gm2R#Go$CrI|Spk-um-eaUFWfUNVCqE}YzUd7= z))4&DaHAgvl7COdrOi~aEwCa&dEP%u{E4|7xLnrP;6_z1G3twMDPP^_mgS zk!n1f%1zXx#%3432m0M0lC8*d9a+eDEay2DP5<=#5uH=fQ!U)}XqdmePxNx`a+y8f znZsMIm|@bf?Ob=xI|uvD@@!G+%j`K)7&>f;)YLeizQW(z@QfReJvzgW!^q0yy+@Ub1iSr>!*< zIcw@iu!Musy0U5a|s|@O8ev84%2~g=knLuerICQEp0>>PLlsRO|OWx&2QPzj$a(0FQ75qg)L&J zj*GSpTf@q1bmtmdoU}Fn=eo4{W6ywpD97k37)BPzv`9QN4VIv7!u5peoS!a)EpV3U zuVCvU57)PL!m8{=@(%FD%C|>D@{^+t2L2%Qzb3hU=u zk`Lzs4-kU;53Q2$^7;Eu8nL9Of`B%f6r7WpJ$YDw%i}2grkn!u$eP5<-2PVkmu%QxJPFyUHiIki zG_VUQ517%VyoUec+ni_#$yKd0)s4lC$c^pm>^63lLbgd$NQ`BWYpNs~E4%ki*7Zw$ zoLBDCeiq=hA_g39;PZ~VJrAgY;l5k4Rj$DxYm?8#$Y70}14wl!UEz`Kn+$IGE+G)9 zLCmtcELzgsUU}>p!)^%W%o5jr9%BgQ2kFi;ka9BbH#^Jo>(byBT3w{U6s&t)I=|cH z4Z7q-?t%~M$p6Ei{|4Q2xd)_8v`In;-2xpZs%MM!w#U*@!JceKgk8_xBc5Oi1sSmz zWRz($$kh=4v~^SGrapOMLE6XE)`K*O2BD1l1Eh@EV39p%ym&Q)2CS00FddV)p+jUr zTTOx~hUJjb(vp&DAm!P`QXL=`59_^nfpDLx%t!&uF@Iq^Yry9En$U&jfC@d1wwh)~ zM|OOZaEJkmBOe+?U)aY03>OC+^Q~a}UR0qJAaWA{yQaW*Npvo9QUNjy-c2C zYZh+(_@NvqDi0%kt>h87M)d}BrVX-WU>MgX-s=^_+Wu_E)y*nezgk@oY$PKFF?AbG zWQfqPC$MBDt;Uq@a}n9cWTvyq>nFLLeeZm-TO>|@Q${u0Z9mN|s>55h&#gK_v$e)c ziq`(|6hIeBA86HE{@fT)C#wsG`f3OCu?2)#C?@NjsYu4*9yWcxr#nJ-`78WW_)&Et z=lR@`X@b5W!TD}7z_{&r2rX6ij9aFU;BXR;j#)W^DCk44ZR*ApB_oSYCF&)EFhErP z@n~T2lt6`=_6HZWvI4Dq5ls3i|0DcEszq`;YiO!5P8a9MA)w(pTa?4WmUVdB}i4QwP>{bN!YKo8}Q<5fJ_|rf_?*Kfz28 zIQH1_hsC|F)R9_+&W98MDk`K2x%{^A~>6A?QWXha@kEnb$k4HK94M(Jh#{I$$p;r-g1ab#kB zHHa%j^GtZ}9X7-3gT;$f(6jj{S`WaxZBOt#2H*lc#AGs5ryGra38Cl2gZ@H*`|iv>;07M1^cYxV8=dt?CG|X?adMXSuVi<)#L^0;eirMo{<}%0Zy& zuU(^M-H&#SwC!jX=#=af`G%<)866AYeN!aCgcTd$t;>1vz_|NcGkx5+Ik4j#y^@}o zjVnWHG;gnI*T}FKA!#(EYRnYTXIpos93A^;Mh z5kcLyY01D%tgHXJ&m8Eat8a2A(pA6U8~B3kIK62=p>xr4A+;*r(CM<_yD=5^GwC~o z|JN83x-}rgHhuP_9>6EU-2|9WSuD9urj~sm(b}LVu5Tn8n4lHVyMaG{Ix*!E`Gy6e z+t`iy=5Qc!Cwa2CN(v^mlw%(mOEOGCW;%*pyBczQbbM`GQ?Z>hd(fl0tZsF^)Oc|+ zIwkpcU%murGk+}}N=ALOMsJH~Yqx#bvg*aS5Ism7zH0SgIQWyadCH7~WHw(!MN^P0 z+MA^I>3a<;@>J?s;Nyj;hwn`)9+(?VgQ_;QadPco9Sd=|8nkmJi{E||EDo3WR9xum z3=1j1hgS3%w}90|-w_jOM<6ByGU6*Erh}I|(M zD*L@A^O@`Q*dJ0S-4umxcDha1llTdLsppZ(^l^5_hxf$ZbI9i7c)1-WYt_U-b3T7+ zcr&b4AFwbl+nu2|f~8;MsbEt_8u>Za7P$&wx!eZu@rexF%~G3`m_{UR{VUAem~SWr zZdOjtVZMVyWal2c#nQAVD|w4Nq{4LQjR+mofB2JQ=XtziuURAO*?)B#^lT35F(1O2 zd=c{E@{+gC5szS|@Qz3_prMSNto@QjlUffGfEZqHjWkSg;G2N5eY5WfgQoEl)BRA? zH~~i{MX9GGVIr?l%pGoreI$?tq}1eJVM|i9nqtB^dhMzxA(~`ijN}o}t^b|#iFc0o z+O_lR=!5u$A2tscXv|UpBYl^Plzo|lclA&Use8~f;?;Hg(uYF%=sBvp3w-1M)OdUB zuj#&XkYEzrFpTeL`4%r?mwr>R8+&JoS;YGlZ~!~`-0s^2=eGW`3BLiq>7K=<{BTE) zn!U6uhg6?O0k50`x}abz7Bt~nH&}Wz>DMu71p^LApGe38H`p70sQlL;o(Z)aNYC?& zEfxX5{`pFynskOd`Rj1L*)h2GwQ$>DTly)d)dqOj)7$zsR7zR5X$VhYYIr>+tLJ>( zP1F588(dYKunNoAK`3I2O(uss(R9kODE3J1=-)C|ovJx$(4?@%G*~;np1yM zsWr;d)=D|OzfjGINJk~};bU1%QK51%&+Z}-{utb>DXYX~C`@g-iY3#ySn$Vc0xt`9 z$btI?VJw1OW|VDM;>#UnVq#iGnLL| za)X`R|2Lu8U9!?>IxZs4at|JU1W)!DS%gDTwp80TCqV7oh=Lbsh_XfN6!xIFk|bOQ z93h25-~$O~A)hS3czvEhy4`x7Q0K>KXs~3w7j)JWqJ17mq!?5elxP+}9sqF9T=EG? ze<{W=TmjuOXkohK7eMDBjLanpLSM)K>5GJ848?Q{lwQP}e=B$1pt+Gs1wc56gBq9M(aQO6X!>HmPvd37t zFAgwrUWsEIPI>StZDB-KrI8StOj@%^bdtX$aafqY(;v`J+{#oj%j=OmOqC8@vqSxQ z=9Io`4&O1E$MQ|P>^j}i-kk)`8LmM%gyM+baz66C(fElI=SOGu3zJwDqg8WOFIyh? z4<{rRh3ijQuXA9=n- z_yD0D+FUN_z!UZp9-B{x6bCrH_e(OH$Dht5fK-z^*o=p-8Tt{#hz)#8zcvGf7%&u2 z9a47onZ$7uW7lTAb2a%RpS4h0^p1XGw5-gGN2f+PXn>eOCQK?!7j7MXBj$HsZWinZ z*umSuJ2rz7Q3J>jt+ARs6f=>^&Smq~bi{QpXua;V^KzH9H8vIx^V5o$jLGVPi!4GK zMcw%cnEANR&>HY@Us z93h>Gx7Oo~$i0>sHbgl5KII1r+8|~l@#yp)Dk1)vd7^OVOe_m6Am3s&5%f+BEJ|P^ z%}K>A%U6b~c9YBl2d(^_>y@G#2HPeBuku@c>l5BwD|-}^C;!EI7(^p?#5MgDA}huh zGY9}xPUeJhMV-5S3p5c?A}_CqAhQN*=rwnBV9Zrfn!b^kE0MjZ&}T4J1$EV^Ca?{M z*VSRGv6@~BwH4xGSTAWapWR6 zWehkc!u3eJ5;B_m^F^u?qa1iurViyO*%?4|N)U93fz`M$rQo!(;<4i@q+&1nK}YZiP*AH097YYI|PX8ueM zRa;0>P08e3kGafqM<374o&_rb2KE8-CP|=!!wr0g1rpy4HWidf0~+~4@dqjXX8Wx@ z(Qo~$J4+m&lh^rM>MPB8%3-R;cmCe&es&=%woTg)br>Fr~GhUa~r|61PZO5K024 z(NH>)qp{XAf8gZXux`ofy5*JqrR$|LL~JT9@>R08b;qW6^gjJkppAZ!b9sKhQ>uHt zbJ?Nn(zT6#g>!{>g`wXi)T`B_m0bo|u~y*(X+`r>eAW2zk3%)d*)nH;)eAI*(?Dju z)sidQ30T$o7;y~Kh!qV3o>`=VFJ+NqGhW5qdu#eg&*GvdVNwI>GlKIIQ$zZ>VKT@8 z%T-;_4=~FG5Xsv0+&lF&vUwgCA^PXT?oG1xbiTH4Rl4<#Y1rhxo$EY5j3ROik-$6| zv+DElF0SO|-%Q`wkqtxZl7@Lfv`ymSw{$}gQlqpO#UvIW;BX%N+vd)!nBnv}^=3Al z$cCuOcG0L7s4N2dV2b3Q9liNJAsIg$eIe0R9G$)2wpvW~Vpb;((Nu!B5c zPgODGiSpNPeDE=L=7JlnCr(e$-s{hxUz{hnpOLz#f?z(R@YR^t>8EefdNO-Ryn(Q< zyuG;Z5e;DLc=GRt9g`7Lr#a~x8 ztwV6a-14eN2#}u*q=4W+_yc`I-9oB+bwfYF6rk}s&H{0klcCh1%Lw8KI>NfR?y|LS z0d9mOnm2-Qll0ejcR_bQ{PleHYDNf8d;Q4g{O9^-7%DrLIPco3_B7z+rv5|pPo30+ z^?}}4miR02veot>1fBzaA;PqqNqG8BN_cuDCm~Rjf8ZY)fcSMPWs`F%U&lS@f~geM zZ(;6u*KhU;?Z@BfomvBB7aA6e1IQl$5-w39<}YSWv+x+*>1i(V`iRnvn>0yX!TzlS z3gF#Klz4QW{uO$8xlO_yz~LPTi#~S5ABxMF!R?qQPn`>$8SY9U=V1D?8bYl-7N$lH2M9d;5NE!r5V%(dBJ2q}3$fq28q|Ax;61R~KM;@FY~F0Cvx+nC zU8-zmxp&8+M3a)Rz_(SzZBR$u_jk=?q4EK~peE}OlRm>{c6nO#ps}V5?^6vZQQTyT z{^fT#so04N7;U_+AveWol?A^pZ1_(b9g%enpy~Z&)6cXOyQqXqbzFH zgmAU$;AB?hg3qhXDdJJ{0{r9mO0iFQLHF)@(f#s&ad=|)Me42gLGcU!t^Ee~t8%$$ zQQr;I+n7Gjn!~lhzX2OIjlEM&9o*7N%eV;is{#*P}|7#p%LZ;Z7DJ_0;J;C zeyeO(t)z+lPJfghPM7vZ|15a`ML@d0Hh&z>kJgM<_Ttf;*I0&CN^o(Sw{Ts_?98i$ z+12itt;{yh)M}}=b^i=>N?p`dc2)l9YSqcO>3rW1WKb3>CAfzytjS+HWXNE58IV-g zQpeqy5KobUmI-AK>+G&UqAXQj4zhHycfh7S?`xszc?**VU$8KVhL-+00qX?O?qjMo z^epBzL7+e##Pi>m^iqQ^+cMH($>ywuIiIEV^p#hOGu2*G8n&=ZE_0oc00s5u;aA`! zzy#V*a>l}BRHmOi6|cy*T3U`xHP)NLc4A!*D&OH^47W0YES`^dX6_0cJGZpNJ+^~1 ztSkFhK+8@PZcT%3s?AWQKI<>}%fk3zGksAC6Q0B>8y0obpmO@KbsHZQsX*a%>>n3d(zjE9M(c@EWS zVO-Q-e~qF}zr4Gs#VqY$P$?n6gtKFaq`iTFdiUW!x^FAK6eGRLOyXl& zMdf&Jak{gM)tbQ_Aja?CoCY?TMTg78k(E-F##+4wiHg{p>X$coMir0bQ%~Xv#`F81 z7mU*OAH4w-NlE0xnnWooBeCWxYfCD)o=gP}ONOrhXAZwiniGryRfj?chdGp_aAng} zGa}u#98BoxVTz(!ITd5?bK6_n!EMQIm~KqB=DYT@Q;jL`QN-o|Zsm|-m560b_~RKzmOc7i$EXVVYGkH-&f@5C*jXwk#@?}g`cm{$Y%(@he_h{7v_ zTCY~He=Xc=aS?6)2wpwqRx*Rq3}lHI&o}Ko`E)VX@LG_zA>UUHa(OMe6q9wzL+|E! zZL#2aLC%aKHedH*Dm7$F7Rsn%B;?k8=|D|Y)IZc=a=28Kx8nr)=fvQ=XThSJX3-8CJmP~(ASlikp ziZAOEX}QBo47WDY`0ACK6$sz`4gU}<011SH^HKg;9FCyEBZER0A`&As`eTghJrSzR z8ZEc5zl79?r-$8^A+Yk6DT%9g`f~K5Gw8mI0UWoEJ(_j`h}JCl3d-Na(~j<0>rIFL zi$AwO?#tU2f`v^!I!Nq9hi;5iBowr|xA;d@kWKhsU+Ta~ct2quG|e;~8BP@IP;#od z0GgYZyQSEYq-B|qaz#z01ZPf9geKB7Ib>wssNbwEx5Zqf`1xZ)5uEh2tu6a_s5!Cm z*ra4-1!;u)d@>Qo*a&_zp>GRq+AI$;Yda0+;N)Ag*UfO*_e_3M`_ul`A&0xO#SQXF z7m^TKyRt>?T!t9wUL{2ibf7?(1H%nT&V^IV_FG|Mi^<1sW#0U^#-rIaR|KD$cli%L zS$hYpTfzzUjq8np?Dbv4wVK0rLYC--Vn;&e-N!+z0PBdew*ALoz?~S;ytUWO)ZrS2+k7^(DAMXP(Jjzg; zsl&twgu33hxJyS+xgNLaDp-WBP$->V_rumr1ia4g6``$x&C{uC-gZ|v+FxPW=~iul zje|?9R+_H;z01|zyAOf@SY!K1F->OHzXJpZ8Ve*p_YZphm` z7oW^s%3UmU<~u96FXr5V!y0$34PZ7ytg9wX96AP*6+5hjwR<*3Ln9rUMG9qbQDAmB z-xRT|37OXY^QG{U6nf!uf0NLo)Wh6k%2ApdKkH$-%A;a(JJzn~_|#=5KJUu7D$=I& z$wUXC_;5}#Cr|;CeykzCx7;?uacU(BqurElh+fS90@Gv!BojijwU^(Gx=e)T(Ctx= zkuD0%C}e+MO@ETNqi+p{npZLwU)%^Jkjj3mQIdaPI``j zjr%rHYs~4>hs#<(3OFdo64Ed47X|O-BSarIUJ~2lL#RDKDw+fPWvoBPO2z`Sk6t6; zX&Th;kVy>hDH^fg=j!fmVYJao6FaygtuOOCdi5LL+oI}%;Ll%Q-Bg5TijO?0nZ&qT zabk|QPFZW#;flk4U%EPkisXG$Ge4N2oo|g~f9QAN9c4f^(Sl-kuL&d|ULZ|rg!F_| z=`ouH*R<`MR=mhCwyRMHGigN>aPi2*iU>Kf`{0{o;FpVnXU;1Tz(Gs}wCFOITM^6B zOoFrFBiA;P%@aa`u&WEqbGXrJa4`Rx{UboFgV8-8TP*Xl!lluthxCFT)_W&8N~!MF zL~D9TB}iOq4g56+_NWm#@_}9#Xm$m{N_x1(c#X=qv^7jep?IXP;Yq-K+Uoh*Poq_w zF)n}mS{Se68FK!hTLa$|aciB?lmnS6dD^g;%%k=PyXCK}SY1RJriVb{maA}w!Hrzzw-@$YGxFgx4_CFx5i$fTiRyPe~>y6@3vy>q5d3F8DNr*X_I854) zCLrFrVXay_@_VN)<^cDkgs=Zm*Fl(t$Gqq743Pi>CG_~EB8Fb- zqyCY6R58q~lYAzaAkaX@Ob(%vlPTm`JGt$LuEqDv+>Na^YLA5yVh>s(#KeA>A2izc zHsD%b#h&zOK-vb9Rzc|FB_Db7h@GXhG+@Y7ubu%Cc!YfEqw1KCowg=vXi|}QVLUx% z?o`dNtlhKK%3a7e8cDo@q?*_&Bk|4ga(Xdqn5W{0@mZ^hiH4)n!`<0^Lbxe}({LAQ&$;X?Li6d2V&|puB9wSoZDANMh{10+3R7DgCM-a)lCSpSw zNn04zrJGktMNczx9MPx8SU`}6loLmVzgdU=uiH=|ljY07H90uP$ntVlWrVhlE>CY} zRjKfxo|TCBK%;GoYf@^sriK=LpQ}xrYK=?WT9{t|E81LyM;J3IysdnFo-Kwe{SxI> zFKRa|c_f3O7nq(hZ*{)&AMEn?k2zUA8$xiC0ZnC5^DP)k5rw@GwQ?W^8Ij4t%iVm# z7q6v@(Mu4P4_%iS32SpqnP>W5Xq4Zt;?(rwr4SG zW(7qJw}PXE7fwo4QWz!}Dmv!f>@B4inMiRJ20YwMcLIKVp zQs_C1khZ0LE0OWlQekr|?V{ymmenH?y|C$(C|JIZrq`&~+}B1ML7FKmN=oRI>_RWX zZ{G<)3B(C>#NIr~om`Pk zM?z-Vdy0?W0MTx@BjjxNrD}Sco{Ls>Xx*wEZOWATGmgNwd3P6!lmK%{{M;rjvwD_L z6=gw8a_d{KSD@aXtVCc}zsz^R#p8&{q_nadshzY9vo)1M7D-OAn1b41IT1+^3oWAf zXiRHQODHB^qGzrjF>L!g2?O~?uh)n|{W4Ezd=bs!QBiq?)2jtb7jQZJpH{d7BVvmA74ymz_?xKasiLpX9&1uL+U9-vJl>YUD=6pM$+Zc}25u z-C?hrizQ5pIl?7u_q286CmUCtP`iX%1-qH;R6b_spl>%rwvBpitMzQ(nKy10m*C!Z z;mT{02C|+$3H*9Lbv?%kjXm$Zf#fgOv{CWWq87RmjNKT*P3k{MJHqV3Wb%?^XoL&t zk`>=Esw%AtHqlS}d{l;%$B2h9TVA;%rlY734o~~OB6@$>B5zHwTW%)wuJN+5O@FEG zAY7rTKlk(54EVAV9~PkP<_u3m{7Iz_RrHd<)8UdLXp#b$JP+l-g;Y&)Lk%9HQa zF1!3(Ry|I4kG!M| zS86z9R(W2lH9xa<<$qPT2DQcw`Xb>bg3}RKOF^`|{5ssT+Q}whY^zbe1QdojzI21~ zSHR#3@^|^f$kv=Wfxj7;#lFj*<3c%hXyLOuXk+bjg9q{So)B4<0BC%{1(UMa?5@^( zhEhIK=7 zfqT)~iB#FFq1i0$BaFl4?7dAtRMo4RWSV5bX$K{#Fx42rb}WnF8X6)d z>^c_9=&^&9%550%gO&^rYw2^h)NY1m=;`^>*e~i-QiaTJCPWD_B*^pP?Ig&ps;UzS z^>E?cB8kSqHsXy$+E8GLV8n#^iOtGWubwu~0EF=O;K=v+kHp9i=gy&E5F6k|PJ5EO zzuN{Cwn_%Y$SRGNEf?VzQYo6pwUq0V#@?-Sv98qyOzdY@eA07tvb$)4SV<-2&A)!c zir-}ezxs;YEv=%6IKkkhh{1ORC0`0nXB3ID;nib0XYlUPuA^bmkNX+!*eIU7kewRW?MxjvnNq)@v6yl;?sTI&lW3hpi`p)M6ynN>rMS5za1R(ODG=mWSIyi^TPZ&Ee zSfPki(O5rmq*LF_Y;4o#)%7A6R#<2cgnc?o8*Yj*G%s}QOp zHk6PvVqqJ%Me#nSTWL29aLk;_LUF)g03Biw(}B~|aJKj5Fr}kDOD@g!sE4E1l4KEp ziKk;t?OM9HSh?I3?QCxXZ@VX`Zn0nEz55~HWvT(fAD#X33zYtYJu3T>N`>9XvNJh^ z>=3hZPG-E1;Wyl6=xa<}cf!}WQ~0BQ-upWSMCVd& z-_Lb!^GyqwJqfc8b^}*y^QCy2v60Z0+Y>0hR4N|&zQtkJ)?IYUc3rVRlZoYX>`SNECm9; zeephL>WFUVeLko;?6j}td-M{tEWJd$0sl^Q()?Z%M-Px)koDIg`r7zRy}6?B*C~*6 zf-50#$3jX3D@9=Jk%LEtfARILj2_fP1p+*jT!j+Y0;TGRG7hdeb^iHT;Oi?`$KRG{)B;g;YogJ2VAV3;g9Lho zdp+(|LIpx*%>x6egACY&1-3tighOW4pGLyAXDuHE<6os)7TC*=-#vk!7v)vT21>V? zA?Tr6lXfmF8J7scU)z_!$R4~dEFD|&Z&(d)5ivb+Hm{8GY8Zltlxs7rqAbC_Ih5kM zO}}em{8ev4$&cWpfr&=KThx-;8c#T^+uq4^{VSI1I_>(9w(6w!{c!M+ITsUSR^x>i zg$lpBX1_A>sAm=3PTWB}d&Tkl8e`yw8kSq|S#g^{bEKpW1tLjNc;PVSnY%ktE~NasoSZlx0cvIp)X5AR5)^NvQ`!Ysfzy5c^X^U_lQQ zaI-8&*V!>1JQ$1e*s8|b1R<&(w*_Ex#%Legq@Wf;K-+#=Iwsjc-*$t=>1LucUdZ{BSz;v za&IS%-6K+z$etrH2aMS5^4_Rbuuu~dl+tdew&l7RiPpB$c`$Wz!?f?|hhd#B-@K37j^zPl8BH`1iT~A6yPt; zJx6bzDGe)e8>AOWPHB%VbKjo5$XVzrPpe>+Ei(S+4JfNY)3%fGvl9l;Yd-wvmu7On zXuu+8*ru`VkJf-u+SE@w10&5I!zS{v3~`16=PIYqyop&Yuh0B!-apHCo`-joq$u0g zbv#=r=A-agFIlI_)U8yPwgn#T{eak}H4Vg^>q4xYRUJW^9EgY8M@(~p|D(G%froN^ zULiX~1 z#*7*>oX&ZF@B9Cp&)esWnYo_(exC1j-Pd(}uls)PGY`WL)s2JC3{3Q5T*6&a4ry84 z?M>22ayb0#>(7gWT2Y;>K@P+H>vp#@1?XO8L?68@5h%EABBV~MnBV+ZmGX9$iu0 z_Xg7=H;dp+TUmbEPaXc)`0^y4^|hGs+}MvMX+Xyf$2h(nzy2_+K(O;Y`?1SH$5;ra zhB*@34sK95Gu<(dnb1lMO*xmrV=!~!1&iO~JC{q=ypxv9=MB-{mclSJ6Oj;fiL*_B z>r#WS>CW2mz_2G9on^$Y>K!-}2b34I6_j`ly=|w9eVX}<>BeS zk}GWQ|K$MPzAk^{f|Ggv#+Wv)IVXYVZU?XSpJ1AoD=)6+5ISXg`#JW@bO`i%B>t&3 z(y;okn_B#rymub8n%+WR)#xPTr%^hw??235lpuv#Xk6MQ?^Y%14F`e48d~=(G9HySG0mooXA)sLJr`2`_r;(rg@S znr-MZV3#i-6#R2^IyT&RJUgWJVX$^H8((qXohXU=k6f`A1kaZTsvL-;y9E#AOvX!T ziy`&Z61(yr)s$SVg*QHIX6oiRbpsZ8-VWJ(N%=~>+>sBayBO?%s)~&-(pds|hC2t} z6j&NZU4G})cKNdSI&_}#ASPBrWDi&Fg+#oG7oV5e&{~}6HU$X%I?4D}&YHIhc8A|i z4;{af?Nz7JXR&trn9U6pM;p8HpmQ+Q`wVO<6>Tx=bgxKQ+HI4w7%IjDvlSlMX8rYE z)o9X%p8Q-+Pxk5Bn1%tyhU##Iezs6{=YxCBL{th*;M#nrOUr-!Oct;#Y}gQ3WC2Lq zN8#glpUq}}5viduTuzqZHSL?NsO3cH+`K;h zL*9b*#QH-&k7qFnf83_ThTL3OD&>d?$eAy{V%-w0vaSKrR@`QMrYmTcrMT}%khrHb zMo(E&cHb*&H5|KLy0FQ*?x0k)TM#MtjP@-h+c2XHe%n?$Unz`J$_Ss*D~YtY=Q7)eh~1Zh2UKGJ{9*>C=uEM$M`s zyx5C9P33RtqrUG_y9d0skmwHo;;EygRaW;lBT<>VR3h7ER;OWnQpjAFN?_clc|M|QF( z2jhvYs_`4l4^MSP>S0ToLWQalW8}{d>99KJ|1_N1-0A+_)|rbTi^L0P-W3%mXhon)T4Ffd1f!BD))GQ7x25MEzYZI+zxmE|m*_-~RP}+4`%1(2e_`kD+}d&Pi2WDOFK)G4 zZ#pO0YsQ$zSslNZHqpApmG9bBi%Qt`q~OGJtliw*#>y@q&WELZx{1HYsRH-r2-m&# zvO8sq|J_|$SXFDy)YQ=OjVd->a`CUbu&JI28d+z3k%Ku9CI_bDLOsXXKAouKXPJHa z^HEdx>#JASKNXB=8jKXZzD9)pxCURCqMO0m&C>Sb%-18cfV4s+2lN(f;%iyCs$u3J3)Dp5wwq81{Y~e5OV}rhnc0t_c)63` z5Am+esS=1h!F@qzbHE!9Y4K3*SsTn6F8v9D@3`*<->1z@Ut>PS^cfDdemY(4@nP@u zPr<|u*ZVz%_K)>g?&-hfQq$9*wfE!Rrl13=YHNCCJ#H*C%Gyk;4P&a)rx;yr?D+hO z_fF|b?3h|D}FoW@AC_!Dnzcul6_d zjnRe!!)f^$4&m+@<6MLLA2;3d&;0p*=H_?*TQd)XJD#*EUqdr%xA+|M*jzp9_Vxt< zzc!pXWrs`;YsG6%hF5kqYWmj!-|3dvZ?E=oyev#ocE9VaD1_c8ae8Opcvz2AV%F(Q z_L+(#_5SvqsmBK7bH!X0>?N5ryF&sruk?ShzgMtn+qF|{d43u6s9bnn-HKKqkli?@VvQ|3L^_i0;O1SFOGFW&ypE!ZY4kQ2e#8=8H} zWIFsgmr&Hr*aYj=$%?RAsOQslH!jTOpbSUyJbS~o)+ap4vvkPoPS@r6E98L(^y&A+ z{Lcxy3aSU=^rXMdBATaoFtxb3*>fjj8b$W-TYX)anJ_%@IQ>AH&raEm^!3}4UP$ld zRXq5p9a_^h!c*;|@NDzJ&uibb`c!vg-vxN2VdZv)w z2e*}%<>At^UnO}8iV{LnDl=5aJKg=*?F7!{a9?*E8 z8vHuoeqG|G%DVb@zb3R1A4CySlycRV}S@o$3|LyOk79FO`tS|OConzC@t0YbDEr)443D<3foldH zIp|LmyyExrpowlW?OXS{Szj*z>ZMLsEU-<66FBC@dBlxewH z-JYVum#?Kv?lh85Q=CYb8PMxu9C_m(xX;w=aF=+ly+_%ZP|UvRY={u`8u%J9WO?HogZtf-63b13SzT)$3eJxKt;bDo zpL@&s)PI8)Ljo`|>KNrbXLu@3dVF|h?n#DkR)M>P&tTi(^jp$zyR&$2U3eh7HuJ$u zS(dB+k3rXgChgz~=D`9U*~0nDX9m+fdxAQ~TO3}aLzJS*Ql5Nz5Pqn`k1&{So6(XY zY;&VeeSGA~lxdt;vCuu?Ud(r){tI{Nx3e1-O8W@;DP;0R9vJaFX7{3C&qAUn>)R7= zuJpL=y8R*Wi>&uCDetS^5nOH?CRNc-8F(-jdE159hb?@3cBtKgZQP}tB_}G$@#WRM zEqtRG*6Qohf;Zdx-iB0F?kMP1Fqe2&r>EH>m;YkZt_n)*F~Zqq zg4={8zsxzDo_Bt{zv}1#!!6s=Z5lt1&#OM__{&H+AM@oP7TPE1);9Qc=jm;Qx9E24 zXzu^;$+P-fPWPjoeVZR&5p;=gqJw@gep(f`OGL&-9XmKJF=sPxGkJ6VNUP|a=+wg= z+_aHjith#23#V1acKoE9v%hS3Ybr8i`s0Tuk{(xleQrN1pE)~sp{MFHPprT5HkY66 z&J8ykC7)hKsz|=A+25wSOX$>B*Qa;9OD5C1&F3@64aZ`;4U>}|**b0sc|2r4sS#*N z&^Z7PtvtHB(pM#ZsJwIX=GyzHrxMr!A zjc2u6u4@;&5b@Qe)kqvuBG+RP#c^V97h|tQ;kuL93O}FqIA_emx}6gomec3Abk)0E z%K!3I{HV}aLsg@9VnN5|zX*x-cZOX|n;hG3_}#}|eq3;EjPJ=`M|2CX>Cw^ouc3Rg zfi63##WO%Jhlw?>t*-Od3~(4(5dD4Xw)9d*+vJA!%kjoI)~gA)v4BX zUB~v?d+$Sn9-rSz`yLijt^Yj5zNzM!SKp`SVpU%vpRhLRZ^V6w**rCC@?jc?eQ?4Kz9(op+rxY%v z$l${Kwrg)>u+-W0=iy!l;di9dt^o4Uz z{t7#v*uX4}k2s*zHXpH|AL-qUM?L*M{llW0o`*9JJ|*&TU9=^=w}H*pot-8({A{)> zzcVhdR~C;CQ}W~Us(u;8L>KC0FV(v{yqSHlreC1-%~n?kKV)rO?fTJMXh;X&_U4d5 zF5AhzKn;CD#aSusMx40E=XSSRXJ_ZyNN3dtAA}M${SU}~53I73WC-vF)}1~O>CW&p ztNzo)i+&<&wVw)V)kVDI&cK}s%fek?=HD8u-pmEJsynIX>&qNn_vjYg+gqY9BVz7L z|A5*jc`Ue1%zim`wjkSXtY^-oIpVat_r1(~3kfF{1xt;Ff>Q$xZ{evUOm{z|gxZ$# zJ%qOVO>WA!Db3&TonEdT^K9;`lxwN%`eK1u4-dP6K#qlRuJ7x0)7Hxw&dY9W_MKS3 z@lAd-H+35m>NUY1uG@Xbv7IsHNu8E8eZktM_>j(~3zPAx6>1WXSd;6Ix``VcDjK{f zqqyOl?R}1@1Wn|+vA#Rr-dXE@tRJ3X9M0c5_EAo#b81aZ{5m~_AN{JwUj5uF#oQ9; z$E;L%XIRJxQAz;F7)|d<#(_rs+*rzV=uKwHIkFVNa`C)e;xtpV}G@V~6Q7Ze{HJKX6NfT~Qtmn~D zC&u7IFOt~ZEj%XJGOsxs)9t;!d%vdDJ=W`OQN4&Li#V}%V@q-Vqv>KM+I|G3t^C_( z7fMn-OmE(mASx~Jx;-iSg6F}V$WW;;rUkKG3RTPtUwHZTHyn2UD$bEhkGO%)u6I|u z5h5YPW6H%;+|PLeHD+qU-gt-S#60t(fXZ(t1jNQ7vv%0+@`%`ochxTy5_`e>MSFP1 zkqBiju@~F+X(wHTvAJ7vnQ{TC++3z8Af=Jpbd$l|mSbn-&uIP7Wp7l79SMEJuC8et zPpEbs6%FbYWk~HmZ^I4fy%}o)^h(E|rjLp{2YDYRnctrwu%CmkH`53(WeJu8KXL*} zystF!o-&s5GI?;D^5RV$iP8?y7qD|JB@*Bt-HWhG@ss8ZgVwT}WC@SrCf{iE$DH}h zGizx!8pLu>$QHR((CQJ_iPug6C1{=GQ6ov)K3@h&y`N1ir?OAGvP`~}P+k}GBj<8` zc_$?33d`lUv#(AvM8Q0fL0=XyL6__~x%Cz83mq-9_JT zbl%$_!}g*~UI=(_W^dh- zh@)E!^v`k2+wffVhl_tG3y`s)9EyD_e(1@AT=he z!K}jMb;poVMdGs=Ss_Bpz`jPauIF1L3>ZWt(t(NOnD;}XGG1Igmio+q?P;6Lkc)cZ zx|x1r=DAfr!%w^Lo$bqh60aV|h$`%Q5-1%Xn+wf;(!S=KH+muXIFIt@ZH>y9!QHAE zmQ!gKBfvD8x%pX;qXc)ycb4KuFP_*H-5Z1n_GUmv{vk{O}kRv z;CH)I+}Q=jo5d|Zr*0K@;N`1&k$s)ZQ16&s>Xl&5h0i0;aA}!=@+x^ydU)BHV0`Ut zykFYv@z#YI;aF>5xUJ2`o-_i&=*FNDetfFb(VwnRZCLlmBlsOhP0uKY$*1zwcZPU6 z+~K90W_yiUM*OE$nRhX@C@EVVMn#uc3su}y|GL_W^CHzZT%En&S3=ea~+O`%p zR_*7pi)hLiJbN#Gf1g|0z;&L7S9Cqnjq@MI$XIqUOx9&0YOK$^%@xh`wr~3M{bGSl zNR3H>UHx0rDTSwY?-RHNc}mmTjmJI_26Zw5HpoG{(g_-->~@0C|P`1!vB3}I(?}SQ|xh#{(YDF>WWXLjU0dW-0*mtS4WmoY);MF8m?4zubrI? z#&&PSPo%EZ*^j0}i*N9mmrTqKBG9*}>hdP0vgVu6}u26xd8R} zX)-*&U^VQsB~5DWyM`Es*Wg}CpJIXQh&1dJ?o$B5% z_E}Gr8{A~+^0MP(PIVC(E-9iz-KrT1|2SScdZ)efz`|t0ml>-(D{re~BEFl$%<9#& za$GpVzAJN2olK23%xXheqm05!+&7C0z6o+Nhlk+h8DqK<@(uN7PB{n-oEhAjcRb`` z@7Lg4&myvUTqYIN5KSSlsr6Hyj!4Gvj@)+wY4ZtXr9+Bdd5j+GJWx#XtyVnUUS*!l zFL!S?F}alSIej>dE!r?A;#EI0vDL)%xGZ z)}>0u>v||;JP+86Pi=+x^Y=Ig&D)Fm^Z(e!f#f>G6|;}dV=`KxY}*l8$m7_$tUIU#~#F2Xitm%e~7 zzd`ogbGCZny~#x@f1{{F_p1cnms$|j?$>Q!MB`qDS$*3YF%syxqu~l9t~kv6%e(E; z44>YC$G^4Zb-+u;uD_3n+dxASm)x2MUH7B1m;*2p2~{xM?y@OMUX-UBlFvsEVU0*V zy-q$!>F}v|bY5?1E?>H;g>J?n;K_$Of@v|qwoFFjoh^(_#!k`y(4G>zY11{)biSkKeSa$0jUJ0OY;+Ofy~kO=EY4bRD^NVSQ+tD!d>-Q+HM*gY zL5NXESHilufRcm7Cw6txb2#}2zSqq5HYvUqa&g_RLvnL_n~r7{200Nzaur;!L|i$0 zY|F5ULi?^B!E>9lC9S>qjSM?mOhlOx7OaRK7QCTpzdiR0ONN`7reCE_H%J)c{7+<^Cqt;o5}1?RIh-Wom3q)#vJ)I8Hu5OTN#y0&Q7{EJcM67_RJ z)exS5=0ZU~!%h!@`SjqAsL?_`%hE|bZ~y4()GrU3^|F(C)1%8zPBvLjM$(VQsQ2!d z=y6)3a#b`iS!tJ4^u1x$ z-H5gQTFT62)iNEG^KCZg+ru1Z#TLCQXq}|6l$^}6z}9a^EELtVosi7?^?5Dhg=)W| zb_`va*nD{nZ#YMxLKK56_zA12Sk}ktD zTQm6a+Bg}!wm#li{Z2SKG8#}#*^{DTy(9Y0t33w;g>S46y2G(vUTl<(JwmR?Ht}vs zSkpajo4dU>6$rgu$X(UzFEMg6MhAF5Y*PfjRo8o()gms|y$p7##aJoNK5`iNDyVIN z9FE+RaN*s7LhqCBIOdQuHq!22E=adL#$}&6;bSa$*Sq4HFR$wD_aWoRK>+$A%4ntdy0@6R~HJ#o0y zK6(Gs>bvR3eokJ1xlH(HeZ&t`oX<3$j4b+L;@L-wsvHLtHzSHe}-&)VhCuw;=7^#;W`QAn(LZkNBr-Z=smp|E?tebe;2!*5OGr7{RTNwg?oLp}~b>nPkt{frb6 z_B+cRo?PpFR%VcW_Tjfm&q>j9-vh4G@wInIJlQ<5%Ub|4>f?CdHwSOj{_;`2Oi#hf z!l(n&n1i<+M&OFdQ@mXXN=af#VmXXDTg3qR$N73a1$Sk7+AsQRiEi26x@Bvak$F_u z8UMjXt}_dx9}C54lo4R~!lydY#;x|Xj z=Uge%**sgc<~pZ1|4Kicz4Z7r00D>LevAL<^V5__KctO!ba$~KxTq04G_+KYt^B*` z030HQ#^4}m0D!<@0DRTwry(expN4?JmOVcW2EbPS;dCs`^V6`j&rd_a;eYz!^oBQ= zV_=;0ozm(hE(N@2Ms|BDheiOe6)O{DPu^pbD^`i*lRGOqHu<@&`>`g^1=ijcpXVj7 zABVKZkMw?RMIy^#$$jaL$xi&kS{!e+^4xqs?XoYlysSIfZZrsgeLcUt+@7@w?=RRm zxNGitTj85`JAGSnN=1AQWo2mb-%BsLt1kPv{PV1*P`ODL-z@IUl?R7fosKuo7=@b* z*jCszj>j82c#L;@-5ks4?1rB^_O&JQEsK3#m^;V4f}*n)v3=SF9V4l`CWic{D*w__ z>+7|W7E5vvc{84M|GH>3tG?K2eyHf-%TLWzFBkzuJ5Kj{^zigbkEIfP@f}X8@_y!F zI~?`1@g2@S7w2o9Ds&(cUwxi<3V8?Bdsh#=G1$*DE$}1w{X3K5-hQZ^>MXNVRXtP( zUlal!{g9aWu{C;vdA75Es{h(Wztnh>dc*jS-TDee2V{3o3O(C0s|#cNk#yjmNv27> zN#^sq5mSy?X(f1I3Xb?u%DBECnD9v-$6n3bN?QHq`xN&)gOAKtcF zK&c7Iz?9)6k4omaII4s2z|zqTz6H z90ra?Ay7yJ0)~NLaLWb8&;u@x?oQwZv_Ka%b#Qeep55FFiq`@&>nR&^g607Qs0zdl zbYB@6C?3QPUfdP3_~-%(q{#m)QWO{%1{8scVas{_(Boe$t=$K+zc0^396@W0KovD3P^EqY>k&}jw2ma z11l;J4|Vk85Y&pmXuwilbP+Thd?}K?16UXg4Yt962+=6gX8>%A0Rf}IV;Hb622==fQyO0Y&n680q_BKV{N2h;4{{ z0o;nlL0}Q$0Htw&-^RgFvm*}q4{SpmAlPr)tZ0vwu>hzQkZ8CNPA$0*2^EdgqW(Fm zMb}ayyPM)~bc+^4u8Itf#fjrq!-k~5MxB3g=zouGC2#tL4^JLd6xnmgRwY_@HS7RJ z9J3mB6a{wb`T~dfhmoN4TaOj-;>g}k40C1DcMRFfi8}nojikhlf&Y!o(G<9;YhxVt zAK*riBUqV~URJdA%DB*IoH$}NTo?*m)NF>s{X<+!{(xIKdWbeez{$2<=@_s&b~siX zy&85bWm=>z;7F1`p+}PAekma%|0X9Aa}}QSjwa`CoDzjQP|@0= z>!5$T$zo0L2Ul7=$1)8u%K`+07Dv+73M6*|DD6!h-6WO%&fds>OODHt0n1&1T)8a4 zp(aI=WEO3h-j7zV1MFsBt_1HlfJJunya8g;?OHP zDH$J{5+Ci7)}MI$A0@2icu>o0A1XYwCZeHe#8SqB!zeNqe3e<@^k~I zo;AVYe<%-#p+_uemO>DPC51bRJl|W1R4EGDfiSLr4QooD%~Z0NQQ?~(mb4o=HY*$c{s@}m)vd<44lF}mnPRsxfLM0 z4V;=V$%G3h4;1qEBz&2pDfJrc`Tjyz9zRl({s))+}3+&sb6i0)20oY)ay|v2NbAC z+dYTufzQms>&vV(ktF){B9_=4N~W)9W4u;UA|+6m0eSC*$1R`M3h_0GP~ZYpysbdu8_lN z58LV*w0$u2xGV3mOFrk7e4m+cm2q-N^^2`aQG$~@Rr|t>@{AeX%a}Vpgq!8hdVP0A zM`6XrhRX9^mjf@GUVm?G-P_1M*}ZbaW4We<+kqCG;Ssq{i@Ou`w-+5$-yd=HVe5H+ z%eB86{;6eiwr7^=;r@7YDD{S<(P>HJCkDgthFj}x%3X3c7dy;UA23aHUXXodz&n_B z%r~z$_3Q&Xz4WlyfT!oJx_8Zanv!H1WHF}u=-sjpew2u-BujeM13}N_k7L2adhhl` zU(0Jw4WBX=;r91=Iyi^rg#Db}mAoj{HErS2{_tBdv1bnaaMbf&a=ApzV_g*5M=Dk_ zp9ZY3O-bLVIi9+4-26>Z;D6YBg{_XCh_fySj&-fJ3v6BfikuQpXg?a+Gagi<`(fMe zbBSdqcU#o8y|+17dHR&ql#I}hA+Oe3YDS`>aKF<&_UGOn`00dtaT|?pUio9<1)m}tIswy(7@em<$8{;DfHc^f8e#>^N z`;`|vqp5sBDV0m)=1-;;U*H}2jtarC!2!XsFI_v;74Pi6r*&Hx zTPdPcojVs>krM5CfBiO1Cr0hI0|#AdYHBr_emfOT{Jred)t`N>eSY@|SLOTvNU^Xq zbh}a^EKw=ZEuwd>Ui0YyeeG^S#6@?dWJX6`JR7mj{J3XLUZ|0g(dAC#dHc`Te*au0 zs5su=i4gEzN?qypvXkel4%SU~@EWXJJ+5Y^b*S=BuXd6pg1?#A-sC>2Ob(y5Hf0E3 zyuG>j`?SJ`D@Xt9--DP~n&B&F$Vo)x^G%fT&D8U?T48y|xhh6}HksLZrt>u4wP~c$ z9rgT$a+yjcv;cwjd#BTCElGZATeKgyAW7O=#s#OJ;rgdg6a!pcsZJE#?@~(V1a9x1 z85uofR$NqGw3YB5No*w{AjtVx;mqU(*4 z@xcqV2M=e+Q!ek0DKjm`2VGH6rtqwH_1!DH*8b`R|8Ay@&fHU1S84G#>`H64U2b+w zV?80Iw5#04{^~0e@9S3l2h~C+i}U`rpODL|^t{)+`OEWr=5Et9hVGjzUc7O)3D@cj z@94}RowCGf4Cyc$2K0&P$p!Bklj_L#*Jw^rUl6X6?L*G8$nvR(7_Z+Tx4* zp)X*bVSA;v71%6)VWKL(Va?jr)1_|Qo66^nXnM4m$Sd; zXPL0mYm#ijcmUVU!4+gbZUlzt+RL>3Zrk6hV+1mqZ-5S|+ z93sEpr5dqMcgd_LP9;H1?Ch(IRLEPFN605PHIxn;`y;+LNEM{%9j$D-MzUwe8p3wZ zj!OC4bA4~(oHNp++$=jUBv&nTYon6&bC;wq_KzSC9S8Ll#Q5|FN4MG$eIs=6)ICQV zI{o%Ex*f~km(Lcv=B9hN8)Ujfx}6LC?TDMXywHAQ(n7yE1=oESI~5Iw3!8loZU=+L z{1AKIr51Y0YhBAmV>WZ1@RqNshyQCeOAljq7mdB?=Xtk}zg1TYap`E)=ycZG+tF+6 zucSoG*x~q7Lr?v!mukf1;(?_;M0-0m>%{t4dq!%0nYEjNoabi6LZ;#Gh`mG0W;?6w zenXW9lok?VH8M)CZ$I8a&;bX1f1vbtpCTMOQ=_qzYduXMcSbKQ+QmhSka}%(WFXOM zx^ZFXp;2E=y2`Ez&tYV3Q&D(Q{;J!e{dKPOtLV@9+Zy z1la(_+9<>0z!B0IF|;Tak0qfoX%ZS1pvLfrCn9+Sp@C*C6hK)WLEw$K0vhuR2g`ng z))g@ok01e?r9qx}Cfu&m0OeqeWi>>JXmAJF`$4uE%4*>Zu%d0;Fqz(yJmzSZGJ?3- zBghn#WgQ7Y;`o!jj}`Pi;_9+iXahWvQq?)#t;c?=t3b!D6_OuM20iskp=mHhv*uh z5LRv|1e3*#6LL9X2?I-sOMU{f7ch!47-dgv45mX7AN_t0223d|7g|lfH#SC$rN-Me zZ|xgJ1Sy1ELt}pS!^W(~!aPG}hV+0E!CVBHhKfx~AR5CFiD`UhB!|nw)DzsDBVP&Y zWCH6n9R(Vpp+J#we1^1oS?eLtn5YfL9>c#tkRzc-=%G-fEEFn=C5fkrFc~{Ft&%T5 zc=kYe2q=bn9E!o=OT^M8#|jQFv`ytM)S?~)7~K;zendgIOtDNil4hPMq1I#x)XHj* zAZ?z~XQHO(q{;wzSQ2{HroH4t(>w<6k52z{+tCDw1RoPIocvRmJtW*&Sed_j^@IrS zZVUvMM#mBonf)Z@Ed=y02&mzNCtq9{%tldS|EVI(gfnnZtf&W08ZlF)r=;wge;mwvL2I?*dkf#4_>7}(vwhnHnyQCVrWtlrWjIJ zK<5e=F_;x_J8#n|4rsavnxIvGekPWkczZIMkS4+|Ns5=-iXuqE^^k_>HgWep8n%JQ zWO1Xo0y>S074uQs_ahG=5$~9P4Z8LR3Iu;O!vQzxBARFe7RXiC=Y0Zzd}e>0M?-@s z(6=&x@*ph554NNgpa$JUt46+td_&7VhhB0FY{1tb+~_j*!{MZR)VzpDfrv+w*w6(6 z%&@F}PGltkVGs!DG9QjEH6>G=jn6V2Ze&yU2$HgjyL90#!62 zk}D91utc2Lm2*=nq5=@;jyX*Yjez9E0_5Ab$x{Ik4ghqUX~cg9I7j@wfrxErA`$FI zn7%NBhXP!IvkW-sgbmW1jDxxBt5=M(cK~PrKt`xCdZ>*B;&H^{$wWO>t4qlRmJw7E zx+E{?eT#)DEYn@C9f2CJ}I1k(hBGBz2DV0qp|Nj8U{k;K_!QgR=uQX6^>eA&3)tfS9&OilUJJ*+IT!BUZG}Ic~wN1ByT< z+V9-alz-G!iGUx+qq9VG%=u85_re(F-DA&lgCfP%L8Y zp}>-jFs4Y)#v~N6K4fwtn&4T|-h9gb{ zh%-j%`z2;_B6qSzUEMR{^b8h-3`q2JpD+20oBQRoElX}2Em<4rtR0; zmf2T+ADUr3QtYGy!4; z5cG*OEfWRd0)&NqBKS7#1V=@^qB*Ogu_r0Mv;*FTVfc8HJyp literal 0 HcmV?d00001