ZED-128 version 0.77.00 [February 16, 1993] Here is a text editor program for the Commodore 128 80-column screen that I am currently working on. IT IS NOT COMPLETE, but I think that it is complete enough to be quite useful. To use it, just LOAD and RUN the "ZED-128" binary file. Be sure to save it in PRG format. ============================================================================== New features of version 0.77 over version 0.75: Well, really not much. The bug with loading a file that is too large from a non-burst device causing the machine to crash has been fixed. A couple of other minor bugs have been fixed. Also, CT-^ (Enter Commodore DOS command) has been implemented. This is very useful for CMD drive users out there. ============================================================================== Here is a summary of Zed's important features: - Works with *BIG* text files. It gives over 100K bytes free for the unexpanded 128 and almost 630K bytes free with a 512K RAM expander. It auto-detects whether you have a RAM expander and supports up to 8 Megs. - 100% unadulterated machine code with high-speed VDC accessing. - Uses Burst commands for reading 1571 and 1581 files. Reads about 3,500 bytes/sec from a 1571 and about 6,100 bytes/sec from a 1581. Works with non-burst devices as well. - Uses a dynamically allocated data structure to hold the editor document and the "Kill Buffer", so there are no fixed limits on the size of each; they both can use all of the memory that is available. - Will optionally expand TAB characters into spaces while loading a file and compress spaces into TABs while saving. - Global search and replace. - Range delete and recall. - File translation to and from ASCII-CrLf, ASCII-Lf, ASCII-Cr, and SPEEDSCRIPT character codes. ASCII-CrLf is used by MS-DOS and ASCII-Lf is used by Unix. And here is its major limitation: - Has a maximum line length of 80 characters. It will split file lines longer than that. The complete version will support lines up to 240 characters and use horizontal scrolling, but that's another day. And there is also a known bug: - Don't let the number of bytes free get lower than around 150 or you run the chance of having the internal memory allocate function fail. Most of the routines do not check whether a memory allocate call succeeded, so they proceed as if it did, and all kinds of bad stuff can happen. ============================================================================== Here is the action key summary (an * preceeds the keys that have actually been implemented). For the keys preceeded by a "CT-", hold the Control key while typing them (duh!), "SH" means Shift and "CO" means Commodore. The UP, DOWN, LEFT and RIGHT keys are the cursor arrow keys. When you have to hold down SH, CO, or CT with a arrow key, use the arrow keys on the top of the keyboard. For convenience, SH-UP and SH-DOWN do the same as CT-UP and CT-DOWN. ZED-128 Command Key Summary: Control Commands: I CODE KEY ACTION - ---- --- ------ * $e0 CT-@ Exchange cursor position with mark position * $e1 CT-A Alter case of letter under cursor * $e2 CT-B Byte value input $e3 CT-C Copy range * $e4 CT-D Delete range * $e5 CT-E Exit with save * $e6 CT-F Find next occurance of hunt string $e7 CT-G Goto given line number * $e8 CT-H Set Hunt string $e9 CT-I Insert new file into current one * $ea CT-J Juggle range of lines for text formatting * $eb CT-K Kill current line * $ec CT-L Load file * $ed CT-M Set Mark for range operations * $ee CT-N Set Name of current file * $ef CT-O Set Options: input/output translation/tab-expansion, etc. * $f0 CT-P Print current file * $f1 CT-Q Quit without save * $f2 CT-R Recall text from buffer * $f3 CT-S Save file $f4 CT-T Translation utils: WC,Rot13,Up/Lowcase,Indent,Justify,Prefix * $f5 CT-U Use new disk device number $f6 CT-V Verify file $f7 CT-W Write range with new name * $f8 CT-X Exchange cursor character with next character * $f9 CT-Y Replace (all the other letters were taken!) $fa CT-Z Goto bottom of screen * $fb CT-[ Toggle insert mode * $fc CT-\ Toggle modified flag * $fd CT-] Toggle indent mode (Indent / Noindent / WordWrap) * $fe CT-^ Enter Commodore DOS command * $ff CT-_ Key Commands 1: I CODE KEY ACTION - ---- --- ------ * $00 $01 CT-RETURN Go up one paragraph * $02 SH-TAB Backtab * $03 STOP $04 SH-HELP * $05 CT-2 Clear buffer * $06 SH-LEFT Word left * $07 SH-LINEFEED ? * $08 CO-DEL Rubout * $09 TAB Tab * $0a LINEFEED ? * $0b SH-RIGHT Word right * $0c CO-UP Goto top of document * $0d RETURN Split current line (indent not yet implemented) * $0e SH-ESCAPE ? * $0f CO-DOWN Goto bottom of document * $10 CO-LEFT Goto beginning of line * $11 DOWN Cursor down * $12 CT-9 Reverse screen on * $13 HOME * $14 DELETE Delete character * $15 CO-RIGHT Goto end of line * $16 CT-UP Page up * $17 CT-DOWN Page down $18 CT-TAB ? $19 CT-LEFT Page left $1a CT-RIGHT Page right * $1b ESCAPE $1c CT-3 Directory with block counts * $1d RIGHT Cursor right * $1e CT-6 ? * $1f CT-7 ? Key Commands 2: I CODE KEY ACTION - ---- --- ------ $80 CT-F1 Function key 9 * $81 CO-1 Set display to 25 lines $82 CT-F3 Function key 10 $83 SH-STOP ? $84 HELP Display help message $85 F1 Function key 1 $86 F3 Function key 3 $87 F5 Function key 5 $88 F7 Function key 7 $89 SH-F1 Function key 2 $8a SH-F3 Function key 4 $8b SH-F5 Function key 6 $8c SH-F7 Function key 8 $8d SH-RETURN Go to next paragraph $8e CT-F5 Function key 11 $8f CT-F7 Function key 12 * $90 CT-1 Clear document * $91 UP Cursor up * $92 CT-0 Screen reverse off * $93 SH-HOME Cursor home $94 SH-DELETE Insert one space * $95 CO-2 Set display to 27 lines * $96 CO-3 Set display to 30 lines * $97 CO-4 Set display to 45 lines * $98 CO-5 Set display to 51 lines * $99 CO-6 Set display to 29 lines $9a CO-7 ? $9b CO-8 ? $9c CT-5 Display code of current character * $9d LEFT Cursor left $9e CT-8 ? * $9f CT-4 Display directory with byte counts ============================================================================== To delete a range, use CT-M to set the mark for one bound of the range and move the cursor to the other bound of the range. Then press CT-D to delete. The range includes both bounding lines. CT-K (kill current line) is the same as pressing CT-M and then CT-D on the same line. CT-R recalls the text at the current cursor line. To recall after the end of the document, add a new blank line to the end, recall, and then delete the extra line you added. You can recall the kill buffer text as many times as you wish. To search or replace, use CT-H to set the string to hunt for, and then use CT-F (find) or CT-Y (replace). Zed searches in a case INSENSITIVE manner. Thus, "STRing" will match with "sTrInG". The status line on the top of the screen displays the current file line, the cursor column, a flag ("*") indicating whether the file has unsaved changes, Insert and Indent mode flags, the number of bytes the the document uses, the number of bytes free, the current device number, and the document name. The options setting feature (CT-O) provides a full-screen interface. You move the field cursor among the various fields on the screen with the cursor keys. When the cursor is on a field that you want to change, press the RETURN key. If the field is an enumerated field (like Read Translation Mode), the value will change in a wrap-around fashion. If it is a numeric field, the character-cursor will flash and you are to type in the new value and press RETURN. DELETE is the only editing key. When you are finished setting (or viewing) the options, press ESCAPE, CT-O, or SPACE to exit back to editing mode. If you re-save the Zed program by exiting back to BASIC and using DSAVE, all of the options settings will be saved and will be set when you run the program in the future. There are some fields (like the function keys) that are not used and do nothing. The color fields allow you to set the colors for the various items on the editing screen. Color changes take effect when you exit from the Options screen. Read and write translations take effect when you are loading (CT-L) or saving (CT-S) a file. The possible translation values are: None, ASC-CL (MS-DOS - lines end with Cr Lf), ASC-Lf (Unix - lines end with Lf), ASC-Cr, and SpdScr (Speedscript - which uses screen codes and back-arrow for return). Tab expansion will convert the TAB character into the equivalent number of spaces when reading, and TAB compression will replace a number of spaces with the TAB character whenever it can to make the file shorter. TAB compression is very effective on indented program files or other files that have a lot of spaces in them. There is a field for disabling the use of burst mode when reading files. Zed will auto-detect whether a device is Fast or not, but this option is provided in case the auto-detection fails for some odd device that you have. When Zed detects that a device is Slow or if the burst option is diabled, only the standard Kernal routines are used for reading files. I haven't had the opportunity to check Zed out on the line of CMD products, but I'm sure I will be catching some flack if Zed does not work on them. The text line length and tab spacing fields show a value but they are not implemented in the rest of the program. The cursor delay and repeat characteristics can be set with the fields of the same names. The time units are in jiffies (1/60th of a second, but you should know that!). Experiment with these to determine what you like the most. I wrote my own custom key- scanning routines, so I was able to easily provide these parameters. You may also notice that I fixed the problem of the kernal mistaking Port#1 joystick movements for keystrokes. In the future, I may implement a two-key rollover. A field is also provided for setting the maximum amount of REU memory that Zed is allowed to use. The default is 127 Banks, so Zed will use up to 8 Megs of expansion memory (if you have it). If this field is set to 0 Banks, Zed will leave your expansion memory completely untouched. The value in this field only takes effect when Zed is started up, so you will have to exit back to BASIC and RUN Zed again after changing it. Finally, fields are provided for the printer DeviceNumber, SecondaryAddress, and TranslationMode. The default is Dev=4, SA=7, Trans=None, which is the Commodore standard. Since I have a Panasonic IBM-PC compatible printer with a SuperGrafix Jr. interface, I use Dev=4, SA=5, Trans=ASC-CL. This way, I can print the \ { } | ~ ` | _ and ^ characters. To use the Juggle lines feature (CT-J), set the mark (CT-M) to the first line of the first paragraph to juggle and move the cursor to the last line of the last paragraph to juggle and press CT-J. After juggling, the display will always go to the last line of the last paragraph. There are three objects that Juggle concerns itself with: paragraphs, sentences, and words. Paragraphs are delimited by one or more blank lines, words by one or more space characters or by a new line, and sentences by a period, question mark, or exclamation mark. If the first word following a ".", "!" or "?" does not start with a capital letter, then the previous word was not the end of a sentence. This definition of sentence does not always work (eg. "Dr. Bruce"), but it works most of the time. The reason that distinguishing sentences is important is that when juggling a paragraph, words can be ripped from the start of one line and put onto the end of a previous line (or spill forward) and most text files do not contain a correct number of spaces following the last word on a line. Juggle will put one space after each word that gets ripped and two at the end of a sentence. Words that don't get ripped from one line to another will retain their original spacing. Juggle eliminates spaces after the last word of a text line. The target line length is selected by the "TextLineLen" field on the options screen. Don't set this field any higher than 80 characters. Juggling speed is approximately 1350 words per second. These last two paragraphs were juggled. The TAB key will move the cursor to the next tab stop and will extend the line with space characters if necessary. The number of characters between tab stops is selected by the "TabSpacing" field on the option screen. Note that this setting does not change the tab spacing for the file read/write tab expansion/tab compression features; they always use a tab spacing of 8. ============================================================================== Please send any questions, comments, or suggestions to me at the below address, even if they are just an "Awesome Dude!" or a "Sucks Rocks!". I am a Ph.D. student in Computer Science at the University of Waterloo in Canada. I have been a die-*HARD* Commodore enthusiast since I first got my VIC-20 ten years ago. Until I started Zed, I didn't have an acceptable editor for all the text files I deal with since I was exposed to the Internet, so the light bulb went off above my head. My plans for Zed are to rip it apart and start it over (in assembler this time rather than raw machine language) and make it for the ACE programming environment (which is still under construction). ACE (when it is more complete) will run on either the 64 or the 128, so Zed will someday work on a 64 too. Zed-128 is Public Domain Software. ============================================================================== The CRC32 of "ZED-128.077" is 3571615286. ============================================================================== -Craig Bruce csbruce@neumann.uwaterloo.ca "Shit will always happen, but shit will never be rushed." ============================================================================== begin 640 zed-128.077 M`1P<'`H`GB`W,C`P(#H@CR`V-3`R(%!/5T52(0``````J0Z-`/^M$=`I[XT1 MT*D!C3#0J0!(*$SM':T<"BF_C1P*J0"%D*7\(+'_))`0!*D%.&"I;R"3_R20 M,/.I52"H_R20,.JI,""H_ZF?(*C_H`"Y``;P!B"H_\C0]2"N_R20,,PL#=RM M'`HI0-`$.*D08'BM`-U)$(T`W2#0'*7]R0*0!=`$.*D$8,D?T!VD_ZD(+`W< M\/NM`-U)$(T`W:T,W*3_F0`+3)TX8#@)$&`L__^I""P-W/#[K0#=21"-`-VM M#-R%_:+^R0*0%LD?T#2I""P-W/#[K@SG0`"RA#W8*D`C0?5('`=2*(%M?J=^@C*$/BI"(T'U6A,>1VB M`*D`G0`(Z-#ZJ0B-!]5,`"!@"`!E^E^@!/LR&P.P0/H`@`X$`TW@!@``\"W` M8(#ZV?HR^XO[@/KD^QD`X<40`PB.\3```/\`3J`(!`<`#O\``(CP#8T"_[&` MC0'_D82(T/.-`O^Q@(T!_Y&$J0Z-`/]@B/`-C0'_L82-`O^1@(C0\XT!_[&$ MC0+_D8"I#HT`_V"E@HT`_X2#H`"Q@)4`Z,C$@Y#VJ0Z-`/]@I8*-`/^$@Z`` MM0"1@.C(Q(.0]JD.C0#_8```S#H`"@##.@`E`,(Z`"\`QCH`.@#$.@#__P`` M``````````````````````"Q)*T4`ZP5`XT"'HP#'JD8H""-%`.,%0-88'BM`AZL`QZ-%`., M%0-88*6",`-,0@*-!M^.`M^,!]^I"(T#WZ6`I(&-!-^,!=^I`(T(WZ(`J9&@ M`8XPT(T!WXPPT&"E@C`#3%L"C0;?C@+?C`??J0B-`]^E@*2!C03?C`7?J0"- M"-^B`*F0H`&.,-"-`=^,,-!@J0"%.(4YA3JI_X4PA3&%,JD`K`0>HC^%@(2! MAH*I`*P%'H4VA#<@.2&L!AZB?X2!AH*L!QZ$-R`Y(:D`A3NE.\T!'I`!8*D` MA8&E.PF`A8*I^*#_ICO0!B3_)/^I^(4VA#<@.2'F.]#5H@*U,)4SM8"5,,H0 M]:(SH`4@G"`@I4QE-X4YD`+F.F`8:0>0`<@I^(6(A(FB`K4PE8"I_Y6$RA#U MI8+)_]`$.$RO3*(SH`4@:""E-L6(I3?EB;`/H@*U@)6$M3.5@,H0]3#63+@F MZM`&I3?%B?`C.*4VY8B%-J4WY8F%-Z(SH`4@G"`8I8!E-H6`I8%E-X6!&&"E MALG_T`NB`K4SE3#*$/D88*("M8"TA)6$E(#*$/6B,Z`#()P@H@*UA)6`RA#Y M&&"E@C`*R3_P`TP``DQ\,*F13#\BI8(P"LD_\`-,(`),BC"ID$P_(HCP![&` MD82(T/FQ@)&$8(CP![&$D8"(T/FQA)&`8$B,!]^@`(P(WZ6$I(6-`M^,`]^E M@*2!IH*-!-^,!=^.!M]HH@"@`8XPT(T!WXPPT&"B`JG_E9"5DZD`E9:5FBDZ`# M()P@QI_0"*T('H6?()HF8&AH3!%>HA^.`-8L`-80^ZT!UF"B'XX`UBP`UA#[ MC0'68*(2C@#6+`#6$/N,`=;HC@#6+`#6$/N-`=9@J0"@("`X(ZT.'JP/'H4" MA`.I"(4$H`"B'XX`UJ((L0(L`-80^XT!ULC*T/*B'JD`3$HRP`#0X.8#Q@30 MVF"E/*0]A3Z$/ZD@HC.%`H8#X`#0`6"E/J0_(#@CI0(@*B.B'JE/("PCQ@/0 M\&"B%*D`H!`@.B.B&"`>(RE_("PCJ0"@`(4\A#VB4*P)'H9/A$ZI`(5,A4VB M"ZD(("PCHAH@'B.-&!ZM%!X@+"-,_Q\`A0*$`Z4^I#\@.".I'XT`UJ``L0+P M"RP`UA#[C0'6R-#Q8.``\!3*A@,@.".E`B`J(Z4#\`6B'DPL(V`@D".E/1AI M$(4_I3R%/JT0'B":(Z4]&&D0A3^M$1Z%`J4\I#^B4"`B)"!J)$R4)*T9'H4" M&*4\I#UI4)`!R(4^A#^B4"`B)*T2'H4"&*4_:1"HI3ZB4$PB)*FRH!Z%$(01 MH`"Q$!AE/(4^R+$093V%/Z40I!$8:0*0`<@@`"2@`&"*D`H@.5`LH0^_B@&`8&)@`` MT`6I,(40Z*D`E1"*8$A*2DI*(#LE:"D/Q0;P!PDPE1#HA09@(-,DR0CP#JJI M()40Z.`(D/FI`(488*D`A2&I@(4@I2`E;M`-YB'F(48@I2#)`=#P8$5NA6ZF M(;W@'H4BO>$>A2,@CB5,:R5L(@"I,4BE.*0YICH@1R5HI#T893R0`F2$R:):DG2*56I%>F6$R:):D,2!BE36D!H`"B`"!' M):D`A1-,G26E7\5IT`%@A6FE/*0]&&D0D`'(A3Z$/ZD%H!\D7S`"J0=,`"08 MI3RD/6D3D`'(A3Z$/ZGPH!XD;S`"J?X@`"08I3YI"84^D`+F/ZGWH!XD;W`" MJ?Y,`"0@/"9,12:I/$BM`!Y,T26B$*D@E:#*$/N@_\BY``?0^J(0N0`'E:#* MB!#WI3RD/1AI0)`!R(4^A#^IH*``3``D2*4\&&E0A3ZE/6D`A3]H(``DK1,> MA0*8JABE/VD0J*4^3"(D()$E(*PFJ6)(I9:DEZ:83)HEJ7!(I9FDFJ:;3)HE M.*4XY8B%.*4YY8F%.;`"QCJE-L6(3*`A($Q"(+H_(,4=(#E((+TCJ?^B`I59 ME6"58Y5`RA#UA6ZI`(5?A6FM&AZ%;Z(`O3(?G0`'\`/HT/4@E34@.R0@726I M.:`?('8F3/\?I4D%2@5+\`%@J0B@`"!9(;``H@*U@)50E5/*$/>I`:``A4F$ M2H1+A5:$5X18I6X)#(5NJ?^B!95PRA#[J0"%=Z)PH`A,G""B`K50E4"50\H0 M]ZD!H`"%1H1'A$B$3:D"A4RE;@G`A6Y@(%TE(/$G(*4GI6XI`?`'16Z%;B!J M)"`:*"#L**5K$.!@J0"-!]58(.3_R0#P^:((C@?5A6Q@I4R@`(0#"@H894RB M!`HF`\K0^AAE/(4"I0-E/84#(!XV90*%`H4$D`+F`QBE`VD0A06E`J0#8""Z M)Z(.(#HCH@H@$#8@+".E!*0%(#@C(!PCA6JE!*0%(#@CK14>3"HC(+HGH@JI M("`L(Z4$I`4@.".E:DPJ(Z4^I#\@.".@'XP`UJ(`Y'?P$+T(!"P`UA#[C0'6 MZ.1WD/`XJ5#E=Y`;J/`8J2`L`-80^XT!UHCP"Z(>C@#63&PQ+/__8*("M4.5 M@,H0^:D"A1"E/*0]&&F@D`'(A3Z$/Z)PH`@@:""I`*`$A82$A1BE=VD(J"#[ M(2`P*.80I1#%3K`=&*4^:5"%/I`"YC^E<*1QIG*%@(2!AH+@_]#"\`%@J0"% M=R`P*!BE/FE0A3Z0`N8_YA"E$,5.D.I@I6S)(+`/"JJ]`"J%`KT!*H4#;`(` MR8"P`TSC,\F@L`4XZ6"PX0+`'(/\?J?^%:V!XH@&] M%@.="AZ]&`.=#![*$/&I?Z`IC18#C!<#J?*@/XT8`XP9`Z(+O3X#G1P>O=(? MG3X#RA#Q6&`@U#]XH@.]"AZ=%@/*$/>B"[T<'IT^`\H0]UA@(`\@`"#"0+!6 M(.@N(*T_H@"]``:=``?P`^C0]:5N"0.%;JD)H!\@=B8@724@*3:P+R":)JE] MH"P@=B:B`K60E5"UDY53M9:52;69E5;*$.VE;@DLA6X@&R<@8B<@-4%@R030 M$"!J)*F%H"P@=B8@`"Y,NBD@:B2I5*`\('8F3+HI_Q__'[Q9_Q__'P!>2%G_ M'T`U<5G_'QA9WR]T/?\?F#`7,)PQ3C[_'Q@U"3`;,%$O_Q__'_\?_Q__'_TQ M_Q__'_\?[3#_'_\?_Q__'_\?_Q__'_\?_Q__'_\?_Q__'_\?VUC6,5@^3#'_ M'_$P]3#Y,/TP`3'_'_\?_Q\=,O\?$$H,0@<^:$O_'^9$[4#F0O\?)D+_'^99 MG4:#*0-!3$0M4,%+&2E81S4V_Q\Q2_\?_Q]S1`9#_Q\P/D$^-#XA7O\?E(V= MC(F*BY$CU\$DVM/%`272Q";#QM38)]G'*,+(U=8IRMKK$!F+*LF;R[H[V:MZ6;O[2XOBFBM3"GH;FJIJ^V?#Y;I#RH M?UV3`3W>/X%?!)5?`JL#!#@U&#(T-S$;*RT*C38Y,P@P+@P/$!7__P@`__^/ M@(*$'/?AG_KSY?^<\N0>X^;T^!_YYY[BZ/7V$NGJDNWK[^Y[\.Q]__O@__Q@ M_?__`/[_D`#_!2#_\?\$C(<8B8J(A1N$CPH`BX"&"((N%A<9&O__%`T=B(6& MAQ$SU\$TVM/%`372Q#;#QM38-]G'.,+(U=8YR7\#;W-W>WU4G````&``X&!@8/``& M``X&!@9F/`!@,!@,!@,`"!PV8P````````````!^`#`8#```````#A@880T."B`K6` ME4/*$/DXI4[E3"#E+ZD"A1"E$,5,\!JE%3:5N"4"%;F"I`/#SH@*U0Y6`RA#YJ0*%$*)PH`@@:""E$,5.L!:E M=%3:5N"<"%;JD#A1"E M$,5.\!JE=%3:5N"4"%;F`@=3&E=%34S6,2P`UA#[C0'6 MC@#6+`#6$/NI!XT!UDR%(R"?2JD`K"\*HA0@.B.B&JT8'B`L(ZD`C0?5J0"- M``:I\*`L(#(RE_3"PCHA@@'B,)@$PL(SBE3ND!($0SA1*$$SCI4+`!B(40A!&I M`X44(.4RHB"E$*01(#HCI1*D$R`X(Z(>J5`@+",XI1#I4(40L`+&$3BE$NE0 MA1*P`L83YA2E%,5.D,M,VS*%!*``A`,*"AAE!*($"B8#RM#Z&&4\A0*E`V4] MA0.E`J0#8"!U,:5RR?_0`6"B`K5PE4#*$/FI`2#E+Z("M4.5@,H0^:)XH`@@ M:""B`K5XE4/*$/D@LC(@H3-,PS$@B#&E3"!$,X4^A#],,"@@=3&E=I`2!B,"#O,B"A,TS#,:D`C0?5J0<@TO^I"(T'U6`@B#&E M3E;)T(!"#[-.9-I6X)0(5N3*0S)&\0 M%.9W.*5WY4VHIG>]!P2="`3*B-#VIDU,_C.B`K5`E8#*$/E,636I`J`M3$TU M`!BE=VD(H``@LCBB`K6`E4#*$/E@H@>U<)T`!,H0^*D`H`2%A(2%&*5W:0BH M3`XB&&D!A0(XI5;E`H56L`BE5]`"QEC&5Z5N"0B%;F`8:0$895:%5I`&YE?0 M`N98I6X)"(5N8*F`A5^E;@D@3/Q`I77)_]`*H@*U0)50RA#Y8*("M7.5@,H0 M^:)`H`-,G""E0]<9W(/LT3`@T((@QIDWD=]#BJ=Z@'R!V M)J5N"0&%;DS3,ZT'!!AI"*``3+XXK0X>K`\>A02$!:D`H-"%`H0#J0^-`/^B M"*``L0*1!,C0^>8#Y@7*T/*I#HT`_TQ2(ZT.'JP/'H4$A`6I#XT`_Z(`J=`= M&"V%`ZD`A0*@`+$"D03(T/GF!>C@")#EJ0Z-`/^B`(8"J0"%!;T@+:`#"B8% MB-#ZA008I05M#QZ%!8H*"@JJH`"],"V1!.C(P`B0]>8"I@+@#9#-3%(CH@+D M3-`'M4"50\H0^4S0-*5-R5`(K1L>*-`"22!@I4W)4+`!8!BI3V"I`(6/('`B MH@"&7V"B`+T`!YT`"_`#Z-#UJ;"@+2!V)J5N"0&%;B`B-R"N-K!)($0WK0`& MR3;0*:T!!LDST"(@:B2IQZ`M('8F(`PW($0W(&HDJ=N@+2!V)B"N-K`9($0W MK0`&R3*P%R"V-R#\-B#_'R!1.$R%-T@@:B1H3/\?(&HD3$4NJ0"-``:I]*`M M(#H`(@NO^B M_^B]``;0^HJB`*`&(+W_(,#_H@B.!]5@J0"-!]6I`2##_ZD(C0?58*D`C0`& MJ?R@+2`W+ZD`H`L@-R],:S>I`(T'U:D/(,/_J0^N`!Z@#R"Z_ZD`(+W_(,#_ MJ0B-!]5@J0"-!]6B#R#&_Z(`(,__R0WP!IT`!NC0\ZD`G0`&(,S_J0B-!]5@ MJ0"-!]6B#R#)_Z(`O0`&\`8@TO_HT/5,8C>I`(T'U:D/(,/_J0B-!]5@J0"- M!]6L!P3P#*(`O0@$($]-Z(C0]JD-($]-J0B-!]5@(&HDJ0F@'R!V)JGWH!\@ M=B:B`K50E8"I`)66E9G*$/.M*!Z%GZD`C0?5H@$@R?^I"(T'U2"!3:D`C0?5 M(,S_J0B-!]5@HG"@""!H(*D`H`2%A(2%&*5W:0BH(/LA(`!..*6997>%F9`& MYIK0`N:;YI;0!N:7T`+FF,:?T`,@2#BB`K5PE8#*$/FE@LG_T+9,2#@@FB:E MHNJ%GV`@1#>B`+T`!IT`"_`#Z-#UJ0"-``:I`Z`Y(#I"Z`Y3$TUH@>U<)5XRA#Y(!TR((@Q3``] M+2``TT%6140N+@#43T\@34%.62!#2$%204-415)3(%1/($I/24X@5$\@4%)% M5DE/55,@3$E.10#&4D5%24Y'($1/0U5-14Y4($U%34]262XN+@```@0$!@8& M!@@("`@("`@(("C9+TXI/P#,3T%$`#H@PU524D5.5"!&24Q%($A!4R!53E-! M5D5$($-(04Y'15,[(%!23T-%140@04Y95T%9`"!9V0U.S@/154E4`,U!4DL@ M4T54(%1/($Q)3D4@`,U!4DL@25,@3D]4(%-%5`#%3E1%4B!314%20T@@4U12 M24Y'`,Y/5"!&3U5.1`#314%20TA)3D`@@`T? M`8X2("``(`T!X1_`(&`@0""@(``(%`$)%R`AP1I;!<`!01K;!8!`8"#@($`? M#0$@(,`@H"``#6`!#A)@((`@X"``````````````````,#`P2``"`@(:S$]! M1"!%4E)/4@``!@D;,4=%2TA(!P8#"P0```,``00``@4``P8`!`<`!0@`!@D` M!PH`"`L`"0P``PT``PX``Y$#8C(!$%("('("4)(#8S,!$5,"(7,#8#0!$E0# M,'0%<)0#9#4!$U4#,74$@#8!%'8$@;8#9=8#9CE?R!Q-*("M7"5@+5X ME7#*$/6E?Z``&&D((+XX(/LTJ0$@4CU,=2@XA0*E2>4"A4FP"*9*T`+&2\9* M8!AE285)D`;F2M`"YDM@((@QJ0"@!H6$A(6E=QAI"*@@^R&E=TBE34B%=R#[ M-*('M7"5H,H0^:G_A:_%9,J0"%K_`&(/TQ('4Q M:*IHA1"@`.00L`R]"`:9"`3(Z.00D/2$=Z("M:"5<,H0^2`$-:D!(&8]I:_P M`TQU**("M7.50,H0^<9,(/TQ3'4H+/__+/__((@QI4W%=[`=IDV]"`0I?\E! MD!+)6[`.O0@$28"="`0@^S0@H3-,_3&I@-`"J4!%;X5OI6Y)$(5N8*5?28"% M7Z5N"2"%;F"B&"`>(PE`3"PCHA@@'B,IOTPL(QAI!Y`!R"GXA8R$C:("M8"5 MB;4PE8"I_Y6&RA#QI8+)__`HI8+%BY`BT`JE@,6)I8'EBK`6HC.@`R!H(*(" MM8"5AK4SE8#*$/4PTJ("M8:5@,H0^:6"R?_0&*("M3"5,[6)E3#*$/6EC*2- MA3:$-TP:/Z(SH`4@:""E@L6+T"H8I8!E-JJE@64WQ8K0'.2)T!@8I39EC(4V MI3=EC84WH@*UAI6)RA#Y,`^BB:`#()P@I8RDC84VA#>EB\4UT#@8I8EE-JJE MBF4WQ330*N0ST":B`K4SE8#*$/FBA*`%(&@@H@*UA)4SRA#Y&*4V98>%-J4W M98B%-Z("M8F5@,H0^:(SH`4@G"`8I3AEC(4XI3EEC84YD`+F.AA@H@*U4)6` MRA#YI8+)_]`'I6X)!(5N8*)PH`@@:"`8I7=I"*``(&(^H@*U<)6`RA#Y,->I M.*`Y('8F('L_3&HD>*(!O3H#G2H>RA#WJ>2@/XTZ`XP[`UA,7TIXH@&]*AZ= M.@/*$/=83%D@H@Z.`/\@#D"B`(X`_V"I#HT`_R#]/TPS_ZT'U4BI`(T'U2#_ M'VB-!]5@R5?0%,75\`J%U:D-32$*C2$*J7^-`-Q@H@!,.D3JZ.A*T/N]/@.% MS+T_`X7-I-2QS*K$U=`;K"0*\`7.)`K0TLXC"M#-K"T>C",*I-#0P_`&K"P> MC"0*I-2$U>#_\+.I`(TA"HJFT.P@"K`%G4H#YM!,($"I8Z`Y(#&"*63Q0.EE.4$I97E!9`YI9/%!J64Y0>E ME>4(L"NB`K60E4"UDY5&RA#U.*5&Y0,8:0*%3"!U,:66Q7>0`J5WA4VE;@G` MA6Y@I9.%`Z5.2H40QA"B`K60E8#*$/FB<*`((&@@I77)__`/Q@.B`K5SE8#* M$/G&$-#DH@*U@)5#RA#Y(*)!3'4H(#Q!H@*U6960M5R5D\H0]:5-A98@`T%, M34&IT:`Y('8F($PNL!>B`+T`!LG!D`;)V[`"*7^=``7HR0#0ZTQJ)*D`C0`% M3$`@Q'>0`6"B`+D(!,G!D`;)V[`"*7_=``7P"$PF1,1WD.=@Z,B]``70]#B8 MA@+E`J@88""!,4R+,:GOH#D@=B:B`K5`E8"U1I63RA#UI$W(A!`@A4*D$"!4 M0I`@J0"%$*5RR?_P*:("M7"5@,H0^>:3T`;FE-`"YI5,I$*$EJ("M8"5D,H0 M^2!J)"!-01A@(&HD.&`@]D(@BT*P`6"IY:`Y3$TUK0`%\`%@J?R@.2!--6AH M8*D`A2BD38B$*2#V0J+_Z+T`!=#ZABNI(J`Z('8F($PND`%@HO_HO0`&T/J& M+"!J)*5-A2JE*85-((M"D!*E*H5-J3N@.B!V)J5N"0&%;F"E384J)"@0"JF' MH#H@=B9,M$.I3J`Z('8F(/$G(*4G(!HHI6S)#?#GR2#PXRE_R5GPW0]#BE=^4KA7<8I7>J92R%=ZB]"`29"`3@`/`&B,KD3;#PH@"D M3;T`!O`'F0@$R.C0]"#[-$RA,XK0!,A,<$*8A@(XY0*HR*(`3'!"I=/)$/`' M*0_P!4PL0*(*3#%`J0"-``:ISJ`Z(#Y4B0`ZD`8"`,0B!J)*G_8"`\02"71"#,1#BE7.5& MA6:E7>5'A6>E7N5(A6CF9M`&YF?0`N9HH@*U0)5@M5F58\H0]2!U,:("M7.5 MD*G_E7/*$/6B<*`(()P@H@*U696`J?^5<,H0]:*3H`,@:""B<*`#()P@I94E MDLG_T`-,9$:B`K63E4#*$/FEEB`K60E8#*$/FEDLG_\`JBDZ`#()P@3*A%H@*UDY50RA#Y M.*5)Y6:%2:5*Y6>%2J5+Y6B%2Z("M6"5@,H0^2!M1CBE5N4#A5:E5^4$A5>E M6.4%A5BEE% M`Y`&Y@30`N8%H@*U<)6`RA#Y,-@@`T$@:B1,YD2B`JG_E9:5F:D`E9S*$/.E MDLG_T`%@H@*UD)6`RA#YHG"@""!H(*D`H`2%A(2%&*5W:0BH(/LA&*5W:0B@ M`"!9(;#2H@*I_YT`!+69G0,$RA#SJ0"@!(6$A(6E=VD(J"`.(J("M9FT@)29 ME8#*$/6E@LG_\`>BF:`#()P@I9C)_]`)H@*UF966RA#Y.*6<97>%G)`&YIW0 M`N:>H@*UD-63T`3*$/=@H@*U<)60RA#Y3+5&I68%9P5HT`>I^J`Z3$TUJ0R@ M.R!V)J("M6"5D+5CE9/*$/4@ID8@:B0@=3&B`K5SE9"UF95SM4"5D\H0\:)P MH`@@G""B`K69E8#*$/FBDZ`#()P@H@*UEI5`RA#Y('4QH@*UD)5SRA#YHG"@ M"""<(*("M9"5@,H0^:6"R?_P"J*6H`,@G"!,ZD>B`K66E5#*$/FE3,D"T`FB M`K5`E4/*$/D8I4EE9H5)I4IE9X5*I4ME:(5+&*5699R%5J5799V%5Z5899Z% M6"`D1JDDH#L@-R^I`*`&('8F(*4T(,`Q3/=%3-%,)/^B"KT`WYT0!LH0]ZD. MC0#_H@*]+CN5(,H0^*D`C0$>J0"B@(6`A8&&@B"/2+`+[@$>YH+J(+Y,D/"I M/XT`_Z(*O1`&G0#?RA#WJ0Z-`/],T""E@H4CHB"@!""<("#$3+`1I8*%)*F` MA8*%(R#$3*4DA8)@HBB@!"!H(*(#M2C5(-`%RA#W&&`X8*D`C0?5J0$@P_^B M`*D`(&C_J0*B,J`[(+W_J0&N`!Z@`""Z_R#`_[`%H@$@QO^B"(X'U6"I`"#T M3*(`(.A,L!2=@@;)`/`#Z-#QX`*0^2#/_R#/_Z60C8`&3+Q)8*V"!JR#!H0E M"H4D)B4XJ0#E)(4@K8(&Y26%(:V#!ND`JJ4@I"$@TR2%`J(`.*D(Y0*0#O`, MA0*I()T`!NCD`I#XJ0"=``:I$*``(#M@`8I0/#N(.))J4"@.R#U22"E)R`[)*G^A6ZI`(5I3$)8ZJD`C0?5)-

J1"-+PJM$!X)@(7QJ0B-!]6I3J`[(/5)JE`J0#I@1@R3JP]2D/A06B`K4" ME0;*$/FB`@8")@,F!)`'I0:D!Z8(8,K0[ABB`+4"=0:5`NB*20/0]`8")@,F M!+#?I0)E!84"D`CF`]`$Y@3PS\C0HZEQH#L@=B:I""!.+@@@:B0HL!P@RDK@ M`-`6P`#0$LD?L`[)!I`*C0`>I6X)`H5N8*F.H#M,336IH*`[('8FJ0,@3BX( M(&HD*+`((,I*A6Q,XS-@J0"-!]6I`2##_ZD!KCD>K#H>(+K_J0`@O?\@P/^P M"J(!(,G_J0B-!]5@J0"-!]4@S/^I`2##_ZD(C0?58"!J)*D)H!\@=B:ILJ`[ M('8FH@*U4)6`J0"5EI69RA#SJ0&%GR"$2[`3K3L>H@&@`"!S32S__RS__R"N M2ZF[H#L@=B:E;@D!A6Y@I0$I0$E`2DJ%TZ!8A-2I_XT`W(TOT*X!W.#_T`^I M`(T`W(TOT*X!W.#_T`JEU(75J7^-`-Q@J*T^`X7,K3\#AR8&P"*D`C0$> M3-`@J3^-`/],/D@@S_^P!220<`%@.&"-!]6B`ZD`G8(&RA#XJ4*-A`9@H`"& M`KW@.TB]X3NJ:)D`#M,QZL-1ZN*!Y,#30>(%E/J0\@P_^M'`HIOXT<"JD`A9"-_P2I#Z;\H`\@NO^I`""]_R#` M_Y`!8"20$`<@S/\XJ05@H@\@QO^P[220,.X@S_^PY"20,.5P!,D-T/$@S/\D MD##8K3X>,!2M'`HI0/`-J?^-_P2I#R##_TPY'$RR3J``(,__L`V9``O())!P M!,#^D.\8A/^ED"E`\`*I'X7]8*D!(,/_J0"B`"!H_ZD!IOR@`B"Z_Z+_Z+T` M!M#ZBJ(`H`8@O?\@P/^0`6`@1#>I`(T'U:T`!LDRD!_)-O`0J0%(J0$@P_^I M#R##_V@X8*T!!LDRT.FI!-#GH@$@QO^PX$R13BS_!!`#3-`("=-8*W^!-`&.*E13$4=I/ZF^[D`"\D)T`-,N4_) M"M`#3*E/R1KP^8;ZJKT`#:;ZG0@$Z,C)#?`(X%&P!,3_D-*$_H;[&&!(K3(> MR0'P!&A,BD]H3)9/K3(>R030!:D)3']/X%"0!*D!T`J**0>%\#BI".7PA?"I M()T(!.C&\-#X3)9/("HCB/`&F*(>3"PC8*``L0+F`M`"Y@-@A0*$`X8$(/-/ MR0#0`6#)K[`$H`'0$_`(..FOJ*4$T`D@\T]((/-/J&@@YD],!%`@_Q_JHAJI MX"`L(RR0(ZD`H!`@.".I0*!3H@X@_D^I`*``(#@CJ0"@4:(@(/Y/(&E6(,Q0 M(%!*HAJM%!X@+"-@A6E,=2BE$`H891"HN7`\*BHJ*BD'JKU@/(41N7`\*1^% M$KYQ/+UH/(43N7(\2DI*2H44N7(\*0^%%:42($0S&&41D`'(A1:$%V"I1M`" MJ0Z%`ABE%VD0J*46IA-,(B2M/!Z%$*D`+/__(')0(+=0(*4GI6S)[_`,R1OP M",D@\`3)`]`+J?\L__^E$(T\'F!,`%8`<$!:!00M,3(X0!8%$A,)#PY`,"XW M-RXP,*]`'0(90$,2`0D'0$(2%0,%0#$V+48%`BTY,T!N7<]&54Y#5$E/3F!+ M15E3T%U=_5U=L08Q/?A=7;$&,CWX75VQ!C,]^%U=L08T/?A=7;$&-3WX75VQ M!C8]^%U=L08W/?A=7;$&.#WX75VQ!CD]^%U=L`8Q,#WX75VP!C$Q/?A=7;`& M,3(]^%UKKT`0#KXP'@Z^,!Z^#'8R,@Z^,!8.OC`6#KXP) MKX,#SZ^-#="#@_V#@[&$A(SX@X.QA(2,^(.#L82$C/B#@[&$A(SX@X.QA(2, M^(.#L82$C/B#@[&$A(SX@X.QA(2,^(.#L82$C/B#@["OA`.,^(.#L*^$`XSX M@X.PKX0#C/BO@U*TKXT&M(.RKXT+LH.SKXT/M(.PKXT&NH.#OX/`@\>#LZ^$ M!8RRKXP$L(.#LJ^$!(RW@[.OA`2,MX.QKX0*C+J#LJ^$!HRRKXP$L(.#L*^$ M!HRW@[*OA`6,MX.PKX0+C+J#L*^-#;.#@[&OA`6,MX.QKX0&C+>#L*^$"XRZ M@[.OA`6,MX.#L*^$!HRW@["OA`>,MX.SKX0(C+J#L*^-![F#@[&OA`6,MX.S MKXT)LX.PKX0+C+J#L*^$!HRRA(2,LX.#L*^$!HRW@[*OA`6,MX.QKX0*C+J# ML*^$"8RVKX-'KXD(@X,`````````````````````````````````'P`!`@,$ M!08'"`D*"PL+"PP-#@\1$A,0%!46&!H7%QL9'!X````!`@,$!08'"`D*"PT0 M$1(3%Q05%A@9&AT;(!P?(2(B`````````/\?0%?"5N-6*5?_'R)8_Q__'_\? M_Q_.3TY%`,'3PRW#S`#!T\,MS$8`P=/#+<-2`--01--#4@`B)RXU/#(S.\]& M1@#/3@`V."PM/3DZQ4Y!0DQ%`,1)4T%"3$4`>'Z%BI&7GZ:KK[6\Q%/H0_J0"@!DP`)+Q(51BY`!YI`8*402+Q25;D`'N`$T`(I?Z(`H``@TR2B`+40G0`$\`/HT/9H MA1`@8*D`\`*I_TBE3(4AI4V%(JT5'H4C MJ0>-%1X8I1%E((5-I1*%3&@P!B#Q)TR%5R`:**4AA4RE(H5-I2.-%1Y@J0VB M%(4DAB6B_^B]``;0^H8@(%57(*4G(%E7I6S%)-`)IB"I`)T`!AA@Q270`TS? M5\D#T`4@M%P"2#*2N`! ML`+``6"\4E6Y`![@!-`"*7\@YU>P"*85X`30`@F`O%)5F0`>8"!=)4QU*""O M2:D`C0?5K1`>"8"%\:D(C0?58*(`O0`&G0`-\`/HT/5X((3_(('_6*D!C3#0 MK1'0*>^-$=`DUS`#(%__HAJM&!X@+".M+QZ%\:(`O0`-\`8@TO_HT/5@I4Z- M"1ZB!=W?5?`#RA#XB@JJO>95C3`>O>=5C3$>3'4HJ0"-!]6FNHX`'JD(C0?5 M(/\?J?^%;DQ=)21?$`^I`(T`!JGTH%4@T4"0`6`@K3^I`(5)A4J%2R`;)R!B M)R!U**D`A5^I_H5NH@"],A^=``?P`^C0]6"E;@E`A6X@B#&F3>1WT`-,_3&] M"`3)(/`(Z.1WD/2&36"]"`3)(-#VZ.1WD/1,-EFE;@E`A6ZE3=`#3!TR((@Q MIDW*\-FI(-T(!/#VZ,KPSMT(!-#XZ$PV6:5N"4"%;B"(,:TX'M`!8*5-..TX M'K#[;3@>A0(XK3@>Y0(894W)4;#EA4W%=_#?D-VF3:D@G0@$RN#_\`3D=[#T MIDV&=R#[-$RD,Z5N"4"%;J5-T`%@KC@>\/HX[3@>L/MM.![)`-`#K3@>A0(X MI4WE`H5-8"`\02#,1(7#J0"%Q(7%((@QH@*U= M``;FQR`A6\D@\`3)#=#NIL>I`)T`!J3)A,J%RP"67.L`7- M-AZ0"O`(I<[P`CA@A0*FSJ0"\`FI()T(#.B(T/F@`+D`!IT(#.C(Q,>0]*D` MG0@,ALX88"!>6K`+IL;0!LD@T`+FSQA@IL^&OZ(`AL:&SV`@<5K@`O`!8"!J M6X7+H@*U<)5`RA#Y((@Q(&I;A``\`*I`B#A6I#%(.5;IBP*`#()P@.*7.95:%5I`&YE?0`N98J0"%SN9&T`;F1]`"YDCF M2=`&YDK0`N9+8*5"R?_0"Z("M<"54\H0^3`C('4QH@*UP)5SRA#YHG"@"""< M(*("M<"5@,H0^:)`H`,@G""B`K7`E9"U1I63RA#U.*63Z0&%DZ64Z0"%E+`" MQI6I`(66(&(G($U!(&HD('4H(*4TI6X)[(5N8"`N-*5W('$THDDXM0#I`94` ML`BU`=`"U@+6`6"I[J!<3'8FRE5'1TQ)3D<@3$E.15,N+BX`RTE,3"!"549& M15(@0TQ%05)%1`#%3E1%4B##3TU-3T1/4D4@Q,_3($-/34U!3D0`UT]22TE. M1RXN+@`````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M`````````````````````````````""71*D`H%T@=B:E;@D!A6Y@J0"-!]4@ MS/^I"(T'U5@X8*D4H%T@=B8@3"X@:B2I,*!=('8F("(WK0`&\`,@:S<@1#<@ 3A3<@:B2I`*`&('8FI6X)`85N8``` ` end