lynx-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

lynx-dev patches for cleanup of parse_arg


From: John E. Davis
Subject: lynx-dev patches for cleanup of parse_arg
Date: Sat, 25 Apr 1998 03:27:42 -0400

Hi,

   I spent several hours tonight cleaning up the parse_arg function
in LYMain.c.  New features will require more command line options, and
parse_arg is becoming too unwieldy to easily allow expansion.  So, I
rewrote it to use a table.  A sample table entry is:

   {
      "useragent",      ALLOC_STRING_ARG|NEED_NEXT_ARG, (long)&LYUserAgent,
      "=Name  set alternate Lynx User-Agent header"
   },

As you can seem the help string is associated with the argument,
making it much easier to maintain.  New arguments may be added by just
adding a new table entry.

I believe that the parsing of arguments is now cleaner and more
localized, minimizing the risk of bugs, as may be seen by the
following code fragment that parses the table:

    .
    .
   p = Arg_Table;
   while (p->name != NULL)
     {
        int (*fun)(Parse_Args_Type *, char **, char *);
        char *next_arg;

        if ((p->name[0] != *arg_name)
            || (0 == arg_eqs_parse (p->name, arg_name, &next_arg)))
          {
             p++;
             continue;
          }

        if ((p->type & NEED_NEXT_ARG) && (next_arg == NULL))
          {
             next_arg = argv[1];
             if ((i != NULL) && (next_arg != NULL))
               (*i)++;
          }

        switch (p->type & ARG_TYPE_MASK)
          {
           case TOGGLE_ARG:
             if (NULL != (int *)p->value)
               *(int *)p->value = !(*(int *)p->value);
             break;
             
           case SET_ARG:
             if (NULL != (int *)p->value)
               *(int *)p->value = TRUE;
             break;

           case UNSET_ARG:
             if (NULL != (int *)p->value)
               *(int *)p->value = FALSE;
             break;

           case FUNCTION_ARG:
             fun = (int (*)(Parse_Args_Type *, char **, char *))p->value;
             if (NULL != fun)
               {
                  if (-1 == (*fun) (p, argv, next_arg))
                    {
                    }
               }
             break;
             
           case ALLOC_STRING_ARG:
             if ((next_arg != NULL) && ((char **)p->value != NULL))
               StrAllocCopy(*(char **)p->value, next_arg);
             break;
             
           case INT_ARG:
             if ((next_arg != NULL) && ((int *)p->value != NULL))
               *(int *)p->value = atoi (next_arg);
             break;

           case STRING_ARG:
             if ((next_arg != NULL) && ((char **)p->value != NULL))
               *(char **)p->value = next_arg;
             break;

           case IGNORE_ARG:
             break;
          }
        
        return;
     }

   if (pgm == NULL) pgm = "LYNX";

   fprintf (stderr, "%s: Invalid Option: %s\n", pgm, argv[0]);
   print_help_and_exit (-1);
}

To make the diffs as clean as possible, I `ifdef-ed' out a chunk of
code in LYMain.c, and added an include statement to include my new code.
Here is the diff to LYMain.c:

--- LYMain.c.ORIG       Fri Apr 24 21:12:18 1998
+++ LYMain.c    Sat Apr 25 03:01:10 1998
@@ -1771,6 +1771,10 @@
     HTRegisterProtocol(&LYLynxCookies);
 }
 
+#define USE_DAVIS_PARSE_ARG
+#ifdef USE_DAVIS_PARSE_ARG
+#include "parsearg.c"
+#else
 /*
  *  Parse one argument, optionally picking up the next entry in argv (if
  *  appropriate).
@@ -2835,6 +2839,7 @@
 
     } /* end of switch. */
 }
+#endif                                /* USE_DAVIS_PARSE_ARG */
 
 #ifndef VMS
 PRIVATE void FatalProblem ARGS1(


Here is parseargs.c, gzipped and encoded.  If you prefer, I can send
it without any encoding:

begin 644 parsearg.c.gz
M'XL(""B*034``W!A<G-E87)G+F,`Y#QI<]O&DI^I7S%F*A:I4(?SLKO/<I04
M35''AB)5).58:[E0$#`D88,`%@/H>$GVMV]WSX&#`!\=R7FUM:E*0LWT]/1T
M]_3T,8/]'39=\)@S&_YUO=D,?@<)N[<?!0MG3/`D\8(Y],[3)71`8\"2!6=.
MN%S:@<M\+^`=AK^VV`[VK*!*'B-.N`R./89S"LZ\P/%3EQ_B4/R7L5V8T!+A
MDEMW=NS9MSYGYI^CHY]8J>N(3<=7?34T">=SGU>.7AUZQ%X4&O3T^;:C.]M/
M>?WT1XP`-/address@hidden(M]S[(2[Q)N8_W?J(6?8+`V<Q`,F.K;O[\&P_:TM
MY)address@hidden)G#H)V_IM"Z9S%G;,=@)address@hidden)NM;P`4F,[.3X>C<=_JCD\;
MC8.'@X,#TS,=G9X.<CVO3,^D/Y7-U/Z]:;\:FA[L^)OI.+D:]J;GHV'6]X/I
MZPX&HYXUF8[/AZ?4C]W_EM$WS,_U[QD-V0#J^8\,X?C4FEY?]JV+[N07ZCPY
M,9W#?O_8&O;?&S)?P8J!,?L[['Q&*EF`8#/address@hidden"51AJ:`($T;$_'M;L"!,
MF(BXX\T\[B(F$.&]ERP`EFT?;9,`;"?A<0='!BP%A444`7](C"address@hidden
MO2"2/8D)I"II^Q64P0YP+B_P$L_VO7^@&J0!D-$!?6)NR#P0[0(HA4VWQ[K,
M#V'#B468^BY;A#[N+"+.#AY9%((B\)A4P4P%_Z4QI(UO,N59<address@hidden
M^F/KTHX%M[KQ7%A3TJ2M+9'8B>>address@hidden"R6M#4)HQ;L)9=
M.PB#QV68"IQ5C47%-.T6J#=KE29B.U%'4;2#?-)_(",M:&A+A=_?4>MD$[EV
MVX^Y[3ZRA7W'V2T'address@hidden"8#O1`\(['L>>"^*-8:M%ONUPXI;MNA[*
MV_8U9,R1'[0#!9O%X7+%F.VQ779RD6.M-V.M%[A"*S_8`EK:!,4B6FZ^L]4$
MI;53/VE*YE6.5L:+`&*>I''`#E!,DM-"@'Y9R"@$+;&[T/D4GB.V3V^V]#)U
address@hidden:#-0"?]MJ7/4&UXO`]:U9&%MI@/L&Z`=Z&QGI!/L'(0,HUOI$$$PC
M_?#IXQOVZ;OO%%(S%[0C*T:#T:_]<2L'K10/_ITD<=?W0Z<71H^MJUY7KO_B
M_**O>address@hidden''OYDNU4=2BBJI=YU3OEB>JX?<11E<C;address@hidden;7^]
address@hidden(\FYYX<&+^<YFNE0-1O:DPRL!%B91[RV*I(GB==%;PK1=1&L3<
M62^B`LA?("*YU'BM:*K%0J,V%4L9N"B6<F_U;HG_J3A6\-2)(X5CN,1^:'J>
MTZ6;XG&>H'>&KH`7`/5+^1O-5A2'"7?0<7-#1_FKN=-`(B=J<"address@hidden
M2)F1:4%,!D-!+(TE7P)?#)8.VV;;'70,?1Z8UG;[#?D6`YYL*S]F$=ZS)`S9
M,G46BE)MBY&JC%Y-5L.0)5?D1+"&!L*VG`A6!5,ZBSA/YO;A=KN=+>NW!E!P
M>address@hidden@-GYL08ZFUX%?>'8$8=)8!'4N,*6
address@hidden'T&F$OP/26+&?Z0#_T$OT*V8)@-\L]ED!S!981!,>3+N]PN8LJVW
MHKJW-KB)1=7%IN=1W2DX1`D&*6D,'@[&%.#RP0K\1Q`^^JWD'(+3ZMVAAW0?
M^*'MDE.K,0RN+V/PIQ_>`DW3<"(1.6$P\^9I##H/:-`I(2\K6<!D-GO;G?19
M8L_!E]98(G"R>.`"/.Z8!,C=7R1+'Q$E)N2#*`^<WP`WEX\$$NW`<(UD&;JI
MSW?OT6^;^^&M[5=3AXX\6%]VTAT`(?G%*$9TV&V:("4`##ZKI-^WR7,';2&D
M2"YB50&!82C`,HQ95[R^XJB<JX;Z=S8=I4F4)B=D.=!ZGTV[2;A$0]AJWM_?
M[[OI,FJV]>8OPZ^"*UDUJRSB-]X,H\.K2=^:#+K#4ZEGX*M^+BL:MCU%TP:/
MP8/5"WTPYR<4/OU^Q"8#:W`]?&_A]&\'Y\-?5AS6;X!+WDRJOV,[B[+^4]NS
M'94O"D?EV;2'V"<851TQ.PF]5O&4RS;/P%N"address@hidden<X,R8_L^W8)Z_<U
MIY2S\'RWO%9L>\I:)0(?!)%7NB"address@hidden&0G5Q0Z6>."C-,I$DX:^H)SUP
MYL?9F3BXAHCNGN!1?).ST:\2Q.H.?NU>3_0VR<,5P$;#51$4M"ZV[_WR(K'M
M29(@I#EF#ZZ!<0):_GY0';2!B"#V?"P1HEJ_T@;X38O]W<4$#D<9SS76QU\-
MEF^DX.OJ\G(E^&H<4^;%`LR#<`ZGI-\Z/I]<#KK7!9_E&^X+OM50*R;Z]9+!
MY/'@SE+A]8=7/WS_$;T,0:F&6:L:K,.::IJC;T6SZ!Y)R)J!1`LJ!?I&0#1E
M8:address@hidden;C;address@hidden/+/1HY&=!>=!T5#VJK77M:H<<"*4
M-0.:K)!.AJ=H1QZ-MUQRUX.S#T[<%=4]JE-<&)*L6`G9^)74ML!*.5.9D^)1
M)'QI*=K6)4MX'".A$!F6EV`ZGL?_DJ>X)J`E4L?A0NS/;,\'address@hidden
MO`,X2::7X/K8@;`I\U,^>FK8LTB2R,HMZ\CPIM+L,YDC=5O]]_V>A8<TV-3?
M?R\V3WKC\\OII"address@hidden/2GV01$!&B%AOUW?33K`[#=X_[%:-JW<'*9
MHL3D!DVLA2E-1Z'/`D=<_H4+%SE0O;-KIE!,K3LB8+=;KIW8I47KYN?1CRO!
MP?CA+&B`3_M3_/]R-7S<T=-FR=K;=/;AU<'W/WPT2:^<address@hidden>.N2H^YZ3
M")FH=E(@%WYC=CKG^>MAX,+[%"address@hidden>^2[K#21,;@*PEQUTR44NW;JT
M7:S1@/7HT4Q[#L8'address@hidden//>^&1R$Z_9[M9_2IS':PK?URS+*2!5QUMK7JX`'V
M)=9,'<0K)I]5Y*I0#)9F.APP/S<QA,9!E[&WE.1%RD!#NU&6(_:R,/3-5E$R
M;U-T`5'01NH4>.SA_&'$,(&-Y3,2T3V'T`/E@&EFC8$$V=S=W6UBC..!:&=>
M+#!0B@'6U"address@hidden>$,?[<address@hidden,+XOC`6482
MC.;IL+]1&'\`L;.T-ODT,,LE;U7:`;&"address@hidden@,%>1&N!"%#&
M^F$L=`R.H\BY.&*],=JB[._!"3#_T^XNN'T-W2KS!HH`]3\C03MI[63"0W((
MLN:@Q0I&:9=34>,).[RR-'address@hidden)-?SU;Q!\G=(Z!"W8ADR
METMJ+GD\YZ``K]HHAP-R:@;address@hidden&T/address@hidden/$NNB/3V'+-=!,LW6(
ML?(5!O[C%^">]"^[X^YT(_3>/`CC+R%<UD85:@2NE.#N*^.SD<address@hidden@]
M715_N.21/2^[(KKYV05?DU_4\Q7]Y\'U%.S=&address@hidden(J,#\;WL18%$_F
M0^#_:W0KI)^\%CZ*P[F$1R/3D#:SH4S>%.NPL3<'B^$S;QGY'+.LMJS)A53+
M!7T0$(`OX73C#Q&E8\UPL'X)=$=8Y$/K"6<%;/`'QC'C!\96%GM=SZ7,*&!Q
M/INQ:-J*L%1-W/9E[LH+4HY'G$BC*(P3RH!US.`4`'R9%4-'#U-),8=#CLY(
M//HPNQ,HJMCD]&)@AJ+Z.1ZL5-#Y"X=?0YGS8KYR`FS,\Y+=Q#?!#941$1`F
MN>-Q8B6A1>address@hidden'66^4D4A5<JYA,,.=@&<ZV5O/]?S/+[0N;S;08B91"Q(
M,M(A4#E,<DER1]MGSB,K1XO(G_L;N`8KF;96,9'W\U:#.+\F`\<.Z[)Y^5#J
M]>O7U>8_X/>@NBG8#<P>%9E<Z/address@hidden"address@hidden:CN3D!=+'R(/[@
M<`[N(/8O[0=OF2X[-`8T&=P:X*4<<6$_T"#<address@hidden)L6LE1PV6*K8C]I]+H
M-M4"2AB/RD2MS;PC<X%0XF\%WW77<[&]S.X<U6NXO8[+*(4"I\&ZI`Y?&:,9
MK6"_G-?*Z)25I`BUGM?A;1S>KU0Z=/-3>'PV/?;address@hidden)-U?#ZV3D;CM^?'
M-1LNK,IQJM8G93GKTI$4@;Y9S;>RBLSHRR/V/Q6IT2K07!)U!!.,SX\-N(ID
MJY<?V6F%)*CU*<L_AP-MPATA"\_0<`$B@:.FT-;UX3PJM*P0&%54<Z-_03D7
address@hidden"<RCU<*N\O.^Q/>*GEC<;7Q1;3=:+>XR$]EEQ5T5
MZ94+O-&&%=X-ZKL5U=TB6U``9KI<69=EED:1F!-$184W-U%4+/"NFP\KN]%*
M%==,2T7><G]-B!F%HC*;9-J_1CKI<C2IS2>9B?_?))3LOSB=E(E<YX2*/*_*
M"R%$.3'4^#^8%Y)__.79(0P<*_-#>LL6$D1&'(4,address@hidden)^QA
MA;(W&L*>E1!7>'9^P*4`1+.YU6D"W-6D>]H_9%3N+=!U]$'>5/[XH5/^H88.
M/-`&B)9'U"H.5;,-H6S^'XU44(]$(?84\&T8?E[:\6<-['H"H."X`9*#.2HH
M^J68CJ?S5,;FV2C,T)=1R01_#A7^G=)PF1*[\^Q5+,U"%0,\OOZQ-;FZO!R-
MIZBPIF?TBW79'U^<3]MR5J*3R\)!!&HFZM;`WR,5G"&0)P2M)J"IA5I`^9\6
M7BH1$/'[3.+SR/0`_AC\B3#VN&C+_4OE"K6,address@hidden'P^XP+C,
MUA16C`LV"T4%):3J1K%!*FR(J\$TJ.(G[31UNSV[IPW&^1CX<5N_3(T6_2(/
MG&Y:8W;/&WS(&+&`O8[E12.\')B$G1ITJ&1:Y<#GPO`F(KX=POX2GLLML+X!
M7D8$FYS_NP:?&H0!7$?_,4NB;#C]H3IB/P2!UZ'2(Q04FX>P#/8)3Q%,2RQM
MST=V27[4L0L?=^";&'address@hidden;:HX<!,;!1["V:.B8HR%/)#_3&M71F*:>GF?KD
M%*5>.8P^F/address@hidden:'[21UH<address@hidden;*AC*8)]7K=,-$UMO*V&P9B2&K
M0#$P\E>FH*/2V:P%8]N%K63F*B/3'address@hidden
ML6061SAP"!E9R@)G'/X#B"address@hidden/)!0-%N%*Q7,Q_S]=]/^^-A=S#1V.&<
M"VQ?E*B);address@hidden/$`V&CB,1^:QO11:U!(-%:O3V%]9>TI83MNDM13%N,JB
M`JNT,:7M6Z.ZB/D0R=C6#,$=4,5`7/CV?)NU$*"M+8RTT2^T*3[KONM;5].+
MRT*E&9RF-NHL!2[<Y_(JHM;9;`.7%@<MTO)$/(Q\>I"!JR5YR$'L,4SK5N:&
ML'E!$=-D&>FG5O)JHB;!2Q[;S0(-:%&*-(!,A_TIY8K(<R,"*DE::ZN(T#]%
MDC1,>9)DRU_,&6F0"_N#6OX",N1]@&=1%37G\PE=X:A98>V43Q%J)<*GB,<@
MS`X7LXUQ%ZN0AZ:address@hidden'..'P"XX``.>address@hidden&K%#P\#QZJ'!6H'!#J2^
MX!IJ8X4BHIBK/$R)<)@3H79*I3^4G9+E,address@hidden:$/'CO/8.1RGLGFFJL&
M/=M>UD1HC7\^*Y>G],_1I+?$ICOB:_%&[Z1--](STI$S=$]6EZ*5>`;!:QP;
MF[KG$&PUQJ>(J,+8O:BU=M(address@hidden&"6T.+)760M%HECP0JB=V1;JH`HS%[(8
MK4OH'::+X^BTX6]G[M6PF3P]XZJ)5&`-<address@hidden<>CO_I<&4:D\.3\5LY$>
MA4:RSU(A2)YH>@C]2$_]&76C?RZY7Z0$'64(4H(5.[P,@<LJ#:_K^)3"W.T2
MN"SH-BDO(R]X8A$T8<'Z'+M)L5<\L\TGU^O>+%*^*E!7H=F/.B5&Z9CV?OZO
M#P<?VP!C7JBJ6\K-;\5-T.PP"address@hidden,G$'QN.IFS<[_;.^L<5-Q$I
M[U0X*G)))]/^[&6S27_0[TW/W]7<FU4U^!(UU/B5[R/_Z\OTB3V'E98OBJG6
MIPEB`AO061Q/address@hidden"<Q;*$R);K]*;1DR,TUVJJ:978Y
MW%S(S;,OLY]FF/[`P<IR<#J,EHN+4:U/OH('F_$F^%:P=VH6^-EZ]?KUW]NT
M0:ER.NQ>]-7/=_WQY'PTE(Q7XS'[W,3J4.S-%W".@&UTV>VCM%6!1X0FCVB]
M?L$[VV"_>Q#D2RL>XO<]Z)Y0[-VFF,[>@WD18V&*YK$G)`0<_6F`5VT0^^GP
MBIWR`(RGSR[36Q]8,_`<'@B.6%:)G'!.U\`/]_?QH-B3E?5X+XSG^]GG+`+*
M^]&51S1TRS#F^1(HH"Z0:*S6QD;KWG-7JK?4]A4OLM$<5?<H<-P]^PE+%+BF
MO*&1=((A`8`?&>AMF_T,2`[I9_W+C.P;&.65P"]K2A$/)>TEX;HPTC09TF:G
MD?]&2J?1PD]QM`M?Q.CH47!VTA-+==K*+X>87*OM.&&*J3\DM5.<KO#%A]*<
MOQ<^?-)ABH*5CT08,H[P"39^6>8FT,^]*;.MWSO+.VZRVJ9)]=;15?ANP7KJ
M"L2M?.]@'8ERC/2FLYRI6$-6X:W^%Y"U\L:_BBSY.1@/@T>1@&N#-H,&AO,`
MG`J7J?'5!*;)8CU!6H_4/8F,`L\]C.[E'address@hidden)]=HL7ZY;&97#W_!
address@hidden"=2#H#39V#<address@hidden
M?O1JB)address@hidden>"IB!V31;^?RV:.0ES5],I88XZCIS06;;-(PQ#G5AY'T="]-
MH0OL1ISDMW:QK$5W@&UYLXM`98&address@hidden'&7`C:8+OMVDYD1//F`/K&address@hidden
MF#ZO!?Z>(4%^_THPA`\HO3&3X1Y,[CF^JNU()"P;7T43/=G=2$'-X]Y,0X=7
address@hidden<GAN'JLGIY4LLQZ;+8$"11.:address@hidden&6F5R;T
M!;address@hidden)/N,5O4"\6S*UG9R/NBCBX%_Z8]'"2S=XQ$-"&4=1WH*
M8$55C4-]#*B*!GSN6Z/9YBUQME*\MHZU"#Y+=NTXQJIDD&F7OODL$W64]5)5
MH(UV&>V*.EKT9;K2+LMV$M)%D2>0$[AV[&9;;LTF<V"[``>K%7]P/>%)3T*L
M:/E"%CU)RP%L5\+IF\:Y!>address@hidden<$U9,.PQ[TKDQ("P:SCBX6F2ZJ(-L)
M'$3T4F_M,O$M<1UK]4-E,R.Q,8L,J-B)[PXY;!UI5_!K#Z1JX-]M27`DJ</D
M":`'V"H9D,>%96UT01(address@hidden:B5E6)4?_4LVGPW#\W0
M>address@hidden&=-5<*[V=[>2'address@hidden<VA^XB:HFDU7'C9:=/8W-
M5MT_/I^.T.HI<X0P<F/(7:&_-*>JFY44+&U'?.:/HL+V49^%G66[1SV[OO>9
M,^B&*>]4!;EB`AIA"2<.??_6=CY7;X$5,#/E3:!W`[[Z`%?CUO/Q=)6WQ\`-
M,.+<9MEP5%*DG+66H`:W]-U'-=S7[`F77%\_BV`(*+EH-[>JUF!>Q6XFJL(3
MX*(A9_<Q/B5!;:%WNA@)I$(^[L"+93DC\F4O;#=X#9NM![9!C8[K%[EEB4OO
M5W$Z*U&OL3\P0LU3UJO:E[<;3BKSKCE_G-$[L`K!!:$BP7QLLH*(;!^K4ZQN
MVM9Q_Z1[-9BVBZO&J#83$4HH+QD5Y!J2D&"5F\CON?PG%22DHO-L"DWX!3*5
address@hidden"=+&-BH*3#D`D!)U(?.J7K,7I"/address@hidden@STOI^T>address@hidden(2K-(UT
M&EGH7%<(=7`MN\^F%P,+;5#QU!8Y`ZD=,S22M#,3'H.73Q\N%0P1U,\N0!CU
MQ^@)address@hidden,9]I'J*(#ZU2UQ_@)])Z1/U":
M5K[(5Q?!2!`(6O8="A,E4:7F0KL5?E[16BSFR)LS5<CT6]::;9]_DYZ/+W)W
M@><R9%^*#ETEE9N0[G=V;@)]WY)39FM[=W=W&UT5>;^TBAY<=X46G?6[QY:*
M\PP=0H9_V*=CP&J4?MW)K1_CYH)*2GAB+)UBCAT"`WIH4(DW>T*[D?DO/;G-
M[+^^7WD3J&M,!'-H2L)XT8N>RW:8?MQ*-Z#44]3_K>U8>]LVDI_E7\'F<+&L
M2*G=XH#"address@hidden')U:Y3RRE0U(%`491%1")54K(:%/[OG=<^N`^%37H&#$O>
address@hidden(R1IGPB`K//U*(4"=AX^/address@hidden&AI;V
M7W40'(>X!'9;'\LMU2P."address@hidden<=F=MX$^-YOZ":R!S$"\:&address@hidden
M(EL6<,<CDT%5_84@@MF(T2F;.9%AXA(]1K%%$"Q<NG\`0#<P<7CJSZDZR4WN
MQ&7NENR64&7-3D*]X`":5;J.TZ,WX^M7;XLY2%_P=_^4J:I,G(Q,8<address@hidden
MNGE?0AEC*%#J)L+KB<I$HC!'EH`UCB'1G7<8*3-58:U;^>%?+X$&R;4%ES+Z
MIQ&5X1!,P7'@S;:HFDV4^<#""1TPEXRRS1PJ(RGN,:Y\G:\J0$)LTX3X,Q1M
M7[\:OSYJ#Z)IOD34]R7]INDBZ0<X,<NW-4(?'4_<H<'address@hidden@$')T*:
MI#!.EZ0"\2[`(3^FRV*FU7[X,!M1L;0<7CL1),]%UD7.^[+<KJ:PZ!117A1;
MJ-/#1H",I/':QSG9SJ"=AV1[C_HC$D],1]N&;)V,`UBK.>H-J(_86HGS9`0M
M;-]*[Z!HIC&A2E$(address@hidden((V'SWE?9*=XQ%=K4=LV^7(.>[XN.)H_6G1%E[C:
MITNR7#,-HN&33#6?BT))S*3#?>/!8_5E'9A-64VL"MZL/,[OEBOJ$X53I:.-
MQ"<\`-S5(&0L\"&B"P4&:\329)Z#C$F/=&W]MP.A>@BRFRS-0BD:*'N09$MP
M5E11,5)D=ZP9_6I71IA<<1J-;IMV*?7Y7=:-407!%I*EZ752C2("$KF_\#Y2
MD0>+V4651R'2:YW#D0CWNJV7$RK.J0/3OWB7D3'+E?B\G"96U1BH&"KBP1+T
M<L20KMCHZ&W'-Q<_CAWP3941E^4C"Y5,4)1RYHA<)G4E/K$4Q)5<]W,:R9[K
M"^#1QH:7UFQZ\!3`1+-\N4S+')\[[>>JO2A"Y%YSDQY8J]A13G.1G`AN'^A_
MW?DQ;KWO-:[S8YSMAQP<3[7>AH7-JU_?-?D/^7R<+]]6Z[T:<;P"EODH6U1%
MAFD_T`Y(RS:/address@hidden;:1\;1(:UNFLJ%!5O(F<,.UM%R$6+4_8
MB!!+QKS_G!2+;Y/XXAH29=FZB$HYJK"19]&[FDNL0,:L-1>6"GDL?&;A;X]%
address@hidden;YM'R42CYA`R7Z75ZK[)M[-J4I#!1T2J:M69I,L`(\=51J^N[IA,
M2W\\X;)*H"#AC"&A00"/OQ<QD?>]37?7ML9)03:.9IQ1"+#LN]&TV!A?5J:&
address@hidden"FES\[T=6H3.%DH=40%O3AE[V0T/-T^4J](:(\8`F5#HT=;6/I/)V
M8M%#?)2T*,2=!J&149H/address@hidden"5'`<+9FPVJ8*]V4?Q:&0EBZ=SXF*
M!''$MHV,G$O7P=53B#3OV;address@hidden;LL^//N:U:\7>UZ26
M7(G]LN*8TD>D+D5B0;B*3PJK?+.H9NP73S(R^Y,9(Y;\HQC[H#*S)A'I8;'1
M3V98_>WMY2^3'VXN=`J8JC9I85Z3QN8CN=H&ITWFS<$3P44AU:#81(?ZTX:@
MD<UK&8I:V,NYI5[N=KL)L?_,DI&,CEI=CM1B^:T&80,=G.`##+'M>^Z>176Q
M=?6I#?H"6EI<[D<='^"GX*"2P1V^GI;A:Z^IYG!C_+Z%:S)F!V'5\`:0K[;+
MEI<R)D[Z*=^P&33N['75I$4&EQJZW1<9H1`%I0?L.%1ZMJP:.:JV6;6%Y1PQ
M6#:\2\-2#U\0L;W39K7^4Z7<+#+PO_UP">0)2)J\E7I,H"[4<-^5ZI#`71GN
MC^T))D$#&+M8]\DFX&address@hidden,"U#I&O5=(>P+*'address@hidden/;
address@hidden<MQF?)N/#0M)'95]7'^R^</2=N%]3Q]=9HTK4XHVAQ<.L,1B
M,QS9=\NBV&:#DKOT88SVQW5J-$AC$'E3C!O'#$GPF+!-?O"(address@hidden:(UT2X
MOYJNR4^MGYR*I5F]N\O;:_[,RE*I0,D?*(\$E`<A\KX995Q0_>9HQ%,*EY3<
MU1CU[ZIZT!Q!QH[IKNC2`HB-.D"$BX)L.@@2-6J9B#E=LCU%;-=MZ^VATXJ?
M`>F<L((7)+T"W7F-9CUF*T;FQ$W<>`7E<U,GMIA<A9A$93#BJB-LE>I/%^]N
MQY?CR?4-*E>55;7]^JWMB;A.6_>*8T+[UI!%%]TJUUCH:(+*!-VD5PDUU.J@
M8?LP.E#8+:address@hidden"H]#*M`"`W\,SIJ;W)&B(@G2WM_-&G[)+8AI[G>
MT&,YHP(QG!BH.)%.`)N#7)Z\'T<PSS*U=Q[8:!;*/M^B>$$81<0,Y;$(VJ`\
M%MT,4,A*NY.LK6W,0X\3359C."&V^9[S10V347(%6V?U]=--DWQWW%I*W(FG
address@hidden>N&1#IYA7EAEBP^W;O)MW%^F&E$WHE](6#HC[C*G.V\L=HMWBU#^%"address@hidden
M_VX2S80GOR$)>$]^#=`%6[#[+>\/;address@hidden<XO1YM(R50I#+(1
MMY-^7F;+JLE5#]X/TH<6(]2_?S:Z?W:$)Q7=8=F%`=MB;#%M.T_#EK!$Z]'W
M:#GM.W9)LLHS-OQ?IS/Y-"_RY4P;]G]SHA)443('6.`^_AMZM=)<<IX&address@hidden
M0WGQXDP^JNBN]/WIH(?N9#-H;L,8)?W_)"address@hidden;3<E*9"
M53S#SBF&V8*R1YP?ML>4SD8C-2JU,address@hidden'^[W=9$E?HL0A1.R]YW1"
M\Z&_H?I<X^M!`D1^F:<8,ZA4T7,Y&-.3LZP<&`Y6=Y@<WI>'[27U5T"\XQ9'
M9UU676;,:W/L=$VC'RSLR3+R\6J>G_.`G%7R-I+7R*SM:'0D[F3A!756<2'C
M?\+]YOH`U6Y`,Y0V"7L9,JVPZ81XT&!BX#O4K>K$O^N\9CDV%4T+V]+51<-!
MB3:[2A6DQ#Y/7R;P";-O#;03!%OK`,]8U7!^4Q!2RRTP%9;2C+M@>\]I(H9W
MIAP[FW[T<MT"*(P)V]:]G</L!QF06X``G7`.VAG'(:7LQT8=P^IS%3T%6F**
M8^Q2I@(#V62PPX7*HM$D)P"34B?O"KCJCSFL,DOMG!_9S@((A"7_O9D0?YST
M)1F?\C*::M^C3,BT(,%).SSZ($7L&TQ;Z$>1$:&address@hidden&+<@-,
M83$%6G'"N"8N12<^,AEG(W4"9`#G+OI3GQQRLM7TY$P=TI00<VHA'SDPO;U]
M\\NKNTNYPNA>0K<JN$O'W_85=1T,>^2/address@hidden"#;<ZTE.NDA++[.
address@hidden@T>)"8<7N\"=6YLO]%*M6MXW6#270V0Z.CH,!9NT[9_
MEQ9.K'-=(address@hidden&><.>]+XIVWOO\8.>]+XAUWOOL4.>]OQ7IW%['
M3X8ZMRJ;6.?B]MUR\(/+#GD92YD"R&/1*,8PA2IXG%K8.OY0K"E[]!+G^PP#
M,"J6":AIGE&T75C'address@hidden@N<-[K"E&;JHHT?@>#E?%*8`H5!\G=R?CQJJ6
M)F17`FBA7FX^<0R89EC$X7,Y+J0!_0'<2$>^`Z>FH>H#+G3;BU-G"A4`</")
MH.K3QWL.`F+_&`?M4&UI94[K,'ENHM]VY.#,"$C?\+R=_9T)N)=>M]6WE0J,
MJ-?)>YO?Z!?&,;75UU=V7_33'Q1'FF<XZ#7D_IU80VOEM;?&0!Y+1HH_M<#K
MA&address@hidden;H`.G!*8Q5=]]Y^:NYG6>?I!?3&P1;K[4L#L6MZ"9&!H/=7_
M%8HM4"I`Z*`L(/J#3IBNP9T%QHK'Q>$#L'AT0K((G2;8=,+J1RONL^(]_Y2_
M3[J/I_V;XVHQ[/4+>address@hidden"V;CZVMJW/@M6A'K-XW/K$L[#(L9R_]006V
M&YV_DWYL,!8._],+Y*])*_U:9!A&W7/J+1OQ?8&address@hidden<D;YTF
@;TJVP&/A'S4'2E$P5)address@hidden/8&1O`7!X^/L_N%```L
`
end

reply via email to

[Prev in Thread] Current Thread [Next in Thread]