DClick7ph ;&O`  @`! #@%`')+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmoq s@owy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ׀ ٠  @` @`!Aa   !Aa!!#A%a')+-/1!9?A!CAEaGIKMOQ!SAU[]_a!cAeagikmoq!sAowy{}AaaAa!a!aǁɡ!Aaׁ١!Aa!Aa " B b  !B!b!!!!!"!""#B"%'")"+"-"/1"#3B#5b##9#;=#?$A"$CB$Eb$G$I$K$MO`  @`! #@%`')+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmoq s@owy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ׀ ٠  @` @`!Aa   !Aa!!#A%a')+-/1!9?A!CAEaGIKMOQ!SAU[]_a!cAeagikmoq!sAowy{}AaaAa!a!aǁɡ!Aaׁ١!Aa!Aa " B b  !B!b!!!!!"!""#B"%'")"+"-"/1"#3B#5b##9#;=#?$A"$CB$Eb$G$I$K$MSTOS_STEFIXMEDRES STE3POOLFIX3STE7STE_BOOTPRG =aAUTO -`VSTE `YROMPATCHPRG Xt STE_FIX PRG Zt USE_AS_AUTO`VIRUSDOC `BLITMAN TXT T>DMA2 Kz+ STECONTLACC xt NSTEDMA HKz&&STEMULATACC {t 03STEVIDEO KKz7&STE_SIG PRG <dG. .. CONVERT BASTSFSIINEW PRG rpNEWCOMP PRGusREAD ME  STOSNEW PRGvrLionpoulosS?& -------------------------------" FLOAT CONVERSION ROUTINE $ Changes 1.01 DOUBLE precision" constants to 1.02 SINGLE  precision, much faster.&-------------------------------dBUF$()iZ$()nBA#A4VxȠͦ:͢((BA#))4Vx, :5This program can only be used with float trap V 1.02!:,:>>> Press any key to abort <<<::w::EX$.BAS>蠛:,: >>> FLOAT CONVERSION PROGRAM <<<V폘.L:kN$(*kEX$, Choose program to convert):kN$:@(N$,.)N$N$.BAS&:(<:kRjkEX$(kN$,):kOLDA0():/':,kOLDA0:kR+D:,:&>>> PROGRAM SUCCESSFULLY CONVERTED <<<( , :... SAVING ...:V:{N$,()()LPROG:rL:, : DISK ERROR:,:>>> Press any key <<<::w:::V:, : WRITE ERROR:, :Please check your disk drive.:,:>>> Press any key <<<::w:::$' -----------------------------' Conversion routine$'-----------------------------F'kAD() ::kNFL:,',:PROCESSING LINE:'kDLkAD:kLL(kAD):kLLNFLR::, :*This program does not use float constants.:,:>>> Press any key <<<::w::R:Z'kNN(kAD):,:(kNN) :kADkAD\'$k~P(kAD):kAD:k~PkADkDLkLL:/' ')k~P18'$J'.k~Pk~PADAD:'$Z'3(k~P)(k~P)':ADAD:'$<'8k~Pk~PkAD:18'$Z'=k~P':ADAD(AD):'$ 'Bk~P3h'QH'Gk~P:f':kADkAD:18'$'L18'$'QkNFL::f':()(kAD):()(kAD):()4Vx:, :*I think this program is ALREADY converted!:,:>>> Press any key <<<::w::kR:f'V() :()8:():():()(BUF$):0'[X:B$:XN'`A$(BUF$,X,):X:A$Z$'>'eA$.B$B$A$:'`0'jY(B$):B$B$.n'oA$(BUF$,X,):X:A$Z$B$(B$,Y):' 'tA$E'4'yA$0Y(B$)*'~B$B$A$:'o&'B$(B$,Y)EN'A$(BUF$,X,):X:A$Z$'*'B$B$A$:''X(B$,E):XA((B$,X)):AA'^'BA#(B$):AD,((BA#)):AD,4Vx:ADAD''$@':,:OVERFLOW ERROR IN LINE(NN)6',:- Original value : B$B',:)Enter value / to abort / to go onT',::- Please input value :;A$::A$(A$)D'X:,X:(P);:X*'A$AR:`'A$GAD,:AD,4Vx:ADAD:'$j'BA#(A$):AD,((BA#)):AD,4Vx:ADAD:'$&'آ(,kAD)kAD'݋$(9----------------------------- (: Loads original program$(;-----------------------------D(<<(n:#,N$:LPROG(#):#.(A=d(x::,LPROGV(F=(:, :... LOADING ...:zkN$,():(()(K:kA$ Lionpoulos:>> Press any key <<<::w:R:4(n:, :FILE NOT FOUND:(sT(s,:>>> Press any key <<<::w:::R:2(x:, : OUT OF MEMORY:(s0(:, : READ ERROR:(s`;N@#Nu 9"9$9&9N##Nu 9"9$9&9N##Nu 9"9$9&9NT##Nu 9"9$9&9N##Nu 9"9N##Nu 9N##Nu 9"9$9&9Nlf p#`BNu 9"9$9&9Nlg p#`BNu 9"9$9&9Nlo p#`BNu 9"9$9&9Nlm p#`BNu 9"9$9&9Nll p#`BNu 9"9$9&9Nln p#`BNuXNqNqNqNqNqNqNqNqNqNqNq/<p?<&NN\NqNqNqNqNu!zNuH>HynM,vNL|NsHN 9Nu#N 9"9NuHHN*NuHHN`HHNF`HHNx`~HHN`dHHN`JHHN`0HHNVNuHHNNuHHNNu//N6Nu//N͔`//NV`//N`//Nݮ`//N݈`//N`//NѸ`//N>`//N0`//N0`//N`t////NجONu//N`R//NL`D//N `6/NxXNu#JEkFfҮ&t&ZE&&<$cN$.&.NT$N$.&.NT$+N/@ //A "/$/&/ N$.&.NTN-@-AJg .". tvNllH . @/H, "($.&.N o,$&(N-@-A` . @/H "($.&.N o$&(N-@-A`n . @/H "($.&.N o$&(N-@-A .". tvNll .".N-@-A .".N^NuNVB/. /.aO N^NuNVp//. /.aO N^NuNV/. /.NP-@-A$<@9L&&<NT$.&.N-@-AJg|N-@-A`j .".$<=g&<Nll-n-n `> .". $.&. NT-@-A$&<NT$.&.N-@-A`V/./.NP-@-A$R& 9n8i 3F <)i/gRi`a:<) ҆Bц` .f Jif`Ri` eg efNa +g -f ia 0m. 9n(:)iFi im?)_ f $hB`4)?)_gDBi/gT3|?Jk Si`Jig ktia\adSi`aRi`t4)?)_gN$h$$$h$p0)L~NYNXNu,(g !|NuH$hN<L?3FS fiNu?)_g|NuH?/Wf/<N`OBB`D/Wg:/N(*, "NBFHFHBBHB,.BBBa a NLNu?< rJf efe dSRSWfONuH?/WgT/WfBB`D/N(*, "NFHFHBBHB,.BBBa.aJgRBNLNu?< d҅ф@SWfTNuH?B` H?.<(/g(/f "`/N(*, "N&6FlDC C@m "$`NSCQ6`g C@m`4SCQ6k҅фdRC`dCD@ "$NLNu$fprt`"HBHBB/t Q$Nu//gdB Jf BB /g$RB/fJjRd R`SBgBo Bl(J?BBHB_HB&Nu/<N`p`/<N`0<HBBH@B@Or`NVAp0Ю-@-HJjBp/N`X .Jg-|p/N`Xp n0".遀0 .". N^NuNV## ##### #$HyNpXJg 9"9N^Nu . ".$N^NuNV#N^NuNV n  g f p!#`p"#pN^NuNV .". tvNll .". NN^NuNV . f nB`6Ap0/@"n" /?0-H .". N^NuH<*g2jD(g(jDBv㒴eRQ"jDjD`BBL<"QN J"J$I&JSj K"Ja$H*L&J k -"JJg$ёBJAg<f ``&J/k +k+k  -"- Ҁ+A -Ҁ+A$LLxN$`* fare6rvfadeNrBDaf6DrfaLQQ`8rx`ra@<m<gra062< ` 2< BTB6aSJ QmNu DNuSABBf DQNuXĀl@@e $ @%LATA@E``e{2FΖEl,mL <ĝ -e-L\1`02#X@L A|+4 <. ÀX0E1 )]eP1< {G9 q!aUVgfwt ;0;0 `|I$«0!6G`U*b a? tP*0b,E&cȠ@Ix@- lH` PG^:K p]@;G0S X\ü0  R$ #D腉Cl\`j8x"`wC$I@ pK3$GF(ȫpd „0@@j@H^P! h8{BC J!hʡ\Kښ@@ eM`"P%$p@PR*x$$d:M '8! I:IbAC$@5]X![@'őI- :P<@H4bD+tA?GF9!BU-8A :  <f`+?~H@+@%)wD b 1LB  YA $5 KBR+#.& dH`Y0 ,VAp>h0P j(p0l$Hp  `f-!F ` @tL1@Z@P!@@@F`0R#t] ~A| !w4ԒI,Dm A@SФl"`@[=t@⢂Ak@)3Ap4Äi@@ f (%pG@DQP$2@H$ 8Aw#34beFYZ030R` >¨ @EP  k5[0@sSw<7SjO` bK$#NM 4BDeD!%܀ Ʌҋ\ a"D)/`K) %@H TcE)"_{,>@bBA C@w@a*dL'cÙ88A&th0(;:~`qRJP`b P/ bd'E\ܛec34AX&@*́!Cj P$P``Bx+bR`80 pfPO0AJN&ȐPP#+!r (!B><<*-PD=~X; @"@@@AP0 T4ȱg.pE IDmz@5)`$ $2ЀTy*&9l;VV Wɧes/ؖ8Aˉ;ʈ$ 0@a  zLB@BC5mADrBDb!ȁH ľC04A0ø?H6 2K_ @@_C@8 'cBK XT*:[H!s9A v@U0`p\r< ;  @ - p*D^aAP20L0 AX@H`( `< HP|0 P: A @Tpg\?>fp(lW Z 6t3u1Dhl; us( K'j" u9:[ڻ;326p4H !bB  ]!(#YZ5*tM[ GDG0n@Al6b N70i`ӄ k@0cF@ áJ81@d80 hPŀ `CAh)$:\6! C-hPmؔ`RT J$8kPz5x0= @ d00,(2pe@@Q"D J a  Ǜ $50FCZ6!# 2 `(P@  @` iDؓ:Ⱥ%5j \ PA8P7`Ptt@`Q [d a`¡F 2s _ ]  `@@$Q c$ HP \z@ -"x$ D@$V p peb ib M@ NV1@ ` Q  Q    _< @ Q'͎b,5 _2iy4BAIlcLDYL@WFWݨ#$hAQPHr( 6lXDA50Ja-8T!B% A f&_l X<ŀTkAI[ʁ`HQ(3PHʤH 5x(#1/' Dzzy &Ls3D2BA 9@0hD"ԠٓԀ9O!=>PB 6hf$IY mpS@$Xr") Y"Q(;d$P`;D9;A@n(xAs"`@M(q :!n"L.R3̔@F)ط9&@o 2j 3%hLdX٘ 0;aK$P >u  &/ЄȺ0Q"q?v9eqk>:fu82c,TH $`3`P8 Z QMoHgVe#KiGeb@ dA@ @cqO3 a Cq!6C!ܞf  )l*T}$$:  F 4 D*@ !Yn % 4:! `]tXAYЭ4L @Ty"@ ץ:ʉx2 t[& `Hc*&bF q80!f00F2 # 2S֊Viې00 ԓ9J $\*i`T $cqW6 `18s0դpy]$Y szoiU008P6]0 87WWD@@ވ0g -`A eI|`qɼlBYȄ@$ 70P n|;@(*pW)tTJX d HeY m@Si8p 01&'t `+2`l1C q h~@D!`hP2a PK`BH0e( C(r0ƃ0  ҀD@$ ?uXb< # hz|bH `a@w.(P6|Z I ) ! L`%(#pbB6 AaATHD `Hf8AleB4XP?@`@>Op$ T# ]A &bpG-ɈR, ՠfa=ء??DBl $ 0gB+P01 gZ,!6hh| j(D1 2b$@Y0HzP݁~=ŞgCN0} ^ ~Q㦥!$4q2Ծj J\A&_dJ:S4p9 sY 7? At9fD r" 6k@ Th ~ $+# V`  f`)b J6l+'AI@ Pa4Ô( #c# ׋a 0'k. EiH)`mA8$]@ZX,4f(!Y`)&|.KaX@øL D\ Hx: ``B C33Vʘ|;,!9^P>APAr@T aK8}L@y~!@hjo|0 W5c ~Q$D?I X5p n@Cp0A  `0` (G CRfAP`? d5e&@id ( hbE R '@$!P s$:@Pkà@ef-ʀ-@&8P1 m * [@< )_ P01CP?@+!AYpW@ʿ@8*dmz @ @+ C`0kp@d S!!di( P(()t&vfuf`ΐd( GP0.,AXA$s e(a*!(T0 XJ2@P %)|X[X_T&`7hv8,  8@hA6h ` $ % P "Az?CqFAtqVB h`@ l`  j`` n`O; Ҁ  T=X)e V@b 0Bi , 6JV,hq@1F(@DB;,#4p\@! 0@E PYY؎6#,dfb8E# % s/&q 2  ., 0aBPI  LGXF_pU XP6 $`p:%#C$  @%hn  8hH4HB5@\p2@m lVx (6I ͊]$+GfdA §m I S lAl\A@ 8H%H$ $6 JnI X& $aRA$0`i ̓6 $P+$l*@H>$ @H6i@< @%d cmE3A BD$@4D,R2:'S v `L', FN H,p P`@LH@?'A9A}\ i0qƀrCSRN@"|t `p0>.d y"4I HKH[Xs/W(yKb`z)+(vEbT\ / PB !-8 .nQ@*rC hVZ0`(qrA\8P A(10%xK.C\HTp)H ^@.P:W 0A+ ̡ 7(ct.8n P,Y?DU!xLF@q !L%ȁ=R b(H T 0A0&AH RI$,,80JHm)!c By2#l"J/PIh aP X-Y(N/AS*B#4  e 9O< :6!" /TKf X$J€B'a Z9[H0aC@`2 q >h100 O_ V &(bP ~ '1A(Pτ 4N~ m 8AɋH@$ 8JH\\X2"I 9C`Nr`Uyi6D~ ` Dz|n/Ctȕx}xb\`P"A`_fh`2BAз@̾]@l~, 4C0t!@C 2!D/HH`dd030 %<0 "=` V0-* `K &S<@d ጂ+ t@f C@P GCsA0H@]+ #+% 9TM ]I±W;ec {{IIKgcHvt``݀:R4 b407 "p p *02@!y@L(3i`΀$8 rA%1BR!%u0fUYRXQRN@ `p3aRė uTUt!eDTĨ8 K `@<@eAaQP.0VY"<GECB#l\,J)]-8<mMF'CgSbƄ@'K#BDC*0$(B), J$$@@lHgbAkSOra1}\H`b:# 9$<h=L pxh@e 0 ؀ @ZjH042.01`| (`b 2`b  v 0t HW@} `c ` @ 0Ȁ z@X)Ph6kL 8 P2` Wl@~AP x $X4n@h ` $\8@PD!L TJD @(A L@":*6>195:Vn~aqit ]rGc'//V׮o7ova$|p0: Tyeufm}sdk{ ߀(\!B8 $B@ A@`@#@ 0  GhX  6X@!Hjz t(ȥ}6 \0PڦEjwTo_PڦDjY`C( t`ᴤ  8PaE bf, dXp2`A @'b0 o3  @F[/0Vr$hb@a2 \:'8bdXgB.~!8!Bˊ&0s VI2O!d@.QKf @r @ܚLߟܳ ; `IP0!&AA &`P0aB& @P4"EhD |Jm6lu@@ QJ!2@D(XA١.u% &f(`pXp0L`@ "64X \-T C׉HCBSz+7;ci VX!H\%0`a`pap`cǁ:2Ak1Tl d`0@ * J@Ԣp0:"EJIS T&D!0X@ SHl s NC@1/ $1PP#@0`mN,WH i 6  @Dj%VDFttLpty@(3a&  b'Fk xK)4!4$ $QHK@"rP5A឴ P< +X7~*Tp 4I %@ԡ$8(;!TS,`hؐ@NR2 8Ġ);`B!\E`x0j@T (pٕz @ )r(0!H**apt(? 5K评,!"HLH4bl(p0cY'  aJ EyOa  nO) [R5%fP2A64(A(!`,F@mn6E2 hPPȈhh@R  B F@ڝEqCͰ69B/0GpH&pP d!A@PD Qb GٜH 0wLARm+ Qh gg6^)[A  "$PBi@̠aj@.dD a2 a#fdyu"DNI2 ! sRP0/ P12D|LH@8/@P2W(* bI VB@~E "7|@YP4s,"͸?L< j@p64mZV #6A@@P )) ( 4"  " @ט0h  @Pj[D^+ ywD`1KCЀ!A&`@ZZ@GxDY@P4!k0 @\}@ @ @x@03`#!@48 J)`&AӨ8PjuI&GEI>O D# (B~28Xǡ<1y8:Q@:@l!b49dĹtM\T$DA! j ' `lhp9P|P` e54|)U\x LL@# @ba$beFMFWЊb )R'KsB 9 f̨`JbJ" r H/@A%.>@9\E "f xOlH*_  T AR@@\IR@q@;4@-,ʺ23pe`%B9 2SQ [ +e$PA=F n @b. $rhI*RHB# AB70$՜JH1c   ѡрBhЈƉ'߯ YXYHX=87M ", (0`h@I("E p" GF@cQ!E&  РW ,MJ MXJYPҁ p A @ 2JfL4PDaAc- ~q($e)$EҊ @2P p@  "\`2y$& :  Xt:d^8 5 8L6 p /IιPG(."`uQ0)p8Pp?8B_ FG2"\ D<D 5&X2IAgriP~)T %ED!( @T$U'>'ڡ4X@ j`9{(6 d DہASږ |QtPrLA0 p 'EYsfPB( A2+}`bo pEX6*Kt P4(EnE':h!D`  H&8*!/* Bk <~Pvp/5T$hzPPP(> ITO@5,=`H4H @ P ` O#1p A8?@  % AO"209q\@ nPoT008e 0 @p<nP3.xB(>!x@#oWEo(RH@,T%OJ9P@*J"Y 8}J`i@j0"0aT ,*Ѓh@jH) P xJ- <IC] $^C ! 8"(HF, AbF ԢgB%@`j@D1H#xo  1@ ,`Z' &gG`9^P5uM'`4@  E%hH.(B@'X&`F*NAqBj q@ " FL0 *-G1 8O7`0x"x Ь*l0+`6. l[26P0W0\ )0ʀiD@>' "Ā. D'.oF% AH 7  a 8h1$8  (f\eGK+ BQY づLY`` BF`jXPX bAH\D-|H[ B !@ R. P[AXf x3$!@ $d,BU?05 G4+*h`[.2` V P5J)O@ET!!dN}1f :9 s$@up6A` +H$d} @i LK [P,(84DF@ ]@@-@ӂ11*  00,0. O#00zJ %DHXk& UbGT@ ' ; `L6J 0ԁ(*f"/P4&@ :hb g3j0 n BhPBf(XO(pԂh ai0nQ0d8` D*&, qd ̇4PF ph0@ _`R`#H"A|gd0 )+us6 2`l0 1`x`B-@ @CL d+y(DCaYM D2XBD4AD1@ b @_HAp ! H ÃU02`:VQNIBYTJ zq^b \؃d4.*8R&bۥ,,ibXi(h -CjHI*R!P")E4\Yv4pl@8D@P$@Q a d0\l ld@ʂǒaD BFyI| E 2)` RBAP3I j. fƀ x_H`u %" `J@ \9T`Wp5" /0TcP~@H* "x_) gPABh Ha.Gma( *8*  @ b%BH$ bf݈4&p ](؇?@>-x EJZ1JDR Ty s80='0\I@xh) B0 $( D}rd!%@ X8h\L Ȃ@ ҁ xm R!t DHap8CT,$!98Rb0k  B%G h&j`LL ;D`ؠL`8`8LPa!e#GHԕ& 8>1(4<(28984$u8մ-̀njˆtpٻv-Ĉ3 #& ``> @ 4 NP011hd0 Pa[`@w c[( `ҠP0 c ;RD0 llnd C03z Dh1ד 4 >txJc4!%Xd! 0b@F3n6`J4B``6O6n=a@/L< ?@&061i#6M K$8 m A```D0'03\%! H10a1PDM& @0 % F~t$c42>3(H0 B `lxAfD4lm @'1$ lh?Q@ | P$B@3O!1! $$ A#!C" BpL=1<008fs f ( @@O#E`#$$<!!!@ ` &HYOHL@, `\A@ @ $5YA ZA`@8 T PPB*AI%Q AD儕EC@16 b @*PI3pGTz/10apց@@€as"0 Ibp0`U0.=@"d" `nDp3 w`/(@P1cEt "8"@O` sE ?l`bp (P08P00@Ғ(- :  %6# Q  x1` gг7;!dRhEL"((! 3@F.c_@r@͛6  '`@!1 )9%5 -=#3 +;'7/?`PpHhXxDdTtLl\|BbRrJjZzFfVvNn^~AaQqIiYyEeUuMm]}CcSsKk[{GgWwOo_@T7a ‚AvA>T@6(lR((89@A8@P3a 01=@@/# wAȆP0nA:  r058p Mp,pxq5 $.0`xh@.s3AP5Aߤ8+p2PЁSg+p ckd LYp< lv 8^p0 g;M@! @A 0(06  ww@-2 8st6`W (PV>l@AG&L n0xP2Ha%AĊ  RRP$658B U<8 ! EHkt 8p`@``AC$T@a Ap0P`DP5M `|< 3;3s@ၿ|;1 ,(0$0n*h@ %@Ǻ@AC,%Q ] t" pi}/Q m0d o0&/?R3*`l6` H5@MzPB " (|Ƃ 5uUUJ~ d?4c>80ls@` M~Tg#A l ɀ@j@‚A#0 'D*2N@@@ !9 CAiY P(= cntFd%I$(7GOOw`0 ( @Q>~~| |jx7F FdP00@l "fHHI@R LBB2H$ A 19<` @rd`@89oAOa(p1t``1  BP7sՠ w~OLS?[րxd{8 'vtT T"0(c-&P V`  Pbd"-'KSFFPpphBh h @al@KR'eZ@ hSPQ@)0@8!uh$Z@A< gK qX 0hW@3( Pb< '?O<k$"s60 `  kP4 @ RНA$]x1=aN( a0aG] } aE5>-3]m]-y(h#: EکpyAU|.m]L H0@p  @8@?`\ؙlMt=`01 M9 :P6`O Z (2cA$'?A`O/$ rP $ C8 $!$": C7۰ܐ;Xq!QHXX 4$t` j<U@  @N`x 2g( P&`BP(A(@dD3 )0D @ `L* H0@, DP@Ye3SX;|eP4 6)QQ U'L@t r ¸@2 dKhG"brDLOxHHL‹`(3 8JB0B" $u 110]$ Wr  W`€@FhAA@ 7'x Eܲd%u#PDL1cK }.G.BԢ)q3Weq swIĒ"y{xAS]P*(5"l@ qD\*cfʂl\dxxHxT @L3M(RH?  X@@d2-(JR 52 @p2Ay@ZH(Em2 0@DJ aa"%(* h5w^@(1\Vp0hz @b*NzRbxQb{E|P`b%  Pa 5-/x  ʡ!@` H D(p4@j DAnACC|4\0g+ 1pppp04` fA#QsSqSySuS}TI pS0e9W=WWW]W݀AAo4_$$ @q'k VO  hNʸN$bmrclqVh$0 `m !nq!T@* L65f&YLAt""\ N Y2C/Pt`41!&`qH* x1n(L/@1{#bN,\ -^@6@ 76 lDu{؁qso1 Xe  򀗖c 3 j aʹ@P0 ZA@i00;jb0&~qG&AڤH)B `j@oh(4fDx | @h”"@0L@D`@ @2H? 4qA v 8a0!@FA0`/; qq݆0CBdڜ`ԢPG>x`Z$ć b3>A $`) @'+ H KFb)EVM@ax@A !@ @2 i$HB #Fa@"4q"?g R fPHH2(&<a#i(C1 s Dx 2qd$p>O& _X> H|I Et2D'* ?_v]@ ՁQD "( X`CQ @1x4XE`x a&{@8K@*H883$봀qB~aB\\AʢB<@ʐPPV mK@ ⡇㭀fjPS"Jc20$eq./k6|+@p2@lͅ{ HI 1c@A (t=BcV, `aa~+@`F88`,#v(D%Y@,&$)K `,B ^@LC@@K P8T0̾@.@@QR\# J6lhp̂ș$(9CD !)0L@imRkI]Dba%W2lG`bl\ HLX Ҩ9 *)*|uIXA;)ÚJd1P Hp@`gF IRߤ !(  Ak"b-t X$ dP0  B/d`RbA@%0!/+  3C0x@ @I0 @`9@$ 䠠 @AP@8P0 ̥E+(ثl@v BE)n`fB4`a@@$D`!4  is1: av4Px02%.=/=./E@=Žս907j*ӊ㈫˾iiiuf}ta$@@2P18 0AFL X @5 tlaY@ B ,5( 00033 3"8>9%eeeP<)pWエ @@4 8h>8' RtxKQ(R~ B L=*J b7&Rf$hQ#`sЀ4 " ?t=pc$ n i!F$ fC"7 4  "H j<U T (7Eex?0(U ^J]妉~K(*CP@8CHD`*@ x0A$@BK^Qx$qU`4,  ;5;$;RU(RBV@.-j& TrI OS 4,uG hF%dXMpDDCh@`Hė"Ą8Ed5"F/$!u5sL}#!{,*.9LHtb9F 70#,$|(/@ hPcn`o`cI!E'̈́͂͆́!!&" A@p@@4'Re\'Q^ivenqNaP(P3f42xw0(LNG^$F on87P3`i@ɣ!t Aaqk(=߈HF`! h(7B=A/@` 01Txp(!#DhJS9$ PH"E ee? ?=$=@&C,(m $@E 6` AX" 0 $!.@(("1JDI- H؁@4L (Q 6`/3bŷd1(E k8 ѩɤ;P016c  A!6AAND h@!(es2 X h@Հ 82p0 /(*6AX'Q9ݑ H=@`~>|I:̄@$XSDo"`0-Ah\H%s5/С(r ӭ9"a BdSG2mN0F`EJ<0nIDP` i`0DFAIC1QT" \F@ Q֠jRbQO0̓&5:qv'nأă"0@Ej,0O @JŒUT#0#- 61"ة @JFE&AdR pbHC5И PPCB$V"U*$'|xX.'"•1A.Bjq#OI` JIǒ6>4@Asl1$.e .v(=!Ȋ̡!@A .pD`@ϑ׃_'u(Y Ul<@< 0 %yFT*Ec"@ހ7  Vf0 LeDA ΒP@)P$%8 Kbaa:93 _N @ 2T<\n0@1bfaeGZ*l7bQ>Ҕ A 6 RD^{L#`#'>$(ET"` dv`+Dpu̘`Nf0e qNxxS \:[FfBʢ{̑G ,\2bj̓0> 2 !z(XꁡQASR~T< Ț+ؔ`G)!%@`VŌHz:T*+)@A j0kT @`@rtW$5 J P  "RB G`+C Xs aT@0[ _ú$  jna"l@\"T&FK60 ^70&p;pP8 @'#@`P>0T@>HE;?pUGxA4ؠlH8p)p$ LP8v   WX() hh$  P[0Bf0rG YNU‹lTq̶2KCN=[;Q 7@/|=!A!CAɤ(0I\ɠ\ƍ@BL.RBԸ̼l01P2PV8b PTQeN$|HlyG[N| 0Dߙ6l y 3 ;"&$U IPFB@B ]@W(AlT&g:;˘ "K+T%'>Ә! (tr&A)YLh OKntKo/ A\ǚ˄JK m!0BT!@q2J:Z2rœ <Es8kEqT #aK Q1P0@a W0NX3 +Yh,KVAiq+r9 dA`)L P *G2(1\P @(@R@2 l'd)``t(JZ  kL̂Qfm!:C$` hxxH),A(CLUP40z)0d&DT(qf< < TU09)BbP4-$$&. lav2 I: 8(@5c@1(6Z@0 ikZ~F M$) =4JaPp ko\Ά]\⋳T|.N`Pw2ʢ$dp`\\` 0<Ā(2849E wgzgLArf ~.*q634A)Z c!B PH̄Ir$`P(,"HX %GPThCPX)CP8* xL]8!h`#ny4Hxr dtD !"K x&q,)1T1҃5&cF%EA:<(*    L @ 35 RA AB ;7N";QAFH1b_>,@`  q`pF x|؊SlhB`ěp  6;xAaS) @r4 @(@E{ pAa4< @b|.D `""*X?$ 'h  a :@a0 @ aB|4& 0?B T mC@%\(4k EIdڈ |:f29Q"Hda!F? ~ P& L0XQZ?p4 P/E dT?CӒ tK@ @(G@q15<xhz@u@!2a0? <dAP`VX>?0!vCe0@pBo@@`H0 H!* PF!GAlL  (8$8"( L#ATЁ(DAebdNV~`Hxb'. 0p aO 6XTUi /T\Oh6EkQCB  >tv  AL cXhA ~~@>   $8_ k@@<"E*GT8x<I+I p:A ~  ` 3]%Z  //>/@ @ 0E@~@,W a P0"  ԁ`B" C00 4|/_ 0aD\&p dq89@p t^C03 @"E@ }@1"b"h\DDM9088p#5&4bLQ ӂ" , @ , R AAD儕D )@F< s@PAeTeBR*J@ jR P YA 0)Q @eDUEXBz\X@R (  N "U~61ad`㠷! ,!! /`Ao@3A@~@Z@A_{ÁHހfJ81wiqUݫpp 0 P +~& 480?+=-29(HAx8cTdqb5@ۆ0$4D t@0\&4UP I'$3"~D#Q9D}?gw TJ.?a)@R#e"Vf@`L  @OA!> ]xDOr )O3C10{ 4L@ǒ€p4&hH{? /&& P,ѹIS cΰ %0 `"Wၩn80!g jd",s)!i $J`bJBhAóC(İ?`4Eu"ˆdH%'s03 @n@v)S@,CY5-Z@/Hd0B'>d/&& xE,$5 n"  0ᜠ`A0@ l[ 4 U04`b%% .bi ^!8aj^B( pd1 / $DW I3EX@ b@h`0!P@2J H `:nɈ_ l7ȍ0!&V0`Xb,`B`}ֳ4 )~+ @ #I__[>``Lѥo_//1&&L Af 0A\̴Hi'58 c!@Kf( P T$A, A6 @ bTD0( $i, `a!2w& KDByP% 1\  5!' h$ 0D )$ `7t01H@\Ab`11,1F@  @@Ȑ 0bb@^Ap@!;Y;$%A qu |H7pc`@܀ BG=AP7:AP0 $(NSB{&(a.0B !(4 Q"@Sg"{ FB0 ΀ ڧ@ lx(tH\*"RSHp?48y|(%*,p\(p%`-@# d))`Ă+DI|} x d ( # DР  d* " | pq9`HLU@ Uh`hXD0X,Y<00(< 4u,@"`*0F8?525quo2fvЇSKsc @M7ZP`^rA:J w0 [2lK+4@ QEUIQ%r@R JE 7D q k%H@(  Z -(@H'$y,@p 6@0$x @H! ATBXAp`fPe-\ Ah@&Sd0J8#cdpR|PBʒ¢$UYfUUe-02)6@z 888 < e M ,a"jpD$`h<@"bEL `XΊ hx  @`H L M )2+p0w@u0` d0%dU@P chrcF ip6C`8,,lGs3+XpLF&J1aRAR42@o l "Z VmH*(P4$(T $  l  `m Jd ة@02vlH $AX쁶 $ A$DR@H0 NHpi*@D:$pA ! rx $d 8@P1)8$@j`$mH V°D !6 4 @d  V@5BH!D 8 (Ш`m!F" Aj@^/$A@.(@P>   J  z@[$ @`p$ &f . 83`eW^ $4p3`d@Ol @8  D R@ `0( 0>` c$4  @By@v0@H?BRh"`s@ȼ9yA \M܃: 1tŘw<@6X@rSccQ%YQAe@v[tM] l_BX * ^0?ꠡ@sH$$2ʖ^$0`+$VKS 3Q@:040>bv,gP0KAMp0X`8\JP02w2r0(P@ <1ӁEȰ x9ҙ2G _@ FA `1d$ $> gd( b h:`f`A4` A4`A@,A3F&Z8%3,mP00HZAECG'P( ƅŅÇ9j@ {Pi+t"64-`|85H6ظQ'7 r\w{'k`P48 0;:,]Mv;`RА.a 63AehA."0Q4 @%  G@0@  HP}6q)\'mh8P7`lN)ȠL,xM,H t fojP^: 02 $d2.v\6&DTD5345q<ٹ 4!qp0TPe@9TPe@9 (0h(P0K@ZPG@10QBBx!P(^B,dQ  8Du@и ~Qd(^/!  xPd (@ 0@ @ ^L \Ca #O%X\0\Ah1 "D$d0 a0ihpʳ` *T)t7fh0_@? - #jBւ`h @(5 @'l ` ˆBBP0(P>(@LR`p-DQ(AC\H, @@J1pwp0q[P0``⠷ ? -  /=a$@o@3@%@~@Z@@_;ÀUIހfJ80}iqaV&* <LTd$Dx8h(H. qW]K;g'P$L  4b.Ȃ0.2 p @,=*K,F |o0CBg `Ai@mT <X@"޻}j  ani}@(2h&87]l@ ˿ACDLFA\@L-h. fA(1 "TfM'`tHY0Ed~:4g rGbj}ǁNl @*3z $cv+aڃ)X% &l!FXg8 Ĝ> Ӑ ԋE AO@W-i\tg\b> Dp!#0Jzl-p%n3D2B)1*'DdWV`$ 螭A"͌]L@a}|R@'@ `p8v`ADxb]#mbћ۔4F=`&h"r_7(>`q`l =  x" z .ÌoSA #C@% `Txc`i~A;.$ " E B>pގ!2 8X $ r<z:' -^e @D4@Pgn($R\mXV"C*kP*%ЁS8  &d AT@Ką~4b,@NA8@A0nUbAC@c* 0 8Z84 I@HC@. YITTZ"0[BvJB@L[@%qعPM@00 ($KNymP0S) !GR@8+0T {`Ag3)LX |[٠A!JpAv$Ěb p1PA4ɉF;J$@@<$J0&)?p A@"@`yOL mA3QA&D@@"rFcA0("a5*M $"[@A+v^A=iXQ bp%@Ih %E zHhO S@! A@MAcK=N ] tH (x@1@@@]!`@0(,HaNt BN F`Xp<4(Ht⤆%B0CC"ɀT @(@J! @h 5KC#xp*  >   @}n,PWiBcD  "`P$ %&fV6vNFx 123202RA  hbl,05kH ̃LC a@ڤܜD@EJemi2,D CLC4T*ffd!sA~@Ab4AzL M k1@40l@ \ @<R )WVlfTߤ H$pN0"0ŕc4HP>jp(: i1@Z4 z@m@p1,l^!dP$26`2hEd<   PIQqTK@탽W{[D9uPd)V h $)߂ P(9xf@%4@:kQ`E8@Ыohwp.`V$<ɂ IP?LRL<Bάa7mp/H2+7nNv/ ,)ƚ`@AVZ8A ۻ Ȑal500Lh`ljHH  6 @nu 8\  @;tډ A@6@i@Ҁ (p P 8@00+N|A0KA%@5t.Fvp: nWV Nh(3i`ceAxaP`{d,z h \ 1 " *S@NX`遡N ЃJ@(>J6B {Bn \\xB= z ~1K{BVX*f?  IfH62sAԃsB :D] @aP e.p R.AA06jclD(P3 0QbB† H<1h1ZPH1` L|@2x *j(Ne8 `9b;/& 'in uA9IY(p1kq Y r\ d ]=8 !ATP,P2t A P<xslEԦ%-,Zv@H(h6),A,(@ 16" !g @qN0ByIPUt 8D PF@֠ ` q[&xiZ@y@nqt v.Tl $ t|G& % `а  rkX@,vtʦ0p bonC(zlpi p$7pu6/nHWʰ!O@Q)xhQhXҤUddA bdlI@03(v@h 8 `"2 A!B!F&䤐tJP(DEX zNn4Q[j΁DBLA<]QUjn @002W'"(mc (gK@j)(貫 2 J^j` ,8R:/`Nl+ @X=I14**K BTO5328)` |\'oh<^p*`V @ 1WnJl@lJ#{cb"Nv„A(A) 8 =Hp?pAK?ÀT ʴk'n);p&-bk Q:"\MG(#jN`@J}04 @ eӰ:@i0 )1]@B LF0@ ""`"A~hB  c `aD /0ɃA $ S  \$p FE$-P   &AbpB?cxOdI sP^"* `@ YtEVB\(T `VXa- H "2za\Reyp 7?"̱~{Z @ 10 "ט` H"B " Ty$bP*X,tP1R`k= j`gu@@xځ*AݨC\@T`yE A艀"Y!rXR5Tf4*( 5h5JQE<3rT4Q6 ! 0SՊU0 u2LJ"Ƞ|PVɅ a xf rHA.`Rd '?Jeq Htc2 f@ri3Ԗ$-e̙z aP` Px+A>u[ g5*?ȅ$HhAR+%@(  @6`f8#a@0a l`C A(j qAl l`vt 8JZ-P0`(9e`e0%1 Bi(a;P~(@ 3 2PRP ?,YA@@ '  @@UIAJP|qAP @q` @m mPM(s+) q`'#>A\$ Z 4(J  Ÿ;ʋp N  b}+T? 6%$B3!M @@R0{@ rxUH @ϦyP8@9  2qsrB-H8I#0B)E8  dpt[|܂xT`)qg{ 42L0*A`ljB @UB„`*1Cr'@aMA0a2t`~, eZSj[pLJ;x:! 0pA&0D(HTd@ĹpQ4(MiQjd 0BPI  LG Z#/ qB-a @dGƍ DHTCJ  ^pXA0Q@0Qfػ| P7P3z  &@'(@ @@ A$J' şY%b@`l`bʌ, I>"%P X,s,Pͱy86aQA%k@`-fA )c}(с|>!\>p/a@ `ʑ,M2jB `h`)3"`PRf0cL AD(lK m@T}6=j x 7(@b)0pB @PAou#1&"1HΨDWRO![:>@ HXChD ET @R / JJ@ &_ BP @G(H( =BP( A(@/ʅ1 @pD LRPbX0q DE8ry9D̐ס H1V3`ň8?,\ al-h2D$ D%ca#`b$*%Xs e`Q0rbR"XPdH$Ds0,.")) 0p t@HO" qBP56e@# &lD am*ƃ@؀)A8Rx.aH$yGjXXK0)Mg`L < [`(e@k"BOA_2p l2Ehs k!`0B"dEbNr{D"i#aXRP<-@H 8T khfb(G1%'P] @ $p)B̄""A|~bYJ+=0>@!0(P-pT02@4H@0@$ Z gXT@D J'A+@BRO:PA Y "y$( cE:( 1Ducl3L`&/FX/34 L0OpR  4I$( U }0M r3! d!G` ^ Ma@0T@֑~ s bkp0yy*p0d_(=ƀ`@<I y 44 3Qd`PURA!8h(@XI)V,@!B) 3B& #eT#€8~҅p!AGnOQ$ "` H ?BP<h7 4( b$*TB\H5 D ʈbc{0! GA8z` Pa=C|P3@`kp(*}1?P100*K0> ?@$YP8A\ j$pP%c@3J3wB2fQ0mkB3 u0X@ۆ, xIGLʁf_ fT&H P4A ,Dr 8E̐`0Ea'cqаCW&Gi]+P* ၏$!Ϭp/X2 :"G‰H ԮM8f?H~bq~!a+ЮId@ҁ. OcˆlU 6 A@j(3n 58B;FP8 ALĘɑsKR @I4@$)P.H6A3!|,j e@҂s2 Qp+@ e׊3$ba+(@A׋aH1&؀,z) 3X@p  O*2D .*h@%% o3aDNY@TC`kTCQJ M;@i Id&2"ˠArcg$ 20[(x& ('(T]>A(JXAD <&[P![`ED=@Pet:^0:QP6bc*"ĥHɵ@̥$,<v{W0,C_9 IkD Q  #AW`TeexTp #uXT@6H8 BDL  m6 ,,hHE7p/R .@14A QpC0 @٘| 3L&SC`H5f@B5#9Hu \̠e @p_# P$ 0m( &P?Ƞ TDܮa:faFL0_]ޒp+o( RY mR(>૲b"$ Dt6.|/Ba@&T M%4} Tbp2 a`{20 E~E/2"64f ) \@D#__ lP FQW( TH r@ @Ɓx |`+FXA4V1(( F̐ځAFJJg,)k)( N 0 ̣ZB) A W);Y!!@P r^fawõQ$>s Xp;v8RhS+PO AP(0#85 (igE&A2S>υ& RK{%ڰ%(@H\Dj`"JDHO ; #$f_DKc`"L 5L}E[ q@Q >@A %\Hu'}RRr2/'&@ b ѻX12g&l0`5`Q#@ epSZdIx wJ)Pb>q$B80c&B_5 c3@DT[zA ' p.@ ܀b*H4 j@06>E PA<@h6h8!1}  @u@yM|!`/ɂ2r -(''׋a n$y KHX* P3~ e!& s j) qJQ"0$;D 똂*O<IIB092t#mBA$,Xb>%0BfX S2P @2l6 xX`PD @PTA@PTF@PTqRG!@؂A@ lfp,p7)2(op0X*z2%H@ 9LX;$ ԁMDEQ !xY(  Bz  s``4?`8lfCF!V%Aψ` 0q;q xlC!!U$@O o޽Ly)$@@'6@X UHP <:f/00|da0<lJ>#Fe*fՄwN ~q @a_6@00@.XA@@ =HP !@Y m05?UDB1ITR@} `j@ #((XP2H7 Y@}0h>O@F']8,O#U?G801Jo5T:L4]nEEP3@ ARjT…<`e{HpP2Rj!y:.AR; PfœD a{dx"&N=d+ JAF' a\@fCkl6,P2`+(Ќz\;P5 `@ @ 5 (I' oBL)r ~Đs$`.%D2`aB}CX"020Qd d``0 2A"b@B*P ge})Q!8M:R*cP0͸ QQ8t`r\rҧI2Rq4K$p# `OA( @ (`/! u| ^ dB(!ԭ 6a@B*bTZN@"?AC  0(_@XQP4 (Y%` |@ @Рb(}R XNa7A _ |~ m u0p /k`E)@S/\ A8Awx\Bf@ @V+@DӴE\ @aP@I I@P  ,$"XO1\1D2@i3XZH0yY2!ax| @.h!q6*۔ Ž $b1@gs ⁾Z-m>ak+ P(860$$  0,`C̠@  Ѓ"h 4 `_ eNޟ@e$%޼!ZH8H`dp;AQ`Ch604xJM- x n0  JRri@4Q ˠmP"!8" 3uZ_k8.H(P>XVX8a&*h8Ap51& ăOY@I  /  (Hyti qqSԠ!r`l%T S .`H4"xFh@O2O\.00 4 "<0Y@9r2k)$s oxzF`4@x`78Pt !@GX1`@`V@*H7mbNcdk!Y(x'1&L`aD@WՅp08d Z`@MQ`L,x@ E1 W0@`@vc qg! ` K Py>y"  n @n6%`L @`jH 0ȐX2O:A_CyX,{)?i0G@ 4 P9*(Ij/ i0 ` I€@`0n{S j# hKHT*d')? 8B-@AT(G2C ! 3 MM * '18$`   j*,]8x`ªT]j@9}xe]`.l`Uh{%.zT,8 e(1BB I pcA+ؠEGY!T8 {wH#M`0I(0y*XЅ[@C@QGzȒ`B/#as @B % plk 5(@ srO *77oXP4 ,d d L m D/ՀHR "t!8k@C3 ހ/Pzh4N `X ̠a =yR8jIC 7b(d`)\W^H@Td @3Ʊ<Ũ @բ%>$A["y}̀#@84H AvH2 2`bV4ځ۬@Na#@й`K ,0D()?oP,$, ( 7jp ( Z@!`/z`a༔ў `@]`1Jk nXdrXLV)` 6T VBWD((uW( X@0 @bBnP0mU [xp**uOI(N T' KK \n@wKc/ 'RBG㔄tkd AW9'LMXB D$H@4$)D"D d@VF v(#\TI G54$RHP`76 pRRA?xE @ \X@EN~NYn`z P>:Th @ʆ3/bPdzA[r`E\  @;Ala KQ6Rf)(p7h& x($"J m"JQ4PH0E( A!4ݚ(2 2`a Pb,PHLX \?" $5P `'^٠ctn9?ڠ9?h>YkPL]) @L.cJY0  A;"2DT5@ bT*OmT  ,,ؠ . !n; 0nԠjC@D(u#Ό!@VV;,pNc|@@ <*!|P0;L4 aT(02L8#0f5 =AP4 ( K4BLوxX$`f *ʸ+,*TPuA=#ax5ºs0!rh-̫/XC$ >I ht@ymD DR[7L@2M@xLD(?fJ2 (\ LN%/A,@H8;" 9@_ Z D~PG)D ôQ)A3` @p$? h ! "/l EԠV<.QC p _ !& ?bPBh 0@Y JP@"E#H 5C g01E!ıA e  @P6  a  <@2` IJa!QA:_ Y_ÔWN:ہťgplPO@#jA0a8X`Qz ;N]f@P@ N0d" @rD# bR@   E!S ,0iBY'4!?b4>7M( )OPAP#D ir R (`"\`x6B@Ab\'B`N K` e\ jl PȬA(2 I T0@@ B(! [¤ $F$%`D M(Ha}@@ T  A)L `g@ `D& y  Spg*a d#`1w_(;h)A_lKC  %XDe/s8{PD)\XCB(`(` EUSᮈ%4 L$ e<(B/HPElBt BQ6)@!0[PYL@̒(t 4(XʰeH $PHPl @U o b0, 0 f0``ha @Ѱ( ʣ)5d: VPP0T90m Ơ J !@Р ",8LP1@ `E  j`SAfR`ʂ@@Ê9X8M0*`NeD01"CS @`!v &h@@ᐤj 1JB̃〢CZYt'T9Q)1R4I)h)q L e@@&B!XNA2" d +4? Bp4P@(0VH,3 | B@PB(1ic@%D'BLhy4w,oAIxG`80!X`WPhD/XMSB+v*ïCaРap D5}90z`, )Xx PTAȫ3%C?S׉L(! T! p`*JlMɤ  *3R DTxys @x'@t(`t \8&ISM0(  a*5'2dlC2V@m8ft(:0K@$,,C-/?F \A50*  RV@P431@ Z* (NAQUs:@8`@@(ZN/X(d" (r$~`Пa)k!.4 @H \ %DjB6f@XhPn@ ӵ dYg6P L i3fRfn0 S, HEf/)2J/ Y3᲏ŮRhf$YSP0! (PL (@`{0WؼJ1@A` ꁥw " S* }P6e H(3(冔X` d`V)ЈJ]d2)"cY2 1r6pd 3u~,?iLޜpgl-e*́ fɐ1j@ N 8+”!EKKi dL) ,㕅ϥ@Ea³gRjp]vL!MRx< <, a "<@  SXBK&PeAS p1%RPkJAρO uG@<1dR5HB1`.s**V? 2 4CUH$&*eM/&XocTBVc/>P6AP6fA8I? r#Yx2ۀՠ T1*Cf=(" ~%pA};Rf0~ ~0?8qAL@ @ @-hiP"T ? LaAah('Np! B 0@)<THZT C7t` RC6 D #kAb@~H€0F@JA?@[PY#J@<Π (0 0 6r ;  UM0RA"6,&*Xqq@ e@7@@t * pH Bp,Q6 !H4"$L1\P`\,,.8@pL$$ J BP^ Dr *D;( j4Lg_ 4BdX!㘢L411aD@:e@f, hPd8@FIBh Y 0@bT,@@"fBVo, R "0Ah9A;| "~'a!c J" k9 |Ǚxl(x m` 3ILGУl+bb H $>jS@C' !A`dV! 0S0  K@όp*:xPUn115 03`$TZ5R 0D r2n6b j , :h05=?d @ @S!+0 `` P  `P#*ځa4 iZB?QH%̀h @ -{@ p@^d*A/!P`Rd81́i'aDфX<0 e"d8;@H 3MX$U#&p!K A4@@ED@LFh,-"W@BLp xi+6 2 Ёsm @j3kT! )XOXN6! /fNWHHʖԪ,P9 x &)1\AȪ@@(c5<T(CX/!d UXR LA8 @ FZ <4!qv@9xd"Rx FMɾI\@@F ,ABq = RP]Pp49`dd/P9pQ)SQ g`YLA2 a\ @I P\@RK؅(@``(5h $IU1䰰+AH ٠TTHQ.`yI~u/ d"T(D''ej T7Ѐ< By zj,S n@0JqCy` :3X\8Xpv  Xڦd8@L kTP`pӤ` 1.wzAP %xm4` u9  ؀ =T"G$(IyҤB"=$xTdpDzH( 83_(J3I@ӀUQ +\+0|& n~@r!u[MHwxI8"G?Px1U!@摓 @1I7p,0( 4ABma T  )s0!"P H X "%BPM'a("0 $k"P0&RȬ!$ `Dh:b!&2A$0A2r ʂFd$ f|Ѡf@̡`Ad@" A]`h\R?\ޒ2$@̤L;DF! iѹi1 `R0_6 v Ȕ Q>a5èP$Oa@T ltP7&dxz@:`a& x*V63;a )A Pyn H( &$!P5K 0A3U I |FiL,lq^":E` ' *@0y aI |&_I `T3&8Z& LB/}H | f_ @6I (x-QԍL"'aw<,H0kdH`h(&$E@$AhhV!ojzeJFY@.Ԁ Tuaԁ:x<4ge@HH䅂ذ`BCd0dpRjf`dSsAĬĆ!LB{ RC()Đ}6@0g2Fnc8| D@P-CZ f{ @8  *X /l#8lA+uʞJ 8e 7AfQ@1a0*,(dsPX@rTA !_P 3BrJ gLc & Kq3B:@},wP eQ@しD@ H EP` € q+GX@ `4@ l`ZhRB*  i9-p9zd}$0a8' 3A+J@ρ$@TQDG;{@D$ `8K IXa @:H\, `)Bi " L&PL߭PI"vEP2 jb ;b0HPD jH}ha2O  `j(Ci}Pえ@|U AP0Eh(& ڈA6 c+J3Ū84mup`jcr$$?C`bd z4 @U I Ɏ'HIN8 I^ "x05^xa=G|*Ac偿R@ @~a9wu`0 p?D<б(|Ieő {:(tAdC0@8>Ŷ^5AB\`@H@d1 < dr b  kIZJ!lV `1!`,"`@qJ`83+ K)qZh@Q~e d(@( 0~E@XXP ^ @@!mYP`o, `@*k@'( C@ x`8 *U=^@ډ0_,`LIp`d) fYN84SI@p o  IRe`  k2> sQW9 ; W逬CrrR@VG#it2<@pm%: im(LD n eA"@mf PSl LJmfP01,48Bv/ U@)H0bn$G0tL @к f@D̠`@3Gez 78'(! K!Qh7 U$R` a lz/Lv!!ypXf |`=F4 xTABHAx HhM) H@B.`$Ral11$PRXjVV}@dJY`( @#FB~~P3]$@0@@$Y @ $Z适Wa Kb9QF܈ q !Ҁh1 c4"CARM02y8@b*O}Ҡ1@+@n4L茁6dT)dfHb Bt EC9F@DMA ݧhS0d ,а8 ^e&`hΥ*O@֙AWqKaAVځ>Ht #舀M%MTIT L+q >Sh b @@A/bY쀄Uy} 0 A\CO>Lph%ǁohBp@\3Y1OƼpUS"րnzrTR@@K$>P,@> 4`c(`ø b %D(&Vry #`^f3'2 L`$@@<6`2l@K@Q v@5&88d$Ge\2'J "/HĘdHP$@A ` z`V;'#o_ T ?A}Z&]"@y40AA@`Eٽ € D @@P$8a9]Al@ڥ]Jk7b`ANMہ ђh8GK X.! 5@ c0U & h PdN"DJP"TBD@I% y#/ JH&% .c`N` %5,FL2MA4{ }A`- ~ @8 i l-g^q< H,,4D}RH / P7(x 2'.^k\R`5⃰`o`P> ς(k@/D q k(a 1:A3-IH"@w¬Aa d6@P)0.3Pi),0I@ 쁌rp^2+ 1yJq.=Q0t@ + p%82Y@Ѐ5Iβ8$h$7``;vf7`=h! Z8*ʹP+bWA> O;LAd[Bf_BVD ' 2H$, fA &;0"f$ &*PmL@AAud}QKAdP A @A952s/%+?D$+`A  3(<3>QUt„1G\OA fdDpI@2i$ zh ! ?oD9tX @ eAx=a@Ѡ B" -G0DZh̐B 8Aҁ@gBy0G!-mjM\y.\ i)͋Pd H>Bpeb/e8W 8a4%] 0 a?LJ 09  4H5q@\U#ee !@Hh@Pd8pq,*P+ACC>%AV ̗]r +Bp@> >> Zׄ ,U_ hR~`i.xA07J:Se +: r2.{ѮR^e/N ϥ@( :DR @HL@y~7'~18ٴA˶@\WU sT@rD@(iD 5@(a`D @oa``S L`n ]V @P ҁ B@`jtʙQm*J<@ \r;)P PV45tk$NJL<È ;=A@4@9d`Q8cS@BS`HF"hn@ʢ& ; #$b4NhH$E /5|"\=E`B@8Ou8|D&_hHnuhЃ) e呡a2)%rAH0ͨDY`;D98Y ?@ )Q  n`LhyHAJ`j?2 aa 'D5阂ѬAC$$2PQD_\\>c$}, 8? L)ijH@,A5uJ@6y Б} j)Q7ag ؖ't;! I:#'$Z| A B ` IkqU"lXXH@tTHDNkop3 '@Ԑ5)y8C ˜d`I 9Z I:'D#@ K$^BB}v~|QEkH0.;CD@"$rQ2"$@2B@ @x0x!= s=!i((5p8 0L tLɑ`3a&10e49.DK(D "w@"AɉPd /` H~ PE  7,@GPÈEAxHPL;j BXOR0:5:Lt f |ݑ3+!a L^F Ť¡yP(pB djہ HxB`Y*aLwԠZ*-TJK4J AH ,AU B~/$0 a V [hXA8ABnNns W?h **feq* nhxAENf G6́)8fbA@>+ࠦ|ÈpD00>#ĈLKٞP?@8?5T*9 } Bp6 RGPÀ@А \5F^Aes"R4   :;#Pp `BD]DJHdT pL  :ʉxzAHdxr Ce*&`B@,J7d@/T!&1rM"KD充 `АA$$%@;P4*GY`e" y*ЀA&8;8 E`ui lixpb  ȕx}xt%*y,DJJBd Ho(~T @$ `!@08P@ J@`@IPyg[$@pԀuA :ڧa2b$e`F9k큙U9 @ @(7!TT<<pd8Vp @`+BWD mH !A RU)^ !2 2T0S"4V,E#2 h<c a A<,R CE*(!E%J!z@ pd$AD *G+҆>HTl3:zP `vI`dK X2"`p6H`%AֈDqCcu(  @U@X09 hE3 X c@ODV ABO<5@axxL@ xc p)2 c``ch$"HTP`DŽ  ڔ6,#2M:SC>0A!NS(}00*HRR19\P8+h30H@Pe 0P5 D $C!o0 `h4L23 ,!30p e$ @x PҁZ,  ,@ FU"`s!`qB <,J`AA`t6`j](h= ңM RӠ0+,PR@KZ]J s  [*BBT zL1$@h(̎t%@,ZA` H8FV@ gM > $(0 P  = E' N+ &%**}0!R=/]I5D` H` P>$ 1A@`@<`604E&|d i @ҊH b\L+"@@TzpȠ T2  E>n ~C `lI 0n ( Pc2 ~ gA'|(T$l= >4 n`P)&G3T $+,,@@$ lpct q0+$ ^ 350, u D!6  `o HP A\I %"4$R y8 /A`sCaA3tTskP.:||& sgX4_V>6 `m Ġ{|DR2!aJD&H$bL@Pf ʨA  T4"yOHeB(O|B~6, \,14sBҀ0@ @cp#%@ 3e0D8P)!lrJJ D^+$JX[1M> ` @p$ //  YbX ÙCY 2UE0Rԇُ`97M, A?2"N>ٔUT @T@@@Dg24൥@GA@(p (6"!P7r@Āa.̀Px D c@L`eL(0ٲA08XA0([0([D |%>``~)X Ea!@`:'j̀Dt 0 ,(F`M xGޠ+hڠq&|aB h0OpA<#, `j@GD5H04fpLJz`@(K>R:H0A ;CQ$nimA5P `bmRI=N'2Aȏ24% @"Z5w$%BB$ ( B^Rp .tBDPu-í@| 褁̸I`V3BVn f2$*FA : $4%Det~exP' ;( I S<]@͌? ;Eq[ Q(? H G2as3 ;8hљ # @IL ( Q;qB[L kd0KZ\@A@@@D 惼C$4#Y t  mN(=+"f8:CW @402 H@@a0^3 zrm@Y:("v@ (/$+ v L'Mpe96 @&0a@2Pa0@N `P0h ,f H8| P@0$*. NTPj5@ i``,O@ @UYxan@9 P `F ch?V8  y`e@O` @@ݺ sXA= a/    @t%` % iX(P(@``TyXY=C4/J@Y'BA`x{ST 8@h@\! }àQ&@ @@˥P7040#0600503070){ @R/<$` ^ Pzn`gH?!$*`'QBGn.N PaߐFe S` ,$Ir9@$ ۙ@% -@10g.`0"AppH/jo`6fL ~W `!?099xN 8 *7C/ /05+j /1B Q Ҁ!R*80M=(ЩYA0P$ ] ɸ?6 0%(s=-Cp241s]RP8$Wha ȞS@ظL>^aAl\p J2 `HA`P77H:aM AcPYBh#5h 2`# Ѐ a&c*$lf\"@4bFaB$HfhZqAf`0HH D S$'O9h.X$ ŔyA;k@VD@p0L  0АbBrvnMfvf !d, kpϪR@Q008Xh~.f1/OP3%J aDD _;e78p31<3~sP5.sP4`0J0(P`(0 6%mKJdal=U !&J $Y)@;2P g(#@JA"P=1.pHP8 8$4BDL/ `4fOW0^, P @`*-ry@Yb @ r@r ޸`i IB#H FQ@‡  @9=dP x>@ APB?@RV`B5 ڒo NjTH0 B.@`jLZ @0&i y8"AF@%'(Hz5 d&!g a .A0Q@ @ m`5F3`"CJXJ$T\I`JDJB""äP-h° &[AV@PS as" xA~!n$@ sOx|*BT 42@""AK+!; H00000000N_\*I& B_ L,l\ A '@ sCP6`52eHCRqSjB DW9 6X Y! p@a`38/A@ }P: @Âq@ӵ((@`j 4R/tVh15<$"5c`07?bC"i+@ "rn;I_D/ &Y*%H@@LI:uup>2X$WjH\K`/SI=@'g@Π " FR84O~@d@@ :ˈҀ /E_6@ 4p @a,8-T "H4[&*dԀN %>@oqL, xL4 2@a6.@ }<}v m# l$(,0<3 @  9R R A1E,D KKA^d G )@vB΀Ak`C_>H4 e! @8 < @@ya!hBfGE4 p`? `@`AaK L?,L |}e w"H0  % R1 |` !˜aa]c @" `0>@r:Xg Á2f02hp* `dxG@UA@U`j 2@b@A`! Qtag*& F`ml{&T pJqLРm!oSrf i 4^)`p@@J  \  nq `} aTL0x#+" \ 1O50& `($ v M  Th ( ĄPj\ RjHo4Ho0$0 @0I!w+ Pr8| ^,@ "@@B t !!A@IA`a4%k3^ %ˀár/:O5=H7 e@ļ(Q\p ų ̊@@;8D59| A|_a|4:@Ary ¢{Yz{zG >1P8\PL5;t}N;Db$@ x`D ःEx@p%e1 gn hWRr"(XeH4:0@򀹈 9U.% ka2Dޙ8d ĉY0[CB AU`/u;0"0@ceAAqSI IJ8??p!8* |ʻ@ݠ d2(a@A tZa^ S p Sڼ,X @'wp1c(@053AF@@`h&4 Ь4r%΅ @S dgW dgC(, 5 RDXiAAAdp3I8F" g%G3j,5R)UQAcG]` L @Ёp12CC!+$6؁O #P#4d eUTS*4 4 <y y\ My`H8jCYTP +6!ш ,`A(#F aA7 | t| j;,b{FPQ(#l B !JWj TG}y240b2 @[oS\ (2XO>[@D!XꁝAɘ0R z@@@d Bo }nl "r$:/ @QraHD'D v(Vb9+id@6mTȨd3p]` @Pjf" P6* lp )3BR#ീBL:X8PàP+7ff(8@Hј'q`p#AL$BZ  /L.&E @ S \ @ O :@B@5T x0\* 5 ( AB @CHPxA@!daX @GA{ b l%D$21!@B?ޠ!6 nZDN@,pPCp-^@@> U!Pt `6XQۈB7XXP8Hz _/H 97J@U` 4@ހ|!>`;t@! FPhFJ2"  >`Uas8+ s f@0fJ߃@b 6uQb@fcFq`Ģ(2#6 <$$ PkT@`;k Fa@#c   u 4AP B "8P3nr`A T*MB ` 0>Q"4d _0+@ v^i0-@R, ~@~b99xtJTaKYc@Հ4](r, ՁА ph@$,$ 69) 0e `@ 2 0 #Jl0 @<@jE! 5+| ǀ ao!T@N@"!l 7p!00!T(0*2 $ bNAh*JJA!aD+0h`4 *m9Q}`NJ A=RF' 9Waʘ:丠d !z0fAS(@rpZ\* "dQLH m Jh(X4;y\P* r|`sԀ @!zDD rVD&q*sJft'a"ЈvC?"fY SDuΑ8DP 計0,P `p`tŌIA,)"n#5(,2OkH{ „A%qE(td8 B‚䀼D"3'"9a0l<]5(& K  A @%x @@Ҁ  @Րf 5 l@J( 0AXSOi;F`RgP4J@ @"lVƌ0T`Fa>@@BR "! @`JWmPp $ 0 !F8 rnn0tT>J X0@w + @+s)`l72s u8@)FS@7=ZfTa:G @@5w 1 9jF$\W2}Ì @(0E24[1SB`~Z%=j@ @k"Wba`k 022lYr@m@@߀skBBaTѱH(b@i@2J X r%? qx*4HPD)@69(0`^^eႋ 2@τvBH@ { x)sAGH9p4) p@(P2 bL .m0xn $H X3sp3Rm 0<`^`XG Zu @%0p=T!"&uS&ù0mU%fL@%)hrl (_>X X9̪md QL%^ՠf$2@ I b ~)xj|Dꂗ$";!!a" 4a0 d!s`6Q:P8#9ȅ} pāZLCZ @Eh1 ( 9N9  @3a4bU|10*UthKaܠ 2 5< 1 T" I@)V < /^bCN=B8Q԰u(LB*v@z"3`CsR05=ZHu"܃Sx =-=TL P"(+2p>.d y"b@6@HKH[XW/ E pt.`nMDF  ""c!s0)F 3w2L 0Bh^A`#0a>8- 0p0K BkAx(׋ ;" hU` ehHCpX ;Ē\ BhY0R n0A\X ,$iHk Vi3`Ԡb[xH` ir~`7wX>A v0(/`;$^C0Бr_f9^aSB}p6RH%! 9p3v (    km!H`)4#h:AfP@V9N08+| `#̞]N p% uI)4<,f%D5~OG@B>]–ApsP+p:SxA(! a(.6): <(~$ą* oP @0 ܼah*E,@"U_`P< a./ 0~BW8?p7 b@@lA8*@B E!` ERAJ1A@ k@ES8(oRx6ap=J:!" ` (,M~@CIO`RV#e%uP1 (~D6 8"gi L0.P'D( 8-L J$ n@6)d81t&6܊IN(($bJA6DXÐZ(p | p s'p:?~ ^fĭ@MY. $DzYq@0% A@!ŽTA8]b|(*P"J ( J PC`!H t; @VC%!e.k)$|6@`!@AQ`P l @z.`FɆHsb B- 5srB0=$ 00p v&Fb͞Ƅн<LMYNPq @2 }0a Ar  =4@@dSF(l ;ƝAiB@\PiAE TLr>@R.`4 0L h@@ @ZpFB<` `]@ J` AKߒH P *H8%UPP:0.з d dIB/f Bpu{I& ¹dr0AnP1@֥ A4`c   k  n M%`i*P4 3*Q3TB{0SD0j BÕŬ^yEJL@b p @$I{)s;u,:(~0Hrr: 0T KE@H0H8?)~jrt)PU F8rА%H>\j)@èEG @ׅ$f\0tb̘Tq-> L$ @\VAFi~bheI˔Ԑ k ZUc & bLQk&f1$K "卼"˥ f%0@P0`WKhP~ !0h3@]H@ N0gTi @6$LH*e)0]' KQe!2H$ '*=F^B#@:)x=T-! b#i!n yq$$%(@ n%[h(! @ ȃGcf` B`XEp (`6F  ._|H&@6 07h&L8 D 0BTC!bt<$T0*8.e@`  ? [ i:NJD$ Z(ג?ˁ,>9TI#  ÿ:( OQXO <~ ~ Ε" Ha셁'| (3n  PÒF @H\ %"6hBI+Tc >J(CƮ,.*߈\$DG` &bDA' ,RV"}qBȝii0x@"U!y'Hj2$P`HEru%! 700 `"C@rS@H2\#*[DPd)Z7BvF$S4"JfFB %CPTB>%TQ0J` "Xe$`Db@oZLЦӕ  > ب 1A2A8Pd&R

A0AȈ2 *PpdPGD^E n(H@H"D5P 0p ЅEA3>cGD* G2O#ez J/Kr☠ixJ@%"izvĨ CbIzJ  @6($Cx 8x@p4F >!Gc @BCAc!!!x"TOڇ" F!nad6FDfߖ*'C`L}2x|)l*"!dF %@L#͂գE12(XƋ , DLEO ԈALb9Ǵ` <\(6}aDKB@B1 B08X8X($"(Irya! ` B2 x,P1pC=h S.@ 14p KD$ ɍXOjT  p#@@TXX@2"2 "(ddtƒ#a9⃀TGJ` W wPZ !.@@?'+1 T`(DK e01 Ќ/7!C Za X];=)8! r@m:$"Ot #X<3+E: /fI @+, }|(@J4v-YI"( EBڏ ! X$frHExF @SD,Ș0 vHMѧ)2BlEdHЈIq`@9AEрa 1(C!d2"xRЅ0!rpRG@A@[3ayB 1a"bP%$lƄ  Z$ L!(00cP00`php$ P`ap`AG a T¡T@'`.p 4 0P A 6@A qHLD fhK&\ 0  3@`(@a PDeTT KeČ@ (% 1ArPc ($ HK $(A@0O3@aW(/Y3hPd V@ c@d QV h0А'L3? 4" &@(nB@08$C,(6 qh ̑apFx`H'`ŠubТ!WRAUlɂ&ُ>Drx;%| 'F)ăBHE0 a dA$Z H@RPE!D(@*g+ |,f0 1& @DaR X; פRA`R: pd (EK Bpq2h@Xpa; t`a &쀥D~t$ ΀jЧ蠀PzȠ/^by$0ycRߜ@$T˂3tHk:b:86 @h& [9x#1(WC$R m@] f)% !Aw`@ԐBH;$L@@Pv0(XEB?X\?2 - ~8`Ѧd!p ә@bE b&0S '0@tP](Ԡ9O8%̀I%D!$   0t   p  <_@[#/bg<8> vDApD T @  @  A(8H1.j@iT "{H3@a8X6 b\Yb493X CVQ**)S T)D  @ژ"8Qi&T FF`gAA:@ 0}') \%-@h>AZ. 'P's"lyPa@$ah@ !(sw*8^ G&FخA <Xc @22'.p2e8H6f(()q4h5"#d#g8 0u œk "AR`S&d5FB{9HNM#htbq@21[$ѰLh&J`ib\T @(Ph5``P!.Ho`H@`nHp``.)( Ъ  虈 B@`P@4 3 :0(jA Eo  BH ^ `A`R ((@1L%,K`z&Kp˅X -,E00NhKNa']CK T) E1@`vʘl*+l R` 0#XHD@i6 *%PBX@0v6PlC sVe? Pmf`4M`Z @ @VzDćI( ͊2   @b(Yp~ @@Hc$ B&(;wo 4;.@#n1n p.j Q*!\o EHD1.\/, Q$A ( ԕb ~p$2ـ sٜ" ' AH(5WhH pĀ v S!@O|ij-` ̄1p(^x Vh46"wT4_,t! PA88(UFVxv9i %p1 aPsxff@y#Gn'Y8h֚ R$@+/ bۀP b~-}b`* sG9' 0a q 16@XpI(!!`=Q20 a!q8QkHq n(s5ҁƃ“ fAC  ~^ؼk6R(U܂P9gՎ.TT`gU@Ȋ u^5BF  Bt@B @b[0`dI1bF ;@!&r(C2)z@+Ptаv0jsF"`¯7JBL( 2l\ts3{DX3 Hn߀~8:iZ  a` 7AEy,dN X)* sAt39* H%>+ {ЊR>Tz=zs%0:0p|0As$0+ 0qvɳ?8@ccy0,!zEs/1(aYnllYcv#K\T|pdc201M  q9r8J4*X x JUs/8RP9Mܮ UnW%~ZY*B !(HY"_ Ry IY` b{N`F08R8;Ddc F% j!Apa@@m  p ˰F!r8 #fC. A^L b0/N*`k Qy8N@@ (BM6p>Kゃ !!*`r4p,J0P?r 01  y\"$9(Xp@,$L @@8+Tʢxf8 + r.bF@ @ddpؠ sH0#80dH 2” bRbvR` :$IKB5A^t! h`::}  %aeO 4Z s%( VC38> 01_t/\Ɉ -40P3@H)DP M.V 1)eknYV`c _UX` (#_\Tvh5;DÀ ʹt'&gՎ 2'`ue.f0p!$ lÞJ<+@ÃAPg(&#FE"4B@. @`)4@fp $<hHEdP$PfBR>4P*`!JP`9!"CB B!&-o0` /_5CvvtB@(   @ - p*D^aAP20L0 AX@H`( `< HP|0 P: A @Tpg\4nݎ3eyepW@XP8XNRYAIRP`P$"/(Xb2*%p;*XBʒ$$D5$) -嘎J<2 \!@Vx8 * HH aM` ;@@hN6Q<r582E(#*D@RُlI @ L0`B rP0!o @#@|@J)Ux@"fP7xPkAABp3D AdRC HT +{~Jb=a2Z^L[b]MLADL¸<:C@ n; @$ @ X?6 ce9@ !`B@  ,Kdq@c%@ F) j (" & Umh;'f? `nƟH} 0e%0̀,@ ` dg@(0@àA!@],4$ AP?@&T @хcIB04A0Dz Ȓ>`+ /b&4/,)wfLT,@-: Ih h"HѮcLT~!z%pA?%A=# |}Cs0'R =B.Ȣ^BrΠаFh`p0=' }+D!s@  ,* d ʞH   `8/0"_l*x  Cԃ׉'B a.p K$ ` l0`PSrhy@@P` hdO(| (*:HHC, J'bl"c 4\`ui gsp2P $\@!}r݀PΉ!DL@2$L6Ch!*ӂp"  | ),0ppFค 1A^!<)hBʂ 8R̩#ɠ@ -@0IAN (6cBD-C>'A&F@L1(08 48pP(0h0h80HP4  2gT7s@ < H@ p@8   a $ @`0 @` (@4  ߀* À8@  @  `@  Z@`0 R@V@` p$&@P("@h (D j $h0@j B 87(P7m?@t  08P4@op hWl@(0j("QbB(/Ax?FP (h a@JNMN\Z]*Wo`p)3啫흻q ? =|~{x|zz~G~`w ( P2.@ Ud >! n uW@@-  8$0L!'@\@H  \Q + oT_?PڧFj gTOP!0?@6iub(+Pl6R_ AG4,%2`o1'K8='(R" l `Ec pS 88]q~PpA| L8#SfqɠP( q*Ә' 4 nQ'`@  `( &AB|AA$ P ? @ \49p0%pIAc"fr1t2uÕ' eT8 J 0 @ @@ϐ 13@ !1F %!,;B PVieD@ bT\ 0  D :P8s@)30 x@ dBBcfXHyxq @ O0m jH\߈pHL\ B?BXp5N b5  @A,Ƀ  <ԨXf C&+ PTTI*RJc0 LB`@  ","!a!!@ | 4@`( '|@D%!P@_RXX ρ>|&|QJea,P0'd [C/bH8 }@0@F7¸h%.ex(@[@0lk#D9EFt>)q @Ч0P A@r1._ "ED!8 HL (AK((|6iAgR H `d p2N:>0%$G$Ȥ c %_!6!Da|D$lR!Y3pG2",ۊ3?֤xmFЍ%aa<`t XDJ(\@H *O^P@0* !2J ]yC -4V$Ex~?yܐ5pF8@= m@P *  @yEB aw AQd ܤ W@H:$> .f`i S0% U4Nj h8 @#9Y & I' < 6A0[A A`'@  `hP`%D8ADDD o !xS6PcqPNJ4e`61hC(0QR!@A%TTVP<pk501t(]!E5#\"oB+=)J*O,N)m NJk?* P,t 2l )+x$a 78Q 8\)s34; @=" |hJ<0 PTHPap x8Rp q$IAÜH  S*ʐQ(x}Bd/c Y`@%Cf`Ql[7  J8068?D0P L 5g DH!&#p4ht`"<:4"1q wVVRdN @@AA BH  $J`H$Hƅiѐ(HQIA)((@l6fi` `A6@4V`FE T.p"tcB\Bi@B$!H| S>0 !6A@@Pdg 1C_J JI`tb@A4P 44B'pD%@X I AΤ a@C8À*YWF B&CMbKRo3w" b<"6 @2A0. ̲0eA8O*R<"b CI PYT* @A ei)QJn~o x 84 iE ItA  )D YAQ6PTtx`&%@>Ahz%DFlqV(Ё.@!Bž jA ̊,_6\eQ`bEV b#8% &|"B<@l!)`q10a`rIjHjQB  p ʁq߅@'( d d* 4l0(Fr/^A @+_U K$X ,g”X`S @(oI{A7eHL@NgWP0(0=6F D@@P b\[p| @ ~<0PJ^P@" SR@8 0 t AB!NA`)iR|lL9|  P(_ @bDTҋw@)#] $^C ! 8,(HF, AbF ԢgB%@`j@D1H#xo  1@ ,`Z' &gG`9^P5uM'`4@  E%hH.(B@'X&`F*NAqBj q@ " FL0 *-G1 8O7`0x"x Ь*l0+`6. l[26P0W0\ )0ʀiD@>' "Ā. D'.oF% AH 7  a 8h1$8  (f\eGK+ BQY づLY`` BF`jXPX bAH\D-|H[ B !@ R. P[AXf x3$!@ $d,BU?05 G4+*h`[.2` V P5J)O@ET!!dN}1f :9s$@up6A` +H$d} @i LK [P,(84DF@ ]@@-@ӂ11*  00,0. O#00zJ %DHXk& UbGT@ ' ; `L6J 0ԁ(*f"/P4&@ :hb g3j n BhPBf(XO(p Ԃh ai0nQ0d8` D*&, qd ̇4PF ph0@ _`R`#H"A|gd0 )+uS6 2`l0 1`x`B-@ @CL d+y(DCaYM D2XBD4AD1@ b @_HAp ! H ÃU02`:VQNIBYTJ zq^b \؄d4.*8R&bۥ,,ibXi(h -CjHI*R!P")E+4\Yv4pl@8D@P$@Q a d0\l ld@#ʂǒaD B< aH?D@A7@dR !(, f"] A4RE @P1JD&0* 8 p A!A @W sBN $$$jDy &'a bTh`UES>>!Ѡ;@ 1! AR  2\$%( [2'#` PT"q$3rT@4RJ  *H <(  h 0M Q3D |Z2UFb900#DqP`zNa@8(Al1>S/5O`I)DP@ ƈ7A*AP2@ HD 4 2c*0D*H9 !- C $!98Rb0k $dA` qA40(60$wa hA %'4J    ȚrEpL`bxI1d`1!Cg!% 898R 8C@#/wU  O9$ P`ap`A쁉9@h!Ml 0f?c g 0CPv`Q- 8R@85Pfn A(\88(X< (0>p0< Yf9n`(@`c ~0 pv`w/04PdiP6*yk0Px9P-H0LPr@{[ ov`F  g x |À 8(01> (p<{Pc!9 fPhaCAټ8GR3:h(08~(K28P|@AAg@ V DnA(8 CAS 耽fPH~P hxCy$p( 9H!58p!2 pK >< ((e7B0 /@@ǀaS@C(bG"ip#B`g= h  H(p;$[EJD4 D=C@ @>>0@ >=D`@2;h0 ( 0`hPD@B""`z"&P*h(D@U gV O(4~P@| D @@  V  0Ph$!ɀ .00(a  .4 >@< TUt+xy4L`4Phb22PdTPpPP|G<2"@#9@ YS! @<>.4 #*) p>`w&[*!`P ` @(@B G@-8L@@(!Gh" )D,.U@P%hL@T p10`y@(`'TQD*(` A P`$&zf  ">"$R}P})P,xTAP+P e*=( f8( @@ 0X RP *BDP $ Kܐ*X`N NDA @(p2P,0(00p9-T<S(P> |A0@@@XSg* < Ȉ ,  ` A0_v OTPel۟ > @@0x`ⴁx0xa! 0 00 bS NŒ(p4M$(hW |8`!  =` Q@(RHWp{(p0` ၂# L'_ ( 4;9?`4@B@(8EpC!pE.p Q@ G8 '2  p; <p1! t~B'   ;@)_7  `*B@)8!RhXH;x]{ge+٠AAP c (=P( H~0C&7pG@8x( (4LP xXhPh)PtQ A{ ! 2 ƀ[8aF$?u  C (H1` @,^CB0p Ws`(w(p>% `@8hACp(!P  sB@,pPH񀄀P<H?0$\B@. Ip p?p?pߺy~_?ذx4k@ ~g@ h@ (h@ w$:& (""j8P6 p0(h@E D9GP3 DP=8 U0> OP0@b"'  @5 E00 AP0 A(CDP3 9P5h EP?0 P7 <P4H 9P00@fdA\@+;:9 9pPupw# @X!2 <(  h 0M Q3D |Z2UFb900#DqP`zNa@8(Al1>S/5O`I)DP@ ƈ7A*AP2@ HD 4 2c*0D*H9 !- C $!98Rb0k $dA` qA40(60$wa hA %'4J    ȚrEpL`bxI1d`1!Cg!% 898R 8C@#/wU  O9$ P`ap`A@9 h@. >4.`sHEpI&<rdCA><"QN J"J$I&JSj K"Ja$H*L&J k -"JJg$ёBJAg<f ``&J/k +k+k  -"- Ҁ+A -Ҁ+A$LLxN$`* fare6rvfadeNrBDaf6DrfaLQQ`8rx`ra@<m<gra062< ` 2< BTB6aSJ QmNu DNuSABBf DQNuX*3D H0!p?PiX Ē([KS'5F:#O1'C;c{KgK{;S }y0X qa#xC 0 p+P/X%X0E=` rt#Jo1< {G9 q!aUVgfwt ;0;0 `|I$«0!6G`U*b a? tP*0b,E&cȠ@Ix@- lH` PG^:K p]@;G0S X\ü0  R$ #D腉Cl\`j8x"`wC$I@ pK3$GF(ȫpd „0@@j@H^P! h8{BC J!hʡ\Kښ@@ eM`"P%$p@PR*x$$d:M '8! I:IbAC$@5]X![@'őI- :P<@H4bD+tA?GF9!BU-8A :  <f`+?~H@+@%)wD b 1LB  YA $5 KBR+#.& dH`Y0 ,VAp>h0P j(p0l$Hp  `f-!F ` @tL1@Z@P!@@@F`0R#t] ~A| !w4ԒI,Dm A@SФl"`@[=t@⢂Ak@)3Ap4Äi@@ f (%pG@DQP$2@H$ 8Aw#34beFYZ030R` >¨ @EP  k5[0@sSw<7SjO` bK$#NM 4BDeD!%܀ Ʌҋ\ a"D)/`K) %@H TcE)"_{,>@bBA C@w@a*dL'cÙ88A&th0(;:~`qRJP`b P/ bd'E\ܛec34AX&@*́!Cj P$P``Bx+bR`80 pfPO0AJN&ȐPP#+!r (!B><<*-PD=~X; @"@@@AP0 T4ȱg.pE IDmz@5)`$ $2ЀTy*&9l;VV Wɧes/ؖ8Aˉ;ʈ$ 0@a  zLB@BC5mADrBDb!ȁH ľC04A0òC%/C /1%O,NNG^*D`Y-;D *ЀzI0s8z.9Wpx址p @TA/` (h&F\P $P0$(W@Y``(`PF p AJ*@_83.Cu3B?p 6e+  :Ӣ46v:@Ʌo 5:L-] ٙB@8`$@}X![{BbE.ːȊB&f6;7!B֦6.@\ʀs*̨2ʀs*̨2  )`( X ((2r2`b uN` eViĄ P ǰP7Pi,ad Q  tHƛT0A3@b@@؀'N ;b ((3v<`eEp07 ; 0ADȁ\>h,0( 0 a j 8B!kP0 ngd@NJ* , A&p~0'lHE@6&gJhE`e Ȇ8аcPln$ ddh@@΀ Aԁ"ј!8 @@ $0P-0~n@@E t @hAmr +f @ (P=O)  D<8 m4usp~l@$ VAR P,XX7 7A hy p*@ a&@`X)Govx"N{RK`0 e,@Y8A>lsazl`kBm>&@P;A21"w, F+#n+u$AZhAQB<l(#kN 4 P9,5HL5r!ɗ3$4A0&b 7Aj&_R̞k=2c0ʂ# =$0)|pޅ@C1DLfc9lX;]$G a@ ( @׊2E i(QcXF2G0+# BlH&]*ȫĈe9xuz( Πi/ \ ri1<"! ]*D  ChA/8zaFYC `ۍ$N l0$ᚦ00$ (a@8c/! ~pD .9;8@Όm'2-x52"`@M(q :!n"L.R3̔@F)ط9&@o 2j 3%hLdX٘ 0;aK$P >u  &/ЄȺ0Q"q?v9eqk>:fu8t\@@iR lD" 1$Aܲ> D[յH@hzCO˚ @Ȃ(N7ć E iĆ r_ry$8)@QWCt Ԓ@QP4 2 X@6@ӘS̖!P("d A"̰(pb4!A(R w cm gJ@`[@ JcmY :$ImD|XAȁ `rrCC40> %L~@D!`(P2@m0@T hPe eVSbL8`NLF,`Z YcpY0'H@A* ;"D,d l (` n-e@ @Dh+"X&((<׊g8M4,(F 0`*d.d1 EXD!.RJ|0uぼE^ُ(g`X  A @ bh?$  TTB!n`@+KI, @5#b e i|U}*N\hH\44"p@0@Ss cH$bBZBÙx(0D )C˘b`z)+(vEbT\1bf)I 48f4 |!-8؁.( xOBLBalmKdKh!+SKiJ"+@ed[LɈ(,p P`pb~NP_` U$S-(CҀP0F*K<<3 G^C@A偁 \rz@H'@p@X((A!h?! tqZ\! h  n)O!b8|Bfl?aRB @HBq@'`  < E(x @h 0E @p@"0 _~e/^ V ͈A( /TKf X$Jb`!2|@PH, >&@(X P9ܫ<8cݲa[ A !X&,OBpX l` Jp!a *Pa +BB,'`B & "   08|LIF< ( !ACAC D4 2"ATH2B&&&gP( Ї<  r4PaY!`iL09 !R 0$<1!Q- H`,t0O`! `!PM@`d0 "l0 ;ơp @"U C50Ux`40&2|0  @ 4`:0]8 xyET@DVvN዁c{O f& (.:Y3 SYTEUIN@A@=yQeaCS{SKPtQPЀ@`CA :Xڙ8[;8:z iRp1 iP`(pD8 @@` A~XP$,r" t gHPYRXIRX"pEd$eDXA.eye%AY:Aa!.pp lbR(d 1peC7Q/CP3 XlqO  ST7p$`d$@mP0G `P2C8@P:8]04`M01ˆ $:@T (@ @# P \`e; @ D@@ @@`@ 0@ @ pl1P(#@@ (K5 v `4 P5@id @ A  (/3j`T  ( P7m@4+P6g5P PR(1 C C T耣@40 GCC@%F'&@J.-.[_X+x8zHxt8A?NLͽϼ~ }||>~==?}#?0;K(G>W(# h9 U@& P  I -@PTPP.  / `Ax+V/TRڠNj+TR?ڠB8` ,e.R<6g @6H QSL僂cP̃&L!CC F o; e4 nQ0D@ P( &BAB8KD B=BB@6b_ZD2D(YqD:a$ 8q &IZ@:z`LX ilҀT@@(Ipv`P$ *$7C1p4>BB@`(7`Q `f (@( [ @`oXM )Qs$&Qð@4@(0;49BδrC5E , N Xc Uґƃ 100S3<0 `Z!s~!¨rr:#1p2ib(O wE`l``98 4 $"c !&  6  .  `sx"RH m`?* Q FS0eASQ?\N&DHI*aAJȄ&  q Na  x:|C r@99J b c`p8  $DȈ39`%l$pTl@_|T po t &d=F$@) q(P7 1nJV 3ցj\bE` oBJTFI8A0>0d%q0Cd0q `% [ "*F^X Z tlB+H@ @ %20@!A (D>NPe)@L9NnET"T)`=$Ip) @ ؆ k"BdA`p0|BBB $05( ,AH3i0uP:N"JB-a6SQ-1} LU+~44Xa @Oq ^>p `opxpbȉ| J\ Q=SD`F slf |8S LfNa:%NA.0P b\DB  "pA\̐A QA P!VP,2l҂ 1@Τ@@ &A@d0P8t|.` J$ 6HII@ZJJ%A 2lC7_ H($B f *eDYgɇH#KJ0!$y(5 07PḀ2@T`TA?CdДT ArZh X`Hb~ n( s"q00#z#$L@U 8@ KV 4T8( " f8+ÁA H0u@H|,Dq$7@#HT)X,Т1uP >AgP2Πi1$I9aB@ 8"g o=gSq*! "'Hy 43,F0 20KrP(30@C@A Bp5G!  ,*ીXpB L $,P (ɨ*z\D8yJQRbqNh\tS^b!clY`l LI\DD@@ aˆX!IJ>9KQ܌bCKBUdj5@*B[hk H."@G``fWPTn CG9>CYj2a ra,\ d3@0g-u^`aM %J@uRiDuA(B@~R "| y4:0HX 8;+ ) x' i !$@eD  %HN\@$$bB j$(A~Z 6 4ɰ@ڠA PX+0#"P*8]P1.!H4AH$>^IL) jh (2 eP/% $:QP1 C(X @VD!dKp" c,Y$ R@`0݃!K@@aTY\,+t؇#@!g „1@%^7; LaJ& nR G pB @UHYDK2'(Sa$I(,M* 򄲴%7?<X\JT: K L"Oe,p(*{R:<0~C@^ I R4=A"D@?8?x @ !A@\H5 fErS/ MzV`1"+I}| >E! 6P09$5Q B5(QAb!IP8@Ma8g @2@ \B6`m@#uٹ@Px/U  b /*tZ@3aHaJ~V0)db. gYx| h2A&@ f'3N+M  #`plP  F(1.@>`\ ` ?a(T/(Dm mE _?Ŋ@)G @: D@Ð !@0BZ >H FXt> Zm(/ I @P1@"*QOiEg@ @`K H`D!8Ÿ#@ec"H$P6hQ@Ġ Hpf3)d`o7-dcA(tE B0dl =^ |J n$L0::y2yuh %C<34 Ҙ,X I N5RBCPA!<S`DCp^#h)^1eVŠ08r @R A5[3p:4\ x a €@B 0@ `V5P Z f @Y=P@- X(CX#8$$%ĹCс=5 b&![X $GM&"}R @ˌ@<ea@B@+2uW\p4iK,lBH @ jKB@P18I P5XHkahD0\@` *E@a *\h0 /d(ALEH@@Y 4HbpeW ml6K`%ULw@Q WF)E)( p  $,Ϧ,0QU2.q"0.p< | lϼ ^P$(x4Q x)`  p fHY`( pB&%Ay1&~ Ed aoIBIK pDJTHJ`Ш!Da, XAz"@@ DU%aQH'MD v Bm0M X )NPXM$@-! & (D e0 X @0bƊHACM 23t*LP1""T`iH AE>0eq6pcFL  tP1 ``Lp;P8cH;Hb8@P2  A~P5r\rO%l9)CkT:06h( DaI(.7`$1@)31!XpjQ@ O*)(K*X/N+@Aó lGRB![t 0P "  @%uHm@0 "JQVo*$^E RT(pfK 0~.ӐFn A !@ٌ ` km (yPX@ 1$HH2\/DdzE,_H*`2)!0 EAU,\` L$B`@A  @$ r4* @N@FAXѢbpA ,`j@  ^Y^ %33= > Mp %BR BpR6L %%Aт C7 %DA,A@p ŒB`@˥4GPhů)UTkF)O~ A1<#.p0R4G ? 2Tx>F@CD”@hq^Ul@#$8d - PZP$/ -P @D .(L.v'!'BLFa02X DP P  ;4 L @BCAɁh  `  >d 8 pL`bxI1d`1!Cg!% @ CGOpQXQN.7nŠ08b @Dx|`0! 3[:h!@&  66CA-L* 6q hyN< z{K{4 bT0 $ xS@'`JC8ȗC ̄@;f|A[3:x6@Ѯ1ILf"3K $! B<Fm FHCl @0 f"04'g938@@pC-?Qxɰ0 `d5 @X͡h4 l0 ÌH``9k2BD$I& :! 0 b0A!F1 `$PN$@b^G~Xi@7^@Ѐ7 @,膟 ;0'JhH 3KFJRb8Jd  (CB"ҨہHH"A K;ge'qjA@'A0,01X `j<: PF  #^P<@04@C$G> p!B'A?4438'7\ ?@@< 1(_~~> a&""!#Ą$d#(t$AN`ə dž`6  A a(`__0,D?$<? W@+ I@)  \ (6^@@&  8$ @,QZ`4*J (CEP()$Y 2#Ah(`0 fࠁ<66@< wਖ਼p؛ٛr[ p"C,`}WOA  (:B@20=Ӄg @MЋ!C `tBp\@x t? yu?b =b26-p;a-G1B# +9)v- ,$T F&LnP z2x6f#rm`$zׁP[+!D wG@i~`μ7$BC ߚ<8lJPoࠀ"@ H` _ .S hPE\Bf66P0 FhG D%B Q &x.Ԋ7/Q98a n3hxP> .oRp 2,N 'YdXXPS4"@ p bB=   hd@G@0)P l rA: O a x  c@7REa`B8\GA@AD `@3a"@J #T:, fd,TdE0B>!|ac3lvk`nP=ٳfa?>`0{hؔ;ch=DL1`*ȁ87HA//2 1igmp߸!j /1uy>  `cEl0a) c @P3sy`"`C=x!999`~`.6@~B @'!G@,,xӄ XNA# "Nq၁'7X `R e@j3}B|߿Ƥ1??cOr@ +#(11c?  Fl:S$:*DBFAECG@$"&!%#' dbfaecg`TRVQUSWP42615370trvquswp  LJNIMKOH,*.)-+/(ljnimkoh\Z^Y][_X_  3$PH2n P31  V><=p(0? g pa, `8(rPtwx<> qہ: ٺ '\a@ÁFGPq i &@DP4ݠaB  %z@t*PH;p@Rz8p8`pu p lq:i . N  @'`#7@P0 p 88(4b`@BAb6p N@nn` E jP<j͈( #3Dɘ7Bј& I $0|x@4@JWP"j$Бxx000XAR@ X!666} n cV  0H0`vr $b0  ( @@fgcfn`|07`S`bX &0 AMĨ68B>N q@7Kcpxdk  h n(xz/߄0pq @Y'W43!a!cP 4P0aE a`I(AL  4@h?{PX0a P(t@4*NM-5>>L(@`|1*40@h? Pa@"ޠaA(|x8``ń' Xp3H@<x 0> a@ ` 89 g :A +)bAl(Pc 02 P(3! cZ" h0氙A ,p5$ Paf͆aL(@7 À"vnDr #/~" "?{{ "  @$ @f~Y B B(A`$UQ&P@cPQ8 ߢ,c9` `s  6ɶO h5a@͒P`90 @(PH3`fFIP~@$' 0h?@+"B  |ΐ(ܼ#މ4S@ @@  `p #ς@Â@ρPxLX DL 0H @@A@ HFI"4F''~~n^L W'3y0i 2  1A@@P >zn) pS{z: y~{_8A`2~UJBAJ P`@E `A,dX,PLT0`b`H M>;@hж[l-!H` @S|$ 4  Pm`*`  0 x1  ' D: $ @+@ 'xS QpP[A0 `A&m @"`Bp `A*@lG;{d'~Pf4L<D`daPXDP#Z:$##+1'\8")ܥ,9&1( @!!9<0$!,(Ŧct$ N@H @p K-Pff8YA=b)BPg44`@޳Р'XQx0  VA4&Lph rĄ!  e1d.WA !@w$VAH{{vURuk$! ) Kf@Lx T@#  "<Pl e3JXJe<`d" 1жH, T UHt*p#( 1̰ܴFcavb/L* u!pxj $A8WP msLNH xQl1a8G HFD]x#@;=5  䙁JNBBR PH-PH7(!t6(@7l䮽yJxQ/,ca/r(xXWe.&bw*!.xw8@dR^/co0  p TX&$M 88c" 8H@KE@LtLPM LA ]~! i\0P!$ `C̃&E !Å JXW@(}@v/( Xb;AF7(`A b $RDD .~+1< qKSb OR0 E\ OJL^O ,\Or@πJ @@ * 0fE]E@!T$(23 x DxH7`m hqZhof axf0N.nTPVARL`H6 j"njn*o*no4 b>  j<X!MpFOـ?Đ923s*q`3a3`a`CP  ԙW MLm*mDW ӹ S84M"$: D ƾ )1n@DV`kD $ &H`Nl&><|"><$)eA2/ 6- v r dlIP"Eè?`# S& `>.{..{!v0k0p̣A>PcG qL]&kdvxTp J5  ŀ@/0S 0$y'qsmAA/P Pi+P2ƒAL Y%ǐl!D| %Hp0!.|H  A7&@.,ظnGxKI1"]@o}?8)$nY(\˰!aT0! (EK5j$aH/H` "O`0 h%IzCgd825v16O(C8K9TUPYHG R  }T0\u C x^)O,r0FQ%uυh&@8/x!A2)i!!!,hs H!.'3 hLv 3UA2@Bl 0l?ԯy|<H \ x.HX (98%!cq,9@3"bD Р)(h ( z  1e( *Sd F 9Y$X (tH4a%9fR‰5aM Mi/Q_wtBB>l@,j7و'P  <@'(^k7A+_@c! EI:($OP`!X& tPHAX{hQ $C68 ҇9W/s"O@} :0p/` C\ @, LH"F86Lj|$ywϘho$XP Pze(*J@ Dpz-_Z0 2##3`>]J-d ~`ihJ TB<}` @@A22@H01PmHJ"5pP e  l@C & Fxn.Np5@0++{CYTJ͌̚ A€XBHBPB@D8傲F%&q8fbd`U؇3G.A] RggDaZ } % TA@P R9\\ @ATXLč u"zAxAbDX! B 4"S (b?|taFARXPAZB'!  Ck1úceeQHpj`i H$/<"I~_+Ê3Or0"f呒zQܰdu0;Z@wd g`jPX0j`% HJDRp @ _j.T)!X0s֪dƅ (P$  m V8d@̆R ED9ƾiy/eEA) \( pdP  pM8 r$(@Yٰ8#"#D(L+.̭)8C: `301ƐfS4x`4: Ĉ@A?6p-fp 94p6 n(,. ` [h؂xL <@x絼q(%p & :ʂ42`/=hJvG2@!ā: Hw,@BBpEx81$O6`93(0Fdp AfA%("9%F)@(x )!(r` F`]@A%33u~!8594}g`qPj4`lbA<5!&1`P5(()Ȁ6h200 q@` M#G"Q.BRצpܶH7Kp$ " ۲9B3A w緈lo 'ZĀ c b 7$L9 dfE!WAu2L$(L]jhMFz,sQgi u @ @#()!hf B >BA+È7c-B L\ )w9dƳX Ԃ";p0ؐb\ CFHMQS\)\ XQ\ }2ʄfe!&$@;0WAbYICh: $H4C An0 IHx*ԘJbZĊ;JUdKP\@D|sDCR(# %b(M^#TP?@B$pI4XØC0PI XXƂ6.mP$Ќ ׀0$9P$(!5߰:p4n 3R *#&@Cd(ʅR4 dH4"Ãf I0Q̣:`h2^aYJ4 2Z;`BCl2 0B' @`+)rA&Xʂ -&&0 C # EMU* =:RW2c$D HbIrb;$H*<\ AL,hn` c  ކ 0A#0 "UiS A/ ` 3KhXxBYTOy5$؃ u @"lA@@Xa&T!/E<\P4*(8p*Q/հђJǒR#YR"p64_}$$ X)/@V"Q*Ee 9d F j=AH04 hAd@BB@D P@01RHPBPT$ bcC>AvX0 "&6#+p+wD@\Q1"BT ٌ0T B@؊)`_ a` np Ѐ3@p \cR5'~ð`o 7@Z0;CBjax 2Es$032T.5`2G},4 %@r8$  9"ba( jՠPF(@-` `  a`HJ7A"TxDf.}";%2 }&&6'xjbIhPA, 9!;!ҴL A<27I*Hea!(A0(` *"@5$ 0@ ""%4" /._&{B  ax|&#ȂLkUV* #M%3U4> H0@\4г AJa8`2J\I2B %TsP#-h<@j:8pP?cC,:C8 cB]70#K$X9 @B: `l`΄(g1S(/ & P'gp.   . '@yxDxzA!2 % UA d f_.W7>8SIʸQx-3CI~803hpI'`'`v*5"AH$(9$(h94 2! 4 ѹHIB2%H@@Z F J@!g A3̣6 @͏82yOrf[ <̈́$at 4@cPěJ4!I*APQ@˨J0Y 񘾖Gys\A$I`p3ꄢ p;s "TPQP5e@NCH?% ) ~MΉ|MH+Yp)C c$ 0B (3XfV GT P`fPnQBSA1AGU(g c4Jl)|4J1^42 ?(xL!0"‛ ٙ 1dk1 ti` לˆ-6.9`NG>1`0L,)*\%AP …+ !Y*Z !A"0 ̐,i@k\ `iXJ  ͤ>G@Yd PA//)38%h}i=ʹYBP f E& ,(@B c2 ǁggggffx(MJY@X 4hwʦ@G E(LPV ‘B\`SQ-#nYAD 'D@3GEl`:Pڹ H@@8`f -r BX} "p)Y^%2{q8P'ITCL*.$-q#-#q>P9ЫKQvjO\IB BA,8n!wJXͤ  + OJJRH; "[bccր; A@а[0,hb\D|b $>6,0A$HAI!)&P*`@`B ENH$B oCM(0:4׀P^((D8  $ O (@*4K.X s qX `)qV_lIb@g%e+%xe!s(Eixxr9 ,0Pc@JnN (@$VB)vl\ԠyA$@dBA@t:MĤ0>08 ;C \w%JYTDLXLCc+kl@XXebfG( 8 [ L.Ls 2;]&c (8+AP4d zA8 Bi.D IQPC #$~  BC?-`  2j@A`B)T0MmA7 QЏD  =IpR  <&*85::Px`Ġ(b A'A @@ Q!`IU`A!@ac @$(Dp@рU@`*(0 0 ,K'Ń#4 @@A,4.2H/1"4{Jm51L48na\@p@1#?V(84J`1@ (F4@@@;hAA~=  &'؀"b0 PBCeȀp0@?QEQ`` +Cd`aA 08@ (? &L P|@ϝc&`& @᪁4hb@ kUF yڈ, {QL`fA*0_UI {(` K 5 Y" ဘ*lhzrAVAΐ yHT:&?g@ /T b.D _0!G0L "P(=* @Ъq+.l5f@M޴ A%C!B~ $ a2@@MIS0AA x8 Z0%(9llQ OL) B6 =CRQF J"p08@Pd1|Eꋃ= ȭv "r "R ;@@'Rn}Att@04Pi=`uA,u5k; $7TX7;  x(RtH@\I%| >!H$0A~CDq|?F| @__?=q{y~@% @% @% _A` A@ P&!؈ ¶(0`E?|R xXA " D@@ a 8׈4 `32":@  @ @S| 4El^ >0A# 8E<0`pH+T ))0& h p&NDNDӓ Ȉ "0<| AZ(_2`(H+H$(*AB, 8(Qx!`qb,  , P !`dNXITL  bQ@nCP4 dUFX,"YAPTaA%!@BM@(UPՔT9!A91@PFTETPe. +`P6  \EIA@?Qd@rʻ:[;,,t=@$Ôԁ؁1Z7 7i! altA P \05 D1A6~`D LEe!ڄ-"D@0cLL@@sB)HM8vhe'cWLnCQ̉~A.fq&d (4X*h BV EP 43&BP `Bg  ՄoP@?6Ƹ RV@cd<3  @ batR*^ @@#  -OEaN h$3)P$a A *CCB d$)0@A!@A`@ A(C\mBxP 0FG QWV;(,, B"'8 h@ȡ+0/!O1': <$@bcJ!jR 2t` lFEpʦ.@00"B SF`AP8jkhbl`FdK;sbI$A  M0vI1xC Bf aI\NHQ'$ C@вT  `%&! RA_ 0.CN9 u+4 =@BD`a8XN@U 2/Bi@U`*KU`"p5kX Uk d5 >R`,p:_@` s8nE 6MPm&c[@Ɲτ D!F .X( Xh@X6 QrD]@@ &h( .EP1@ʗP1D⢂@ӻCJǁѥ`w<` aH $J.@ 7u@3 ܃9l4@`i@W ?-@6@ e@AŊ/4< Hv#`l@@Pт*Ce3 f(k`!PNV8w 4 'Lpqi@#JpS.!L Ӌ9RjN` @ @MN$bcL1x:ں8X:CP@ =“-5d5$0dsh0(nH@\( 4$5&<!@@?*I 4T4o@` Iǃ"B@0:$(T0;*,5H1Dk Ph3b`8  8!`o! v4p6g@P6Sp7B`s]RNIp0iv @AGX 8&B@(R$(X4pj,T`kޥj0k ƀ @X `T`(A@U"``5jX5,0j h s @c 3 ]@@8"F⚀5f :S 2FbN&%-eO.9ALi@HK(gbhdg`O@E(n莡7 #"/3 0/k`cf@~ H}мS R@% Th?+F;9g`r@-C\-0M Ad H (1A 6`aAl 19JR e`/\ ; cm@i*.C|(A(7`f@B!e(.Cfލ wYa*dX"J*x@v0|Jh=p Ҁ'D+ g$ BP2p  e \ 4 (CLp%.]x*Fx mH!Ae Bx8J…̐ "T1N<&Cl(0 \;Pwq@eĘz00lRFT@^E@PJrCD5N t5CJ &Td9T @lA4(60#0` ؇h sD8po\ &"H9R Z R(``@p +@VeFVCYh!d䄤IBkku`pD22e7D.X"p?cP@p%bX2HL\q,@>PBD2@Ą!.R +dSA8HJ4ÆP9#A(>@@SA0-0S@dP0lR bl QP'%Ti!̅ pjԀ9y I9q(@l EXp1ؠx Ȍ 򊼂 4.9< `Q''{';W[#S'qDPkQ x% pc@  ظڛL <pe8рp6@x`aP LP=ܠp P8RBB +@*Ǎ?YV?D @x %`ep4Yt4Byu@-2(U@3p $ "H` 4*#);CP08i{& s@Ȩa@n H$ˮBq7  @SK;Snb(!*HtDhqv1L  ۔ Fg H 8Rd800 l jg )h[j)+ "`eՀ!W33S'W xhrE_xR*/ 1(%s$ Yؼt$S|L;P1yЈ&u676sF T/' F)'.jBTDHw Р(JU"=JJddD 2⢲`6\h@N 4H8"*BD|(J f@Q z#|t!;{`` WNIm@P14p2|`erM H|  A 9CIƠ`jA6.n P`njjTn@V 4Q2"E P(U!(p4<01 l@n %)@C`\ d%ZlP6 `Ԇt-+Pg8+^$$$"25.>(SR /yD $TIef@q,T3Cq8@h`x07Q P5@W( j)P@R Q# ЈPEB%@5`\4Ji X99T, ^0`a+|9ɰ*z!IA(Ld4@0}\`i3 69C \04fPp1}`wI4ApP1 s @`, n@Ce05@Dh҂Sg(P*`P4)-5Y3,Cn L Ldr$((@EUICCBF.NNĠLW 44h s@QmUhK"*B/P<# lp1uA w@3Poq%AYA%QAUeQl~ *Y2h ?,(<34rr X4&qhv|6N.vPŠ:NG b@ T/| !X&hH F `HmSL0. @a @T *a ka f`60 BL! @ @l a 10d <@0CrJ`HmSL0.@a ECmڤa@AWGq 2 ) `"$"t5CFp dN(Vv tP2JI x* l d2d:QG t7@ H2F3`c}hn cx* aЋxhW`pp` f0&G l$'8d"Ud!Hm 0}p) Cnhgr `NaP\H! XPg@D Fmd V (x AQ y@. \=0w2`2p3O &}KIWd[rSq@fNX3"h@ i?ǁ,x"ք4 v\2ARxe֔ M@B6+8|h5aPb| * '켪 k@̚֊ I iʠ!P=!PPۜ%.p!P4g!^A%Ȣ a BjZA8+#D88;($4P#SAй\3h o@dy1  `5ʂjA @Pm5jk/Ź(a? BR^NYN !.(  `! RbA I A.H$EE 0ҥd* R @A/ h02IeiQ%%y%xqH@!@;8 O& 0@Cx 84@C 82@C 86@C$ 81@C% pDP"i`py(`03, C3P3ߠoP`@H  d7 `@ ed.Rbcf֟A."T!A:w{ +(ばLO1Cp,`P0``p| $RmsMshd 4*ƒD)(bH헕TcA H3 f0 Ș% Wn'$$0C p@p7 R"`Q@c@.+:BOip4p}RNH325 ()+䨂TD3h i6l,mJh.E%0`pB!Io˄^Wz0l(`@ xB)\`} /+ 4@h8*@_j+0^x3@`d4 &4@h>(x鈢H,~y&\ BP8:00TUxRʨKT Sr @YKcW'Sw\j<`p RCP lAXU"Z  .LPB"<Q%Mq &V() S-AX(PX81`8jx +ʩ@Ņ-%*6"ơM!A 0?$%$+VE_&cX+&@v4 Te#T 4bEd k(Z]A5|cC!`vTYH^"a@%Pa:,MEP( @8PK&@t҄  Pq@ÁAVbrVCHFxB,t]|JH!{(1EX Qdd`p(,Js!8w\RAK'"'Ad# Vt ,R w "0\ 5ZeAXŘ(E'@;L \6d@D€@!Pl`o4`g@D6 p@bjbG`Ȥ0dَIcÂ,nH2V *T , Ц5-wZOCF%P ssA\?6\b1DT4ِ;\A@KgCOs`TW {S'K; z Z&u161wp >HBC9Kh S 胤yTȺJMCzT 'h08HR0hì04CJ$1C%`$5:T\A0<!$4P  C00?# 080##0"2 #0X0##04eI _`D 0 P₍v@M 4jJȿQ@Ȑ4 |ww &%MB M:9% Yj 䂁H0 gفBp4{0_Ful\BF: p@P6 kQ h ה$SYqۂ-A hK d " A.@V(?d3phipLMP5 @P;ah-B@\5+ x^AP08EP4K;`S? 4 P <06jAW6" ce\E@L2bb(@]ZX <@^:R4){Z& *eEAIT $: m@ -ƃhnE($1 z. `+$4 hhvPd 4ÀH86CDt$AP<sp7pC2"*Ā( d4k@t rf E.$P!P hދq f4o9z "EDwRMBREP3qH/p[B Pzd\AT l@3 ` t dwp 0` O 9pWC`01B;(,:ڙںNH9qt9y_/k`cjdBq̃9kԐA2Ht 9pF]PSD ] @N(3STl$U"mLn #x Ta*CY00aA&(PLD&dgkjgnva!vUgVUVU%;6F %!345qp t11qu0 &7rt"NjeTMaEBV`s@ӃAO 9Z hX9*CwO7s z ݂ `@@R0g}5 X@q > P2|q|G1v8Ȇ "BA2 i=*lbog`MjiC `C(66h5""h7zm*dDVh3~LLH<Pe-~NP'pPo-x 1|h~0x JH| $`kꀾX:baSݖ`\FRYX<  4CD T?,!(alH?u|#C06Ki5`ܨWGuxWW?tL +IrT  rN\HD 0T <y `- E \o ~ h`C|0d@ף;2dl0fA=&^p22Ct82`g@@< ܼZ@@ R<R`m< e$D g Ȁ !`Ĥ, T `Az "h@ 5c57#RO B00ha#e'KSg#W33S'0qNk` j [7ԁ1ޞ' @Aix9v' @ A07oo|Y 4(()' K*'*!C&g!@!BJjCT(* а0 Pt` `beE l,V@āeA5QyIy9ePqNk@@\YH PjolbI>B &<D @ m*IM jdA`0Qp` v@Ч 97P 4$d"7p342t$<A `' >Dhif@ċm<(2"T r p`[2BH) Zpw, r e h: P`l (<H rye%AYIei~ 0y `X @A& 14~ 0z^:fS&`~P5EAH3l !`@7}J  ҁx `fX( 9E8(JX x!<(3M7B( A:H@i(.T Jwक@p8 /DP!Kpe@2`h-5P#D/)E^LʨɈʊ*iqCL "CQ@-4.X  *6hCw-x@PxdD@h G!@8:( Mrr*oxe 404 `E( 1=i! ;%A@Jã \ @J "@@ b>fai Ku=N-ts0 0}H$ )&P.=" Di(ZȒˊ(@@@@3z $r  ]%L `@089A9Zpd Ixwp 0(@"*RCt0 `@1!szaox!p58ļ‰@$8 7 </FDH@ //p`~.~~|r:xKHEOM \@{S'RBvL0@@NĔ`oRYX@II^IX y`p@)(_@60 v$@! /ȐvWQA࠰S(, @AP<84 ^?h%8 IT,e<@:(yh N030 @$ hB cHGDd % ,%\0D& <?/ \TAh Lx^.r !] `@ ŁB@$  Ak A# V (9ED t$ @ w Z  :0<:>*h@\Yk@/M0h "u !H&B4A,ϓ\3E1P$v0r @ H@@ ¸L%LtPڪW%_ F@DUD&1DL 'Ԡm8Au4XPRPhX! "F37I@"/ F&: p4P#⁖4XJ )S8F 8H,2bЈF2a2πt F"ZA@D !%bD H hQx@ 3`;6LZ' Hq8BH) y I9@*H"{+ 0> k D#A@J5Fp(xH3d@ # r! M)5X%dH)D!@fp@%QED+Crj)@S(IP&)t6W cDl}!(Re 0cXBhP( H| +!*z(2nh U!$d( B0d U*AT&P: c7Or84@! `0@*EP0&hA 0D0&x%d R gX0  :"8CD@0% F)Ihl mބ5ʪim iDEh b/8##I1(%$Aā g@pi4xQ$=ܤ w0"P0G`U 8w 0 Ar2 o Z @A ah\7"n b1 <D Ǥ1"w, @+#n+΃# `r:HJ+M0UJ6D"Cx7 aP#aG-T!pb805weq,TkAI[ʁ`HH((jp90pHH2 vF D {3ʄXaخcgA`E$XH+1cB3X 4^.d.%&am=!LQ`8r ȊX* \R̀Ei@ x4h^BqljM IG2 4[A-@ 'x2@!0CD4<lq<lx  I%##@rCX=6 Bebyx0b 73$4A*&b 7@>&_R̞NPwtAl"ֲ P@ 6!DzLy&w15#BB̠ j^(43 A7Z(WDH;p8 1*VlXzh2 aKP6@ 5y4 NCB`F2G7ŰM胳QiR99` Ј@@ƅPHa/&D(CML̰P @!&d H>0, 0BQŕ0 vXC- @LhA`Ar@T@2t@= @;7n@̾ 0.H( Ah; ȐI~@f6beE E lU oD"!H@$YlF I # lF BNU C&fV6vNFHx 123202} 5(H#XHH h!($!Đ fh"Ft02>8=o(! @ ȃGcf` B`Xx`XDd1dpm~/,$u2BA0tf@  `a0 sA2df!$& b  W@#$hPs( &`wg]o z.#%O 0sA>JBnap:-H@A1kPD@ 8w@P / \!c`4 xDC3A* at0dt %@XD(@! rH( DP:@$h4C@H7(%. d@plIl@ Ak8"`(@qaސ ` `  Y   zBQyy5T&5qjv YЇ !"úGpj(;mUBh8!!AbDD%jFJkL`nEakHCFȤD; NbI &"c $c`c2AB@~+@@b]`* P|CA?Q8 P2P f@`?Is&k6`H ̀IJƁ3h6;m8H%Hd%yHD@qJtF(BaZ18H=d D ,)TX84q$ H}L@y~7! iPi@Z!LA@@ 0 @y @ Likx4"22"P  "\D@ 08Br=` 1B:V8M0Vnk)K #A$ (xhs7" A (<@03dX\)):8#^J+`!Mv_P4LML @P\Iy袈v@2t@% p@@" @ Op ҮmFBa`P5jO,4 aa$ @jPq$AJm9 8P1(J2؃85p.8 WBAz@P;@G@c!%k@P!@K- ^b20  lR9QQ@mA;f 2zacfAE^@퀡s @r+8?`Fp` e+~A)s8SA&vA O@~%MqN^  »oC(BT(e lȊH ch|6H0ES^&T%X| @#T$P0 ό; ` A (hh*(g$´@@!@L)@߀ S (b ``!A/2?@9aqhցf Urwp&  ru6vp$3&4󧇀I` ~!P1Y. @(Xd l'Y Pnx  `$@&ClhD&IP1zB"9 +Ԁ4s`D &*L. S@Й` @  3Ad @drx i6@4C1FDD $91)(Z5Z;Pq0 qCV0I.a,&bG_ @@ր0!رYG`xyXH4 L^F lge#60$D(p(1\@% $P2b`,7 !8@A  0.D41:P01:0D8C¨CI@ 5; e6nv(P _ә@ĐdPixx@6&lގ!( e|WD̸`i BPɜ̔ @z!-G(! -bA4FAݘL `^aaXAȡD zi$@$:` })@s"k pfgRBG 5 >4 lf<0IHP(*B@,QX,eP.hR@@a,#pA(E\ [`8?p/ W w,yx`g*"@*ÅH ό/P2(!J)A j@0%A'(@w6 h B:P ጀ6F,{K @@@|}.223!a4$s06uHu5ХA̡F:@@"@w!bd!4P0d1s,,qzR@1%A̬2uA;~~ B 292lrc)X(M(G`@"&^c#è` vP5h" T##%ހHqcP4 -g @AԐ95:C@A@G!! ( )~AˆL&L H/ w``@Z $smd4C`( KP  i@Í qard=1NŸa2xiPI(Bh8Ʊ0202"a0vP—AI)> |/ĆIhBPd]yY(8;pɜ2Dy3Dي :1E@B#v" 7D@ r( y@HI(3( i&HgVe#@S Ax\ dDqgPƜHl h('C 2$ 22$1yJ A|BB +5Q(4*]23xu %3 (uBL A- s~Dr bqɁAz嬴̆?|0  @p6@f8G!$πOL\C(A<`C ^ĂlRqA aR4I`fR 8@A  KY;ˆq'# kF.JAAp;p6@$< x$}br9 D ! CX1@)F (Ih D @H@g@T>X'td&H :+YQys"B@0'`10fmIuvr_^tf\  XP9 a* @ҰHpR2@@M`f(8: P0h842@Pp$@f A@<$ pB* p4 aD r@, BA (0vaN%FLPdYaYSɈx$H$:{9JU@ *O~@HL9ِ `8 6 2 &@;Á (B" (0k lTp+b"(yHCX1p`|`i`C7NS[ `k؄c@!@ԺYVI`!2|A[aȐi@ @[_ x|@Td 0p :t J k(FP2@(K\@ߠ(hX6H+(R q!@(HJ)P(#V҂*` C (h7 v`[+$HMDl 4xI a@% "@O얈HTzp@?(bQ(8t<:& LR  02vf+fvf0 | >GM8 4of_xeO IK2F( (`rLD` g`~?CBW@d3I} xL@@2>0;(6$@ ae`arxJAH0 H$'@H6D5@GF" d( P JÙVZaaDq&hB2Iq j__@% Rf(m#l8@:9P;Rt:y2o!` @pe@၇$+H ( @H h Ed)hv 0 vL',*2P:P 4=0( B @BPj4^ŀPe˿0 lP2GJ 4$.h@H>`X`A !,<@,8,@  n0"T8@`P0h  m[$ |@$ @" lU @  `pp MbEPK#kmYX4"BHYJ  '@pJ 8w@Y(3f.aD '8!q`r !$ED=@XBP`]AbPHJ\ 1R^"/ (AV $RmB e``+4 ͩ@@0  CT b!CQB_@XB=019WbA!gbF  p %Eq` 82!I( 4Xh8k I K0ZG(Y=Œ8P1hP: hV {hOB[H<47tO_0 ЂPP8`j PD`b % q' P@ ,`( `` J8P 4 6:O  >VQT)`2a3" hTPplBeZ!f@ m0)P UD  FBm&|B&\@AЩAR! ĐA&9È02cp(\0Bgi5 !601~S P12P5">c,;RCrs $Tz ( @L cقjH<˜R2HLlAB63 m06@(@ANbGumiD:&,'  F( X * RUX6& HS.LUV 3& v f@ ́YPEMa`qJR1R凣b+=v$$lȊ K ;9@YED& Jv* %bBT"tz`0P @@g <T!Pb@f5 A(2 @``3 `^hiL e$ζtl@OAv1`+P`0D" bK`0L0D`H  0Q `| I P1uL(0 \G n@rRA P4! fK墁@AKj`6Pf@` v!B6?5 * a!@߄@ 0<B ! h¸+%%@hP(ABADJ 3020CCp `b80| " `jVm jD:JX:E@(l a& Da{0 $0i2jH# c)lJĤ҃AHw0Ufa@"B ̂Xz@tX|@Xנ@E @иA@RH,3Ad> IZ fDX`C w,` d (=(4'&f#1#hDQfh@p0 g(¾p5BrptCE<@!pll00p(@8 egb8 XX؎fV#  4Lbp@p5 bD? `- P9%ŐgLGXF_p+  8@~S`iP4lH $AQBA!@TX8 H6i6+`H< l H P$fH.ܣ`p2@m VaSP6d@$H TPT01"[WP"C@7 @B @AI ̓DHV H T}l+I AH l HW H T}l+DIt l T~ @* F נ $ pe#ʀ <`@ t" x: IJ hP1JH ( Ya SC͈Q4㒐H*;)cmY(V nĀWA4 tJX  hDljбAqB  .1Ԉ}<2 @  ?@ě9,` P H0?HT. @B l81Hi3;`C48(HN 002B@4H ߐ4@X@mb01 DP$7"3HoH  p f, !`21t A 08 GZ0 P *2f e0x98-& 4LD[@A`r(@4& LN,eUAP9q (pFA @F AH*a $ :1 F c8 i :Ӏ  :8)@߀ 0  R,? PJPBxM jo * r k(TAC&=3H6K0T(\bkp@ @bOj,c!  %L9ؖD$"" ,T̜ą`AtPS@,( b `\5D mP7@h@PIvU@cMdB3 dP1Z]   )KP ƣ4s> .s.` )`w*Kx m$,2@x呎0@(?P/U 5 a4!LYp}@JFl 0ȠHRJh8>6fb@O C00000000N Ze6I}$2 ^``` 9  d4 xz4j+ @`!X(`d!!~U X 1r  B   1l$P Bt+`̕{\`e@h b@Lx29LA̤@04)AdH:J AD6D:FX*p$Ax4L(_,`0@LDF  I  7/2!(<`0<(<˴0mP`'U`Im Ihy4XypH;0*!>bPr*A9(pPBP5H 0 @%A}``@ 'v3!ri! @ z3 A/~F# LCt0yĴ hp2\E3ue u2HO!i`iQ03x8]jLܠa-KJ$L(0A5098^u ,Bz^^yvr*"48 6R1peT>S$ A w0E"1![0 TB "[@OwV2^ A`(` kewp0q[P0``⠷ ? -  /=a$@o@3@%@~@Z@@_;ÀUIހfJ2t8XhHppa /Na F^@  ! N@}&05 _E 8%hP6`nT3ܠdBP%˃5]n@?09dE3l@T*@d$Fy _eL. !! @J_ii % y@T˜dD :^XDB@ B @r gP @`V Sq5IrDp@#$ FS @= ´ 0[`$> >{4 hT@@@&81 QT^B0 %E 898P6aF4L@bx2 / 91ʈ`   ; 1* h aP4@f́3)!s4pDS 8 դ A A @+#)XY3 Ad.heA fR l hn.pOMG 0xJlD@_@[B]AZUlE B5H9RzL *d@`$dhG i i1&K4pV6ƄS:032Wp3'KPiqL~  x;pjP0TH"R*Di`$ $2Ԣy*; `1y<դ?+rjL@!@ۀ@X' 5b8`emo+fvb,edGUЀ@qh 6@E@H 3@€$za&IaN```m;v08 Cv4F27cDdA?H,A08Pb`'RPA^L Bd AXAT jYxm``7 '3*<< s@pðk@̾)s$aH1Z0Ab'4;8p0 XZ@@@`2`^@d1F c2_< gB A;PPPH i^_p$o h# h`+d @Ì @̥:u7< 00I0K?fL`lu:1A jXLg xa+ p`j-vd5`k^ } Ff40`g Uva1 P P $.U .dG`~- `BO%RΡ@Up`ksȄ2@@E'p2 @>+  M9B^F GR ( D4́ =p1r@Q ' p͕Df:X`Qa@ H C>!ϐf3M !HCB_p Ak$!_`0 2 it m*^6Y @ݜAAtH@ A!A++w! 0fZE)S H>$s?`@H̨ lfa.p`v4AT x_󂊂Y x}00JA* /aX$Ȑ .Oz02@ @r4'@Z@sG! 8<*QA R`c,4 I`Ӣ@$D1d 633'mcdC</9Ď+ Q> ;0I !+@ KY19(l 1@V`A˘@0 d )/aaAABRXm=d$ea1p, `@]bQ=0 P0ăPh !(0efdmAFdFxZŎd4f eH:j @: LRFm0a*Y> 3(s#c'*! pKRʇpHX ! &V0@B@A%q>S$wa`)(;{=O06hMA !3dccIa !< 8AXTg0XF PdR(" #Tݖ!"D 0i#@JC X0: fonŜ tp?ɀTtd0Eg@HX-< @#pbB@RAAmj*1G1C>AˀŁ ߁.?, @ Z  D `@hmI(Vք<'`X+B`X  A 80 @'T^ y(@$<*>8H7`9@D  0g )001unmO N(@02 yy@ (K!!)Z YDADpd @]k@% wae\Hll0X 3a $/K$ !s#aBCbl 0 3@I+RA(58?0@XHv*XZ qZQLT9 49'.RfdАT ('ҒG3!"n6@ *! @o[&PHBH` `  P2Р(D ^$|Z&A5@t7?^(2)@iC:3㘀- n@ C.p A#:!` zy10\ޖH/3 BnP8H)YZ%ʶH@bRE ) j@hp1D@ Ig ( QrQ8 A`AbL# ? @׀ , Zi@"6ց)_2:AP[y  ╪.e \ 3L Jd)D3AP2/A!c *B>RX 61 ؁s!@0_ Ŕ :YPLANC &˔ <AtF=  OlbbJcilj'\P a<@2&N~b@?P BD((8;:@l#@Y" whV( `E0TX@, 16($a p| '&o01 ?D@8B+,@PA=#x2º64.!!c0f( Ք) `R& i&Tf H< PW`RX2% ] J0E38PF %0(vDP l-8Dʀ9:AnaA  p"›P (@ lS@ C"GŅ".I|Ĉ!r5GAF @A!Ee@K0W$,(G@q" wB&A ?I#?))qs"z( pd8?5 Р>Pq'Ʌ`@ Jt  C@# !~ ! d`@ lqa@*>wL  #Ƴ3AH 򰄹2RPMg Bаtp10pi@` h TBK<Р@  P3k@V 1x3$LI XIy2j2",KCQW*HXHF/ TCG*d;p@8x07)&4 d Gb8y&4A0#&0c#Lo hQS4@"Xx w@E  r`F`I蠒=f  JRf_^@aÿp^, :2%0X00800AI0L@ `Hꁿ$ABڴK` a&,,~~rŠWB@0 %A^&)Ј+$@Ì"p$ x2A. ` 48ʉ pЪd 1n"fbTB8ėM po ┅Yp3t D @  8 @  L ( )5B މ2%@F`!@Hp/lAD ^-Kp= z x iK@Ӱ0xʭ!8 dZ REP$T90i%H3F!@b  A!P7$D4VD D5eA ł_`IkM(( 51`@0 0bәQ Hx@Z+*hBzOZk@>-xM_  T`A*.,& XZuC"@ b-0NȈT& HP2H B4`@3@xCmX[ "H-0Z0!*C-8,7;6p9Wr'¸BԔd/ 81|2( e8@Jd"LJ0$ |- KDn G2!  x=2K&ei  !J_r@ `aPE((* > x j3 pr 0F'HA" A+& &?P ` *3PrtK~R0, X n0~dHBBd" l(PPM@Ti'2dlEH0,Q\T.dØ} |, CE0F @ ADPzPpZp'Q  pO Eoԉm4Jht] g I(:"`%"2T4(BA2,¢dXI.l4L&L@@@a-@.A#_\"\QqBX0 a.S{(+ DRf?`TuBH 5 opE*VHP?&W<:(S;c_@5 +@J0*~F" LK2bi* B GBµA1 hB `*\P!%RdTtBP &0 V.0`ԡE)?`t@ `0P, !F`Rb1<́ 3 pa/Jp/dvX4%3t` ,4{Hq a TJ'PP? TYTFTXDJb P1AU"HkTB @ s` Z1z7>h100  lmP7`= 38m~@L$ ~@|qvH)Di `|\Dh' "^+~"'!QH)JP؄Da@^JB -&8J"@($`z8,"&`mld&$/ PB 3 GIAp bH \b2р}!p(w$c%a w ,V!!BrdB‚`RBBY@S@``rDt`jH4̵a@ؙ ;-vr.(p2Ϗ)>G@c'0| dr@u@ x3Qp1' q[&PJ`Q[01!$xDxʁdMP&xCã`i `:2a4S pA!H?9 ą1c,"uAKZRAA4 1⁈A4.b ;J+R&!&"i `[k:L* fDV"@@ ]!tPWp07f ;`5,jnAC$  Ȣ,QBe.aBdxpm=B[ 3sʸ:;ȃSXDL$L: ` @p0 S(0'fI$/P҈6 i@J CX&% ^ !Y(D@d E"$ PMP)R$ 3IS0'0'a"ЈvC;>?"f&Dg i8" 'p=Ix (WL EDETXv%1DLX@x)Aá7L PIpuN٠:̞A!H#0JA(@JHI`9[&PI]ES@^})A 0*JM>Pf7w0O ԭI n@ qp$CU s`p(aVm]Amc %0׆)bP21c 0~TDBP(8Z R29dls)P/~(2ä̇6a)!sTqHBr!$rrF@ ] }ہ@8S9eqHA[" ! u iP& hTnef)D!@^408C%oN8p(x:uÕu",ZѤ` JzCa0`h@BqA%D Ґ,+8IT]H*I\`A*a/[@<+2) /uB4?C:@ rCz!o AÐ [tĹ@&!S(٘ -:09&"C (1hP7P1Jfp/0`  @A8RA HL0 V F T`@( 9%hPPB 2@B$EFv@TM`،~:I! <`"A c pj1 )3 켪2yxTt 2J:`@A @8O()@ 8&EP ` Ps`"P/L!z @02 Ȭ@\!  Pƈ =`HP"$xI8fn3O9 4ZS9# B&DE6@&@ i8oX5eI``‚@ R`eAΝ` '`SH`nQ)@3J lA#N!Pyj3@&N@JEXpA)`P„)( ID/\aU@!s9 )HP &v@AETE@#dQ2xpQ't:;Ia X$QTTz(-P`@" PP@! &X X`@# 8]`0'4"Q` YRV#@8@MhôIZnr9Y, 02 f0>GGYf~?N J$l.6DP yhL\ x'bP^`R Ptxr|`8$@ ' 0S  ` 34 |x @ͤ@`0 `RYFPI@&Q+̷ `ʒ<|k)@` X,5`P<0 XcqV/@"tЈH|0Bbm@M0n )  tA  !ZrM" Q%(0 * 3BZЭPF"#GP L8@$ `p4)C$` `(  -# _@AdRA%"@H).& (fagK@# @V@e (r'9Z@/ !HNAQAu>($0 -$#J `( 8A SM l(@9 Z, @P ` ,(?]lLI6vL;@0('(0ET  Pa"w;gL\h!#"A&I0πPVUX W` aPH>00 zP7HlF n 2&H "GL`MJj2.sfEIRf}dPdiQdT!ӆ`v8EhƙA[ @+@;}drPdX$d l9; ,WP0P; dCV d` < @  U5@`FTp=P -B|*hP6 U;P1@@b`9|0(& x jB o`u.<@ X f0 FLcCq]õ .:5 a@+fF<@u%"9W!](j0`` Tzh( TU%%BdC)i`c08B$#4H-P0(ʪ</ %+ P~ CT@(9 ph0Cd @TbNL\U@`!.p|V(swM 0z| O?20)60O0A)@%IuV'`: @ l @@ !) xZy41w ",+2 Ktbo(" @3Ё҈M0-)p`C"04Үs% @@BT 0 I@ D ( @ #0_4.Awj04 C,T @Ā܄ f@ D @@\$*0 QD^wZRb4PIXHA@!.N/hR-VN$0`#6@"d2KB" 7\( Xx. j=PD dhX ?G@҄ 4U`dB ``8=@\, E@PAohJ9uO8e I "5L`ğ Q {|K"h>p04 8bYPRC0"`MNj p@! @JATk B$B؁0s#aVS8)#9P6c,BÀ(Jʰ2 ]7>Fcp+KqBHEpd@ "y I5EI+x`40@2B aP h"UBٓ `!AjH-J^ Qj TA35X9"2$HO}/kI)-3v zq+ZEn3`J>awA%J`Zs`.+ t ,P 饁A 'D\|(d9 "M 55KzZy&h X$ (  0| aZ(㥆۔J iVy ",ʜ930bq tBD%ř~@ I)!v$ `إ ~@!\. 60 q 4E+h Y,<{e  $*@ jx jxRQ`C3%(?3 ,@@&h@eh4^#A`` Ah/z@@(*nWP5a%}H\C0 <%JTP38ۀ ` 1" :ʈ5G-"lA@s p$4' ^T $ {RRi2^&00L19 T@HP@ Պq*A`g RQ@DT5IP=@?F`LE9LP5"X!YdvKО̅(ii 9@I0JQ`A8H@`/Rafk 0w XDAT P1"C5 4L!N%>%/.# A0 r"Ƞ9|1)P @(13`0( @dZiJD$ q :^`( I !G H!(BȠ0! dB! XT#2 ( f H׊ilPlH8X tP (\ÐH"9( u'AY !^$0EiPC*^/6+*`b(&ir+( !iy2C R: Ps ɆA")&`0:Vf AP @Ƞ,) UK)Ay2@->`sCrnM%bH2 @*,@A` JRTjfLa`1 B >"L* A8"AB\DB@9._@? x>Pt!C/ bx1 @CP"ş%9+8$$PBRX0H 3XZH0y\&̾<{b[.', *""`Pr5 d0Pa  zLB@BC5mADrBDb!ȁH ľC04A0ø?H6 2K_ @@_C@8 'cBK XT*:[H!s9A v@U0`p\r< ;  @ - p*D^aAP20L0 AX@H`( `< HP|0 P: A @Tpg\3- {:?`` 2vփp͝ LD;\ d7ĀHBNñ`  0 >,X`a1FC"jnllcohbdEDJ!S3CWSikSOKg{A.e@9TPe@9TSS@\P[@^Pp9 01s`Q ((0}/ÅB3U(d?*@ :OK1rl>{k2ؙ@@J `r:ԗ $&p!??<g]>8 @܀ MPc \⃴ pD1$DU `0;0`4PsMse4ȅFtx`N ; $(@j@gA0>@4"@ j @:@,4@b 4?4B |͗0#&//x_A0Z !0j0걂 ƌ2Z `' jW2GX%q>S3:U "`} vI >E D:hڄ"p;?dz` h )d><̢ cKL f8@P&`P8,X̱1a@@)6p*3P,M6I"vyQ8@@tbl`Hv ~@a8g'U L^̠, rF&$> @N0YB, D@0- !@88d@mnvHj35H(#AhdD($5Hh(!\a % 44$t.@h/8P>P9 <B1)-0Q@arD$r9{ ?CKVP@2 A ipL< `.$Jn\ 0 @cL@K7 >Ba,Y ~{EEXHK~FKs/FiKrJ1P` \8dEMH ̠Q B؅l0y98  a@OWqC+ l 8! pG&@yBA8ؔD 2 N08000@+0aD0 Ӕ`)@ 1 ̾`əvpں3D AKo@z&@ >((% jAЃB5:AHHN)@ \Ȣ260 60~ 4?Ri5 #7Bx"A! ]x"2, #a+L=Ԛ& P]1R%h  r~X~B 4R3O"AK oezGU`T$  ] ઠ8 GtH@@* !@Q/0ƀc@@1 @`b}NP0@h@A j:Ve  , M b`(3X ` %J iA( 8 *aL MePX!PJ@Z? l( Ђ.@p6 VkH7>` ~!vR1lB\~(# 88!0So~ٖ 8@$Xz(ɗ$8 PC  EE-+P[(YT'$[ kUP@ _Hj4&X/6Ж '06 a$?HFGW{p?C( @P H X!rJVddxZ Ph/U V"Bc1% H x H j`&zV-2%$")2$ &|   f551|zXl؀r!^T]D@G(@|(X $| %RIDWEIi߇# /BuG(@1b( F"_wCŎa)]` DCZ @&1@AŀՀ̀݀Àޜ;\+< 3|#HR āNBp2>@@d`8 w4$ 8 8G P<:@P0(KX`'.31,+{<ׁ `V{4ͺznA.|f}.8APT=%0H8#uo÷"_|g55c(% \(B}~1 xt@%X!f2dDAg ,P#>{ 0@S+asNB)@"p I< ( ur  )L$@0*`ekTs  z"ʹ@3 Q" #-zX`J\ PJB/#$>#0uaPar&32 S@;('`pw}S*pFL+,6FqX ,#)e@K1,`JL `B e4fwDt @>E , P!Y! j2_3h%@@ŀD"P%i 4ZDA=h H`Ej4!$XzX*+@xh&Ĩ ƃfDB8 !%] b") k~ z8zt bF A >$܁~P@)p}bD2 {D$"\+]g}>z`UPytQ4c4p(@x <h% @fAS0 BEHzN@i@!׋gA,dQ&\ @LIPj h DD-AD}H6f^ +)@% R 1`)GbTR@f@1P sC{!$ h4@0$ 0: 0@*`h l`(yDLJ  P  Isk 7,x/}B,HaN# !@æI *ץ%Aҷ@@ (Ŵ10H6;n!I a R ^)2$'er'CP07&e"AR d5&q% eʺ @X0U,pc$ P IihH(2 XNà,!O A]`-`4&JӊS@0 ]>jQ'@@H@ $0 4@X@*D| 2>ALW/9 eD "4 Q1 &`Sjf<x-p TT/1Dw +f`B.AWɌ#4ΈRaF L\* h#gMЈZgЊj2k@@A,<#@eDP@ i@DDɈ+1`!.pA* 9`APńq@.tçEHTxr C  ؀ f@@+ HLE`+0 p5zdOHP(@@1Apy2( f(򁱒@O@ bˆ:PRJc R@1<%𾄀]h! ИR7`9޳a}X˥E 4%tBp3p$ BH` :uh;P3={'  '0IT<!@̠Q$22  @x-P1 Ѵ@TPW0 k &`k]` eJp p.`h"Z(2$E#P;uu?Vf" S: b@P%@0 UϤb< 2 c`xxFe ``$6 e` +`,܋a+f@A`"WF@!9(@fPtx % C p*KVF<^뚒3r$0 3@t!q Bh\6+DqR#D+,hL _Y:0!Wy`+NU() i@(` 48(Xi``<0E&ENŮ1zp{3!U [@H-`$ jM`q0TAI嚛jh:@@%\FA@ #00`0* |]*`xp(JI!p(hr(B ag@)XLt0F p]@^+ ' "|5cv h_PTHn@Y 7P Dm# N@? !D @@ +06$\ݠtq5v7hRi/`*!A`CJ a`C  BM6p8 1 y`'.63B> 0 8 ,"dz 3Y!,@"nO % p5$`(q x A&qq'P6(@ |_@w ! !@L0 8 @ P/@P_`Ig@mJZ`@S bt{b&JZ0Wd IY"@, @`m@ (/*K $H#g[@I@,Xڵ+\(v  ^$>cRH02x@ AZ@p=4@"t4 ね@Z8&@B.[#0JqC@g(0-mvub@< 3p7ӽ-,RÔ2 h n^@d&UdJй-(;MOvf0 +d6A P@@Xp)2lGx<1a4 xz i<0@I2hCAxU1!A!aqPA"@O) r`NL@0ҰO9;޶ Ht D 4xm `S:l # vL8O@  @{=dp06(#. `$w0 `L,C+dN:Q j\P0XpA_LH>hA\tOQ9X H\@ ] Ph0@G@*!B<0A6%A `M 2 \%A. Cr4i`d hTB6P$Pc @0^U$ A:"vɨ aG!+ 0* P  }@b A 8Z Bf`) 0 `+@$ hALKEltF`;T(w2B t+@C@?@P x@aH# 4-Ge5^<v0uYSXЁ@Z84  x4 `Lp& ~ B` ?yqH8A4P:%X rB04J&c%d X  HU,`0` ( li]L0@] `@۬|›*`2{kjq@5D21 p  A $x `G @ dA )p pl!( с @tk'D @Kh r |<N0o`,CMa/vh@* 0, @@P0 ( 'TɠaeAP@-L9kW A%eBĨLP<(0Ol @C@$@(P> kY! @@@ % P( 4 nx Zt Ʋ"b \#RKF7PH p@8]pSBX@ b@08@ B% bL)C`+ 0$Z`#( +h >@d`4 jy~@H* 40ay 04p( zO`S,  |L  0P PKmV B b T Va%@m-P(`&VYb`O``p>D JOH`є ME -vi4"M.<[¼ H21_YHC`"80 0)ĄPa< b4$ l2A[+ g w*`E !@p 0 .JР D @@ X!HG*r)>`||((D I`3x`_H* k0 /p0/D-$0 C U S@,P*A>l0'Մ(4kA@`!@0pX vA_@N! PJd$A/"xF`NB84 i_ , AZ[MD% T ' @W3d8 "Ja@@`oG@qMPp@:`0]؉G w-E@$B | r@"b@L3X`@FST! (K-X)@`e0 10`A41n/ȅ |@@`d@<@ @ %Y *80~@(`kp7, p2@,V @Cf @WP)XF2(Zp%2HI"`#;bB424 BP nQ+%Li'1F(yZC`(1!!+"48`vP  Bw p H2`8#6]@ĠizXࡧP ,@ LPOHB6nJb" @K 0Ih3(` 6NR 4.XG!  x0 1.\_@-@    ^)1,1 @TBLJqBh$ AO@8@=4!бɌ . .u$ 'ҘOVtth)|O AIA7P@( |b H6"HXe eR>A,*O0< "IJ@rp%v2uʸCMd(X<@#@HxD€'u7(wIt4%zsXd  !bA0G0@%B!qHOL/R@KL1  (ф@B#B6$E $`` ܄&ƚ IP4|h„,O*2X , YqP(bG& $A C  >Li]*ɑHШ"0p `H h0h I@AF&&@LBSlpR`)@0+&gHKPF䰑 bRCr"`@B "rA)9I Ё Fc"@C€E P J FQ<`@Р`11O"  A  ^`Z  C       P1f}&h@\Yk@+i )}\H`b:# 9$<h=L pxh@e 0 ؀ @ZjH042.01`| (`b 2`b  v 0t HW@} `c ` @ 0Ȁ z@X)Ph6kL 8 P2` Wl@~AP x $X4n@h ` $\8@PD!L TJD @(A L@":*6>195:Vn~aqit ]rGc'//V׮o7ova$|p0: Tyeufm}sdk{ ߀(\!B8 $B@ A@`@#@ 0  GhX  6X@!Hjz t(ȥ}6 \0PڦEjwTo_PڦDjY`C( t`ᴤ  8PaE bf, dXp2`A @'b0 o3  @F[/0Vr$hb@a2 \:'8bdXgB.~!8!Bˊ&0s VI2O!d@.QKf @r @ܚLߟܳ ; `IP0!&AA &`P0aB& @P4"EhD |Jm6lu@@ QJ!2@D(XA١.u% &f(`pXp0L`@ "64X \-T C׉HCBSz+7;ci VX!H\%0`a`pap`cǁ:2Ak1Tl d`0@ * J@Ԣp0:"EJIS T&D!0X@ SHl s NC@1/ $1PP#@0`mN,WH i 6  @Dj%VDFttLpty@(3a&  b'Fk xK)4!4$ $QHK@"rP5A឴ P< +X7~*Tp 4I %@ԡ$8(;!TS,`hؐ@NR2 8Ġ);`B!\E`x0j@T (pٕz @ )r(0!H**apt(? 5K评,!"HLH4bl(p0cY'  aJ EyOa  nO) [R5%fP2A64(A(!`,F@mn6E2 hPPȈhh@R  B F@ڝEqCͰ69B/0GpH&pP d!A@PD Qb GٜH 0wLARm+ Qh gg6^)[A  "$PBi@̠aj@.dD a2 a#fdyu"DNI2 ! sRP0/ P12D|LH@8/@P2W(* bI VB@~E "7|@YP4s,"͸?L< j@p64mZV #6A@@P )) ( 4"  " @ט0h  @Pj[D^+ ywD`1KCЀ!A&`@ZZ@GxDY@P4!k0 @\}@ @ @x@03`#!@48 J)`&AӨ8PjuI&GEI>O D# (B~28Xǡ<1y8:Q@:@l!b49dĹtM\T$DA! j ' `lhp9P|P` e54|)U\x LL@# @ba$beFMFWЊb )R'KsB 9 f̨`JbJ" r H/@A%.>@9\E "f xOlH*_  T AR@@\IR@q@;4@-,ʺ23pe`%B9 2SQ [ +e$PA=F n @b. $rhI*RHB# AB70$՜JH1c   ѡрBhЈƉ'߯ YXYHX=87M ", (0`h@I("E p" GF@cQ!E&  РW ,MJ MXJYPҁ p A @ 2JfL4PDaAc- ~q($e)$EҊ @2P p@  "\`2y$& :  Xt:d^8 5 8L6 p /IιPG(."`uQ0)p8Pp?8B_ FG2"\ D<D 5&X2IAgriP~)T %ED!( @T$U'>'ڡ4X@ j`9{(6 d DہASږ |QtPrLA0 p 'EYsfPB( A2+}`bo pEX6*Kt P4(EnE':h!D`  H&8*!/* Bk <~Pvp/5T$hzPPP(> ITO@5,=`H4H @ P ` O#1p A8?@  % AO"209q\@ nPoT008e 0 @p<nP3.xB(>!x@#oWEo(RH@,T%OJ9P@*J"Y 8}J`i@j0"0aT ,*Ѓh@jH) P xJ- <IC] $^C ! 8"(HF, AbF ԢgB%@`j@D1H#xo  1@ ,`Z' &gG`9^P5uM'`4@  E%hH.(B@'X&`F*NAqBj q@ " FL0 *-G1 8O7`0x"x Ь*l0+`6. l[26P0W0\ )0ʀiD@>' "Ā. D'.oF% AH 7  a 8h1$8  (f\eGK+ BQY づLY`` BF`jXPX bAH\D-|H[ B !@ R. P[AXf x3$!@ $d,BU?05 G4+*h`[.2` V P5J)O@ET!!dN}1f :9 s$@up6A` +H$d} @i LK [P,(84DF@ ]@@-@ӂ11*  00,0. O#00zJ %DHXk& UbGT@ ' ; `L6J 0ԁ(*f"/P4&@ :hb g3j0 n BhPBf(XO(pԂh ai0nQ0d8` D*&, qd ̇4PF ph0@ _`R`#H"A|gd0 )+us6 2`l0 1`x`B-@ @CL d+y(DCaYM D2XBD4AD1@ b @_HAp ! H ÃU02`:VQNIBYTJ zq^b \؃d4.*8R&bۥ,,ibXi(h -CjHI*R!P")E4\Yv4pl@8D@P$@Q a d0\l ld@ʂǒaD B< aH?D@A7@dR !(, f"] A4R~ @P1JD&0* 8 p A!A @W sBN $$$jD^ &'a bTh`UES>>!Ѡ;@ 1! AR  2\$%( 2'#` PT"q$3rT@4J  *H <(  h 0M Q3D |Z2UFb900#DqP`zNa@8(Al1>S/5O`4I)DP@ ƈ7]Ip21BJ@pиABphXI,,Brp$,`)#%@ K " A@ L B (8!8$4 vAA@q6pB F+DŽ +L "0p|b2Phx8P(dpr4ph88Hq@Hv *** STOS + Fun School II updaters *** The three PRG files on this disc allow you to update a STOS Language, STOS Compiler and ST Fun School II disc so that they will be compatible with the new STE machines. *** STOS Language disc Updater *** STOS Basic has been updated twice since its original release. Version 2.3 was first, then came 2.4. It was necessary to release 2.4 with the STOS Compiler because we introduced a faster floating point maths routine which would only work with versions of STOS greater than V2.3. At this point we did not change the masters for STOS Basic because we wanted to offer the original double precision floating point routines to all STOS users. With the advent of the new Atari STE machine we have had to update STOS again. The STE proved to be totally incompatible with STOS so alterations were made and version 2.5 was born. You must therefore be aware of the changes from 2.3 upto 2.5, most alterations concern the fixing of obscure bugs that users have reported to us. The main change is the new floating point routine: Version 2.3 used the latest IEEE standard for its floating point numbers. This allowed your program to use numbers between -1.797692 E+308 and +1.797693 E+307. These numbers were accurate to 16 decimal places. However it was quickly discovered that few users really needed this level of accuracy, especially in a game environment. We therefore opted for a faster single precision system, this allows a floating point number to range between 1E-14 to 1E+15 (7 decimal places). If you get hold of a Basic listing that was written on V2.3 and it uses the old floating point routines, you will have to update it first using the CONVERT.BAS file. One of the existing files (COMPACT.ACB) will need updating before it can be used with the new STOS. CONVERT.BAS can be found on this updater disc. One last thing to note: If you buy the Compiler after updating to 2.5, remember not to update your language disc unless it is a version greater than 2.5. *** STOS Compiler Updater *** The Compiler also has to be updated to the latest version. Bugs reported by users have all been fixed to give a more reliable product. To update simply double click on COMPNEW.PRG and follow the on screen prompts. *** Fun School II Updater **** Fun School II was written in STOS Basic and thus needs the same sort of update as STOS. The updating procedure is very simple and only requires you to update disc 1 of Fun School II. All age groups can be updated using the same updater. *** Help with STOS *** For further technical support concerning STOS, join the STOS Club. You can contact Aaron Fothergill (Club Editor) at: 1 Lower Moor Whiddon Valley Barnstaple North Devon EX32 8NW Membership costs 10 pounds per year (12 pound Europe surface, 15 pound Overseas Airmail). `rvHEpI&<pCA><"QN J"J$I&JSj K"Ja$H*L&J k -"JJg$ёBJAg<f ``&J/k +k+k  -"- Ҁ+A -Ҁ+A$LLxN$`* fare6rvfadeNrBDaf6DrfaLQQ`8rx`ra@<m<gra062< ` 2< BTB6aSJ QmNu DNuSABBf DQNuXl*0 d xAtAT 2 p  !*J2 #CgKcQ6Njt FbNv2v. @a_*&hIp A @K_A@Ph8`p (I%P bφxAcPpr.B Apv`va$)IWp auC mU<w %@!M QTap Y Ml@! x*[@ <3(!rAt;غv`?@5x&a %` 9I8F  9@ӘF:poDDI\9 @ fIQW0&509 ` 0@0 - %2CRq 8 :B2+C, 452;͚ D0JH.   x# #CUHHA(|t"@NpB`4t!@(q I܀j BO" E[ 0@txh -I('z XV!qB)$rC(Z !q2p$t@!xV~ Wa3K"R2@Pc4*A0H3k!2k&!130W4G2\-O$M @$ H`Y0Y%}E)l# `P$`H$1A1:0@ ZC A@@!@@@  #)Db `C8HB aj2F軄* v9 Ci% "orX AT $IrD,ж{L ;E4A dRJf#i5ɤ耀@@(%PP@Z< 8TQÀd`! `Ar @;@ P@:x\e`A u@A%(~} װp3P8ٔ(06lfb'NvdP&&N$D:@ru3tvw(/ffd l i `B m 2Sw.Ccc{C"*"PyڞL܅ Zx[8 s*̨2ʀs*̨24`( -`( PLɁ  k@9 :dprp A8A8 C4n8 |   p@ €^pJ!` A`< @Q6@a@A ,$ |5#TR3@d4F*@z@Pz R 9a,Bk `6 jA@@rP3'X)gFdfpP Yh6T`j@ @ x/XH8 Fri! C4& #\I&j#Y$L  #j P!c# FbZ7.C ̆P Ի0@ T((=4@,(=4 *(=4`.];$d):#E6# >#}v56#3Q;%-`h;#-C !\7!H,D|D @׀ `P7#+C,p `' xpmp@AH A邀h遁 \1dZX4!H0 `@d Ɇ  M7!@1#2Đh@D4p6#:1$#xt2{S )i@(4xPIFg@!2j2,l@#H2xaPAu?\J! `P hਐQ `/ 64 ZA"B$01:~  nZ@ƣA*D2@T)0A@5H$"Ak _ \ 3 `)"BAG3 @h C ap.)0*@#[O:4*AQ` @@ A`ɠs ]q< s0Ph_vP|C h`( 2=!&R7-i)Hۊ~u$PM0UJ61Et͋}.` [p2B,UK@Ly9)!փ7'֣fQf#AZpP- () Aipx?CGG.א`d18a4A*$fL(=J =HLb !Bt ۍ4#L 1.mjc8r+AAAԤC!!#BdRJ"'l1x$aVj1Pl1h0x1G` F( 0  ;3P6C5*f*YT5tk$͊L<ɚ͇t'84,Έǔìآa r*)`Q(fl$} 8>C@%  G N,^J+d7%}FZ&AXmp& !6(J@A8dIL`}@8!ycg$RDuDD( %/1DrdA9)|BC@` fJB Au=0 \43 P$! s @r +<ړ&Z0 S,A[<4!A)s8SA&wA @ (  boBf BpBօjBD26dE+\\x m`M00 L #g !@L)@߀ S (b ``!A/Ž~P3B;`x[!%UD hM < M< H0\V?>9A x  @2ļ)@0yPD0(4)r̠LpŀnV (O@'$zرY4`xyXA `jec0 Si.Tʄ U( #& A`N6[h!}yi[I@ՠ' 3HPP:&I"F@2(% C/R@(X j D l( )~A ;005"2ek$ <.LГ$ ͵wՂaFH0N"`@M(q :!n"L.R3̔@F)ط9&@o 2j 3%hLdX٘ 0;aK$P >u  &/ЄȺ0Q"q?v9eqk>:fu82c,TH $`3`P8r 1MoHgVe#KiGeb@ dA@ @cqO3 a Cq!>;CF9D/<e6H*5nzHj *Apsjpy a  ՙ@րXe@ @! j @/pP MyVf?J+>FlR#t^ *%SB En<@6f0Rf$c$3c n$9\2 # 2S֊Viې00 ԓ%̮@I"II@P  , $ bXPPvy*ЀA&9X:VV V~ H`, 6`iNysAp(X  .Hc00v ] S0*@8<́'AъAE..NTPD6 v LU0KP4 c`VrD)4( @O  ;3q:@P0gE$(\ˆ@O pM kqB , K@QZTBP`]AbP P`9@  Blp`h*%0A,**p81&"`9H0p5(d5  @& Т 5%Pp4GG&$ قjH<˜?"HLl=2l1adwRhЕ)VABX+ 1 DrB% 3Dr@Dq@1s$B8l[#4p\@! 0@E PYY؎6#,dfb8E# %!![@㥃b\0K hBlL1C?H  ````CvG H  HAH)P4h([$Z @ d P*,W $`p4$$ A(M@H3b@ @Qٰ8 p6iE+`H0(`H2@dDE$T( [WP"C@7 @B @AI ̓DHV H T}l+I @H3`i@̓AI 6I h.$)PbARxA</ M (0 " E@ , DmR pEU&b;ө9ek,!!P@s8 b pw6 cF%!LtAW0O1 ,BBD$iW, @ 99!p SyP0k@ 7b` `ɄqLȁ al@3?r 40St Y  &P~H"/\QY`hpFbj8! NLF ,` wYcpY'H!0xQp   lH 1*B> A@bH$6 CkAdjSm$0:X1IJHXб"$ AaATH `H>8AleB4XP?G9 =S L$9w'-ɈR+!fa=D (-X : İ`vb  ` -`:X@,pB@' w_ZZH `lh3!<%md xDxLY8"@BRُ` 1 $ ŘQ A!j03 -f2 82I@˄ i0$qƀrCSRN@"|t `p0>.d y"4I HKH[Xs/W)1d 0a[LpD;A"1JQH p*Y.D $ @3`wŠ'6#r4)NA4}_~@h>AFHCp ;X@1Ē @ܘ ɨ3X6O,,C\Ly"2|Lo˄RzhҊ t_5%`a.pFG /b %vE)8QJI9x,h ?:3@I{IJ `5E`A4p?`kf+y030 @1b%V@ aA$>WG@ b] Ҋ'PP3#c# duy &A t4!" tAIk``ј0 %ȓH0$p*X< fHR"pR@#1V3`BQJT(+a B "!Ps -` b 0@-0/@A ,q$ 2:  ~ x_#P@ <* !I@J_D%`0*@Pk J׉' !0 ̍,` `j/ @ @HP@L%ȁ=R b(```LФHXJD@ @&1SB1H+bdUN FD _HARA 5 @[6@qM=ɕ _f46 B ye @ A94P03C @0T(4I @p|j P= F?` lAS $L(0A%098^u ,B*//p 4*e[p Ph>I`i h C)IȐ P]p $: [ @  q;DT9/D'@BQ  rDc"0p\'!u:} zRAH@ !Z X$EŅəHI21H[A8$F\SEII!JBk6 ?|`b0 2@i0@q`3p`2v`3tc7E<rd" n@Z0QT\g `pb>nB , )E1: @AB"І 8P7@aP(05%BF@Ђ#='$ VkF%$.bd.,Dv{@C^b, w|PB¤. k@p@"0 WDe/^ V ͈A(@ P - *]`zP *.SDBxC(:(@/Q$@B'@d9Q0*<"@\0"Jb=>fw_7~Xr ! :dJ>1.p^@(K S/ 4D0P`BR @@̾\pPTH5e.` M80C^EӦQ! ʩI @ƀAA%>p0\:*:`88<~` H34 `ec(. V4P ~ETXENPY\H`*^HH$j( (* w>((B>I L܅ҚڻXښSˀ`-2t6u1,lhDt4(@HC $2:5  K+H)+(!):;8أZ\M@A'r0'D )êY؛۸02J\@(#@(! (@0HDP@ * @  H.02 b" `c  k hc  H{tp yj8 @( @P %;Fn  (H4oЃ  p  5gAL (p6f@A(P3  ()BP!@ @^*@Q @P#cS%f@Jnmn<=$v?B%#D+_d 4v_B\@* `($ *G`LB\PP `Q + oT_?PڧFj gTOP!0?@2FXJ@` if$P(`r1fAՇ͍&؄}!#@7aKATeeh@7("@ v(^!a%âs! FEp!{Z R1Mp/-"H,hps0`K 8ᄓ$- =0&D , R4b@d* O  ɤ8;b p s`! !! 0bf (03 BbJJB-DYlvA07Ĭ&``T @(  Buq`Z9A!Rf`?  P'C ,*iHA`0-@T99x41'~;Ǣ00f@ajJdY 09xP$6NALV# A)䨟 . J'$T0Ɉ%IdB8ȀP0Y d <Q>!I9 C1T10OvR8 tbjdFPEdD`l@JDGt 0[6b p*6 xth>*@@ẠB@A H  R(P7%+jT~@."|P7 G#@$ T Jq@z!8L0d#/Plp@cJ]6!L$V ij  A MXK " }'( 2B7J[*Q@*}PB$8ăNz o‡C5!2z 8@)!VtW=A@VP:F’5 [RX<Xe$`9!Kd2<@BQkDdЁcaX# _ l!@ 4 8` ]mKYIQ-:8,h pgA . O>!a!!@ | 4@`( '|@D%!P@_RX ρ>|&|QJea,P0'd [C/bH8 }@0@F7¸h%.ex(@[@0lk#D9E3Ft>)q @Ч0P A@r1._ "ED!8 HL (AK((|6iANgR H dd p2N:>0%$G$Ȥ c %6!Da|D$lR!Y3pG2",ۊ3?֤xmFЍ%aa<`t DJ(\@H *O^P@0* !2J l ]yC l-4U$Ex~?yǐ7pF8@= m@P *  @yEB aw AQd ܤ W@H:$> 8AKN`\ hQT :  He@gP4 dpQ$pJ0„!m s@z37فC8q  l\#CJLK DAA9( AD `@ơaPr!F H8 ЖQSQSG•Y@Ux @T b8tP&I(PdlppO@"<(?t8?.:) @1C6`,ʁ6$""  @ a`I0D ,YprP@ b(Fh1Ĉ@*5AR!A`-QJp5Đu$ q#0D N\C*@s7_ F\D#ПS!5 0@°X.2IP3`m@ຄ /00G& : )O": !sMYĠ?)><I@ ,hqB@Օ<z4hyH p2" $X.  qdqZd 5RnPJ@ | @ٚXlddoP`͠, x( @@](ЗAP Љ$`/$`HόHMP54@2( P@R@X(b !,@G+t "  \%8 `1,B`s 0HPn%A p0* @:lC CP3SaB/T r&X0 7) LK8! bh*$s,%LPN O)Ȱ؃Pe$|& @yBYZJDTBl[,. %BEZQB|qRC@%pD'`BPTM=`GA?!oo/ch)`@ "x Q[Uz< a b|qo@$H3" )& @+0YTXplXH CI"Hp(o\Lf XX!RAF~ `@ib&p3wP ulgY aJM.l06 ܠ( PB1 |DR:-D @+213 ,[R^>p 4d m 3'T&E  @M8p6Q(#pV\0.0L*RA`p{"6tPAp@6"/HTE  aESa ZT-F$,:[AfB­6  (@AP3ʠd d0%@$0"SaO `BĄ`21A`F$j J(Fp4(PA 832072  "pP2h6tp%_^n7Tmp&Q~C@< P@ߺ4^RPfH!|iLh, A)!! ) @͢!دa`C`2bq\Q@ x m) s  hs0m@p!`a ms+lʨ-~3ȠX@,ž , HD sp,`a`NH @{ f`b\apl1pp-,J& HJC` e_ tT! u@:ી.8XX4% 6 @$`k5ܥA! AV(M($@ XPT5"T@Y 0@"@Z 0.e`2Hb A&A"  ,P_l~B_266@% Ph*Yeo@(h+Y tY8OID`rqJP8XBDP8 d@@@g`/`( o0 Hpͭ4 @!H&AP pi帊4 <}==R1 *x<l%!dKNCRB 3O>@FOCy<ȀO@@ xCHW3BX%@! D`#6Nf@$! ch3fA j `S8!hM<d2@I͐ ,fд6 p`a$Ap005X!"$N@1h] #@0@PPg('@@?1?C/#?,4 /`h@ @Gt`aCO@x`%AB4$ @G@D%%)1`hT%|B!A!iTJ@$$H H% `{32L deccnp5 c0 e5~(g p/D( dx b#hX8A@@! @ s@Ɓh~`.@G H/τI??@0b BLQr2:@ ' 0dcFg0`R @0_0/ /B?BC"aTN@+ @$  .N `dR@@/ P X |T`-QP`@ !P,YU NXITT0 @`pP@\? bBP;T8lM͹q8pG_BQK0>ѧ ΅P@V`p@!` aIJD@զEǐ :X!|D8 b<@|:Hm<:R Y{8C#!`c~;~*@æ7x@T([ށnr=<qb| 96=kT{@( ;j40BCg^h!!o6%7P@`fa@$P0/@)4(BDb  "!@Ày3a|(x#w} " <_|EHY0 7 Mh (  7)8 'S ra,,,F@B()Pn tG81Az!`@ 4WH` #  (69 _A'xm|oW0ˆC1  )"R0ȰAa .#q_b0 H0B `%}B@ǀ|j 3sE*|fT2"B !`>`a1;5`t (hlٳao@0=x fP4fJ@@kB" kd@ b@ @AOwo`wI} Ljet@ p01K  @PٱytD( @@90B@!|SC<0al BaVWxD~ 󃀀~@@l# `CoR_~π9D ۈ?Ci{1`A6)h@U BAC@"!# bac`RQSP2130rqsp JIKH*)+(jikhZY[X:9;8zy{xFEGD&%'$fegdVUWT6574vuwt  NMOL.-/,nmol﯍Cq ($P7h(KbF+`A ۸ T3800`@ 9(:;p <8a`dp0aaI#P#G 4g`gP `@ѢI(n0!  y= l:A[(`$HS )e= U8F~08B8|Ά@ 'a@Á | ~ (P8Ra˜ 1P0 a `Pp1@p8`'ww @Á7Cjvup0@`"5(\5c|"d@\$\>)1h C ZBT{ŧe 8 ixy% p1@8@< 2hAƃ `47p<=@8 8x{,ѓNpIpT pƒ  (`h0  `؁   4=,@h0(h: '&A&_ Bn b0>y 4(0 ~ XP0 f><00p`bU,d8  $ uEjǁ< ~0| 0Pa3 T`aa蠁n 1F  (H?`v(  1- d4LfsXL@ c8X(0ѳfa& `Pa@ ;7B"yIсB_A=FߐB   ab ?AF a`v@P^^TסUx *Gh(WUPXϨ 1_UQD(o@@AF1~@09`c?   d'Fx 4P0f@(  ($03t@$ (?@a@b4 VA>pHn^FB^DA܀BtxoD @)`` X yaP@  L` 0| @p | ghth<l &@,F&d$ @ `$#$B#ʁ@ ??{D7/&LM +}<4ˆA@L `(pG=Z qwˁ8)=h`gG{À xyOwnIN*H! %JB(0a " 0 Be`j 2  @,(A^&@*0BPrtu0$`de A&FABZA4[l-6`$ DK @)>pYPP  6 0 <H^"GXFP@X  )x (ĸ (-  U0 p6p 0X!C8R0 A6#=sd?mO(G3jB X"(\- L׎.\vRPuя ܖQS1:u&5Ѯր>󠋠@ `pHh^nh] g\ GvΙN'` P @dp%OCبN 3 3,ܠ!(3 `0 @ oYhPq(fpx+E&849qbBxs?h 2~2@+H H;CBBB+C=y |} *)@3BGO x&< o T@ @(6}A2  %f,%20] @FDC2@LR H[$ rDL$@:8J XZ#1E0I\P1&U@\Cb:<5_NtτI@ +(XDy|`9&'$@Z( S0Z##". AQP SQPcSrL!@qF|(H$`($IAp|p] A@rW^B<IRfC; 9?CzG6$( "`aa0N@)HPsbL`͟W=;@ fQR( yf1@Jp8-,, <aH pu a0 cgKAdxd@JȰ AH4 Jm3FhG $ pց!)A $H HL $K  A7i H Æ3d "@í?4)YjhMFJ%ȴsQGI !!Q Hx a @#8Q; b+ L&?B Qy8a(x[Em4ڑQ . D@Y3 &I*21 f *G z}CAP e\ L@(&ep)?PL(%  8AP B^e@.B%. JheWNlndHW]8&`.5v2;XX *8 H~ LXE b   h)Hp`<np86 amzܠq @(h(aAU e ,lLp6n"> A8>@g A@Nl\7#ooP<%uCई@.|Li^7C,L rW`e@ \XB R"5 0$ E$V0Bl 'Id XQx=!S2AHD'f!%t*,# hAd*p.:h</9@#(FWg´ t F [ 449$҈HٓP4&;gN*R a!6 6jW >` $ c.sHrr<il$AB\ pmrA[ D8@1"PT 4 rM \2)Ȋb2{ `Ƈ ,I QHl r :$IZ03)aD &(AI/!!x6 Y!Ax)Es,6v6(-̡l`dŊP *,* (̓ڙ21򘢬T 9@ Axq@x @K٠E/ۤvxda@(-Od-@a`j& b,gB (@FJ R D(Aw  pL`ۃ  "h@0L@Q (dP +`m.A HVPt ߚ@, $ X(x0Bv %h)@[}@W'!@ ̀5l @y|P(_H /5P /ˠ1v"  z'0@HXX  @:(^ =4( aa!ODDbKiCב'>@J By^DhpT!EC zBH`&$T\ \LRc`< ;47,(P=Oh2AT H R"M=A߃QፁcUuyUr.%ڂԀPV?@044 `%*LH?>8!K 0%P8P3S p b0Dو8 @\YHIC.3c1ae1 Xp`&hVA#f06"5 4@>D3@aPq@4` 6@A0(NJ  C  TRla R06(o!,p4 (L DAZ@O@L.l?FmcH L,l,(BXRTZ [[[Xv`@8 8`8ﺘVgAJK\@  *ɥ M 1sC с`d@Łk: @ X pCo0 P0 d @C@@ Jb $(6e$%P`j8(h2Ҏw6H @CSIDR#s7'wو8DU!,%fMcL a@,!$!(! " rY#X 83120*C_v]v^v\u #HPPR {@r Bӆ33xe-GJ܅*@x  ( b.a *crau,&bFNR:a=A SwC܇F< H1{"A,!Q`@QA@id0#p `A ,Tx_( V ER @ƒtYXGsK_䡀5Zh185T04I  PD$/H9WLUV 3Hr =rn(XqC ;[@35(,I X0$%d֢h)@` /H*T U2BPp( l BVEDD6 Ip2 \HL _HoODXCR)dlH"LP"WYc_4<ʢćN.`@LSsb8p2HPW( @f 8&9ldR| L,lBb"Bu&UuvfV0afhHP3)<0yi ruDjz|A8 Hびu8f 87Bn -lA<&RRp{ ? s88O ѓeAA0 B4Fĥ;# b@$RZF[@ !!D`8|ˆV܁A@@ @'XP#` `28D J@B € #ADRДH9D0f0M^[. L\[vL̠Yƺ?SYNLߏܳ8(5 ``061 hh0(@ @ƀ4hbxYw8 p0l@ŀ X #a(!Rkk8Zn[$ʸpjȏDs 7 Db@11 D@&c DVāQw3Q"m B :ә&?&@.4s&#ltZ94:܄E a` l Dh43!@!EA@q aj&.l; |2cYGKipjALB8lH1.p!# ȤT]& S)d(.QP>eB3 2c  + L@,$jYQIi$!E 7$p$<] Е jL%1t-ApXE``|m`a%\Lb|Ǐ(. "p>9!)QsL1&m(!8 $,a@!(AԤ,y,`CAIt6ȨBF_hKbXJQ\ R DF x8uZpp7RaaMVa @P`eBYXYDXl 2$ x@`ufaQА$A(Q@04/P0,%@S-^kdF!!6p HC0 ,eAs!aQuv*L)H+``$E$9_QLR1RB$[LZA . Gm`bLi 0Z1ɆoC[ g*ah 0Rϙ[fd,PtjX(LDD@n  V Q A4 @ACP Qy!`IP @( )u$(!(* x1Հ?`Q ;, UD|;Bx(!A֪b* !E lEHXd`/k0s`p7 nh@p8.B?aX07m Э5[0G~Q`"߹*@`#˂@9 JzȐ`1E05 f #J 00ppK@00$%ʂ@ ́*<@r_3M>^[d>Z[5E y$( pbLHM@RZ&FPa\ 0  T  f@ J [ P D/]=]^Y`FD0Ddg>@| TA RP &5* XAARAtڈȁ+Iʂ…dΊFIMnp @R.VYL%ṴG0AT%.$h!K Z4J 5NA@8(AL V.B HB!06?0gB 3 r?)  @S XpkOpMBa n`"@<= ~I nL@/c+pe?\(G\\c!48$e`;q^ $XRϒ4@ܚh܀$$!y u$ K̆s#% eEi QHQt|L fǜ\Du?@ 3A~[q- `fG0 S( `BbM%X$`A d(( ep%|„,Bfx_Kc. $8BQB8]9yk(a@G@ '!iƂ&D&y@Ȅi !MHXA b p+h 0 (p7(!|)И#h*W3W%HP6`?&Eq@M[[2 A:p4IEkaDҰ'#@ AJ LJ@ s(aBQQXB -  pfHRHB45b b4͌, f#,2F (XƇ>\E ( 3@aA@`lA !@Q҇cP33333A3I<ڔ ,@[c@B,xLx|xz4j@@S n"&(+BBBJbmbH!P0)v7lc, @#"]@60AKm\A k03,>a8A,/=p(N$!&  E8(hUI%(5A'$!IY! 7v IEmCBa,@`Cō'%N%B)L|Y-Dܱk@zv  `hX-p41y.">T1\ GP_a$UI$ @Y(0A !@"a$P!A7!&H~ x (/KYVXC\" BIcb HHD%,8,`0bȉ8?s/$S b3[AAǼ2"ۼ<9P( 1c[%p `e !OA6w.jP<̠L P2!HРhP: XK`RXWIe Gs.; q s,"A&I,!6 apr C\H 1a3#C\`-qJvwt|&`˹jr`1@?ҕf2=d I4"FA$(`z(e!QzA`a!0 5C ljJ0!*AC&qV6 (DhGG"GDBBP$) j“L  O](<`R`F0bPX1x`C Ph($*` T 01Q " t* cTj@S%?ȑHh ` A$` WA=6ք&I @` 0 ` a??%0pqr@@ #@ T 4 P Aw @@@T\1I@JN(!@!2@8@@ A?`b("`0!B vAш0p0qa @ @A@(> g1Bo}~T p@41^Pt P 5ˆ*HU/AO =?` `k J C   (^A_DaOk[ 0~">)qMx`` B @h@P0@ H p4 0":@  @ @S| 4El^ >0A# 8E<0`pH+T ))0& h p&NDNDӓ Ȉ "0<| AZ(_2`(H+H$(*AB, 8(Qx!`qb,  , P !`dNXITL  bQ@nCP4 dUFX,"YAPTaA%!@BM@(UPՔ9!A9Q@PFTETPe. G(.PApA@$ @( 9e]-nF: z2 T4D 8X h H pp 0 P]ڿ}iqa첰h(Hp0#B T < @@@@(8 &)A`T`` AH@A`($h.!3EP@Ĝq @;*.q,.:A9Ip`p`%A4"00R%`d86π@؀+\ܱ' $O /ː(8"89`P03 @4 y,(Jh.f a^Rj@@ލ-0: \S y(E|ぃ@"p^ 0"@B"2B J 1ԦA& A 9^!y&;42K 1n+DP7Pl!(APfD_^   382tb4 ?!+sP"ըddK!(AB|0!3IBj`DX( IHH`Qhc\~) 12Xc c0܃AH)hP/F  Z R`f V u"CJ0! 0AtLyN8DZ%$$fC5 $ A =n2$`@f ~? ٘ `H5hS 6f(B(6(?F }k0![A P_P`~(R ;tyQ%f4VN8" [b``It!ph S\8beHHt N `8 `@p@tCHPbHIh) + c '|LPB`tAHT'[ RYx@A^hšHNq lAhX!aJ44ˁ Pt.3ClA4 Ў`jT @ 6   ?J h BT_xWDw 6 ؀<Q$)~P p0pB1'~Ǻ|`rP2,3b__B]W(`5; VB@J0fO ⒐_H"@$ء?8f@Ҁ@"0L @@Ѐ!fA\I A`aN2 9@)\2VAH @S` C@@PP(2!==c؁ j #S#WPfc+gn?e>+60xEQAIG)@NdcHHPZ@ 17{c@)0 @: )+*02 ICB'kw &A3A 2i@hlh+h( )MjiL"`] *:>hgh 3gVxU'|9\I,'K7` 2W'B@@HUIAOo@pCQA00olbb(ب @HEDeEJ),!, P:CD"GT ) @a5IyUeA%%I@zJ`Ȥ0UTQUW$*)ʒ@d[_@~q@PhBTB@šbҀp@P@ll`@d 1 H(@(! @ $@ !@Pm휅`hR?؇vX(P2`}0(6@366G-,a-^U(,,*"E^Y_@ eUXFR +غ[p#ol WPP*GL-AV S& dT ]L]m,M蠡a!懀p.B  0F@  ـ!tSCQ@T6 @\@+;Rp32GP4p`dadA $`p:%#C$  @%hn  8hH4HB5@\p2@m lVx (6I ͊]$+GfdA`0(`H2@dDE$T( [WP"C@7 @B @AI ̓DHV H T}l+I @H3`i@̓AI 6I h.$P/(PbAR8@€ :J+AoP(>A X$a(d^ D   `Ġ P @(2@pP$ F'@8` ,nl .P06\%uCA6 H @N@*!B@$ ( (>`@1(<HB@ c $T-,A,Q vR&8 ʉ S`EN}D;cAlYgye xH7%661!UUP TTexYohgDИ%$%  %  T80L<'`LBq(t 8 n C's .s J  Yۙh8D] pѧ)S drd `B@(C|JB 0H;  )2 a64`A`A1d A#4beS;b` dL|PXPdPLP|P0X0d0L0|0pXpdpLp|phX"u0bh\\X\8s=0@^Z)@LXką \DAi9 D;`r̝ lI.FD!(-a{;C` 9BmL] Y8:P!#BP:Y@>  0pRpP8ap, :tFðW;"0 !4q &"!Pg^: 02 $d2(kv CL܅ sx0-TPe@9TPd L 0Ls@RPl{@QP d(&d)P(^B/!  %H@"@00.A2$ B!B^Y0C ((L#@}nx|cC;#ppm@xp V `@ C(!1 )9%9`p*jZ:zF&f`z!l0liff|h] 陚 ><< CH@!2bx5v& j83<0P;$!@!04 ,$8? TmX/ Q2B$ @eaE @CPpwp0q[P0``⠷ ? -  /=a$@o@3@%@~@Z@@_;ÀUIހfJ80}iqaV&* <LTd$Dx8h(HAAo * `Sa{#6p.X`"Ѵ BM-mBHJa=ApJ֦E M" GGut/~A00  C\ Y0 'XL|<2ć@.Iɦ R򦩇m=lYD3dXR47mPYРY{>J@Y5q@ u@}Hrz݋C(ʠ{E#Zw:zW0{ƂK%6-$[@n`i?* t571H@`$tW9 #ѓAncFiS 503rpۡcY '9O8ΰ<KE"\"I .+']Vk]A *͡uk-{;Sm" v,B?Դ8Z{4:2dx84`ɠm H.ML \l].=\q$7$JOS "H, uЁ6 f2-Eò$`F9r~ +ЁV,Va8 D@BA.0,qT@ vM?aޓdP70 )Iv[(A-Kb"t:l;ȵr :(?`#CK=ҫWbreV Y:[ZP-%"{bնE̱PcHîPDT"A2m/i cf)l55UP=̆{Q]'ΡGWP7O=.t;{8u[(‘ 6:;8t" !YôxȹXi}u3@J𣑠 ;::UEЃR2Kt*d1ӅY7%{QhEyH@ׁA7z:ρ_Ѿ.("`K \dgJ@Aӈ t ÛFa.m]lJD (J1FC0؇Caqv>-`h 8`*H4/`G `)Jr2p.HJ4>z2  VAƄdr b] 8;,,EIȾi.142p-/ @8RJ  02`j~hp)6p!41t0-7sU:]( Dn3) [fbDTP@`@Q f`p`(jWc L"60r!0p1` ؘ,P.\7ZxC52S5z(I5d@c!2.ZPFdyؠ#7l'J9`ʠF #'`88 l I'P7"ӃXQqtbB WK`B'uPSz`bHV  rr*. ;a'Cu{؋ux,+|, `YDLp)U_1ž |) 7P-+@:@f"BvBՍ< (430Sc-s.gT+ ]hE0fΆnEM I:y0 /0M ҫb-K3WP"D P utVja`^ .10,6637p*sdSgncl 3'C;cCKg)K;g'hrАr`0(F`( "Dl\ @"6!X` hH  ,O\ R@A @S5R$cGKz!O`<6X3Hh% (#@!   t nv0 .I @ lrQ0 q0|: * Lǀ($&P8 7̝n AgRE?kT;c`D  0RI5I %9x$ج j ` 3`d X-aT+p.KCN@@+R.>Y^Էyp b:Ar9xM;k ) $ ;$@4[ o@'l O ][Wt zTj261u1$JY! y t  tAGFlN*3nP UH# @^ P ~ܠH 9@W:Z<.18'PQ00c#09O0 P ( AS`!cWh  r@; V0,++Pq) z: d,[`+X05:Ó@$x{?ϰuxL- x \AQT\!IpG bXJ# LU@?jHB#Lj80h(dT <R/K09;P 1[@ UZiH (L hЁ% bAf&R6'P  h_AlZV@A eA+LE jm1n˘ TbA5XðG-8BO|@OAH : r6P )5>Lπg3p ` `%x of)[fhF  `%%A bH&$>G@r!(p8 m!*O h D 6 <P 0\. h!wzH G|   (B 0 KA6@plmgazaaD.ň !˜S m%8U!>5O?4; ,;-vO /A"*DGa[FtNA(N,T!8:Tp5 8%P9bI?

NQP><2PZ% V$2( 2YDL3D!30;0 X#S )UHP 7 R[V^,)P 0Fo M13# (<4CH<0'P+D$@%)$5HW/BP#8^<:&:L58[,%JN38&4Y;!\9M#@",(4(\5n MH08"0 2!0 (1(,A$( C6@;8#P0=*8(^#@P"$K 01L 9W2@"4C,@$50A3 PX,E,@%CXj MX *-5 <#80#$9P"PT,]V<1WA9P"HT,_(8@#*P!;_<2L"<"ML$0 /#0EK 0D*i MP"=M,0!K40!K$=$/'1<'(-%M8=& ,@ /+=(B?1X3C5J0P 370 &<"L$4-(#h M@-($\- ( -&0$-,.D0" @A< 4 CW0($@%H(@%HQ'1QMD=,5<2LUW19K4=)!g M/1 0K=,9( & 0D;(-1!W195W18"L!9)_=$0;0 5+=1>W= -3=$- 0$27=,3f M[;Y5;1!$,! 4P P \ 0#40$B !5L-<&@05[;0( 0$D 4 && !D8-=;409[e MK0(@]M@X>]B031&90PP ( =[S1!SL-=( #\G#FT !X8-<\6=< , %6&P,Rd M, ,T4 ,V< ,XD -!( 1#0 1%8 0-80!;, -=L 5%( =R\ :1)0=E$ 9DD 9Nc M< 8@8-QS\ :.,09E )FD 9L4 8ZP _7=M/( 54T 4 8 1,4 4N( 53b M, 3$Z1 Q !,:P.+O0=.4 5,P 2Q(7(*D 70#0)M4 =S0 <@, 9OT 9P8-W3a M?0=I0 =H (*/MVWB99P0 =I\ ;D2@=O +*/09L4 =D,-UP( ?*30,C@"-WN@J@ N .8( .46 .8, ,HDP.8#v MX $@@ $<.BL;@"7#NL2P $0u MP.F>#NH40 $28 ' _NL@P %T7J-1GNP$H.Q1'N?++@$4H.42H !YXA!,_N?2t MKN7)I@#6_N0*( '8_NU_CNA:GNF[/NW@?A[?+N[4SNT#<.WJ[@$&0.=KONR"s M_N1T_N5?ONS\'N5/3M'S3@ J( $!0 A& 48(+!,$ .( %$@ $(8 $B0.T0r MX &;S@<*@ /&;@!^;@((X 'L0 ['0!D4.4H"!H(1DQ5+E)30P _^XFq M !T$B-X UQJ3P # *$"2 %O!@BUP "!1," %- #8 $ @ 2 @H(**"p MI@P(*VGDU)D#8DJ>-G#HO&D#@DB9-F_(12n M1PR;-&-:IIEY54R=FS'%BLD#X$B9LF<\2G$!XLJ;-V1\DBES<4 -&3%RE P#m MU$B9MV/24'[3\JH=QI &&$;,AC(9$$C2L&$SI^F0,(1!Y(@QPP8-$*&K3 G2l MF.-<$'#DO#E3D^7O,&+FO&%S]W(>$&[>T % AG)@X2,))]D:D\WSQ3!ETK19k MAB2=C@#LS$WCUN. !J&3-$U)*NF%-%)YVFUU1TPG;#5&j M6N2!4!8('&i M&2"X",)Y'K$QX4P@B)'&5F@DU889=;#A @!/+ $ 1QZY$48;Y8$PX&D=I16Bh ME#1"N"1C,37Y9(Q 6;&&:C;*T90899SAHALNG@' '3NB@2%//L4$@@Q#P4#8g M%)>5,<96568XTIIHO#&'>_"IU 9)>;Q1!PALSN&F2A"J1=U+,=%%'ADZ !"f M$&[.HB(98J?^^4G2;W/4 0<<@I9Q&J1D L#@',U>]6*!.;[E1HDS=@3Ad MJV6XH>)I9)8!!TEW= 14E5.P.E-2=)#D+ /_I;6H'009FP:BUWXVWDVA3A'c M1#'!& :BBD;J$<%;N>7B&L=6F"X<326ZZ'UOW!%NP=$Y2*,< 8;:HWEAK%&Nb M@[V&ZQ$9) Z)1,=E]-I4E91YJBR$$E)X\'G8914BAR2"\)88-!+!L@:&Q6z MO""@8,276%+$SJ3L?y M4'#0ZZ 9 %0Y![EN'.Y1YF-X9'>ZYH8Q1NEA7CHC9S$4-7:]P '[>.1^F]4Bx M2>!5.AY>H8, Q;XDB0B RL]!6NZTXO8N7DW #VFL&6F546O9(T%($]M-[N6Dw M3WU?>!.39KGXJQPBI418$:H_JO7#Z)G/4_K+N[/>!U^X6&G/8<-Av MX+"^]LWH?2[CT&7"P!!@'JT8@S2TE &,W@G?RO;5QV8!$$)CN$N/QG2\,I3O!79IPS)X\SRPC67s M287'4M$# P@88#>B,M#I]G9VC"8H^>,)$TALI9I5@*=*9))=YP9E(WVY" Wr M>(0^(%#(>U!B*/-P!F81 B $#3@^^#$&9FG94UFD!I0+.9$J52':'"A61M65q M#EO2XI:'GH/"&RXF,XM)VW0@-<KIp M)B\ZHG!84B6[T$$E,B'F93I&F/WP9PP4LP$(5@FAE92AD@?3Y8"&MJ"%N4E.o M32C3A=Y3N4-AK2B:BL&I9'"J&9SJ-IJJP:FTJ:D;!&M86PF;>T"'/7:!29;:n MNTK;WA:WPOVG;@N[6Q3=QC.E8LQ)(LG)I$i MK ^%P46$,<*#=F?7Y]E$K G\;*X^HTF2Z4MQ/9'JA'Q9R03NJE?3<28T8V3#h M/.TIE9HZ[E__"39(%& 2C3%%8TX!@ $ H(T F$!C_O&/\ (@ (U!16."T1AAg M=/>[ 1%O:,@+@ R\!SDM?]#X !1H# 0:' &26=<$&&[P/R!A$0-#X@ +M@AZ/W#? ),8e M "8^ !$ ,&$!U/>^!!AQB2]R "\(I"( D,!]"Z!C&/.89 4 0)([<%\#%#G&d MD B(D-MH8_0>H,@5N(@!&J( &@?YO@C LI830 \O4P0#]TV F-FH@ U[-P&:c MNJ\"GLQC !19 P XP44($(!9&%G(% E a MA0$PZ R'9L,.UC*(A2R 2-OBONCU=']:UUC"'=0V 2O=:VFP4 "/N'.P69[L5=SXVCK/MC#M[E]1*SK8[[FP1w M83L9Y 88P(5MG&0/E/O0 QB2C=OHZ(D W4@VGO" T:MFG ] #7>FR-+W[71%v MW!G.4Q?XCMDX@%7N-L!'&7/[[UG+>\RG%&KXO[/H!VI#SP%3DT 09MXYOZMX)]QYt MR3_'.0$D,O1&@UGQC[BST@E,9U&1F "QB#H EHYQNP\ UQ'@.*X5_PR2K][Ds MFH_'X9%]Z +P^KTPCW;?"S #FM\>O3[N%C-^G'r M!T#3AT\+U4]]SM"?QM6SKW4CL[$ \[ASGL-^: ,P6M#9A[A%+!!G$BM +(RNq MM+=G+5Y;OQ[O!@!BXL5WYF< !B!Q@#=U@U> !F $N[=R.&< :M)XEO9X$9@(p MQC=UR<> W,5\PG9E$8@,=]9&PE9]#"A^-D81PK9]#%AF-@9G10=^?7< OP=Vo M]U5^RW8 ,*!^V2=V%K%NJW8 3[!HX?9H"D< !S %>-9M1=AQ1W@ 5Q!BC)9Dn MGS9V07AO/C>%]P4!3_@%=W9A5 @ $?"$8["$8'A?$O"$:I)A9XA>$_"$(^5Sm M;1AA$1>$*8)JL0=GLD9WM.9ZL,=Q.W=H!V 'MB=L"YB#E_" Z)5L,_AK%!A\l M@F@-Q@=S&YB#]G!Y%?A\?8< PA?U'=H"$ #HH=X++AL"+!\$^%YZ"6#!8@ k MA/B"Y >*E?!U/0B*J7!V\5=ZJX8 [F5CC,9Z?-AE_O>'>=>'!&B*T6!["@B*j MZ6=C*K>(AY8 N 9\%MAW"2 #QF=ST:B$S.=\-!:-)#-]GX=S"2 )HSAUI3AFi MKI:"V<>*0$AB"?!V-M9E:4>'/P@ ;$< "0 -$ "@$ h M#[!A^1:0$H "\04&52)7:$5#38)""9,Q#7,V<$,F0Z,>>Z(U1L4H/?(K+4,Lg M+D(7=; G#',_$)('[61$*"(Z:>%"98"1B^(HBL(&%0(Y,@$PP.)5@I4W$P(Wf M@F,330%";,)",<(=9E ?P#4BH]10B](QH4,D1K($19 %(;O%,T/,D?)YE HL4@<%,=d M'B0'0[(==RD<9)"2K*5!;% ?WA,H)85'YL,9\,(J5,$3MY5,[/0K+ %"D%,5c M:0( .W("\Y$?,>(A(!(3R@-3BY5 =,,@B>$@9G$'5_$KCT68-34'-J(N(Z17b M@6%(-0$WD_43O]0G5L,HKT4[;UF31D21(=)!9W Xa MOX%6=@,Q7_0<;LD]G4"J;(J8@DJ(U&6:/ ;.Q-!$T2;A>0=0Q4O!O6<4O $33 %'.(Z," #w M,& #D8$#-B ]/TJCQ2FD5T2DW<%)_Y&D;K*D3?JDOW(:43JE57JE>D6F3BHCv M7D4W/:)855(=OR(J:4JE3\&F25 ?Q,*E%"060%F<:9&@AWE*2RE(]8&:8B2Au M_RDN=$.1RV(N::DZ!M(F3>$V-O)6WEE:;.":SV$W%R(&A\$?[7%$9>$A_0( t MA%FHAHF8&:2H=40XCYE,DH&9G!,4J53q MW#(@/X- _\- CK1-*?.@L@H34@(S30D70=*A"O0K>T(85^ N2SE#WM0_'_D9p M/L4A;] D-;%5*V&DE70:ID59<]4F/RDNGU,]0,$D$JM"^&(6.+M)(4*J=$JSo M!$4A9$ \AU,PU%H&,FL6Z.D1L^-(%C)$23%42&6S3?$@*) &G44H*QI1M\$Dn M9X <+-(DB-2S2J-H9LM*C442\U,6)($"=' @.;(2R9$"W.) X))2Q_)0G:HXm M-W4P:0M!Z..V(6)8P$(L+#I1>X-'[$FQ\FX#[)++VM$=1H2_KJ>B*2TR_E).+58VK&UQ%2])3R)!9$ 83S RC5*3 5I0\MF93"2C._)1@J62f ML\HO ^PL0U-)9H$=R&1+ , ^Q"53]KE ZU(>4(3$%U21>;-'+/%*ZR$GM#0Xe M6@N:[IN3+KNQ\6FI).$]2&0]>.0Y+EG 2]1$J L"7.P^5-1:*@G'#DM'=7H_d MMR4G!RHN>7P]%_(6SU2^V#E"(&"62(PBY0$ RDDTF40'1IJN-/$&4 DN#V*Mc MFSHF=\$H!Y66'?4PG-&T(128YU++UZ% -2P[4(>+4.OQ2&?-IPF0U(D-THJb M1,"\&N*CSQLJT8M-ZFJ^NQO#D+(8Y[.]-.6]W+DPX6O#Y.NTW(J^9?$R>@(Pa M[/NQ.,FY\7NH6MRJZO*J^*N8C!FJ_ N9_\NLE8E7F-G'OLJ95)$'PDH'HJG z MI7FLC-JZROJH'M&:&3P?L5G!M;F[/:/!?'$''9Q,R9E6I]2P(QS*/GO"2VM3y MH'3*+>PR+ZPV,?S(+T/#;&M%=_'-.4P2.[P5;K,4E1O$(##$45+$@JH_Q?D;x M2BQ5D-+$F>S3H6+'LPHY;C/ @>(Q,/0<07TPB)2_&_2Q=@.MSU0NU62X9F&Mw MBA754^(1<$2=E,,?OE(\'[DM -"Q*V/(]5*R*8LB;6"DQ@3%) K26;$5%#NPv M:=$I>2.Z+L)6@UQ(-)6A-8LWD 0'DC0'R"$=QXK%@2TZK"2U9A$'=1"ML=N4u M/%$NMYLCK8Q"<&.HB#DN-BM*](-'B;W+VJFEH<+)!_/)I"PJ\K)T]s MSSR]VXK2O063WZ2]@=V]";3-_0,4WGRJI'J^333.ZFO.MMJ^FBO'ZSR_K%J_r M[WR_B:F_]%RK,'*K^"S >-2KFVF7!ZPF"4R[QGJ:#NRH41G!#3W!6&W!$BW!q M&VS1.^+!0=1):RO",^S1)NR4(:W"H62PNN+"YSW-VZW2JUG#+GW#9#VZ,MU$p M-.W#-RW$1#P71BROV0/45+'$1D34QO+$M.,]2HTLR=34#NM%41V25+V85AU1o M6/TKP1,$7#TC*P/622'6%-+BVD,O: U8])M600[5*Z'8W3W*Y5'* )U,U*O=n MU]L41O"XFY+A5/#-K7'+F%3"3#0?$9K047F2?R55_ VI5/!1L9V2P,-< .!#m M-O(K36$C8: >MKH5* 03.*(U,.H3IPHIF00X'[0B+8+1RV32:!43,H3C)&$Wl M*(E-Q6PDQ#L%0W"\1> $TCT'S%S=)''=T5SBW7J]W'W-WZVUX5TTX+M+Y5V^k MNB[.$UO.,-/>Z/R^IV&_[(RES9P]-DRV;F"DY $ 6( 17P[ML)JH5;V_^LTED-+?ECG &[ _QS0 VW@#(RLi MCT1)Q $3D %23#KM7XL.@.]JXO=X,SFd ML_5(W?U"OP[RHP0 HDK>*_[-TGPWZ:O&R[[?[IW.\ OOI?/N]WYI*3<(]\>,6TT)U_3;)]*.5WC@^+RDI\&a M+0#SM[[C0LT9/BXN.2/_0'XY1EKU[R+H&"K-4D7%#[(OW\0M3F1.35*U> ,Yz M E1$?^Q$*O2K9=P_$H4Q1K3H]\DQ.F2?X@H<^\+98V435$,PG:1 J7X3GU$Ry MV7&N$14RKVL6332P>\+*HVOW/..:\L[D$543,D\&WF$A720URUFCQKP%,] %x M6P %CIXK9R"9;\ 'Z00S4P0"4E >RX%%,=$%6Q $0O $4D %70 6R #7; %w MPR,_9O')H-H%6_ :,709?" %&9P'70 6Q #7; %1% TKBFXPB$'7; %KQ%#v ME]$% + %,= %6T $1?/@@BL<V!Vs M + /OG!>\_ )W34/GP (#S .CP .?S ,A\ /?S (@\ /?C @, /># @, #r M%^$ +,!H , "!\D"71 0+* ' <$"F! 0+* + <$"V !D:&9=I38 4A 0 \ 8q MW<4YWO5?XU5>XE5J Z FW05AW14(#&9>\U5>]E5J R ( 3$ HQ 0 T *#&9>p M\U5>4U<18! 0!, Y%:$FW@5>#Q9AY=5&I48 $%$1YE(1*>)=X/5@$59>;51Jo M! ' 4$ A%@1=\!@8@AAIE9>;51J!( ' 4$ ?A 0!/ '#":&$&9JY=5&I48 n M$%81AA 0!' (#":&$&9JY=5&I48 B! 0!. ( 4$ H>==X/5@$59>;51J!!!Jm M%6$) 4$ B>A=X/5@$59>;51J!( ) 4$ GA 0!/ )#":&$&9JY=5&I48 H! 0l M!*!=%<%=W@5>#Q9AY=5&I48 ZE41KA 0!/ *#":&$&9JY=5&I48 L! 0!/!Kk M%7$+#":&$&9JY=5&I48 N! 0!. + 4$ O\!@8@AAIE9>;;2'6^B''.9A!: $j M )!E!&AK1!9[\(5\0+: MD9DL0< ]+=B[\6(=D=DL0< 0-!D0"9\YH=B8AANi M#HE\?G8 33"*0Y!Y6W< D:!ZO(%N?G8 **A]6RQO.!< ]C6/ / #7(AS L!>-B9D*D!Z Z=J[<8. . #YA5KLW9AP\AA'E8 -_!E!&AKf M1!9[MD<1;72(T_8.(69A$-AWO=9Q=\9DT%9D%Z!E+0 % ! #QN==E:AE \!De M0F81XJ6)!3@ ,<"$F(=N0#>$U49E\O9B6<9&+>!CXC5A0K:*:V8 +: '"'=Fd M-[AF!M "EM"'<"9L/EB U */+B#1NATD@A_.XA>F:9Y-<:$+7!?#Z!XHFACc ME29D:C=PJG9Z1P +8!PL39K23:,'.9A!0 % ' !(O9B&<9N 19[ML=H;;2 b M&<9N 19[JL=H;<2((<9N 19[7ZA]\"5\(<9N 19[3'AA< 9>199A;!=@L;?%a M"*E]E,>']C6,'.9A!0 % ' !(O9B&<9N 19[ML=H;>1F"&EW1!9[7[9B3,B(z M!4@ 2G!?H9%ET+9F!M "L@!L ,!DR+=F!M "+8=>-L9DF@@ 6<9&+: .SL9Dy MZ+9F!N ";;2( ,!D3+=F!N "P0< 3+:*:V8 +N #308 3,9G:V8 +J %Y08 x M3(9>/@@ 6<9&+D"(=<=D1OAB6<9&+F".3 < 3(9>F?9B6<9&+N *^,9D56@1w M6<9&+J ,-P@ 3(9>!)AE;.0"=H9>@\9DZ#6&+V9K1!9[ - #[P5G;92&+Y9Av M[!9@L:=ZC-9&;_AB&<9N 19[ % #/V9?%D$!199A[!9@L?>%V@=?%5!D&<9Nu M 19[3'AA<-9&%E!D&<9N 19[_7AA<-9&%U!D&<9N 19[GG=A<-9&&%!D&<9Nt M 19[ # D%P9G;90!199A[!9@L0< 47%A< 9>199A;!=@L0< ,W9A<.9D?)AEs MPPB 30 67:,6D8 P !L\"5XBL=>Z-5YT*AY[B5X\ 5MBI=?BPA?R*=XQ#!Dr M\*6)!4@ Q=!D\(5NBF<,Y09?3*=X;U=W;;2*BB>"3 =??*9XR8!O;81>/EB q M!* ,-PA?1JAYRU!H\(5>F:9YS'!?C-9&5=AW!- ,F 9?Z,6%FM=R%@9?Z#6&p MFE=[Z+5A;81>::AY_(A>L==&;@AN$W9ZR>@#YA5K&%9DU08$ 2%KL<>JSH9>o M%5!DU08$ =%KL<>J7^9=Z!4:]$=_&08$XQ4!L9<$+H=P%5!D&08&XQ5[;?=>n M.<:';32, )@I<':,6D8 V&![!B9XX(9>IUI\ S9AL39K&S:,l M'.9A!3 $(4: MD9DL6=[%-%&"XAJ$T9B!5!M"@%K$#A\/C=HZ+4"U5B !: $k M?>A=+X!MT*<'?6@1.ZB)!5@ 7C=H22:*Z-9[X-"';?0"\A:!&S9H$R9DJ]A^j M"0:+VX9G[>=C\P@ 48%>/LB F,"#46&$$2@-N+@#F":('L>$/7!?#R"(D\9Ii M ! 5Z,6%.'< AB!J * 0:B=MIH>$OW!GL3=H>WA?%S:,'.9A!2 $7T: [XB$h MS'![&Q9KPS9P$T9B!]!R-H!PL99X.'< XH=>Z*5OPE> ![!?@@< 0H!M.(< g M16<1V_:-.(< /L9MVV9T.(< F=!D , #\H9S""")5@8 /"!GT2A>=<<#-QB-f M4)!F % #"4>.AH!O-W!?D$:.OG"# ' #F!:-EXA>@[9M"'EH"A #]\5HVV:/e M1F9Z!* $H%>E8:->UAH?LAA'E8 0O!E!&AK1!9[MC=H;;2 MD9DL1=N%$$1d M;<2(!:@ GX!P-K:#T'9H"L"/;@8 V(A\AZ8 ^H!P<*8"F==W"R!Q!M9E$H=Nc MA[8 1F)@>59TZ*A[8 E&!DC#9YY?>.!+ W3=@&Q9KM 9Nb M$T9B"_!K-H!PL6:/ (!J^;@ N\"$&Q9KLY9GP\AA'E8 0O!E!&AK1!9[MD<1a M;;2 MD9DL:=Z%-%&C%B "] +QJA&U5B "\ .?0AG0X)\1\@ U>9PJ:B)!<@ z M3'8![P5BZ'9H##!C%_!C#LETA\8 ;0 %["$"[:*A\8 YG@!?8AJ?':$#(!Ry M [9AL6:/ (!JJD9B#/ * & #"!=KLW9AP\AA'E8 0O!E!&AK1!9[MD<1;;2 x MMD9DL:=Z%-%&C%B #-!]C*=&U5B ## .?0AG.XA\1]@ &>9PJ:B)!=@ ]$=_w MWJ5JZ'9H#> # $!_%J%J3'=H#< 8])=D,,>*R]8 B ]-=&%\9GA]8 F v M]-=E#HE>/EB #> + $!_>29Q1HAS#;!?]#=H((9>F89S#I!G],=HJ%:%]TAOu M#@!B [9AL6:/ (!JJD9B#N"0-H!PL39KPJAQ#N9A!2 $7T: MD9DL6=[%-%&t M"VAK1!9[JD<1;<2(!>@ +6",:E2-!>@ 7="'<+:#R'>$#N (3+AAL?:-..< s MH99A7>:0Z'9H#O!K&99GJL9TA^8 WA!B@Z9HJWB$#R!U"!=K]@@ J*9J)/8 r M768#"!=KL\9HP\AA'E8 0O!E!&AK1!9[MD<1;;2 MD9DL:=Z%-%&C%B #W!Aq MC*=&U5B #] #?0AG.XA\1_@ (^5PJ:B)!?@ ;0 %_!>((9NA_8 E %P!Dp MBL9TA_8 NP %Q!N$K>*A_8 X0 %P!?BL9GAP8!WG4!/^:0Z.6#!0@!*P o M%["$JF:$5DAB$# $M[=AL6:/ (!JJD9B$% $ & #"!=KL\9HP\AA'E8 0O!En M!&AK1!9[MF=?%K& [T@ $* $3+AAL99X S=A) 8!DV8#"!=K,8=S$! %S7=?m ML8=\AP8!9>ASWC5Y(-AW$# (S2=YX]AW$" *H^@#\H9S$! .JN<#!C\P@ /)!P.!%$-AW$G $'?=>j M/U"-!2@!A]!Q0!85R'=H$L!>[$ANFEB $[!WVM<7X]AW$R %M'@$\H9S$Y )i M/'@$/E"-!5@!H-!Q0&8#V(9S%2 +JD=NFEB f M%; /XW<$X]AW%C $M'@$\H9S%G (/'@$-.'c M/8!M.(FAT.(y M1T!Z Z=J),8!U58$ )!EL39K%S:,'.9A!0 % ' !(O9B&<9N 19[M@=G;72(x M6L8!/E=I;@B!?<T(AS(K -p M'?=>/U"-!3@"J%9I%C$$V(9S(X"*%$%NFEB (^ )XW<$X]AW(S .M'@$\H9So M)."0-I9G1R!GAT8"<("+Y,9GAT8"CLB$1Y!P.$<"_4!I $!N1HAS)3 $7]@7n MF'9H)6!U-K9A1W!?#W!H)?!W8M@7I#=PJD9B)3!S10 619KLQ9[P\AA'E8 m M4 %R!B+Y9A[!9@L6=[<-9&AZAE):![E>:&$-AW)I!DE>9=/U"-!6@",U9Il M%O$#V(9S)O ''1=N0)!Y?6<"O]!Q\&5?Z'9H)I - ."0;:2'VG=H)C .JD=Nk MJWAH)R 6L'@$-WAH)Q 'M'@$"8=S)^"(2W@$]P5I.'<"_H"+Y(9>F89S*. #j M1'@$]_4 AX8"%&=CE49NZ,6%.(<"S?"%?7%?8XAS*;!S"'<$I#=PJD9B*? "i M6PP 619KLU9IP\AA'E8 4 %R!B+Y9A[!9@L6=[<-9&AZAE*8"-E>:&$-AWh M*3!CE>9=0U"-!9@"A-!Q0#8$V(9S*9!?[$ANFEB *L!XVM<7X]AW*A %M'@$g M\H9S*H )/'@$$#VA 0/R . 1$$V @ d C0B ( 3$$ZA 019 I?>%O ( $XA 02J ' ;$$^A 03: *&@ 0c b end -- *George R. Woodside - Citicorp/TTI - Santa Monica, CA *Path: ..!{philabs|csun|psivax}!ttidca!woodside ----end PJ To:sfk@sknight Fcc:+outbox Subject: User Manual for the BLITTER -------- **** **** **** ****** ** ** ** ** ** ** ** ** ** User Manual for the Atari ST Bit-Block Transfer Processor (BLiTTER) The Atari Corporation Sunnyvale, California 15 June 1987 TABLE OF CONTENTS Introduction ...................................... 1 Bit-Block Transfers .......................... 2 Bit-Block Transfer ........................... 3 Functional Description ............................ 3 Programming Model ................................. 5 Register Map ................................. 5 Bit-Block Addresses .......................... 5 Source X Increment ...................... 6 Source Y Increment ...................... 6 Destination Address ..................... 6 Destination X Increment ................. 6 Destination Y Increment ................. 6 X Count ................................. 7 Y Count ................................. 7 Bit-Block Alignments ......................... 7 Endmask 1, 2, 3 ......................... 7 Skew .................................... 7 FXSR .................................... 7 NSFR .................................... 8 Logic Operations ............................. 8 Logic Operations ........................ 8 Halftone Operations .......................... 8 Halftone RAM ............................ 8 Line Number ............................. 8 Smudge .................................. 9 Halftone Operations ..................... 9 Bus Accesses ................................. 9 Hog ..................................... 9 Busy .................................... 9 Appendix A -- Programming Example ................. 10 Appendix B -- References .......................... 17 THE SCOPE OF THIS DOCUMENT is limited to a functional description of the Atari ST BLiTTER. This document is not a data sheet for system inte- gration, rather it is a user manual for system programming. For more information, please refer to the texts listed at the end of this document. *** INTRODUCTION The Atari ST Bit-Block Transfer Processor (BLiTTER) is a hardware imple- mentation of the bit-block transfer (BitBlt) algorithm. BitBlt can be simply described as a procedure that moves bit-aligned data from a source location to a destination location through a given logic operation. The BitBlt primitive can be used to perform such operations as: o Area seed filling o Rotation by recursive subdivision o Slice and smear magnification o Brush line drawing using Bresenham DDA o Text transformations (eg. bold, italic, outline) o Text scrolling o Window updating o Pattern filling And general memory-to-memory block copying [1]. The heart of BitBlt was first formally defined by Newman and Sproull in their description of the function RasterOp [2]. As defined, RasterOp performed its block transfers on a bit-by-bit basis and was limited to a small subset of possible source and destination Boolean combinations. Enhancements to RasterOp such as processing bits in parallel or intro- ducing a halftone pattern into the transfer were literally left as exercises for the reader. In an effort to improve the functionality and performance of the original algorithm, the prescribed enhancements were incorporated into the definition of RasterOp and implemented in hardware as the RasterOp Chip [3]. However the RasterOp Chip lacked the two-dimensionality of the original function and suffered from a performance bottleneck caused by the loading and reloading of source, destination, and halftone data (ie. it could not DMA). While efforts were being made to improve the performance of RasterOp, the formal definition of RasterOp was further refined and became the basis of the BitBlt copyLoop primitive in the Smalltalk-80 graphics kernel [4]. Because of its comprehensive interface definition, the BitBlt primitive was inefficient and required special-case optimizations that violated its general-purpose nature. Clearly a hardware solution was necessary to increase the performance of the BitBlt copyLoop without sacrificing its functionality. The Atari ST BLiTTER is a hardware solution to the performance problems of BitBlt. The BLiTTER is a DMA device that implements the full BitBlt copyLoop definition with the addition of a few minor extensions. Single word or multi-word increments and decrements are provided for transfers to destinations in Atari ST video display memory. A center mask, which would otherwise be a constant all ones, is also provided for an additional Atari BLiTTER doc - page 1 level of texture. The remainder of this document is directly based on the original functional description of the Atari ST BLiTTER. *** BIT-BLOCK TRANSFERS As previously stated, a bit-block transfer can be described as a procedure that moves bit-aligned data from a source location to a destination location through a given logic operation. There are sixteen logic combination rules associated with the merging of source and destination data. Note that this set contains all possible combinations between source and destination. The following table contains the valid BitBlt combination rules: LOGIC OPERATIONS (~s&~d)|(~s&d)|(s&~d)|(s&d) _______________________________________ | | | MSB LSB | OP | COMBINATION RULE | | | | 0 0 0 0 | 0 | all zeros | 0 0 0 1 | 1 | source AND destination | 0 0 1 0 | 2 | source AND NOT destination | 0 0 1 1 | 3 | source | 0 1 0 0 | 4 | NOT source AND destination | 0 1 0 1 | 5 | destination | 0 1 1 0 | 6 | source XOR destination | 0 1 1 1 | 7 | source OR destination | 1 0 0 0 | 8 | NOT source AND NOT destination | 1 0 0 1 | 9 | NOT source XOR destination | 1 0 1 0 | A | NOT destination | 1 0 1 1 | B | source OR NOT destination | 1 1 0 0 | C | NOT source | 1 1 0 1 | D | NOT source OR destination | 1 1 1 0 | E | NOT source OR NOT destination | 1 1 1 1 | F | all ones | |____|__________________________________| Adjustments to block extents and several other transfer parameters are determined prior to the invocation of the actual block transfer. These adjustments and parameters include clipping, skew, end masks, and overlap. Clipping. The source and destination block extents are adjusted to conform with a specified clipping rectangle. Since both source and destination blocks are of equal dimension, the destination block extent is clipped to the extent of the source block (or vice versa). Note that the block transfer need not be performed if the resultant extent is zero. Skew. The source-to-destination horizontal bit skew is calculated. End Masks. The left and right partial word masks are determined. The masks are merged if the destination is one word in width. Overlap. The block locations are checked for possible overlap in order to avoid the destruction of source data before it is transferred. Atari BLiTTER doc - page 2 In non-overlapping transfers the source block scanning direction is inconsequential and can by default be from upper left to lower right. In overlapping transfers the source scanning direction is also from upper left to lower right if the source-to-destination transfer direction is up and/or to the left (ie. source address is greater than or equal to destination address). However, if the overlapping source-to-destination transfer direction is down and/or to the right (ie. source address is less than destination address), then the source data is scanned from lower right to upper left. After the transfer parameters are determined the bit-block transfer operation can be invoked, transferring source to destination through the logic operation (HALFTONE and HOP will be described in the next section): *** BIT-BLOCK TRANSFER _________ _____________ ________________ | || | | | | SOURCE || SOURCE | | DESTINATION | |_________||_____________| |________________| |________________|<< SKEW | | | | ______________ ___|____ ________________ | | | | | | | | | HALFTONE |----| HOP |-----| LOGIC OP |--| |______________| |________| |________________| | | | ____|____ | | | | | ENDMASK |____| |_________| | _________|_________ | | | NEW DESTINATION | |___________________| *** FUNCTIONAL DESCRIPTION Please refer to the bit-block transfer diagram in the previous section. To understand how the components of a block transfer work, let's look at the simplest possible transfer. Take the case where we wish to fill a block of memory with either all zeros or all ones (OP = 0 or OP = F). In this case only the LOGIC OP block, which generates the ones or zeros, and the ENDMASK block are in the data path. If the end mask contains all ones, the BLiTTER will simply write one word after the other to the dest- ination address without ever reading the destination. As the writes take place the destination address will be adjusted according to the values in the DESTINATION X INCREMENT, DESTINATION Y INCREMENT, X COUNT, and Y COUNT registers. These registers define the size and shape of the block to be transferred. The X and Y COUNT registers define the size of the block. The X COUNT register specifies the number of word-size writes required to update one line of the destination. The Y COUNT register specifies the number of these lines in the block. The DESTINATION X INCREMENT register is a signed (2's Atari BLiTTER doc - page 3 complement) 16-bit quantity which is added to the destination address to calculate the address of the next destination word of the line. On the last write of the line the DESTINATION Y INCREMENT is added to calculate the address of the first word of the next line. The end mask determines which bits of the destination word will be up- dated. Bits of the destination which correspond to ones in the end mask will be updated. Bits of the destination which correspond to zeros in the end mask will remain unchanged. Note that if any bits of the destination are to be left unchanged, a read-modify-write is required. In order to improve performance a read will only be performed if it is required. There are three ENDMASK registers numbered 1 through 3. ENDMASK 1 is used only for the first write of the line. ENDMASK 3 is used only for the last write of the line. ENDMASK 2 is used for all other writes. Now let's consider a more complicated case, suppose we want to XOR a destination block with a 16 x 16 halftone pattern. First we load the HALFTONE RAM with the halftone pattern. Select halftone only using the HOP register and select source XOR destination using the OP register. The LINE NUMBER register is used to specify which of the 16 words of HALFTONE RAM is used for the current line. This register will be incremented or decremented at the end of each line according to the sign of the DES- TINATION Y INCREMENT register. Set the DESTINATION X and Y INCREMENT and X and Y COUNT registers to the appropriate values and start the transfer. This same procedure can be followed to do the combination using any logic operation by simply changing the value in the OP register. Similarly the combination can be performed using a source block instead of the HALFTONE RAM or using the logical AND of a source block and the HALFTONE RAM by changing the value of the HOP register. A source block is the same size as the destination block but may have different increments and address defined by the SOURCE X and Y INCREMENT and SOURCE ADDRESS registers. Finally, let's look at the case when the source and destination blocks are not bit-aligned. In this case we may need to read the first two source words into the 32-bit source buffer and use the 16 bits that line up with the appropriate bits of the destination, as specified by the SKEW reg- ister. When the next source word is read, the lower 16 bits of the source buffer is transferred to the upper 16 bits and the lower is replaced by the new data. This process is reversed when the source is being read from the right to the left (SOURCE X INCREMENT negative). Since there are cases when it may be necessary for an extra source read to be performed at the beginning of each line to "prime" the source buffer and cases when it may not be necessary due to the choice of end mask, a bit has been provided which forces the extra read. The FXSR (aka. pre-fetch) bit in the SKEW register indicates, when set, that an extra source read should be performed at the beginning of each line to "prime" the source buffer. Similarly the NFSR (aka post-flush) bit, when set, will prevent the last source read of the line. This read may not be necessary with certain combinations of end masks and skews. If the read is suppressed, the lower to upper half buffer transfer still occurs. Also in this case, a read- modify-write cycle is performed on the destination for the last write of each line regardless of the value of the corresponding ENDMASK register. Atari BLiTTER doc - page 4 *** PROGRAMMING MODEL The BLiTTER contains a set of registers that specify bit-block addresses, bit-block alignments, logic and halftone operations, and bus accesses. The register set-up time remains practically constant and is large relative to small block transfers, whereas large bit-blocks are dominated by the execution time of the transfer itself. ** REGISTER MAP The following is a map of the BLiTTER programmable registers (note that all unused bits read back as zeros): FF 8A00 |oooooooo||oooooooo| HALFTONE RAM FF 8A02 |oooooooo||oooooooo| FF 8A04 |oooooooo||oooooooo| : :: : FF 8A1E |oooooooo||oooooooo| FF 8A20 |oooooooo||ooooooo-| SOURCE X INCREMENT FF 8A22 |oooooooo||ooooooo-| SOURCE Y INCREMENT FF 8A24 |--------||oooooooo| SOURCE ADDRESS FF 8A26 |oooooooo||ooooooo-| FF 8A28 |oooooooo||oooooooo| ENDMASK 1 FF 8A2A |oooooooo||oooooooo| ENDMASK 2 FF 8A2C |oooooooo||oooooooo| ENDMASK 3 FF 8A2E |oooooooo||ooooooo-| DESTINATION X INCREMENT FF 8A30 |oooooooo||ooooooo-| DESTINATION Y INCREMENT FF 8A32 |--------||oooooooo| DESTINATION ADDRESS FF 8A34 |oooooooo||ooooooo-| FF 8A36 |oooooooo||oooooooo| X COUNT FF 8A38 |oooooooo||oooooooo| Y COUNT FF 8A3A |------oo| HOP FF 8A3B |----oooo| OP FF 8A3C |ooo-oooo| ||| |__|_____________ LINE NUMBER |||__________________ SMUDGE ||__________________ HOG |___________________ BUSY FF 8A3D |oo--oooo| || |__|_____________ SKEW ||___________________ NFSR |____________________ FXSR Atari BLiTTER doc - page 5 ** BIT-BLOCK ADDRESSES This subsection describes registers that specify bit-block origins, address increments, and extents. SOURCE ADDRESS This 23-bit register contains the current address of the source field (only word addresses may be specified). It may be accessed using either word or longword instructions. The value read back is always the address of the next word to be used in a source operation. It will be updated by the amounts specified in the SOURCE X INCREMENT and the SOURCE Y INCREMENT registers as the transfer progresses. SOURCE X INCREMENT This is a signed 15-bit register, the least significant bit is ignored, specifying the offset in bytes to the address of the next source word in the current line. This value will be sign-extended and added to the SOURCE ADDRESS register at the end of a source word fetch, whenever the X COUNT register does not contain a value of one. If the X COUNT register is loaded with a value of one this register is not used. Byte instructions can not be used to read or write this register. SOURCE Y INCREMENT This is a signed 15-bit register, the least significant bit is ignored, specifying the offset in bytes to the address of the first source word in the next line. This value will be sign-extended and added to the SOURCE ADDRESS register at the end of the last source word fetch of each line (when the X COUNT register contains a value of one). If the X COUNT register is loaded with a value of one this register is used exclusively. Byte instructions can not be used to read or write this register. DESTINATION ADDRESS This 23-bit register contains the current address of the destination field (only word addresses may be specified). It may be accessed using either word or long-word instructions. The value read back is always the address of the next word to be modified in the destination field. It will be updated by the amounts specified in the DESTINATION X INCREMENT and the DESTINATION Y INCREMENT registers as the transfer progresses. DESTINATION X INCREMENT This is a signed 15-bit register, the least significant bit is ignored, specifying the offset in bytes to the address of the next destination word in the current line. This value will be sign-extended and added to the DESTINATION ADDRESS register at the end of a destination word write, whenever the X COUNT register does not contain a value of one. If the X COUNT register is loaded with a value of one this register is not used. Byte instructions can not be used to read or write this register. DESTINATION Y INCREMENT This is a signed 15-bit register, the least significant bit is ignored, specifying the offset in bytes to the address of the first destination Atari BLiTTER doc - page 6 word in the next line. This value will be sign-extended and added to the DESTINATION ADDRESS register at the end of the last destination word write of each line (when the X COUNT register contains a value of one). If the X COUNT register is loaded with a value of one this register is used exclusively. Byte instructions cannot be used on this register. X COUNT This 16-bit register specifies the number of words contained in one destination line. The minimum number is one and the maximum is 65536 designated by zero. Byte instructions can not be used to read or write this register. Reading this register returns the number of destination words yet to be written in the current line, NOT necessarily the value initially written to the register. Each time a destination word is written the value will be decremented until it reaches zero, at which time it will be returned to its initial value. Y COUNT This 16-bit register specifies the number of lines in the destination field. The minimum number is one and the maximum is 65536 designated by zero. Byte instructions can not be used to read or write this register. Reading this register returns the number of destination lines yet to be written, NOT necessarily the value initially written to the register. Each time a destination line is completed the value will be decremented until it reaches zero, at which time the tranfer is complete. ** BIT-BLOCK ALIGNMENTS This subsection describes registers that specify bit-block end masks, source-to-destination skew, and source data fetching. ENDMASK 1, 2, 3 These 16-bit registers are used to mask destination writes. Bits of the destination word which correspond to ones in the current ENDMASK register will be modified. Bits of the destination word which correspond to zeros in the current ENDMASK register will remain unchanged. The current ENDMASK register is determined by position in the line. ENDMASK 1 is used only for the first write of a line. ENDMASK 3 is used only for the last write of a line. ENDMASK 2 is used in all other cases. In the case of a one word line ENDMASK 1 is used. Byte instructions can not be used to read or write these registers. SKEW The least significant four bits of the byte-wide register at FF 8A3D specify the source skew. This is the amount the data in the source data latch is shifted right before being combined with the halftone mask and destination data. FXSR FXSR stands for Force eXtra Source Read. When this bit is set one extra source read is performed at the start of each line to initialize the remainder portion source data latch. Atari BLiTTER doc - page 7 NFSR NFSR stands for No Final Source Read. When this bit is set the last source read of each line is not performed. Note that use of this and/or the FXSR bit the requires an adjustment to the SOURCE Y INCREMENT and SOURCE ADDRESS registers. ** LOGIC OPERATIONS This subsection describes registers that specify the logic combinations of source and destination bit-block data. The least significant four bits of the byte-wide register at FF 8A3B specify the source/destination combination rule according to the following table: _______________________________________ | | | | OP | COMBINATION RULE | | | | | 0 | all zeros | | 1 | source AND destination | | 2 | source AND NOT destination | | 3 | source | | 4 | NOT source AND destination tination | | 5 | destination | | 6 | source XOR destination | | 7 | source OR destination | | 8 | NOT source AND NOT destination on | | 9 | NOT source XOR destination | | A | NOT destination | | B | source OR NOT destination | | C | NOT source | | D | NOT source OR destination | | E | NOT source OR NOT destination | | F | all ones | |____|__________________________________| ** HALFTONE OPERATIONS This subsection describes registers that specify the halftone pattern memory, halftone word index, and combinations of source and halftone data. HALFTONE RAM This RAM holds a 16x16 halftone pattern mask. Each word is valid for one line of the destination field and is repeated every 16 lines. The current word is pointed to by the value in the LINE NUMBER register. These registers may be read, but can not be accessed using byte-wide instructions. LINE NUMBER The least significant four bits of the byte-wide register at FF 8A3C specify the current halftone mask. The current value times two plus FF Atari BLiTTER doc - page 8 8A00 gives the address of the current halftone mask. This value is incremented or decremented at the end of each line and will wrap through zero. The sign of the DESTINATION Y INCREMENT determines if the line number is incremented or decremented (increment if positive, decrement if negative). SMUDGE The SMUDGE bit, when set, causes the least significant four bits of the skewed source data to be used as the address of the current halftone pattern. Note that the halftone operation is still valid when SMUDGE is set. HALFTONE OPERATIONS The least significant two bits of the byte-wide register at FF 8A3A specify the source/halftone combination rule according to the following table: _____________________________ | | | | HOP| COMBINATION RULE | | | | | 0 | all ones | | 1 | halftone | | 2 | source | | 3 | source AND halftone | |____|________________________| ** BUS ACCESSES This subsection describes registers that specify bus access control and BLiTTER start/status. HOG The HOG bit, when cleared, causes the processor and the blitter to share the bus equally. In this mode each will get 64 bus cycles while the other is halted. When set, the bit will cause the processor to be halted until the transfer is complete. In either case the BLiTTER will yield to other DMA devices. Bus arbitration may allow the processor to execute one or more instructions even in hog mode. Therefore, don't assume that the instruction following the one which sets the BUSY bit will be executed only after the transfer is complete. The BUSY bit may be polled to achieve this kind of synchronization. BUSY The BUSY bit is set after all the other registers have been initialized to begin the transfer operation. It will remain set until the transfer is complete. The interrupt line is a duplicate of this bit. See the Programming Example for more details on how to use the BUSY bit. Atari BLiTTER doc - page 9 Appendix A -- Programming Example In order to maintain software compatibility with new or upgraded Atari STs equipped with the BLiTTER, software developers need only follow guidelines set forth by the VDI and "LINE A" documents. Revised TOS ROMs will work in concert with the BLiTTER, enhancing the performance of many VDI and "LINE A" operations. This occurs in a manner transparent to an executing program. Thus no special actions need be taken to utilize the performance advantages of the BLiTTER. As a rule of thumb, never make a VDI or "LINE A" call from within an interrupt context since unpredictable and potentially catastrophic results will occur should one BLiTTER operation interrupt another BLiTTER operation. The following program has not been optimized and is presented here for exemplary purposes only. * (c) 1987 Atari Corporation * All Rights Reserved. * BLiTTER BASE ADDRESS BLiTTER equ $FF8A00 * BLiTTER REGISTER OFFSETS Halftone equ 0 Src_Xinc equ 32 Src_Yinc equ 34 Src_Addr equ 36 Endmask1 equ 40 Endmask2 equ 42 Endmask3 equ 44 Dst_Xinc equ 46 Dst_Yinc equ 48 Dst_Addr equ 50 X_Count equ 54 Y_Count equ 56 HOP equ 58 OP equ 59 Line_Num equ 60 Skew equ 61 * BLiTTER REGISTER FLAGS fHOP_Source equ 1 fHOP_Halftone equ 0 fSkewFXSR equ 7 fSkewNFSR equ 6 fLineBusy equ 7 fLineHog equ 6 fLineSmudge equ 5 Atari Blitter doc - Appendix A page A.10 * BLiTTER REGISTER MASKS mHOP_Source equ $02 mHOP_Halftone equ $01 mSkewFXSR equ $80 mSkewNFSR equ $40 mLineBusy equ $80 mLineHog equ $40 mLineSmudge equ $20 * E n D m A s K d A t A * * These tables are referenced by PC relative instructions. Thus, * the labels on these tables must remain within 128 bytes of the * referencing instructions forever. Amen. * * 0: Destination 1: Source <<< Invert right end mask data >>> lf_endmask: dc.w $FFFF rt_endmask: dc.w $7FFF dc.w $3FFF dc.w $1FFF dc.w $0FFF dc.w $07FF dc.w $03FF dc.w $01FF dc.w $00FF dc.w $007F dc.w $003F dc.w $001F dc.w $000F dc.w $0007 dc.w $0003 dc.w $0001 dc.w $0000 * TiTLE: BLiT_iT * * PuRPoSE: * Transfer a rectangular block of pixels located at an * arbitrary X,Y position in the source memory form to * another arbitrary X,Y position in the destination memory * form using replace mode (boolean operator 3). * The source and destination rectangles should not overlap. * * iN: * a4 pointer to 34 byte input parameter block * * Note: This routine must be executed in supervisor mode as * access is made to hardware registers in the protected region * of the memory map. * Atari Blitter doc - Appendix A page A.11 * * I n p u t p a r a m e t e r b l o c k o f f s e t s SRC_FORM equ 0 ; Base address of source memory form .l SRC_NXWD equ 4 ; Offset between words in source plane .w SRC_NXLN equ 6 ; Source form width .w SRC_NXPL equ 8 ; Offset between source planes .w SRC_XMIN equ 10 ; Source blt rectangle minimum X .w SRC_YMIN equ 12 ; Source blt rectangle minimum Y .w DST_FORM equ 14 ; Base address of destination memory form .l DST_NXWD equ 18 ; Offset between words in destination plane.w DST_NXLN equ 20 ; Destination form width .w DST_NXPL equ 22 ; Offset between destination planes .w DST_XMIN equ 24 ; Destination blt rectangle minimum X .w DST_YMIN equ 26 ; Destination blt rectangle minimum Y .w WIDTH equ 28 ; Width of blt rectangle .w HEIGHT equ 30 ; Height of blt rectangle .w PLANES equ 32 ; Number of planes to blt .w BLiT_iT: lea BLiTTER,a5 ; a5-> BLiTTER register block * * Calculate Xmax coordinates from Xmin coordinates and width * move.w WIDTH(a4),d6 subq.w #1,d6 ; d6<- width-1 move.w SRC_XMIN(a4),d0 ; d0<- src Xmin move.w d0,d1 add.w d6,d1 ; d1<- src Xmax=src Xmin+width-1 move.w DST_XMIN(a4),d2 ; d2<- dst Xmin move.w d2,d3 add.w d6,d3 ; d3<- dst Xmax=dstXmin+width-1 * * Endmasks are derived from source Xmin mod 16 and source Xmax * mod 16 * moveq.l #$0F,d6 ; d6<- mod 16 mask move.w d2,d4 ; d4<- DST_XMIN and.w d6,d4 ; d4<- DST_XMIN mod 16 add.w d4,d4 ; d4<- offset into left end mask tbl move.w lf_endmask(pc,d4.w),d4 ; d4<- left endmask move.w d3,d5 ; d5<- DST_XMAX and.w d6,d5 ; d5<- DST_XMAX mod 16 add.w d5,d5 ; d5<- offset into right end mask tbl move.w rt_endmask(pc,d5.w),d5 ; d5<-inverted right end mask not.w d5 ; d5<- right end mask Atari Blitter doc - Appendix A page A.12 * * Skew value is (destination Xmin mod 16 - source Xmin mod 16) * && 0x000F. Three discriminators are used to determine the * states of FXSR and NFSR flags: * * bit 0 0: Source Xmin mod 16 =< Destination Xmin mod 16 * 1: Source Xmin mod 16 > Destination Xmin mod 16 * * bit 1 0: SrcXmax/16-SrcXmin/16 <> DstXmax/16-DstXmin/16 * Source span Destination span * 1: SrcXmax/16-SrcXmin/16 == DstXmax/16-DstXmin/16 * * bit 2 0: multiple word Destination span * 1: single word Destination span * * These flags form an offset into a skew flag table yielding * correct FXSR and NFSR flag states for the given source and * destination alignments * move.w d2,d7 ; d7<- Dst Xmin and.w d6,d7 ; d7<- Dst Xmin mod16 and.w d0,d6 ; d6<- Src Xmin mod16 sub.w d6,d7 ; d7<- Dst Xmin mod16-Src Xmin mod16 * ; if Sx&F > Dx&F then cy:1 else cy:0 clr.w d6 ; d6<- initial skew flag table index addx.w d6,d6 ; d6[bit0]<- intraword alignment flag lsr.w #4,d0 ; d0<- word offset to src Xmin lsr.w #4,d1 ; d1<- word offset to src Xmax sub.w d0,d1 ; d1<- Src span - 1 lsr.w #4,d2 ; d2<- word offset to dst Xmin lsr.w #4,d3 ; d3<- word offset to dst Xmax sub.w d2,d3 ; d3<- Dst span - 1 bne set_endmasks ; 2nd discriminator is one word dst * When destination spans a single word, both end masks are merged * into Endmask1. The other end masks will be ignored by the BLiTTER and.w d5,d4 ; d4<- single word end mask addq.w #4,d6 ; d6[bit2]:1 => single word dst set_endmasks: move.w d4,Endmask1(a5) ; left end mask move.w #$FFFF,Endmask2(a5) ; center end mask move.w d5,Endmask3(a5) ; right end mask cmp.w d1,d3 ; the last discriminator is the bne set_count ; equality of src and dst spans addq.w #2,d6 ; d6[bit1]:1 => equal spans Atari Blitter doc - Appendix A page A.13 set_count: move.w d3,d4 addq.w #1,d4 ; d4<- number of words in dst line move.w d4,X_Count(a5) ; set value in BLiTTER * Calculate Source starting address: * * Source Form address + * (Source Ymin * Source Form Width) + * ((Source Xmin/16) * Source Xinc) move.l SRC_FORM(a4),a0 ; a0-> start of Src form move.w SRC_YMIN(a4),d4 ; d4<- offset in lines to Src Ymin move.w SRC_NXLN(a4),d5 ; d5<- length of Src form line mulu d5,d4 ; d4<- byte offset to (0, Ymin) add.l d4,a0 ; a0-> (0, Ymin) move.w SRC_NXWD(a4),d4; d4<- offset between consecutive move.w d4,Src_Xinc(a5) ; words in Src plane mulu d4,d0 ; d0<- offset to word containing Xmin add.l d0,a0 ; a0-> 1st src word (Xmin, Ymin) * Src_Yinc is the offset in bytes from the last word of one Source * line to the first word of the next Source line mulu d4,d1 ; d1<- width of src line in bytes sub.w d1,d5 ; d5<- value added to ptr at end move.w d5,Src_Yinc(a5) ; of line to reach start of next * Calculate Destination starting address move.l DST_FORM(a4),a1 ; a1-> start of dst form move.w DST_YMIN(a4),d4 ; d4<- offset in lines to dst Ymin move.w DST_NXLN(a4),d5 ; d5<- width of dst form mulu d5,d4 ; d4<- byte offset to (0, Ymin) add.l d4,a1 ; a1-> dst (0, Ymin) move.w DST_NXWD(a4),d4 ; d4<- offset between consecutive move.w d4,Dst_Xinc(a5) ; words in dst plane mulu d4,d2 ; d2<- DST_NXWD * (DST_XMIN/16) add.l d2,a1 ; a1-> 1st dst word (Xmin, Ymin) * Calculate Destination Yinc mulu d4,d3 ; d3<- width of dst line - DST_NXWD sub.w d3,d5 ; d5<- value added to dst ptr at move.w d5,Dst_Yinc(a5) ; end of line to reach next line * The low nibble of the difference in Source and Destination alignment * is the skew value. Use the skew flag index to reference FXSR and * NFSR states in skew flag table. and.b #$0F,d7 ; d7<- isolated skew count or.b skew_flags(pc,d6.w),d7 ; d7<- necessary flags and skew Atari Blitter doc - Appendix A page A.14 move.b d7,Skew(a5) ; load Skew register move.b #mHOP_Source,HOP(a5) ; set HOP to source only move.b #3,OP(a5) ; set OP to "replace" mode lea Line_Num(a5),a2 ; fast refer to Line_Num register move.b #fLineBusy,d2 ; fast refer to LineBusy flag move.w PLANES(a4),d7 ; d7 <- plane counter bra begin * T h e s e t t i n g o f s k e w f l a g s * * * QUALIFIERS ACTIONS BITBLT DIRECTION: LEFT -> RIGHT * * equal Sx&F> * spans Dx&F FXSR NFSR * * 0 0 0 1 |..ssssssssssssss|ssssssssssssss..| * |......dddddddddd|dddddddddddddddd|dd..............| * * 0 1 1 0 |......ssssssssss|ssssssssssssssss|ss..............| * |..dddddddddddddd|dddddddddddddd..| * * 1 0 0 0 |..ssssssssssssss|ssssssssssssss..| * |...ddddddddddddd|ddddddddddddddd.| * * 1 1 1 1 |...sssssssssssss|sssssssssssssss.| * |..dddddddddddddd|dddddddddddddd..| skew_flags: dc.b mSkewNFSR ; Source span < Destination span dc.b mSkewFXSR ; Source span > Destination span dc.b 0 ; Spans equal Shift Source right dc.b mSkewNFSR+mSkewFXSR ; Spans equal Shift Source left * When Destination span is but a single word ... dc.b 0 ; Implies a Source span of no words dc.b mSkewFXSR ; Source span of two words dc.b 0 ; Skew flags aren't set if Source and dc.b 0 ; Destination spans are both one word next_plane: move.l a0,Src_Addr(a5) ; load Source pointer to this plane move.l a1,Dst_Addr(a5) ; load Dest ptr to this plane move.w HEIGHT(a4),Y_Count(a5) ; load the line count move.b #mLineBusy,(a2) ; <<< start the BLiTTER >>> add.w SRC_NXPL(a4),a0 ; a0-> start of next src plane add.w DST_NXPL(a4),a1 ; a1-> start of next dst plane Atari Blitter doc - Appendix A page A.15 * The BLiTTER is usually operated with the HOG flag cleared. * In this mode the BLiTTER and the ST's cpu share the bus equally, * each taking 64 bus cycles while the other is halted. This mode * allows interrupts to be fielded by the cpu while an extensive * BitBlt is being processed by the BLiTTER. There is a drawback in * that BitBlts in this shared mode may take twice as long as BitBlts * executed in hog mode. Ninety percent of hog mode performance is * achieved while retaining robust interrupt handling via a method * of prematurely restarting the BLiTTER. When control is returned * to the cpu by the BLiTTER, the cpu immediately resets the BUSY * flag, restarting the BLiTTER after just 7 bus cycles rather than * after the usual 64 cycles. Interrupts pending will be serviced * before the restart code regains control. If the BUSY flag is * reset when the Y_Count is zero, the flag will remain clear * indicating BLiTTER completion and the BLiTTER won't be restarted. * * (Interrupt service routines may explicitly halt the BLiTTER * during execution time critical sections by clearing the BUSY flag. * The original BUSY flag state must be restored however, before * termination of the interrupt service routine.) restart: bset.b d2,(a2) ; Restart BLiTTER and test the BUSY nop ; flag state. The "nop" is executed bne restart ; prior to the BLiTTER restarting. * ; Quit if the BUSY flag was clear. begin: dbra d7,next_plane rts Atari Blitter doc - Appendix A page A.16 Appendix B -- References [1] Rob Pike, Leo Guibas, and Dan Ingalls, 'SIGGRAPH'84 Course Notes: Bitmap Graphics', AT&T Bell Laboratories 1984. [2] William Newman and Robert Sproull, 'Principles of Interactive Computer Graphics', McGraw-Hill 1979, Chapter 18. [3] John Atwood, '16160 RasterOp Chip Data Sheet', Silicon Compilers 1984. See also 'VL16160 RasterOp Graphics/Boolean Operation ALU', VLSI Technology 1986. [4] Adele Goldberg and David Robson, 'Smalltalk-80: The Language and its Implementation', Addison-Wesley 1983, Chapter 18. Atari Blitter doc - Appendix B B.17 Cheers, Graham ====== ------------------------------------------------------------------ Graham Higgins @ HP Labs | Phone: (0272) 799910 x 24060 Information Systems Centre | gray@hpl.hp.co.uk Bristol | gray%hplb.uucp@ukc.ac.uk U.K. | gray@hplb.hpl.hp.com Article 21737 of comp.sys.atari.st: Path: mucs!ukc!mcsun!uunet!aplcen!samsung!cs.utexas.edu!sun-barr!newstop!sun!imagen!atari!apratt From: apratt@atari.UUCP (Allan Pratt) Newsgroups: comp.sys.atari.st Subject: Re: Atari STE Sound chips Message-ID: <2062@atari.UUCP> Date: 1 Mar 90 19:46:57 GMT References: <1990Feb24.222700.22004@newcastle.ac.uk> <729@duteca.UUCP> <1990Feb28.195455.17049@chaos.cs.brandeis.edu> Organization: Atari Corp., Sunnyvale CA Lines: 39 topgun@chaos.cs.brandeis.edu (Chandra Bajpai) writes: >What type of sound chip does the STE use? Is it different from the ST? >Does the quality of the sound chip rival that of the Mac II/NeXT/Amiga? The STe has two sound subsystems. One is like the ST's: it's a Yamaha PSG (Programmable Sound Generator), also available from General Instruments (I think), which is why you see it referred to as "The PSG" and "The GI Sound Chip." The other sound subsystem in the STe is our own creation: it's a two-channel 8-bit digital-to-analog converter which is fed by DMA (direct memory access), which means the processor can set it up and then go do something else while it's playing. You will hear that referred to as "digital sound" or "DMA sound." Data goes to the DAC at 50KHz, 25KHz, 12.5KHz, or 6.25KHz, selected in software. There are two channels, one left and one right. You can play monaural sound out BOTH speakers and use only half the data. The quality is very good. I don't know how to quantify that. Remember that digital sound is only as good as your sampler plus your playback (including amp and speakers), and the STe serves as part of the playback system: you provide the amp and speakers. The sound will come out the monitor's speaker, but that's not stereo and it's just not up to the task. The NeXT box has a DSP (digital signal processor), which doesn't just play back sound, it GENERATES it from formulas or other data. That's a different beast altogether. Amiga's the same way. I guess those chips can simply play a sampled sound, and I don't know how to compare them against the STe's sound capability. The STe is certainly better than the Mac's digital-sound-output mode: the (highest) sampling rate is higher and we use better filters to smooth out the "jaggies." For more technical specs you'll have to write to Atari; I don't know anything about audio electronics. ============================================ Opinions expressed above do not necessarily -- Allan Pratt, Atari Corp. reflect those of Atari Corp. or anyone else. ...ames!atari!apratt `3 $.|MNB.NA"/0<NBNu#INN/9INu#INA/9INu op0/ g<0H@<0Nu?P N^NuNV>P?9P?9P?9P?< N,DP3OBWBg/<IZ?<?9ON+B .P/<R/<R/<R?9O?<?9P?9P?< BgN*09PyRHyR09PyP|HyR>P?9R?9R?9R?9ON, P>P?9R?9R?9R?<$?<$09PH?09RW09RH?09RWN.N^NuNV.///?< ?9ON+=n =n =n=n`=n=n=n=n./N* XJ@g,>?.?.?.?<?./<9N-V.///?< ?9ON+Jng Jnf\3SP3SP09SyS|3P09SyR|3P.P?<?9SN2XN^NuNV.IjN0=@ ngX3cOBn`*0n"|P0H2nO2n no.O?<?.N0XN^NuNVN1.O/<O/<O/<ON- 3O3pO3O yOo=|`00.мC @0.мC @n nmBn`00.м? @0.м? @n n&m?O?t09OyO3O93OC4.Is?9ON-T3O.P/<P/<P/<P?<BgN+3O3P&ByPNNN!>SN3N#NfNN^NuNV`.S/<O/<S/<S/<O/<OBg?N+(.S/<S/<S/<P?< ?9ON+.gNN<09OyPfj>R?9S?9S?9S?<?</<9N-V>R?9S?9S?9S?<?</<9N-V`v yOgj>O?9O?9O?9OBgNrP`T09OܰyOf BWBgBgBg?< ?9ON+B `"09OܰyOf( yOgN>SN33O`09OܰyOfN>ON+>R?9S?9S?9S?9O?9O09RH?09SW09SH?09SWN.h>ON+>SN33O`F09OܰyOfr>O?9O?9O?9O?<?9ON+B .R/<S/<S/<S?<?9ON+3S93S9`09OްyOfNf yOffNN!NNO?9O?<Bg/<9N- =@` >O?<?<?</<9N. ?0<_HP ?N)T3O.:0/<5.?<?9ONPN` v>O?<?<?</<9N. ?0<_HP ?N)T3O.:`/<52?<?9ONPN` >O?<?< ?</<9N. ?0<_HP ?N)T3O.:/<56?<?9ONPN` BW?9OWN*T3O.:0/<5.?<?9ONPNByP&` V>O?9OWN)T3O.:0/<5.?<?9ONPNByP&` BW?9OWN*T3O.:`/<52?<?9ONPNByP&` >O?9OWN)T3O.:`/<52?<?9ONPNByP&` vBW?9OWN*T3O.:/<56?<?9ONPNByP&` .>O?9OWN)T3O.:/<56?<?9ONPNByP&`>Q/<=/<=?<+?<*?<(NtH?WNT`.=/<>?</?<.?<,Nt H2>W?9QNT`^=|6`X0.м9 @( g8>Bg?9R?9S?9S?9SBg?./<9N,n n:o>?<?9R?9S?9S?9SBg?./<9N,0.|3Q>?.WN/TByP&`BW?<?./<9N.6PJ@g>/<9N/X>Bg?9R?9S?9S?9SBg?</<9N,>Bg?9R?9S?9S?9SBg?</<9N,NNN<>R?9S?9S?9S?<?</<9N-V>R?9S?9S?9S?<?</<9N-V`| yQN#>R?9S?9S?9S?<?<1/<9N-VByP&`2 yQN#>R?9S?9S?9S?<?<3/<9N-VByP&`BW?<?./<9N.6PJ@g0N!By>>R?9S?9S?9SBgNrP`0.|3P.S?<?9P?9SN2\09SHO3O.:0/<5.?<?9ONP09SHO3O.:`/<52?<?9ONP09SHO3O.:/<56?<?9ONP=|`n0.м9 @( fN <2.Ҽ9"A >R?9S?9S?9S?<?./<9N-Vn no09:y;f <:>R?9S?9S?9S?<?< /<9N-Vy:y:y:y::>R?9S?9S?9S?<?< /<9N-VJyPg <2.Ҽ9"A `*3;:3; :3; :3; :>R?9S?9S?9S?<?./<9N-VByP&`"3?h>R?9S?9S?9SBg?<=/<9N-VN$@By?h>R?9S?9S?9SBg?<=/<9N-V`3?>R?9S?9S?9SBg?<>/<9N-VN#=|`0.мC @Bh n nmBn`80n"|S0H2.A|мC @1| n nm.////<CN/ 0.|3C.0.|3C0>?.?.?.?<$?<$BgBgBgN/V>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<Bg/<CN-VBW/<CN/X|f^Bn`B0.|мC @( gB@`0<"|S4nn nmN#N z>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<$?<$BgBg?<N/VBy?>R?9S?9S?9SBg?<>/<9N-V`(ByP&``||=b@0@Ff PN` 3P&.g<09O|| f*N!>R?9S?9S?9SBgNrPBWN+(`N^NuNV. ?.N@T>?<V09On29O|?N2 X? n0>R?9S?9S?9S?<?. /<9N-VN^NuNVBW?. ?. /<9N.P=@/.?<?<m?.N2 \ _0"n2>R?9S?9S?9S?<?./<9N-V0.`N^NuNV09OO3S09OO3S09OO3S.S?9P?9SN2$XBn`009Pn0@P2nS1Qjn nmN^NuNV> ?.?<#N X3Q3 QN^NuNV>,N0=@0.@|?3T0.2< `|3O>*N0=@0.|3S0.@|3R0.2< `||PHdH@3ON^NuNV>?9S/<5@N\>?9R/<5BN\BW?9O/<5DN\BW?9T/<5 y Oo?9OW`?9O/<5:N\`>?< /<5:N\ y Ol 0<A`0<P5>N^NuNV.5DN@=@ nPl0.|` 0.|=@0.2< `=@.5BN@|@n.5@N@|n>?<+N0T.5:N@|=@ 9P5>f n ln 9A5>f n fBn.5?<-N0T>,N0/?<*N0THr㠀.?<N TN^NuNV n  fB@` nH| =@ nHn|`N^NuNVJng0. H f 0< `0. H |0"n0. H H@|0"nN^NuNV>/<SN,X-|S` n #@Df n a@DfBn`( nH|2nPn no9PHHмF @O-|S` n #@Df n b@DfBn`( nH|2nSn nm-|S` n #@Df n c@DfBn`0 nH|O2nP2n n0m=|0`* nH|2nP2n n3m.N@3Q&.N@3Q(N^NuNV>/<SN,X-|SBn``.S?<?.?9SN2\Bn`.0.n0@P2nS1Qjn nmn0.yOmBn`$0nP2nP0jn n5m` n #@Df n c@DfBn`20n"|P00jHO|0"nn n0m=|0`*0n"|P00j|0"nn n3mBW?9Q/.N\BW?9Q/.N\>/<SN,~XN^NuNV>/<SN,X-|S` n #@Df n b@DfBn`*0n"|S0H|0"nn nm>/<SN,~XN^NuNVBn`$0nP2nP1Qjn n5mBn`.0.@HмP.?.?9SN2$Xn nm09P0@"|P00HO3O.5.?9ON@T>?<V09O|29OyO?N2 X3:009P|0@"|P00HO3O.52?9ON@T>?<V09O|29OyO?N2 X3:`09P|0@"|P00HO3O.56?9ON@T>?<V09O|29OyO?N2 X3:N#=|6`0.м9 @Bh n n:o09Q |6м9 @1| >?<m09Q&|?N2 X3=3=>?<m09Q(|2?N2 X3=3>>Q(?9Q&NTN^NuNV>Q?9QNVTJyQg <9|` <9#>bJyQg <9`` <9n#>N^NuNV9SH@>9SH@W9SH@W9SH@W9SH@W9SHW?<!N TN^NuNVBnN(8ByCByB.////<?N/ >?.?.?.?<$?<$BgBgBgN/V>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<Bg/<?N-VBW/<?N/X`tN(8=|`N'=|`xBn`n n'm9Ol O9OH0@E#@>?.?.?.?<?< /<?N-V>?<?.?.?.?.Bg?</<?N,`Bn`n n'm 9O@9ODmB9O9OH0@E#@>?.?.?.?<?< /<?N-V>?<?.?.?.?.Bg?< /<?N,`*`&| gJ|g|$g|%gp`JngP>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<$?<$BgBg?<N/VN^NuNV |E9OHHP=|`20.м? @ h f0.|HPn no yAxf B9P` P yB8f B9P` P=|`20.м? @ h f0.|HPn noB9P yBf 9P yBf 9PN)LNfNN^NuNV=| `0.м? @Bh n n&m9PH0@"|F0H0@E#@9PH|м? @1| 9PH|м? @1| 9PH|м? @1| 9PH|м? @1| 9Pg3B` 3B9Pg3B` 3BN^NuNV>/<SN,X-|S` n #@Df n a@DfBn`*0n"|P0H|0"nn no>/<SN,~XN^NuNV0.n l0.`0. N^NuNV0.n o0.`0. N^NuNVH *n(n >0-W?0,WN)T:>0-W?,0,WN)T8>?N*T>>?,N*T<89F0G9@0F9@GoFnB@`pJL0N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv>lN1 n0P n0P n0P n 0P B@09PN^NuNV3Tl>kN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv>iN1N^NuNV3Tl3 Tn>hN1 n 0P n0P n0P n0P B@09PN^NuNV3Tl>gN1N^NuNV3Tl>fN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt>eN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt>dN1N^NuNV#O3 Tl>{N1N^NuNV#O3 Tl>zN1N^NuNV#O3 Tl3Tn3Tp3Tr3Tt3Tv3Tx3Tz>/N1N^NuNV#O3 Tl3Tn3Tp3Tr>+N1N^NuNV#O3 Tl3Tn3Tp3Tr3Tt3Tv>*N1N^NuNV3Tl# O>#N1N^NuNV>MN1 n0P n 0P n0P n0P B@09PN^NuNV#O3 Tl3Tn3Tp>LN1N^NuNV#O3 Tn3Tp3Tr>KN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz>JN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz>IN1N^NuNV#O>6N1 n 0P n0P n0P n0P B@09PN^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz3T|>3N1N^NuNV#O3 Tl>2N1N^NuNV3Tl3 Tn>N1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz3T|3T~3T3T3 T3"T#$O3(T3*T>N1 n,0P n00P n40P n80P n<0P" n@0P$B@09PN^NuNV#O> N1N^NuNV3Tl3 Tn# O> N1N^NuNV3P0.|Hм3-@=|` nH2nP2RRn nm.TNB@09PN^NuNV#PS#SS#TlS#PS#OS#OS#ST> aF3POpN^NuNV>a*pN^Nu#TM"<MpsNBNu0/@kR@`S@@NuNV3 Q=|`0nQ"n 0T Rn nm3TByT3T3TN1N^NuNV# M3 Q3T3T3T3TN1#RMN^NuNV3 Q3 Q3TByT3T3TN1 n0M n1yM n1yMN^NuNV#M#M .мZ#M3dTByT3 T n 3TN1 n 0T#QM#MM#NM#RMN^NuNV3eTByTByT3TN1N^Nu RdGrBl1250P20 7855:G^Gg 5@GmGv 5.G}G!52GG156GGA 0@@@ 0 @@@@@@@??7x5njUx``paa??q/0 2ax ъQQQ i   i QQQш UU@PTATTAPUU3fAf3aD!D!D!D! 0a@PPP T*T(((llll(((556646T66 7l 7 8l 8>Rr Gs Bt0  b5  b5 0 b5( Rrl Gsl Bt0l pxqr#xs#tBxuBvaxwaxxyzx{|x}~x5HHX 5dX0 ,qH("!! 9 $##"9  &%%$9( (''&96 ,)*qt*9(++t*q-.qt.9,//t.q615AHR$322 19 5440 39` 0G` @7Gm>8G>9G>:G>;G><9DL>=9R>>GvGv%,G8GPG( 8G(,8G8PGDPH`R` H`H H n@ j P( QH( H*( QH0< j H2(H7,(H;X(j,H@(HE,(j8HJ(HL,(HNX(HP(jDHR(HU,(! j` HY(H\,($"#jn#H`(!Hc,(%Hg8'Hj8(pHqhH ,`HDhHPXH< 0H,8@  p H@Hh@ p  H@ Hh@p,H@ Hh@p8H@Hh@pDH@Hh@pPH@Hh@HXxI P`8'I `8IIII#I(I-I2I7I<I@IDIHILIPITIW    ()c  &  J j F nt t &t &  ttttttttttttttt tj>>>>>ttz__:__ _M9999F__/__/__999999__nn__nn__nnCancel01234RS232 Config.Install PrinterRS232 PORT CONFIGURATIONBaud Rate:Parity:Duplex:Bits/Char:Strip Bit:Flow ControlXon/Xoff:Rts/Cts:19200NoneOddEvenFullHalf8765OnOffOnOffOnOffOKCancelPrinter Type:Pixels/Line:Printer Port:Paper Type:Color:Quality:DotDaisyB/WColor1280960DraftFinalPrinterModemFeedSingleINSTALL PRINTEROKCancel1920096004800360024002000180012006003002001501341107550 CONTROL PANEL EMULATOR Control Panel>FP"        8P&0    *                                                      "                    &<$,"(&,     ,        :$ P PL :" " V 6,  D0 ,             &*," ( *( *`,         D0d>                           ,   R00H0000`x00H0000000000000 HArticle 21527 of comp.sys.atari.st: Path: mucs!ukc!mcsun!sunic!uupsi!rpi!brutus.cs.uiuc.edu!apple!snorkelwacker!mintaka!ogicse!ucsd!ucbvax!vaxb.york.ac.UK!SOCS18 From: SOCS18@vaxb.york.ac.UK (Vision Newspapers) Newsgroups: comp.sys.atari.st Subject: STE DMA sound Message-ID: <9002230807.AA05084@ucbvax.Berkeley.EDU> Date: 22 Feb 90 21:23:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 209 OK, here is the documentation for STE DMA sound output. More documentation when I've typed it in. Screen blanker postings when I've got a copy of uuencode ... please be patient ----------------------- cut here ---------------------------------- Information from "Atari STE Developer Information Addendum" STE DMA Sound registers Register Access Description FF8900 R/W 00 - sound disabled (reset state) 01 - sound enabled, disable at end of frame 11 - sound enabled, repeat forever FF8902 R/W Frame base address (high) FF8904 R/W Frame base address (middle) FF8906 R/W Frame base address (low) FF8908 RO Frame address counter (high) FF890A RO Frame address counter (middle) FF890C RO Frame address counter (low) FF890E R/W Frame end address (high) FF8910 R/W Frame end address (middle) FF8912 R/W Frame end address (low) FF8920 R/W Sound mode control: xxxx xxxx m000 00rr Where for m: 0 Stereo mode 1 Monophonic mode Where for rr: 00 6258 Hz sample rate (reset state) 01 12517 Hz sample rate 10 25033 Hz sample rate 11 50066 Hz sample rate FF8922 R/W MICROWIRE data register FF8924 R/W MICROWIRE mask register Volume/controller commands (device address is always 10) -------------------------------------------------------- 011 DDD DDD Set master volume 000 000 -80 dB 010 100 -40 dB 101 XXX 0 dB 101 xDD DDD Set left channel volume 00 000 -40 dB 01 010 -20 dB 10 1xx 0 dB 100 xDD DDD Set right channel volume 00 000 -40 dB 01 010 -20 dB 10 1xx 0 dB 010 xxD DDD Set treble 0 000 -12 dB 0 110 0 dB 1 100 +12 dB 001 xxD DDD Set bass 0 000 -12 dB 0 110 0 dB 1 100 +12 dB 000 xxx xDD Set mix 00 -12 dB 01 Mix GI sound output (ST sound chip) 10 Do not mix GI sound output 11 Reserved ---------------------------------------------------------- Sampled sound data is stored in memory as a series of bytes, which represent a speaker displacement from -128 to +127. Zero represents the neutral or middle speaker position. Playback is programmable at one of four rates : 50kHz, 25kHz, 12.5kHz or 6.25kHz. During the horizontal blanking phase, samples are fetched from memory by the DMA sound chip, and fed into a Digital to Analogue Converter (DAC). The output of the DAC is then filtered by a four-pole low pass filter to a frequency equal to around 40% of the sample frequency. The signal then passes through a two pole 16kHz low-pass filter, and fed into the National Semiconductor Volume/Tone controller (LMC1992). The final output is available from the RCA jacks on the back of the STE, which can be fed into an amplifier and hence to speakers, headphones etc. Both stereo and mono sample replay is provided, but both stereo channels are mixed along with the ST's sound chip output for monitor speaker output. Sound chip output can also be sent to the stereo output jacks as well. In stereo playback mode, the same data is regarded as words, with the high byte of the word being the sample for the left channel, and the low byte the right channel sample. In mono mode, each byte is output to both left and right stereo channels, but data is still fetched one word at a time. This means that mono sample data must always be an even number of bytes. Samples are grouped together in frames. Each frame can be played once, or repeated automatically forever (until stopped). Two registers are loaded with the frame start and end address - the end address is actually the first byte beyond the end of the sample. Thus a 512 byte sample with a frame start address of 101024 would have a frame end address of 101536. Table One gives the location and description of each DMA sound register. Actually playing a sample is really quite straightforward. Simply assemble the data in memory, load the start and end addresses, set stereo or mono mode and the playback frequency. Finally, write a one to the sound control register, and the sample will play once. Producing continuous sound and linking frames together are the next steps, and hardware support is provided for these processes. The DMA sound chip produces a 'DMA sound active' signal which is connected to the external input of MFP Timer A. This signal is a one when samples are being played, and zero otherwise. At the end of a repeated frame, this line goes from one to zero, and then back to one again. Thus setting Timer A into event countdown mode allows you to generate an interrupt when a frame has been played a set number of times. Frame repetition is seamless - there is no time delay between the end of a sample, and the start of it's replay, because the frame start and end registers are double buffered. Writing to these registers actually places the data into a holding area, and the contents of the holding area actually go into the true registers when the chip is idle (at the end of the frame, if one is currently being played). Thus, if you wanted to play two consecutive frames, you would write the start and end addresses, and set the control register to three. The first frame will start playing, and you can immediately write the start and end addresses of the next frame, without waiting for the first frame to finish. There will still be an interrupt from Timer A at the end of the first frame, and you could use that to load the address of a further frame, and so on. One further thing to note is that the 'DMA sound active' signal is also exclusive-ORed with the 'monochrome monitor detect' signal, and fed into the GPIP I7 input of the MFP. This was provided to enable interrupt driven sound without using the last free timer of the MFP. It is a little more difficult to use, since you will get a different signal edge depending on whether a mono or colour monitor is attached, as well as an interrupt at the end of every frame. Monochrome monitors ground the 'mono detect' line, resulting in a zero when the bit is read from the MFP. Colour monitors don't ground the line (it is left floating), and the bit reads one. When DMA sound is active, this situation is inverted (because of the XOR with the 'DMA sound active line'). TOS actually looks at this bit during vertical blank time, to see if the monitor has been changed, but TOS on any machine with the DMA sound chip has been appropriately modified to avoid problems. Finally, the 'DMA sound active' line goes from active to idle (one to zero) after the last sample has been fetched. There is a four-word FIFO (First In, First Out) buffer inside the chip, so it will be eight sample times (in stereo mode) before the sound actually finishes. If you do not reload the frame registers in this time, then the join between samples will not be seamless. The volume and tone controller of the STE is connected via a MICROWIRE bus interface. The idea behind this is that further devices can be added to the bus in the future. The MICROWIRE bus is a simple three wire serial connection, with a protocol to allow multiple devices to be controlled individually. In the general case, the data stream consists of N address bits, followed by zero or more don't care bits, and then M bits of data. The actual hardware interface in the STE consists of two 16 bit read/write registers, one for the data to be shifted out, and a mask indicating which bits are valid. A one in any bit of the mask indicates that the corresponding bit in the data register is valid. Data transmission starts as soon as the data register has been written to, so the mask register must be loaded first. Sending takes approximately sixteen micro-seconds, and if the data register is read during this time, a 'snap-shot' of the data being shifted out will be obtained. This means that if you wait for either register to return to its original state, you can be sure that sending has been completed. The volume/tone controller is addressed by a two bit address field of %10 (binary) and a nine bit data field. Table One details the commands that can be sent to the device, and the addresses of the MICROWIRE registers in the STEs memory map. Actually sending these commands is easier than it looks. Simply set the mask register to $07FF, and place the data in the lower nine bits with %10 in the upper two bits. For example, setting the mask to $07FF and the data register to $04C4 will set the master volume to $14. That's all there is to it! Regards, Mathew Lodge *********************************************************************** * c/o Dept. Computer Science * "Baldrick, fetch me a turkey _so * * University of York * big_, you'd have thought its mother * * Heslington * had been rodgered by an Omnibus" * * York, UK * * * YO1 5DD * JANET : SOCS18@uk.ac.york.vaxa * *********************************************************************** `f..|Nt.NA"/0<NBNuNVJy$ fB?<NT3$ N^NuNVJy$ gB?<NTBy$ N^NuNV>$N N^NuNV>$N N^NuNVBn`0n%40Rn n m3%H.%/<$/<%4N $PN^NuNV>%?9&?9&?9&BgNRP3&"Jy&"m\>%?9&?9&?9&?9&"NP>%?9&?9&?9&?<$?<$BgBgN p``B@N^NuNVN $.#b/<%/<%/<&N> 3$ y%f:Bn`,0.м @0.м @Rn n&m.?9%NT3&.?9%NT3& aNL y(#fN 09$y& fa09$y&fa.%/<&/<&/<&?<BgNa,J@g\afNZa>&"N>&"N>%?9&?9&?9&?9#b?9%BgBgN `.X?<N .T>$N BWNL`N^NuNVaByDBy,.$/<%2/<%L/<%J/<N P>$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JWBgN >$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JW?<N >$?9%2?9%L?9%J?<Bg/<NBW/<N X|%fa`a>$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JW?<N >$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JW?<N N^NuNV=| `*0.м @ h f0.|SRn no=|`*0.м @ h f0.|TRn no yfB9R`R ylfB9W`W=|`*0.м @ h f0.|URn noB9V yf9V yf9Va~N N^NuNV=| `0.м @Bh Rn n&m9SH| м @1| 9TH|м @1| 9RH|м @1| 9UH|м @1| 9WH|м @1| 9Vg 3`39Vg 3`3N^NuNV>/<&$NX-|&$ n #@RDf n a@RDfBn` nH|2nRRRn noN^NuNV>/<&$NX-|&$ n #@RDf n a@RDfBn`"0n"|R0H|0"nRnR no>/<&$N0XN^Nua?<NNT#aa6aa6<van6<HafGaD?<?<NMX|f*?<?<NMX6 9WfC??<?<NM\?<?<NMX|f?<?<NMX6H@<bf8aa~aBa:aaZaa\a|6<HaGa`f<ag* 9Rg??<?<NM\??<?<NM\`66<waaaaNNuB?< NA\#Nu/9?< NA\Nu y0<?BQNu yC0<"QNu yC0< QNuB@g??<?<NM\`Nu?<?<?<NM\??<?<NM\Nu? aF3%v%pN^NuNV>a*pN^NuNV#&>N N^NuNV#&3 %V>2N N^NuNV3%V3 %X3 %Z3%\3%^3%`3%b3%d3%f>3N N^NuNV3%V# &>4N N^NuNV#&>6N n 0%x n0%z n0%| n0%~B@09%vN^NuNV3%V3 %X3 %Z3%\3%^3%`3%b3%d>IN N^NuNV3%V3 %X3 %Z3%\3%^3%`3%b3%d>JN N^NuNV>MN n0%x n 0%z n0%| n0%~B@09%vN^NuNV3%V# &>NN N^NuNV3%V# &>#N N^NuNV#&3 %V3%X3%Z3%\3%^3%`>*N N^NuNV#&3 %V>zN N^NuNV#&3 %V>{N N^NuNV3%V3 %X3 %Z3%\3%^>dN N^NuNV3%V3 %X3 %Z3%\3%^>eN N^NuNV3%V>fN N^NuNV3%V>gN N^NuNV3%V3 %X>hN n 0%x n0%z n0%| n0%~B@09%vN^NuNV3%V>kN N^Nu %,8P( 8(,88P DP`R` #`H - n@ j 6( ;,(@X( E(j I(N,(RX(j,W(\,(j8a(c,(eX(g(jDi(l,(! j` p(s,($"#jn#w(!z,(%~8'8[2][The GEM Desktop has no more|windows. Before you open the|emulator, close a window that|you're not using.][OK]RS232 PORT CONFIGURATIONBaud Rate:Parity:Duplex:Bits/Char:Strip Bit:Flow ControlXon/Xoff:Rts/Cts:960048001200300NoneOddEvenFullHalf8765OnOffOnOffOnOffOKCancel VT52 Emulator Set RS232 Config.********************************* | Atari VT52 Terminal Emulator | | (c) Atari Corp. | ********************************* Press: 1) UNDO to return to desktop. 2) HELP to configure terminal.                  $"      B$6*&,lDZ F    $                   0000000Article 21816 of comp.sys.atari.st: Path: mucs!ukc!mcsun!uunet!aplcen!uakari.primate.wisc.edu!zaphod.mps.ohio-state.edu!tut.cis.ohio-state.edu!ucbvax!vaxb.york.ac.UK!SOCS18 From: SOCS18@vaxb.york.ac.UK (Vision Newspapers) Newsgroups: comp.sys.atari.st Subject: STE display hardware Message-ID: <9003050806.AA15885@ucbvax.Berkeley.EDU> Date: 5 Mar 90 00:14:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 82 OK folks, it's STE programming time again... Data from "Atari STE Developer Information Addendum", addresses in hex, sizes in bits (in table) Video Harware Modifications =========================== Addr Access Size Use ====== ====== ==== ================================================= FF8204 R/W 6 Video address counter (high) FF8206 R/W 8 Video address counter (middle) FF8208 R/W 8 Video address counter (low) The change here is that these registers are now read and write, allowing the programmer to update the video refresh address to any word boundary _at any time_. FF820C R/W 8 Video base address (low) (VBASELO) This register didn't exist on the ST, but on the STE it allows the positioning of the screen base address on any _WORD_ boundary FF820E ?? 8 Line offset (LINEWID) - the number of extra words added to the address counter at the end of each line, _MINUS ONE DATA FETCH_. This allows for virtual screens that are wider than the actual screen display. Clearing this register means the STE acts like an ordinary ST. FF8240 to FF825E Colour palette There are now four bits for each of the red, green and blue components. To give backward compatibility with the ST, the least significant bit is above the most significant bit. Thus the register layout is as follows: xxxx 0321 0321 0321; x=don't care RED GRN BLUE FF8264 ?? 4 Horizontal bit-wise scroll (HSCROLL). Allows the start of each line to be delayed by 0-15 bits, thus giving instant horizontal scrolling. Horizontal fine scrolling isn't quite as trivial as it looks. The pixel offset is loaded into HSCROLL, and the documentation then says the following about the LINEWID register : "If you are actively scrolling (HSCROLL<>0), this register should contain the additional width of the display line _minus one data fetch_ (in low resolution one data fetch would be four words, one word for monchrome etc.)" The reason for the extra data fetch becomes clearer if you think about what is actually happening. If you fine scroll by n bits, then n bits are effectively missed off the left hand edge of the screen. But to get a complete line of pixels, n bits must be added to the right hand side of the screen. This constitues one extra data fetch for the display processor beyond the usual requirement. For example, if you had three low resolution pictures side by side in memory, and you wanted to scroll across them, you would set LINEWID to 160 when HSCROLL=0 (no extra data fetch). When HSCROLL<>0, LINEWID would be set to 156 (four less due to the extra data fetch done automatically by the display processor). Vertical scrolling is trivial - simply set the video address base to the required address at horizontal blanking time. That's all folks - for now - more info on the new controller ports soon. Regards, Mathew Lodge *********************************************************************** * c/o Dept. Computer Science * "Baldrick, fetch me a turkey _so * * University of York * big_, you'd have thought its mother * * Heslington * had been rodgered by an Omnibus" * * York, UK * * * YO1 5DD * JANET : SOCS18@uk.ac.york.vaxa * *********************************************************************** `GD*o"mE $"mE $E$?<NNTC"$@B?< NA\M,a3@/:?< NA\*z›&z k -"zJg$ёBJAg<f ``&zf+k +k+k  -"- Ҁ+A -Ҁ+A :J$@*@$<0C*Q"z(I$:R(z &L,z N&&Q"o&iBmNE4@ z"z$`G&G&* 1@Bx@fae:rvfareXrBDat6DrfaZQQ`Brx`raJ<m<gra862< ` 2< BTB6a SJ QmvNu DNuSABBf DQNuX %.zX~ T}0J0 >x`H@@WfG , FrBDAT4O   Ǎ 22xX.R"(>  =@H)W1Jyp0. @x"002p0?$B\p@? @ xa3Gk@@ D9Axbt)@ p5 f@F(0@g .A?AqV@ D@08&~`AU!0 `r'`*P~Fd0(8: 9"03*8;8tlu O7ob{FAa `aA`0  -dd8LGDR@(p6@([0 ! !l(p0u `C@l,<2  `A邃`@AB| Pc!!lP0 `@(=2   62>! BApPjCAs` 64@(p6@([0 ! !l(p0u `C@l,<2  `A邃`@AB| Pc!: L1`  7l?@`@ c(=2  C8` PlP ai  h-!xS"9`"s ! ` * @8h6 F?߀$` @!< X(^6~#'`/`*|Ԅ@p6l(8!C ?`(?0 ;    <?/7 %1BqP{d$1x!>A,"me}BAc0@ U*.feb@1 h @@_ ` pV4`āB@CBB!`0  `CP{d$ - `aAlP56    `@ +A,0PmhbP x~g @P Pѿ.L>3?(0?? X(/aq͎2p  (0<>| l(P34?@(a1l(V8>l>O8?@{ @- 0A @1i8L3A~`' c@Ng b o _H1`p=l gǿP(,``dPAXyd$t0Pwe-n@(n0 P< @(?~ (H1`#,(" <""@CCG;;!Ĩ@2B?$L  2c@JP7(P2@P{d$t0P|.`AAB P?  62>! ǃ@  ~   @_ nOK":@?HU  P( ߿AvLQЁ@~ L6>/'*(B?!| p;k+'\~?_@#w@A_ lj- L/40$0Pzv/&08`  '@B }'oq$  BACVvW?U @xy`H`(=2 x:(|6@x j=@(<2(<04  ~_|cWR=0HQN@Pjǃ?~?08Gp7  A!ABad$t0Pt B@F.J@ A{@ 0Q  8D  ;>wU@(0f_% ! lP`0 < >D!`ϰ0>KD@@kҗ  ( (08@_H1`̾@?1ڏc<J>@t|%!` `aAcCѯA~?s-a>P 48ABۂ3@?P93@05p5s чp]U Pu p@   M>V-rF |Pf@ 3=@ d |t1]oF`Sh( (@X `X(q߾/C*B@(Pa((m2) S @9qEy ^ 倠  N@@(? '+|1 5dxAp1`0)Z+t!TL!S(kd0(\0+ <  C>YGe@`y 4 RPP8a < :ۗۇ$? \@C}Gf @H8B@ &Pai < :C·1+?B{@@<\ X@@p #@  @CkXPE <$nDN@A ^BP np8 mp .FBAC~=6>AXLB!"Ɲs^ P t^8 a0(  D ? ;|8~P yZ-Fz@ ((<0   \ 0 ! ǃCg% KOP@>w8,zR^`.d@hP{c BW+h8 @4p [  @ M'ǟ|G|HB!PL03G D(B<`K?~Z~(>r R(' PdPzw ,$@ Q@@ O8/0'<4_ \(P<3O!Aiߧ?ț`I?9 (%(P2|`J d8t0Pge Rg* C(h0@(G   _ 100Q& |@B@ w @xAAQP{d$t0Ps$  Q?@@( 5me}BACGDf,P o !KLJR‘@- Bр@T(p1`0't^Fɰ0S`A  Ŋ2 x:(6h$a{al~?w q%P2x((,5a2 x:(<Q!@@ vqp| sa@  p` 1  @iaRρ   f !C FAc@A|>[_AD ~vy| bi(j04  B??Y! ~?[gpPtW\ "0x >A//̰oP]/-B"AI0e% 'Wx&KPE#  Ð`ߕЗ/CB@A(8@2 zh'=~ UƥuF`CT$7O,~"C1@/>#,?/ AT "X)XO7BR !~>m' 5GD |~ d4NM  a-|4#  L~>om 0;~D@P`CC{ |7k7Hp*s  SpLBP4+ 4 PP` {?2 x: |L AJ???>__`8p0@P4}Y`(X_X _H1~!@N a \ ,Dc@? x{49 62>! ǃq䰠x _8@op m0C@T(p1f/(r.G@HlSCP0@48br@ pϊ2 x:: -pP02 P9<_?  Mh"(b52 x:, Pp`&5  /RA _ _X@ 䠠` 0] `?C< 0X?N?B?`:6 ~'xʊ FAca_8`($(8G@p<P`c¦P OH1lн K+A7:>h)tC,  ' `"@mD Z)]::.8 |b V(P:(C p > 8(P0< 1q WCA~s}vA LB }:U`8tJ rƾ߾ܡ#P! P(߼8C@p\ ParAP.t# bxxg@fuHx D@C MvkK5 9 r@4K "PJsE yhF eC0= @GqztA, _.#:P@Qu i! U C g{Pl?`'Y  D {<|.Ȉ ]~ ff(fý)@ >?V(>  |p(=2 x:(p6˾1?״  H|xOxG< Po ~ PXai < 8y~p)2(' 13|*/1f@@ 5cC{z@t @/ Ct[}~3'?õA{;$Pu@@&#iK`22 x:(p3pN Z=%?X ,(#0 `C /< 8wx㲷zH 4Mn6G 5@ (0>((:H. ?cCoJ`s"z %w{cnM|J|[(x, Pa < 8 /?8=}"&G'R1`l,<2 x:(>f@R Rg ~P tр AI@(ݎE4uݿ{?B@g@  2P>X &ݿ@Q6R 1@n$(yߘg@tzP}4P=d(?*HB}()7ow6_t(08{3<a_ƀ?IH~S?$?.aBg_Ю$| S?P~рs@Zxp(0=pKX7ix08@ oAj{(>8DP>l!&ɠi *AI߁?Ql||pP}?w.А/Y(P>X)W d8t0Pv)l ǯġZ((a , (A~?=  0(0 3d8t0Po[upO6|P:P h OOxm_wD@,NPiP(l0u   |=槟Go}@!5}Pp E@/@l,<2 x:(p5 ]|>!Ɠ8'݆}{wi XG(R B |7w| ?pbh2 2 E  dd8t0Pk@!9 V P P5X(P3H  8 ^ z:GpB 8n `I(,0Adt0P FI>ƺ09(  P ~E ?8i@( OH1`w`2`r%5@TsM nD@4ۀ8w8?  !@ A@M MEYI| |K:.;?p?1;w3 nO??upp`P?X %%0 R d9As 9`}t @->QD )z 7h8,ӏ?vfɿQ>dCa>(PB{?(ilxVG˟  ysh0(pDt@C < t@?J 1C@2w`(P4@|/BG!?_쾟ـ?`P? awEBAC,>< h|FW/'QT! CƍO`NA @ 62>! ǃn?<;_;|@ǿ=߻9{r n! !Dtr2zX B'蒃ttpOo/?C׼/ݹ> *D+B``ߡ!n'@\"y. p@FCCuR(>!a<4D#FE~|aFVE@@ " 2 x:<w5Æ_ChPh  UY2P`tOa|  BAC倥?*gd`~}=0!lQ/(G oe~ ~ 7d0@_H1~{<3ð+ pRlm 2@${DD } 7/B| CXyd$t? _N\N@A0 /` Aa? AD. Q xs;"r"]^0p"o| @%lH" <`)F(Hwr ?} M eƠދ tl)}`A>@B-A|G}/ @ L( 7lEӿRn6pC ` @0A@ !o Lnܘg}CGZ@A>Ȣ!cX0R( 8tS @TE鄁0.cg`&5By /`l.@B~@mPo}p~# +&ob6jD4CϿ@(1bo? JrM p8Bd`pRǑ(b0UCB2 x:| Oc9 sl)D  "! SH H?9HA CF(P=~7P @.  P(l04 z~|!BH(7/L p F @ mXT ` * @8t? KP-B;n+nBtBy) @r0€>Y<)B=  ! ǃE2 `|XJ@; @@;?~|~C8(9h X<NU&D `C85? C )P/  PЌ b!<6 Z`X, P`h PPa < G|X>8G2rp`(00{@ (,04   X@z0D?Ba:0a SH(f4Yb?@P*fWCA`avnOLU 0; LV7 2f`P4SskPzb@)E?9?P8(U7@hL  ab@ nrQ>?<ĐPd:(@Prm @? \ a ֜`aP kHD Gz=^^€~Pt3cߟИ$  ͿNLˋ!>PHCC[•fQER(4k82$  }OFcCտd˜?) @l @u ~`pPxa < 8G9&`- ?((@P< ,s" r@ļ>@>8(04   | |(P2u U"Ow+/@_`PAa@T(p1` 2,BA?Gq? A  ~?Y3~3LppPz < 8/X9   S.@?@((n@ #r:fx0Pm  d8t0R]Vg@>HpP`B+D-@` %EB xH1`P(P9/Or ASp @b!@À    "! ǃ?Wx(@?X !z @0\!@(.?0?0@  62>! ǃ? F_`oG?hx/`8(P:@Rp  N?Sۗ6W 倇@_ >a}3~W_tOq,? h=폚M^bV ?!~D=cx|?G~{>l! ~؀KC??@xToxdrA4\; 8`~R~sb  "! ǃ?B>3,?Ǩ~0P^ +(?eyp- qy.872(l04  _괘O6:N@@Dܿ:Pu~S|hwޟ_NDw"W_O{jCP#dP`0  x:(p?(( ' Ԅ e*+#KbsA! },$!~!꣋ u(p1` lP TC~ tCRzro~wqrp?CHnD  d8t8m=<0?cT@?(x,4}R9s,à8,< ?>S_$^ۡm!) p4  ! ǃW˃|<{8q~|6@pR%~AAPpY=Vi Pxa <@9 (q c (P2w_&0??# k+{N?`b~6me}BAC`BAx$g_-p`  \׊OG?;=OϿ0E\t D# fݿ0`$8@H?wh}{py18\ixhXߡDzkWB@~ CT3 L` Lx T  `1`(/p1lP`( BABB Pa  u`aAm! P5n!GDH  LHD  d8 - AlP8EBABB!ai  `A邃`@AB| Pz`!l(X1lP`( BABB Pa  u`aAm! P5n!GDH  LH `@d$ |(Ɓႇ_H602P(  Pai : |P?x ႇ#>`4 F~`, x> pC\88(0T $ |A@ 8 &A#`@Q#~P` B@ |0Pc!、(a0d0r BA @p& FAs@#`CC 62>! BA `r"  @r Pp`!P5n!BހCpa ``C804h  `< H(32 >h((p1`~l`|P`>p`cAA4 9/ `Cp0Ppw\P}~Pa ` @CP{d$  @4 @ހ`Pp0Ps  ā;(04 `@A P8dD ` |`p s( @ "(=0`` AP0pB!AxAP^0Pz|!Ax`C@` ?2  _H6@([p04 i  8 Bq b< ̀8@H0Pzb@!c!!lP0 `@(=2    OH6@([ L ͂ M `B`C@` ?2  _H6@([p04 i  8 Bq b< ̀8@H0Pzb@!c!!lP0 `@(=2    OH6@([ L ͂ M `B`C@` ?2  _H6@([p04 i  8 CD `0 Aai @؀7ob` ? ,"2l,< ,tlQ H4(v*  pIs{;;CR\lihjQRNK:pA{[" aw  B2;@Ғ66Z*Cjbgn`IjLaA SS[{:rA@):;8Zx{@&@ F !@D &&z

aV q6&x4ɠༀ @$0& wI ;J-O8P9Z8 X<ȸR5 {#(7$`T.'܌kN-fUCQ ~5؁d Ch\`xTl:*h`8p 3?pt`tH 2P2săּ0eMI8 0-`yc :v6/'B *(۹blM5qr@04i$RD7/9Y`Bs-@P'Ž% ʁG -3R n0hXYt5p=@(5H٫\@g9@" $XNqGWSai +[  1 5iC ŀh212@3@`t@d9pt3^>71켚 t&րG%dH@cq@Aă 0PKid-p& (U)t":`ld)Q@z@{gC@"Ͳ.kRFB+L0%jI9# fڧH`PH ZdL``E(6l 0-A8]'YCcAT# b2#p0tKL0a@=`Z,6@p}l![j[Cit: Q6.`L@2p=83Pn^.#B(pt'ɮfT]`Zr"H 0u*H8})8 Bf 鲂 5sPAؿ!_*L=D  q@}DbjSJAW(KEk&1̢Ab*p3邆&F`;d*8KXA#7))@} :e`"* 97yF=l: P9 04ut#F6TD ch-DM\@~\0o#g..&-.s ʮFD0@k){3# y$Kc@콃9-`& tШ/ch% EQRihv@P@t8$i)M $ $ @(`-HQm/r aR۠WHEt?_~`b7ʍ2 L Ҷ$ ^0_`#W  B8 \ Ȟ 7e  fLlBi3Ph"MGmQ0 *)p( \YD!R-F@С6aEhMA A&  6  .  1Htk,5 D)"Y,,k6,3!!Q (,.,0!xr@`"!EFrJb b0b@v"@L@>+Td ~Eh@ә _?49aX2AB@!Y h  d\X6nN ;(#@᠈o71faHl(Z 8 @ˀ_P :H``1($ EH*2b+8Ԅ`n@xfil <X!OP5 a  0#PH5H8T ˄0PA+)&|. ±@ "P*# Bgf@ d  |)P[*&Â050ICH"`T!`B ˀRV2B3^) X  س sq@ % l`WUaτ5D8ɉHXA`oB A:^ 0"i<$ o"! B,@Tٗ(:5cb$@eHd@ ed S4(n{aa.#À4!Y004@EoP<)V U9=~X`g *r1e%98A:lxA@hg4cB]J@ P5j (TXRy@J\@Ĕ!@]w@)X+`RNxBdO` #2̉9g n( p@Y(?#Q@ P?_13@ @#H2o h 8`$DQ2(aD3q QJB->Xf B!1f`Akh` *,|d01p`@X^,U2d?H\%.@$ 4<@0AW`¨4 (CÀX bXK@(Kx+5Jp` QZFdCM#, 0C)M S L ` ÀED }$fXC 6D4`(AF0 AWJB8A`'0"iↁz4*Mn8 + ^EEN(.Z5R ̱bd;@X= %D*n8u*"H- 2Yh0 % 0($7WR4pA"QAưSPC #b"X{Ba%JD< ! aT lt9"D2T\ d#׳@ Jqh#d@B(3`&EI. Ha$^q@ cc 1T03-J %%E lL\ VC^*@L xA'ls$~s xVG^- `F_bR] 0|a`7B>t B2HHRHj8Yh3 @YI: eS S9sF*&@(]61 $A'#.@R*|l,dȠtD QtS$*9)aPa2dGAo@"nn\yI`AK x À D@و( #&A20W)M\F ~*A&)Dr$#0 lt[*I^®S8!S@:Puրj<`> Sp@"2Qpi2$"h(OT,!A H*pnD0ҲT/1Dw +f`BB'``c02"M Ԍ 6s2,-BRBL2DMC "8d1Qr{T590D1vzJ`+`)Id|HD Tk`f9X/h9@D  P A4&8(3|4$2i  l̤A<^ bfid|SXH=B0Cmxi h C1D̂A`gڠKNb; @@ۉ> @ b`d@fàlFL$R*Ƞ! R0WEN0D>1K.aj!q)!>P ,H < }I-52.$,H2el2E1D0" (q!„>eEHb_VC$BIH @ȼ#(P7,(;FGm`ɞh`; UDåLyh!I$X7'*T@a@ đ X a$E  ' rCD` Ql#3T , # rDpc  @ ,P-@VP ٢o @ 7(H\"!`M條6z"Bh?D & PF(JPBGPC^,$#đ%.3)!`@l-@LD%-)Dt3b?I$ %榄@%Ў| a4  ` "dLS@ B(HAjT W4.P`A6PAP=0fAP80[AP< LH/b {3kp+0fv} P @ȣ Dac8@D ڠ@ Ad  09`/sR 4 @Iֆ`ADd |`20p0Jt0́ a0 pb;1  ZLC>!\"ALj` 0 p: TCea<0N8z38iA`(X!V' a @4阿y\ HM(vH ~U r'VߊA8$ 'h;p?~ a!`V ~}A04 aB$D9t d B  jIgT00 ֤U @I'9R8BIBH=$ P @J$@dܠc@ @@'9eH![w٠?}w?@5T B8~@l+(O @ P2 ӕvÁAd@1 IS xE! @JC Hcd p!H@%A[ pXL$$ņUˀ s8p  ; (*@X  0CL pTRmhHJ !ڠB@J8bq@ɀ0@cB0] p@P`X@0,P l@ .$$ ,I29VDh`j@ItAϧA @ɂ@g! `T $D8I3 T96`e%@50S@o@! (d@ ``@ӈ{K h%stO _P0`u rO(a"KRE'c00 A@ B*A +K  X`aCz t d)OAh  $HZ'1@3mNhP`Pa0K`E,>At*u CTJ"$Q1 @ 21!o&?rJK @A6Ѐ\ ؀@`ctaLm,m aA"F38@ |ƘPC0 g N 803@.>?0  @P$`pV L$x}Ka63^ D4HP? !@6,RFDlт:ʋqJ`Q'?@H=.p7 `l.fc/  o}>cR5a|P%@`a;z6P R O h Qhr8 0, @"`7pPaX3X `@/nP3$@98KJ5r?h.@K hŠC<@(VP1@b DB,6H02C$p?D0GB (7OX|8z| A@oHRBJzi"t !HY.> E  S+G$A4&hЁt$02p m*0cC=K= mFx.% yC( 7΁i~ u7A @`QZ`S@HD Ш )HCB\t*@ _xl0. \  =f  $8 n( H$ $ B/R wc A*K`\ OR HRO@ @Јq z j\"<Y=r $`h3e@r |f`@ `@Ah'8`TyQY  @ݵ89L @=gBd l_1vd Z ^@PcV„5h8B85Dy0d AĂ^^YiُŞ BFiP:0E,%A |H*T)0 jdؖA3 , | +pp"Ab,XBnBa ݿc @Ѐ` @X,(03y\V!JRH,,=AЇ@0  rR3zAFu8E`0 2 PP9P l)JQ% ɐ FdAr A\^E{!!QR7g4R:Ok f~6QVSk QoQT[6DlK@U &a):N 4kZ R`"Fjn8O9 @^B,h0@"Ȳ w\dT@ @nT`( *BRw`85i R<>?%8!h9pG0BP?Fx1gu+(l`Ga1[x@QSlT$QRpbY^BAP H,!_@"o@O- _D3/ARȃ0V`T%Hb{@ }d LETJX4" OpqD0xT`"@$ޠ`0*+BP05zw .VP+lhI@21@!!2E3C, / 2@AC̀#'@ @FUdDJbS8(`B36<"pB RD `!H wQb + |w Ae)a2J}> @Uj*b @  A`6bP3@Bs ؾUz9,heȠ p $B[g5)p& P LP `   pl5w#JRf_@@YЄ @P4"N@yw$ j`GiZА*AE@n@ s+1e. ݸ { ^@ =(p!|*dgw@$86PX&.p@J6nf , 1q 0fAt-0 I RҁMD1\`@@3( 6 ea H%pM ad6a ܁XZ qZQ20d `p S3 & ГI##B$؁½KDK an`r P<(%s.MbbP a;!9eA?A @_ Q,5* ̽AlɁp0,U{?8E.a, D\ H -tP Y(P`*FBG A 0$` {>CJ(vkk0HTf6@XA Y@PPA 1`&$ pЋӖs(@ ր !@0izfѻ_Jj ataeA3%v0 z$ * f3f:@bv`83PPN=AP(gb*gps'( R 0"t` :0ph8GZ !Z89}d 0qQ@ÿY0;(P@@W0 0j+ ]I@Ѐ`%, `r^f2f e$`4SHK* @QA RP @ ɠd2>&!c 0&@ :3H cl@ 14 1Al0=2(4 ps( J0E38PD P,(X0d h&@!,D`iPkP5 xj !Z5~R%XJ9F% @h2J~$A ~$4`Y]f@X*A sHA"X$ HChdd P3 g@:4p0*}@0 'a.R TP4A%)cG_Qh|P4` o^&@  eKfPE^+DT;33RVn)A=E`|TUFP4 8w CA&* :J, 0aaHF  SAJAp2\$ 1LdTtDP <x @K4(?B!B| A(H0PsFH G0M J¤Jp*:.X`ɗ s0 t8`p5@`g"@`ː1'5P06P 7o 0 $Ù54!eE5P4@0 0@d/@s N9*"` 쁷@I  &VL5)`B80` D6&3 aߐK~hC8X x lPI  @y*~CQs0 `8Au:*8 d\ 0a;kDڗP,~@X l܈ @)ЎT bq߁|OĠ%Hn 88~,2D7_`BuDkKAxqC4q`Y HS &`M!ULp# `73@@x!Aa1BD@S  L@XAo@Yf@E0 b@2JfG0Rc0H`* $@" "@AfpCP6IV T T L(L@LS- F"3*@d# j Q{H1Z ^ A@r)P@Hh7(4BW 2!@(PL(AJ * (bv7Sbs!]9?Ĉ`g` LZJYWB<&S * 0 2 kd DPDH & c ڠ fjK0!Ā@0xa9ʀfP 1d"0 |- @A2  Z PP5%  BdjC 4'P\3/ @ 1Q\t^i $®X)` @]C"!X?H9a79NqبG(B1BLD>eái@ H/( x*\`!#%@QP_x+"φ4j3R`d9NPC^$V0@ )Ss%)b(I4&7B&`0J0QRf?ʑ1 m"@I1Ѓrj$ LGy7 $, ' XIiYТ3-XM0|q@p .4cH!X}C@$ @@H26 qhH ;@ AGUa W̠ahjA8|A`L $8ʈB~d!SD $&a ".2Hip4 Pہb;@D @AB)df,CNԁdV5@6@j0Q]J#KC)L8%!w)(P4R}ftφ?I Z d M@`. tA00  (l!_b+  ;ҜdBh&@'܀D[8-LD75@ٔ3 @hDT KQ`Z(KB!)v- fڐ0d@@[8h4/ @όh # 2zrٔ2@&@ƥpf-84  P ,b(A-( a04s(LhSV>a ͝Iuۊ07Cgp` H d*t0 T(` 3qM`rHu A.$AO$6AH@H@ *a><U(H eŃk  X@0 0 W3: pXP48a|iQ (YL#y@@ٚAxE'";D%`HdP?/ngV $#)Sjĩ p%`: H ‹L` ƀ hh1@054]@pB@ABP/0u_E!f B:,,A S_42 ft ;C!Q!hJ#$ P&u 5I @_`) 0 TXEm# @F`u=) mBAd)S:@L0+pʀ`@@ 4@ U4 : P H. ԰Pa!l@l !  (B $G3l FҰRA2RqA %p\E2'H)(p01 @{$ Q#12X(0Qh0MDH8W0 (08 I %bb0 0`T\@@@B*J]1()B,AT!m& h 03&Jf ,Ä}P]"i YJ@4Sz0PBB-\K h`~+P? Kfᰣ: l2%18SsBIP*4"P4h4GNE KZ_0Os`F@`.P7/>10rRfJCW:\ C 8*H̀R¸`š:h:aH'(K$hFà Tو1T<4bL ?0T-@ j66kh%O`@ c (` e`8 `@ d@` n@` e@0.Q !@Gj h @0UhUhX:Af(OJP;E f 6.",$ELH +A9!y #  ̼BAAI#4{k2jB`_Ff\@ aW00  fTC0A4 b XT$'`,&a  Pl1!_P ] H_3†Ғ0" `*l'B Ͷ [2)8[uRǠ(rWp I`M?}a88A\  #*[Rr4q@炯` e4dr XQ"dD R@M.g]` L: @ jqeVAaH%2A *\P1h0B`@R P9" AH! 4&q$q)0d @&1IB`"!vA W9p  B憢yDN(@X\F`$_V= e1@| s%&$)ApqJ0hA/b]!!v`գT(, Hl'!Tǒ H ?f8=QS"G9DuJ}$ 0fTÃ%P6@ D`0遄85〪Zt@'T1A*X8 $ @/Lcpp3/pf)`W f7 $(B|10y`|S|уP6@( ,G6u& mOC~$ P|̚\hjh0 q ;17?;|3 @& ( f@QW %FR52h A~"9@!hPx@4(!Y #( esR`)Pց{R Q@ўASh1!# bI N @IsUOox~j 1 %XqHm@4A h A,A#@p hMZ)Wv ,(( cjX@o♰A*y($* p@;H0Fe ń@ T`1BaʠiRp(~f0A@6Bv@E (43$!4P1.q hep@E]( 7pA  ~SSĬr b  j#I 6T) `cQD a hP,*2|s( > rPdXAGodp REh%0r",* & b,@ E "pt9@5 h|FH(050S8@%2~@$y@0A"@R 4"Y!y ʍ>p< X(AXp@WPS qV1CX!h0j Qڈ83 v_ˁ(@hxh ?`|pzcq% "Hr"$8 T1 T.M&C&8"%8<(%x3(^ax @ E#H XՃ1˙WhB^# %CkF%𧻓h Q@R"XSzp! vr"Qh`Q ƨ6| #N 3% ˈ _?#P6hnoT:0:R`jc! PpoLE,!2@pa`!eL`VTyAW`I(;kFi(@% $!V y`)`P@T xH D d%֒ 0i` p7FĂ'D`+Q_QI˲eka@5 "!x@C9X~_` j dA' B`9dP1I%i*0@t s[d`C)Hąذ)>c$},-ib U"HDXB% A̫/ `$V ^Z ^N T@T`G(#&2tLHW>Wp[H 0 b64=H@E1&0!F  `!HTob `Y :X '"$ Ok`N45 I@@ pU8$<%7'&*=CJ\PB-a$(v6H#& P`d3%4A*&bP $2DP\@\0Fy5>x` R`P4x`2 ΀A 0<( +`G`h@#4 hh@ I"@v$  !E5)P#lG@N0O8Aaa@{ׯP %w@  J 8r@ K"0:A0!@^$h4 A&h4<C@]r H X`#@i 5~ƿP3WZ jA@Y_ 0@P$|\ 0&.f:J@k@ m<+IzTU(2C (  Ўb;UD)<rr*! FOdB@8@UOC  @L .L Ў$@١!.PA Ie7p. ` KxHOʸ8£ p9A `PpC@HC!Sê&`p08pl:a VsC\!PÞ'`D0ht"T9 Jy$CR!RC&!܈`D0tx9Q \v4CZ!Q'Aވ`0PwbH8q D8|\Ca!S&H(s; (C%!D(TTt$-a%c?.q%;ʐnQQ60DF_pTH8)4"AYYv6lqb8xP3 a@ UfZ@ـt pt1dA<E nP򛁑A2\dQ8<5D z&L5#@ k@ X (`"@ a\:dY!"tBCh0`gh` eEZ @,W8$bd c@ܧ~ *~9l Ƙ[T=K @ A03LaL ' @Tx )j&?7`e~_k@`y0A'=q He8 M% n4t 2 5%H(ˢTP1mF\@_ IYʄ`H13-@FMU@&@ M2$$u1+X}C @ d c@(UD "LQ06!OBh1,2EMPjAu(〟 `h({,pMD `@ 5T H[ 4 0E}2JTl1؇p*Abp5tpA22  qApidv4?UNZqiL QK HB, `Chfd C#0&сvXZW1*viHcYˊ(8!Ey` l@ `0 1f L !ɰD -D~@.4"dR0KXy (F!#t=8 sdȜ a(@+H X swka8!@nTVjdA50h%X|D@Y|0PyP ihLt `mb+•8 f( $H. 5. g @@Yw@a"!jDv%( ޅ  97n@P4 hOLFI!,0A`dp$PO ׍ ïT(0@1Fh5@`R8R@@LI)@AS ' $$ 80a(0+d Dq F:e+ތ԰L<}0^6b5e'yH23#y8#{  xD0K$A aI#@*N &@pe0'ȜK۠z8!*qHI׊C4|h0GcG,K>"A R ?D^q `l̷i%~  IAz&\viAB@¤ xCpQ&70Vq P;xD*``[=)fc "TZ4JDp@22fP!d;B_9&R:  @݁ ٚs݀Ub @hrX8S6vB4"<< $<rY]RB->1 !o) } [-$"@Ty;S h+HA1*9ՑmDU,AnI@Rr2P(#1̿`  p:04̠cžGQW @Aszg>( }&EK< 3 ae$O*0Gph8@#b(O:r4)5  j Fp4u JS\( c}i2B 0J ɝ dRµh5s(;`w@s€2ŧG6,EC 4\@ drv x3`.p`1($,X0`0,!S_@R@ =DC2s,  H>hg@0RD3-!s5pPHAh2dD˹8`PT.(U5rFPV@  @s!KBCj1-: d*~pQFoBE#SIQt7^Qp(  @xRfca'ëQ`df$KEO*@K IYHL>D B(PC?(!c@tT@2~Rd /@@HJp$H9}}!$ss@ lh0 @@@]M(a@ dx_0,`Rn 8 "I!^3~9A}rČZ@EB1xp(S us@~kp;sHyXT#`hd\h AJYCA7@ajV  J 1#2,{е v*dJN @ 0)f`8(9 z@$ $`! ́E.@u@ zDKD2xk`@ JX"d!>Q vH~5 "IHX8؝$4&HBDۆL ŮgA 6bLeHq2T@ r( `GL3AQ7 @KI5@q cd\  >Ԁ58;AY !8 1 ab!1B nj!DŽ88?G!ܞf )Ƭ*D,Į M&᳸H-0f @u@$pfCdi;7C,&( ᳮ$e_PgUSTL ؁/TOA><RBZ  ` sQWq؀#A(#A&Aİ@r]! @X`jl/2\uW>e=@d$Dbxp7h^0W| |aH \(#hPdL/@cH ˶$FLMHbry8 'C>ADD H1#( 1aDPdf>.q]T4@!Q!˔A$$ۼ uL(50H1uX/t@07J, p *dD*=+BBDw|@F@݅2bZlf$L茟p@xXn)i3L J@%'JET'Ubb!dR"t h:NAψ{4 #P4R@}ddM7 aUE'$/d"h$A$X88,zXi  q ڂ1E ʷގ\DAQ )G @o@qh# e@ "AkrB|1􅤠f@.tgg0 03&DSqPzXBh`!@ b@!@l0`, ނATf&$!BZ@I(8 5  1BS'h(4ܱ1C 25 "qB@B24@ѫ5 }b?H@ր04%vDbK` < 0 52%y @V Bhm`  n"Q ,p d1Rh*d"Q(,\ (>|zX* q ( W@p?% "GPH.n 1X@Byn@B!5bU`o`NSPN 8 X^ftC@$s@LYĨ$S,d@pA+`C =PRxw,mf 4.ÖCBB9$@ ` !@IeR8B0J@)դfWA5Y0+S"UД  )+DO %"feP0:xX5ÀA3a(X : Z&Bn@ XNb@LR BHj1`ـ寶eTpC50 0h@L QP`cY[Я! G(^SbQ 24H iHWGx G nb`L P  LVXKb@H L\1 H-LRT@h#*  H5 $C\"HJ&)#PXRL@@ۉ%.H@%`!`l8Z mJZa JֈR iA% 0Y6x3(0L4c5@/Cp05%8 8. HbxB4vI$_1,a!A@4$`Pm>ηat U  :uP&"6 iJ(xi ds2@V@ aTiQ"6@8 &P@0= Hy$  A( @zJ kePl 4 e@К P, PH$=  A^A'L ~waPh? l |{P3$  &`XL&OO8"``O_4$(A A@. Fbq$ H@'Q`㄂̾!>!Sͭ@?0$ O͞A`_AXڤ A`yHTȆ(E(EJ7 15A>*OCLRB*C1`B$3H+R@Јa?!a?` X ذp Ǡ/k J @(+HbB=0$@@9@JT@ *q((ux )ao47`E i $p`'p* f@WBjL]`@$@e d>F, TKJRRXf?ʱ4@@ 7@3X8k #fPAUP1Qq e{T;֗DmP@@ʠ`V6@& E00LN`bPhL f}bL }lL}m8L)x`/'‘ ORk?Y2wIW .Tk̠jPҜ  (!4%kz0kjU@J< G`dB>1g%tu@  ghD@;1(E/$CK@Ru":CT4;p"s DBO@@ lmKK}&8ʮ Hjo"< ~\' <h@萖D  @B x1I0 CDט@1#(2a&W:RyXT qZpP$<StT0Tc 4@`~ `aAA@xT*%$l%L DODev,62{4jrtsClz%DLt u / Ʉ`cG>[<̂\㍣Ff(1%3L/8$,D ) m00K@QU,>EipCڌVhE`l`P}6O̐`Ag5+ 8Sh FA^60:? @c@@4- B CzXH7) }f0d#Т2@'</70A\005q b@ D $8a-A:8C0,@$ 0@ S+D%A-CP?C@*''FXܫ59QAT6tx @pJ< 86`%Wg8]@Pp1@`n2q!5Zpf`g@(1ၖ!>a@1<v9a`K 4&X*B`0/]((8!`@@ l  gmSP<"af J < @n e*-Ad )MP0DDVlWg%pKID`b".` b@@   L  ,K @x_s# G$ 0 qx-A"<]AE !:1Cl~ABL=$WszN`"% ,a7ngDiP A@  ȉ{ Hdz0РWII_`\H )P0poƀJٙ0& \@CuB88?^ d\`$ 0( ԭ0D 0mF`#JCH`h67^tgBAeD!@6<)tTJ\ &(lԠ `l wK@_@3"xNbnm0S XAxmݰ@mpwA P4!(5`b@X ]`jI@ `a6sl,iұ@e @׊ $@AX`8 kB89p`9!ejE  ,! 7.L\IP}F aAlļ=@8( fc0% |zކo=` @@р+4@I (4 w.` )`@vx eT$\(0(4pfA@P}t$i*fAFY@Ĺ 8X E@x$D PyS")}0D"4w;љ<kG^Ax1@7(afì%(0z&@0Dd*'LY "S&tO9E l@2@C0@'acB /J Y CO@/jHJHEt*9Q `D0$kY 1k` (!\@*!X8>98<909E1'l @@v @@̀ )a+8B‚DiS s1%)+$@vI @S 0P lYAN؂hm r̊@\5r@j> `jnX;S@%=reD۠TL_ Pa </ó$3 0(8X:]rp$ `/U |/ 0`a`papE$ H: @@ځH ! xJ);L (D\ 0hc6=d&  ql+D a_(5@,&>WCl?@Nf УPF` j`F#AҦDjH YphՌ@ ހ_e CAV4Cɺ@J!%}$8d'ԨL!@`p$ ` `lX+%p&Ad3! BX  ?(a`R:.y!y1$`^!sB5-d!O$QjhG:op4*;['JB|dj AFA?P:7aHOO`t;I@^g0U"B" C є &[0BFGN`L@ @ Q <   ͦ CB@ȞdGA>i @0R"6@*Už a^ FeJ`z!84DdA8dP@'bD!9_R80@8%iQ0d?dTxDD.Bxfp>uxc08P( DTJYDxe [!%RT ? Tψ3`P0H)H4LLP@E w$3,fLOHB.p!y0hMڈ : !@m|I , "H$5 d慄px il pQ =  S& L<60}A/|0n(O3:U0&A܈"0x4c J6J( `bR h|Gu0!' \L*܆ @Yt <:Pp3ɠ0C|4 B2GA$ lj&BA}B5D8k0 D<!}`12H!.x޲#cypS`aXDY/j$ā$@`A`A(B`B Y`@aPҠ81ğ# ;D@ªE(6 < 00n@H$<``A*X > cCG1Fs70k2+ #WP|`N]oaw<6 zA|XkP:r 9HM G<?8"./  bf8cp`04K1@ `C%qA2O<ns[@_ rT98\R# tD"@(1!1`@Ё h^Jȋ_@r!`9 $8 V *JT`J u;zg #ap/&dm h(E$UU h V%!N $ʤb9)G*>vX05hCp!]p5h!]z%8 fOx48 oSOjRp`P2p ,@ !@h @9G0mG3Bȗ:c jp2N1^[12H7df c b`0H f`n a` QG `fi$9 @J6 hH:UEr u504kB d\` P`&`;b>2H@VH@ң!V`QL 'Pxd@Hm0=p69E "{mijBeR@H@@Wd#F `*@n* /& p87``e(:HBF n#h0M H(`( ]`)R~a @0 yh`<4_p (n O`@Ms("@ʇa>&/{enyBctZ9&` HP3U0@ w0Ȓ㐼2|SFs$Eɇpu!72APL Y@䭥9ٵR"I?@uH(Y AOY %@@"8;4 N$ J o3`C@ݙ  z$I#kF`H `mhLy2 j@~3$f@_"0 @ P t\xL@6 rb/41/<! P: Pr<@? (pό( & 0) a@`gF d`A`NC . 8fr88 ( zd $v 1ij :19@9AzRA€xHItZTAd04ۀt`Gn" @  `a@ V /u~ 0e(;EU4z"xh aAA*X 2Rb 2 ꢉB()`KbYƤ) ?KB! RFD">`T#g&LF:G C&", @Ġp*JX@x)?o1%@֞< @ "AT 00 aP8[XAAM!J9L @(4L<PfPC,()XC0S" F) H$R4XhE*] C P4$L0 $ ŹAES0(%`(JA6$&@"̥ lZ_V6a5P, SeM iS"1$0  {Ps'#@m$ cPq\ˁ|I$B oP6luJӁlNgx ji kMz , )ᬋ^.XáP3`ʠip enFR~%BJa SF 9 XʂY(7`t% d!A `s/HR|@yx߇ / D(@>` #B3Ah F" @HB}Ц`(" BaBx2N.C$  /$,8QbpB K B P ((e yax`j@j(01T!P B F\(:Cs*iL+`>" G T S[$ %j0W @!`p" (~DC?e`hKA`2 J2F#E0{V 9D hhd$). < ^Ԋ$@섅4 g " AG`@x@ f;"A&'Y_ g=h:27 hˠ+ $E` @4 (@ `f{:zd@2g<fhB$08 l! U @ U -rT4L4gă9P%%TX30X/py  8 yGR \3Q01 Lϼ BH"@ֈ T i"rM4!R2N@>Bn!1p @q!-!ma\@`+ HXHTA R<6!Fl0`P`h;|Q ˀQ3 ,Cl`n9 xPdÁ P:80@.X(@ fQh^.H4p W)H9" 0B`p0H gJpE fB!KN~#P ~`\!q`$~[UE!g$.KXM RoY !FQcl !A@PW@LWx vy BDB+O|zLE K`C'di "@*00;tP34_p))!lYA ZHf:  e@2zv\I:P%.1I&OOTgP`ҠX4@ ?P@tf Z BM^ `p0PZؤ:T@@8(2AJrAx`YV` |@򀁄 :0«a_ 8P7"U9tj1 Q03%AI U*bRYiL IIل ( 4)| 5U%=I[` @Ā` " gOԈ@/2~d€@P$G01+`H@ إl  #r($:+0d`DH+ cBhB@1_7 ̝8+fEzjɘ%a5fx@0@yt :Eg$&ja[`'  9QD@pxnbv)uCx@`(2XO)(v,9A .HA _@|'r"`P0 (u:YxC!@pR&W  eGM@p1(蹀 8)&"͋3` (֘R2 ,d@d(.- G6x B`25f9@f)ȀeA$ /PMPQ( va pA S91ʊl HT E,h04@h9l+Yk3u;*Aup2 +f$J@ n $BA/~HA p5B V-CB hB߾02 (% ÉHci& `&Ö *ʻ @ÀI 1@ `"ZQ Nh(,0fJ4" P7!7@ & τ f kF`S o< N _ *@ Wy*1(1H%I!+lkt P...bJJ p"T} `K CTw ?BB @rAA= D'0^ pp튓2aRƤT10 0;rYY U]`S &.S|o(R@ijU,`T\%0DMM =,4: dG6w.X\Bw @]-A6 d0 1d`@Z ffyu!p6ʥ8UQT y0 Ht&!/sE~ y#@R5ԏJ$($aĐ fh"Ft02>8=oL3`6@43"5" 6 ` c0,``228H6'PP}! D:3 w00@޹2D-\ Q  CS+`g }RBXf4`hQ',<+NlR#( Fx'k^JB.TRS' $H? .E?JAD!c<4xDC3A 3:T@08A!  B(7pQC$H9 |5@kP * L8IpD &Ҁ:P>i &l@*P  ǘ tH~"p K4+DIXf.̊5 "uY{dϱ#DPV(P䟏!gGȓ9BKkS!eԔL,A((H'M%M rBn>9AS Sǐ^j` ! "AL^TT *O  x30A AR ?@PQDC(B2C̈ yb. =j 3#@SCBCNT(RpNZ`)R+3" ʌA!Cʁ]{4 :bfppGY׊ !rQ"@t Bg*ZSBbLπ 1,Rx <*(-;bM(A<lw#H\B_m _s( 8e%N*8h4hd:gL01Xx jQ\A&<P -  Rb<j? 7`!Gڌ~ZTQ !XQ1 JCCX,F06CVV ˞c,($11<<.z R"%2F*@P!рZ4p[< - Ǭ%`b@Z4h S%ʜY億DW Ұ X7"@DŽU! &LvTr.Lh9/H8HD&60!a=RPz^QaaLȈȀRD{3 F + Q) P\ 14 Cn Ah$H)QR,# GJĂB0ZD:d(& ( pY;r_̬di\ s`,mQUݘ1 "а0&DP.Apʆ_c $X{2BtPeqdÓ;@&(j"AE+IAa8!%1@A@#n@@ް"%@{P0 ~ a: `؃s!eDV j@ {ubp f1 FXYD80h8HL*UR .hM8j`" F P_Bkt3pEEh 8#HDb4CBB0:`f"@ (2:B`v6@\3;P 4"$p) [I /x6!v!0AHPaGa0 -Z -.`04G_ B;.8 u ,, PƐ4a M*a`*PH `PcȀ@`a!xP2pA`"$`lf@hPe@e## aZ$A ӡ5jd2yZ%M$:b(8 :6+@4 *C(( A+C f )A!oX6@ f8  .b-6C#A)F`p?\?)#e < @_pذ2Gd H\Pn":P(2 RUS3E ^`f fpb,`1  _#J<2@ \2uLGa=42> z70GAZPL BMx$.J@yInT.cQA5q*P4.G `be.>.  a=5x%NP5=0YaAB| \%xŁe@!`4 a T@@ ʣN`#J4@%s,@ɐpU*c kQT ^ȥ`_"!j~xhd(@D(3ȱ Y; T<`(I$'a" 8*B)H1RAa@I|q@hDQ&ьjp hV̾dae!& g ${.0!p!PP vK D7E6@$D%*( Fb , bd'=)Ty{{H K@!7ʜx߰r<%UI^hIf/  "gA~~@> H`^%&gEf&3 ;a{Q& GiJ 8 ۪D2*BH B !„ @! qP@0. ˂ (=?0)Az0L8 PA1D:d 0G 4/ YW@ +@,(.8 p B7 am0sEP*2DBB7 @(0ENp E!51PPb8"A ? B(?  /$8? R|)I}JD@0%/8 xKЄC`N/'0, (xxx!>3 >h(E̔(YYl 0|нs&   @J8!Q#K vBDl+*\fa4Z0L/x4xbYdAZLj<c1F,}W`U. ЎE0 qS{3?@2'*B$T AV84ȞXy՗HF(|? @)b2w0?y(>dC A : z pKx$x!(L A @hA J@PP"`)@Aߤ^&DK  t 0݀* >,aARxQ LxA)P<.l@S"cMdÀLr@$ `HPRg`@ @4 ⁧˃>XS灇>A0<(5w5 E I!H@0" X6 x@hhPJH ( h\Pw),7$ r@S@Հ @H4i`bK]@Gl JnyaGVp8@ : r@.VJf (*n9Pl1!h4ꏀNVD| rԀ5 } s< |#Nr`'8 9`8C}4 5hs`@~9o@$hPI,+XF)4< ( 42'H>m<B& \ ӊ 9!1(D(m`%ZpNA`!"O !Aq5%CFœ](< C12C" -YPC'jY$y4>)(0q)@cZ! %RFhB(H` h 0%N3hd0`   BgQ* p0p 4# .A(VpP( X_, 00#B  @/` d{ YE^Y\P 0T`PRTX ،`ʪР~:!I9*:Q @wC`bk81Ѱ u *A(Gp@=S;Uadl H< `KDmJ` ;@@ !s /?Աx 0V`88P@0 H!"QFT mĀ l`0h" .x AȐ @  (F@ x@"P1{̀Q~AAp3EE*7*+"&d߱X`(ؗhOS:Q0P2A d6C>0<74+7*|@O@P ,l p4@3Bb0&  и$Yh+,( hjK2N RpSZHJ}>X=〰81 q?P}!8  Ϗ!;z, `f3ȌRS H5 'P Pq % @@+ދ,O`Z,E@qF0D v `o@@X!2#H ث?I_ L4@ HAI< -$@ 5`Iou>D>`H7'~ )Tf`p<@phf~YPTAf!@ ,$BKp8lRPn@(,% @@Ix`PB Tp"@S0*^# //L !P8_0C@0ARPG^$P $O0IÃ@,xhXD,tP0Q+6j7&tTa @ @ `@@MK$pI$H̱W6 `1̐af:`epEA< @8taeNCPYC! ! A (4@4$(PzbpPPeAKJ 3Y؛۹xz@t8tp @`a 0`or0 Psg y`oP`a ȃb p_ `d ]{ -c 0 )lP +j8 @ (F@ 4@  Q5v `4 P5@id @ wA  (6j`T  ( P7m@4+P6g5P PR(1 C C T耣@40 GCC@%F'&@J.-.[_X+x8zHxt8A?NLͽϼ~ }||>~==?}#?0;|( O*2 ȟ hK@`+ Fx `  .F $GT.f鄕Kj7/T?SڣJj3'T Ա G^(\HL6LVVl)A`/  @ #@QBL@07_~)6e0R"H`1 `h@8)䆜aB.Ҹ(8 P?dz8dG(^` @8zd?h@7(0@ z0^Aa\>@ `DX S\KHRh .H\8D8a$?H O@ 139D ͘:P:ʈri2~r؀%B\f n gHH B B a#@ҒpQ[D( + t 1E*.dv`af(@X9ր tPH`h trCT!b `_@!13x$<`T8a`p`F l``'6S @P$.o8UNG^$&.M! E N@m 81X`f`Y hrApd doAjTI , @S_!@ f̨*y*KRäh)%@1T&D!0X@ SHl s N]@1/ $PPC@0`wmN,GH i 6!u@D%VDFƜttLpt9@S(5a& ; b'Fk xFẈB@txr@\o) p*? ZXX(PRUNa*  A AL= @¦BcEVĀ2p68 n1%H.ֈ+ +45Py @C&̬%PH xOA AP!SSQEi(v o`> XE|!a @ bA=7aC!Ȑ=X O+ PH:+Ȟ} F+@(P`t|aIXA),,2 D ! d( 2h@ p1,[FzzDCCB`l`` R0 .6%E,tۈmA|AP8CA3k' @r j bR>EDe 0]h΁ "bh /XMTb@ gC>>(p%AB߂ 0 (awPc2{-\H!O> #pa\4!s#2Oe -AXQ 6@5|c"BBllYAhSN(IxS@ Ơ9T/""HneDsWs$&HPt %U q4P3$0t2IP8 T' xI#dRB1ևRAPH"Mg°v"J) ʁemrakR<끶hFҰ0I_: ? "LMDhd.xn '/G( `Ot%U!@Pp\V+X"X?H #\@  6 (@Հ  <"BYpjpp 0;@ ep2HnR $P 3t?04n`p)L @\M *P5r4p  ,BL$| @FP-dp B xb04p(u0 "t 7K^IL) jh (2 eP/% $:QP1 C(X @VD!dKp" c,Y$ R@`0݃!K@@aTY\,+t؇#@!g „1@%^7; LaJF nR G pB @UHYDK2')Sa$I(,M* 򄲴%7?<X\JT: K L"Oe,p(*{R:<0~C@^ I R4=A"D@?8?x @ !A@\H5 fErS/ MzV`1"+I}| f>E! 6P09$5Q B5(QAb!IP8@Ma8g @2@ \B6`m@#uٹ@Px/U  b /*tZ@3aHaJ~V0)dbN gYx| h2A&@ f'3N+M  #`plP  F(1.@>`\ ` ?a(T/(Dm mE _?Ŋ@)G @: D@Ð !@0BZ >H FXt> Zm(/ I @P1@"*QOiEg.h/ !K |n$# j  1#PjQ@3E 05 "` ܷ}^adA0-A0x/U( ph@0D  np@z 4$Z@d! @T,dJ`#A`g' 8J !I 5@8AN epm x B{[#P'hHP0<<@ׇ}n@Vfx@p6 0h   6l-X`U@( h+.EfOe@w`R@ c@ X` t@Hh"tܗK7FT $ dal`0UI4RBTHP3.2# \q,Ie !#X05, , b @  $l.@`"n>B‚ phpw,3VCa 2 U!qd*d#G\B-J@U0+} D(C]ȥHŚ*xHH'>Ð D]TT@P Ċ :` 0x$ }C>{@YH D@W-( Q "f h. S rĘfa \B y'tdT %tA$A,5]*Q#* Bd & b%bM@A~3AT( E 435 Rt!4(!`3,ǔa8A`jA4t R@P7(2 0@8`h2IEfC(?#Is8A 4 /0@Щ0CւĈR >fAhúe06Dlz0-x EJZ1JDRԘy s80='0\I@xh) B0 $( D}sPH ( "Z1DVP@"A |Bhp!’K I )1 j2X@DP P  ;4 L @BCAɀɚ%fgdM9"8&R0Dp1\^<$]IX 2`H03CBt )3`aP, @R||g J,nBG(T gJ,o0HЌ @ g``G  fp fd ,fX <||g J,nBG(T gJ,o0HЌ @ g g``JGg~gt0HЍ.0HЌ/NpX0HЌ @!|||g J-nBF*U gJ-o0HЍ @ f||g J,nBG(T gJ,o0HЌ @ g g f2JL8N^NuNVH*nBG`.0G-P&n(S` g&L(S f||m0<`6 yf y!n  n "M2<0Q& B@`JL8N^NuH,/,oB/<?< NAJf/|> NA.\ x g g JgP` g,p,Jg /?< NA\ L@NuNV/~/<?< NAJf/|> NA.\ x g2pRJgP`gz!h B !n p` m#*#&!*!1AY&& n!  B p`NB!&!*Nְo."U x"n!""Q"" B"p`pJg-@/?< NA\ ..N^Nu 2`640``&|`Nqz8< 6< ><4<|(o*lNN~N(+| <~NND~2=A .6<NN#Distributed by: GOODMAN ENTERPRISES2< N~=~N~=~=~=~=~NNDNJGg`Nq~=~=~NhNVN#B.Campbell (Morecambe) 1990-02-04Np~=~=A .NR-~NH.NHLNH>NHLNN<=~NhNVA .Np~=~=~=~=~N~=~=~NhNVN&Due to a 'bug' in the 'Atari STE' ROM,NpN NVN# The new STE computer is unable toNpN NVN" boot-up the Desktop in Med-rez.NpN NVN NVN This program will modify theNpN NVN$ Desktop.Inf file to allow Med-rez,NpN NVN" boot-up as and when required.NpN pNnN[2][ OPTIONS | |1. Read Desktop.Inf file |2. Swap ST & STE boot-up modes |3. Quit Program | ][ Read | Swap | Quit ]rNr~?A ./NNO;G >- Gf`NqN` Nq` Nq`.NqNNN desktop.infNFJGf`Nq~=~=~NhNV~(N~=~=~NhNV~(NpNnN7[3][ | 'DESKTOP.INF' | | File Not Found | ][ O.K. ]rNr~?A ./NNO;G ;| `hNqN desktop.infNJGf`HNq~=~=~=~=~NNI-~=N DESKTOP.INF-><N~N;G Bm Bm Rm ~N0>- =A .6<Nb-NN$>- =>- =A .6<NbNR/>H-.ޞ;G >- =A .6<Nb-~=~N-N#ENJGf`@Nq>- =A .6<Nb-~=~NNN<;G ~=~=~NhNVNAnalysis:- An ST will boot inNpN ~=~ =~NhNVNAn STE will boot inNpN m g`Nq~=~=~NhNVN Low-rez NpN ~=~ =~NhNVNLow-rez NpN >- =A .6<Nb-~=~=N3N` m g`Nq~=~=~NhNVN Low-rez NpN ~=~ =~NhNVNMed-rez NpN >- =A .6<Nb-~=~=N2N` m g`Nq~=~=~NhNVN Med-rez NpN ~=~ =~NhNVNLow-rez NpN >- =A .6<Nb-~=~=N3N`>- =>- =~=>- ^RGNJGg`Nq>- =~N=>- =~N^JGf` Nq~NNuNO-~=N DESKTOP.INF-><N~=>- =~A N`4Nq~N^>- =A .6<NbNpN A N6`Nq~N;| `(Nq~=~=~NhNVN#B.Campbell (Morecambe) 1990-02-04Np~=~M=A .NR/>H-.Dޞ=~NhNVA .Np~=~=~=~=~N~=~=~NhNVNJ Due to a 'bug' in the 'Atari STE' ROM, the new STE computer is unable toNpN NVNL boot-up the Desktop in Med-rez. This program converts the 'desktop.inf'NpN NVNL file currently on a disk to one that will boot-up in Med-rez on an STE.NpN NVN NVND You should set the desktop up as required. (windows etc).NpN NVNB Then 'save the desktop', prior to using this program.NpN pNnN[2][ OPTIONS | |1. Read Desktop.Inf file |2. Swap ST & STE boot-up modes |3. Quit Program | ][ Read | Swap | Quit ]rNr~?A ./NNO;G >- Gf`NqN ` Nq` Nq`.NqNNN desktop.infNFJGf`Nq~=~=~NhNV~2N~=~=~NhNV~(NpNnN7[3][ | 'DESKTOP.INF' | | File Not Found | ][ O.K. ]rNr~?A ./NNO;G ;| `tNqN desktop.infNJGf`TNq~=~=~=~=~NNI-~=N DESKTOP.INF-><N~N;G Bm Bm Rm ~N0>- =A .6<Nb-NN$>- =>- =A .6<NbNR/>H-.ޞ;G >- =A .6<Nb-~=~N-N#ENJGf`LNq>- =A .6<Nb-~=~NNN<;G ~=~=~NhNVN$Analysis:- An ATARI ST will boot inNpN ~=~=~NhNVNAn ATARI STE will boot inNpN m g`Nq~=~3=~NhNVN Low-rez NpN ~=~4=~NhNVNLow-rez NpN >- =A .6<Nb-~=~=N3N` m g`Nq~=~3=~NhNVN Low-rez NpN ~=~4=~NhNVNMed-rez NpN >- =A .6<Nb-~=~=N2N` m g`Nq~=~3=~NhNVN Med-rez NpN ~=~4=~NhNVNLow-rez NpN >- =A .6<Nb-~=~=N3N`>- =>- =~=>- ^RGNJGg`Nq>- =~N=>- =~N^JGf` Nq~NNuNO-~=N DESKTOP.INF-><N~=>- =~A N`4Nq~N^>- =A .6<NbNpN A N6`Nq~N;| `Nq~N O/0C0<HЈ",Іd䒆 Ь `H`// Bg?<JNAO JfLEXA@,A0,Hp!!!.HA 0D"MBQ;@+F +LfSE;ED;D CaHNHz+_>?F?F"/FN<+g <-fPN<.g<0e <:dBo?|Bo <:d<0eaG0ajNRo`Jf /k WeR<.f6Bo N<:d<0eanG0a$RoSo ` ooR߰<Dg <EfZ`N<+g <-f?|N<:d"<0e2/A0AA@GA0?AN` g oo8/o gadAC$Ia?4`ھ<&fN߰<HfBN<:d <0e2G0`"<Gd <Ae G7`<gd<aeGWaa&``H<BfN<2d:<0e4G0aaN`<OfN<8d<0eG0azaN`Jf0 /k eRdS|"` |"Ag ggfN/"g,Sf f" /H/@` e /aAC$IHa<`=8 / a< H PNuJf /Ѐe"ЀeЀe Ёe/@NuaAC$I`=FJf /ЀeЀeЀe Ѐe/@NuaXoNuJf /ЀeЀe Ѐe/@Nua|VoNuJf /Ѐe/@Nua`RoNuJfaR HGJD[jDD<AB!zVB.T/zTBNd A"O$Had`8<ae <{dNuafgSetHB Vfd`z`z GaN ^.`FaJfgSetHB Vf֘d`ac`ad`a e`ab`aSe Se gNuJNu G&$P(<Ƅ VȐ"hNu Ga.Nu("hNu/ a _`d H@g(Jg$HAJ@gJAfHA`JAgH@HAJAf ށeNu~NuDNu$JnDJnDai JkJjDNu^_HNu^]HNu^WHNu^fNu^\HNu^^HNu~Nu GaR4)k2BHҁC. Nuv!`:FBH*6HÖk&n"UDk>HǞkn"a,ևQ"`L` GaJgH<fZxCiff4)C k2BCHUDk0BAҀQ8. NuHxCSDt =QaL`a3a a a a FBH*&k趙nUDk.k־n"adևQ"` Ga4JgV<fxCift4)C kJ^f2BCHUDkJ^fx0BAҀQ8. NuHxCSDt -QaL` GJf.4-4/ x$Nr6ASAHDJDfHD0BkR@Q/ pgaC2 AA ?H؁az222"8B2HR2 UAk0B22R@Q2prHASCd2`"Qd&_Nu2 4BSAA M BC p0 !Q&_ GJfb4-4/ H/~$Nz6ESE"kJRaQ( pgaC2 AA?H؁a222FY"."R: UEk"""RaQ(*`0 Ga\<f()aB`?a>Jg0if$Ip0NuaR aL H@GA6a G@VGa GUU|vGa'`)l(*`A"a'Jvg mvNJga'`A a'"a'JUgAa'r2a'NuSe<dAa'vAJg'lJfS`LIBRARYSTARTUPOPENPEEK/POKEBLOAD/SAVESOUNDLOCATEINKEY$GEMDOSDIMARRAYBLITREDIMCVsMID$==MID$RIGHT$ASCINSTRPALETTEMALLOCMENUSCREENSQRTWINDOWJOYSTICKTIMEDATEMOUSELOG Y8 Runtime error at line in module on #A+HvNuA g<PdJfSfNuRETURN without GOSUBOut of DATAIllegal function callArithmetic overflowOut of memorySubscript out of rangeRedimensioned arrayDivision by zeroType mismatchString formula too complexRESUME without errorLine buffer overflowWrong number of dimensionsFIELD overflowInternal errorBad channel numberFile not foundBad file modeDevice I/O errorDisk fullInput past endBad record numberBad file nameToo many filesDevice unavailableDisk write protectedPath/file access errorPath not foundBREAK pressedFatal bus errorFatal address errorApa+@0Apa+@(Apa+@,NuaHm|9|rPJ-6fr(A|aPraHrwaBQ"B,#`H Lpa#L (IL)HNu l p`&_|dVA`&FLLn0kN0SN0kNp*JgHP0SNL fS`NuzpgH P0SNL f < gR`"NupJgH P0kNL fS``<daT a@pNupDNu`aHz<dҰ<g a"ra`-5f -5fNuH?<?<NMXJ@gN/<NMX-5g<g,-5g*<f$/<NMX<g-5g<faM+@LNuJ,"gHrarfaLNuJ,"gHra~rf,"atLJNu<dA`TX.6TJTTTTpQ"aapNuP"pNuQ"rarfapNur,#pNupDNuB,B,#rarE`pNu|dp,@dAB#A B H`rarYaL8a`/ Jikrarba"W2)a2A a"WJikravrcap"_2)aA ``XpNu?AA,0-0|gS@gA 00Nu    H @ra reaLx*&I/ a~&_< gT< gN<g <g< eںgHR/ a&_`JgSJ,gS,/ rar ara&_`r ar aJ,"fah"p@Nu?,?<NMX<f lf -5frpNu?r aFr ax2< gp< g4R,,g,e lf< d<g<d<dp`0,<f< f ,#dR,#A???<NM\Jlg pNuB,`Rgp9Nu0,??<NMXrJfrpNuSgSgUg|SgpDNu&fvRBg/?<=NAJkb8>N?|NAJfPP0(<(؃Aa)mV)C)C$)C |||9@p)@@)@NuPH`t9+@8lAgf LNuF5LCKKBg/?<NAXapNu`8,<d$ gA @N.X@(e|dA`d|p<gJf",gaBf atrpNur)ApNuHl(/, ??<?NAO Jk)@gB$Nup>Nua ,$e agp>)@NuA(r0R<gR$pNua",g$S)AS$dBg?/?<BNAO JkavpNuapDNuax?(,$gA($e(٬٬$a8Jg*)l$/ /??<?NA"/O Jk ѬfHpNua$< g4< g2R,,g(,d"B O | ApB,aXNuB,I? OpaTNuJg&//??<@NA$/O "Jkpgp=Nup"Nua  IJ,f6,Sev H x ggRQdAL0`r`Jg, I,< g< gReSf C`Zv`SH @vapAaBLgNu fXp6Nufp6XNuaB$BSt QdBg?/?<BNA"/O f Hl(/,??<?NAO Jkgr)ApNuaB$Bg?/?<BNA"/O Jl |fZ/?<?B?<BNAO "Jk@g(*HEJEgpH@ @ajf(SE`HE  |aVf ,B$A(aDfNu` f(Jj", )A R $,Ga"GA( ,NuXp6Nu?<?B?<BNAO /?<?B?<BNAO "&Bg?/?<BNAff$, `$/`$,"O pNuad Tp6Nu< g,< gR,,g,e&,$d 8(R$pNuB,`?r ar a2`p2Nu",pNuPRT:AUX:MID:KBD:LST:H@b0HCAag (IpLNuLp4Nu8<0DaQNuH@af Hp0a L LJNu lN -f ?+mj+mnNuBm;| Ap 0Q0BmpNBT@g$pMa;@p-6T@;@0<da0-f:pMa;@;|0<da0-faCannot open workstation;@;@BX+m^\BmBmp&at;mTpm;@VBm;|Bm;|p'aJBm;|;|pa4Bm;|Bmpa NuQ7a -gBm+@paBBm;|pzaaBmBmpeapa` pD`p4ONu/ H0@az0/|bCHI o f"+|phaADC1111/HC2"X"\pda|k(<6A"a9@;@&|B,B,#9m "o B2B.Jo g& Iala< R/ a )H."_HaB"l.;l;|+IpiaRmA+HpiaL 8A0P0000pea;|phaL@ASBSCHHJJ-7fa|p0,lT@C$"V#zV3zTapNu;|;|A+H+H;|A"    A"Nu0,2,l4,6mVA`6420ll@AH";|Bm;|p aXpNup;|;|;@LCBllH" H@+@p apNup fpBm`0j 0,(RBg0,&/aLL a$0,(Bm;|;@papNuLCBBm;|llllH"papNu;|;|;|llH"pgatpNup,@d$ATRBV0lld HpNupNuA$C p2!k0TQC$/ (IBm;|;\pa ;\pa;\pa;\pa;\pa(_pNu;l;|A1111pia;|phaL@ASBSCHJ-7faNAX~Nu GEH 2aLRCBfNu2ab|gJGk???<NN\NuaݤgR/?<HNA\Jgf @Nu/?<INA\Jgap3aja0|JgB0A4</va`, Compiled with Power BASIC 0<rtvaf;H$;H.A0<rtvafNuaDLST: naиSfXv<Igv<Ogv<Rgv<Af2HCt4>.ab6 Vax"0HC Iaf ^a8T ^`0a܈6v`ܠa.paf fpra`0|aSH0fNuJGo |d0GNu0Gp4` ;m.$Nua;G$Nu;|$Nu Ga$0m$pa` G`Ϭp0m$aPHA86HBrBDHAJAgHAJCgAcVB8SDpr a QNuJGo8SD0m$`JGkg.p0m$agJBgHGJGgHBRBBdBSGHzCt0m$p` m ,gx m`a;G$Nu+W+G m;m.$aJg 0m$p$aC$<0m$panA, +HNu"m , If(xR<,g< fS+HJg fSfNuafaiJf>0BfNuafaiJf.Nuafai.JfNuaxfa&`x"m ,fv< g8<"g< gAR<,g< f` I<"g < gR`RJg 0 HfSf/S+Iav. _`TC&t p0m$a@C!tp0m$a0.`?Overflow ?Redo from start C/ xR  fa. _a m`<&<a\/ a. _`&<aFaȜi 0Bf>NuDNu&<a(a~i.Nu&<aaذi.Nu&<a`Jf(<aѐ+HaVf< g$m$jxg<"fva2fܲ< g`< gL<@d  efR|gJag`*0m$p` <gJfaf< g< g<,f( "m"iNuaƲ< gah`a؀af\ m f(<a+H$hx< gRD|ga|g` at< gaaaИ. m h`p0m$p+`bg./ m fAN _`??<?<NM\Nu/<NMXNuCDjDG@AB|Ab DSGkUĆQ(k(j2xc 0D@`fc 0D@`D@@`D@@ԆӅdf UĆR@(fJk0<NuJkJkxAS@J[NuJkV`LH,.aLHa~v$OaO `LD@؀ D(*H8x8pJff f0`(e 0USjpRSfЎg0L JkS@|fJf JfS@Nua8 g0HGOGG,H@O@@HGBG p̀Nu|Nuއg HGNu gV H@H@@mH|lFJj@H@VHFNFr FJgdH@Ri H@.<H@Nu~NuDNut"g pJk S@ҁ`0<vNuMC68341 FLOATING POINT FIRMWARE (C) COPYRIGHT 1981 BY MOTOROLA INC.rtvx2(4(6(8( |o864BA@`J@gHCv6BBHANuH0)hlH0)h|?ovx`J@ga`LL*jfcCD@` ԄӃdR@HLNuJfJgJk S@jHNu0<5@NuJfJg JfJfBBB|XONua/ 04R0(iR@5@&Oz////zL81P֣7CBCSHCԃ6BBHB҂ң7ABAQHAЁ'@\KUEjLJkSjjH&_NuaL/04R0(i5@LL xzJk SjjJk Rjj|?Eg҃тQJk SjjH0,Nu/pa͢BBe"Nua4/J orp;BBma/-+Ja+_Nu0;m`X;oNu>-Nu?<NNT>NupNBT@VHNu ot%ro`0/;@& /H@+@";|"/HA o NTaJTD;D0@ O/-+H UD;| r `2r o /H@+@";|NTa;D0@ O/-+HSDeBQa6+_N\Nur `r`r o4/Bm;BBa/-+Ja+_Nur%Bmt`r /H@+@;|tBma/-+Ja+_Nurd`r o;P o t a o0-0;@t9 oaT"< -`xrtBmt oa-^Nupx`ryA H@+@";|` rm;|A+X+X+h4< P`p"/ HA+A"pia o0` o0^Nu0<;|;oBmaNA`"HRfC`(S>-^ o`0<a" o0^ o0` o taAr4Q o0 otaAr4QNups;o;|a^`pq/o"/`&pp"/a o Nur.Aa o0NurLA p`.A+PC2BYpa6p/`r+A p`r*Ap+P`pz`p{`pr` p2`p)`p;o+oa۔>Nup(`p-` p`p `p!+o`vr`rN;o`r `r /H@+@+o`2ApapGa<`$ApapFa*`p,;o +oaA r`ppOa`LpMa`Dp6+oa`6A pa>pla`&Apa.pa`p;o"/HA+AaںAr`ph"/`C2QNu>E"`2QNuA@p a+o /H@+@paprA`A pCapK+o `8re`rdAp`$ri`rHAp`rI`rJAp`r3Apat0a>Nupo`p`pj`p`p"/HA+A`p5` pk`pg`pf;o`pm`A+HA<+HpxaCNuC< I /$H@""/HA"C6420a:C Q0 a0 a0 a0Nu -gBm+@pa mBa oa2pvz SeX [fRaVSeL |fFaLSe@ ]f:`.Se4 [f.a2Se( |f"a(<]g Se \f`RSJf`6aRR (fSeRRSe<\g <]g<|fSRNu ЃaH&HEX Gad VNV OSQB(OaN^+K+K;|RmpraG+gL;|pa.-Nu(--------------------\\\\\\]PPH*KAp&Q/ z|g8<[f;E4RE6&& B[&a(f7|6@B[66`7|(_;FD?;E;EREB[6/ &&B&& |MH/ ?RE&&B&6B[&~vJFfv<|fnRE6&&B[&B[6Gazf7|66@d6<]fJCjRCg/ I`(_6<47B _SE1ERE01C1G/g 1C` _fB7| "_02LNup (@fRg<]g<|g <\gR`BDNu8V.. -`V.. POOLFIX3PRG W`,o#B?< NA?<0NATOA~|fA "x0)|g|fB/<_OOLaXA%J@fAi"x"i$x bA j.f j*yfB*O/ BabX/ .Ю//</<_OOLa~J@kg."x$i##X#$i##!/<P?< NA\O .ЮЇ?</?<1NAPO/?< NA\O/<r?< NA\O?<?<LNAJPOOL PATCH OF 19-JAN-90 INSTALLED. The pool patch is already installed.The pool patch is not needed in this TOSThe pool patch must run first in the \AUTO\ folder (before any program links into the GEMDOS (trap 1) vector).This GEMDOS needs the pool patch, but this program doesn't recognize this TOS.XBRA_OOLJ9ga8Nhg AJxgT0g|Ig |1g|LW yNNVH? y(PBC`\J,oRBDBEG`&  f| f*L<||mָ|fB,f`D(T f|m(M>||g J,nBG(T gJ,o0HЌ @ g``G  fp fd ,fX <||g J,nBG(T gJ,o0HЌ @ g g``JGg~gt0HЍ.0HЌ/NpX0HЌ @!|||g J-nBF*U gJ-o0HЍ @ f||g J,nBG(T gJ,o0HЌ @ g g f2JL8N^NuNVH*nBG`.0G-P&n(S` g&L(S f||m0<`6 yf y!n  n "M2<0Q& B@`JL8N^NuH,/,oB/<?< NAJf/|> NA.\ x g g JgP` g,p,Jg /?< NA\ L@NuNV/~/<?< NAJf/|> NA.\ x g2pRJgP`gz!h B !n p` m#*#&!*!1AY&& n!  B p`NB!&!*Nְo."U x"n!""Q"" B"p`pJg-@/?< NA\ ..N^Nu 2`640. `Y.. STECONTLACC xt ZNSTEMULATACC {t n3DMA2 Kzu+ STEDMA HKzx&STEVIDEO KKz&`3 $.|MNB.NA"/0<NBNu#INN/9INu#INA/9INu op0/ g<0H@<0Nu?P N^NuNV>P?9P?9P?9P?< N,DP3OBWBg/<IZ?<?9ON+B .P/<R/<R/<R?9O?<?9P?9P?< BgN*09PyRHyR09PyP|HyR>P?9R?9R?9R?9ON, P>P?9R?9R?9R?<$?<$09PH?09RW09RH?09RWN.N^NuNV.///?< ?9ON+=n =n =n=n`=n=n=n=n./N* XJ@g,>?.?.?.?<?./<9N-V.///?< ?9ON+Jng Jnf\3SP3SP09SyS|3P09SyR|3P.P?<?9SN2XN^NuNV.IjN0=@ ngX3cOBn`*0n"|P0H2nO2n no.O?<?.N0XN^NuNVN1.O/<O/<O/<ON- 3O3pO3O yOo=|`00.мC @0.мC @n nmBn`00.м? @0.м? @n n&m?O?t09OyO3O93OC4.Is?9ON-T3O.P/<P/<P/<P?<BgN+3O3P&ByPNNN!>SN3N#NfNN^NuNV`.S/<O/<S/<S/<O/<OBg?N+(.S/<S/<S/<P?< ?9ON+.gNN<09OyPfj>R?9S?9S?9S?<?</<9N-V>R?9S?9S?9S?<?</<9N-V`v yOgj>O?9O?9O?9OBgNrP`T09OܰyOf BWBgBgBg?< ?9ON+B `"09OܰyOf( yOgN>SN33O`09OܰyOfN>ON+>R?9S?9S?9S?9O?9O09RH?09SW09SH?09SWN.h>ON+>SN33O`F09OܰyOfr>O?9O?9O?9O?<?9ON+B .R/<S/<S/<S?<?9ON+3S93S9`09OްyOfNf yOffNN!NNO?9O?<Bg/<9N- =@` >O?<?<?</<9N. ?0<_HP ?N)T3O.:0/<5.?<?9ONPN` v>O?<?<?</<9N. ?0<_HP ?N)T3O.:`/<52?<?9ONPN` >O?<?< ?</<9N. ?0<_HP ?N)T3O.:/<56?<?9ONPN` BW?9OWN*T3O.:0/<5.?<?9ONPNByP&` V>O?9OWN)T3O.:0/<5.?<?9ONPNByP&` BW?9OWN*T3O.:`/<52?<?9ONPNByP&` >O?9OWN)T3O.:`/<52?<?9ONPNByP&` vBW?9OWN*T3O.:/<56?<?9ONPNByP&` .>O?9OWN)T3O.:/<56?<?9ONPNByP&`>Q/<=/<=?<+?<*?<(NtH?WNT`.=/<>?</?<.?<,Nt H2>W?9QNT`^=|6`X0.м9 @( g8>Bg?9R?9S?9S?9SBg?./<9N,n n:o>?<?9R?9S?9S?9SBg?./<9N,0.|3Q>?.WN/TByP&`BW?<?./<9N.6PJ@g>/<9N/X>Bg?9R?9S?9S?9SBg?</<9N,>Bg?9R?9S?9S?9SBg?</<9N,NNN<>R?9S?9S?9S?<?</<9N-V>R?9S?9S?9S?<?</<9N-V`| yQN#>R?9S?9S?9S?<?<1/<9N-VByP&`2 yQN#>R?9S?9S?9S?<?<3/<9N-VByP&`BW?<?./<9N.6PJ@g0N!By>>R?9S?9S?9SBgNrP`0.|3P.S?<?9P?9SN2\09SHO3O.:0/<5.?<?9ONP09SHO3O.:`/<52?<?9ONP09SHO3O.:/<56?<?9ONP=|`n0.м9 @( fN <2.Ҽ9"A >R?9S?9S?9S?<?./<9N-Vn no09:y;f <:>R?9S?9S?9S?<?< /<9N-Vy:y:y:y::>R?9S?9S?9S?<?< /<9N-VJyPg <2.Ҽ9"A `*3;:3; :3; :3; :>R?9S?9S?9S?<?./<9N-VByP&`"3?h>R?9S?9S?9SBg?<=/<9N-VN$@By?h>R?9S?9S?9SBg?<=/<9N-V`3?>R?9S?9S?9SBg?<>/<9N-VN#=|`0.мC @Bh n nmBn`80n"|S0H2.A|мC @1| n nm.////<CN/ 0.|3C.0.|3C0>?.?.?.?<$?<$BgBgBgN/V>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<Bg/<CN-VBW/<CN/X|f^Bn`B0.|мC @( gB@`0<"|S4nn nmN#N z>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<$?<$BgBg?<N/VBy?>R?9S?9S?9SBg?<>/<9N-V`(ByP&``||=b@0@Ff PN` 3P&.g<09O|| f*N!>R?9S?9S?9SBgNrPBWN+(`N^NuNV. ?.N@T>?<V09On29O|?N2 X? n0>R?9S?9S?9S?<?. /<9N-VN^NuNVBW?. ?. /<9N.P=@/.?<?<m?.N2 \ _0"n2>R?9S?9S?9S?<?./<9N-V0.`N^NuNV09OO3S09OO3S09OO3S.S?9P?9SN2$XBn`009Pn0@P2nS1Qjn nmN^NuNV> ?.?<#N X3Q3 QN^NuNV>,N0=@0.@|?3T0.2< `|3O>*N0=@0.|3S0.@|3R0.2< `||PHdH@3ON^NuNV>?9S/<5@N\>?9R/<5BN\BW?9O/<5DN\BW?9T/<5 y Oo?9OW`?9O/<5:N\`>?< /<5:N\ y Ol 0<A`0<P5>N^NuNV.5DN@=@ nPl0.|` 0.|=@0.2< `=@.5BN@|@n.5@N@|n>?<+N0T.5:N@|=@ 9P5>f n ln 9A5>f n fBn.5?<-N0T>,N0/?<*N0THr㠀.?<N TN^NuNV n  fB@` nH| =@ nHn|`N^NuNVJng0. H f 0< `0. H |0"n0. H H@|0"nN^NuNV>/<SN,X-|S` n #@Df n a@DfBn`( nH|2nPn no9PHHмF @O-|S` n #@Df n b@DfBn`( nH|2nSn nm-|S` n #@Df n c@DfBn`0 nH|O2nP2n n0m=|0`* nH|2nP2n n3m.N@3Q&.N@3Q(N^NuNV>/<SN,X-|SBn``.S?<?.?9SN2\Bn`.0.n0@P2nS1Qjn nmn0.yOmBn`$0nP2nP0jn n5m` n #@Df n c@DfBn`20n"|P00jHO|0"nn n0m=|0`*0n"|P00j|0"nn n3mBW?9Q/.N\BW?9Q/.N\>/<SN,~XN^NuNV>/<SN,X-|S` n #@Df n b@DfBn`*0n"|S0H|0"nn nm>/<SN,~XN^NuNVBn`$0nP2nP1Qjn n5mBn`.0.@HмP.?.?9SN2$Xn nm09P0@"|P00HO3O.5.?9ON@T>?<V09O|29OyO?N2 X3:009P|0@"|P00HO3O.52?9ON@T>?<V09O|29OyO?N2 X3:`09P|0@"|P00HO3O.56?9ON@T>?<V09O|29OyO?N2 X3:N#=|6`0.м9 @Bh n n:o09Q |6м9 @1| >?<m09Q&|?N2 X3=3=>?<m09Q(|2?N2 X3=3>>Q(?9Q&NTN^NuNV>Q?9QNVTJyQg <9|` <9#>bJyQg <9`` <9n#>N^NuNV9SH@>9SH@W9SH@W9SH@W9SH@W9SHW?<!N TN^NuNVBnN(8ByCByB.////<?N/ >?.?.?.?<$?<$BgBgBgN/V>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<Bg/<?N-VBW/<?N/X`tN(8=|`N'=|`xBn`n n'm9Ol O9OH0@E#@>?.?.?.?<?< /<?N-V>?<?.?.?.?.Bg?</<?N,`Bn`n n'm 9O@9ODmB9O9OH0@E#@>?.?.?.?<?< /<?N-V>?<?.?.?.?.Bg?< /<?N,`*`&| gJ|g|$g|%gp`JngP>?.?.?.?<$?<$BgBg?<N/V>?.?.?.?<$?<$BgBg?<N/VN^NuNV |E9OHHP=|`20.м? @ h f0.|HPn no yAxf B9P` P yB8f B9P` P=|`20.м? @ h f0.|HPn noB9P yBf 9P yBf 9PN)LNfNN^NuNV=| `0.м? @Bh n n&m9PH0@"|F0H0@E#@9PH|м? @1| 9PH|м? @1| 9PH|м? @1| 9PH|м? @1| 9Pg3B` 3B9Pg3B` 3BN^NuNV>/<SN,X-|S` n #@Df n a@DfBn`*0n"|P0H|0"nn no>/<SN,~XN^NuNV0.n l0.`0. N^NuNV0.n o0.`0. N^NuNVH *n(n >0-W?0,WN)T:>0-W?,0,WN)T8>?N*T>>?,N*T<89F0G9@0F9@GoFnB@`pJL0N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv>lN1 n0P n0P n0P n 0P B@09PN^NuNV3Tl>kN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv>iN1N^NuNV3Tl3 Tn>hN1 n 0P n0P n0P n0P B@09PN^NuNV3Tl>gN1N^NuNV3Tl>fN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt>eN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt>dN1N^NuNV#O3 Tl>{N1N^NuNV#O3 Tl>zN1N^NuNV#O3 Tl3Tn3Tp3Tr3Tt3Tv3Tx3Tz>/N1N^NuNV#O3 Tl3Tn3Tp3Tr>+N1N^NuNV#O3 Tl3Tn3Tp3Tr3Tt3Tv>*N1N^NuNV3Tl# O>#N1N^NuNV>MN1 n0P n 0P n0P n0P B@09PN^NuNV#O3 Tl3Tn3Tp>LN1N^NuNV#O3 Tn3Tp3Tr>KN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz>JN1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz>IN1N^NuNV#O>6N1 n 0P n0P n0P n0P B@09PN^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz3T|>3N1N^NuNV#O3 Tl>2N1N^NuNV3Tl3 Tn>N1N^NuNV3Tl3 Tn3 Tp3Tr3Tt3Tv3Tx3Tz3T|3T~3T3T3 T3"T#$O3(T3*T>N1 n,0P n00P n40P n80P n<0P" n@0P$B@09PN^NuNV#O> N1N^NuNV3Tl3 Tn# O> N1N^NuNV3P0.|Hм3-@=|` nH2nP2RRn nm.TNB@09PN^NuNV#PS#SS#TlS#PS#OS#OS#ST> aF3POpN^NuNV>a*pN^Nu#TM"<MpsNBNu0/@kR@`S@@NuNV3 Q=|`0nQ"n 0T Rn nm3TByT3T3TN1N^NuNV# M3 Q3T3T3T3TN1#RMN^NuNV3 Q3 Q3TByT3T3TN1 n0M n1yM n1yMN^NuNV#M#M .мZ#M3dTByT3 T n 3TN1 n 0T#QM#MM#NM#RMN^NuNV3eTByTByT3TN1N^Nu RdGrBl1250P20 7855:G^Gg 5@GmGv 5.G}G!52GG156GGA 0@@@ 0 @@@@@@@??7x5njUx``paa??q/0 2ax ъQQQ i   i QQQш UU@PTATTAPUU3fAf3aD!D!D!D! 0a@PPP T*T(((llll(((556646T66 7l 7 8l 8>Rr Gs Bt0  b5  b5 0 b5( Rrl Gsl Bt0l pxqr#xs#tBxuBvaxwaxxyzx{|x}~x5HHX 5dX0 ,qH("!! 9 $##"9  &%%$9( (''&96 ,)*qt*9(++t*q-.qt.9,//t.q615AHR$322 19 5440 39` 0G` @7Gm>8G>9G>:G>;G><9DL>=9R>>GvGv%,G8GPG( 8G(,8G8PGDPH`R` H`H H n@ j P( QH( H*( QH0< j H2(H7,(H;X(j,H@(HE,(j8HJ(HL,(HNX(HP(jDHR(HU,(! j` HY(H\,($"#jn#H`(!Hc,(%Hg8'Hj8(pHqhH ,`HDhHPXH< 0H,8@  p H@Hh@ p  H@ Hh@p,H@ Hh@p8H@Hh@pDH@Hh@pPH@Hh@HXxI P`8'I `8IIII#I(I-I2I7I<I@IDIHILIPITIW    ()c  &  J j F nt t &t &  ttttttttttttttt tj>>>>>ttz__:__ _M9999F__/__/__999999__nn__nn__nnCancel01234RS232 Config.Install PrinterRS232 PORT CONFIGURATIONBaud Rate:Parity:Duplex:Bits/Char:Strip Bit:Flow ControlXon/Xoff:Rts/Cts:19200NoneOddEvenFullHalf8765OnOffOnOffOnOffOKCancelPrinter Type:Pixels/Line:Printer Port:Paper Type:Color:Quality:DotDaisyB/WColor1280960DraftFinalPrinterModemFeedSingleINSTALL PRINTEROKCancel1920096004800360024002000180012006003002001501341107550 CONTROL PANEL EMULATOR Control Panel>FP"        8P&0    *                                                      "                    &<$,"(&,     ,        :$ P PL :" " V 6,  D0 ,             &*," ( *( *`,         D0d>                           ,   R00H0000`x00H0000000000000 H`f..|Nt.NA"/0<NBNuNVJy$ fB?<NT3$ N^NuNVJy$ gB?<NTBy$ N^NuNV>$N N^NuNV>$N N^NuNVBn`0n%40Rn n m3%H.%/<$/<%4N $PN^NuNV>%?9&?9&?9&BgNRP3&"Jy&"m\>%?9&?9&?9&?9&"NP>%?9&?9&?9&?<$?<$BgBgN p``B@N^NuNVN $.#b/<%/<%/<&N> 3$ y%f:Bn`,0.м @0.м @Rn n&m.?9%NT3&.?9%NT3& aNL y(#fN 09$y& fa09$y&fa.%/<&/<&/<&?<BgNa,J@g\afNZa>&"N>&"N>%?9&?9&?9&?9#b?9%BgBgN `.X?<N .T>$N BWNL`N^NuNVaByDBy,.$/<%2/<%L/<%J/<N P>$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JWBgN >$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JW?<N >$?9%2?9%L?9%J?<Bg/<NBW/<N X|%fa`a>$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JW?<N >$?9%2?9%L?9%J?<$?<$09$H?09%LW09%2H?09%JW?<N N^NuNV=| `*0.м @ h f0.|SRn no=|`*0.м @ h f0.|TRn no yfB9R`R ylfB9W`W=|`*0.м @ h f0.|URn noB9V yf9V yf9Va~N N^NuNV=| `0.м @Bh Rn n&m9SH| м @1| 9TH|м @1| 9RH|м @1| 9UH|м @1| 9WH|м @1| 9Vg 3`39Vg 3`3N^NuNV>/<&$NX-|&$ n #@RDf n a@RDfBn` nH|2nRRRn noN^NuNV>/<&$NX-|&$ n #@RDf n a@RDfBn`"0n"|R0H|0"nRnR no>/<&$N0XN^Nua?<NNT#aa6aa6<van6<HafGaD?<?<NMX|f*?<?<NMX6 9WfC??<?<NM\?<?<NMX|f?<?<NMX6H@<bf8aa~aBa:aaZaa\a|6<HaGa`f<ag* 9Rg??<?<NM\??<?<NM\`66<waaaaNNuB?< NA\#Nu/9?< NA\Nu y0<?BQNu yC0<"QNu yC0< QNuB@g??<?<NM\`Nu?<?<?<NM\??<?<NM\Nu? aF3%v%pN^NuNV>a*pN^NuNV#&>N N^NuNV#&3 %V>2N N^NuNV3%V3 %X3 %Z3%\3%^3%`3%b3%d3%f>3N N^NuNV3%V# &>4N N^NuNV#&>6N n 0%x n0%z n0%| n0%~B@09%vN^NuNV3%V3 %X3 %Z3%\3%^3%`3%b3%d>IN N^NuNV3%V3 %X3 %Z3%\3%^3%`3%b3%d>JN N^NuNV>MN n0%x n 0%z n0%| n0%~B@09%vN^NuNV3%V# &>NN N^NuNV3%V# &>#N N^NuNV#&3 %V3%X3%Z3%\3%^3%`>*N N^NuNV#&3 %V>zN N^NuNV#&3 %V>{N N^NuNV3%V3 %X3 %Z3%\3%^>dN N^NuNV3%V3 %X3 %Z3%\3%^>eN N^NuNV3%V>fN N^NuNV3%V>gN N^NuNV3%V3 %X>hN n 0%x n0%z n0%| n0%~B@09%vN^NuNV3%V>kN N^Nu %,8P( 8(,88P DP`R` #`H - n@ j 6( ;,(@X( E(j I(N,(RX(j,W(\,(j8a(c,(eX(g(jDi(l,(! j` p(s,($"#jn#w(!z,(%~8'8[2][The GEM Desktop has no more|windows. Before you open the|emulator, close a window that|you're not using.][OK]RS232 PORT CONFIGURATIONBaud Rate:Parity:Duplex:Bits/Char:Strip Bit:Flow ControlXon/Xoff:Rts/Cts:960048001200300NoneOddEvenFullHalf8765OnOffOnOffOnOffOKCancel VT52 Emulator Set RS232 Config.********************************* | Atari VT52 Terminal Emulator | | (c) Atari Corp. | ********************************* Press: 1) UNDO to return to desktop. 2) HELP to configure terminal.                  $"      B$6*&,lDZ F    $                   0000000Article 21737 of comp.sys.atari.st: Path: mucs!ukc!mcsun!uunet!aplcen!samsung!cs.utexas.edu!sun-barr!newstop!sun!imagen!atari!apratt From: apratt@atari.UUCP (Allan Pratt) Newsgroups: comp.sys.atari.st Subject: Re: Atari STE Sound chips Message-ID: <2062@atari.UUCP> Date: 1 Mar 90 19:46:57 GMT References: <1990Feb24.222700.22004@newcastle.ac.uk> <729@duteca.UUCP> <1990Feb28.195455.17049@chaos.cs.brandeis.edu> Organization: Atari Corp., Sunnyvale CA Lines: 39 topgun@chaos.cs.brandeis.edu (Chandra Bajpai) writes: >What type of sound chip does the STE use? Is it different from the ST? >Does the quality of the sound chip rival that of the Mac II/NeXT/Amiga? The STe has two sound subsystems. One is like the ST's: it's a Yamaha PSG (Programmable Sound Generator), also available from General Instruments (I think), which is why you see it referred to as "The PSG" and "The GI Sound Chip." The other sound subsystem in the STe is our own creation: it's a two-channel 8-bit digital-to-analog converter which is fed by DMA (direct memory access), which means the processor can set it up and then go do something else while it's playing. You will hear that referred to as "digital sound" or "DMA sound." Data goes to the DAC at 50KHz, 25KHz, 12.5KHz, or 6.25KHz, selected in software. There are two channels, one left and one right. You can play monaural sound out BOTH speakers and use only half the data. The quality is very good. I don't know how to quantify that. Remember that digital sound is only as good as your sampler plus your playback (including amp and speakers), and the STe serves as part of the playback system: you provide the amp and speakers. The sound will come out the monitor's speaker, but that's not stereo and it's just not up to the task. The NeXT box has a DSP (digital signal processor), which doesn't just play back sound, it GENERATES it from formulas or other data. That's a different beast altogether. Amiga's the same way. I guess those chips can simply play a sampled sound, and I don't know how to compare them against the STe's sound capability. The STe is certainly better than the Mac's digital-sound-output mode: the (highest) sampling rate is higher and we use better filters to smooth out the "jaggies." For more technical specs you'll have to write to Atari; I don't know anything about audio electronics. ============================================ Opinions expressed above do not necessarily -- Allan Pratt, Atari Corp. reflect those of Atari Corp. or anyone else. ...ames!atari!apratt Article 21527 of comp.sys.atari.st: Path: mucs!ukc!mcsun!sunic!uupsi!rpi!brutus.cs.uiuc.edu!apple!snorkelwacker!mintaka!ogicse!ucsd!ucbvax!vaxb.york.ac.UK!SOCS18 From: SOCS18@vaxb.york.ac.UK (Vision Newspapers) Newsgroups: comp.sys.atari.st Subject: STE DMA sound Message-ID: <9002230807.AA05084@ucbvax.Berkeley.EDU> Date: 22 Feb 90 21:23:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 209 OK, here is the documentation for STE DMA sound output. More documentation when I've typed it in. Screen blanker postings when I've got a copy of uuencode ... please be patient ----------------------- cut here ---------------------------------- Information from "Atari STE Developer Information Addendum" STE DMA Sound registers Register Access Description FF8900 R/W 00 - sound disabled (reset state) 01 - sound enabled, disable at end of frame 11 - sound enabled, repeat forever FF8902 R/W Frame base address (high) FF8904 R/W Frame base address (middle) FF8906 R/W Frame base address (low) FF8908 RO Frame address counter (high) FF890A RO Frame address counter (middle) FF890C RO Frame address counter (low) FF890E R/W Frame end address (high) FF8910 R/W Frame end address (middle) FF8912 R/W Frame end address (low) FF8920 R/W Sound mode control: xxxx xxxx m000 00rr Where for m: 0 Stereo mode 1 Monophonic mode Where for rr: 00 6258 Hz sample rate (reset state) 01 12517 Hz sample rate 10 25033 Hz sample rate 11 50066 Hz sample rate FF8922 R/W MICROWIRE data register FF8924 R/W MICROWIRE mask register Volume/controller commands (device address is always 10) -------------------------------------------------------- 011 DDD DDD Set master volume 000 000 -80 dB 010 100 -40 dB 101 XXX 0 dB 101 xDD DDD Set left channel volume 00 000 -40 dB 01 010 -20 dB 10 1xx 0 dB 100 xDD DDD Set right channel volume 00 000 -40 dB 01 010 -20 dB 10 1xx 0 dB 010 xxD DDD Set treble 0 000 -12 dB 0 110 0 dB 1 100 +12 dB 001 xxD DDD Set bass 0 000 -12 dB 0 110 0 dB 1 100 +12 dB 000 xxx xDD Set mix 00 -12 dB 01 Mix GI sound output (ST sound chip) 10 Do not mix GI sound output 11 Reserved ---------------------------------------------------------- Sampled sound data is stored in memory as a series of bytes, which represent a speaker displacement from -128 to +127. Zero represents the neutral or middle speaker position. Playback is programmable at one of four rates : 50kHz, 25kHz, 12.5kHz or 6.25kHz. During the horizontal blanking phase, samples are fetched from memory by the DMA sound chip, and fed into a Digital to Analogue Converter (DAC). The output of the DAC is then filtered by a four-pole low pass filter to a frequency equal to around 40% of the sample frequency. The signal then passes through a two pole 16kHz low-pass filter, and fed into the National Semiconductor Volume/Tone controller (LMC1992). The final output is available from the RCA jacks on the back of the STE, which can be fed into an amplifier and hence to speakers, headphones etc. Both stereo and mono sample replay is provided, but both stereo channels are mixed along with the ST's sound chip output for monitor speaker output. Sound chip output can also be sent to the stereo output jacks as well. In stereo playback mode, the same data is regarded as words, with the high byte of the word being the sample for the left channel, and the low byte the right channel sample. In mono mode, each byte is output to both left and right stereo channels, but data is still fetched one word at a time. This means that mono sample data must always be an even number of bytes. Samples are grouped together in frames. Each frame can be played once, or repeated automatically forever (until stopped). Two registers are loaded with the frame start and end address - the end address is actually the first byte beyond the end of the sample. Thus a 512 byte sample with a frame start address of 101024 would have a frame end address of 101536. Table One gives the location and description of each DMA sound register. Actually playing a sample is really quite straightforward. Simply assemble the data in memory, load the start and end addresses, set stereo or mono mode and the playback frequency. Finally, write a one to the sound control register, and the sample will play once. Producing continuous sound and linking frames together are the next steps, and hardware support is provided for these processes. The DMA sound chip produces a 'DMA sound active' signal which is connected to the external input of MFP Timer A. This signal is a one when samples are being played, and zero otherwise. At the end of a repeated frame, this line goes from one to zero, and then back to one again. Thus setting Timer A into event countdown mode allows you to generate an interrupt when a frame has been played a set number of times. Frame repetition is seamless - there is no time delay between the end of a sample, and the start of it's replay, because the frame start and end registers are double buffered. Writing to these registers actually places the data into a holding area, and the contents of the holding area actually go into the true registers when the chip is idle (at the end of the frame, if one is currently being played). Thus, if you wanted to play two consecutive frames, you would write the start and end addresses, and set the control register to three. The first frame will start playing, and you can immediately write the start and end addresses of the next frame, without waiting for the first frame to finish. There will still be an interrupt from Timer A at the end of the first frame, and you could use that to load the address of a further frame, and so on. One further thing to note is that the 'DMA sound active' signal is also exclusive-ORed with the 'monochrome monitor detect' signal, and fed into the GPIP I7 input of the MFP. This was provided to enable interrupt driven sound without using the last free timer of the MFP. It is a little more difficult to use, since you will get a different signal edge depending on whether a mono or colour monitor is attached, as well as an interrupt at the end of every frame. Monochrome monitors ground the 'mono detect' line, resulting in a zero when the bit is read from the MFP. Colour monitors don't ground the line (it is left floating), and the bit reads one. When DMA sound is active, this situation is inverted (because of the XOR with the 'DMA sound active line'). TOS actually looks at this bit during vertical blank time, to see if the monitor has been changed, but TOS on any machine with the DMA sound chip has been appropriately modified to avoid problems. Finally, the 'DMA sound active' line goes from active to idle (one to zero) after the last sample has been fetched. There is a four-word FIFO (First In, First Out) buffer inside the chip, so it will be eight sample times (in stereo mode) before the sound actually finishes. If you do not reload the frame registers in this time, then the join between samples will not be seamless. The volume and tone controller of the STE is connected via a MICROWIRE bus interface. The idea behind this is that further devices can be added to the bus in the future. The MICROWIRE bus is a simple three wire serial connection, with a protocol to allow multiple devices to be controlled individually. In the general case, the data stream consists of N address bits, followed by zero or more don't care bits, and then M bits of data. The actual hardware interface in the STE consists of two 16 bit read/write registers, one for the data to be shifted out, and a mask indicating which bits are valid. A one in any bit of the mask indicates that the corresponding bit in the data register is valid. Data transmission starts as soon as the data register has been written to, so the mask register must be loaded first. Sending takes approximately sixteen micro-seconds, and if the data register is read during this time, a 'snap-shot' of the data being shifted out will be obtained. This means that if you wait for either register to return to its original state, you can be sure that sending has been completed. The volume/tone controller is addressed by a two bit address field of %10 (binary) and a nine bit data field. Table One details the commands that can be sent to the device, and the addresses of the MICROWIRE registers in the STEs memory map. Actually sending these commands is easier than it looks. Simply set the mask register to $07FF, and place the data in the lower nine bits with %10 in the upper two bits. For example, setting the mask to $07FF and the data register to $04C4 will set the master volume to $14. That's all there is to it! Regards, Mathew Lodge *********************************************************************** * c/o Dept. Computer Science * "Baldrick, fetch me a turkey _so * * University of York * big_, you'd have thought its mother * * Heslington * had been rodgered by an Omnibus" * * York, UK * * * YO1 5DD * JANET : SOCS18@uk.ac.york.vaxa * *********************************************************************** Article 21816 of comp.sys.atari.st: Path: mucs!ukc!mcsun!uunet!aplcen!uakari.primate.wisc.edu!zaphod.mps.ohio-state.edu!tut.cis.ohio-state.edu!ucbvax!vaxb.york.ac.UK!SOCS18 From: SOCS18@vaxb.york.ac.UK (Vision Newspapers) Newsgroups: comp.sys.atari.st Subject: STE display hardware Message-ID: <9003050806.AA15885@ucbvax.Berkeley.EDU> Date: 5 Mar 90 00:14:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 82 OK folks, it's STE programming time again... Data from "Atari STE Developer Information Addendum", addresses in hex, sizes in bits (in table) Video Harware Modifications =========================== Addr Access Size Use ====== ====== ==== ================================================= FF8204 R/W 6 Video address counter (high) FF8206 R/W 8 Video address counter (middle) FF8208 R/W 8 Video address counter (low) The change here is that these registers are now read and write, allowing the programmer to update the video refresh address to any word boundary _at any time_. FF820C R/W 8 Video base address (low) (VBASELO) This register didn't exist on the ST, but on the STE it allows the positioning of the screen base address on any _WORD_ boundary FF820E ?? 8 Line offset (LINEWID) - the number of extra words added to the address counter at the end of each line, _MINUS ONE DATA FETCH_. This allows for virtual screens that are wider than the actual screen display. Clearing this register means the STE acts like an ordinary ST. FF8240 to FF825E Colour palette There are now four bits for each of the red, green and blue components. To give backward compatibility with the ST, the least significant bit is above the most significant bit. Thus the register layout is as follows: xxxx 0321 0321 0321; x=don't care RED GRN BLUE FF8264 ?? 4 Horizontal bit-wise scroll (HSCROLL). Allows the start of each line to be delayed by 0-15 bits, thus giving instant horizontal scrolling. Horizontal fine scrolling isn't quite as trivial as it looks. The pixel offset is loaded into HSCROLL, and the documentation then says the following about the LINEWID register : "If you are actively scrolling (HSCROLL<>0), this register should contain the additional width of the display line _minus one data fetch_ (in low resolution one data fetch would be four words, one word for monchrome etc.)" The reason for the extra data fetch becomes clearer if you think about what is actually happening. If you fine scroll by n bits, then n bits are effectively missed off the left hand edge of the screen. But to get a complete line of pixels, n bits must be added to the right hand side of the screen. This constitues one extra data fetch for the display processor beyond the usual requirement. For example, if you had three low resolution pictures side by side in memory, and you wanted to scroll across them, you would set LINEWID to 160 when HSCROLL=0 (no extra data fetch). When HSCROLL<>0, LINEWID would be set to 156 (four less due to the extra data fetch done automatically by the display processor). Vertical scrolling is trivial - simply set the video address base to the required address at horizontal blanking time. That's all folks - for now - more info on the new controller ports soon. Regards, Mathew Lodge *********************************************************************** * c/o Dept. Computer Science * "Baldrick, fetch me a turkey _so * * University of York * big_, you'd have thought its mother * * Heslington * had been rodgered by an Omnibus" * * York, UK * * * YO1 5DD * JANET : SOCS18@uk.ac.york.vaxa * *********************************************************************** `. 6*O.|V*m - ЭЭм"aJ@gBNAJA."| 0< Q09V|A. 09X|A. 09Z|A. TB?< NA\O#` |#,/9`?< NA\OBg/?<1NAJ4 _2fF/A |. pNAgI|A0XLFN^NuHzH?<&NN\O&y\pf,  g $g g g`pNu#\NuNVH>.<. BWBg?<|NX=yrR=yrTJyNgL09sn|n009sn|m 09sn|n09sn|l >NN3s3sJyZgX3mh3mj>Bg?<!NX>?N&T3pZ3p\BW?<?<NX3s3sJyfs?9s/9rNz\JLN^NuNVH..A-HNByZ3s`3sbBF`>//.NPPpdHH-@.NR .`.NRB`JyZfXBW/<8NXBWBg?<NX.lrNBW/<8NXBWBg?<~NX.\N-|d3Z`0-|Ij`&-|I``J@gb|gް|gf|gJg./.N>XNRFn mJyZgB.lrNBWBg?<NXBW/9\NXBWBg?<~NXByZ1NVH..<. N33n#nN` .dNRJyfNByynBynBnNBE`HB G-P .EfB .Jfx .Ifx .Ijfx G PREFm0=NVH 2(y#`Sy09s@H*@s>Rys y sfBysJyg If -+fByJygf Ef2 |"yn 0Ef ynY.ޭ ynY `*>/ /9nNPPnSyn3n/- UNXJyf #B92!NֆN6N6ZN֘#N/9NNu#b/9bNu#vt/9vNu#/9Nu#,/9Nu#/9Nu#/9Nu#d/9Nu#/9Nu#/9Nu#/9Nu#* /9*Nu,    .6B.f" >,&   F 0X           `:` f`dJxfA`A P=f" hmBCzp f8QP`, P?f J9g##/|vByN"m y #f EgQ`R( yNJDESKTOP.INF&o k  Ј<.@// ?<?<JNAO aBg/<?<1NAJ/ / B@rC02 x$f*`0 _INFf2` _MCHf fpRPH$fJ@f2`p$x )g2`\o _INF!|PHBpЁ!@`: xC!` $HPH&IPI&& f"_INF#|PIB#|(&_$_NuA8NA NZ090g A#NH090D@HA pN0A+N&090gNAp!N#rNu?<NA/?< NA\ONu/ /??<NMPO @$_Nu/ /?<&NN\O$_NuDESKTOP.INF patch installedalready installedthis machine is not an STEthis STE ROM version does not need the patch ERROR: . mytrap1main_StkSizeerrno0Pterm0dmsgCconwsjstartt1savercookie_jvalidate:SetexcvSupexecMADMAClongframjmp_abs_NFopen=opcodeFO_filenFO_modeFread?FR_handlFR_countFR_bufstartupsuptrp gheadplstkchkfnckreadDdeskinftstb4gotopennoreadjreadbufsaveretmungeitvxmunggetbytnxbytgoteresendTpaStartTpaEndTextSegSTextSegS DataSegSDataSegSBssSegStBssSegSiDtaPtr PntPrcPt$Reserved(EnvStrPt,Reserved0CurDrv7Reserved8CmdLineBasePage> h""   <. `.. STE_FIX PRG Zt README Vt TROMPATCHPRG Xt MESSAGE PRG ;`:` f`dJxfA`A P=f" hmBCzp f8QP`, P?f J9g##/|vByN"m y #f EgQ`R( yNJDESKTOP.INF&o k  Ј<.@// ?<?<JNAO aBg/<?<1NAJ/ / B@rC02 x$f*`0 _INFf2` _MCHf fpRPH$fJ@f2`p$x )g2`\o _INF!|PHBpЁ!@`: xC!` $HPH&IPI&& f"_INF#|PIB#|(&_$_NuA8NA NZ090g A#NH090D@HA pN0A+N&090gNAp!N#rNu?<NA/?< NA\ONu/ /??<NMPO @$_Nu/ /?<&NN\O$_NuDESKTOP.INF patch installedalready installedthis machine is not an STEthis STE ROM version does not need the patch ERROR: . mytrap1main_StkSizeerrno0Pterm0dmsgCconwsjstartt1savercookie_jvalidate:SetexcvSupexecMADMAClongframjmp_abs_NFopen=opcodeFO_filenFO_modeFread?FR_handlFR_countFR_bufstartupsuptrp gheadplstkchkfnckreadDdeskinftstb4gotopennoreadjreadbufsaveretmungeitvxmunggetbytnxbytgoteresendTpaStartTpaEndTextSegSTextSegS DataSegSDataSegSBssSegStBssSegSiDtaPtr PntPrcPt$Reserved(EnvStrPt,Reserved0CurDrv7Reserved8CmdLineBasePage> h""   < STE_FIX.PRG README FILE On this disk you will find a folder called AUTO. Within this folder is a program called STE_FIX.PRG. This solves the problem of telling your STE to boot into medium resolution by altering the interpretation of the resolution flag in the DESKTOP.INF file. In plain English this means that when you save the STE's desktop to medium resolution using the SAVE DESKTOP option the STE ignores the fact that you have changed the saved resolution preference. If you switch on your STE with this disk in the disk drive the STE_FIX.PRG will automatically be run and will correct the STE mis-interpretation of your DESKTOP.INF file and boot in medium resolution if the DESKTOP.INF file is saved in that way. The STE_FIX.PRG program this README file are free available and may be copied onto any disk using the standard GEM file copy procedure. If you are at all unsure of this procedure please consult your owners manual. NOTE: This program will only work on the Atari STE range of computers. Atari (UK). `. 6*O.|V*m - ЭЭм"aJ@gBNAJA."| 0< Q09V|A. 09X|A. 09Z|A. TB?< NA\O#` |#,/9`?< NA\OBg/?<1NAJ4 _2fF/A |. pNAgI|A0XLFN^NuHzH?<&NN\O&y\pf,  g $g g g`pNu#\NuNVH>.<. BWBg?<|NX=yrR=yrTJyNgL09sn|n009sn|m 09sn|n09sn|l >NN3s3sJyZgX3mh3mj>Bg?<!NX>?N&T3pZ3p\BW?<?<NX3s3sJyfs?9s/9rNz\JLN^NuNVH..A-HNByZ3s`3sbBF`>//.NPPpdHH-@.NR .`.NRB`JyZfXBW/<8NXBWBg?<NX.lrNBW/<8NXBWBg?<~NX.\N-|d3Z`0-|Ij`&-|I``J@gb|gް|gf|gJg./.N>XNRFn mJyZgB.lrNBWBg?<NXBW/9\NXBWBg?<~NXByZ1NVH..<. N33n#nN` .dNRJyfNByynBynBnNBE`HB G-P .EfB .Jfx .Ifx .Ijfx G PREFm0=NVH 2(y#`Sy09s@H*@s>Rys y sfBysJyg If -+fByJygf Ef2 |"yn 0Ef ynY.ޭ ynY `*>/ /9nNPPnSyn3n/- UNXJyf #B92!NֆN6N6ZN֘#N/9NNu#b/9bNu#vt/9vNu#/9Nu#,/9Nu#/9Nu#/9Nu#d/9Nu#/9Nu#/9Nu#/9Nu#* /9*Nu,    .6B.f" >,&   F 0X           `*O*m - ЭЭ// ??<JNA Hz?< NA\?<NATBgNAECheck out the READ_ME file before you do anything else...... Press a key . `.. VIRUS 1 6VIRUS 2 DVIRUS 3 ?VIRUS 4 i Subject: Virus 101 - Chapter 1 To: info-atari16@score.stanford.edu Preface: The program VKILLER is specific to the ATARI ST. My apologies for not making this clear in the previous posting, which went to several newsgroups. I have recieved far too many requests for the program from users of other systems to reply to each one individually, and the mailer has bounced some of the replies I tried to send. If you have an Atari, VKILLER was posted here a few weeks ago, and is available in the archives, on GEnie, Compuserve, and from most public domain disk distributors and User Group libraries. The current version is 2.01. Initial postings will cover virus fundamentals, as they apply to the area of the Atari ST and, similarly, to MS-DOS systems. The file systems of the two machines are nearly identical. These general information articles will be cross-posted to the newsgroups in which this topic is now active. Future postings will be made only to the Atari newsgroup, since they will deal with viruses (the plural, according to Webster's, is viruses) known to exist in the ST world. They would automatically be different than an IBM virus, since they are in the 68000 instruction set, or from a Mac or Amiga virus, since the file systems differ. Since all the viruses I have located are the "BOOT SECTOR" type (far and away the most common), that's what I will dwell upon. If and when the proposed newsgroup comp.virus becomes active, it will be added to the list for all postings. Your generic disclaimer: I just an old-school computer hacker, with 20 years in the software business. I built my first IMSAI many years ago, and have had several different computers. That qualifies me to have spent a lot of time on computers, but nothing further. I may be wrong about some things, may have a different opinion than you or anybody else, or most anything else you'd care to have disclaimed. What I think is my own opinion, and in no way represents the opinion or position of my employer or anyone else. I've written several articles for magazines as well as software related to virus detection and killing, but I have been known to be wrong (so they tell me :^)). While posting any kind of information about viruses may trigger someone to attempt creating one, I believe that the benefit of the knowledge to potential victims outweighs that risk. I don't believe that you can stop someone (who wishes to) from creating a virus by withholding information - it is already available from many sources. Since not all viruses act the same, or attempt to attack in the same manner, it may help potential (or current) victims to learn about the symptoms of the viruses known to exist, and how to protect themselves. While the concept of viruses can be complex, I'll try to keep things at a level that should be understandable by most anyone past the casual user genre. However, since I've been at this sort of thing for some time, what I consider basic knowledge may not be familiar to everyone. Advance apologies are offered here for any invalid assumptions, typos, smart alec remarks, grammatic errors, or whatever offends you. Some basic terms, as they have come to be used in this area: A VIRUS is any program which spreads itself secretly. It may be destructive, a prank, or even intended to be helpful, but it spreads. A TROJAN HORSE is a program which executes one function secretly while appearing to be accomplishing some other task, or appearing to be some other program entirely. One task a Trojan Horse may accomplish is to install a virus, which would then spread itself. A WORM is a program or function which imbeds itself inside another program, be it an application, part of a system, a library or whatever. It may or may not spread itself by some means, and may or may not have destructive intents. Now, to the basics of a disk (specifically floppies, but true of most hard disks as well): A DIRECTORY is a list of files and sub-directories. There is one primary directory (called the root directory) on a disk. It contains the entries for files, and other directories (called sub-directories, or folders on the Atari). Sub-directories (folders) may contain entries of other sub-directories, files, or both. Every file has one entry in the disk directory (or in some sub-directory). That entry contains, among other things, the file name, date and time of creation, length, and the address of the first entry in the File Allocation Table (FAT) for the file. A FAT is a File Allocation Table. It is a road map of how the operating system will locate data on a disk. Essentially, it is a series of pointers. The directory entry of a file points to the first FAT entry of that file. That entry points to the next, and so on, until the last entry, which contains a special value indicating end of file. There are two copies of the FAT on the disk, since it is absolutely critical. Lose the FAT, and the data on the disk becomes un-accessable. A BOOT SECTOR is the first sector on a floppy disk. With the Atari (and MS-DOS) system, it contains configuration information about the disk. That information includes how many tracks are on the disk, how many sectors per track, how many sides on the disk, how big the FATs and directories are, where the data begins, etc. On the MS-DOS systems, the boot sector contains the ID of the operating system under which it was formatted. On the Atari, that value is not used, but replaced (in part) by a number. That number should be different on every disk, and is used as part of the mechanism by which disk changes are detected. The boot sector may or may not contain executable code. If it does contain executable code, it is normally executed only at system powerup or system reset time. On all such disks, the boot sector is number 0, the first sector on the first side of the first track. On a standard format Atari disk, the next five sectors are the first copy of the FAT, the next five sectors are the second copy of the FAT, the next seven sectors are the root directory, and the remainder of the disk is available for data. Now, on with the show: Floppy disks are changed on a regular basis while the computer is being used. More so on systems with no hard disks, but periodically on most all systems. This event, referred to as a "Media Change", is detected by the computer's disk drive. The disk door is opened, the status of the write protection changes as one disk is removed and another is inserted, etc. When that happens, the operating system must recognize that the disk has been changed before attempting to read or write to the new disk. The operating system reads the disk's boot sector to learn about the newly inserted disk. That instant, when the operating system checks the new disk, is when nearly all the boot sector viruses spread. We'll get to that in the next chapter, but first, a more primary question: How did the virus get in there? When a computer is booted up from a power off state, or reset (in most cases), it starts executing code from internal ROMs. Those ROMs set up primary vectors, minimal configuration information, and perform some fundamental tests. Then they start moving into uncharted waters. They have to find out what devices are attached, and get them into operating status. They also have to provide a means of expanding their own capabilities to support new devices, functions, and whatever else which may not have existed when the ROMs were created. One of the means by which this is accomplished is by checking various addresses for special codes, magic numbers, or any kind of response to a read or write. Another function which may be enabled is checking the boot sector on an inserted floppy disk for executable status. If that boot sector has executable status, the code contained in the boot sector is executed. That code may cause other portions of the disk to be loaded and executed, set variables or vectors, or nearly anything imaginable. That includes infecting the system with a virus, if that's what the boot sector code contains. Executable status may be via a special flag value in a reserved address, but it is normally determined by adding up the value of all the data bytes in the boot sector. If the total derived (called a checksum) is a specific value (a "magic" number), then the boot sector is deemed executable. The code is usually executed at that time. The code is not normally garanteed to be loaded at any specific address in memory, so it must be "position independant", or capable of executing no matter where it exists in memory. The boot sector is of limited size, normally 512 bytes. While that is enough for a small program, it may not be enough for whatever task it is designed to accomplish. So, part of what the code in the boot sector accomplishes must be to load the rest of the code it needs to get the job done. This may be a normal data file, or hard coded to some other part of the disk. If the code from the boot sector is designed only to accomplish some task, it will normally take the steps to do so, then return to the operating system. This may be setting the screen resolution or colors, issuing an initialization command to some device, or setting up some option or feature. If the code is designed to remain available after the initial execution (such as part of a device driver), it must inform the operating system that it wishes to remain resident. The operating system then alters the amount of RAM available to protect the space occupied by the loaded code, so that subsequent programs do not tamper with the loaded routine. Such a routine is referred to as a "Terminate and Stay Resident" routine, or a TSR. Viruses must be TSR type programs. They have to remain in the system, and active, to be able to accomplish their spread, and eventually, their true goal. If the boot sector program was designed to attack immediately, it may accomplish its destruction, but it would never get the opportunity to spread, and the disk which caused the attack would be easily identifiable. Most viruses accomplish system infection by taking over a "vector". A vector is a specific address in system memory which contains the address of a routine or function. When an interrupt (such as pressing a key, the clock ticking, or so on) occurs, processing is suspended, and the system loads the address in some vector associated with that event. It executes the routine at the address which was stored in the vector, then resumes whatever it was up to when the interrupt occurred. Other vectors are not associated with interrupts, but with specific functions, such as display a character on the screen, read a sector from the disk, write to the printer, and so on. To take over a vector, the steps are fairly simple. A RAMdisk, for example, will usually take over a disk read/write vector. When it installs itself, it removes the current address from the vector assigned to the disk read/write function. It saves that address in it's own code, and places the address of it's own code in the vector. When a disk read/write call is made by the operating system, the operating system loads the address found in the proper vector, and starts executing the code found at that address. That address now points to the executable code of the RAMdisk. The first thing the RAMdisk does is check the function call's parameters to see if the read/write is for the RAMdisk. If it is, the RAMdisk accomplishes the read or write, and returns to the operating system. If the read/write is for some other disk drive, the RAMdisk code passes the call on to the address it removed from the vector, allowing the assigned device to accomplish the task. There may be more than one alteratiion of the vector. Each new routine which is installed will save the old vector, and insert itself. That means that the routine installed last will get the first access to any call which uses that vector. If it does not want the call, it passes the call on to the address it found in the vector, and so on. The significance of this sequencing is that a boot sector virus, if present, will be one of the first "vector snatchers" to get installed. Conversely, it will be one of the last routines in the sequence to get executed when a vector is accessed. If the vector in question happens to be for floppy disk I/O, the virus will be one of the last vectors before the real physical read/write routine. So, if a program designed to detect a virus's floppy disk I/O calls is executed as part of a startup procedure, it can easily be fooled. The detect program will see only normal system I/O calls passing through the vector. The virus resides in the vector list after the anti-virus program, so the anti-virus will never see any activity generated by the virus. The anti-virus thinks that things are progressing well, while, in reality, the virus is either spreading or doing damage behind the anti-virus's back. If the anti-virus gets installed first (say, by being in a boot sector itself), it has a better chance of offering protection, but not an absolute one. Some viruses check things like ROM version numbers, and know the absolute addresses in the ROMs of the functions they want. By using those addresses, they can bypass subsequent links in the vector list, and still do their dirty work. They can also refuse to install themselves if the addresses or version numbers do not correspond to the environment they want. End of Chapter 1. -- *George R. Woodside - Citicorp/TTI - Santa Monica, CA *Path: ..!{philabs|csun|psivax}!ttidca!woodside Subject: Virus 101 - Chapter 2 To: info-atari16@score.stanford.edu In response to a lot of the mail I've received: 1) You haven't missed the "rest of the chapters". I'm posting them as I get them written. 2) You may not agree with me. I tried to set down the definitions and terms as I would be using them, for the benefit of those who weren't familiar with them. This whole area is rather vague, and most of us in the trenches and making up the rules, as we learn the game. When we left our virus at the end of Chapter 1, it had managed to get itself installed in our system by being present on the boot sector of a disk in the machine at cold start or reset. Another way a virus may be installed is via a trojan horse program. Trojan horses come in many flavors. Some disguise themselves as programs which provide some useful function or service, while secretly doing something else. The something else may be installing a virus, sabotaging some part of a disk, setting up hooks to steal passwords on time sharing systems, or whatever else you can imagine. In the event of the virus installer, the trojan horse has a bit more flexibility than a typical boot sector virus, simply because it doesn't have to fit itself into a relatively small space. Since it is hiding in a larger program, it can be whatever size is necessary to accomplish the task. A typical boot sector contains information about the layout of the disk it resides upon. This block of data requires 26 bytes. The first three bytes of the boot sector are left available for an assembly language "jump" command, to allow the execution of the code to skip over the boot sector's data block. And, the boot sector must add up to the proper magic number to have executable status. That will require another two bytes, since the checksum is a 16 bit value. So, 31 bytes are allocated. Since (at least in the 68000 family) machine instructions are always 16 bits and must begin on an even address, 32 of the 512 bytes in the boot sector are not available to any executable program. So, there are 480 bytes available for the executable code. Machine instructions vary in length, depending upon what they do, and how much additional information is required. In the 68000, instruction lengths vary from one to five words, but a reasonable average instruction length for a program is just over two words. That translates the 480 bytes to 120 instructions. The virus must contain the code to install itself, reserve the memory it occupies to keep subsequent programs from over-writing it, spread itself to other disks, and whatever it really intends to do once it decides it is time to act. That's quite a bit of code to fit into 120 instructions, unless it extends itself by loading some other part of the disk, or a file. Files are pretty much out of the question. Most computer users would notice if some file they didn't recognize started popping up on a lot of their disks. There are attributes settable in a disk directory which can be used to tell the operating system that certain files are "Hidden" or "System" files. If the file had the proper status bits set, it could prevent itself from appearing in normal disk directory displays. There are, however, more flexible disk directory listing programs which will display the entries for these files, as well as normal files. There is also the problem of the space the hidden file occupies, as well as the directory entry. The space available on the disk will be less than it should be, since the hidden file is present. These symptoms would not escape detection for long. A more effective method is the use of specific disk sectors. The standard disk layout covered in the preceeding chapter mentioned such things as File Allocation Tables, and disk directory space. In a standard format Atari disk, for example, each FAT is 5 sectors long, and the directory is 7 sectors long. That is more than enough FAT space to accomodate the entire disk. A virus in need of more space than 480 bytes might write the remainder of itself in the last sector of the FAT (I have one that does this). It might also write itself in the last sector of the directory, taking advantage of a quirk in the operating system. When a disk is formatted, all data sectors are normally filled with a pre-defined value, E5 (hexadecimal). The directory and FAT space is usually set to 00. When a directory entry is made active, the file name is written in the directory, along with some other required information. When a file is deleted, the first byte of the directory entry is set to E5. That makes the entry available again. This is a carry over from the early days of floppy disks, when where the directory would exist on a disk was not as well defined. The directory entries had to appear as empty on a freshly formatted disk, so E5 was used as a deleted entry mark. That way, no matter where the directory was, a freshly formatted disk would always appear as empty. Now, since disk formats are more flexible, the directory is located by parameters, and normally the entire directory space is zeroed at formatting time. Since an active entry will have some legitimate ASCII character in the beginning of the file name, and a deleted entry will have E5 in the first byte, it is generally assumed that encountering a directory entry with a value of 00 in the first byte indicates that the entry has never been used. Since directory entries are used (and deleted ones re-used) on a first-found basis, finding one with 00 means that not only has it not been used, but none of the ones following it will have been used either. Consequently, most software stops looking at the directory entries when a 00 entry pops up. If there are several more sectors available, there may be something hiding out there, beyond the last used entry. While this method of hiding is not foolproof, the typical virus is not concerned about being bulletproof in all cases. It just has to survive long enough to reproduce itself, and it has half the battle won. As long as it keeps spreading, sooner or later it will survive long enough to do the task it is designed to do, then it wins both halves of the battle. There are other ways for the virus to get additional disk space. Typically, floppy disks are not used up a sector at a time, but rather in groups of sectors. Each group of sectors is referred to as a data "cluster". The number of sectors in a cluster is variable, and is one of the parameters stored in the boot sector. If the number of data sectors on the entire disk, minus the boot sector, FATs, and directory, is not an exact multiple of the number of sectors in a data cluster, the remaining sectors will never be used by the opearting system. A clever virus can find them and hide there. The inconvenience of this is that the unused sectors would normally be at the end of the last track of the disk, causing long (and noticeable) disk seeks to load or spread the virus. There is a parameter in the boot sector designed to permit the disk to have sectors reserved for any purpose, and not accessed as part of the normal data area. A virus could also use this method to extend itself, but it, too, has shortcomings. Using this feature requires the parameter to be set when the disk has absolutely no data on it. Reserving sectors causes the start of the data area to be moved further into the disk. While the data area would be moved, the data already on the disk would not. Consequently, altering the reserved sectors parameter would make all files on the disk garbage. (They could be returned to proper status by restoring the original value to the reserved sectors parameter, providing no disk write had occurred.) There would also be the problem of the disk's free space being less that it should. Consequently, if a virus needs extra space, using prescribed system features or hidden files is not a good choice, since it is too easily detected. The approach used so far is to hide in sectors unlikely to be used, and hope to spread before they get clobbered (and it works). OK, so now the virus has managed to get onto a disk in your library, and then get itself booted into your system at startup or reset. It may have been on a disk you received from someone, and booted with, or it may even have been installed by a trojan horse, but it is in your system. How does it spread? There are ways, and then there ways..... The most common method is through the vector reserved for floppy disk read and write functions. As we saw in Chapter 1, floppy disks get changed (some surprise, eh?). One disk is removed, and another is inserted. When that happens, the operating system is notified by the physical act of changing the disk that the event has occurred. How that event is detected will vary with different disk drives, but there are two common methods. One is the disk drive latch. Some hardware reports the transition of the latch on the floppy disk drive's door. When the locking lever is moved, a signal is sent to the disk controller card, indicating that the disk door has been opened. (Door is a carry over term from older drive mechanisms which had fully closing doors over the disk drive slot.) The operating system makes note of the fact that a disk change may have occurred. The other method is the write protect notch. On both 5 1/4 and 3 1/2 inch disks, the write protect notch tab is located in a position which makes it impossible to fully remove and install a disk without having the write protect detection mechanism be fully obstructed at some point, and fully unobstructed at some point. The detection mechanism may be a physical sense switch, or an optical sensor. Either way, as the body of the disk is removed from the drive, it will be blocked. Then, when the disk is out, the sense area is open. So, the drive will report transitions on the status line. The operating system notes the change, and sets the necessary flags to indicate that the disk may not be the same one that was there a little while ago. It may also be, if the same disk was re-inserted, but that's not important. The fact that it may have changed is very important. Attempting to read or write to the disk, without first noting the characteristics of it, could be very destructive. When the next access of the (possibly) changed disk occurs, the operating system will read the boot sector. In MS-DOS systems, I believe that the operating system assumes that if there is a possiblity that the disk has changed, it assumes that it has, dumps all information relative to the old disk, and starts fresh. In the Atari, the operating attempts to be a bit smarter. The boot sector contains a serial number which is supposed to be unique across all disks. This serial number is 12 bits long, and is assigned when the disk is formatted. If there is a possibility that the disk has changed, the operating system reads the serial number. If the serial number is different than before, the disk has changed, all old data is wiped out, and the new serial number is noted. If the serial number is the same, the disk has presumably not changed, and the data in the operating system's internal buffers is assumed to be valid. This leads to thoroughly trashed disks if two disks have identical serial numbers, and are used consecutively. In any event, when a possible disk change has occurred, the boot sector is always read to determine the characteristics of the new disk. The operating system uses the floppy disk read function to access the first sector on the disk. As previously noted, this disk read function is pointed to by a vector. If the vector has been altered to point to a virus, the plot thickens... We will assume a typical floppy disk boot sector virus for a while, and see exactly what happens. The virus first checks the number of the drive being accessed. If it is not a floppy disk, it passes the call on to the address it found in the vector. No harm done. If the call is to a floppy disk, most viruses check the side, track, and sector of the call to see if it is the boot sector. If it isn't, it passes the call on, and again, no harm done. Why? Performance. Not that the virus cares about good disk performance, mind you. What it cares about is being noticed. If it was busy snagging all the disk calls, and checking the boot sector all the time, there would be an incredible increase in disk head seeking, and a very noticeable drop in performance of the system. Anyone with at least half a brain (witch inkluds sum smarter komputer pepel) would notice that, and would become inquisitive about what was happenning. The virus would have given itself away. No self-respecting virus would want to be detected before it got a chance to spread, and possibly wreak a bit of havoc, so it remains inactive until it can accomplish its task unnoticed. When the read call is to the boot sector, the virus goes into action. The data is read into a buffer, as designated by the host operating system's call, exactly as expected. Normally, the disk read function would return to the operating system at this point, but the virus doesn't. Depending upon the sophistication of the virus, several things may happen. Some viruses will first check the image of the boot sector in the buffer, to see if they are already on the disk. If they find the disk already has the virus, the go back to sleep (pleased, we assume!). Some even check revision levels in the virus image, and replace themselves if the disk had a more recent version of themselves! If the image from the boot sector is not the virus, some will check to see if the image was of an executable boot. If it was, the virus does not alter it. Doing so would make a self-booting disk fail forever after, and would probably lead to the detection of the virus. Other viruses, not as sophisticated, will not execute this test, and may be spotted more readily. Now, assuming that the boot sector is not executable, or that it is but this virus is too dumb to leave it alone, it's time for the virus to spread. There is a copy of the boot sector from the original virus disk in a reserved memory area, from the original boot up process. The executing copy of the virus knows where that is, since it reserved the memory for itself and the image at the same time. The characteristics of the disk the virus came from may not be the same as the disk in the machine now. Depending upon the operating system's standards, the virus will either copy the disk parameter information from the current disk into its own image buffer, or copy its image into the current disk's buffer, leaving the disk's parameters unchanged. Either way, the result is a copy of the current disk's parameters, combined with the executable image of the virus. Now, the executable status checksum must be computed, and added to the buffer. This may be accomplished by a routine in the virus, or by an operating system call. If the virus is on an Atari, it might be careful enough to insure that the serial number on the new disk remains the same. Failing to do so would lead to all disks with the virus having the same serial number. That would lead to disks being accidently altered (due to the serial number test), and the virus would probably be detected too soon. When the new checksum is completed, the updated boot sector is re-written to the disk. All this occurs in much less than the time required for the floppy disk to make a single revolution, so the boot sector is re-written on the next spin. Since the rotation speed of the disk is either 300 or 360 rpms, the total time lost is less than 1/5 of one second. Nearly impossible for anyone to notice, when combined with the time required for the drive to load the head, seek to track zero, read the sector, etc. The only potential problem here is one of the virus' intended victim's primary levels of defense: the write protect feature. Despite rumors to the contrary, I have not seen a virus capable of writing to a write protected disk. The hardware in the disk drive will not write if the write protect status is set. It reports an error to the operating system. The virus can not override this protection, but it must be wary of it. Older viruses were sometimes spotted when a system error occurred, reporting that an attempt was being made to write to a disk which was write protected. If the function being performed (listing a directory, for example) should not be writing to the disk, there was reason to become suspect. Most viruses now are more sophisticated. They take over the error vector before attempting the write, and restore it afterwards. That way, if the attempt to spread themselves to the new disk fails, the error never gets reported. While the user doesn't know that the attempt was ever made, the disk also doesn't get infected. Many viruses run counters. Some count the number of already infected disks they have seen, while others count the number of disks they infect. Either way, the counting viruses have some threshold they are attempting to reach. When they reach that number, they (presumably) consider themselves thoroughly spread, and it is now time to start their third act. End of Chapter 2. -- *George R. Woodside - Citicorp/TTI - Santa Monica, CA *Path: ..!{philabs|csun|psivax}!ttidca!woodside Now, Chapter 3: Once a virus has installed itself, and replicated as frequently as it has found the opportunity, it will eventually launch whatever form of attack it was originally designed to do. That attack is the real purpose of the existance of the virus. Everything up to this point has been for the sake of getting to this stage. What will it do? Almost anything. The limits are imagination and code space. The most benign virus I've seen claims to be an anti-virus. It blinks the screen on boot-up. The idea is that if you see the screen blink, you know that the benign virus is on the disk, rather than a more malicious one. It does, however, spread itself just like any other virus. From there, things proceed through the prank levels, time-triggered, messages, ones which try to simulate hardware failures, to ones which destroy files and disks. The actions vary from virus to virus. And, of course, there is a whole different library of viruses for each machine type. Attempting to detect a virus by describing or recognizing the symptoms is not only a task of limitless proportions, it is too little too late. When the symptoms appear, the damage has already been done. Several viruses attempt to simulate hardware problems. (Conversly, I've had several pleas for help with a virus that proved to be other types of failures.) Frequently these viruses use timers to delay their actions until the system has been running for some time, and to spread out their activities to make the problem appear intermittent. Such virus induced glitches include occasionally faking succesful disk I/O, while actually not performing the read or write, altering the data being read or written, and (more commonly) screen display glitches. It is very difficult for anyone to determine whether such incidents are the results of a virus, or a real hardware problem. When such incidents start to occur on your system, start executing whatever virus detection software you have available, before lugging your system off to a service firm. Previously, I mentioned the use of write protected disks as a step in the right direction to protect yourself. A large percentage of personal computer systems now use hard disk systems. Floppy disks are more often a backup media, or offline storage of files not needed on the hard disk for day to day use. Backing up requires the disks to be writeable, as does archiving off the infrequently used files. It is good practice to write protect the archived disks as soon as the files are copied to them. Run whatever virus checking software you have on the archive disks, write protect them, and then file them away. (When reading the following suggestions about protecting your system from attacks, keep in mind that not all techniques can be applied to all systems or all software. Read the documentation accompanying the software before your first attempt to use it. Be familiar with what it is expected to do before you run it, and you'll be more able to recognize unexpected activity.) The next step is to apply write protection to whatever disks you recieve software distributed on, before ever inserting them into a computer. Be they Public Domain, User Group Libraries, Commercial Software, or whatever, write protect them before you first read them. Then, make a backup copy if possible. Finally, when first executing the new software, have only write protected disks in your system. You should be well aware of any legitimate attempt to write to a disk by the software before it happens, and have adequate opportunity to insert a writeable disk when the proper time comes. This will not only give you a clue to the presence of a virus in the new software, but also protect the new software from a virus already resident in your system. If your system supports the use of a RAM disk, copy new software into the RAMdisk before executing it the first time. Put write protected disks in the drives, then execute the software from the RAMdisk. If the software has no reason to access other disks, especially when starting itself up, be very suspicious of any disk activity. The most common time for a virus or trojan horse program to do it's dirty work is at startup, when it is impossible to tell whether disk access is part of program loading, or some clandestine operation. By having the software loaded into and executing from memory, you will be able to detect any disk I/O which occurs. Finally, backup everything. Hard disks, floppy disks, tapes, whatever. Make backup copies, write protect them, and store them in a safe place off-line. If you are attacked by a dstructive virus, your first problem is to rid your system of the virus. Do not go to your off-line backups until you have determined if your problem came from a virus, and if so, that you have removed it from the system. A backup is useless if you give a virus a chance to attack it as well as your working copy. A significant portion of these three chapters have been related to boot sector viruses. While the most common type in the Atari and MS-DOS world, they are certainly not the only type. What follows is next is mostly a re-phrasing of an article from "Los Angeles Computer Currents", June, 1988. There are a few direct quotes from the copyrighted article. While I do not agree with all that this article states, I can not disprove the items from a position of experience. Since my efforts here are to inform, you may judge for yourself. A significant portion of my remarks are oriented to the Atari ST, but the concept is true to most all personal computers. An article in that issue, by Lewis Perdue, outlined the problems he faced when the IBM PC running Ventura Publisher he was using to create the first issue of PC Management Letter became infected. I won't begin to copy all that, but the most interesting part of the recovery task was when they used a normal (high-level) format program to clear the hard drive. It didn't kill the virus. They had to resort to a low level format, and rebuild from all original distribution disks. Their backups had been infected as well as their working copies of the software. They relied on a PC specific tool called Data Physician, by Digital Dispatch, to aid in the detection of the virus. It implements techniques to diagnose infections, but it has to be installed before the virus strikes. Another, more interesting aspect of the article, was categorizing viruses into four groups: Shell, Intrusive, Operating System, and Source. Shell - these "wrap themselves around a host program and do not modify the original program." In laymen's terms, such a virus would tack itself onto a program file, so it would get loaded with the program. It would have to do this in a manner that would cause itself to be executed before the host, since the host certainly would not pass control to the virus. This would be quite a complex task on an Atari ST (and on systems with a similar structure for executable program files). The virus program would have to be quite large in order to deal with the structure of an executable file on the ST. In simple terms, an executable file (a program) is a series of unique sections: a header, the code, data, a relocation map, and possibly a symbol table. The header specifies the size of each of the following segments. The code is the program, but in a form which will not run until it has been relocated. The data is constants, literals, messages, graphic data, etc. The relocation map tells the ST what changes to make to the code before it can be run. The symbol table is not usually present, except during program development. The reason behind this structure is that when a program is created, it does not know where in memory it will reside when it is executed. Things like RAMdisks, device drivers, accessories, printer buffers, spelling checkers, and so on, may or may not be present in the computer when the program is run. Since each of those things require memory, the place where the program will wind up being loaded is unknown. So, when it does get loaded, it has to be told where it is. And, since the program will almost always contain references to itself (subroutines, variables, etc.) it has to be modified so that those references point to the right place. That's what the relocation map is for. It details how the program has to be modified. Once the program is loaded into memory, and fixed up, the relocation map and symbol table are discarded. So, to hook into a program file, a virus would have to split the program file, attach itself to the beginning of the code segment, (that's where execution begins), re-attach the data, relocation, and (possibly) symbol table segments, update the relocation map (all the original references would now have moved), update the header, then re-write itself to the original disk, assuming there was room on the disk for the (now bigger) file and that the disk was not write-protected. That's a large amount of work to develop, and a large amount of code to sneak into a system for the original infection. I should mention here that it is not difficult to write "position independant" code on most micro-processors. You have to set out to do that, though, and take the necessary steps along the way to keep everything position independant. Boot sector code is a well known example. The address where the boot sector will be loaded into memory is unknown, and there is no relocation done on the code. It has to be position independant. It also has to fit in the boot sector. If it needs more than the amount of space in the boot sector, it has to determine its own location, and load the additional code itself. Of course, that means that it had to have a place to store the additional code, and it had to know where to find it. Those items were covered previously. Detecting a "Shell" type virus is not difficult. When it attaches itself to the target program, it must increase the size of the file. While it would be a real nusiance to check file sizes on a regular basis, there are programs available to do this for you. An "alteration detection" program will typically accept a list of programs to recognize. It will write a data file of its own, noting characteristics of each file in the list, such as length and date, and then run a numeric algorithm across the file. The numeric algorithm (typically a Cyclic Redundancy Check, or CRC) will yield a value which is stored in the alteration detection program's own data file. Then, on each subsequent execution of the alteration detection program, it checks the recorded characteristics of each file in its list, and re-executes the algorithm on the files. It reports back any file which has been changed since it last executed. Needless to mention, such a program must be run on the files to be monitored before any virus has an opportunity to attach itself to those files. Then, it must be run frequently to have a chance to detect altered files. (Back to the types of viruses defined in the article)... Intrusive - Intrusive viruses work by patching themselves into an existing program. This type of virus has two possibilities - either it is willing to render the host program useless, or it will attempt to co-exist with the host. If it is willing to corrupt the host, this is not too difficult a task. It would replace a part of the host program, modify the relocation map, and wait to get run. When it did, it would abandon the original task of the host program, and launch its attack. An example of this would be the virus bearing version of a word processor which struck the IBM compatible market some years ago. It signed on, looking just like a popular shareware program, but it was busy re-formatting the hard disk while the user waited for it to load and get ready to accept input. The other flavor of intrusive virus, which attempts to co-exist with the host program, is terribly difficult to create. It has to modify the host in a manner that either accomplishes the host's task while also doing it's own, or find a part of the host that is infrequently or no longer used, and hide there. It would then have to modify some other part of the host in order to get itself executed. In either case, a virus of this type has to be aimed at one specific host program. There's no way it could perform the analysis necessary to locate such portions of a randomly selected program. For that reason, an intrusive virus has to target some program that resides on a large portion of the target computer's installations, and that it is certain will be available to tamper with when the virus introduction occurs. That normally means either the Operating System, or some utility program so common that it is found virtually every where. Operating System viruses work by replacing a portion of the Operating System with their own code. This is similar to the intrusive type, except that it can use a new trick (and there are ones that do this on the IBM/MS-DOS computers). As a part of the operating system, it can sneak out to a hard disk, find an unused part, mark it as defective, and hide there. That would mean only a very small part of the code would have to be hooked into the operating system (possibly as an entry in a list of device initializing routines). That small segment could then allocate adequate memory for the real routine, and load it from wherever. Source Code viruses - I found this type of virus to be a bit unbelievable. The article reads (I quote): Source code viruses are intrusive programs that are inserted into a source program such as those written in Pascal prior to the program being compiled. These are the least-common viruses because they are not only hard to write, but also have a limited number of hosts compared to other types. (end quote) Sounds to me like this would be nearly impossible to accomplish in after-market software. If, on the other hand, they mean a part of the program added by a devious member of a development team, then, it is credible. It brings to mind the story (which I can't verify, but I've heard it from enough different sources to believe it is true) about what may well have been the first virus. In case you're not familiar with "C" compilers, they are usually several different programs, which must be run in proper sequence, passing files and options from one to the next. Usually, this is all done by a another program, a "compiler driver", which is almost always called "cc". You execute "cc", passing it the necessary flags, and the name(s) of the program(s) you want compiled, and it drives all the necessary tasks to do it. This was reported to have been done by one of the originators of the UNIX operating system, (name deleted), back in the development days at Bell Labs. Well, the story goes, he wrote the first versions of UNIX, "C", and "cc". He had a "back door" to get into a system running UNIX. He built the back door code into "cc". The code in "cc" checked to see what it was compiling. If it was the module "login", it incorporated the back door into the module, so that he could get into the system. If, on the other hand, it was compiling "cc", it included the code both to re-create itself, and the code to build the back door into "login". So, every "cc" had the code, and consequently every UNIX system included the back door. Eventually, it was discovered, and removed. There followed a frantic rebuilding of every UNIX system in existance, so the story goes. This is the final chapter which will be distributed via cross-posting. Chapter 4 will relate specifically to viruses captured in the Atari ST environment, and will be posted only to comp.sys.atari.st. It will come out about 1 week after this one. This article was posted on March 13, 1989, so you can determine the approximate delay to your receipt, in case you don't read that newsgroup, but wish to locate the fourth chapter in comp.sys.atari.st. End of Chapter 3. -- *George R. Woodside - Citicorp/TTI - Santa Monica, CA *Path: ..!{philabs|csun|psivax}!ttidca!woodside ------------------------------ Date: 21 Mar 89 13:40:56 GMT From: voder!pyramid!prls!philabs!ttidca!woodside@ucbvax.Berkeley.EDU (George Woodside) Subject: Virus 101: Chapter 4 To: info-atari16@score.stanford.edu Having discussed the way viruses work, spread, and can be deterred, the only remaining topic is how to recognize when an attack occurrs. It is not always as simple, or as straightforward, as it may seem. What may appear to be a hardware problem may be a virus, and vice-versa. There is no absolute way to determine if a given symptom is being caused by a program error, a hardware error, a virus, or something else. Not all viruses cause destructive attacks, but those that do are usually devastating. When files start vanishing or becoming unreadable, it may be due to any of several reasons. Poor media, or abuse of media is not uncommon. A dirty disk drive head, or one drifting out of alignment can cause previously reliable disks to start producing errors. In the ST, there is the age old problem of chip sockets and poor contact, and early versions of the ST had some component reliability problems which could contribute to disk errors. Another source becoming more frequent is the use of extended capacity disk formats, some of which are not entirely reliable. There is also the potential of a real hardware failure in the ST, or the drive. Finally there is the potential of a virus attack. How do you tell? It's very difficult. Actually, the virus is the easiest to detect. Use your favorite virus detect program, and start searching. If you can't locate one, then you problem could be any from the list above. If you find one, you must be certain you have taken every step available to you to insure it has been eradicated before accessing your backups. When the virus does not destroy files, what does it do? It's rather like the age old "Where does a 600 pound gorilla sit?". Most anyhere he wants, obviously. A virus can do most anything that any other piece of software can do. The bigger the code segment of the virus, the more capable it can become. There are some rather surprising things accomplished by the viruses already found in boot sectors, when you consider that it has to accomplish its own loading, spreading, and eventual attack in about 120 instructions. Some of the viruses currently spreading do nothing more than mess up the screen display. When such an event occurs, it is not obvious that it is a virus attack. It could be a momentary power fluctuation, a software bug of some kind in the executing application, an intermittent hardware error, or any of several other causes. The only hope of identifying the source as a virus is, again, a methodic check of your disk library. Familiarity with the appearance of the attacks of known viruses would be helpful in recognizing when one is present. For that purpose, I have provided the program "FLU". It is a demonstration program. It does not contain any of the code present in any virus for the installation of the virus, or the spreading of the virus. What it does contain is the non-destructive attack code of several viruses. These attacks are either audio or visual, so that there is evidence of the attack occurring. There is no simulation of any of the virus attacks which cause damage to disk data, since there is no way to recognize when such an attack is occurring (and, of course, the purpose of the program is to aid in recognizing the symptoms, not to destroy disks!). "FLU" is absolutely safe. The program can be viewed as a simple novelty, which does some strange display alterations. But by running it, and becoming familiar with the symptoms it displays, you will be capable of recognizing the characteristics of the attack of several current ST viruses. Two of the simulations, the "BLOT" virus and the "SCREEN" virus, attack in a nearly identical manner. They step on a small portion of the screen. When speeded up to display the symptoms, they have the appearance of drawing lines from the top and bottom of the screen. However, when the attack occurs at the speed at which the virus really operates, the attack would appear more like a small blot appearing on the screen, since the screen would have most likely been altered or redrawn by the application program between virus attacks. The "FREEZE" virus is probably the most difficult of the non-destructive viruses to recognize, since it is the most subtle. It takes over the ST for an ever increasing period of time, causing a gradual slowing the machine. Again, the demonstration runs at a significantly higher speed than the real virus. This concludes the virus discussions. It has been the goal of these postings to inform the general public of the way viruses spread, attack, and can be dealt with. It is clear to me that, as a defense, ignorance has been unsuccessful. -- *George R. Woodside - Citicorp/TTI - Santa Monica, CA *Path: ..!{philabs|csun|psivax}!ttidca!woodside ------------------------------ Date: 21 Mar 89 13:41:48 GMT From: voder!pyramid!prls!philabs!ttidca!woodside@ucbvax.Berkeley.EDU (George Woodside) Subject: Virus 101: FLU.UUE To: info-atari16@score.stanford.edu table !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ begin 644 flu.arc M&@A&3%4N4%)' #_W!, '42;21L+6P> ,8#0 *!!P$ !@@8*P@0 z MT@ 8#16H> . @(@V #!,:P> X@$T_(-Y !H!+"1@%PD69&DXHL&0D[%%')Fy M4K,7"5[2_,$#@!(G0;SQ \" DS,GN0860"(4@((? ) .Q&"$)P F0$7P ?!/x M$! %40[< ;'U'R( ('@5 ! +2\% ""X90 E-L# /:Y;=!P !P"NDCIQ_(/(,).!DB#X )&!$P *$ 1 ?@#!6% )$!J 0@08J /*/v M7Q!T?0"@'MBXM1,K_[ A.4<,& P7 !"$4@!@@E4@..$$%X\Tr M)D.+%?$B#1"R2)8D&_BL: $,5'!AAAR*'. / @^D1@!7 %@E@I!4/ (-+WU!q M$ PB+T# (T$O].20CDY\,Y1##"C08EML<=-8 .<]%F!EEV6V66>?A389::;-p MYA1KKL$F6VI1U6&;%0/!@.0G"$CA)*<0F>% 3#RU)14 #]C!Q1/)-7;;0%-\o MBH"HI/(0@(Y)H:HJJ\K5<5MAF@[DB3E4 #'#20!X(,T,(B4KS4 @\ -' #VPn MY@\#;CA5&!L:_%88$L",@T@0S48;#3#3P@"(%&X4!H8W< AP[$ AN.ED"!(@m MX:0GR.@++3^G1D!.4PRTZBMN^/20+0*)*:RM/K\1!^O/V?_ i M P+%:,15V.+!]="X!*U!CH#D %#PCSZ68VY!8ATG'KH\H=,3NCV G^J &F7+h MG;CK\KA.C^OVN(Z/Z_JXSH_K_NBBX@0J/ %Hd MPSI5 XQ!-0\P@VH@,)V30& /JGG"&'>C ?5PV*]]Z>93^?J4!JB&LQGZ;B!Cc M*]NI!$"%M@F@;30XU0' L#'#F8$$IS* -D[% '#,Y QWVU4:52!&#CPM; .!b M@"1L>,>=J8./(T-&P$!A0]7!((8ZY,#S1J:(MD$" *MB@&3&("QRG&$@B$CDa M(J$5I5P-X)&KVACO7H D$'1R,N98E>&Z@*CKB($7Y4 "# YHH(* K; 0,Kz M3H4 4X"!%*=*@!+ P(E@J@,,E#B5 L !!D:P$0A@(,2I%N ),'"%#W 8 P[)y M84\8,#T 0.=J3AJI x M" NLZPCO8H(X =&__Z63 >MD0V;P @0 (J,#A"-.2I# BXZ:$ P"?^AO0$w M?DH!H-: PP&@$B_\!0%N&D2<'*C& 0OLS YPJQC$B*JG%& _J^Y,JU2T@!6OFD>T?LH!<"B 6;'JUH%XP!EP,,!89P!2$E%8=0PKW2*J^,GP &6@#6P[X]B(@Wn MB%_,X\Q_%L;k MR!;,ML7MIAR08+AM,;AGR#*KHY>W)^RM;QNC[7+/,#/G0I<0TJ6N=0LCZ[MQj M=R@4\.X$"G,&%HQ7QT"9\>8,1X"&ZGF] R"&#=VKCQA'6[[96G9]N<*&5_NKK4PO5 NXM;ZULGMS"[[K6BZ07L1@N;U]I6K^$34*!U 7/=ZV 7.]G-7FJT$[3(FYM!"(7UR(@AH-I.D> d MP&6 YA#$ P#N]I(+XUT";"LSUP67N(;0+$\\@<0,.-$@_]POI?@",8/#V!PH N0z M,QT*R N0H GP1Q=!PPGPYP#"X@GPy M)Q=! PKP]T)!(PKP1P'"0@KP9P'"8@KPAP'"@@IP, ,$V #K9W[_%W_V-X+Rx M!P,'].w M(2SWYP11F#('2']T" =PL(8'" (*B YA6'O]5X0=&(!N((HJ\WYDB EP8 :VV(8 0(IRt M:(J4&(EYF$*9:(>;" =DT(M% XQE" >\MGT%R'^W^(NY^(&GB :J>(5;:(5Qs ML840Z(5;V(49L849"'YC:(22*(PA2(R3R(X X+AD/R<( S W"8!;p MB _4APP;*7P=P),=P0K"]P&_UQ&P('P>4)0<@ J/2!0C@0K8V!'(, -#02F>o MP [Q@D,N&0 P:9 !HPQ(J91,V2LB0!$( (400 @@ 0D UF # '\P_F$#KFn MP!/-D3X < &,,#572)9GJ! M("K34C'R,)N @)E@0 #H)@\(!0 P8 8, P@Y$ 05PP[+"0!@H +HQ@[#"0-M +#j MF0-NT"W$PPYN!@U'@'C)R1KB:9F]29[:,)PN8 9*,)[-:084$)W369VRJ9^^i M:9[MX@[IN9[M^9[>X@[S69\-=9_[,9ZI.9QL\)P"BD%D< 82,)QO< 8,,)QUh M8''#B0=F@ ! !D,1 ;H @YLX !;^IT5 PYPT (:f M@"[:YSI UP"G8@%X@#)9EU32HGU6NCN9)J8( 8NF6GJL%HM4)W@()F50SQWZ0& ,["D]P_T8%'\1*D+4YH P#^'Z2W12J]@z MIP"BV3[O,K"QT QD ()VR[TL+ ->U$0&QP22[&0Q&/88*^7Q _&8+%S]@_Uy M"F$ P ^XL+&)0YJFB9K(PU/7 + X -S0T="4 (OZGC_\ ^ D$ .T!-Gx M( )-.Q!/&[4IA 1 P+6DP;449" ;0 T; $^8 !@X SU1)A?,%%"2K8650$Fw M:CFD%QP0T E@H#AK(U!&BSCBL)B H (+@[1QD03N\+1"0 )P0)P'8(]U4S"Yv MD@%<,%BLX0YGH+B,Z[ASRX9 &-N1]$ 0;$<(!N"P!C.[H0u M0 %AIP'< ;X (-(+1.R 14YB0< -6IV*>(&55)8U408V^N*I=!'C^TP""t MFT(A&1PJ @KT% (L *[6D I) 0M !3,C??N0,-=:)M AMP0#8N0-\T#=$s M8;U380 3"P;5NZL7X T3:[LJ\ 4%Q;S9H@!3@!'FBP!"X+^N"08* )5( 65r M8'@0$+CXJ[POT;P%?, )O#8+?+_YV[R=XK]O , "_ _P:\ (?'H08,']UU]@q M(#=VHV)H8+Q%8WXHC !PH+L4YFK]!P(X0 "Z8'Y4@P'8]"/ZA)BX 0W_$P2'p M2PTC )0