From ea8e4953a0fb04ce52dd82d0f5c04ee29196182e Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 14 Jun 2020 02:25:46 -0400 Subject: [PATCH] Disabled TRIMDIR support by default for now. --- README-sortdir.po | 348 ---------------------------------------------- sortdir.c | 2 +- sortdir.po | Bin 143360 -> 143360 bytes 3 files changed, 1 insertion(+), 349 deletions(-) delete mode 100644 README-sortdir.po diff --git a/README-sortdir.po b/README-sortdir.po deleted file mode 100644 index 6721c9a..0000000 --- a/README-sortdir.po +++ /dev/null @@ -1,348 +0,0 @@ -# Sortdir - -*Sortdir* is a powerful utility for managing ProDOS directories. It provides -a number of functions, all of which may be applied to an individual directory, -a directory tree or an entire volume: - - - Checking directory integrity and making repairs - - Multi-level directory sort - - Manipulating the case of filenames * - - Manipulating the format of time and date information * - - Zeroing free blocks - -*Sortdir* is intended to help users migrate to the new ProDOS 2.5 release, -which is currently in alpha. The code has been testing with ProDOS 2.5a8, -but should run on older versions of ProDOS. The features marked with an -asterix (\*) above allow directory entries to be converted from the legacy -format to the new ProDOS 2.5 format, and vice versa. - -ProDOS 2.5 releases may be obtained [here](https://prodos8.com/releases/prodos-25/) - -## System Requirements - -*Sortdir* requires an enhanced Apple //e, //c or IIgs with 128KB of memory. -It should run on all versions of ProDOS, but is intended for use with -ProDOS 2.5. - -## Quickstart - Test Disk Image - -Download the disk image `sortdir.po`. This is a bootable 143KB (Disk \]\[) -ProDOS 2.5 disk image which includes `SORTDIR.SYSTEM`, ready-to-run. - -## Build Build Tools & Instructions - -### `cc65` - -If you want to build *Sortdir* (and perhaps contribute to the code!), you -will require the [`cc65`](https://github.com/cc65/cc65) C cross compiler for -6502. - -The `cc65` Direct I/O (DIO) routines do not yet support more than two drives -per slot. ProDOS 2.5 implements an extension to the device number to allow -up to eight drives to be supported per slot. If you require support for more -than two drives, you will have to build your own `cc65`, which you can clone -from the link above. Please copy the following two files to -`cc65/libsrc/apple2`: - - - `cc65-dio-fix/dioopen.s` - - `cc65-dio-fix/isdevice.s` - -### Cadius - -I also use [Cadius](https://github.com/mach-kernel/cadius) for copying -`sortdir.system#ff0000` to an Apple II disk image. - -### Build Instructions - -On a Linux system, you should be able to build by simply invoking `make`. -This will build `SORTDIR.SYSTEM` and also the test Disk \]\[ image -`sortdir.po`. - -## How to Run `SORTDIR.SYSTEM` - -`SORTDIR.SYSTEM` is a ProDOS system file, which means it loads at address -$2000. It is possible to launch this program using any application or -utility that can launch ProDOS systm files, such as Bitsy Bye, which is -included with ProDOS 2.5. - -It is also possible to start the program from the ProDOS `BASIC.SYSTEM` -prompt, using the normal syntax `-/PATH/TO/SORTDIR.SYSTEM`. Since the volume -name of the disk image provided is `/P8.2.5`, the following command can be -used to start the program: `-/P8.2.5/SORTDIR.SYSTEM`. - -When launching `SORTDIR.SYSTEM` from the BASIC prompt it is also possible to -specify command line parameters. See below for more information. If no -command line options are provided then *Sortdir* will present an interactive -user interface. - -If *Sortdir* is started from a launcher other than `BASIC.SYSTEM`, there is -no way to pass command line options, so the interactive user interface will -be used. - -Because *Sortdir* uses all of the system memory it reboots the system on -exit. (It is not possible to return to BASIC because the workspace has been -overwritten.) - -## Interactive User Interface - -![](/Screenshots/Interactive.png) - -When *Sortdir* is launched without any command line parameters, a very -primitive interactive user interface is shown, as seen above. The program -asks questions sequentially. If you make a mistake and want to go back, -entering the `^` (caret) character will go back to the previous question. - -When in doubt, the `-` (minus) character is mapped to the most conservative -choice for each option. - -In the example shown above, the user has requested that the subtree -'/h1/a2osx.0.93' be processed. Two levels of directory sorting are to be -performed, first by name (in ascending order) and then to sort the directories -to the top. - -![](/Screenshots/Interactive-2.png) - -No conversion of filename case or dates will be performed for this example. -Creation and modification date/time values will be updated to the new -ProDOS 2.5 format. - -The following prompts are presented in order: - - - *Path of starting directory* Enter an absolute or relative path here. - The directory operations will start in this directory (unless the - 'whole volume' option is selected, in which directory operations will - begin in the volume directory of the of the volume which contains the - directory specified here.) - - *What to process ...* There are three options: - - `-` - Only operate on the specified directory. - - `t` - Operate recursively, descending the tree from the specified - directory. - - `v` - Operate on the entire volume, descending the tree from the volume - directory. - - *Multi-Level directory sort ...* Here you can enter up to four levels of - directory sorting. For each level, the following choices are available: - - `n` - Sort by filename in ascending alphabetical order (A-Z). - - `N` - Sort by filename in descending alphabetical order (Z-A). - - `i` - Sort by filename in ascending alphabetical order (A-Z) in a case - insensitive manner. - - `I` - Sort by filename in descending alphabetical order (Z-A) in a case - insensitive manner. - - `c` - Sort in ascending order of creation time/date. - - `C` - Sort in descending order of creation time/date. - - `m` - Sort in ascending order of modification time/date. - - `M` - Sort in descending order of modification time/date. - - `t` - Sort in ascending order of file type (considered as an integer) - - `T` - Sort in descending order of file type (considered as an integer) - - `d` - Sort in directories to the top. - - `D` - Sort in directories to the bottom. - - `b` - Sort in ascending order of file size in blocks. - - `B` - Sort in descending order of file size in blocks. - - `e` - Sort in ascending order of file size in bytes (ie: EOF position). - - `E` - Sort in descending order of file size in bytes (ie: EOF position). - - `-` - Entering `-` (minus) will end the entry of sort options and move - on to the next section. - - *Filename case conversion ...* - - `-` - No filename conversion. Leave them as-is. - - `l` - Convert filenames to lower case `example.txt` - - `u` - Convert filenames to upper case `EXAMPLE.TXT` - - `i` - Convert filenames to initial case `Example.txt` - - `c` - Convert filenames to camel case `Example.Txt` - - *On-disk date format conversion ...* - - `-` - No date/time conversion. Leave them as-is. - - `n` - Convert modification and creation date/time to new ProDOS 2.5+ - format. - - `o` - Convert modification and creation date/time to legacy ProDOS - format. - - *Attempt to fix errors? ...* - - `-` - Never attempt to fix errors. Just report them. - - `?` - Every time a correctable error is encountered, prompt. - - `a` - Always fix correctable errors. Use this with caution! - - *Allow writing to disk? ...* - - `-` - Do not write changes to disk. This is useful to dry run the - settings to see what will happen. - - `w` - Write changes to disk. - -## Command Line Options - -_NOTE: COMMAND LINE PARSING IS CURRENTLY CONDITIONALLY COMPILED OUT_ - -ProDOS 2.5 introduces support for passing command line parameters when -starting a `.SYSTEM` file. If no command line parameters are passed -the the interactive user interface is presented (see previous section.) - -The following command line syntax is supported: - -``` -sortdir [-s xxx] [-n x] [-rDwvVh] path - - Options: -s xxx Directory sort options - -n x Filename upper/lower case options - -d x Date format conversion options - -f x Fix mode - -r Recursive descent - -D Whole-disk mode (implies -r) - -w Enable writing to disk - -z Zero free space - -v Verbose output - -V Verbose debugging output - -h This help - - -nx: Upper/lower case filenames, where x is: - l convert filenames to lower case eg: read.me - u convert filenames to upper case eg: READ.ME - i convert filenames to initial upper case eg: Read.me - c convert filenames to camel case eg: Read.Me - - -dx: Date/time on-disk format conversion, where x is: - n convert to new (ProDOS 2.5+) format - o convert to old (ProDOS 1.0-2.4.2, GSOS) format - - -sxxx: Dir sort, where xxx is a list of fields to sort - on. The sort options are processed left-to-right. - n sort by filename ascending - N sort by filename descending - i sort by filename ascending - case insensitive - I sort by filename descending - case insensitive - m sort by modification date/time ascending - M sort by modification date/time descending - c sort by creation date/time ascending - C sort by creation date/time descending - t sort by type ascending - T sort by type descending - d sort directories to top - D sort directories to bottom - b sort by blocks used ascending - B sort by blocks used descending - e sort by EOF position ascending - E sort by EOF position descending - - -fx: Fix mode, where x is: - ? prompt for each fix - n never fix - y always fix (be careful!) -``` - -For example `sortdir -rw -snd /foo` will sort the tree rooted at directory -`/foo` first by name (ascending), then sort directories to the top, and will -write the sorted directory to disk. - -## Understanding the Display - -![](/Screenshots/Running.png) - -For each directory processed, *Sortdir* performs the following steps: - - - Interate through the directory, checking the integrity of the directory - structure and that of each of the active directory entries. For each - entry the type is displayed (`Dir` - directory, `Seed` - seedling file, - `Sapl` - sapling file, `Tree` - tree file, `Fork` - GSOS file with - resource fork. The number of blocks belonging to each entry displayed, - followed by `[ OK ]` if no errors were found. If errors were found - they are printed out below the directory entry in question. - - If sorting was requested, each of the sort stages is shown as the sort - option letter in square brackets. For example `[n] [d]` sort by name, - the sort directories to the top. - - If writing to disk is enabled then a message is shown confirming the - updated directory has been written back to disk. If writing to disk is - not enabled, which is the default, a warning message is displayed. - -## Directory Check and Repair - -*Sortdir* performs raw block I/O and implements its own logic for walking -through the filesystem. When run in whole disk / volume mode, it starts out -reading the volume directory (beginning at block 2) and ends up recursively -descending throughout the entire directory tree, visiting all directories. - -Every directory (volume directory or subdirectory) is processed the same way. -*Sortdir* first checks certain constants are the expected value in the -directory header and then iterates through each of the directory entries, -checking each one in turn. - -Directory entries may refer to files or directories. In ProDOS there are three -types of file - seedling, sapling and tree. For each of these types of file, -*Sortdir* explores the file structure, counts the blocks assigned to the file -and checks that the total matches the number of blocks recorded in the -directory entry. - -*Sortdir* checks directory entries which refer to directories in a similar way, -verifying that the number of blocks allocated to storing the directory matches -the number of blocks recorded in the directory entry. If *Sortdir* is -operating in recursive mode, the directory will be recorded in a list and -visited later (rather than directly recursing, which would use too much -stack.) - -**Note:** In the final release of *Sortdir* I plan to enable the 'free list' -functionality which is currently disabled (due to lack of memory.) When -this is enabled, *Sortdir* will also check that disk blocks which are -allocated to a directory or a file are *not* marked as free. When performing -whole disk / volume checks *Sortdir* will check for blocks which are not -assigned to any file or directory and are also not marked as free. - -If a directory is badly corrupted, *Sortdir* will most likely crash or at the -very least be unable to correct the problem. More isolated problems, such -as incorrect block counts or free list problems can be more readily -corrected. Fortunately, in day-to-day use of ProDOS these latter types of -problems occur far more frequently than more extensive corruption. - -However, if *Sortdir* is able to traverse the entire disk and does not find -any problems, one can be reasonably well assured that the filesystem structure -is valid. - -*Sortdir* currently does not validate the modification and creation times are -valid. - -## Directory Sort - -*Sortdir* can sort directories on up to four fields. A stable sorting method -is used which allows, for example, for directories to be sorted in -alphabetical order by filename, but with directories sorted to the top. -This may be done by first sorting on filename (ascending) and then on folders -(directories). Another example of a two level sort would be to sort by size -and then by type, so that directory entries are grouped by type and ordered -within those groups by size. Sorting is quite fast, even on 1MHz 6502, -because the Quicksort algorithm is used. - -The following fields are supported for sorting (each is ascending and -descending order): - - - Filename - case sensitive - - Filename - case insensitive - - File size in terms of blocks allocated - - File size in terms of EOF position - - File type - - Modification date/time - - Creation date/time - - Directory or non-directory - -## Filename Case Change - -ProDOS 2.5 supports mixed-case filenames rather than the uppercase only -filenames supported by previous ProDOS versions. This is done in a backwards -compatible manner (using the 'version' and 'minversion' fields as a bitmap) -so that ProDOS 2.5 filesystems will appear to contain upper-case only -filenames when viewed using an earlier ProDOS version. - -*Sortdir* provides convenient options for manipulating the case of filenames. -Four options are currently provided: - - - *Upper Case* - `MY.EXAMPLE.FILE` - - *Lower Case* - `my.example.file` - - *Initial Case* - `My.example.file` - - *Camel Case* - `My.Example.File` - -## Date and Time Format - -This allows the format of the modification time and creation time fields in -ProDOS directories to be converted from the legacy ProDOS format (ProDOS <2.5) -to the new date and time formats introduced in ProDOS 2.5. These new formats -extend the range of dates that may be represented, in a backwards-compatible -manner. *Sortdir* also allows conversion from the new ProDOS 2.5 date and -time format back to the legacy format. - -## Zeroing Free Blocks - -If requested *Sortdir* will zero free blocks on disk. This is helpful in order -to make disk images compress better with ZIP or similar tools and also to -securely erase files. - - diff --git a/sortdir.c b/sortdir.c index 7e3bd57..b5200e8 100644 --- a/sortdir.c +++ b/sortdir.c @@ -68,7 +68,7 @@ #define FREELIST /* Checking of free list */ #define AUXMEM /* Auxiliary memory support on //e and up */ #undef CMDLINE /* Command line option parsing */ -#define TRIMDIR /* Enable trimming of directory blocks */ +#undef TRIMDIR /* Enable trimming of directory blocks */ #define NLEVELS 4 /* Number of nested sorts permitted */ diff --git a/sortdir.po b/sortdir.po index d3d2deae2bfa032f863b4102cf16317fda1da88e..4e4b4c05ea349dae0f695b2b0ea5c48dcd32b5c6 100644 GIT binary patch delta 27671 zcmbV#3w#vS_5Wt`B)kHGqG%nES0I5XsK`^^Ar6RwZ^aD|1tAIK!OP+-Nj6;;cFoR3 ziWTa*8e~#81^Uw#TMPa9D2pww3MyzTTD77W7OfT3%Kv-Lotf;0fc^a~pUlpEocBHV z+?RhtB-N!9RZUa#~SlisLsqorYDUXus)}u{T9` zrxm0L@r7b~!OVC$(BIrL6 zY(k~1k2-wE_8N|`V=y3%?jvcL)<>PxCq!uRRGzIOc#(Lp`D6mPc+ejQxRXKuNq~z7 zlj{|~RtJEh514nNxAA?ro=8bk90w)f#~83A!vAG3@Kw+i`7+r26;T;D5e&x+2M`2K z23ODfgE+joY7gz$`x@)p^uv0H{>M2gdNI5YqSuUGE$Ti zrRqCABsPo6@v7_o(vzTGWRfA*a&2CJ8{;k$XAH zQxnTck-pr^C0tadwXH;_@hDG6xn@CQk!4sd!DUr7%WV+k2D-<$(oI!hJ)CL8AOt2_ zy{oX=R)(ZY!qO1MgO^_Scbz)NB&pAsIxMRV@XOrkk+ zkYv=OTN@D$Wx7_T6j;=7-$Ycl(xup;42NZ4gezT+LKLSY7L)mgF)EXFpK3Q|m3JWj zWn_glU3s&H4b@cCd;Q6h)msJ_e+xehERg|v^FUqMwJhw2Wa;X^`bWpZoYMzHi}4sZ zKpi&#LtQyi%P>|+Wh(>79st7vbz!(685GwV6=A>DrkpUd6IxLo$rjBW1?t02i1)RX z1Wf9P#KHJ-q*GcyK>d1v-8}M{-u$_aeyj}B1lZd!Ab80X5(6TP|&jjjbDcY z1n*P5`4}^qrhNNT`9@w-dw;FJMGu_NWs&qOrajz2j_bt0mKHsh+JY7>dNcmAblJ4Q zMS?;I3Aa%Eb@5d7(n0FegV-rSQl^NYy|vYzx_S?d8PpB0Y1Hbrd2Du-WT{mTvZVGw z*o#K!-bPwfXin>iy2YGCCUc^+RcWaV%m1$+5e;c8FG)Y8O)H0F;lo~ED>1Nt%OsL) zGa_@7)0L5-?6TY)ngGXx3gLhOSd;|dGjrYb4e1RK-W6;k>Ogup)WNwH)>fos|11{t zVyw0?{{Lg$EU|8pSRZc(Yb#Ri{|_tpVV0T5JIR5C(t>UyO^T;=M3M88qO(*I?L%cqvD5AC=EmrJCohzuN%AeGENRmW&Q6L~ z4hVOp>%WN@a;Tr@K^-#wS5}l;sxeMs!h|HVrC_p6!E_SMokbhZHZ$K6jAlxvv#DNN zGPy%-RuWZ`Faer^S)H%;9U75XEdCP&V^^34)J8B`!t4@CwIp-lP>T!l*rdQz8resN zBt{BdZ3b^M?xtyJ$sXUYo+6aZ^##l4^R>ibbwY-4+LSoQSZo{3-Gd~Yc7`JIAAxqcU z@1uTw80gL0$1uTva3e@ikG>d7=&@FKczOvmKh~peJ5Xayv z+la#o4UF;ai35N#P5&dAfIL!F|CMKn!*9bi#qqubXK|h=4rOnDmZZ6B0ccjM_T&@R zXgp%1bhG?f5Ua+>_d(@pT5TVu3h4m4041DTcR4b<%Tm)ylSgKst1Ky)BeSP$-0JlY zkFe~3@FxyUWnC4T!Hmg`hx*efN)Ni_+W>k)lp)`)kmHd7h5F$o$&r~D*%Vl+-z5;` zB?Em^icqr*(jt;fs*Mc4yUKFKY=FGBx`I|*=3Eo%YOk&O@j}cB2rVN|Rb9hdWy0va z5`9O_YI`0Xx`x}BI#F}T1<2X9q5~C<(*MvFeyW6@ZGs2(f#4d$unl(@e}AySQ>)Mb z05|noSH*EYoEF;v+XBssg6O;^c_ZrgFT?(V?x!zF01 zpsQ_flSf$AY9!km?cxDzyY{xhMsC`hX|nCv8_!hs#13%m|IbTes58%s@ll|u33ZeiB6Z9FGLu}16bj~Q78xAGR9)3)tJTGE1Cu1QZys|Wng)3 z1mx(w1Z9cN{FZAC_zm@rYmGwLfY$QLi+wPHGKA#{jB72){Mp=VK&8|-y8v216h`8v zfV7jgga9Q|L_14|(qcpTrv)X`gwmPFlu*7jp?sAH1lS+f7NhPoX@v`8Ey5*dm zf28jR@1QTt9MEZ%Yhh2W>?KMnxmPXkwm#;Zf) z_tJJ~rJ-)ot~0XFlIo&SI5sh(@=z}+6Qcvgi9P!A6d3Ab7CL1il#s2fpI#TGpyBj& z(Q-V}MyXv#ktv2Q4!YGm`srx>X%R&FH=awNC~s8gVjliR7Qu#5P^=-T$m(a+r6krd zF{tYTubil7qeqxb))KB9n-urjV>45s{a;HLJUCko592kiK0oTHBc7_xA05pBPbWu3 z6=H34v;dEbMn|v5WANzcEIh`Jj>hnqH5!fa&sfb&+1sb;^3g`+*+trtv&%}(E}DCG z(QRiJ%{seCiom8qa(4l_CI|*|g;pKvfj2XFqCqR0^lWWX9lDTSwv;_pQ&(GGLrss@ zDmm54`sGrz7s=}ST2GDPXhIF-d%FpzTOyq9crh`N6Cg~$Pf?ypO*NtqyGb`{Vg{Nr z0OCllX$%<^Iv4}xuHc2xDD|f;etME?Y7@aVjbW~+mIfC`a2!Ng>;F(D1xj2_@sE^& zX%}(z_hZ-yUL4CtP&k&2VBT0Zf}f6MBiJ;SjldYoM)2hr^~JIH2iZ!R$g$ZQpBIC% zM%wp$e?&+dDCasW{3Pc=xn4#qm^OH5m~RQObAPDGjA+0h2OsA0 zE@>Z}Vh>Zie1`2AkL^D-bUh*(rV8^Phk7zt<5(x1wsJU*{UZ^3Rvc?L!W@9{X#;}1 zIN~!4aB=~|-~bk<=oqiqjJMjFp&v(nni;oQp`U5l10{VXi^=QDW!E!6D8r2R2g}B0 z==U!(CiyxcCcz}siNlbz5Dh-{7uS>6Nm&}SMInSh#fegqPOp)+&NxGWZS}$l7S3(b zF0F9Q+@fmF>0CI$3avTSfbFsm*`*n9v*tDFbo!#aRi7N3wxiEhTO}_BBUIH1aG$gj zi3p)Hrfg72o5yC*4iPy~1LPiLC<+kMyCg5f4AnOXD;C=O(ECm=en2 zrDJZnG))9`d8;U{Bd^>_Df>6#JM|1yHj%_(aYbT<`d7!cP0+W=~purjQ z2>keblme}sv6u*Sh$AmzA`t=K@g@DBy|-@(Z|m0Q0~13%OkaMaR_!r~XOt(VMCYMt z`DBh>dr#4#3-CIAa~%~Z%riiPps)jE9b3Wvyh9V9N=II)3AQGY&39W%KN z$g?4ay0K-k#tqOM>eg$Sy8#D+IE|!TQyL<`V!6`jB=C7YpcXAT&bEaJawZ$&{Y zFBt@3H40-Uuk~NTu)-vUaqcjQ1%Gy!7XuM2YF(KIr~*^t?X9#2EeAVc>M6Tf z5;O!jvJ0r=c9&1Hm|$>FMB)>2ONfT~1+fMi5zxd)scae-sorTa2+v74f58v)4azUumeZOvRe6HS!;boz`dR}n{V?qUJyRqdswGGE zuGTm?RMe(dit;{nI#9$~JXE9}Dq?M*VW+kho+JZ{Cxhr=8Jx1R*2^lMb33qGfXH?eGoe`yx3? zKO_psSU+J>@MD5XCD1BjFefn548rRxMdNIs&WKdi*2&9U<)Tlw*5Hr##k%sAH!(=5 zR{w$sh!C|%jSdBx=9$rncubiYorFi_jOb)M&di8T!DIc*=yW{tXGCYnx|w+VQ`Mq# z@Z3Fv1FgO@InbIlgX66CW^kOfa3;rD*)urKLLF^ly`*xSwP}X>`b?W{lO;2x!F+gK zc&c(@joNaaCYtNV+x+aun>7D;lSAz`(NfKA+io<0f8TDKq$XE{r~MdD!5?pO#%iLS zTYAri3x5pL;_&nzYjXJfO*o{Q7B2cRFz^0&lk)Hl5(>=I+P@^B9z(`6yc}<+w#+nV zcVtoXDonG^S}-m!I4ozu%O4&ZeQ#99-pKwC&JckU=cr&UB1b^BSw-$tExOS>$+3X{ z80?2`RJBLX4g9_v?Ufua0$*Dx=}2B8vbi(Alhj{fRY7B0N6fzzP5GZ_?v9P)UBhn3BpFWn&c%a z;&;y4kY@_(IHZ<`*k`q4g_tWwo`?XF_X6Mop;k`rZjXHf@#5^)u~(M*c&(J9<;7T^cjrO3Y(D+Lp#pD~-sD#x9+i6;)Rb z@nIV2KpT9@%o|xkEHpDOVb0Aax9vV;g2!t&qS8r;I(W(jzT6}$pqx!?<2=kjr~$*b zEdeK0d8_DN2P{FeHw9#0EIUz=I2KK>4)b`BE>rydX1jo!*+azs!PIaTHLW&@0ZR3e zp^Uu|Lgq;-(G(A*!#ZZGD`(rTP?DRtG&Wb#=+)YY42ezBnk6wh>CB2iTS*ZdoGX)tSNn}GsnEAxtuv}BKE^}0DS5Rlm)gXdT&=7fsf{(Q9sClO{NL0S?MX)=ubhb3&V=_PnJvsTUr0r<)EVa2bHN zB3jie_rv7)2U?O)TyH)}=e%a4WS&m9;mK}I{Ajcdo}ylQOG}*6sFA(Ru!u%$-CRQb z9cY3fQHqnrShYK7UwtvyU zDH~XBCQ%C85+QJdXucH4OSdIf0l1`(w%9;W0$$n66yt}tsgrKC?OVfXNT1uNqd#3Y zI$)qePHU63Wt>hHgX95;UuZ}dN37GiB;`FXos*@!+ir&*%%Xg`Y*~6c-ZhBJpP|D} z7;`}~W{D{cnD&}8S-WN;bFEDN_TH|3bDNodWnwyfyL|U&>&9YwE+_YM_2$RblE*WUqAmZ^nz$YPrC{aLzc$IDH%-C-2VQ86~W zp6zc?5)mmN;x$PG!^XUkXb<~k4yi>%%K_t1G!pOhPv!QRyv!OrUMONG{r--`{Ecg1Z_i8U|l#!r&uwrn5jEJ}HS6l;nZg=H>}e^Z4Y(yNLZnW)gWh zW%6=5iI-3k$R}?IX`t1bXm;NzIdc+E)H z55?1k*;`R=QJ(2zO~Vh+3_!7o`GASh{V^^1<`GqLfNp6~-Wf6{VqOqke7D+vZtFzN zDHmRjmy3$lF*J*Rm^tSe*#qxDvTHtf;m*Oq-(9aTfKNL&#@rYq;wfY zfm^wPCk@odyNpWG-JZGkNVjy3>bvd%Mvw{r`)_HAOdtnRXXPi{br1PVG{-5ag%j^? zf-O&=amPkpX+b)bl^N42BaZ4>MiQyK(V{x%h8&3hC0vda+Y&2JdYyBvZn^A;c~gp- z(vr4KDurwdhmZT0=Oh(ZVJte?|JZk7+9#Aoy(ALzv1P2w?ruFi`}QvQXTFVSUt{BS zo7~Oh8*L6mSL(vKp$;-&v)gIB*Mx?z%(eFu&E*s%B%;ad8ENCk{TAU4=#|??uT~sU!pnf|5AHkxV;s_ z(LG3eT`I?5ic9^8i@`xkCbc*Mw7671CwSeJo0V{u^e?^e_@Owg;BiXvf2IdMH*Y0M za*JJPZ|5!8_|4|W^}rXp=`}db;o+p_Cbi1reb_dT1)D7b9fkGMNd!9EFI_|cd8wDr zlVo>;y8US)kS>gEa@yb{G_rqo_~wZkv)GN+r+}R!0yqsnbc=0}$j0ELH~IYMd+d>K z9T54B*65>(Wt73|JXXoDJJlJ9h0+p+-HC*1w12u-eY{wcxx}EtOe&`B6X}8NO?#PM zELDKD1qa1)G08q_*qvCIpm*m}!Prho%FDotF|+S3IfIz5v*wsC>8oX?guhx=3_{a^ z9k-+SJ{#KtOj12r%y-MSmikACQB5w7w|<@SSe3_DzrNACZCxxqnz19rg{jE5&lmKm zKdXog)kl7jr+a*nVfq*Ox@Uc)K=*hfSL$N)-rUlW^BR34kELx}zau^7^ttxC0JSNe zrM$CR*;)$lA;->5pKOXbKl!;Ua=q}67E1nnj7ZuWRr1%UBlO0NBab;f8+SNgdBhc& zB4XW?SLdl)%IIeX{oGWBzaE?@DB*eH^}W5Fo_V5W?+|U8XqhG+Efg-~q%y=)OI;c_04m-0Z(vr@z=?qu2f2_mKP4rjs%u^nor#?L&ck4TD9V7PV ze2a?wSbAWLh+iBXf*)f=JO|ls>49+~o*BI&)*&!npqrYvAgmz$Eu#r9J2wTc7tz5I z9wb%0KzVzfe}V{16xxPKV#8zss6%7DxoJYXE!=LB2ylbdz_>8pGg=kz7JVR|6;fL>=< z(IQ~L86FatDwN&xo~kYA_{>xh&)85%O2c$;=X~l_7VAm6g#p4!HV3^BW6%q+AdPh( zx;-;q#4jqOn-1wU>9w6FiO!P&!zfUC&R>ZAI0<8E3>jU4DdJNI$XFR07_E$TQeM^O z`R^ub2}^aXqtZMNNbhH)D?#e*vE0H4pl35M<90x#COK%bFuF31r?_vGjsYG|3u-# z-w7fz21#(rweyvU^YJrIKY;+&NOp?{M*#kLA~0XDPw~4%pqTC(;4Z=f5hxK`R*5ak z#g-Lf%M!7rR2cVRC@oqWrCiyM9#F($_3#6c#X^hrkN1Tq`L?Plo}qlgrDdYIoCm;S zp%hic4^sQuQZ)P+9ioE~`THLfkq3#W+ES>0sqilor~;TTtNdFy|rTDSr>5$k9U_hx-d3)%SzGW60yE5#ln4AB(ZWyEQ@MVQDdY604OFVCcyc= z`T(C%;X#K}cubX#Y4R~!K5maMj^2fzBNp-Z6wnN5?3((_LYVR>KAl3*eX{NS^06qM z%O_N8ABdL62Sh1fan1wL%J`6IHHPTQcyINM2N2wMEQJa%L&|5C`OJ||s6u&nF?e1@ zl8#*)Ss>v3pxGU%2TE`!rbH+e)#PBnFY0@eRakp}R2(T2dL6VJDHqW*u}r*1&%`go zgH-!%Rn!s7X<15gVI7g&f5#dHN&4oN<Nl34<+M6M-bko&1WPlDBW1&@fr>-ba~M0&H0YZlGgnGpNhy&r9F~%?}^QE zPfs#~{MdD<@ITIGLdHNn9T?#E#5zYF7s|lJ__)r%#qLYx3)=qmaS`v>^0;t+ffrOs z!{Hu{5pA)Eb%FhjJeGoS2bC0?_|?T*e#r_Oe@?;lKexVE-Tq$+u&-RRxGCONMK4Ew z36)_uYUk1w%!X850QG(J0D~hNK*{Z(d}VAY-jL&R{SxKK68G(qC8D{M2Ra)`HXBJS z^%A!eLFiMp$S3z#h(M)ys%Ar#c&c_owLmwb{wG>wIrF|;?6}~-3gPa8o2Xk$-Tis! zx_<&$HGzVv``o>y{q>NbJ4aU0_&(!bF8nKma_3@zXAL)gdlJh~8vx`jnW zMNJEHGq>-)FsKe#>_XhHT(tPIHDc=;p>C`)9L?pLfa@(2C?2~8Zb!Xgu`6`>?lofi znMc=PBL3P1D~}DQ7Da0!^T}7tgRj6M!t3{74)*%%b!>=xo4h-{N}Ucl#8MBGiUUi8 ztF`qmY745`H1?N?0Puer&uXD=Ev148EM)hpu2~3T?q05JtRf2H>4sB%WwFbhDwQCI zUQ_I(i^P#1%f{d)g*f7!FqLPRZz=xO404y79b+6zxLxj0fx9CY(CL5ZHcc6awLF9Y z)LWhqTPnnsO0lI%Y^fIR=`Bx)NVV|PMyiCTrnyo?Dg-56@CJ|4y$otqj>+_kNJy9k zIn`&Wn(c;2c2+mVmE_^5#dAow7ccRL#2aqkF-ODt$P*%#c8T(e^jRQ{3}r~WqX1LE zGb_dJ3PEG|6b3)UxPo~muXk$kE_ZAsNvI%}pJcsVj2zv~My;XT-P6d@-7q4f06N)H zF5GEGw(j2LhIvO;i`W%s31QswvzR=xgeb*?;i1{2&YCKA)nU_av2gjr6uCSpT+`2Z zHeg=%_+|2+O>M~NIrzPPH!G1zvZGnbg!~` z>5d)+>B_HH@5nYBk1o)ar&lAqu9&BOT|E6vA>cMGbcLMpOzchv)zP{u@MWt1tJLX@ z{(q&q6vv*D0YR+ZdKNXkFf!PXj?q!n3tyLdAwL*)xJDvsaKR1jNZIciDMtLYOxrF3 zh5(uVCK31*|9D!s!l}y7bOhY!(L7&|r6FtLS3v7K_x#)Kw zw_6dVHuF*m>x&en!Y$?=7(Hc26v1=j)d;Cv}M)$V0er5|hvraG~{(j&p`Ya4+*z5{TRL_)hXo#_zo8nR~Sr*U0 zuhT&<|4zei>|WTvF%I~5CSk&F_`|J;Vwz}s083ip0i%9%Zc2PG{$|Ab?b-}4VwfLJ zVO|#0A9aX_U+dTDSw7>Ioy4BkF6>i8aoGYHoY5_W1@%eJ?b#~v@7IQCd3vnmulah+ z)#&r*>5c3C`Fi9kER{MB*W(i-!*vgZxn4v{P4HDE>!|6Fup*^`T&wBrG z9WKn{^IxT-Z!FVap!=`Xp%-t^hkq_wfNj76%;Qhr5W6IlvM=b{n;z?Sy3x07J=zAY z)X_6ATo*fIS7l#ClnmF^l1lMKY<$-lm7vZln^7r7zurHyfSO=EcmL~CG*mr|=B|B> zzF=Tq<9hlNz*?~JVIcND1%Df86bRT^E3pnN<|cJd71WUyJ1K=vBJUvO1)=fQQ{E~z z5JxPV!`e_bvCnH~`W9BCAuz6`lTTF@J7Brv?gqSOIFq@Uj0Usro96*Jx# znYq3yl&-F?5*ywa{1aS0O9MC*;7+fjF{bExC)>>#w8b4s1F!k5$A$k% zS%L0`qcEfxjtuXBbpvV!)DC{Rp&{+#hEKfS*zxVVzilXN^rnlchvsQ85+51KdiB*6 z(2H;6$7FcEkJs(E9uN9i@AIrr_r*Sp;?cMI^@C`nkoMtZxPHACA%o9FMPWxgi>u&> zKX^;+goXiMd}#f{#otLoQ1<=qyj_tpiV@HMME0jgT{_G}Ff?2Z*){D;(t zkb`_u&OZFNS84bP`y#k+@^$fMn%{NvMx`T6d)sgnEvvUL^aMA@-X)dk_@gv0jSXjS z^|T0V7ma#uPCP%H^}?_8tp?Wa-(ZV06Yi_w;^?$k7HZw`uEsP?>ACEwU?Jv&g_sha z3jXna-EW9MlQ8zN*WU4d^RGmGL!?6GuhUNVK76p} zB2MEW12i1EHIJlan1TiL^R@W=6NY-4hB*9O9r-G2uTZCD z?n2+bW$vbh*pj2w4f^%Q5~jUwPT)gw3fu{OWT02cW{=lb@+dqie{bX*Yet2{vN_!P2U(w@dY=Mxb_7%V!Mog;iVz@si zxC+oys)_`oa$=QOcBIGDwbeR;WnXYJ5lI_M=1&RD0``0@tLWNt5*K&2dXeU?Ef=pI z>01bUr>J`!jU%rbuG;WBVeU$UM@+iCN`FV2W!B`%;WBElfLBh{J@Y#Ozlp?&qBY{` zcV}Q1SN2usE`x|712K!CfL7?3KH;9B5%$qMD;{<47}%zX@jn=0y!Vr#4 z?_sKw+$^bHC7TL;B|nF5IemjWU0I{vt&vDkh9e+mM`j9E#hp3R=rb`3?5!E|`!>K~ z4i|~|?b1Rz$KWN18%vOdSbJdK)|a#0oypqzU2R*y<2jtLpqvfYJW>N(T#RZ97&0{4 z0=y13&BFp5l9fRWZ3~!`ZKXD|?U9y~sy^^gjQ%LNADsQVJEmp$_Py?o55zkLT`P1s zuv!aD=xAns_mdlhvRj9^TGcQvKE~o%QfDfJ$n8pkmhMO9SmhB7Bejpw=3`P?mV1=d zncA|EjI?S=CuenTRX7cBX(}>(t16yefIANlk%#kO4;M>R`ck526aD;os0&37r`h zh?yZRs$y95UBpIfy?^jWzVMHt20^a7oyY9PLjb&L57BcXllo|2e93z~qP{1Db6I zd{EHee*0uYd;}tbpwhJ*g3B+Dd z-(d*pZpa_=i`#JQ3%c=dAyXA5E?Sc(~xWfrnjWx8D4`uDnu7?b6r9GDi8I)nlC-y}e4G)$!9;`kd~6PDjXD z2z8_AIb`u*81B}MXF(NyJ+B)&h*PTON1oN2pVM8^0sKifUXTs`*K9CAyN|+`$e;A) z|J9YT%eEt;!jhzM!#2OobO_5G`T!j9y$`OH{thJY>Z!UyACd5)?th6%z#iF)jG&+x zTV`nU)VginSc-RlAgXWJkHrIgfd9{WV4t41UoS}SyieESqZh&*RLyTjLBB{;KmHPe zyT87uH)KX$)SF+@dzJnf&fHhJ4}RTnY!7;6G0Y>>H7}I8aN%a<>tc$&qc{Y55ltfi zl=;O=Xuc!EaCp3!4*m=%FX|yA^F;RPr7!7F9K>Hpg_{3G$nzy)VBtsWV$PSn4QVt^ zRIw7gDf8ACXTlo$WA#A~4Y_-pc4Ndj8Lx9Zv}3YyK>iqwcrNrR z2IMwhh3xT-|Cue_qPmIZ_f?dXELjAChYlSo z-Z(xaWvKYi@oTinHlF^K%Ao$$jyp>#02_^!O7K-O-eCa%Mby`E+d?1#{-qV=^Ghl# z9W%?Tlocitv~ei2iYwr?_gZ^`0HrGIs{W89qb zDzr7<9ix<~;A+sSVP(1F6-TzpqUgUs8K*erP`^cG3rbcxO3JE8E{j%|h!bD*)YRz{ zZ=P`T^eM9)vmq*A8KpR;mRBrR7MHAYRFqVbU>0+yMJ1Jv@%T?s9N=5QgWD+%A{lRt zLvhS5Ub+Ntvr9@A;E}(ideQv35~)M!UzwZjP?W)g6~|ru=ij3^R!j!(C3va6C!6$8 z43xzS91EZk$Nb{T5=VYn`CLc-_+tF2T8=-f=Q_Zy15`WmSIl+X44V2^ijy6BiuYQ+ zbneE^)ro6Hbke)(-SyuK`kw>;sr1KzLo_{5r2A*-ftz&i?lWincgn{d`i8r8F)Chg z;bVGWo1oafXXDJm#v2QQZLq~_R&T*x{o>hL-oeB$Flsx zbXO=F+fa{%1#LrxFMig&^;Mm|=I?yr%hatO%^-TG6UPbaIZhfis#e)6*V0h;J{+JNaB}-g3YDpwSnp9tb9!$n%=4E<0$9lgTUA zr?)sC0DYAXI2;4UPD;yZ9N4#f8qp=e!3-fXW{ZNm}L<|!@=fHh? z(AbEtME!8km?QHLtfW{QETxai=+k14OU!E@?7x*c9`KuZB4)y#ozN0F1U_hyYb8c;2n=yiwoxQYGt6+cMsUYQJ#d9$7FW6WcK3*h<%*WL8 z@u7hcK&J0j^OZf=4N{hP-yL5na?9M8`EL^iJeOnl6sgT!WsXh8+v=pZZINQb63H8! zFUCs}5;Frr8Hlqk;RAw|jP=!9AlLc-xaT7V~E`{y!gq z$1<$|BNg-zUyu-3=TtE+AZz1GDh`ZMEI%m6Em0r&ht=l}W7tZDNcmVfNg!-N#AXN9 zxS#SO>kjj3le3!GjBxkFNkM3{jXI`@dh*i<%z^HQ33M6QcL|2YX2P2c>)R3&kK7Cn0oldxIV(!(W)lvlP==u*ZB zK8A)SObp|bHzg7^V~!${jMNPI73qv=F`B5FzaLR!?^+O&8HU7Qj$ln@hq7v}eiy__ zHF8=vG?RJ`&5V23)Xc!M_2mNYsNuBdr$>+v>7=+0H5>fwe&pVL=r z7+w30Fq8IGD`w49=81RJ58kuAK$6w9$J*5Q{%h85e2=h-*H8D9Os!5v(=Jmx+JJA5 zsjI$arVhVrUZH~QbLfLRdyu<>-{y@+;HH@kHWo3OuV1Kav$FSXNnEj)0{w+Oj_zK4ebP8il~tmIj& z@5{G$m-G=Lm`&{oX$ol+TFI93<}Alb$=jG1#$8B`*1cTD-;E{&Xom_1<7<5O*ZKJC rU7f91>|4`V_m$z}S#X$${_o0qj$Xbfb^RtK`&3H3Gi968IrRSlp>PHn delta 27235 zcmb__349b)ws&`DC2V1n2%^OjAZ*5+MF=|qibWPd5om;HA_-tZ070n^kk~Zo?kXA~ zD2_e-2wE9B1NfX7-g}IW^UWI?6&nQvM8yq7AvU-%j`R5b=iI7ZLV)-Eejo7bs=D{w zbI*RyU8-=LNq3w{-}7p6+u@dHpRxSCx25gcE1z5V=GDI?Pe`*`U(IZBd+DofQvYJz z>`2Z%t4e?0ApLuB;AUNtel6~|?hPqY9IzeuyZYj#q(hlM2W~zPRG)Jk%Df!7^1M7! z_1*2rR|c&KSoHg)DRdboE+cXAr$`&h=-LWbzeUP(_>`976zXc12Cb2%mjImwBDmMVNX}Tow$M~*O?d=T=qjgl^V>);0gF_zM)89w z-6~yLET8Bqy;^G5O9GoD_Zn$5v%`!6Q!(p;bOMaUWp%oRBo9it$Y#{1QGHTEJxRxv zbA}r1Dh8|bx<@rjOH3N*$68mDb4L11L4CmDw@J4qLIf;1 zx1l^KzMK^4%DGM8MP+j1N;Jwtc?!xEvp*JDstE}$SC+BddP8oYJ1<5zRe|+DnjVG_ zm}q%UQ`N=M>f|0~H!M)F)w-^RTSoim3Rh0VkOmm;2Q^;Juq)@X0dkZClEAnjvNVY7 z4H8+1AQHGIh&b;3DML^|%)kcx#J%)3>s_*!_|w^YEW&$!?crzb8qBj@`Eobhq?k6A z1{>QVWVNUVWU~eA8Fits>s*@YJQY+KM&*GDMiMHHtNaaB7RM^VsnoZa?5sKHgfL)- zaxoRXy-JiShQ*-(oT9^K1ek2tpxH2m8Un%w2&uMIwr2}&2w|tN^=s+}cmdAMnMr^% z2MIYe=^Zbacm}0Z;||c zxWM1XpSst9u!tuLu?F6b9yl>p$b$2$bf}MSdIp+=vQQKZ_&=*i?nWH z@%NS#GZ?aM89+G+Kz;B;T%KC&KBRiyQiEr_P=&Xb{z{;lP#se1-(vofrGKp!PZSS7 zQ`}+Ib3_#-B4ikfeuN@Ys8>T+4J%0v012!0_+`1W(Sm+*e7FOtf;wRcscKy$N&cyq zT+y4u4P;~p2f!Q3DmPSBk~g64UPtYQT_lMn#Wkh3DXvpWpbAiE-bheXXbjl#TE%EX z#&T(KOkE$b?A^z`L^K2~{ar+$2_+CIh(AgyX8I7g(uky}{eU@zQvfI~ReH?~WPm{* zYb5Fesy8Xo5Djx2RceX~>HUjYkgYk~YjVzwdySeQiC~+EhLT>foI9;4Bz80N6+b$ z)v;5g=NN5Xh_)Giqc;9NMv7_rmF@|6Bqg^m52L_OdW84qA+dua9qB6_hz{k<2MD7U zXpqhU5%h@Iz=2#!jEHykBXq=!h=@D@6BE&pc(xxg2>)x;GY3MZ@eC}Aa?W}EIT!DI-*WEg@uuhw5s8wqB7{{+D(YcQ2yF~%g*V?dOZ zc$LHgvMHGI{&JTALD7rJf1F^V6*Nwgn41ucve=NfDVa6{OfD#-qm`aSu79j=e3Fn6 zr4VA|Y*rYnna;Kuz@r`*iH@oZiEoRHqUOfb2@|kzh2n2*bdx1)D^rLtQYGY`nsfgdIIgCfEk}%X#J|~7+7PbLIGZF~GcrtTC@S2Ws zPL#%^i_Xx4#q1%jf+jvuG-kO1G;zIBf_W9jg#OKjXctFGDvi}v8m{E^w}-5-@E2|m z*>HL7_D~Wo@7^w-yWMZdHr0@LODI;6UhXSr?+q%KaIjjSv}DC^YldN>KGgu3w?VJU%UXB8qn?rv@BzVBCh8M0K4(!O(Oa(+C;J zFhZJ`LL6!?i{q7C7RQ^pERNH;@=t^M& zhnYL*U18UtpMrNx96%(ZmFfR159b{mCga87jN&!Ku~(ooIX6w8#38+r%}tF33t%&$ znvxF@Bkxx3@V7DiQQCqDWAJ0IR7Vr-qf{XRKtu$$w!$;pic-T$6QlkucbZZ#qJ9Sf z9P`Yhcbj%VkbaAT@y0+^T?#OmF$u<>OnOL z_QF#ADUK*gHue2Nglvz))c8TcKVO=kb4RjQ^DIzYK#E^xlgMunF$| zc$Xjfj~E*OQrG{}0FR7mIRq0K! z4%ZoDZSX^H{b^cTG=%1tV)>WF{h8|dTt!VPxN?8s^_=hqKk(L{@QQV}PnzOP0QkF* z-`y(I1Ozm51o1`z9Mq)B1fdz+Wr;^+ztT;#GnL+51exxlG}xflf7dvJs=U{r-%Krg z3Sd@xelYCGDsWUff=4_B6_pi*@?9egEQl|+5vAa|40pw4?z5_2;U|fnzEVY1S0lU- zW&Uol@Y2z2Z1{oxUVx|F%-}852xCb$HR@tK5Mi7TVB&~CAss%h55*#@KAJt0+mrv_ z0x;5FD(3I{(;_-_LRow;pL(B;xFOHDPwyiDXtFQ;6$`(?v#J>icHU=7<_%*R0+mAF z90F(z$`8J02D-aKh zPRZM@-`L0XNP(~*bdFX2>bbfSBWkEu~Zig#*Rt2f=4@lmXL|wj1r^v-9%wmqtGS_p@j2Z z`SU@cC6MHOf3M63-C<>JzINN6}N*+W88aTz!y6vk!Z5CG$!zL1%UE|AJk4$<$tx@a;LDY11_ z0(<0Yu$fmEjk~&N(A7mk1W_skckL)NL9#qnw3mt%GkGGX6(AkrL2jalmx_0;+pxZB z9pzcyRY>j1B+qhTb{$1^)%wbHx}^>^knbD=Pn&o=ZSi2FX%qxRPe}53{x7JZB+me8 zLm)tHk6HE=TJ6+3-`-^9*Ted_6AK9 z*rF?=H-j-=89jBkzZcm$`Zv>0W3u7zYcy;p=puHr$maLmA^$j3w2C&;+fohYEZ3;P zoaGudn6vyiRDVvvP~@hBzyj|^aJ~j~p8=>bg>O#yK&KhZB1EN;*pdooxso|uC z&(+{(YCV1_9m4(xz27h;$`~?9^*aaon zEZzE~1L3Z27zQg^m`C6eR!Kv(Y{QPBo*g%KBf>jeXKK0|YjnPs0F7X$$oM^`MKdFcSBhLi-HUZ6_*y1blMG! z>WmKuu&uTkVfOiwuuC&tGnS~D3Oa2@a4JbgK#15byOLc}w#lWYT`CX_CS4-W1vsap zP3SY4GKp}gSIFZ=Alalt2*?mxV#o%Sw0LYJ?GTX-HIV+GHL_)_h_D9UXm2nWg%_N8 zw}Y3D{F$))OrkE-O02%_9U*@_MigO7Sy(Hw%G*~`sz-r3icW+)EWgC2@f1f*2M>?& zb4bH8AETL zTSFx5?!s%=js!#;Hl=aD9MMQc+_`YdGeqgN`bW27NM$0>Ad)1X8%abUoLrzAT8{gX z`i-rI7L4?_XA^+@KdO*hkK$2g$C%KgfPG>#XS6qs2`$3Y;L)K1T!N!Hznw8ERD!3z zV>sW!({cupcZ|V5wheQ3k{r;84c_=RXD58L#hjhc5``cA$7Mj*VN+T|=`pxzZEn@J zhNbZG2X#Y>Ddu3%T8R4WDEYq8H^PYVuMG)8Xj});{x(@pI#lc;5@oD>>cxz%|7R5V zydF}MmP~3*$33nO&zplxyqOuXz>pc4xd;Wa>*I*>Z)Q%6;@X)L3*N|_l(^K%CM}_! zSc}ozJA(#z~ z11$K3TK}agoFP1hOd5r{Q^Z5wyG4;aU@V0RQ&YbgA%YH#Do_O6(GsmB473XGPg2Yk zmeLW4(V^E^cHii-goV&|Fcx1Jv#`jxTQ<&i74odH=1vzU2P_E@3t~15u(brH*hvb! zsV3lJw~S7%kZb=J=m7S16fA}!4l%H0V%1FkJ_^RfDNRtvaGl1POfWi=NaJdz2i$>p zKwg4MLTU{AJfABX$3^n`aV!C(U9s&NdO-e-v7~AomIrApY1EC0G1?u^r#Llfy1NgI z?k--VJMQg=xZad&au;eXhKYOfnFA&PWslH~;IMp%lj7@0x}o?wIiGi&b|(V!II|)@ zCM6SrVj@u1n;5)&BLf4G6ctqL0dm@%Z=7!uiftq>tctFPohvE8~d) z`O)zSOfrUkZ(@0p^Ap6nr*Cd<9KeQA^!5H|VY3=S6 zRLXCSZ`znxyNAc$z?RJ3*p{Gw^xbrKw@nbXJ7~gny1ReEwYy_}QY3e5zRC~!a+<#; zNjp)lEDuW-X?sU2g;(U36h_t4kaM(5F7@lCXG8l%Sz{&Q7NdLx)7K*Bc$`T52mw+6;3H{z)}Fz!YmzuXvP zPawZ(Ea0DQ0s?+4FurM+7|78ZgNzJJxDl4)CJ1^~;#VX8g`>-eoxD7{X|gf?;y844 zPDMrvV~534XdzghxA3vJ*C)%TCW|P}DGwk1#3VwP^~**Tg**AH$;P&fG+p`MA@4jz zzIVzskta=w&cS#M;JpJh|nefX-_q%v2(06gt};HkL>p5S8Y_C8zPRg-cR*D_)Bevda%dh+sCnrKS1f+*b>w&Qr)rKuQNs(M#Z&00jED-erz!9S zv53QE=tFF}PFW*woGv!{MO(6p=rS@n1}`I5J>XA{nIvSziJajxi8^0B-RME@XB^le zp@{s8s1>WWR(Z#C5jU+Y$WwYyW&FX&m@Z|(p&SkZ4Al) zp#Jo~iTxK55ZJy3DL5F9_7?ZYUiU{{eI{CeHC?|qu`2;YHlptqE|@MHT~Zyf<=aET zm_qYJpz1PHUOz(=$vtOs@^atI&y;G|p7s2Md;BrK!R7Eyligt3!x(%8uu{xDf_qrLj!4~thp?sy36rgX?K zYNx=BnHh#umIi8!)?#6H#zXSOheXq-m520o+?Ks0DbD%O3Ztaqw$}IxI+B1vXVM6) zC*15obzJ#Tf$=i7{vY$pdg-CMbks^uhOs(6ZR4K zB^cVG#tUSe^S|)0eBUEYy%PbV`2+)S@KPz|pur|y3(yrlTfqS<3dkK}L@=BsT?E(E zIdb1ec$5Xf#!ElT>3y7mbGS4*T5u8Jz<6-~9HIa>qq#MYEu>g+gEv}~*efmj=ZLNF zg!)+Z9~c!0>pNkv#+D6d4vjY5{~$<`TK19KKSBW(Qot@CN5@3;N{&NpIktae+DWh5qz&;uu@7tiF-C?jwq+cK@^`-h`z*YeX3>jjN;%QFSB;*=~YcxCD{N}N|e z;%~;8RQ&r?$Q1#2;*sbQlaatfU$m2nc@{YW`GZI+jq1e2>nL%?Z|BA(UL*xdxfD)H zFd9y$OxH+q@ji3+b$~!Sw$8f|yo^oy1bY&^Qlk~ zV>^0cxA^^R8~{gy{qyC$^TknAh}JlhN)vXTlM4;fWJ8=z6)Hfo&r=>TU*YKR``MUG zqIJtt-tb;Q%0cuBpPBHm2%C!Z(^5mGKP?4iDdPPbZIWxwJeya4!qDxt#k$3s25tRm79WX)k%vs=Tqv)k-JNppABq}&C1XWn0xa@WW=skK`Mp0ibM*<<_f=j_33E!;*rY?ogu zrrT7y-Cm5}N-Q%=wRXRC@0L2}-Yvko!MS1M-mL?DXWndPbJ~61zS&plr8V@@w)fWT zdhdXiRnkktPN+O(O>NDt?YKx@dqY<(e7T{U7XIE2DuVZG^+Rc&H#khI&!Zbqv%!h= zZK>OWTBrQ!^0)`7Jl~(Pe~V>%2hExJb7AF{s^>_ITdTIwrKW1TZfX09R&x;l_SU#N zs`Q(s`d$ANrlFa9`=bE~N2*fm z@UVBQN76!l1U|@a)uYlWySuCA>82^w-L>i-8n6xscV^HyxR)5NyXIkl)#$M>(jl}w z(kApoBt0ZYl0(Je=K2+PHuqTjXmu|w(A#sr7SKG9pwo`!;#Sa-ySIiJK#nGd7KRp~ zQBk-*RvkdEEg&gDFklPx_4L%F|FZ8~pWA$QPc4#K-J6t#F=FllYPBTXfwT=Hh27L> zPKZ%+LM%8M*$d5f-=;-6=F{oBViUOPH{f;(LWQfG&A@`J#h!N~O4z(^pO04WTu3O6&1 z<-7y!L67lx+~FRkdGfTNprk{6ckTQzE!abQ*o0j!bi78f4O-6J*6D2?Ncd${Hqq49v{ z9<6!CXgeO#c08!TO41!ba$08EF`IgU-A#oZwuKFj3Kd6s!5)W)R!8o43=NLZDmMm)Yn9G@&QM{v&yLwz z!*DI!tzm@b=#o%b98Ra2q=pfSrY8X}7$MXn5T_3p^6m&Ov@L?mSaBIAF4M(jc4TpA z4sP#zJhVWR(242aKL!II%=;o}_?W18TwIDGIefrmLt$uXq-SUuN@o>@l(I4Gb1{9mOZOE|M(DhY;FN9yD#u;JERBrk87-WFU9kT#G#N+ML)Rp$GpJ7>N{OSYQP0N``$J1m-U#L!k`=VB z&#iPKv${=lIy3)C#!B;b_aj>H5n-jI+_~Wyj`0a*&_6s#L5*8sJApNj9l%490oyXD zXi}dde8Qzqk>eKe0N8gFEz-O}(Hs}>fGS})+@cmG;a0G}f#g2E?VSTv*N0;5xG|zNx=ep_{+RpXW zGc`0L>TeA`$h<$O?P+&-mgZ=M*Z=&B9og*Aj$0wBI#953k)yM)zxKck`-7+-BDcTd zeo%AI(xkaXz*9d<%irgytijOksN7yCzg?O?VZwyE!kn~M_FwkMIYo3xPwG_EWv=$( zTut6qs#{>f2*{H)ln$MXU?fj2vion_KUW)nW&2zV&p+A;;x2-iv?e%;V#P>JsdQq( z;dDQaq1ov!RQ)M?ok%5|(qk&*5KcNgNjofSb`zXJ3t&N2BVhMr%`-*&I+ET%tr{k2 zL|;A!-6?CZRxQt8E^R9%3L+`GO%4^=9Z94F#dN*8@I^aF!{D9)=O%?%A}uh&ry5UI z_rr{HAFUhxSQ^1}bDzVX>uAmeA5~!DK1&*bSvX{Yu6I;uJEmznrfWN9Xgg+Vj`0l@ zT5zUTxjr~Ut6Wz`_a zo+;}6vuK|qJdh-m8}1)9U$Wj-dgf+_Y1NJndirJuY)H>_Pu6x!(HzNo#%9Mp2dq2z zuomv#NC;CkX~goYnEdDoA{E0)B@HJVjIl!7w*f0|6E(Yg9VImDHT(E0mDL!oE8Rx! zEPc1yxBs0Io3+^2`|v%s-<101AD+JSX0^T(oyZJ!R_kx!qnXLFI#+sO$)5JPDbl`G zdopy(_OYr|w+e}Qxm~_IfBcnvpsg#k`)!dld>qCrcTw%0OG)nUlg8J&e@L=Rme&i? zy_n~9m{511lUGfFb4CyWlX_WHWMyH;^(o{bu)a=SFoCcb%Avj>u-A{B{vz+$f- zqlS~QjM1?!D+7NjRTp7MQR}3Wur0kepyV&tx{xuohYEgMqC4b2me92V*P5MREMPq;_;^COq3 z!~BtsZ4eJ|@|qlLqz`^m!#(!ZAZqBwH#;z^vPyF|oU!<-kMtPzC*E&OXp~BgA}N6@ zE=LD$iFEC8V{7|3%yUCRaQjoK@B1Ttl~!uF;GNcL7*i*AE46l$yR{l@k6BjB4r*j% zumh%AL@W}hI>f4ijRe~FJR0?^brSqWz*G3D+~n?{B7{}C-0fAg4X3%=s_u3w6y?-h z_-CiNTQ$wy+$q)JPJZh_&Gkk~xXnLmUAr~`*3%9~qIx>0zWVp>%xF)PbWr8OCwRa^wm^4&*0q)!Len({kQZY}ZhOC{H5^ly)u9M#^ zg*KAI7lrIe;?0C~AR^v{y?rIyhb5fBxvf6~$|ZSU31?xvXdfiR!AeAMLfkA_bB1dP z3(vQ^uLJ&Is#>3xtjZmi_$C}3nC2<M`~5# zJ94yJ+g2reY&pqxJmPAnt1snPFY@XE$GUa=Q)%x=GSc-ccHL^9nmqnWGiy4w-F%N9 zdvu7c_?3N*f%LMZYCBs|W0&qIBfr3JS^1)Mi`J8cB5YeLt1+y(58}r|KVAvAlaDX7 zA$}Ac?_sl-_`JvO>0&LeRE@||SzYBubfG8AdF@hYx$o2C9ebbmK%<$Lg#_Z zE7L(G?J6-;XEl#g ztKFQF8R;KLKj2nh+=w~%&)82$L%>mQ4vh<^qt+2=t>c(a*3z9?KB9IZg7!}B&*N41 zM$O~W^n)B{_k2>nNvl$8H*X)O=17s-JkM&haP^{-X7PHMLzvnuzgEQvP#E4P3>oMMy%F-wnDqBcpX`HAFKl3K_SF$PZMo#s-&=^ca`fiWG@r=&TlNO3s76_fBW! z!}=*n-bh~Mlxs_?YcylM89K+HnN?ClOI|EGgiFqDQG;o?baCD88V!LD$7Lt2@!k2+ zBsx3CYt{0CrI1~)83r8`P}+;(4*?dc;wa05*cr#3UX4KXt^Ag#IY2u0VExhsqGDiX z$i~=+axzFl7_yNv`YJpUNE3~5fKRTNLjr*|Cj!I}@igWHRFp0TYa1Nu-L?2gqC9pj z%Pgy4Yrd;s8x~f( z;&mSQ3pgb6gBXa7_yQ(HUmRt&Dbg~N|`Pj_En!5X1hG!_x71P6&``*7nV>y3I`JTD5p)FXV<_M zF-|0hWX$5)Yr$%*-mTd&JXCMjI3=O%U-;zqYx!iS^}Dx|PqM#SY8`O%+6w&q$JbxG ze9wH^I_=A~oE7+dpUxZpyatO8KCjXD8JxQ+;O0oSlJ+_^hcojZ?BWwQ?0%lmCvL z*XN7;TQU4sl$&#pr^>|~WKB7Vji`G5i>`{u=-GL&slZMcd_k?>p-Q1A2`*)0ICZdl zn;LFe>&zMFz|ty~b?rqW>vyWs@TIRHp~3{CwtAPF*&@6oc<2imA=)C)(r+_DFJD}j z?;;XvRrf9?0SjEU+(GUFtakxs=f+*mu+@3U^EePO_)!dYpb*d5> zQi$NNazQ-`dIW!`p5KMs?wwjyO$*kl^}E!p5*?x4RZ@p2uUlTxoT3PlbxR7V_Lh z3>1E`F>L#rQ%xqDl(((`Z&JY;{YpUL=qxW^PYyW0Za@6b7MbbF?Ll|LBOQ=6=|?zM z+A|sxVVd{t8G>BT{}$YHm#cP@r&@EnwG>yRGtDMK8DX2=vYA7=TRIr_{qbze?0yQe z8gNl=*AGF2f>WfO88GAUKhJJF6#nUrBd?x2`<~6W<@^ZWq;J0W{d(>J-?8&{+kFFl z_gxt3t2p1zH|qQt-*ey2^F8qGXy4gy=K^$?Z~2A!zJ?2(J54GtUS8C{xL`#=v9zeD zv|!=#rKL|vWlKw!`_da0`qnjcylKSpLC`DyyL4j1ZY{9~UJj>`Ps_ZhUcXqjDR^bB1u&i|H!h*6gOU77&ezbUT znIvVGXILgLT`sLGEm~f*+v8APpEz`j!Ivgxne{p%y!g+*O!V~udI;gc| znYy5CAuiJk3KrqQ1X(1hPanxbJQi4_?6RB;%be_mb0z$i&&{xm22tp8!6HllB}?ZK zjRls43(5*C{qq*gv-DrSVxHxuX&|Ei%6S$@jR>~%Up>!~UFN&ktb^~D$R*oMuU)9r3b>FFa?oyrmuUv88FD^sW>S3yH_NCmLo>4tj z8fEAmYA5H{PRYkIjipNS{pQlmng6klP;^{U&DUSn`zn&UjvrX-IA?KZs^)(*=b3;;%RPacUvs<|RO!>~wgZ=vUi>?5f8K3*{S7(XF}U>gkTsmCrw2;hqg2mm z)py7D?K=L7uUo7AD&D|9{aL?O`ND=BxW4F{^L-CxjB4kZLjz_Gx})+gyS^*%i)d>v z(H3c?+94HdVOL5JZ;`xVL5FgGIwvHhmC*Jw;_DyFq;;i!+OkGUZwsY}gIa5k;+r|* zU1}~iUqwEO?Oc9m--Z)Uqva=$;VK?xqG-T$C* zbS-+4BzTO-2Z(w0hm%Y6OGj9OU#s=!;$PzCd582}2@V%9$262X`Lmn95*|Je(oUQ~ zHu0EeiPFU>WQ&}1Ja&}M_|TGm0J3>4b}BZ4gWku@x>ilpp?{qYK~1A0$8-ql$>X}r zYBoRJM4~{QMLu*K=k>0^$j`8`MtuC0Fft!`*W&{z8DXXm67xG(up68eGL9IU2cH&x zKos!UinU3+fz{eL@AZK^>H{H42pY?QI5i<&i>LPzNa^=zGKf)eisa>o-*QevF!$?|!}sUwSv`itCuj z@|{SaIHTSL*rdm2s)EKe)2lbyx`t=PYr$3XayfRvJ!xpVDsFX zPwh?o2(=u$SBTi%*-#CQW%eL=ll_jU^RYxvN(3m(n0@Chxo#M zv^9=jCecF2sl}8cpcR}QIkW!0$Z$k_f^ax^la%Piz35k{8dbxt@PAgE!nqeg6lldO zyKE_MmbkxGJ?B(IE_kUeljK3Gp$tGDQDdix2%G)m$L5z#NdW-KbL0o#HpKBxOdMAu zI3rGnw*7?lN}mieK0!s2i}nRp^a{?}uwqK8JZ#{8w-N5{6fwa!y|@_v{aAh{k9()D z&w^wAjtv*kx5-ezr*D;LuM|eiZ+#2nNc>#Ub3`zk+VjE`k||vhkm7|#&VLdY4&lbF zNRH-fmE6DiN+K2Z!K-!AuaofSL|dBq)h~vzzEzCxhafs4Z+{9Iah5c^*#4?D;~%h{ zPnX~`uc0N(%nS4#F%(!(ARS%-UOrtSeX%0=`z`f*wn%Hu|Kj4?Wf(