To: stik-beta-testers@spodden.zetnet.co.uk
From: dlanor@oden.se (Ronald Andersson)
Organization: Atari
Subject: patched STinG TCP beta 1.18 release
X-Mailer: NEWSie Version 0.94 (Atari)

Hi guys,

This TCP patch was fixed as follows:
------------------------------------
As Olivier was early to report, the TCP beta 1.17 did improve the closing
negotiation a lot, sufficiently to eliminate most server problems.  Yet a
problem remained, in that final FIN/ACK negotiation often failed on one
side of the connection.  This led to remnant connections having to be
cleaned out by internal timeout, which takes more than 16 minutes.
(Remnant == Closed but with handle and RAM blocks not yet released.)

That is not a fatal problem, as long as it works (and it did), but it is
not the kind of behaviour we want STinG to have either, so I have worked
on fixing this problem. I believe this new TCP beta 1.18 takes care of it.

I tested it by running simultaneous FTP sessions where each LAN machine
ran AFTP 1.5b to access another LAN machine running FTP_SERV 1.05, which
in turn did the same in opposite direction.  This was followed by some
web browsing using the current CAB 2.7 beta with Olivier's CAB.OVL 5.4,
connecting to WebLight 5.04.  TUR_GEM was constantly running at each
machine, and was used to check connection handles after each completed
transfer, as well as after termination of each program.

The results were that I could find no trace of any remnant connections,
and none of the transfers ever failed (and there were a _lot_ in http).
After termination of all those clients and servers, TUR_GEM showed that
the only remaining connections were the same ones as when I started,
the ones belonging to my resident NetD servers.  All others had been
properly closed.  I now really believe this problem is fully fixed.

Please report any remaining problems to me ASAP, so we can get this done
once and for all. (Thus opening the way to more interesting improvements.)

NB:
Due to timing problems over long networks and differing implementation
details (time-out delays and responses etc), it is still possible that
occasional 'remnant' connections may occur, due to failed negotiations.
That is nothing to be concerned about, since they will eventually be
cleaned out by the interrupt driven code.  But it should no longer occur
on any local connections.  So if it does, I want to know about it !!!


One other change in this beta is that I have eliminated all but two of the
xbios Supexec calls from the TCP module. One of the remaining is only used
in initialization, and does not affect traffic at all.  The other is used
in some CN* calls, in a non-reentrant manner.  For the moment you should
avoid using these calls from interrupt driven code.

A perfect fix of the CN* functions will require a STinG kernel change.
The functions needed are already implemented in the kernel, but there
is no way yet for external modules (like TCP) to call them.

TCP_open and TCP_close do not use Supexec at all now, and that should
mean that NetD can now be used safely without SUPX.PRG, even under
singletasking TOS.  This has not yet been extensively tested though.


table
 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
begin 644 TCP_STX.LZH
M)6HM;&@U+8 ;  #'+   P"6')B  #U1#4%]35%A<5$-0+E-46&"C%NN$WKW"a
M1INN=?MU::<<:<^..:?-7JGIKXXXY<UVBB:B"K$N[4A/5PGPIR1$1X3QJ!&\a
M'),751!BABQU W'X=R9<4(4ADOP66_!&_#=E6'IXP\\>3$S'C\V[/@01^;;Fa
M7&VW!L&-ULI'7&QIKO_]N\N$,A*[<ER_!?ALS+_ "]W:R21MMM5A%']8B0M1a
M]M"Z_[2D331%(B"WIV5J/RMYM9VR[RW5M!^55;Q,567?2YUUWE[?*C]]O=XOa
MWM[B;Y577UZZJL:WUUG9]YL%U6,3%P\#?8*MUOL;=XN^P,88+ PU52**RKIVa
MWD7$)*B@TBQ*[O_D-QJ_L9@\UBN$2G.^ H(^P\W.0+N_0%JJKI\WB9EH6=7Ra
MLKS#XGW9XN',^^>1GD7Z'+7K'@5I4:ZB812%O2F5C><YY^5C_=)>2=/;#LX^a
MS)LO:?&2DOX"R8#_E6A>%A/IW$Q:4Z6_A-]8[6RM"09X5OU'Z#&I8\=JR4U)a
M:N@_8U,S7$A/>,[TD)UNTJ+59NL@#=[VZ.G?^C2^:]EX3YV_8U-[XWVO1I>>a
MYDTW;-D<M)J)M)O]Y%K?:7JE9BUV=-#D6Q*[ "/_;/25E3<IRG[#M,[^-<#Fa
MMW-ER7LG3Q6=E\Y%74<O()%M_;],E@"]+ *+:S)4]26=W7X!1OE:P>^%.1:2a
M^L6Y.O%R9F3/O!C^\5E#&OYDIMAF@7V5;U7>$]FY6VVFME$D+'OOJL7BU<24a
M^$,W!P"*R/8V)9\?D*C5?%B[B)N)N_5Q])^9I^IE7M]O=FVGMF57\W?W@\M_a
M#1*;OV>B5I]S:'S61*8GL\'MHBLX;#E3<K;[0:>1>>=K5\:BF "T"2%W&FY5a
MX+MNKHHVQ,\%]U>OD04UQSQZF?3Q=P[H[<BGB_/Z^+=L:O8XJ=LAV-9:G:.Ua
MKS<J^/@]Q3S_B]K/]OUNUGW;=3([' 6)31(< PYQ_<UIE*U90F;]CQV/'IX6a
M'-RC)U:35OZ_R"@JWZL8H+?5U>S%.=J\@BTFQ*,[1TO) 7G*.FN27=HO<$K&a
MG1Z!6;M'3_;+D73A!K.&5\YS=4Q;QY4#O 3K5H^32I G%XKWX%W[F*5@7A^2a
M3P8O[O8Q8PN>,.\4[<EY[Q:T,_9I'%T,6W_+5WKFG\7[,HH8OZ'\[_%%_6B_a
MQ?YW\X7ZHO^#_._L!?K+UQ/<S(I4N]!1.7D;]?=I][D;^23P6ZONLC Q**&Va
MVEW[-H"9P(%&<RH_)6?\S4&P+W;KGRN?+88@PO3R*6;SV%T!=C01YV&Z]J;Oa
MY+VW<%:9F<AF=>*7G^CZ=S HDN_6UQ/.:#UZ5++X6"]7USO U\F)O29:47CDa
M]R[R>\B4"\15ZWU!]Y9Y4S"6>C;6>T^.EU8\DK*SDEL;625KP"MLC)(D7# ;a
MB9^!N',N)Z?,&HMP&>#2X((A,$-X9+,8A=V)W<^OF?@GPV+D8';=C VP 3;7a
M!)M;&TM*5(47C&(*LB+LK1*.#J[;")$DXM< 1ZJ>BT_&?A=K/C693(2]T_L"a
M3I'-?L7"H0@9GIT>D"S?RS/#"(.J:25DD]BE8222Y^12]:VEDBT]F7+:='W!a
MA<9TO.U\DEIG?3TE]*TD!.UMJ3..7$5H4LX:RH8_8TH(18C(3,R5'-OLSX?9a
ME.E-P18NXE^>)H]8:O#V%P6-&_!L!UTDM=;DF*+PGK$@M0-?AY>(2."B-KDDa
MCL)1/A>I$_'FT*!L+\H+'E%5L895@^P]AWQ1Q]LA3L1]LQ=VNPPBK2N11F"Qa
MFCW>.<39FY6NE%?6 )?Y\O&*Q0US!;8;GMQ]^Z/NY Z1=C!X.P I2X S.2/Na
M/KL(F2\36W9,@#,)6[P"T^W[D)HR4G8113KP_SM)BQ0"GGX2X& 6EV]K(!H/a
M^#:2Z34@)%_0I@7<%/V0(VR3ES:&BK7TH%*^N_9AYQDWV<+:[0$TPXV( Y^9a
M2]Y4T/=P[TF*1J<:Y];22K:EO*-%;% BP+_^ #/.F7&%#5KBQY[UCR2QW$8]a
MKS,BJZ7@O;.TJNBTD.IX]%+,KBU$^!,N*#Q92>E9^92ZM'JC$P=;;EAZW(+Ma
MF)146)3^N)0*F7NY(OBS92_^8DYOT  >:56/^Q'_-']WSFA;2 "IVC$I79X!a
M/JL@5Z6HIVLIB_">GDTZL(!#LU*X,3:C:5'3-(T=)W$HE#R_^2\IX-\.C^  a
M Y\OU=:R6.[IK06,Z3GJ7]+/;BV"3/FJH?!Q,KA>[Q,WA='B22DU50"MV89<a
MO_;X.:8 W,?(!Q*5'J&Q.VN2U6NZ>>OM0*/5/>=1@U+/J@"Z:JD]&S_(OW%\a
M$1\*&8FU[.R >:@@X?9$'$J"#+X@A3AS)5!XQ0*&*_L*S, NVC@XFLO94]_Ma
M0<B/J(WGZ1>YE'Y1Y\NCGCS^D9FRRJ!6/+E8B=&D+'_?1?22<VF5H&\F.V?'a
M7JF<SM7)G)@WW3U+70-_\ #U2B_A^S;A"_Y)/3S:V(5898];MY?3,.*7#5CEa
M:SX*LIHU;[T*SWK?RA6>]:2UFS*U]6@5F/MB?2^YY-/)[QB4"N5'"N5W4B.Ba
M!^=]13Z0 W.,^L 938P@!FXT#HXI _>&SF1B^#\/(R?=_#ZV3T?PM0@,^=H#a
M+YF3N3%[ P"JN?3*7'/V_^9[^I#=W\&;UG_W@<KZN!V'7X&U6KI&%/L;N"0Sa
MW=0;OX R]COM'<55PUXP*G;X/UD'GM\ -C:02MO1S>.2EEDN:"DX2BO$Q"@Qa
M9AA32K;(J"+4YTO]'Y**&7Y)8."G95Q-M(\!!BN"+6N"^O10(ZTT;=4ZC9UHa
M1L@L% M099L)Y3T?SW-M4[6VU66YML8\6IE IFK!3+Z_!3-Z93*@*94!2[P%a
M*FG_F]?0_N;0:+"BS+8T?:+FEX+FEW#FEW'_G2XPTN(-+5"I]&BA;_&&4,8Wa
M3^%MMH:?&>F -]P$ ^>:_T]IDHR7OW3VF >PZ?XK7)/VCUIDK"B*7YY$>:INa
M$#K:09EY0U%-S$R!J/<4$J)-**C:V/(!9(V$"/W$3NG3Q3Y_=?&2KH"4?SN<a
M]N7.'^*.>Q?JYZ\'/8XY[%7@[Y()3:U>#EX13<1(=-@,WS$H&CJGFWO*&\P7a
M3#3YZ-E4!J-6W$Q7\E#LG3ZR4+<^1Q@TFU;&\)\?M?S"3U] GI(CRD26KG$Ga
MJZ 67O57FASVTM=KM 3K'D8A5X1&V%9)*QB;,]_0]BS*@D$&/YSZJ]\QQN+Ya
M!H;_J$21>*XAOR0AIFC \#E@8^)X#IYY>%&H%>!-7.CX9),7#4CR_\K<2=?Ta
M[W@F&E::>OZ;SMMM+V_7[ABR(E^X:7G7$Z_YF&3S!2Y=_OO2Y=^VI3R=S1]Ma
MJ!&PQT-1NF@U*PHYYI5<BTF[^8%>J]H7HS6!3S6\XGY4IN_HH"FF=-C)F_YPa
MT%AR!E!B7??M+(TH:&[ERG-WY%*Z)V,E^QE*[BY]F;OT;0OCYW"#7JF-F1YWa
M"8X7.X6JYI%VWYO.<: 5D?A\8Z)6EQPSQ9M&?;-S?^JI1(7.X?__Z'AW]2Q,a
MR^=+>; VW/MOS3TK&%SF!5)RJG8PF$><PPQSA_S'.&O95*D?130EQ#0CQVE(a
MIM0X#"7# UPU'NH*P2>S34JIN*594F.61_%7>-32R\,RI5G'CGJX!9_E=WZ0a
M07S0\;AWQK/U!1R=^C1^0VM\:K]]R]T,;R'-Y>,YCK7["M(C+HL\_?!V3)!?a
M9N)7P6ODSZ\7.2+GPHK+5;&-^AV;A/,:BA;$%0>U!=LAQ+S=A(#[ 1][<$W^a
M$.;WSEV[S/DEMMUO&!=J!N')2??3HX9F;>K/R:2_[O^&9BH<KDFD)LXYI"<=a
M#64"BDL4<,1.H<TD)"0:C?!G+JLW)#HN&"7N:(L=L?#X&>T\#$F*.DX88]XXa
M8][YW:VWUA'*S;>*S& ^AZ3!-,ZVH=G/C6,<*75ARO#^KE='=0G$>/5H]1S4a
M5S\IA.RU5Z/"<AT&?TS** <RX3BITT.L-R $],#[!#\^.M0*LJ]3"$!1Y=H5a
M5/4'E*>F/.G;- ?67C*D8%CZ8TCH.Q]1=_[3.8&9OW63=^^^ZD(HSI&<9?59a
M8-A;AAKG1Y0.Y;@!=ZIE^42;;Q:,3_E<:>\!P?B X/TPQKD6/$D%6K2 UDUQa
MP&U*T""W<JR"JY\!B7 JO;N@ZSI<-A65KY9/E)!M>\]X/=4 0P V4_O*&N&Na
MTV#]*0U& J:H(97II.=Q*GP&JL8/I J5\/?4'M,>_W%#DO:B0?C.,3( _#"Ta
MM/^\JK-\X$LS-6=_,+8CG^QU<HHH^KC[O%CKRRK1]6G!QK*,:NDRP9.GB,Q;a
MH$&BNOJ0!^ETS!+I0,>!TY?-%'+E[I[8ZGSA<]ZP%)^$59K-X$K\@Z/>A+V4a
M>B@=/-\@D@+UATL<JP&WO\T.D.70)]@I!ZS?.P1]S<]Z&&OIA::/86/J8JGNa
M;QT387%EZO-6V;4H 5@3'0*FE_3:BSIC4=PM5'VV0&>.55DR\O>'KMB325C&a
M)]KV"?42&!0_QS/[O1W?F:.XLA RYM?0/KZ .-;G&/]1?567DDB'SU$#_4Z5a
MT.YH3V=;A!U?2#/:\1PJ7LDHQ*L"%'^!*'G>BSPA#EUT!8_22AY']UUX8L17a
M^-W ^^Y@6L=VQ+""8TWRNM9S,WR22/:<93H;WFGW.Z-A_RN&<)?&WFP7J>XYa
MR.>E.&_T4,P:2[3_]\+^OA/T.;ND>/'78 ^OQ]?(X7;4G,SVWMLN\EQH*NS6a
MCN+;W^ 7SYQXEB>QX^+!MD).GL0;K7?(X"OY+9'&3[I'NCL=(Q/7@&1?W1 ^a
M=0?7]1*>JX^=UK')*LZX@8K-&#))9TL'>NKR39Y0:?\KHB;$-K?>GS%'6&]'a
MI#/O$:%+/I]QH'V$^X_N9X5!P/M P!GW/HW7ABQ<P?7#^+$5_9=P/P.8$5S a
MK0= J"DX ^OS*;/-]2V<U^V_Z4\V8)S%#[=U[[F= )YBVJ!^:> 7S>IWO8!*a
M]^L$M<7;L3QYU4G521D^T!VF!FJBH\?A83Z*0\PA3R<* %8HJ[YZLCQ<G?4Xa
MPG%<8OWX4HV1&GO'W<C@-8"U9ETY$36JUS9;[0<MX]Z%(M2K%[\U(H"C,&94a
M [<>>K8FF_>S+=M-66Q>-/Q12#'&B(L70+'7R0E]>.Q+&((E_/KXLJIM.JT=a
MGPB>_7M/%=A0[C.2\<60QUKQI[_=Z,][+]\O$6O%=,WU5=,(*G_8$K+QU9B5a
MI%9$&C_7)>+.@MWKK_^&XVUP"I< >[P>]\-SR6JR-X)2'%ENHJ!;<68Q[M74a
M-^X%J<S94^7Q[Z3( &YVAR.G 6W*<;OPG7]BVKBQJFBN0%D!-J]'(Z?KTW>La
M@1MG$9C70:3X-D3JK/Y<A?584((\0UPV7)*:OJEKL7(YGIL%JL 5;Q5XVG9!a
MMU:4LO()Y&X@2EO2O%]5B67XJ!X_G4"N0@G9<2:O0F%N>4=$T'=SEWL]("C4a
M=36N-U[5/=ZTVH\*#7AP_E_&IP'=G1@.JX@.=8Y_K1_6%<?Z* :+41]J@TCQa
M@UHI440QNI5*M4<!=/4W6_MQR]AUX/7L@C+#7W!W9(2+&J5OUC/_!+. 7_;Sa
M'&.NK=6N_B]!IE:_$0U1<6QV=A(-=+8ZG],MN0%F*8BL8S/*R6ZU6"Y34%. a
MY<O5H(Q(Q[;U6[IK?_TCZ192SP(-?]*AJQ3KY*U_8ZX)-9GG&DUHQF==0"6]a
M-7DDIL/M!TK-<RLK*U>&XX&X95>KOA>CWK\,W"DZ)N(HBO[\?8+'CFC1J$&Ta
MX@2%V+JL_#)]NDQT=\TC8%L OA# FG D#A+PQ)_/Q6H5%?_Q =6WAH'X_R-6a
M=%=:8Y!YZVB069U@^P8FS8.-TR T-P8H@(L4-"80UR&_EULPI#26NF%DNQ=]a
MV 8P[015OH1F9-T'D\+1[+7%6[/XQSV4_'"S<OT>K>NK/P"$0IUGL*_=)8:*a
MNTW>N$$:?K-$C^O14_DC^H.S[D.__AZCGGCN(X7HAW(8R^RNYL:KC >Y>XZJa
MO%'UCR+S]31)>>>)Z3NIPC9.\5#G^4&*419? +K9[G*[GK\=GJZ/&R2XBMW1a
MSL OH1#(+\YPA%+@:.GJGSNP?\TV+D\CI01C Z; ()TO*8!0_Q=CIZ5I4Z>Ga
MHZ&_#%F;,7&'5TCD2O_KK\\J2W7T]M[4TV0SM:*"V(ZSIIH[8Y,'6_4PV] Ia
M#AVHO]+R0(WTSYN'U^L-I##36Q/C+;6PUQ/FX-C7:!9;>@O]46VKF95:*JQUa
M=K%WA)ANO#'BL$'_[,R+IN/Y!)L7!@WZ#H-XE-IO>NQ64;C-HYQZ'\_E@(^<a
M81T+17:N(+4NG*<9\Y'79\P+_D:/!P;;UP7MQ9(;6:B\EU(_V_9AFH;<>&Z4a
M2[% 4%NNB+0JS_A$?BEX0^XI<@OT%\-0A>*Z0O\WO A> Z)E'_53$R1?M,&Xa
MAJ]9K[<JV3V_9X*Z6/\K\=A^@H=,VT$MT]%9&?_+3IV@//LSZN-93<UG)IW*a
MSES1%N'.5JXIVJCEJNK=FYV_-P%=K_0 :'ZW1ZN"#V_8A/;D=7-@S3Y\MGS=a
M=+#K;M3&?/,&\LT)M_+GOKV6#OY8:_Y8@/^\5VIP?E;UG?]?_K$LU_XD]U>(a
M&X-+7B#UAH_.#7R"O)\&($((DR;T)DQ$A]9?G$A]=?A3_?C97G.$?E<(_><Xa
M$\G[_%AE<N\KQT*9.8 B[8Z(Q\/14H[ES^8QU@W:.U;6<-/';1&FQ$*0#&>Ia
M3L7@L:^G3 5_Z 1F7#<3^@9V-DU.'=6 G'F P]/*_L)+"N8_$UUX4QD%P_C]a
M%P8.&9RL]+@H-1_Z:J-1F-^1,V399V4T7T6(4!PPOYLW%_*YNFIE3Y7)*MQ'a
MKJY$#OQS/-%G(WT$YQ6'WF0W7Q!A^-R27PH@72QP^1UP'.FZ_#AKO#J#K#:]a
M9&L-QS7IZJ&%9".'./<@0_B4]!WF$'GLV?FBB;\2W0"J?^KLP,6*7+#_;NH(a
M6DX*J'1$??S?#][B!2_@M0';/WW+/I.6?8#^< #T(!7$&):1QD/3X>L.3XB a
MCG+0^..*J1Z;V;'<0NIWOAWHC;*]5^/T0Q$AFC+(_(*],D%/%I<^W"R6J_&(a
MWRYUV*"CXH@!-;/L.W_D0#_\X"TD;7N,^L8':%,'Z,<OI+4"#RO'5B9B7LR8a
MMZ;52)M?S-X3S=)[$%QM([%)73SZL%\B7Q@BER*BI_E.OZN8K._V#$NW?.#Va
M6K.L!DVU9+]:^T"(X\Y6=$!L8:<:C7?ZFRY&R.2.JP&^*O5:!$/="?RQQPL,a
ME\@$ZX-%_VF!&(;GST[#5&JY5E:F6%/P?11.R[LDP9S_%\3-]AYW-6G=VR)#a
M^+VHJ5$Q=XTI:=]@/?*LZ,"_1/3WMD$)+%QL:IS$NJXT9VR E<,"5%&1WA,>a
M$5KWA7/L>+>_UKCVW $#/2Y7_ F&[P%YW9RF^)I5DP8*('#^_P!T,0CN9LI]a
M@=JOI ]C^425Z(6#^^U=N['2,\WTSL^&>DJATC_?$IY6X;.&:^ J-URA@9F3a
MB*V!\9IL/M[DHX9N[80.I<[\G'E!$FD<EC/81!JQQWGCB^5PAEWG'E#%AX1 a
M)PC35G!0*^ISO7YG7F<0/N9/LQ 84P7>E$E!(*GQ>2$",0)$ZL,E*9G1Q9P9a
M7T\H/M^$G$G 7?O+<6)XS3Q;R"F:NZ*8Z[.@E$YV#TXC)PMT,4MY>D/,SOOCa
M)$-@,3CT"C.G%STPW,DBNZ8^V[56</O>N4ZO'0:L1#@X_(MQ@TJ9H9R\,V[Na
M/T&>9*P46+B9;SWPKV>5;N. (L7:O,E;I*P(&EI+H.."(F]H<'7RZ&Q*9+;>a
MXR'G'P4D/T Q'/+4!__-\WEV/\H%'8(NP!LUZ_NS/P"Q<P?7?278![[+N!^!a
MS T^JI,2VD<5!V!IGC??<QH#.L$&^Q;K?XH'7U[LG=](Y\.IK: 44I#RP3P<a
M[L>+;XU+T]D&:5W#Y[F'#%6"9:L29>4.SV;:CO&R-!ZH<.Y_9R26"!U;C&EYa
M- *L5:"9UP*'<MP_XH3_ZG$,NY<PN\.*AMOW4.[3PWNTT*+-_8:1>JIPK7@Aa
MX/9.'QY]:;^V)4NG)>+]A_;*BGW1=U'<?VXX?VX 3!IU'JVF_M@28D',E3LJa
M4?+$/5;+Z?.[UV'NE]/EC%U8;S[-TFG[@WN($7MD@'YG0<S4L5(/_\OGV_/#a
MK:&-]5?A!%&AVH*37B:>AUK(NM8^4(**;FNBO'Z\))Q4P+G2?]X&F[ ]>]-?a
MZ^$<9@:.3?*W\OI%!7SD4E_A!LL$.6=^))30!49%1^K77.1JW]OU'\&)=1<,a
MK5I]S +'=RN0/(-I>B ^_$U8+FK;N.6"R]B"R]C5<?9&EO.,YK!8#^SS3$&@a
M].S_QS#RK%P$UYO>?GJWX=H7YRBVQU*T$WA_ +HSE;_7B#"[ ^>LN.C("2(]a
M7&HO%I2NI6XC!B7>R_5U^<55UF/L9V21U_L9U*D/:FTS5LDT&9P'&VM"BS9Ia
MRN>;OW\*?<Y?<MV8]VH]KCW9#W&'NO'M4>XH]PA[K1[?CW5CV\'M]E]S/S-Va
MDX^KB1-S-2W\U$X(+IXI\)?#IKX4[T;;=39>WVC7Q.6\#Z[<<'.&-H="2\_Ma
M]#<D7S"GZG[,SG9EAIK%X\.. OWB)$W U.KO<EOK!A[YCE?J-/#L1C?(6+I^a
M-TO& J^.ST;:MN_?Q\ZEZS/M4Z.74H\2I1:J4;.I1?Z%'/Z52CF5*/(J4:-2a
MBS4HJNT86=GD*,+BYR)7O";$''N_9Q\ZP+,R$*709GO+V5J]7]KT*6<$*-4.a
M6]2]EZG5B4'YP+-Z':[:_]=WMI>E3[:D=C4[3QG.T^OCYS.;CYSGOI8^<4:Ia
M1O*E''J4?S5*/H5*/4T**$*I1E5*.\J4<JI1YEWZ\(486<A[6;H=GQ^UV=7Ua
MZG9WE[+?^N?950.F()J'<9/]O#58F<(4>%$)EB8PVM$0<]O<SS8CP\#-W_G9a
MC+&9YN;PZE?S>S7$2+($BZ^;+9G,W@HZ8R3W%9;M>H7*6C^KJ(^XQ()%%_K%a
M'@]>YTN;I<T)=)1>AH6.GY!$H)@^I,'W])%J%!]Q1]]([V^M[ROO;[;*[%6]a
MOM[ON^5W>/C;O??>WN)OE?!Q,'?X>[KU=IOL/[ZN-B*[G=J_>QL#%QMW@J[Ga
M[]/&ZO4/3T$E]?7Z^S*\W>-N\56=B8PT*?@8QU(JLZ63F+W%WB8&"=+9^#@3a
M][NBOITN;>WFTG7VX&@75X7?[2XVMWLMQ=R_N;*<>I[@[MRA=6_?B^O;TIUOa
M]O<7\VX*XV5SN)U]?.>[Z^NR__?D<5.KJT_T/%'BBD"&IX%C[R=@]/\\0M4]a
MYZR&4^>H0L%[0K*O@)^$GAO6T.8A<*5\/[;Z+8UCVM3CH2KSE5B:"Z$9-2%$a
MJ^:G#\"A9V%?"KT+S,E0>:@@^?\"'N7]:_02?PG]R_Y=IP]MQD$$*%\G#A;=a
M"*_>8L)!#Q4GM:DY^( I/"UL:#4M30L  !8;  "],X<F(  35$-07U-46%Q4a
M0U!?4U18+E185 1H"$QSEMI&VW6\9$ Y^O"25"1B4D;<C F 6HG*;'$T$BY'a
M<)C3W;Q[0N.Z;N]R+-\<?OO]WN*23MH8@MF%1? >Y5 HLQ*!.^'WNUD:3G'_a
MS_8\7J;8Q3EZF>C>S\W3[^O/[LF?W9][>WNIG:V+7N52NT?9R_7]?UY.3Z<Ga
M)Y\>+F@P?'2K1M]&][;*E=3W+LI5E=2R$8O=O;R>#_3W/HR<OU8\7_=?YZVQa
M54=B4LC1!NAD56UL51="#'6CY>UEC]>H_G&T:-4^I/ &[5:GTW#V:GPQXNO.a
MUWW<2EQ4VU58_K7!^F#(Q&Z(M=0Q72RUD%;]+8KUZV+@RG?4URM3:>/^"W7+a
MAM4FZ,>(Z6&@GZ]L&Z:[56O5K7;16,*[1"(08BJ#-2VN3)M;(6[3I>60]3[;a
M6.TK'\PXL>);J4UA!EC%Q35NK#W?5U<_/^67JYTUP\9:T2*LVC>U37)*)5;=a
M2:2]/MSIXNU@@JV-HA7<DHQ$!S[1LH9K2/3&K=#%:[M%C:.)0\09:?.HM3[,a
M>(Z-$+OOX]#+5J&B+&NTJL&)\2M8P,_JL0[8D==C;:U/'IP4D8U+NMK?"*:4a
M]NL@AB/$LL.:WS$&N1+;9Q&,$&&&@B?7![GV/TMH78-V -N3]0G\W3D!!%<Ha
M%8K@G+7AWO2=TSD#3XD-_OA.6*O98WM:-[[!'8 P$EQ%N#-;X"%-XA$B(,N\a
MXDK2INH 0[62&'8\!YTX\3F:7VMD5%:K'CW8W55-H:(P2Q5EC=0GV!OZGQ Za
MF0$-"%S18S5'(I7\1/9>/%/X9A 92D8;:UV@H@!TKU9NCYLO-]ZN_,GU #*Ja
MA.<27/[N9CQ1;3@4NA[G,H/EC*$,C9((XR5RP /=X$05OM(($#+CQ4"*1%0\a
M!F K"(2!T/:W4P?'Q*V5MHK5:OL )=3X&#*W*Y?,"[NN .@ +@ZIY-]GV*YAa
M#,@]NF'@>92#Q$HG5E_!6BQ]'9(=Y(/?-')PR-H(#3(:L;OM&AYPO0G-CR-Aa
M$(-CX#!N XLTE.IX9$I:< $L!@)@QV-'@"$FAAWJ^X *8 &C54B%" @^ABF-a
M)'Q-5ZLTOA.0,IQXA&ZIOP2&!BO/1V0>,"0-8@*3K)FSP"9]4X8T!*8Z ;:Aa
M;LRA#$G&:D;87.<<:BW5=9:)#ON"*6?I /HR2EV#2PT\L2"]>7H!ZZ*VF?L!a
M(/*?)Y<GET'8RZ*!Z8C/(]/=YF&2CSO?U\_5^(]/D\LYL8\1#]=!R#\,,HAHa
MLB3?KU@?H&?2V'B%LE-J?8$'I)P1?J&D=C-"M$'["3%5T90QW,#\V7TJ^?)Ya
MY0@0#,S.;\3]>3V?CZU>7)](5OO%7(4?Y,T>M%P_*3WC0/MZO?]W/^":$'DAa
ME)# W[C 0#"S'BGOSB0/)\RZ,B)!$^CL[B(3%"(=5%?Q(U4/U:[ P6)_VB-,a
M:B!L8'L8%)5W^4/_0^4C12]E&M%ZL&@PMR)LGV9$YM .*'W!ZVHB:<]0R"A a
M1+=M^1KYM N!]+SW7Z3":A1DF@QP3:H&4)EJU>\)4^\S+KMMU\(TGE^6MPU>a
M/6>5X+"F?%(923 CQ81PC6D[SL.30+W6;9IC&//>C%/=LPF#7,4A[6$Q<QH!a
M8"+7%?@H^PLUNTSGCJ.*E-T0'Z&6_;?HH3\RC52#?*8I:B8Y%40^ -%T(CT/a
M&S"%NP8(CQ/@::]7TT6=Q^T';'I$S73)]V3#M\C)[;O7&33S%9>O+THA6$3*a
M 8C2RV6/4HLR\T5AB&*"DQ=R*X,]8.P-3.O(ML6C&J*H(KF$%C]<V?B]Q&2Ba
MG1Z?1CQ?;<P^=:68^[1SS/Y%%7,MDHD<WI;4 .SPZQ,,04N/%2"^ML"G!7>Xa
MROG2RQ>V7K#0>L!P$CV6T!4]%2Q*XT#00+BT0#G/]]%"RE %H-^8L]_P #J&a
MWQXEP)O3+7<Q2]S:Y8Z[E\J\&E3A- :&'G+T(T)*H $.-LJ*D30=;=.;_]6Qa
M#&!(J0NUC<,&CS1B=+ !OTR8D S280%_,/A$5-6(O<9]!J4;:[MH#V>MZFU(a
MS:]@(OFDR.-L]A#:FJ#]OD\GD,ML>+V$V"+&4!&+2R3]#8R4";&] Z30%]!]a
M2ACRV4)H3/ACQ?#0U\5==VMGP90 YV"8=4'ZOC6DY%>S<A+N%\,K0UA4"1? a
M?,)!V-_FDAY*1G:LG>0#RBTHR&CA*J*##44SI;/;'=A17\5S='[I:42C-64Ka
M.,5/SBE1: %@"\!@/J!#SIG4]*IC:^Z<APG%VO#/^#&Q2,W;D_.99C'E%7?!a
M-7 Y%^^#HVJYUZ19!?!G\KFHHG)_?L(7;)R8R26JW>DYC#7#E[I=@1&IV[BDa
M%[MTJ%M,#E0[(KL('F(*';-&X3_,^$Z4^4H 7FQO8DLN%&C)*^,FQ@+@ H2)a
M(\_HB:(DRDEQ'+  ,I*%.:4O$"5?$O4"&2^%%/BE"10@JZ.!Q74RS:CP9%EUa
M^WI]V3IZA:]$JBKC<B&I==I#@*X]A"!G]G7>_X;9F^F]*OZ;A=$26-8/*C<.a
M,::_VL&_/_FP;^C)\_F_2P;]E:/E\6%)??;N/=N:WI7M+)AK>:+9N3,F#,IPa
MTDZ4FQ;%BOS+T*-\T/@:3(>Y[7  EMQ.Q9*DH07=X0JQ1LBNJ$.S.X#.Z<P9a
MK1-QE/Q3&@)6-+EB$21_B+&84LSQ;[2%[@]#MEHWNN5QI'H "<,Z[)9WAC2)a
M%)-6>PD>FE0_;.^T2O=<1#0L\)7+7Y0@2"/W/Z\W7GY^B5_Q.D3F$-,EF"\Ua
M(9V@23%X\6KB59H"H:=B).QX5 Y'F.$ZS]/'URM9S5HX#1*X!9MN#:"4!M8*a
MI*D>G0&<,B/(L:4'PC_9%\U,9J>2IMT\</S:9G/3TI\"&9BECTTIZ;*$&/V'a
MIYO]CTS.\=?9E<'5EX93T@S9!IX/;\W/#MV*0 ( +BG6))EGCOJJ42*2). /a
M@KCJ'!+BT+E$K<-WN]@BM2,T&3IQ+R06P%!YOUKLJXZ;@L#\-\JD,D0.^[(Ka
M8V%]>*+1F:!":MJN%FV=NA/D *X"_[E]67-]Y6G)K[HIQ5[8RQ<)JY,DJ7<<a
M!]4N!&OF14*UB( =T/T'Y):(H.=]']?5)\2"4-T?A23QWYT0HB + D<*QQ2@a
MT,92'<P_&F*;H'#M2XIJ=<W(QNZL1S52I%1NQ*H5\](%&I*5%*<9' W(AGH9a
MNO=)U+QP1?C:(Q*+<J0KQH!U<!^RQE5N!W##CA"$RA_K37Q89@\L13K:)S7Na
M<*DZ=[<K0*$X<<Q"UMZ/<O%GAAK/;^"', N7DY.0:7*=7<B&SX4(]=>U!/@/a
M\( 2PN^S:?"^'B/RE+L<AMX5,LJO:03Z<.$0-33MPW)_BB2_^?SR_Z/Y^G+Oa
M35X;+EFZFPCNX7N7*-3NTTY0$7R6[E95B"9%EFM2]&+>R5DV'*Y?25OPVQP?a
M+FBCPRR9(/1[N7QB!\4,O:KERNT34)I<7;L;^>5LTF]Y9WZ)5K$VLDTD+,(Wa
MU=](3X.&7I9)1B^*5R(WBCIL+*PF\NPVPU/?P<IMSTMIBE^&E*\,+EP?^%;]a
M'6R@&;2W.08=FV=9C*+A%;I3GM1'ADJV!--+*/\N'DGRZHJG4H"Q*LP23ES#a
MSKZ"[E16:+K.S#@!$X(\>2"CGD??'<DG<]NM.6QEE@''9<D1]X\1_(C&&4A6a
M1ZZ9_7/DQ+_KI?L=/[?WY_[?<G#^#SAS*"_FO\N-_"$7WO*</T=U7.^//))'a
M&;R[,,5!]SB"DK-DM"P:SME/B7*+W\&<G-9U)(&7#?)9M2.GHNTQO93PK6$Xa
M#I.,UGREH'F..OI[J5.]1&>,%0!-&W\#Z@M,B.M.>D8!0SIS\7#)44@SJ6*$a
:J7G!)DHZ7P#^, ?U0_YY<G\0?^'4O_^R@ !,a
 a
end
