des@musashi.wpd.sgi.com (Des Young) (05/03/90)
Well, here is my tarmail directory. Prepended is atob.c. You need this to get at the directory. Steps to recover: 1. save the rest of the file below 2. feed to "sh", this produces atob.c and tarmail.tar.Z.btoa 3. compile atob, this is a filter 4. atob <tarmail.tar.Z.btoa >tarmail.tar.Z 5. uncompress tarmail.tar 6. tar xvf tarmail.tar This produces a tarmail directory. I put crc.c in the directory too. Sorry about the wasted bandwidth. Cheers, Des. ------------------------ snip, snip, snip ------------------------- echo Wrapped by des, on musashi echo x - atob.c sed '/^X/s///' > atob.c << '/' X/* atob: version 4.0 X * stream filter to change printable ascii from "btoa" back into 8 bit bytes X * if bad chars, or Csums do not match: exit(1) [and NO output] X * X * Paul Rutter Joe Orost X * philabs!per petsd!joe X * X * 900308 rpw3 Modified for slightly more user-friendly usage message X */ X X#include <stdio.h> X X#define reg register X X#define streq(s0, s1) strcmp(s0, s1) == 0 X X#define times85(x) ((((((x<<2)+x)<<2)+x)<<2)+x) X Xlong int Ceor = 0; Xlong int Csum = 0; Xlong int Crot = 0; Xlong int word = 0; Xlong int bcount = 0; X Xfatal() { X fprintf(stderr, "bad format or Csum to atob\n"); X exit(1); X} X X#define DE(c) ((c) - '!') X Xdecode(c) X reg c; X{ X if (c == 'z') { X if (bcount != 0) { X fatal(); X } else { X byteout(0); X byteout(0); X byteout(0); X byteout(0); X } X } else if ((c >= '!') && (c < ('!' + 85))) { X if (bcount == 0) { X word = DE(c); X ++bcount; X } else if (bcount < 4) { X word = times85(word); X word += DE(c); X ++bcount; X } else { X word = times85(word) + DE(c); X byteout((int)((word >> 24) & 255)); X byteout((int)((word >> 16) & 255)); X byteout((int)((word >> 8) & 255)); X byteout((int)(word & 255)); X word = 0; X bcount = 0; X } X } else { X fatal(); X } X} X XFILE *tmp_file; X Xbyteout(c) X reg c; X{ X Ceor ^= c; X Csum += c; X Csum += 1; X if ((Crot & 0x80000000)) { X Crot <<= 1; X Crot += 1; X } else { X Crot <<= 1; X } X Crot += c; X putc(c, tmp_file); X} X Xmain(argc, argv) X char **argv; X{ X reg c; X reg long int i; X char tmp_name[100]; X char buf[100]; X long int n1, n2, oeor, osum, orot; X X if (argc != 1) { X fprintf(stderr,"%s: no args allowed, please use pipes or re-direction\n", argv[0]); X exit(2); X } X sprintf(tmp_name, "/usr/tmp/atob.%x", getpid()); X tmp_file = fopen(tmp_name, "w+"); X if (tmp_file == NULL) { X fatal(); X } X unlink(tmp_name); /* Make file disappear */ X /*search for header line*/ X for (;;) { X if (fgets(buf, sizeof buf, stdin) == NULL) { X fatal(); X } X if (streq(buf, "xbtoa Begin\n")) { X break; X } X } X X while ((c = getchar()) != EOF) { X if (c == '\n') { X continue; X } else if (c == 'x') { X break; X } else { X decode(c); X } X } X if(scanf("btoa End N %ld %lx E %lx S %lx R %lx\n", X &n1, &n2, &oeor, &osum, &orot) != 5) { X fatal(); X } X if ((n1 != n2) || (oeor != Ceor) || (osum != Csum) || (orot != Crot)) { X fatal(); X } else { X /*copy OK tmp file to stdout*/; X fseek(tmp_file, 0L, 0); X for (i = n1; --i >= 0;) { X putchar(getc(tmp_file)); X } X } X exit(0); X} X / echo x - tarmail.tar.Z.btoa sed '/^X/s///' > tarmail.tar.Z.btoa << '/' Xxbtoa Begin X+.\@4_T6F)-4QF\!"pbdaKVAULCb\&S4F4lLl43,e,Wnh7#`-BA8o2+0o!c0,ZB;FEKQ!8(cQ8AX9$ X3C8XV8M=KKTMVpCu#'@+*R[&?i^6'Ed(b-\.sVbiog**D]<P;$dpQn_\iWn4+,C![^]&`h&u-HW7j0 Xk84*&2%D6Ue.m<$lV!IIbi1kiD?;"OnKeh\?Or09%19f_kmp31*B,\ORhH=PnYn:b`VK`0k878?4b? XW@a(<"D;MdJChA]Z-;0./JRTl2P9M,qJ@M'@0q:#"'e!HFj9ZMM;f[M(EG!40-:F4H&X$CC$T;YMI$ Xq=2NL2_:]!i88V"X3@+N2WP'?8!.&7O.JENamb&1L,,+BP_;4ad(BYnfeLCs\kCA16)cT70_7+Im)( X4bd?a9f2Bn'2heLSq@BC5f+1$-rInoaJEhuDd%-,*+CJ-a:JIS4Mh>^1=A-lN-m$A^cssP6R*X/!Wi X?5BL!4FNK>9^A;lW6aQ#KK`lJFFQjefU3=@tMa;em/fDu;.r,W9.@9s!BPm`i`8smZG!M]dj:^"]S5 XeIut6U5<M_,LOToKmqDbVt97/qu5a7j!G\('nWJPS-\5[IfSN2V<Q3%!L_HK3j4S)UVoB'd]6FUm>c X\W@t4>?_@YX;2-'3UnJ]30#4+[#cc09LE'lYd09k\(&06al[^_o)I^-q#%V\oTiaQhYQ7lDF,Z5N)S XjL8)@.PZ(PW4[Ke^Rc+?]N*#WSWH"s)si5t;fqiEEB%iJ)QX5]a.0_AdNG0Z4rR[)!b#kIU0f]*-N$ Xm"&a+Yq?A<U]A7IabJus'Dp?H#94Y+EN9Eg?Ne>uCk*X^`p_'45QXQj!SJ.?l5DD`E1gW9(uL&:S&u X'87L+/]W8[<f1Zn`?$o>\\XrME90uM..]Ko"*>Eoel)>o(?#9.BIJHd-2j8hS^]Rlg0X"B^t/9#-QD X>"rX/3>c&E%h+Y$c7l'+_W"fT^1*G\:B;EH*a@bAA"K76K2_CqJ+t<\cJ5%]Z,N>*&-S<8&Q3@5"6K X1>b8LWSG/\GXU:"p\E(T*d0@6Ce:7TA.3sG\mC;2m!tR/_YQF4(p\oLH_>@!>E,;JMpp9scOnIs#.$ X2*Ijgr:r^B#hi6hJh\DnWp>Z4"A<b#cpW*W1XNIeW!&B3H>5O0='OnV+d`$52fI/$R8^CW>IXG`3X' XTW`6eiG/9_fY739]jDK^:h&@7)aod>kZsum%uXQ^q>e(.YYI))(k]bE-c4tqhuk2_!J__+R`C(X@f& XfgZ(e/2Mbjic+j>p`:7qh,JtRiD\KM<un@n@Fi,neL?V9MuOS`$SM'2!a#g0r;3C!e).1q3ES>S(U^ Xu1&bdGhdpd)@YA:aKT3+s"<%7Po"FN,(6p'KLCM.8nQNo>4oGIB^U'9$@Db^u9WbJ3t$B!!Ff;<t/' XCa<*`GLdWLur/g-`[@g;*l2q%m7<lh:XC)3oKHD3q)9"%*&MfG!,.e+PK-XVUIEJ79lX2*P99Q!..B Xt0CFgFYEP2qh#ZlU[`GfiXY7$kKIjm2%?3u$=F@YsFt.5-iR38X(+.Cbp$IGb2=aIne@#c%kc_T6H" XCQ)Oe!B.=l95ZN-#(Q7l3IOKD2l:Yec>7,PE=gH9/s;gh<9#j<QVCbCF.VM^k"<i89^s]VNr(%J*jH X!PqDn))*9<aob_$iLciJ5q#Z_h;VgrN*Z%Oh_KAsm9_u1%\H2[;cDHQ1%JGj3d1Hf4MGKHd>$5!G/# X[]PmJd388mANNj,Xm?3YeKWm2_cF$;qZlRSjq4o'8>FFSI/AU\l>V.V<LE.VQ^Wsl_AD).9E+>d6>) XA"Tg^%)"\PE42C>0pZe(P<)D24?:9NW?(=MQ^cpnWiJ`%.(.d9>X"nK7#"Rt\@Zf1o1"=#JO,`KD$i X<(G`'@[IOFb,N`imeDFL:!OW=A(q=#n>:"@m!e.nO3)r`S]>IsVn278SRr*6;OWE@lD$Qb5C^9j_k$ X(:>9+2O^K$2r)LnY?EV;?B%7:Wf`q[kiu>5C]O`Gn0J:jfK69[cF.ii+'QFpf[gil1RiXj>5oii(R+ Xn1gBGF!2O4P&i3/.+'rc5Xp7&Oo\%Q?$i#Pi`6(bG@^g,81#b7P2-Hu0-9XGo@b\K*qE6Si-5f&!j> XJUH<C,]7GN.@f12`U_)+Lo;C78d\cJK,&"=[PQ["A%1_WBeH_mM?4RY_*>H&Hue!mi7(,=j<d/&'gr X:A^-mY!%LHIVOMOYNJq;(DA])s&L->Z@(@^&&.dV!JIke\)!rdfMU^]%<e_JhiEYFR2NsFJhkQ\>k4 XQKneP-XI?j%\^Oj?+RTFWK/=4PC?%<WNP*3kAnefssDGZZemdj+$5%$T,Z9F2*'<e_F=\W6Q^g?$>9 XXT*EY4^e=V&QU\r&<q\SiOLfeA8Q*?loI/<2Hd6RTNr=LRNs6LXM0iLg2N4@JBg?\Zbn/qfIer/'lD Xrs;8$-rH8a+m#d)&?^]tiC)r*+.f=9"`JiD<rh)8QJ\V1sVWP3Y7?>cN+Y6`*HR0F.1HbpC0$O:'.\ X6+65j,ZdbRPL*N`"86#^0na0M>Ip$6H5=/4M-7-ZiF<X>UYqQVQiA_=i;EtBfX!L`Vkd_N>k8,A4WX X=5>r?EYoRq[Z$g9lT0UdK2i[JE'Br<MZ-n6rH)=(aL/&]$R#D6cW*RJ9QIBh[X)9d%?L=@f>HHGep, X0%+%;`:B@G&O_p-k/Cfl2[hg!>DbZq\?>K2l,7f;<5903[OVhsT7('fQE>D/P`8)lE1DpUf`3n%l?B Xmd-r4[>hinD3shWf_5%Y!"K']'AVMl7X+nJrW7gYn_kllX%4UEnWd?AC[+k/a#sq'e+'Ce0CY9S:.6 X!eOX3k;+\AH[!Z)fsJ0f0&<"1<GK,JKY;+J6L$ol4Q;Lp;s2],Qf\'P$@2s&!7C=T@o2(KTp.V*&_( X$JRcXE32j=cc4A(tKEum[/oEcE\M:oLpiPV'0BH!BM,$0>sSpi>++V0J%,bAQtBPn3Li3J-NXf)/Gl X^A.W&=&hBWMB?*mSj'ksWU+2aS)N(4JBf'(+@iB/+/_=Pkk&W.2+9O2LJ*3"Z%N'c4JUc#*Jr1-mGS XE4qdkII/4"P>fh'@Y%+BgM`+S(,:+:nZS0Eat/"NEc2ifZ(PEAlc!&<N$)FC8?6BLiXN*[abh-P/$q XF@a3p63J-X1J!!lVC`g4!h!(A=_L7_;(Mhn#NXltCpPeeZA,.j*b8)3/jM8a!WjT6+=;^rYHfo8o.i X$f#;]:72j6$ZZSF]H1dY+FLo;dGE!?!p"A.MS7rTR_fJk#3.^1*IDIA7Yel2YU#P!o\d/k20YV'TcJ X<7T#?)&81"!?<,7Ge2;1G^OV-olD-!Z+-+#3^tX!/r3KLlZO5g@?bLF@aAk!d&A_*J\9AE+?!#>g3m X0dNUA$PD^$O25^HmI3L8IJjYdo>]<MkJ4M?*;AJmB/]k:&F-$HYLato81eG#1:%L1J&2dBb2$h\b>L XPH:j#1Gc>ZN*TBsT^uiAR,:2ss3q*-jJgZSrNV2c^\RK@<,A,?Ti@30#3g.*4ME&-Q)8"[sO;dbt>= XE<A1N4QXICl..NRe!&[q;aEu<4t0J%_cc=]#-+I^g`r'MdSN\15">?2[R=#n'02.O"A\GQ[Y%;$##- XK+8&@QOV1qlt2-;[=6pCtZ1,VEVPs&QP;t!ae;3bmt"]Rf'82*k>89Io+7M8q54'e[_?r`S:"DURU< X.nscg]fr:24&Ij!kQmK3,h?u`!8;VQT-7U=Z-@OAkU_I9Vga;&!`NL7o</uQX6LcU=hu]"9L$K3(cc X1l/Pi8L.mh";0c_IBrGs-#t6Vf4D6U;.Ift/;jjf_6RJZ[CGq2t1^ECrFfN9;>#PYY`\6Z[5I#55Oq XSo'o4+7jS@T;b#mEu5Th?tf6f!r#Yp1pjW@IG;8Fj'>V\V\B#tosD7G)bqj9YmREh8Yo*9tY;b2]'4 X+eK'5T*eboji)7b79S3[Q0^?#04:HqJtVVDT^s$_NKctI[;re\9-p5M.+"P6d%MGjU;#-H>stBtFJ1 X.pU)V6G^8+CJMF/jsUSQtFCBUE:,bli(USNR<-9@qc.\SNLPqf:0,"`J;W^o]2&/33^l1:\g,of,F6 XH2DoIo^]:eWd/WR3C(E=Vd2W=d(dI"@hOM2tqB2TL(eVVPi*fD,h-c'j#HV=*IYu0Xb&2V#Wa`=D&m XH[HRmqF_#e*DOdJGk_34AUg#Cc>J:i1_0#t"[=W=)>\&@ib(W@HpfmqM?"H9,Bjb6!jT`\IWSRebio XMlTV/Q8&W*>$hYbl#KVQ(<Z7^"d8GEuktQU?1%"q#EmNKeL;An5LfC/FP[A,;SNW+SKIPd/3"'Xb#_ XoU%$"MQ1n+c9_d)nqpckNmkic@iu#(F0=qCXu\Hni]1'8QX3lD6+5Ki[,qL!2f)tOG%J-uB;]OGl3< XoX00`%4dUmE1oQ"uJ;'b+t!eCDl.]6+]P`k*(gJ_a/WYhia="M.bZ5K?cb#dDQRtNhlKE[Y"QDd+a= X1@??k;igZkC$[qH\c,HM_]Zq!>7rP&hah1))25-JIsi&(YU7CLN.a9;RAp*ZqSZM-T2+*5us)pJKG^ X_/!Bs!TJ:,q0*fo\aRY3i^l24]0!=1<deSd[R5uMu)'fMJJjVL)^c]1c#:/D3)`q-&l6(oeW$<gkqi Xb,(k#gYS"-PO0/*gAk"B>qp!&$u3P_CV#PHCL$\?D0/+ot5<ZR_X]3d(*t>u3d<5X?%V71,+Vd5l>? X7]]5u\5!6>$eSsP;e8nf#'ZtV9OM:hZnar^\6D3YddgFi.l$?-"'qQ>&\GP'_n3Vj*%-%l_TO@HRqO XM6NMXh.E\I^B.lgCi!*=AdV+WMQCVABT\\u+n#uF]q'KmtAV_-6sl75<$MaNEV9cE)5Y_iL'$Z6>&* X)CppcseR"1Bmsp+"jK\.)q#bE!4D;"DgFoqVhXrH:d0Q"aT#c!oks3!XJX$MmFV!\l+IT_4=m'SQ`A X-Ej1f-M_eQk\C'''(X\R?20!j@=Ye?II<g2`+i?l]"#D(;G_#rR+N$#J"uRO@2?3hh?ir/HZt41Y`^ XY?(M$&in"#?AK-BSBc*!S,_"(<=i@LrW"+9jS`"u1W1Gh\Qq&-E.__dsA]@ut(dAHjl^'i2IXI;'<Z X/&O&;_kY\I0mEd`9N3c$:<h@V2'<!1:rGa:&igNA6m[7ni5A#pHt8nga4?S;ck]_W<&alb<(p8#0GI Xti<+4^4>te4.0EYe2WC/TJ1QV]ON!ErK"(jf06raFIn/-;L&i].iKo?7Sd<p6[&q)m[G[\L7?n#Z[` X/dRo@j&mA.2H@MaG*@j7!Qgu5f>R"b'f]!1bd'LI)qq=aY^9EI9?b3i,CGf"uS(=[bR3Z:]o]$_dlR XG37+YW49IK<"+bj;1@`Oq*!=8e'1oOK2F%JnSBNm!#0^o)2NS#u*6hn3`7QUF)$/%99GH9@#<?`*0j Xr9q"j#^Tb;VZjmu.KGC^+j;`]&t]X:3E65X`5S'%(O8e;OY+N6XnO"$"ZSGbC7/OO-UP(G]780-S4g X?rXm'"#qD*4cIWq!6_W@#!$X-\"!O[YgThI"(?/s37,_kSHCnAcrk0A)_D7SJB0N@&r,2l&WI$#9Em XG("#uLkgH=%U*Rk0c`5Oh@V;0CA+9Pdu>1cLQ@UKBnN<`stb->ae@W9t9N7M1'!u;?o30;3+rRe-?` XF%E>fPCYkk0l7C"uq^kc<LQ4h9PPLe712R3]mU;UW5r2b\g)VT7tNj'*_X"fJmiuA&(G'9Er8&`FL+ XD?;(PWJC4+-"(<e5=H(K`:^.qW`+:%q5+U!lm)*"Hdkf@jJ1Ul5%++3#cqU#jfNcT[E7.pPJFnfQM= X&T#&BfhL!uTkEIU0qZCtXqE`Ro"G4>"HK*!RPa`N5BEF,\L\N5T4B&rA3\1n`B9][1Hm_DA8M`I'LG XXM[U,bK#C]6@:UKN>LW^`-:1h7k>;ecH3'pd[?'E=\R!U*Qj'q`bgjjWU.W@4;9/+bNYPV0T=)oI)X X&eaKqtc1/Qaim*os%aBNK!1-cOH4LdS8B'HtU7(h/P/C,O]4(#\Hb6Qu`5Q`B>cS?'TnI,Np%)p$[i X#M1/JA&p1E8fB,bTKb37P#;]*Tl8?_g#%sfGrCqmDV"L560Qg/0<7bh8D1Tj$]TkcQ!$F%`i^Fbqa7 XbJ?@.0nB3[t`C1fe`EXi6@F-af__8:U4A=.;:=[WP`adi_7K_U`IF;S!g&PI0"-1o4cIHB_c1W\(52 X=V*XckWIdna<"ApiQ?NQb)Pe4>Q$V**jt?./A8aK]"+[(O[kXOWYS"t[L2,E4L?mDWc+fkSgO)'Qpd XI+-h4'MGOH4q.U"*TRG^j>_5F!`%B_NnE:7`lL=*Q#,T'S_0t_#$+J'QX.RkZ/rk$ghK%,Q#=OES`` XQaiaY4UD`n3(`o3`lk&5Y+9R5B-Xq`[qj0S+9ltk^E*6VV^fj=$t)r97JNSe?`ho%IqD4Ju#Xj>_'& XOP9k2\"W3XM`SjkuJJY>%&q05Z/t1"`PU>f/knMU+K:;.V[fjf!m:5+\Rap),L][cJg_J!`Tg(d6.p X?@p9-pPCldF+!%kC!==W"6Nont+@^=M\oObN!uqTA),Z5_Y:'Xt+u_&M/H5;82*V6cW#An(>'^-2Wl XQ\?bq"_2K&c^ID]^`2TIjdVpo#or:bO^Oa>=k6/e9?g=[QH66>A0pMl2G^Dm9&OOtRslNHS]jjg[+d X_CJQ+5.]C!:+2ZUE4ohuN)3=Ud1VHZr/.\9KBPfp_S8'LF?'!7*BV^Slgc[e+e9uR4k/Kf\::Y^6[u X+,qnNe!`H(Zds,(T!XAm+BqQg*;?SY&X#PM($aZj%;2?[\i#NGje7_gZuOFXM,`2`A2YOdWNi.5QL0 XZeA?H1:NPP<,b^>YX+c@fQc1o!0L)qq%[],kU`s`(rb^:FT,Q?6Dd7^H:X'0j\6=E53WVCBb'A[u[Q XkAq487b@W?Z5(U\9lt9FSb%<69rNquF^8d?U_gWfrSM%u0g6qhc<i7LjIN4%l[AC11AHiDe@2*msMd X'E.nMc>fYf665[5D?]a1Q#7?j.e\'SL&/6".6l6jZ[onHu5s"Do@PZ3S6]DI>0bZ?\I_>H;KC#e%Ef XS%b`B.s)@#Lt[';$*8JSF2WsL[<8R&QE7Xo]BNP20<6)Fl1EVd[kB84nEN5B<rt'P"*J!e2LoT=os4 XGb]58f]Aq48\e2-X[C:6#*q.0a9[_;4%4B@,GE$24Nl9FmOX"d+2:[_'V1fXI=!laI/K(S]IK.[es" Xi^TK*7D?/J7*^#\11kj#Y)+9eroD6==hRCL/k0gernc`RlT]5.bQfJ-c4a)Jm>%@\^+o2b*),3;7KM X..a)"-J7'!Z@CNkY[A=jmUDO;A9KuN]"1EL!CBb&F5]T+U.F>@*dB[T8ZqNau1\#fMlR4a)(6oL7Ot Xm\1;%n-#(,S:)9hQ<o)]2<(Zq\`N!$_\_i.6!s""/%&#*CLld^!\.L9-,",!Z2a!%s/&!$]bkF$N"t X!&.lT"s-;?4WjeO+9Nh7EEkgfUK#*01J6$s0B/_&b7tm>:d#-c"+1Y7$/gA=HU8[^/>ss.ml3$R0T= X#T"s-;?`Odp=$[V=%!\WC4B:&\ZePjit0B*Ten3R@C+9Ef""!XrO>XC<43!-?Uq@OPdPc8/rBO#HX) X'n\gGFsE)<B\"9/airt!D!d&EE5-?/#a1eO9&U+:^74-05%]mR9EkhfWlfuLBJeoaTWQCTe!pGWcN- X8*TDWSHU<1S"5HJLJn5jfF@[E2'uj\foWk&45QX1N0',!L]J9`I;/U(p0jIPdj`V@CYoMOB![Ib"@\ X<oH8-e'>!fnK\*k8W5,#XaP0uV-cgIMC,TdqK5!X`<S*E?;nb?AM.?kPq;\%B/XV&Xu[(^XD?5?1ni X[X$)4"pe6pE^2o>d'<o(Z>AG?fA!Yu6*h@.HoE!lCGAT;=+#$C'/`W"!klY(f<g3^["6W3:#!$KX#* Xq<Hl"NY/:euhV#X%bl.L7mQ%"+]+t*e+nM*iV(\(5NS0"n(+-uKEl#IA0h0caDZX]X.0jr=ASJ'2&. X4r^I$LjC*9Ip88Np^o#$=MW^N%)VFg)\bMCnLbbd*\,1(<s=GBi#"Xd'@J\!*hiJPW/`L8GWo8+-`a X7Y@q0Z!uWBR(jDU&`Do(6a=Zid/ceKSX)V0$`[e#%>`\tkEDQlF"#";ps-[%qp=QYsUPAsr9?@>TO. Xe)>R&Y4HL`PK+>C/\cTEEt@XFb"%Qukk>2\j>A#P><n,!Z2p!&!@kMnCeMgehs'-8Ab%]&e)M#-f0' X+T`nh0Og[Z*_6Oo63<2k1EO'6g`fX_,;I-X0&&nuO.e'O+9DmX)]_p_.a)"-J7'!Z@CNkY[A=jmUDO X;A9KuN]"1EL!CBb&F5]T+U.F>@*+\Dh+N_QPg,V]tIB=!VMZYT*lR$)hQJJ0nL(G]D$eCV'\J[C!UZ Xq];^9WK:,&-PA)"?l5Y#quGXiaH:@3EG0lZU2JDg]CMq!j9@SGXMTX:d#-s0aVeAJ[5R)87W(#!k%' X>>C/[U\L[t08cnOCTN;>1QiJ2;[3q1r.3V:bnW(e4L']P?4V^-L+td%;+-@-;K=<=>0R0Q-3kR3Qgd X,4u7k??K#Bi?6H_;KP&-PA)"FWNg/T<3P(a#!AA$9QNDZ^k&n/-AAJAkMO]Z;\n#VH-K&?BeO3lW\L X'3pV">]ERF#6QVl[JuXu>kZgU-)64u,"p#])3:IA^mM-CE/5OoJQmIfI\6eu8Z[MT)OPV;*B+_Q@L) XP2Sg$E$5QEFu2N,4'#M`0oBdPQ>:qGb3'aCo_g`Z_E!&.lT"s-;?i'IL++Yt1L[G2s(QQn6'a=c4<! Xfs$*-QiHt?lL+d>:Rg"Aq48%7U`d<\@&.QJ"mhe>>.7]>6D<Zb\ICg<^:[j5q10d#>tA0E!Iu<##-$ XN,V]tIB=!VMZYNFUfp@(BJJ1%@&gf>.eCV'\J[C!UZq];^9Zq0q6inT04UM`T$#h#<ZNeWEA."t2[G XugBHU8[^/?P'>AT.l+>;@CFL'cdh>C/\>P7k91#'\G"-.;p.QiQ0s;pb\#ihE:>&K*;WGcN"mK9uG- X_^ffD*Rlrk_uaFj?jH>P!k2'F&2\X2%m%?Y#M_UNK1@IHL'Mle!dgR_8.YnkYQTA>0.h,n&JuUSWFN X,F>]0]^,k)XpT7Fm\4hSifmg(NH8._hA<]\5NW=rNu!F0V@#6t>aB=7c->$UdRZ6c9$"<pL\"W<Ap/ X&7OPF)ZpUidk<\6@PR0ge"T!AK$qX80'W(`aT2FZCW7*!^H`<jYi%01'cT3DJ:FP>Yr#nFqk4d*8D\ X=,QKN-TEZH.#N.oMO!-;#\@(*9;O8U_`5jRc8-4jG.jlG@$=Fen<Egrr>%W:m&k6<=]=>8F*.O_#$! XU(f<EfR6H-C%.#Za325X?jGZq];^:#!$LgU']0Zq];^:#!$LgU'[Z.dmsRN=&+^'sE]K5eGQN^ND/K XQ)V`6e]H>lTSc84#[If`=JgtUY.1L&l`-cQEYZml.M)Ja+(NOmhOqpVTg)S\*fXMt%?a!tcEMJ^ XNDVBk-%LtQg`)I_)uZ21N&Ma;)3f68@AXg%#kf:R\\?`pr3Xtdhs*k2FCWe7c<YAR1?Z0$2:G&(NqC XUcZRqYID0(9dnq4Jh-m#>8n?Hb]HY6k1^P&.<T$>-Z(]VnulOHJ5X[eYdaEZ=dPM,cd5b3`q0;ZE2$ XN!qD;IEP4*]ZqNcl(BJnB)gj-/Z^=X<Eq-J%$N`^^ZqZGq8/iC?gU']@[&O28!_E/el]5)Y10GQI>R XLU>Rk16][U]acB,b>(\JPpq[XTMPDu1[71UhLbVg$<iB4+dJYdYg'#'PNdJ9s7+]R5E+VMk:MZ;nJq X)a]Ud!g25,Qq+]RG.E1b3M<^`hF5)M/%SkQ\u#k:30_!=PJ(oT/$;MuXIHc,>ItSm]1Jg1XJNSAo"3 XRZ#1#rT`X?n=RfLUC/&.ReAam@NCV3n+^$7,^fin[8gV'NW^#u+S/(;#h)d_fV^>5'ge]Y\p>Is;3X XR_:Z+@*\YoQ'b3X_btkWY/:_Kei_Q"p3!Q"<8HeHkcpg^q8"0mQY+lbV'W7_=)E\:b2BmT;jWC!$A< X8*S-c,bU(u2qq%[]/?Bgg7oV3:<&BQX35!`DmDD<iiC%M#81`IKd)8j8`Ca(J=)?f"m)<@kd:@(5oW X6&hh8XBGc>uZjfSmiQc,W9`a@K%H6B'!(c,arX"-Ms2Ps"/rr5o$-a^-O@0.tTCXNL#1b)K-=lCH*) X7d7Xg_dWZ!GB&"!IEZoLbY.<HVTm)ZD9[O4k1Y46@BSDFSE2F)dcddXESSjR/^I@4cY7:;^qA"NrQh X#ed!EpR`>fNsD8Zg1h%0J8/g1FtDT?F6d93Qu<UA,!/^iridcs!Z>)gl]4iT3>l/cg36CcSEc.kIq` X6L!b5YToqNQau-a#`#*:T`bVc'7j*eVPm6=hW*cmF>TM`FBA*!Y4[*SCY<Tk46aA5(#V:?.VOsi'+9 X_*j*J1Xi#XJe:TpGL5jhqbh1PXfs`Nc<F"2WNnNF+fqdEV;\%Mi+PNW.g2EM89_m7Nmb1'_nZbef8: X8?E?1B%Ua!b5L]5@&O%G[m5gkgGE`XU)3/Hu1T Xxbtoa End N 8390 20c6 E d9 S edaeb R 4d5e58e7 / -- trademarks abound, usual disclaimers apply, opinions are mine des@pei.com Des Young (415) 335-1888 Protocol Engines Inc., Mountain View, CA