www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - optparse.d -- good enough to be std.optparse?

reply derick_eddington nospam.yashmoo.com writes:
I've made a command-line option helper similar to Python's optparse.  It allows
you to specify what D-type you want the option as, short name, long name, help,
and more.  It automatically creates a formatted help message and prints it on
errors.  It checks that clients' usage of the module is proper; and it checks
that the command-line arguments meet what was specified.  It has a compehensive
unittest that demonstrates more.  The source is attached.

: /**
:  * Example usage:
:  */
: int main (char[][] args)
: {
:     int verbosity;
:     char[] outfile;
:     char[][] files;
:
:     // Constructor parameters are used in printing help.
:     // -h / --help is always added by default
:     // and uses program-name and usage.
:     // --version (no short name) is added by
:     // default if version is given.
:     //                                   program-name
:     OptionParser op = new OptionParser(__FILE__[0..$-2],
:     //                 usage                version
:         "[options] --files=f1,fN [outfile]", "0.2");
:
:     // int, short and long, help, metavar,
:     // no default, not mandatory
:     op.addOption!(int)("v", "verbose",
:         "Be more and more and more and more and more "
:         "and more and more verbose.", "LEVEL");
:     // comma-separated string list, short and long, help,
:     // metavar, no default, mandatory
:     op.addOption!(char[][])("fs", "files",
:         "Files to process, and make this a really long help "
:         "string as well to test aligning.", "FILE,FILE,...",
:         null, true);
:     // float, long-only, help, metavar, default, not mandatory
:     op.addOption!(float)(null, "thing", "Do it with this.",
:         "FLOAT", -4.297e21f);
:     // no-value, short-only, with help, no metavar,
:     // no default, not mandatory
:     op.addOption!()("a", null, "Use alternate method.");
:
:     // Parse command-line arguments, including args[0]
:     // program-name (it's skipped).
:     // args will be reset to the remaining non-option
:     // command-line arguments in the order they appeared.
:     Options options = op.parse(args);
:
:     // Check if option was given on the command-line
:     // by using (char[] in Options).
:     // If the option has both short and long names,
:     // either can be used.
:     if ("verbose" in options)
:         // If option was given and it has a value,
:         // retrieve it by indexing Options with short
:         // or long name (or only one if only one)
:         // and do getValue!(T)
:         verbosity = options["verbose"].getValue!(int);
:
:     if (verbosity > 0)
:         writefln("I'll say a little.");
:     if (verbosity > 1)
:         writefln("I'll say a lot more.");
:
:     // args was reset by parse to the remaining
:     // non-option command-line arguments
:     if (args.length == 1)
:         // use the first non-option argument
:         outfile = args[0];
:     else if (args.length > 1)
:         // OptionError.errorExit("message") can be used to
:         // print help and exit process;
:         // useful when checking non-option arguments
:         op.errorExit("more than one output file specified");
:
:     // mandatory options can be assumed to be
:     // there after successful parse
:     assert ("files" in options);
:     files = options["files"].getValue!(char[][]);
:     if (files.length == 0)
:         op.errorExit("need to specifiy at least one input file");
:
:     if (verbosity > 0)
:     {
:         if ("thing" in options)
:             writefln("my thing is: ",
:                 options["thing"].getValue!(float));
:
:         // no-value options are simply tested for being in Options
:         if ("a" in options)
:             writefln("I would process files using alternate method:");
:         else
:             writefln("I would process files using normal method:");
:         foreach (char[] f; files)
:             writefln("\t",f);
:         writefln("and output to ",
:             outfile.length ? outfile : "<stdout>");
:     }
:
:     return 0;
: }

Example command-line output of above program:

---------------------------------------------------------------

$ ./example -h
usage:  optparse [options] --files=f1,fN [outfile]

options:
-h, --help            Show this help message and exit.
--version             Show program's version number and exit.
-vLEVEL, --verbose=LEVEL
Be more and more and more and more and more and more
and more verbose.
-fsFILE,FILE,..., --files=FILE,FILE,...
Files to process, and make this a really long help
string as well to test aligning.
--thing=FLOAT         Do it with this.
-a                    Use alternate method.

---------------------------------------------------------------

$ ./example -v2 --files=somefile,anotherfile,nextfile --thing -4.23e-6 -a
outputfile
I'll say a little.
I'll say a lot more.
my thing is: -4.23e-06
I would process files using alternate method:
somefile
anotherfile
nextfile
and output to outputfile

---------------------------------------------------------------

$ ./example --asdf
optparse: error: no such option: --asdf

[help]

---------------------------------------------------------------

$ ./example
optparse: error: -fs / --files option is mandatory

[help]



begin 0644 optparse.d
M;6]D=6QE(&]P='!A<G-E.PT*#0HO*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ* T*("H 0GD 1&5R:6-K($5D9&EN9W1O;BX 4&QA8V5D(&EN('1H
M92!P=6)L:6, 9&]M86EN+B` ("` ("` ("` ("` ("` ("` ("` ("H-"B`J
M($EN<W!I<F5D(&)Y(%!Y=&AO;B=S(&]P='!A<G-E+B` ("` ("` ("` ("` 
M("` ("` ("` ("` ("` ("` ("` ("` ("` ("`J#0H *B` ("` ("` ("` 
M("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` 
M("` ("` ("` ("` ("` ("` * T*("H 4V5E(&)O='1O;2!O9B!T:&ES(&9I
M;&4 9F]R(&5X86UP;&4 =7-A9V4N("` ("` ("` ("` ("` ("` ("` ("` 
M("` ("` ("H-"B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ+PT*
M#0HO+R!43T1/.B!O<'1I;VX <W5B+6=R;W5P<RP <VQI9VAT;'D :6YD96YT
M960 :6X :&5L<"!P<FEN=`T*#0IP<FEV871E(&EM<&]R="!S=&0N<W1R:6YG
M+`T*("` ("` ("` ("` ("` <W1D+F-O;G8L#0H ("` ("` ("` ("` ("!S
M=&0N<W1D87)G+`T*("` ("` ("` ("` ("` <W1D+G-T9&EO+`T*("` ("` 
M("` ("` ("` <W1D+F,N<W1D;&EB.PT*#0H-"F5N=6T 4W5P<&]R=&5D5'EP
M97,-"GL-" E.;U9A;'5E+`T*"4EN="P-" E);G1!<G)A>2P-"B\K('5I;G0 
M:7, 8V%U<VEN9R!S;VUE($1-1"!B=6<N+BX-" E526YT+`T*"55);G1!<G)A
M>2PK+PT*+RL)3&]N9RP-" E,;VYG07)R87DL#0H)54QO;F<L#0H)54QO;F=!
M<G)A>2PK+PT*"49L;V%T+`T*"49L;V%T07)R87DL#0HO*PE$;W5B;&4L#0H)
M1&]U8FQE07)R87DL*R\-" E3=')I;F<L#0H)4W1R:6YG07)R87DL#0I]#0H-
M"G!R:79A=&4 =&5M<&QA=&4 9V5T4U0 *%0I#0I[#0H)4W5P<&]R=&5D5'EP
M97, 9V5T4U0 *"D-" E[#0H)"6EF='EP92`H5"`Z($YO5F%L=64I("` ("` 
M("![(')E='5R;B!3=7!P;W)T9614>7!E<RY.;U9A;'5E.R!]#0H)"65L<V4 
M:69T>7!E("A4(#H :6YT*2` ("` ("![(')E='5R;B!3=7!P;W)T9614>7!E
M<RY);G0[('T-" D)96QS92!I9G1Y<&4 *%0 .B!I;G1;72D ("` ('L <F5T
M=7)N(%-U<'!O<G1E9%1Y<&5S+DEN=$%R<F%Y.R!]#0HO*R!U:6YT(&ES(&-A
M=7-I;F< <V]M92!$340 8G5G+BXN#0H)"65L<V4 :69T>7!E("A4(#H =6EN
M="D ("` ("` >R!R971U<FX 4W5P<&]R=&5D5'EP97,N54EN=#L ?0T*"0EE
M;'-E(&EF='EP92`H5"`Z('5I;G1;72D ("` ('L <F5T=7)N(%-U<'!O<G1E
M9%1Y<&5S+E5);G1!<G)A>3L ?2LO#0HO*PD)96QS92!I9G1Y<&4 *%0 .B!L
M;VYG*2` ("` ("![(')E='5R;B!3=7!P;W)T9614>7!E<RY,;VYG.R!]#0H)
M"65L<V4 :69T>7!E("A4(#H ;&]N9UM=*2` ("` >R!R971U<FX 4W5P<&]R
M=&5D5'EP97,N3&]N9T%R<F%Y.R!]#0H)"65L<V4 :69T>7!E("A4(#H =6QO
M;F<I("` ("` ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+E5,;VYG.R!]#0H)
M"65L<V4 :69T>7!E("A4(#H =6QO;F=;72D ("` ('L <F5T=7)N(%-U<'!O
M<G1E9%1Y<&5S+E5,;VYG07)R87D[('TK+PT*"0EE;'-E(&EF='EP92`H5"`Z
M(&9L;V%T*2` ("` >R!R971U<FX 4W5P<&]R=&5D5'EP97,N1FQO870[('T-
M" D)96QS92!I9G1Y<&4 *%0 .B!F;&]A=%M=*2` ('L <F5T=7)N(%-U<'!O
M<G1E9%1Y<&5S+D9L;V%T07)R87D[('T-"B\K"0EE;'-E(&EF='EP92`H5"`Z
M(&1O=6)L92D ("` ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+D1O=6)L93L 
M?0T*"0EE;'-E(&EF='EP92`H5"`Z(&1O=6)L95M=*2` ('L <F5T=7)N(%-U
M<'!O<G1E9%1Y<&5S+D1O=6)L94%R<F%Y.R!]*R\-" D)96QS92!I9G1Y<&4 
M*%0 .B!C:&%R6UTI("` ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+E-T<FEN
M9SL ?0T*"0EE;'-E(&EF='EP92`H5"`Z(&-H87);75M=*2` >R!R971U<FX 
M4W5P<&]R=&5D5'EP97,N4W1R:6YG07)R87D[('T-" D)96QS92![('1H<F]W
M(&YE=R!5;E-U<'!O<G1E9%1Y<&5%<G)O<BAT>7!E:60H5"DI.R!]#0H)?0T*
M?0T*#0H-"B\J* T*("H 57-E9"!I;G1E<FYA;&QY('1O(&-A=&-H(&-L:65N
M="!C;V1E(&%T=&5M<'1I;F<-"B`J('1O('5S92!U;G-U<'!O<G1E9"!T>7!E
M<RX 1&]E<R!N;W0 <')O<&]G871E(&]U="!O9B!M;V1U;&4N#0H *B\-"G!R
M:79A=&4 8VQA<W, 56Y3=7!P;W)T9614>7!E17)R;W( .B!%<G)O< T*>PT*
M"51Y<&5);F9O('1Y<&4[#0H-" ET:&ES("A4>7!E26YF;R!T:2D-" E[#0H)
M"71Y<&4 /2!T:3L-" D)<W5P97(H;G5L;"D[#0H)?0T*?0T*#0H-"B\J* T*
M("H 17)R;W)S('=I=&  ;W!T<&%R<V4 ;6]D=6QE('5S86=E+B!0<F]P;V=A
M=&5S('1O(&-L:65N="!C;V1E+ T*("HO#0IC;&%S<R!/<'1087)S945R<F]R
M(#H 17)R;W(-"GL-" ET:&ES("AC:&%R6UT ;7-G*2` >R!S=7!E<BAM<V<I
M.R!]#0I]#0H-" T*+RHJ#0H *B!%<G)O<G, =VET:"!C;VUM86YD+6QI;F4 
M;W!T:6]N<RX 0V%U<V5S(&UE<W-A9V4 =&\ 8F4 <')I;G1E9`T*("H 86YD
M('!R;V=R86T 97AI=&5D+B` 1&]E<R!N;W0 <')O<&]G871E(&]U="!O9B!M
M;V1U;&4N#0H *B\-"G!R:79A=&4 8VQA<W, 3W!T:6]N17)R;W( .B!%<G)O
M< T*>PT*"71H:7, *&-H87);72!M<V<I("![('-U<&5R*&US9RD[('T-"GT-
M" T*#0HO*BH-"B`J(%1H92!M86EN(&-L87-S(&]F('1H:7, ;6]D=6QE+B` 
M0V]N<W1R=6-T(&ET('=I=&  >6]U<B!P<F]G<F%M)W, ;F%M90T*("H 86YD
M(&]P=&EO;F%L;'D 82!U<V%G92!M97-S86=E(&%N9"!V97)S:6]N('-T<FEN
M9RX (%5S92!A9&1/<'1I;VXA#0H *B!T;R!A9&0 8V]M;6%N9"UL:6YE(&]P
M=&EO;G, >6]U('=A;G0 =&\ ;&]O:R!F;W(N#0H *B\-"F-L87-S($]P=&EO
M;E!A<G-E< T*>PT*"7!R:79A=&4 8VAA<EM=('!R;V=.86UE+"!U<V%G92P 
M=F5R.PT*"7!R:79A=&4 0F%S94]P=&EO;EM=(&9I;F1/<'1I;VYS.PT*"7!R
M:79A=&4 3W!T:6]N<R!D969A=6QT5F%L=65/<'1I;VYS.PT*#0H)=&AI<R`H
M8VAA<EM=('!R;V=.86UE+"!C:&%R6UT =7-A9V4 /2!N=6QL+"!C:&%R6UT 
M=F5R(#T ;G5L;"D-" EI;B![#0H)"6%S<V5R="`H<')O9TYA;64N;&5N9W1H
M*3L-" E]#0H)8F]D>2![#0H)"71H:7,N<')O9TYA;64 /2!P<F]G3F%M93L-
M" D)=&AI<RYU<V%G92`]('5S86=E.PT*"0ET:&ES+G9E<B`]('9E<CL-" D)
M861D3W!T:6]N(2 I*")H(BP (FAE;'`B+"`B4VAO=R!T:&ES(&AE;'` ;65S
M<V%G92!A;F0 97AI="XB*3L-" D):68 *'9E<BYL96YG=& I#0H)"0EA9&1/
M<'1I;VXA*"DH;G5L;"P (G9E<G-I;VXB+"`B4VAO=R!P<F]G<F%M)W, =F5R
M<VEO;B!N=6UB97( 86YD(&5X:70N(BD[#0H)?0T*#0H)+RHJ#0H)("H 57-E
M('=I=&AO=70 82!T>7!E(&9O<B!A(&YO+79A;'5E+W1O9V=L92!O<'1I;VX[
M(&]R('5S92!W:71H(&]N92!O9B!T:&4-" D *B!S=7!P;W)T960 ='EP97, 
M=&\ <F5T<FEE=F4 =&AE(&]P=&EO;B=S('9A;'5E(&%S('1H870 1"UT>7!E
M+B` 3VYE(&]F#0H)("H <VAO<G1.86UE(&]R(&QO;F=.86UE(&UU<W0 8F4 
M<W!E8VEF:65D+"!O<B!B;W1H+B` :&5L<"!I<R!T:&4 :&5L<"!M97-S86=E
M#0H)("H 9F]R('1H92!O<'1I;VXL('!R:6YT960 =VAE;B!T:&4 <')O9W)A
M;2=S(&AE;'` :7, <')I;G1E9"X (&UE=&%687( :7,-" D *B!A(&1E<V-I
M<'1I=F4 ;F%M92!F;W( =&AE(&]P=&EO;B=S('9A;'5E('5S960 :6X <')I
M;G1I;F< ;W!T:6]N<R!W:71H('9A;'5E<RX-" D *B!4:&4 =F%R87)G<R!I
M<R!T;R!A;&QO=R`G5"!D969A=6QT5F%L=64G(&%N9"`G8F]O;"!M86YD871O
M<GDG('!A<F%M971E<G,N#0H)("H 9&5F875L=%9A;'5E(&ES('1O('-E="!A
M(&1E9F%U;'0 =F%L=64 9F]R(&]P=&EO;G, =VET:"!V86QU97, 86YD(&UA
M:V4 =&AA=`T*"2`J(&]P=&EO;B!A;'=A>7, 9F]U;F0 =VET:"!T:&%T('9A
M;'5E(&)Y(&1E9F%U;'0N("!M86YD871O<GD <W!E8VEF:65S('=H971H97(-
M" D *B!T:&4 ;W!T:6]N(&UU<W0 8F4 9VEV96X ;VX =&AE(&-O;6UA;F0M
M;&EN92X ($EF(&)O=&  9&5F875L=%9A;'5E(&%N9`T*"2`J(&%N9"!M86YD
M871O<GD 87)E(&=I=F5N+"!M86YD871O<GD =VEL;"!H879E(&YO(&5F9F5C
M="X ($EF(&1E9F%U;'1686QU92!I<PT*"2`J(&YU;&PL(&ET(&UE86YS(&YO
M(&1E9F%U;'0 =F%L=64N("!D969A=6QT5F%L=64 ;75S="!B92!N=6QL(&9O
M<B!N;RUV86QU90T*"2`J(&]P=&EO;G, =&AA="!N965D('1O('-P96-I9FEY
M(&UA;F1A=&]R>2X-" D *B\-" ET96UP;&%T92!A9&1/<'1I;VX *%0 /2!.
M;U9A;'5E*0T*"7L-" EV;VED(&%D9$]P=&EO;B`H8VAA<EM=('-H;W)T3F%M
M92P 8VAA<EM=(&QO;F=.86UE(#T ;G5L;"P 8VAA<EM=(&AE;'` /2!N=6QL
M+"!C:&%R6UT ;65T859A<B`](&YU;&PL("XN+BD-" EI;B![#0H)"6%S<V5R
M="`H<VAO<G1.86UE+FQE;F=T:"!\?"!L;VYG3F%M92YL96YG=& I.PT*"0EA
M<W-E<G0 *%]A<F=U;65N=',N;&5N9W1H(#P](#(I.PT*"7T-" EB;V1Y('L-
M" D)9&5B=6< =W)I=&5F;&XH(B5S+F%D9$]P=&EO;B I(BP =&AI<RD[#0H-
M" D)9F]R96%C:"`H0F%S94]P=&EO;B!O.R!F:6YD3W!T:6]N<RD >PT*"0D)
M:68 *'-H;W)T3F%M92YL96YG=&  )B8 <VAO<G1.86UE(#T](&\N<VAO<G1.
M86UE*0T*"0D)"71H<F]W(&YE=R!/<'1087)S945R<F]R*")C;VYF;&EC=&EN
M9R!O<'1I;VXZ("TB('X <VAO<G1.86UE*3L-" D)"6EF("AL;VYG3F%M92YL
M96YG=&  )B8 ;&]N9TYA;64 /3T ;RYL;VYG3F%M92D-" D)"0ET:')O=R!N
M97< 3W!T4&%R<V5%<G)O<B B8V]N9FQI8W1I;F< ;W!T:6]N.B`M+2( ?B!L
M;VYG3F%M92D[#0H)"7T-" T*"0E/<'1I;VXA*%0I(&]P=&EO;B`](&YE=R!/
M<'1I;VXA*%0I*'-H;W)T3F%M92P ;&]N9TYA;64L(&AE;'`L(&UE=&%687(I
M.PT*#0H)"2\O(&AA;F1L92!V87)A<F=S('=H:6-H('-H;W5L9"!B93H 5"!D
M969A=6QT5F%L=64L(&)O;VP ;6%N9&%T;W)Y#0H)"6EF='EP92`H5"`Z($YO
M5F%L=64I('L-" D)"6EF("A?87)G=6UE;G1S+FQE;F=T:"`^(#$I('L-" D)
M"0DO+R!N965D960 =&\ 861V86YC92!?87)G<'1R(&)E8V%U<V4 ;6%N9&%T
M;W)Y(&ES(&YE>'0 =F%R87)G#0H)"0D)='EP96]F*&YU;&PI(&EG;F]R92`]
M('9A7V%R9R$H='EP96]F*&YU;&PI*2A?87)G<'1R*3L-" D)"0EI9B`H7V%R
M9W5M96YT<ULP72`A/2!T>7!E:60H='EP96]F*&YU;&PI*2!\?"!I9VYO<F4 
M(3T ;G5L;"D-" D)"0D)=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H9F]R;6%T
M*"(E<R!O<'1I;VX :&%S(&YO('9A;'5E+"!D969A=6QT('9A;'5E(&UU<W0 
M8F4 ;G5L;"!W:&5N('-P96-I9FEY:6YG(&UA;F1A=&]R>2(L(&]P=&EO;BDI
M.PT*"0D)?0T*"0D)96QS92!I9B`H7V%R9W5M96YT<RYL96YG=& I#0H)"0D)
M=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H9F]R;6%T*"(E<R!O<'1I;VX :&%S
M(&YO('9A;'5E+"!S;R!N;R!D969A=6QT('9A;'5E(&-A;B!B92!S<&5C:69I
M960B+"!O<'1I;VXI*3L-" D)?0T*"0EE;'-E('L-" D)"6EF("A?87)G=6UE
M;G1S+FQE;F=T:"D >PT*"0D)"6EF("A?87)G=6UE;G1S6S!=("$]('1Y<&5I
M9"AT>7!E;V8H;G5L;"DI*2![#0H)"0D)"6EF("A?87)G=6UE;G1S6S!=("$]
M('1Y<&5I9"A4*2D-" D)"0D)"71H<F]W(&YE=R!/<'1087)S945R<F]R*&9O
M<FUA=" B)7, ;W!T:6]N)W, 9&5F875L="!V86QU92!N;W0 ='EP92`E<RP 
M:7, ='EP92`E<R(L(&]P=&EO;BP ='EP96ED*%0I+"!?87)G=6UE;G1S6S!=
M*2D[#0H)"0D)"6]P=&EO;BYV86QU92`]('9A7V%R9R$H5"DH7V%R9W!T<BD[
M#0H)"0D)"6EF("AO<'1I;VXN<VAO<G1.86UE+FQE;F=T:"D-" D)"0D)"61E
M9F%U;'1686QU94]P=&EO;G-;;W!T:6]N+G-H;W)T3F%M95T /2!O<'1I;VX[
M#0H)"0D)"6EF("AO<'1I;VXN;&]N9TYA;64N;&5N9W1H*0T*"0D)"0D)9&5F
M875L=%9A;'5E3W!T:6]N<UMO<'1I;VXN;&]N9TYA;65=(#T ;W!T:6]N.PT*
M"0D)"0DO+V1E8G5G('=R:71E9FQN*")<=&1E9F%U;'0 =F%L=64 /2`E<R(L
M(&]P=&EO;BYV86QU92D[#0H)"0D)?0T*"0D)"65L<V4 :68 *%]A<F=U;65N
M=',N;&5N9W1H(#X ,2D >PT*"0D)"0DO+R!N965D960 =&\ 861V86YC92!?
M87)G<'1R(&EN8V%S92!M86YD871O<GD :7, ;F5X="!V87)A<F<-" D)"0D)
M='EP96]F*&YU;&PI(&EG;F]R92`]('9A7V%R9R$H='EP96]F*&YU;&PI*2A?
M87)G<'1R*3L-" D)"0E]#0H)"0E]#0H)"7T-" D):68 *%]A<F=U;65N=',N
M;&5N9W1H(#X ,2D >PT*"0D):68 *%]A<F=U;65N='-;,5T (3T ='EP96ED
M*&)O;VPI*0T*"0D)"71H<F]W(&YE=R!/<'1087)S945R<F]R*&9O<FUA=" B
M)7, ;W!T:6]N(&UA;F1A=&]R>2!M=7-T(&)E('1Y<&4 )7,B+"!O<'1I;VXL
M('1Y<&5I9"AB;V]L*2DI.PT*"0D);W!T:6]N+FUA;F1A=&]R>2`]('9A7V%R
M9R$H8F]O;"DH7V%R9W!T<BD[#0H)"0ED96)U9R!W<FET969L;B B7'1M86YD
M871O<GD /2`E<R(L(&]P=&EO;BYM86YD871O<GDI.PT*"0E]#0H-" D)9FEN
M9$]P=&EO;G, ?CT ;W!T:6]N.PT*#0H)"61E8G5G('=R:71E9FQN*")<='-U
M8V-E<W-F=6QL>2!A9&1E9"`E<R(L(&]P=&EO;BD[#0H)?2!]#0H-" DO*BH-
M" D *B!087)S92!C;VUM86YD+6QI;F4 87)G=6UE;G1S+B!A<F=S6S!=(&ES
M(&%S<W5M960 =&\ 8F4 =&AE('!R;V=R86TM;F%M90T*"2`J(&%N9"!I<R!S
M:VEP<&5D+B` 0VAE8VMS(&%R9W, ;65E=', =&AE('-P96-I9FEE9"!O<'1I
M;VYS+B` 87)G<R!I<R!R97-E=`T*"2`J('1O(&)E(&%N(&%R<F%Y(&]F(&%L
M;"!N;VXM;W!T:6]N(&%R9W5M96YT<R`H=&AO<V4 =&AA="!D;R!N;W0 <W1A
M<G0 =VET:`T*"2`J("<M)R!A;F0 9&\ ;F]T(&9O;&QO=R!A('9A;'5E+71A
M:VEN9R!O<'1I;VXI+B` 4F5T=7)N<R!A;B!/<'1I;VYS('=H:6-H#0H)("H 
M:7, =7-E9"!T:'5S('1O(&-H96-K(&9O<B!F;W5N9"!O<'1I;VYS.B`H(F]P
M=&YA;64B(&EN(&]P=&EO;G,I.R!A;F0-" D *B!U<V5D('1H=7, =&\ <F5T
M<FEE=F4 ;W!T:6]N('9A;'5E<SH ;W!T:6]N<ULB;W!T;F%M92)=+F=E=%9A
M;'5E(2A4*2X-" D *B\-" E/<'1I;VYS('!A<G-E("AI;F]U="!C:&%R6UU;
M72!A<F=S*0T*"6EN('L-" D)87-S97)T("AA<F=S+FQE;F=T:"D[#0H)?0T*
M"6)O9'D >PT*"0ED96)U9R!W<FET969L;B B)7,N<&%R<V4H87)G<RYL96YG
M=& ])60I(BP =&AI<RP 87)G<RYL96YG=& I.PT*#0H)"4]P=&EO;G, 9F]U
M;F1/<'1I;VYS.PT*"0DO+R!C;W!Y(&1E9F%U;'1686QU94]P=&EO;G, :6YT
M;R!F;W5N9$]P=&EO;G, <V\ =&AE>2=R92!F;W5N9"!B>2!D969A=6QT#0H)
M"69O<F5A8V  *&-H87);72!O<'1S=')I;F<L($)A<V5/<'1I;VX ;SL 9&5F
M875L=%9A;'5E3W!T:6]N<RD-" D)"69O=6YD3W!T:6]N<UMO<'1S=')I;F==
M(#T ;SL-" D)8VAA<EM=6T)A<V5/<'1I;VY=(&]P='-686QS.PT*"0EC:&%R
M6UU;72!L969T;W9E<D%R9W,[#0H-" D)=')Y('L-" D)+R\ 1FEN9"!A<F=S
M('1H870 87)E(&]P=&EO;G,L(&%N9"!G970 =&AE:7( =F%L=64 <W1R:6YG
M<R!I9B!T:&5Y(')E<75I<F4 =&AE;2X-" D)+R\ 268 :70G<R!N;W0 86X 
M;W!T:6]N+"!A9&0 :70 =&\ ;&5F=&]V97)!<F=S+ T*"0DO+R!.3U1%.B!A
M<F=S6S!=(&ES('-K:7!P960 87, :70G<R!A<W-U;65D('1O(&)E('!R;V=R
M86T ;F%M90T*"0EF;W( *'-I>F5?="!I(#T ,3L :2`\(&%R9W,N;&5N9W1H
M.R!I*RLI#0H)"7L)8VAA<EM=(&$ /2!A<F=S6VE=.PT*#0H)"0EI9B`H85LP
M72`]/2`G+2< )B8 82YL96YG=&  /B`Q*2![#0H)"0D)8F]O;"!F;W5N9#L-
M" D)"0EI9B`H85LQ72`]/2`G+2< )B8 82YL96YG=&  /B`R*2![#0H)"0D)
M"2\O(&ET)W, 82!L;VYG(&]P=&EO; T*"0D)"0ED96)U9R!W<FET969L;B B
M7'1P<F]C97-S:6YG(&QO;F<M;W!T:6]N("5S(BP 82D[#0H)"0D)"69O<F5A
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
M*2![#0H)"0D)"0D)"2\O(&YO+79A;'5E(&]P=&EO;B!D:61N)W0 ;6%T8V L
M(&EE.B`M;U=23TY'#0H)"0D)"0D)"69O=6YD(#T 9F%L<V4[#0H)"0D)"0D)
M"6)R96%K.PT*"0D)"0D)"7T-" D)"0D)"0DO+R!E;'-E(&]P=&EO;B!R97%U
M:7)E<R!N;R!V86QU92!A;F0 ;V$ :7, ;G5L;`T*"0D)"0D)"6]P='-686QS
M6V]=(#T ;W8[#0H)"0D)"0D)8G)E86L[("`O+R!F;W5N9"!S;R!S:VEP('1H
M92!R97-T(&]F(&]P=&EO;G, =V4G<F4 ;&]O:VEN9R!F;W(-" D)"0E]"7T)
M?0T*"0D)"6EF(" A9F]U;F0I#0H)"0D)"71H<F]W(&YE=R!/<'1I;VY%<G)O
M<B B;F\ <W5C:"!O<'1I;VXZ("( ?B!A*3L-" D)"7T-" D)"65L<V4 >PT*
M"0D)"61E8G5G('=R:71E9FQN*")<=&QE9G0M;W9E<B!A<F=U;65N="`B+"!A
M*3L-" D)"0EL969T;W9E<D%R9W, ?CT 83L-" D)"7T-" D)?0T*#0H)"2\O
M($-H96-K('1H92!F;W5N9"!O<'1I;VYS(&%N9"!P87)S92!A;F0 8VAE8VL 
M=&AE:7( 9F]U;F0 =F%L=65S#0H)"69O<F5A8V  *$)A<V5/<'1I;VX ;RP 
M8VAA<EM=('8[(&]P='-686QS*0T*"0E[#0H)"0ED96)U9R!W<FET969L;B B
M7'1F;W5N9"!O<'1I;VX )7, =VET:"!V86QU92US=')I;F< /2!<(B5S7"(B
M+"!O+"!V*3L-" T*"0D):68 *&\N<VAO<G1.86UE+FQE;F=T:"D-" D)"0EF
M;W5N9$]P=&EO;G-;;RYS:&]R=$YA;65=(#T ;SL-" D)"6EF("AO+FQO;F=.
M86UE+FQE;F=T:"D-" D)"0EF;W5N9$]P=&EO;G-;;RYL;VYG3F%M95T /2!O
M.PT*#0H)"0ET<GD >PT*"0D)"7-W:71C:"`H;RYT>7!E*0T*"0D)"7L-" D)
M"0D)8V%S92!3=7!P;W)T9614>7!E<RY.;U9A;'5E. T*"0D)"0D)87-S97)T
M("AV(&ES(&YU;&PI.PT*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O
M<'1I;VXZ(&AA<R!N;R!V86QU92!T;R!P87)S92(L(&\I.PT*"0D)"0D)8G)E
M86L[#0H)"0D)"6-A<V4 4W5P<&]R=&5D5'EP97,N26YT. T*"0D)"0D)9&5B
M=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I;VXZ('!A<G-I;F< 7"(E<UPB(&%S
M(&EN="(L(&\L('8I.PT*"0D)"0D)*&-A<W0H3W!T:6]N(2AI;G0I*6\I+G9A
M;'5E(#T =&]);G0H=BD[#0H)"0D)"0EB<F5A:SL-" D)"0D)8V%S92!3=7!P
M;W)T9614>7!E<RY);G1!<G)A>3H-" D)"0D)"61E8G5G('=R:71E9FQN*")<
M=%QT)7, ;W!T:6]N.B!P87)S:6YG(%PB)7-<(B!A<R!I;G1;72(L(&\L('8I
M.PT*"0D)"0D)*&-A<W0H3W!T:6]N(2AI;G1;72DI;RDN=F%L=64 /2!P87)S
M94%R<F%Y(2AI;G0I*'8L("9T;TEN="D[#0H)"0D)"0EB<F5A:SL-"B\K"0D)
M"0EC87-E(%-U<'!O<G1E9%1Y<&5S+E5);G0Z#0H)"0D)"0ED96)U9R!W<FET
M969L;B B7'1<="5S(&]P=&EO;CH <&%R<VEN9R!<(B5S7"( 87, =6EN="(L
M(&\L('8I.PT*"0D)"0D)*&-A<W0H3W!T:6]N(2AU:6YT*2EO*2YV86QU92`]
M('1O56EN="AV*3L-" D)"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U<'!O<G1E
M9%1Y<&5S+E5);G1!<G)A>3H-" D)"0D)"61E8G5G('=R:71E9FQN*")<=%QT
M)7, ;W!T:6]N.B!P87)S:6YG(%PB)7-<(B!A<R!U:6YT6UTB+"!O+"!V*3L-
M" D)"0D)"2AC87-T*$]P=&EO;B$H=6EN=%M=*2EO*2YV86QU92`]('!A<G-E
M07)R87DA*'5I;G0I*'8L("9T;U5I;G0I.PT*"0D)"0D)8G)E86L[*R\-"B\K
M"0D)"0EC87-E(%-U<'!O<G1E9%1Y<&5S+DQO;F<Z#0H)"0D)"0ED96)U9R!W
M<FET969L;B B7'1<="5S(&]P=&EO;CH <&%R<VEN9R!<(B5S7"( 87, ;&]N
M9R(L(&\L('8I.PT*"0D)"0D)*&-A<W0H3W!T:6]N(2AL;VYG*2EO*2YV86QU
M92`]('1O3&]N9RAV*3L-" D)"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U<'!O
M<G1E9%1Y<&5S+DQO;F=!<G)A>3H-" D)"0D)"61E8G5G('=R:71E9FQN*")<
M=%QT)7, ;W!T:6]N.B!P87)S:6YG(%PB)7-<(B!A<R!L;VYG6UTB+"!O+"!V
M*3L-" D)"0D)"2AC87-T*$]P=&EO;B$H;&]N9UM=*2EO*2YV86QU92`]('!A
M<G-E07)R87DA*&QO;F<I*'8L("9T;TQO;F<I.PT*"0D)"0D)8G)E86L[#0H)
M"0D)"6-A<V4 4W5P<&]R=&5D5'EP97,N54QO;F<Z#0H)"0D)"0ED96)U9R!W
M<FET969L;B B7'1<="5S(&]P=&EO;CH <&%R<VEN9R!<(B5S7"( 87, =6QO
M;F<B+"!O+"!V*3L-" D)"0D)"2AC87-T*$]P=&EO;B$H=6QO;F<I*6\I+G9A
M;'5E(#T =&]5;&]N9RAV*3L-" D)"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U
M<'!O<G1E9%1Y<&5S+E5,;VYG07)R87DZ#0H)"0D)"0ED96)U9R!W<FET969L
M;B B7'1<="5S(&]P=&EO;CH <&%R<VEN9R!<(B5S7"( 87, =6QO;F=;72(L
M(&\L('8I.PT*"0D)"0D)*&-A<W0H3W!T:6]N(2AU;&]N9UM=*2EO*2YV86QU
M92`]('!A<G-E07)R87DA*'5L;VYG*2AV+"`F=&]5;&]N9RD[#0H)"0D)"0EB
M<F5A:SLK+PT*"0D)"0EC87-E(%-U<'!O<G1E9%1Y<&5S+D9L;V%T. T*"0D)
M"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I;VXZ('!A<G-I;F< 7"(E
M<UPB(&%S(&9L;V%T(BP ;RP =BD[#0H)"0D)"0DH8V%S="A/<'1I;VXA*&9L
M;V%T*2EO*2YV86QU92`]('1O1FQO870H=BD[#0H)"0D)"0EB<F5A:SL-" D)
M"0D)8V%S92!3=7!P;W)T9614>7!E<RY&;&]A=$%R<F%Y. T*"0D)"0D)9&5B
M=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I;VXZ('!A<G-I;F< 7"(E<UPB(&%S
M(&9L;V%T6UTB+"!O+"!V*3L-" D)"0D)"2AC87-T*$]P=&EO;B$H9FQO871;
M72DI;RDN=F%L=64 /2!P87)S94%R<F%Y(2AF;&]A="DH=BP )G1O1FQO870I
M.PT*"0D)"0D)8G)E86L[#0HO*PD)"0D)8V%S92!3=7!P;W)T9614>7!E<RY$
M;W5B;&4Z#0H)"0D)"0ED96)U9R!W<FET969L;B B7'1<="5S(&]P=&EO;CH 
M<&%R<VEN9R!<(B5S7"( 87, 9&]U8FQE(BP ;RP =BD[#0H)"0D)"0DH8V%S
M="A/<'1I;VXA*&1O=6)L92DI;RDN=F%L=64 /2!T;T1O=6)L92AV*3L-" D)
M"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U<'!O<G1E9%1Y<&5S+D1O=6)L94%R
M<F%Y. T*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I;VXZ('!A
M<G-I;F< 7"(E<UPB(&%S(&1O=6)L95M=(BP ;RP =BD[#0H)"0D)"0DH8V%S
M="A/<'1I;VXA*&1O=6)L95M=*2EO*2YV86QU92`]('!A<G-E07)R87DA*&1O
M=6)L92DH=BP )G1O1&]U8FQE*3L-" D)"0D)"6)R96%K.RLO#0H)"0D)"6-A
M<V4 4W5P<&]R=&5D5'EP97,N4W1R:6YG. T*"0D)"0D)9&5B=6< =W)I=&5F
M;&XH(EQT7'0E<R!O<'1I;VXZ('!A<G-I;F< 7"(E<UPB(&%S(&-H87);72(L
M(&\L('8I.PT*"0D)"0D)*&-A<W0H3W!T:6]N(2AC:&%R6UTI*6\I+G9A;'5E
M(#T =CL-" D)"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U<'!O<G1E9%1Y<&5S
M+E-T<FEN9T%R<F%Y. T*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O
M<'1I;VXZ('!A<G-I;F< 7"(E<UPB(&%S(&-H87);75M=(BP ;RP =BD[#0H)
M"0D)"0DH8V%S="A/<'1I;VXA*&-H87);75M=*2EO*2YV86QU92`]('!A<G-E
M07)R87DA*&-H87);72DH=BP 9G5N8W1I;VX 8VAA<EM=("AC:&%R6UT =G,I
M('MR971U<FX =G,[?2D[#0H)"0D)"0EB<F5A:SL-" D)"0E]#0H)"0E]#0H)
M"0EC871C:"`H17)R;W( 92D-" D)"0ET:')O=R!N97< 3W!T:6]N17)R;W(H
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
M;G-;(F]P=&EO;B)=+F=E=%9A;'5E(2A4*3L-"B`J+PT*='EP961E9B!"87-E
M3W!T:6]N6V-H87);75T 3W!T:6]N<SL-" T*#0HO*BH-"B`J($$ ='EP92!T
M:&%T(&UE86YS(&%N(&]P=&EO;B!D;V5S(&YO="!H879E(&$ =F%L=64N#0H 
M*B\-"G!R:79A=&4 8VQA<W, 3F]686QU92![('T-" T*#0HO*BH-"B`J($EM
M<&QE;65N=', ;65M8F5R<R!C;VUM;VX =&\ 86QL(&]P=&EO;G, 86YD('!R
M;W9I9&5S('1E;7!L871E(&9O< T*("H <F5T<FEE=FEN9R!O<'1I;VX =F%L
M=65S(&%S('1H92!C;W)R96-T('1Y<&4N#0H *B\-"G!R:79A=&4 86)S=')A
M8W0 8VQA<W, 0F%S94]P=&EO; T*>PT*"6-H87);72!S:&]R=$YA;64L(&QO
M;F=.86UE.PT*"6-H87);72!H96QP+"!M971A5F%R.PT*"6)O;VP ;6%N9&%T
M;W)Y.PT*"5-U<'!O<G1E9%1Y<&5S('1Y<&4[#0H)<')I=F%T92!4>7!E26YF
M;R!?='EP93L-" T*"71H:7, *%-U<'!O<G1E9%1Y<&5S('0L(%1Y<&5);F9O
M('1I+"!C:&%R6UT <TYA;64L(&-H87);72!L3F%M92P 8VAA<EM=(& L(&-H
M87);72!M5F%R*0T*"6EN('L-" D)87-S97)T("AS3F%M92YL96YG=&  ?'P 
M;$YA;64N;&5N9W1H*3L-" E]#0H)8F]D>2![#0H)"71Y<&4 /2!T.PT*"0E?
M='EP92`]('1I.PT*"0ES:&]R=$YA;64 /2!S3F%M93L-" D);&]N9TYA;64 
M/2!L3F%M93L-" D):&5L<"`](& [#0H)"6UE=&%687( /2!M5F%R.PT*"0ED
M96)U9R!W<FET969L;B B)7,N=&AI<R I(&1O;F4 +2T 7W1Y<&4 /2`E<R(L
M('1H:7,L(%]T>7!E*3L-" E]#0H-" DO*BH-" D *B!G971686QU92$H5"DH
M*2`M+2!2971U<FYS('1H:7, ;W!T:6]N)W, =F%L=64 87, =&AE(&-O<G)E
M8W0 ='EP92X-" D *B` ("` ("` ("` ("` ("` ("!)9B!T:&4 =W)O;F< 
M='EP92!I<R!A='1E;7!T960L($]P=%!A<G-E17)R;W( :7, =&AR;W=N+ T*
M"2`J+PT*"71E;7!L871E(&=E=%9A;'5E("A4*0T*"7L-" E4(&=E=%9A;'5E
M(" I#0H)>PT*"0EI9B`H='EP92`]/2!3=7!P;W)T9614>7!E<RY.;U9A;'5E
M*0T*"0D)=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H9F]R;6%T*"(E<R!O<'1I
M;VX 9&]E<R!N;W0 :&%V92!A('9A;'5E('1O(')E=')I979E(BP =&AI<RDI
M.PT*#0H)"71R>2![#0H)"0EI9B`H9V5T4U0A*%0I("$]('1Y<&4I#0H)"0D)
M=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H9F]R;6%T*"(E<R!O<'1I;VX ;75S
M="!B92!R971R:65V960 87, ='EP92`E<RP ;F]T('1Y<&4 )7,B+"!T:&ES
M+"!?='EP92P ='EP96ED*%0I*2D[#0H)"7T-" D)8V%T8V  *%5N4W5P<&]R
M=&5D5'EP945R<F]R('5S=&4I#0H)"0ET:')O=R!N97< 3W!T4&%R<V5%<G)O
M<BAF;W)M870H(B5S(&]P=&EO;B!C86X ;F]T(&)E(')E=')I979E9"!A<R!U
M;G-U<'!O<G1E9"!T>7!E("5S(BP =&AI<RP =7-T92YT>7!E*2D[#0H-" D)
M<F5T=7)N("AC87-T*$]P=&EO;B$H5"DI=&AI<RDN=F%L=64[#0H)?2!]#0H-
M" EC:&%R6UT =&]3=')I;F< *"D-" E[#0H)"7)E='5R;B!O<'14;U-T<FEN
M9RAS:&]R=$YA;64L(&QO;F=.86UE*3L-" E]#0I]#0H-" T*<')I=F%T92!C
M:&%R6UT ;W!T5&]3=')I;F< *&-H87);72!S:&]R=$YA;64L(&-H87);72!L
M;VYG3F%M92D-"GL-" ER971U<FX *'-H;W)T3F%M92YL96YG=&  /R`B+2)^
M<VAO<G1.86UE(#H (B(I('X *"AS:&]R=$YA;64N;&5N9W1H("8F(&QO;F=.
M86UE+FQE;F=T:"D /R`B("\ (B`Z("(B*2!^("AL;VYG3F%M92YL96YG=&  
M/R`B+2TB?FQO;F=.86UE(#H (B(I.PT*?0T*#0H-"B\J* T*("H 02!C;VUM
M86YD+6QI;F4 ;W!T:6]N+B` 4&%R86UE=&5R:7IE9"!B>2!A('1Y<&4 =&\ 
M<W!E8VEF:7D 82!V86QU90T*("H :7, 97AP96-T960 86YD('=H870 ='EP
M92P ;W( 3F]686QU92!T;R!M96%N('1H92!O<'1I;VX 9&]E<R!N;W0-"B`J
M(&5X<&5C="!A('9A;'5E+ T*("HO#0IP<FEV871E(&-L87-S($]P=&EO;B`H
M5"D .B!"87-E3W!T:6]N#0I[#0H):69T>7!E("A4(#H 3F]686QU92D >WT-
M" EE;'-E('L 5"!V86QU93L ?0T*#0H)=&AI<R`H8VAA<EM=('-H;W)T3F%M
M92P 8VAA<EM=(&QO;F=.86UE+"!C:&%R6UT :&5L<"P 8VAA<EM=(&UE=&%6
M87(I#0H)>PT*"0ET<GD >PT*"0D)<W5P97(H9V5T4U0A*%0I+"!T>7!E:60H
M5"DL('-H;W)T3F%M92P ;&]N9TYA;64L(&AE;'`L(&UE=&%687(I.PT*"0E]
M#0H)"6-A=&-H("A5;E-U<'!O<G1E9%1Y<&5%<G)O<B!U<W1E*2![#0H)"0ET
M:')O=R!N97< 3W!T4&%R<V5%<G)O<BAF;W)M870H(B5S(&]P=&EO;B!C86X 
M;F]T(&)E('5N<W5P<&]R=&5D('1Y<&4 )7,B+"!O<'14;U-T<FEN9RAS:&]R
M=$YA;64L;&]N9TYA;64I+"!U<W1E+G1Y<&4I*3L-" D)?0T*"7T-"GT-" T*
M#0IU;FET=&5S=`T*>PT*"61E8G5G('=R:71E9FQN*")B96=I;B`E<R!U;FET
M=&5S="(L(%]?1DE,15]?*3L-" T*"4]P=&EO;E!A<G-E<B!O<'1I;VY087)S
M97([#0H)8VAA<EM=6UT 87)G<SL-" ES=&%T:6, 8VAA<EM=6UT <VAA8F%N
M9T1F;'0 /2!;(GIX>2(L(F]N92(L(G%W97)T>2)=.PT*#0H)=F]I9"!N97=/
M<'1I;VY087)S97( *"D-" E[#0H)"6]P=&EO;E!A<G-E<B`](&YE=R!/<'1I
M;VY087)S97(H7U]&24Q%7U];,"XN)"TR72P (EMO<'1I;VX 6W9A;'5E75TB
M+"`B,"XP(BD[#0H)"6]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*"DH(G8B+")V
M97)B;W-E(BD[#0H)"6]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&9L;V%T*2 B
M9B(L(F9O;R(L;G5L;"QN=6QL+&YU;&PL=')U92D[#0H)"6]P=&EO;E!A<G-E
M<BYA9&1/<'1I;VXA*&EN="DH(G B+")X96YO(BPB9&]E<R!T:&ES(&%N9"!T
M:&%T(BPB5$A)3D<B+#$R,RD[#0H)"6]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA
M*&-H87);72DH;G5L;"PB8F%R(BPB;6%K92!I="!H87!P96XB+")"3$]"(BPB
M9&5F875L="UV86QU92(I.PT*"0EO<'1I;VY087)S97(N861D3W!T:6]N(2AI
M;G1;72DH(F$B+")A<'!L92(L(FUA:V4 87!P;&5S875C92(L;G5L;"D[#0H)
M"6]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&-H87);75M=*2 B<V(B+")S:&%B
M86YG(BPB8FQO=R!U<"(L(DE4(BQS:&%B86YG1&9L="D[#0H)"2\O;W!T:6]N
M4&%R<V5R+F%D9$]P=&EO;B$H*2 I.PT*"0ED96)U9R!W<FET969L;B B+2TM
M(&YE=R!/<'1I;VY087)S97(G<R!H96QP("TM+2(I.PT*"0ED96)U9R!O<'1I
M;VY087)S97(N<')I;G1(96QP*"D[#0H)"61E8G5G('=R:71E9FQN*"(M+2T 
M96YD("TM+2(I.PT*"7T-" T*"6YE=T]P=&EO;E!A<G-E<B I.PT*"6%R9W, 
M/2!S<&QI=" B;7EA<'` ;&%L82`M=B`M+69O;STY.#<N-C4 +2UB87( 8F%R
M+7-T<FEN9R!H;VAO("UA,2PR+#,L-"PU("US8B!A8F,L9"QE9BQZ>GIZ>GH 
M87-D9B(I.PT*"4]P=&EO;G, ;W!T:6]N<R`](&]P=&EO;E!A<G-E<BYP87)S
M92AA<F=S*3L-" ES=&%T:6, 8VAA<EM=6UT ;&5F=&]V97( /2!;(FQA;&$B
M+")H;VAO(BPB87-D9B)=.PT*"6%S<V5R="`H87)G<R`]/2!L969T;W9E<BD[
M#0H)87-S97)T(" B=F5R8F]S92( :6X ;W!T:6]N<RD[#0H)87-S97)T(" B
M9B( :6X ;W!T:6]N<RD[#0H)87-S97)T("AO<'1I;VYS6R)F;V\B72YG9716
M86QU92$H9FQO870I(#T](#DX-RXV-68I.PT*"6%S<V5R="`H(F)A<B( :6X 
M;W!T:6]N<RD[#0H)87-S97)T("AO<'1I;VYS6R)B87(B72YG971686QU92$H
M8VAA<EM=*2`]/2`B8F%R+7-T<FEN9R(I.PT*"6%S<V5R="`H(F%P<&QE(B!I
M;B!O<'1I;VYS*3L-" ES=&%T:6, :6YT6UT 87!P;&5)02`](%LQ+#(L,RPT
M+#5=.PT*"6%S<V5R="`H;W!T:6]N<ULB82)=+F=E=%9A;'5E(2AI;G1;72D 
M/3T 87!P;&5)02D[#0H)87-S97)T(" B<V(B(&EN(&]P=&EO;G,I.PT*"7-T
M871I8R!C:&%R6UU;72!S:&%B86YG0T%!(#T 6R)A8F,B+")D(BPB968B+")Z
M>GIZ>GHB73L-" EA<W-E<G0 *&]P=&EO;G-;(G-H86)A;F<B72YG971686QU
M92$H8VAA<EM=6UTI(#T]('-H86)A;F=#04$I.PT*#0H)87)G<R`]('-P;&ET
M*")M>6%P<"`M+79E<F)O<V4 +2UA<'!L93TL(&QA;&$ :&]H;R!A<V1F("TM
M<VAA8F%N9R!O;FQY3VYE("UF+3`N.3,Q92TU(BD[#0H);W!T:6]N<R`](&]P
M=&EO;E!A<G-E<BYP87)S92AA<F=S*3L-" EA<W-E<G0 *&%R9W, /3T ;&5F
M=&]V97(I.PT*"6%S<V5R="`H(F9O;R( :6X ;W!T:6]N<RD[#0H)87-S97)T
M("AO<'1I;VYS6R)F(ETN9V5T5F%L=64A*&9L;V%T*2`]/2`M,"XY,S%E+35F
M*3L-" EA<W-E<G0 *")A(B!I;B!O<'1I;VYS*3L-" EA<W-E<G0 *&]P=&EO
M;G-;(F%P<&QE(ETN9V5T5F%L=64A*&EN=%M=*2`]/2!N=6QL*3L-" EA<W-E
M<G0 *")S:&%B86YG(B!I;B!O<'1I;VYS*3L-" ES=&%T:6, 8VAA<EM=6UT 
M<VAA8F%N9T-!03( /2!;(F]N;'E/;F4B73L-" EA<W-E<G0 *&]P=&EO;G-;
M(G-B(ETN9V5T5F%L=64A*&-H87);75M=*2`]/2!S:&%B86YG0T%!,BD[#0H-
M" EN97=/<'1I;VY087)S97(H*3L-" EA<F=S(#T <W!L:70H(FUY87!P("TM
M9F]O(#$N,B(I.PT*"6]P=&EO;G, /2!O<'1I;VY087)S97(N<&%R<V4H87)G
M<RD[#0H)87-S97)T(" B<VAA8F%N9R( :6X ;W!T:6]N<RD[#0H)87-S97)T
M("AO<'1I;VYS6R)S8B)=+F=E=%9A;'5E(2AC:&%R6UU;72D /3T <VAA8F%N
M9T1F;'0I.PT*"6%S<V5R="`H(G B(&EN(&]P=&EO;G,I.PT*"6%S<V5R="`H
M;W!T:6]N<ULB>&5N;R)=+F=E=%9A;'5E(2AI;G0I(#T](#$R,RD[#0H)87-S
M97)T(" B8F%R(B!I;B!O<'1I;VYS*3L-" EA<W-E<G0 *&]P=&EO;G-;(F)A
M<B)=+F=E=%9A;'5E(2AC:&%R6UTI(#T](")D969A=6QT+79A;'5E(BD[#0H-
M" DO+R!C:&5C:R!/<'1I;VY%<G)O<B`H=&AE<V4 8V%U<V4 <')O8V5S<R!T
M;R!E>&ET+"!S;R!C86XG="!U;F-O;6UE;G0 8GD 9&5F875L="X-" DO+R` 
M("` ("` ("` ("` ("` ("` 22!C:&5C:V5D('1H96T 86QL(&]N92!B>2!O
M;F4I#0H)+R\ ;6ES<VEN9R!V86QU97,-" DO+VYE=T]P=&EO;E!A<G-E<B I
M.PT*"2\K87)G<R`]('-P;&ET*")M>6%P<"`M+6)A<B(I.PT*"6]P=&EO;G, 
M/2!O<'1I;VY087)S97(N<&%R<V4H87)G<RD[*R\-" DO+R!N;R!S=6-H(&]P
M=&EO; T*"2\K87)G<R`]('-P;&ET*")M>6%P<"`M+6YO+7-U8V M;W!T:6]N
M(BD[#0H);W!T:6]N<R`](&]P=&EO;E!A<G-E<BYP87)S92AA<F=S*3LK+PT*
M"2\O('9A;'5E('!A<G-E(&5R<F]R#0H)+R]A<F=S(#T <W!L:70H(FUY87!P
M("TM>&5N;SUO;W!S(BD[#0H)+R]O<'1I;VYS(#T ;W!T:6]N4&%R<V5R+G!A
M<G-E*&%R9W,I.PT*"2\K87)G<R`]('-P;&ET*")M>6%P<"`M9B!O;W!S(BD[
M#0H);W!T:6]N<R`](&]P=&EO;E!A<G-E<BYP87)S92AA<F=S*3LK+PT*"2\O
M(&UI<W-I;F< ;6%N9&%T;W)Y(&]P=&EO;B`M+69O;PT*"2\K87)G<R`]('-P
M;&ET*")M>6%P<"(I.PT*"6]P=&EO;G, /2!O<'1I;VY087)S97(N<&%R<V4H
M87)G<RD[*R\-"B\K#0H)8F]O;"!F86EL<R`H=F]I9"!D96QE9V%T92`H*2!D
M9RD-" E[#0H)"6)O;VP 9F%I;&5D.PT*"0ET<GD >PT*"0D)+R]D96)U9R!W
M<FET969L;B B9F%I;', 86)O=70 =&\ 8V%L;"!D9R`E<R(L("9D9RD[#0H)
M"0ED9R I.PT*"0E]#0H)"6-A=&-H("A/<'1087)S945R<F]R(&]P92D >PT*
M"0D)9F%I;&5D(#T =')U93L-" D)"61E8G5G('=R:71E9FQN*")E>'!E8W1E
M9"!F86EL.B`E<R(L(&]P92D[#0H)"7T-" D)<F5T=7)N(&9A:6QE9#L-" E]
M#0HK+PT*"2\O(&-H96-K($]P=%!A<G-E17)R;W(-" DO+R!$340 8G5G('=I
M=&  ;F5S=&5D(&1E;&5G871E<R!T:')O=VEN9R]C871C:&EN9R!P<F5V96YT
M<R!F86EL<R I(&9R;VT =V]R:VEN9RP-" DO+R!S;R!U;G1I;"!T:&%T)W, 
M9FEX960L(&)E;&]W(&%R92!N;W0 87-S97)T*&9A:6QS*"XN+BDI('-O($D 
M8V]U;&0 =&5S="!T:&5M(&5A8V -" DO+VYE=T]P=&EO;E!A<G-E<B I.PT*
M"2\O(&-O;F9L:6-T:6YG(&]P=&EO;G,-" DO+V%S<V5R="`H9F%I;',H9&5L
M96=A=&4 =F]I9"`H*2![;W!T:6]N4&%R<V5R+F%D9$]P=&EO;B$H8VAA<EM=
M*2 B>"(I.WTI*3L +R\ 1$U$(&)U9SH =&AE($]P=%!A<G-E17)R;W( :7-N
M)W0 8V%U9VAT(&)Y(&9A:6QS#0H)+R\ ;W!T:6]N4&%R<V5R+F%D9$]P=&EO
M;B$H8VAA<EM=*2 B>"(I.PT*"2\O('5N<W5P<&]R=&5D('1Y<&4-" DO+V]P
M=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&-D;W5B;&4I*")Z(BPB>GIZ(BD[#0H)
M+R]O<'1I;VY087)S97(N861D3W!T:6]N(2A/8FIE8W0I*")O(BPB;V)J96-T
M(BD[#0H)+R\ =W)O;F< 9&5F875L=%9A;'5E('1Y<&4-" DO+V]P=&EO;E!A
M<G-E<BYA9&1/<'1I;VXA*&-H87);72DH(GHB+&YU;&PL;G5L;"QN=6QL+#8V
M-BD[#0H)+R\ =W)O;F< ;6%N9&%T;W)Y('1Y<&4-" DO+V]P=&EO;E!A<G-E
M<BYA9&1/<'1I;VXA*&EN="DH(GHB+&YU;&PL;G5L;"QN=6QL+&YU;&PL,2D[
M#0H)+R\ 3F]686QU92!C86X ;F]T(&AA=F4 9&5F875L="!V86QU90T*"2\O
M;W!T:6]N4&%R<V5R+F%D9$]P=&EO;B$H*2 B>B(L;G5L;"QN=6QL+&YU;&PL
M,3(S*3L-" DO+R!.;U9A;'5E(&1E9F%U;'1686QU92!M=7-T(#T](&YU;&P 
M=VAE;B!M86YD871O<GD-" DO+V]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*"DH
M(GHB+&YU;&PL;G5L;"QN=6QL+#$R,RQT<G5E*3L-" DO+R!W<F]N9R!G9716
M86QU92!T>7!E#0H)+R]A<F=S(#T <W!L:70H(FUY87!P("UV(&%S9&8 +2UX
M96YO/34T,S(Q('AY>B`M9C`N.3DB*3L-" DO+V]P=&EO;G, /2!O<'1I;VY0
M87)S97(N<&%R<V4H87)G<RD[#0H)+R]D;W5B;&4 =W)O;F< /2!O<'1I;VYS
M6R)X96YO(ETN9V5T5F%L=64A*&1O=6)L92D[#0H)+R\ 9V5T5F%L=64 ;VX 
M;F\ =F%L=64 ;W!T:6]N#0H)+R]I;G0 ;F]V86QU92`](&]P=&EO;G-;(G9E
M<F)O<V4B72YG971686QU92$H:6YT*3L-" DO+V%S<V5R="`H9F%I;',H9&5L
M96=A=&4 =F]I9"`H*2![(&]P=&EO;G-;(G9E<F)O<V4B72YG971686QU92$H
M8F]O;"D[('TI*3L ("\O(&-A=7-E<R!$340 8G5G($D 8V%N)W0 <F5P<F]D
M=6-E('-I;7!L97(L(&EF(&)O;VP 8B`]('-T871M96YT(&ES(&1O;F4L(&ET
M('=O<FMS+BXN#0H)+R]O<'1I;VYS6R)V97)B;W-E(ETN9V5T5F%L=64A*&)O
M;VPI.R` +R\ <VEM:6QA<B!$340 8G5G#0H-" ED96)U9R!W<FET969L;B B
M)7, =6YI='1E<W0 <W5C8V5S<R(L(%]?1DE,15]?*3L-"GT-" T*#0IV97)S
M:6]N("A/<'1087)S94UA:6XI#0I[#0H)+RHJ#0H)("H 5V]R:VEN9R!E>&%M
M<&QE('5S86=E+ T*"2`J+PT*"6EN="!M86EN("AC:&%R6UU;72!A<F=S*0T*
M"7L-" D):6YT('9E<F)O<VET>3L-" D)8VAA<EM=(&]U=&9I;&4[#0H)"6-H
M87);75M=(&9I;&5S.PT*#0H)"2\O(&-O;G-T<G5C=&]R(&%R9W, 87)E('5S
M960 :6X <')I;G1I;F< :&5L<`T*"0DO+R!O<'1I;VX +6  +R`M+6AE;'` 
M:7, 86QW87ES(&%D9&5D(&)Y(&1E9F%U;'0 86YD('5S97, <')O9W)A;2UN
M86UE(&%N9"!U<V%G90T*"0DO+R!O<'1I;VX +2UV97)S:6]N("AN;R!S:&]R
M="!N86UE*2!I<R!A9&1E9"!B>2!D969A=6QT(&EF('9E<G-I;VX :7, 9VEV
M96X-" D)+R\ ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ('!R
M;V=R86TM;F%M92` ("` ("` ("` ("` ('5S86=E("` ("` ("` ("` ("` 
M('9E<G-I;VX-" D)3W!T:6]N4&%R<V5R(&]P(#T ;F5W($]P=&EO;E!A<G-E
M<BA?7T9)3$5?7ULP+BXD+3)=+"`B6V]P=&EO;G-=("TM9FEL97,]9C$L9DX 
M6V]U=&9I;&5=(BP (C`N,B(I.PT*#0H)"2\O(&EN="P <VAO<G0 86YD(&QO
M;F<L(&AE;'`L(&UE=&%V87(L(&YO(&1E9F%U;'0L(&YO="!M86YD871O<GD-
M" D);W`N861D3W!T:6]N(2AI;G0I*")V(BP (G9E<F)O<V4B+"`B0F4 ;6]R
M92!A;F0 ;6]R92!A;F0 ;6]R92!A;F0 ;6]R92!A;F0 ;6]R92!A;F0 ;6]R
M92!A;F0 ;6]R92!V97)B;W-E+B(L("),159%3"(I.PT*"0DO+R!C;VUM82US
M97!A<F%T960 <W1R:6YG(&QI<W0L('-H;W)T(&%N9"!L;VYG+"!H96QP+"!M
M971A=F%R+"!N;R!D969A=6QT+"!M86YD871O<GD-" D);W`N861D3W!T:6]N
M(2AC:&%R6UU;72DH(F9S(BP (F9I;&5S(BP (D9I;&5S('1O('!R;V-E<W,L
M(&%N9"!M86ME('1H:7, 82!R96%L;'D ;&]N9R!H96QP('-T<FEN9R!A<R!W
M96QL('1O('1E<W0 86QI9VYI;F<N(BP (D9)3$4L1DE,12PN+BXB+"!N=6QL
M+"!T<G5E*3L-" D)+R\ 9FQO870L(&QO;F<M;VYL>2P :&5L<"P ;65T879A
M<BP 9&5F875L="P ;F]T(&UA;F1A=&]R>0T*"0EO<"YA9&1/<'1I;VXA*&9L
M;V%T*2AN=6QL+"`B=&AI;F<B+"`B1&\ :70 =VET:"!T:&ES+B(L(")&3$]!
M5"(L("TT+C(Y-V4R,68I.PT*"0DO+R!N;RUV86QU92P <VAO<G0M;VYL>2P 
M=VET:"!H96QP+"!N;R!M971A=F%R+"!N;R!D969A=6QT+"!N;W0 ;6%N9&%T
M;W)Y#0H)"6]P+F%D9$]P=&EO;B$H*2 B82(L(&YU;&PL(")5<V4 86QT97)N
M871E(&UE=&AO9"XB*3L-" T*"0DO+R!087)S92!C;VUM86YD+6QI;F4 87)G
M=6UE;G1S+"!I;F-L=61I;F< 87)G<ULP72!P<F]G<F%M+6YA;64 *&ET)W, 
M<VMI<'!E9"DN#0H)"2\O($%R9W, =VEL;"!B92!R97-E="!T;R!T:&4 <F5M
M86EN:6YG(&YO;BUO<'1I;VX 8V]M;6%N9"UL:6YE#0H)"2\O(&%R9W5M96YT
M<R!I;B!T:&4 ;W)D97( =&AE>2!A<'!E87)E9"X-" D)3W!T:6]N<R!O<'1I
M;VYS(#T ;W`N<&%R<V4H87)G<RD[#0H-" D)+R\ 0VAE8VL :68 ;W!T:6]N
M('=A<R!G:79E;B!O;B!T:&4 8V]M;6%N9"UL:6YE#0H)"2\O(&)Y('5S:6YG
M("AC:&%R6UT :6X 3W!T:6]N<RDN#0H)"2\O($EF('1H92!O<'1I;VX :&%S
M(&)O=&  <VAO<G0 86YD(&QO;F< ;F%M97,L(&5I=&AE<B!C86X 8F4 =7-E
M9"X-" D):68 *")V97)B;W-E(B!I;B!O<'1I;VYS*0T*"0D)+R\ 268 ;W!T
M:6]N('=A<R!G:79E;B!A;F0 :70 :&%S(&$ =F%L=64L#0H)"0DO+R!R971R
M:65V92!I="!B>2!I;F1E>&EN9R!/<'1I;VYS('=I=&  <VAO<G0 ;W( ;&]N
M9R!N86UE("AO<B!O;FQY(&]N92!I9B!O;FQY(&]N92D-" D)"2\O(&%N9"!D
M;R!G971686QU92$H5F%L=654>7!E*0T*"0D)=F5R8F]S:71Y(#T ;W!T:6]N
M<ULB=F5R8F]S92)=+F=E=%9A;'5E(2AI;G0I.PT*#0H)"6EF("AV97)B;W-I
M='D /B`P*0T*"0D)=W)I=&5F;&XH(DDG;&P <V%Y(&$ ;&ET=&QE+B(I.PT*
M"0EI9B`H=F5R8F]S:71Y(#X ,2D-" D)"7=R:71E9FQN*")))VQL('-A>2!A
M(&QO="!M;W)E+B(I.PT*#0H)"2\O(&%R9W, =V%S(')E<V5T(&)Y('!A<G-E
M('1O('1H92!R96UA:6YI;F< ;F]N+6]P=&EO;B!C;VUM86YD+6QI;F4 87)G
M=6UE;G1S#0H)"6EF("AA<F=S+FQE;F=T:"`]/2`Q*0T*"0D)+R\ =7-E('1H
M92!F:7)S="!N;VXM;W!T:6]N(&%R9W5M96YT#0H)"0EO=71F:6QE(#T 87)G
M<ULP73L-" D)96QS92!I9B`H87)G<RYL96YG=&  /B`Q*0T*"0D)+R\ 3W!T
M:6]N17)R;W(N97)R;W)%>&ET*")M97-S86=E(BD 8V%N(&)E('5S960 =&\ 
M<')I;G0 :&5L<"!A;F0 97AI="!P<F]C97-S.PT*"0D)+R\ =7-E9G5L('=H
M96X 8VAE8VMI;F< ;F]N+6]P=&EO;B!A<F=U;65N=',-" D)"6]P+F5R<F]R
M17AI=" B;6]R92!T:&%N(&]N92!O=71P=70 9FEL92!S<&5C:69I960B*3L-
M" T*"0DO+R!M86YD871O<GD ;W!T:6]N<R!C86X 8F4 87-S=6UE9"!T;R!B
M92!T:&5R92!A9G1E<B!P87)S92AA<F=S*0T*"0EA<W-E<G0 *")F:6QE<R( 
M:6X ;W!T:6]N<RD[#0H)"69I;&5S(#T ;W!T:6]N<ULB9FEL97,B72YG9716
M86QU92$H8VAA<EM=6UTI.PT*"0EI9B`H9FEL97,N;&5N9W1H(#T](#`I#0H)
M"0EO<"YE<G)O<D5X:70H(FYE960 =&\ <W!E8VEF:7D 870 ;&5A<W0 ;VYE
M(&EN<'5T(&9I;&4B*3L-" T*"0EI9B`H=F5R8F]S:71Y(#X ,"D-" D)>PT*
M"0D):68 *")T:&EN9R( :6X ;W!T:6]N<RD-" D)"0EW<FET969L;B B;7D 
M=&AI;F< :7,Z("(L(&]P=&EO;G-;(G1H:6YG(ETN9V5T5F%L=64A*&9L;V%T
M*2D[#0H-" D)"2\O(&YO+79A;'5E(&]P=&EO;G, 87)E('-I;7!L>2!T97-T
M960 9F]R(&)E:6YG(&EN($]P=&EO;G,-" D)"6EF(" B82( :6X ;W!T:6]N
M<RD-" D)"0EW<FET969L;B B22!W;W5L9"!P<F]C97-S(&9I;&5S('5S:6YG
M(&%L=&5R;F%T92!M971H;V0Z(BD[#0H)"0EE;'-E#0H)"0D)=W)I=&5F;&XH
M(DD =V]U;&0 <')O8V5S<R!F:6QE<R!U<VEN9R!N;W)M86P ;65T:&]D.B(I
M.PT*"0D)9F]R96%C:"`H8VAA<EM=(&8[(&9I;&5S*0T*"0D)"7=R:71E9FQN
M*")<="(L9BD[#0H)"0EW<FET969L;B B86YD(&]U='!U="!T;R`B+"!O=71F
M:6QE+FQE;F=T:"`_(&]U=&9I;&4 .B`B/'-T9&]U=#XB*3L-" D)?0T*#0H)
3"7)E='5R;B`P.PT*"7T-"GT-"F4 
`
end
May 30 2005
next sibling parent derick_eddington nospam.yashmoo.com writes:
In article <d7g5nd$3i3$1 digitaldaemon.com>, derick_eddington nospam.yashmoo.com
says...
Example command-line output of above program:

---------------------------------------------------------------

$ ./example -h
usage:  optparse [options] --files=f1,fN [outfile]

options:
-h, --help            Show this help message and exit.
--version             Show program's version number and exit.
-vLEVEL, --verbose=LEVEL
Be more and more and more and more and more and more
and more verbose.
-fsFILE,FILE,..., --files=FILE,FILE,...
Files to process, and make this a really long help
string as well to test aligning.
--thing=FLOAT         Do it with this.
-a                    Use alternate method.

Arg, forgot to : these. The help print is nicely formatted...
May 30 2005
prev sibling next sibling parent reply "Kris" <fu bar.com> writes:
Very useful. I'd like to add this to Mango, if that would be OK?

- Kris

<derick_eddington nospam.yashmoo.com> wrote in message
news:d7g5nd$3i3$1 digitaldaemon.com...
 I've made a command-line option helper similar to Python's optparse.  It

allows
 you to specify what D-type you want the option as, short name, long name,

help,
 and more.  It automatically creates a formatted help message and prints it

on
 errors.  It checks that clients' usage of the module is proper; and it

checks
 that the command-line arguments meet what was specified.  It has a

compehensive
 unittest that demonstrates more.  The source is attached.

 : /**
 :  * Example usage:
 :  */
 : int main (char[][] args)
 : {
 :     int verbosity;
 :     char[] outfile;
 :     char[][] files;
 :
 :     // Constructor parameters are used in printing help.
 :     // -h / --help is always added by default
 :     // and uses program-name and usage.
 :     // --version (no short name) is added by
 :     // default if version is given.
 :     //                                   program-name
 :     OptionParser op = new OptionParser(__FILE__[0..$-2],
 :     //                 usage                version
 :         "[options] --files=f1,fN [outfile]", "0.2");
 :
 :     // int, short and long, help, metavar,
 :     // no default, not mandatory
 :     op.addOption!(int)("v", "verbose",
 :         "Be more and more and more and more and more "
 :         "and more and more verbose.", "LEVEL");
 :     // comma-separated string list, short and long, help,
 :     // metavar, no default, mandatory
 :     op.addOption!(char[][])("fs", "files",
 :         "Files to process, and make this a really long help "
 :         "string as well to test aligning.", "FILE,FILE,...",
 :         null, true);
 :     // float, long-only, help, metavar, default, not mandatory
 :     op.addOption!(float)(null, "thing", "Do it with this.",
 :         "FLOAT", -4.297e21f);
 :     // no-value, short-only, with help, no metavar,
 :     // no default, not mandatory
 :     op.addOption!()("a", null, "Use alternate method.");
 :
 :     // Parse command-line arguments, including args[0]
 :     // program-name (it's skipped).
 :     // args will be reset to the remaining non-option
 :     // command-line arguments in the order they appeared.
 :     Options options = op.parse(args);
 :
 :     // Check if option was given on the command-line
 :     // by using (char[] in Options).
 :     // If the option has both short and long names,
 :     // either can be used.
 :     if ("verbose" in options)
 :         // If option was given and it has a value,
 :         // retrieve it by indexing Options with short
 :         // or long name (or only one if only one)
 :         // and do getValue!(T)
 :         verbosity = options["verbose"].getValue!(int);
 :
 :     if (verbosity > 0)
 :         writefln("I'll say a little.");
 :     if (verbosity > 1)
 :         writefln("I'll say a lot more.");
 :
 :     // args was reset by parse to the remaining
 :     // non-option command-line arguments
 :     if (args.length == 1)
 :         // use the first non-option argument
 :         outfile = args[0];
 :     else if (args.length > 1)
 :         // OptionError.errorExit("message") can be used to
 :         // print help and exit process;
 :         // useful when checking non-option arguments
 :         op.errorExit("more than one output file specified");
 :
 :     // mandatory options can be assumed to be
 :     // there after successful parse
 :     assert ("files" in options);
 :     files = options["files"].getValue!(char[][]);
 :     if (files.length == 0)
 :         op.errorExit("need to specifiy at least one input file");
 :
 :     if (verbosity > 0)
 :     {
 :         if ("thing" in options)
 :             writefln("my thing is: ",
 :                 options["thing"].getValue!(float));
 :
 :         // no-value options are simply tested for being in Options
 :         if ("a" in options)
 :             writefln("I would process files using alternate method:");
 :         else
 :             writefln("I would process files using normal method:");
 :         foreach (char[] f; files)
 :             writefln("\t",f);
 :         writefln("and output to ",
 :             outfile.length ? outfile : "<stdout>");
 :     }
 :
 :     return 0;
 : }

 Example command-line output of above program:

 ---------------------------------------------------------------

 $ ./example -h
 usage:  optparse [options] --files=f1,fN [outfile]

 options:
 -h, --help            Show this help message and exit.
 --version             Show program's version number and exit.
 -vLEVEL, --verbose=LEVEL
 Be more and more and more and more and more and more
 and more verbose.
 -fsFILE,FILE,..., --files=FILE,FILE,...
 Files to process, and make this a really long help
 string as well to test aligning.
 --thing=FLOAT         Do it with this.
 -a                    Use alternate method.

 ---------------------------------------------------------------

 $ ./example -v2 --files=somefile,anotherfile,nextfile --thing -4.23e-6 -a
 outputfile
 I'll say a little.
 I'll say a lot more.
 my thing is: -4.23e-06
 I would process files using alternate method:
 somefile
 anotherfile
 nextfile
 and output to outputfile

 ---------------------------------------------------------------

 $ ./example --asdf
 optparse: error: no such option: --asdf

 [help]

 ---------------------------------------------------------------

 $ ./example
 optparse: error: -fs / --files option is mandatory

 [help]

May 30 2005
parent reply derick_eddington nospam.yashmoo.com writes:
Certainly.  I'll keep you updated as I enhance and fix bugs.

In article <d7g9q7$7b3$1 digitaldaemon.com>, Kris says...
Very useful. I'd like to add this to Mango, if that would be OK?

- Kris

<derick_eddington nospam.yashmoo.com> wrote in message
news:d7g5nd$3i3$1 digitaldaemon.com...
 I've made a command-line option helper similar to Python's optparse.  It

allows
 you to specify what D-type you want the option as, short name, long name,

help,
 and more.  It automatically creates a formatted help message and prints it

on
 errors.  It checks that clients' usage of the module is proper; and it

checks
 that the command-line arguments meet what was specified.  It has a

compehensive
 unittest that demonstrates more.  The source is attached.


May 30 2005
parent reply kris <fu bar.org> writes:
derick_eddington nospam.yashmoo.com wrote:
 Certainly.  I'll keep you updated as I enhance and fix bugs.

Excellent ~ thx!
May 30 2005
next sibling parent James Dunne <james.jdunne gmail.com> writes:
In article <d7gqjo$nth$2 digitaldaemon.com>, kris says...
derick_eddington nospam.yashmoo.com wrote:
 Certainly.  I'll keep you updated as I enhance and fix bugs.


Who doesn't love to enhance bugs? =P
Excellent ~ thx!

Regards, James Dunne
May 31 2005
prev sibling parent derick_eddington nospam.yashmoo.com writes:
I've updated optparse.d:

Option groups for help printout.
Example:

: optionParser = new OptionParser("myapp", "[option [value]]");
: optionParser.addOption!()("v", "verbose");
: optionParser.addOption!(float)("f", "foo", null, null, null, true);
: optionParser.addOption!(int)("x", "xeno", "does this and that", "THING");
: optionParser.addOption!(int[])("a", "apple", "make applesauce", null);
: optionParser.addOption!(long)("l", "long", "be longer", "LONG");
: optionParser.addOption!(double)("d", "double", null, "DOUBLE");
: optionParser.addOption!(uint[])("ui", "uint", null, "UINT,...");
: // make a group, options must have previously been added
: optionParser.makeGroup("number options", "f", "x", "a", "l", "d", "ui");
: optionParser.addOption!(char[])(null, "bar", "make it happen", "BLOB");
: optionParser.addOption!(char[][])("sb", "shabang", "blow up", "IT");
: // make a group, options must have previously been added
: optionParser.makeGroup("string options", "bar", "sb");

Will make help:

: usage:  myapp [option [value]]
:
: options:
:   -h, --help            Show this help message and exit.
:   --version             Show program's version number and exit.
:   -v, --verbose
:
: number options:
:   -f, --foo
:   -x THING, --xeno=THING
:                         does this and that
:   -a, --apple           make applesauce
:   -l LONG, --long=LONG
:                         be longer
:   -d DOUBLE, --double=DOUBLE
:   -ui UINT,..., --uint=UINT,...
:
: string options:
:   --bar=BLOB            make it happen
:   -sb IT, --shabang=IT
:                         blow up

Help string formatting separates short-name from METAVAR by a space for easier
reading.

Smarter use of templates to support more types.

Bug *un-enhanced* :) where "--option= --next-opt" would consume --next-opt as
--option's value instead of causing error because --option has no value.

A few more unittest cases.

Question for potential users of optparse.d:
Would you rather have anal checking of all usage of the module or reduce the
object-file size from 55k to 35k? I tried to use "version" but it's too buggy (I
just wanted version'd else-if...)

--Derick


begin 0644 optparse.d
M;6]D=6QE(&]P='!A<G-E.PT*#0HO*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ* T*("H 0GD 1&5R:6-K($5D9&EN9W1O;BX 4&QA8V5D(&EN('1H
M92!P=6)L:6, 9&]M86EN+B` ("` ("` ("` ("` ("` ("` ("` ("H-"B`J
M($EN<W!I<F5D(&)Y(%!Y=&AO;B=S(&]P='!A<G-E+B` ("` ("` ("` ("` 
M("` ("` ("` ("` ("` ("` ("` ("` ("` ("`J#0H *B` ("` ("` ("` 
M("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` 
M("` ("` ("` ("` ("` ("` * T*("H 4V5E(&)O='1O;2!O9B!T:&ES(&9I
M;&4 9F]R(&5X86UP;&4 =7-A9V4N("` ("` ("` ("` ("` ("` ("` ("` 
M("` ("` ("H-"B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ+PT*
M#0IP<FEV871E(&EM<&]R="!S=&0N<W1R:6YG+`T*("` ("` ("` ("` ("` 
M<W1D+F-O;G8L#0H ("` ("` ("` ("` ("!S=&0N<W1D87)G+`T*("` ("` 
M("` ("` ("` <W1D+G-T9&EO+`T*("` ("` ("` ("` ("` <W1D+F,N<W1D
M;&EB.PT*#0H-"G!R:79A=&4 96YU;2!3=7!P;W)T9614>7!E<PT*>PT*"4YO
M5F%L=64L#0H)26YT+`T*"4EN=$%R<F%Y+`T*"55);G0L#0H)54EN=$%R<F%Y
M+`T*"4QO;F<L#0H)3&]N9T%R<F%Y+`T*"55,;VYG+`T*"55,;VYG07)R87DL
M#0H)1FQO870L#0H)1FQO871!<G)A>2P-" E$;W5B;&4L#0H)1&]U8FQE07)R
M87DL#0H)4W1R:6YG+`T*"5-T<FEN9T%R<F%Y+`T*?0T*#0IP<FEV871E#0I[
M#0IT96UP;&%T92!G97135"`H5"`Z($YO5F%L=64I('L-"E-U<'!O<G1E9%1Y
M<&5S(&=E=%-4(" I("![(')E='5R;B!3=7!P;W)T9614>7!E<RY.;U9A;'5E
M.R!]#0I]#0IT96UP;&%T92!G97135"`H5"`Z(&EN="D >PT*4W5P<&]R=&5D
M5'EP97, 9V5T4U0 *"D ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+DEN=#L 
M?0T*?0T*=&5M<&QA=&4 9V5T4U0 *%0 .B!I;G1;72D >PT*4W5P<&]R=&5D
M5'EP97, 9V5T4U0 *"D ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+DEN=$%R
M<F%Y.R!]#0I]#0IT96UP;&%T92!G97135"`H5"`Z('5I;G0I('L-"E-U<'!O
M<G1E9%1Y<&5S(&=E=%-4(" I("![(')E='5R;B!3=7!P;W)T9614>7!E<RY5
M26YT.R!]#0I]#0IT96UP;&%T92!G97135"`H5"`Z('5I;G1;72D >PT*4W5P
M<&]R=&5D5'EP97, 9V5T4U0 *"D ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S
M+E5);G1!<G)A>3L ?0T*?0T*=&5M<&QA=&4 9V5T4U0 *%0 .B!L;VYG*2![
M#0I3=7!P;W)T9614>7!E<R!G97135"`H*2` >R!R971U<FX 4W5P<&]R=&5D
M5'EP97,N3&]N9SL ?0T*?0T*=&5M<&QA=&4 9V5T4U0 *%0 .B!L;VYG6UTI
M('L-"E-U<'!O<G1E9%1Y<&5S(&=E=%-4(" I("![(')E='5R;B!3=7!P;W)T
M9614>7!E<RY,;VYG07)R87D[('T-"GT-"G1E;7!L871E(&=E=%-4("A4(#H 
M=6QO;F<I('L-"E-U<'!O<G1E9%1Y<&5S(&=E=%-4(" I("![(')E='5R;B!3
M=7!P;W)T9614>7!E<RY53&]N9SL ?0T*?0T*=&5M<&QA=&4 9V5T4U0 *%0 
M.B!U;&]N9UM=*2![#0I3=7!P;W)T9614>7!E<R!G97135"`H*2` >R!R971U
M<FX 4W5P<&]R=&5D5'EP97,N54QO;F=!<G)A>3L ?0T*?0T*=&5M<&QA=&4 
M9V5T4U0 *%0 .B!F;&]A="D >PT*4W5P<&]R=&5D5'EP97, 9V5T4U0 *"D 
M('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+D9L;V%T.R!]#0I]#0IT96UP;&%T
M92!G97135"`H5"`Z(&9L;V%T6UTI('L-"E-U<'!O<G1E9%1Y<&5S(&=E=%-4
M(" I("![(')E='5R;B!3=7!P;W)T9614>7!E<RY&;&]A=$%R<F%Y.R!]#0I]
M#0IT96UP;&%T92!G97135"`H5"`Z(&1O=6)L92D >PT*4W5P<&]R=&5D5'EP
M97, 9V5T4U0 *"D ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+D1O=6)L93L 
M?0T*?0T*=&5M<&QA=&4 9V5T4U0 *%0 .B!D;W5B;&5;72D >PT*4W5P<&]R
M=&5D5'EP97, 9V5T4U0 *"D ('L <F5T=7)N(%-U<'!O<G1E9%1Y<&5S+D1O
M=6)L94%R<F%Y.R!]#0I]#0IT96UP;&%T92!G97135"`H5"`Z(&-H87);72D 
M>PT*4W5P<&]R=&5D5'EP97, 9V5T4U0 *"D ('L <F5T=7)N(%-U<'!O<G1E
M9%1Y<&5S+E-T<FEN9SL ?0T*?0T*=&5M<&QA=&4 9V5T4U0 *%0 .B!C:&%R
M6UU;72D >PT*4W5P<&]R=&5D5'EP97, 9V5T4U0 *"D ('L <F5T=7)N(%-U
M<'!O<G1E9%1Y<&5S+E-T<FEN9T%R<F%Y.R!]#0I]#0IT96UP;&%T92!G9713
M5"`H5"D >PT*4W5P<&]R=&5D5'EP97, 9V5T4U0 *"D ('L =&AR;W< ;F5W
M(%5N4W5P<&]R=&5D5'EP945R<F]R*'1Y<&5I9"A4*2D[('T-"GT-"GT +R]E
M;F0 <')I=F%T90T*#0H-"B\J* T*("H 57-E9"!I;G1E<FYA;&QY('1O(&-A
M=&-H(&-L:65N="!C;V1E(&%T=&5M<'1I;F<-"B`J('1O('5S92!U;G-U<'!O
M<G1E9"!T>7!E<RX 1&]E<R!N;W0 <')O<&]G871E(&]U="!O9B!M;V1U;&4N
M#0H *B\-"G!R:79A=&4 8VQA<W, 56Y3=7!P;W)T9614>7!E17)R;W( .B!%
M<G)O< T*>PT*"51Y<&5);F9O('1Y<&4[#0H-" ET:&ES("A4>7!E26YF;R!T
M:2D-" E[#0H)"71Y<&4 /2!T:3L-" D)<W5P97(H;G5L;"D[#0H)?0T*?0T*
M#0H-"B\J* T*("H 17)R;W)S('=I=&  ;W!T<&%R<V4 ;6]D=6QE('5S86=E
M+B!0<F]P;V=A=&5S('1O(&-L:65N="!C;V1E+ T*("HO#0IC;&%S<R!/<'10
M87)S945R<F]R(#H 17)R;W(-"GL-" ET:&ES("AC:&%R6UT ;7-G*2` >R!S
M=7!E<BAM<V<I.R!]#0I]#0H-" T*+RHJ#0H *B!%<G)O<G, =VET:"!C;VUM
M86YD+6QI;F4 ;W!T:6]N<RX 0V%U<V5S(&UE<W-A9V4 =&\ 8F4 <')I;G1E
M9`T*("H 86YD('!R;V=R86T 97AI=&5D+B` 1&]E<R!N;W0 <')O<&]G871E
M(&]U="!O9B!M;V1U;&4N#0H *B\-"G!R:79A=&4 8VQA<W, 3W!T:6]N17)R
M;W( .B!%<G)O< T*>PT*"71H:7, *&-H87);72!M<V<I("![('-U<&5R*&US
M9RD[('T-"GT-" T*#0HO*BH-"B`J(%1H92!M86EN(&-L87-S(&]F('1H:7, 
M;6]D=6QE+B` 0V]N<W1R=6-T(&ET('=I=&  >6]U<B!P<F]G<F%M)W, ;F%M
M90T*("H 86YD(&]P=&EO;F%L;'D 82!U<V%G92!M97-S86=E(&%N9"!V97)S
M:6]N('-T<FEN9RX (%5S92!A9&1/<'1I;VXA#0H *B!T;R!A9&0 8V]M;6%N
M9"UL:6YE(&]P=&EO;G, >6]U('=A;G0 =&\ ;&]O:R!F;W(N#0H *B\-"F-L
M87-S($]P=&EO;E!A<G-E< T*>PT*"7!R:79A=&4 8VAA<EM=('!R;V=.86UE
M+"!U<V%G92P =F5R.PT*"7!R:79A=&4 0F%S94]P=&EO;EM=(&9I;F1/<'1I
M;VYS.PT*"7!R:79A=&4 3W!T:6]N<R!D969A=6QT5F%L=65/<'1I;VYS.PT*
M"7!R:79A=&4 3W!T:6]N1W)O=7!;72!O<'1I;VY'<F]U<',[#0H-" ET:&ES
M("AC:&%R6UT <')O9TYA;64L(&-H87);72!U<V%G92`](&YU;&PL(&-H87);
M72!V97( /2!N=6QL*0T*"6EN('L-" D)87-S97)T("AP<F]G3F%M92YL96YG
M=& I.PT*"7T-" EB;V1Y('L-" D)=&AI<RYP<F]G3F%M92`]('!R;V=.86UE
M.PT*"0ET:&ES+G5S86=E(#T =7-A9V4[#0H)"71H:7,N=F5R(#T =F5R.PT*
M"0EO<'1I;VY'<F]U<', ?CT ;F5W($]P=&EO;D=R;W5P*")O<'1I;VYS(BD[
M#0H)"6%D9$]P=&EO;B$H*2 B:"(L(")H96QP(BP (E-H;W< =&AI<R!H96QP
M(&UE<W-A9V4 86YD(&5X:70N(BD[#0H)"6EF("AV97(N;&5N9W1H*0T*"0D)
M861D3W!T:6]N(2 I*&YU;&PL(")V97)S:6]N(BP (E-H;W< <')O9W)A;2=S
M('9E<G-I;VX ;G5M8F5R(&%N9"!E>&ET+B(I.PT*"7T-" T*"6EN=F%R:6%N
M=`T*"7L-" D)87-S97)T("AO<'1I;VY'<F]U<',N;&5N9W1H*3L-" D)87-S
M97)T("AO<'1I;VY'<F]U<'-;,%T (3T](&YU;&PI.PT*"7T-" T*"2\J* T*
M"2`J(%5S92!W:71H;W5T(&$ ='EP92!F;W( 82!N;RUV86QU92]T;V=G;&4 
M;W!T:6]N.R!O<B!U<V4 =VET:"!O;F4 ;V8 =&AE#0H)("H <W5P<&]R=&5D
M('1Y<&5S('1O(')E=')I979E('1H92!O<'1I;VXG<R!V86QU92!A<R!T:&%T
M($0M='EP92X ($]N92!O9 T*"2`J('-H;W)T3F%M92!O<B!L;VYG3F%M92!M
M=7-T(&)E('-P96-I9FEE9"P ;W( 8F]T:"X (&AE;'` :7, =&AE(&AE;'` 
M;65S<V%G90T*"2`J(&9O<B!T:&4 ;W!T:6]N+"!P<FEN=&5D('=H96X =&AE
M('!R;V=R86TG<R!H96QP(&ES('!R:6YT960N("!M971A5F%R(&ES#0H)("H 
M82!D97-C:7!T:79E(&YA;64 9F]R('1H92!O<'1I;VXG<R!V86QU92!U<V5D
M(&EN('!R:6YT:6YG(&]P=&EO;G, =VET:"!V86QU97,N#0H)("H 5&AE('9A
M<F%R9W, :7, =&\ 86QL;W< )U0 9&5F875L=%9A;'5E)R!A;F0 )V)O;VP 
M;6%N9&%T;W)Y)R!P87)A;65T97)S+ T*"2`J(&1E9F%U;'1686QU92!I<R!T
M;R!S970 82!D969A=6QT('9A;'5E(&9O<B!O<'1I;VYS('=I=&  =F%L=65S
M(&%N9"!M86ME('1H870-" D *B!O<'1I;VX 86QW87ES(&9O=6YD('=I=&  
M=&AA="!V86QU92!B>2!D969A=6QT+B` ;6%N9&%T;W)Y('-P96-I9FEE<R!W
M:&5T:&5R#0H)("H =&AE(&]P=&EO;B!M=7-T(&)E(&=I=F5N(&]N('1H92!C
M;VUM86YD+6QI;F4N("!)9B!B;W1H(&1E9F%U;'1686QU92!A;F0-" D *B!A
M;F0 ;6%N9&%T;W)Y(&%R92!G:79E;BP ;6%N9&%T;W)Y('=I;&P :&%V92!N
M;R!E9F9E8W0N("!)9B!D969A=6QT5F%L=64 :7,-" D *B!N=6QL+"!I="!M
M96%N<R!N;R!D969A=6QT('9A;'5E+B` 9&5F875L=%9A;'5E(&UU<W0 8F4 
M;G5L;"!F;W( ;F\M=F%L=64-" D *B!O<'1I;VYS('1H870 ;F5E9"!T;R!S
M<&5C:69I>2!M86YD871O<GDN#0H)("HO#0H)=&5M<&QA=&4 861D3W!T:6]N
M("A4(#T 3F]686QU92D-" E[#0H)=F]I9"!A9&1/<'1I;VX *&-H87);72!S
M:&]R=$YA;64L(&-H87);72!L;VYG3F%M92`](&YU;&PL(&-H87);72!H96QP
M(#T ;G5L;"P 8VAA<EM=(&UE=&%687( /2!N=6QL+"`N+BXI#0H)>PT*"0ED
M96)U9R!W<FET969L;B B)7,N861D3W!T:6]N*"DB+"!T:&ES*3L-" T*"0EI
M9B`H(2AS:&]R=$YA;64N;&5N9W1H('Q\(&QO;F=.86UE+FQE;F=T:"DI#0H)
M"0ET:')O=R!N97< 3W!T4&%R<V5%<G)O<B B861D3W!T:6]N*"D <F5Q=6ER
M97, 82!S:&]R="UN86UE(&]R(&$ ;&]N9RUN86UE(BD[#0H)"6EF("A?87)G
M=6UE;G1S+FQE;F=T:"`^(#(I#0H)"0ET:')O=R!N97< 3W!T4&%R<V5%<G)O
M<B B861D3W!T:6]N*"D =&%K97, 870 ;6]S="!T=V\ =F%R:6%D:6, 87)G
M=6UE;G1S(BD[#0H-" D)9F]R96%C:"`H0F%S94]P=&EO;B!O.R!F:6YD3W!T
M:6]N<RD >PT*"0D):68 *'-H;W)T3F%M92YL96YG=&  )B8 <VAO<G1.86UE
M(#T](&\N<VAO<G1.86UE*0T*"0D)"71H<F]W(&YE=R!/<'1087)S945R<F]R
M*")C;VYF;&EC=&EN9R!O<'1I;VXZ("TB('X <VAO<G1.86UE*3L-" D)"6EF
M("AL;VYG3F%M92YL96YG=&  )B8 ;&]N9TYA;64 /3T ;RYL;VYG3F%M92D-
M" D)"0ET:')O=R!N97< 3W!T4&%R<V5%<G)O<B B8V]N9FQI8W1I;F< ;W!T
M:6]N.B`M+2( ?B!L;VYG3F%M92D[#0H)"7T-" T*"0DO+R!/<'1I;VXA*%0I
M(&-O;G-T<G5C=&]R(&-H96-K<R!4(&ES('-U<'!O<G1E9"P 86YD('1H<F]W
M<R!/<'1087)S945R<F]R(&EF(&YO=`T*"0E/<'1I;VXA*%0I(&]P=&EO;B`]
M(&YE=R!/<'1I;VXA*%0I*'-H;W)T3F%M92P ;&]N9TYA;64L(&AE;'`L(&UE
M=&%687(I.PT*#0H)"2\O(&AA;F1L92!V87)A<F=S('=H:6-H('-H;W5L9"!B
M93H 5"!D969A=6QT5F%L=64L(&)O;VP ;6%N9&%T;W)Y#0H)"6EF='EP92`H
M5"`Z($YO5F%L=64I('L-" D)"6EF("A?87)G=6UE;G1S+FQE;F=T:"`^(#$I
M('L-" D)"0DO+R!N965D960 =&\ 861V86YC92!?87)G<'1R(&)E8V%U<V4 
M;6%N9&%T;W)Y(&ES(&YE>'0 =F%R87)G#0H)"0D)='EP96]F*&YU;&PI(&EG
M;F]R92`]('9A7V%R9R$H='EP96]F*&YU;&PI*2A?87)G<'1R*3L-" D)"0EI
M9B`H7V%R9W5M96YT<ULP72`A/2!T>7!E:60H='EP96]F*&YU;&PI*2!\?"!I
M9VYO<F4 (3T ;G5L;"D-" D)"0D)=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H
M9F]R;6%T*"(E<R!O<'1I;VX :&%S(&YO('9A;'5E+"!D969A=6QT('9A;'5E
M(&UU<W0 8F4 ;G5L;"!W:&5N('-P96-I9FEY:6YG(&UA;F1A=&]R>2(L(&]P
M=&EO;BDI.PT*"0D)?0T*"0D)96QS92!I9B`H7V%R9W5M96YT<RYL96YG=& I
M#0H)"0D)=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H9F]R;6%T*"(E<R!O<'1I
M;VX :&%S(&YO('9A;'5E+"!S;R!N;R!D969A=6QT('9A;'5E(&-A;B!B92!S
M<&5C:69I960B+"!O<'1I;VXI*3L-" D)?0T*"0EE;'-E('L-" D)"6EF("A?
M87)G=6UE;G1S+FQE;F=T:"D >PT*"0D)"6EF("A?87)G=6UE;G1S6S!=("$]
M('1Y<&5I9"AT>7!E;V8H;G5L;"DI*2![#0H)"0D)"6EF("A?87)G=6UE;G1S
M6S!=("$]('1Y<&5I9"A4*2D-" D)"0D)"71H<F]W(&YE=R!/<'1087)S945R
M<F]R*&9O<FUA=" B)7, ;W!T:6]N)W, 9&5F875L="!V86QU92!N;W0 ='EP
M92`E<RP :7, ='EP92`E<R(L(&]P=&EO;BP ='EP96ED*%0I+"!?87)G=6UE
M;G1S6S!=*2D[#0H)"0D)"6]P=&EO;BYV86QU92`]('9A7V%R9R$H5"DH7V%R
M9W!T<BD[#0H)"0D)"6EF("AO<'1I;VXN<VAO<G1.86UE+FQE;F=T:"D-" D)
M"0D)"61E9F%U;'1686QU94]P=&EO;G-;;W!T:6]N+G-H;W)T3F%M95T /2!O
M<'1I;VX[#0H)"0D)"6EF("AO<'1I;VXN;&]N9TYA;64N;&5N9W1H*0T*"0D)
M"0D)9&5F875L=%9A;'5E3W!T:6]N<UMO<'1I;VXN;&]N9TYA;65=(#T ;W!T
M:6]N.PT*"0D)"0ED96)U9R![#0H)"0D)"0EW<FET968H(EQT9&5F875L="!V
M86QU92`]("(I.PT*"0D)"0D):69T>7!E("A4(#H 8VAA<EM=*2![#0H)"0D)
M"0D)=W)I=&5F;&XH;W!T:6]N+G9A;'5E*3L-" D)"0D)"7T-" D)"0D)"65L
M<V4 :69T>7!E("A4($$ .B!!6UTI('L-" D)"0D)"0EI9B`H;W!T:6]N+G9A
M;'5E+FQE;F=T:"`^(#$I#0H)"0D)"0D)"69O<F5A8V  *$$ 93L ;W!T:6]N
M+G9A;'5E*0T*"0D)"0D)"0D)=W)I=&5F*"(E<RPB+"!E*3L-" D)"0D)"0EI
M9B`H;W!T:6]N+G9A;'5E+FQE;F=T:"D-" D)"0D)"0D)=W)I=&5F*&]P=&EO
M;BYV86QU95LD+3%=*3L-" D)"0D)"0EW<FET969L;B I.PT*"0D)"0D)?0T*
M"0D)"0D)96QS92![#0H)"0D)"0D)=W)I=&5F;&XH;W!T:6]N+G9A;'5E*3L-
M" D)"0D)"7T-" D)"0D)?0T*"0D)"7T-" D)"0EE;'-E(&EF("A?87)G=6UE
M;G1S+FQE;F=T:"`^(#$I('L-" D)"0D)+R\ ;F5E9&5D('1O(&%D=F%N8V4 
M7V%R9W!T<B!I;F-A<V4 ;6%N9&%T;W)Y(&ES(&YE>'0 =F%R87)G#0H)"0D)
M"71Y<&5O9BAN=6QL*2!I9VYO<F4 /2!V85]A<F<A*'1Y<&5O9BAN=6QL*2DH
M7V%R9W!T<BD[#0H)"0D)?0T*"0D)?0T*"0E]#0H)"6EF("A?87)G=6UE;G1S
M+FQE;F=T:"`^(#$I('L-" D)"6EF("A?87)G=6UE;G1S6S%=("$]('1Y<&5I
M9"AB;V]L*2D-" D)"0ET:')O=R!N97< 3W!T4&%R<V5%<G)O<BAF;W)M870H
M(B5S(&]P=&EO;B!M86YD871O<GD <&%R86UE=&5R(&UU<W0 8F4 ='EP92`E
M<R(L(&]P=&EO;BP ='EP96ED*&)O;VPI*2D[#0H)"0EO<'1I;VXN;6%N9&%T
M;W)Y(#T =F%?87)G(2AB;V]L*2A?87)G<'1R*3L-" D)"61E8G5G('=R:71E
M9FQN*")<=&UA;F1A=&]R>2`]("5S(BP ;W!T:6]N+FUA;F1A=&]R>2D[#0H)
M"7T-" T*"0EF:6YD3W!T:6]N<R!^/2!O<'1I;VX[#0H)"6]P=&EO;D=R;W5P
M<ULP72YO<'1I;VYS('X](&]P=&EO;CL-" T*"0ED96)U9R!W<FET969L;B B
M7'1S=6-C97-S9G5L;'D 861D960 )7,B+"!O<'1I;VXI.PT*"7T ?0T*#0H)
M+RHJ#0H)("H-" D *B\-" EV;VED(&UA:V5'<F]U<"`H8VAA<EM=(&=R;W5P
M5&ET;&4L("XN+BD-" E[#0H)"61E8G5G('=R:71E9FQN*"(E<RYM86ME1W)O
M=7`H7"(E<UPB*2(L('1H:7,L(&=R;W5P5&ET;&4I.PT*#0H)"6EF("AG<F]U
M<%1I=&QE+FQE;F=T:"`]/2`P*0T*"0D)=&AR;W< ;F5W($]P=%!A<G-E17)R
M;W(H(FUA:V5'<F]U<" I(')E<75I<F5S(&$ 9W)O=7`M=&ET;&4B*3L-" D)
M:68 *%]A<F=U;65N=',N;&5N9W1H(#T](#`I#0H)"0ET:')O=R!N97< 3W!T
M4&%R<V5%<G)O<B B;6%K94=R;W5P*"D <F5Q=6ER97, 870 ;&5A<W0 ;VYE
M(&]P=&EO;BUN86UE(BD[#0H-" D)3W!T:6]N1W)O=7` 9W)O=7` /2!N97< 
M3W!T:6]N1W)O=7`H9W)O=7!4:71L92D[#0H-" D)9F]R96%C:"`H5'EP94EN
M9F\ =&D[(%]A<F=U;65N=',I#0H)"7L-" D)"6EF("AT:2`A/2!T>7!E:60H
M8VAA<EM=*2D-" D)"0ET:')O=R!N97< 3W!T4&%R<V5%<G)O<B B;6%K94=R
M;W5P*"D 87)G=6UE;G1S(&UU<W0 86QL(&)E(&-H87);72(I.PT*#0H)"0EC
M:&%R6UT ;VX /2!V85]A<F<A*&-H87);72DH7V%R9W!T<BD[#0H)"0ED96)U
M9R!W<FET969L;B B7'1A9&1I;F< ;W!T:6]N("5S('1O(&=R;W5P(BP ;VXI
M.PT*#0H)"0EB;V]L(&9O=6YD.PT*"0D)<VEZ95]T(')E;6]V93L-" D)"4)A
M<V5/<'1I;VY;72!B87-I8T]P=&EO;G, /2!O<'1I;VY'<F]U<'-;,%TN;W!T
M:6]N<SL-" T*"0D)9F]R96%C:"`H<VEZ95]T(&DL($)A<V5/<'1I;VX ;SL 
M8F%S:6-/<'1I;VYS*2![#0H)"0D):68 *&]N(#T](&\N<VAO<G1.86UE('Q\
M(&]N(#T](&\N;&]N9TYA;64I('L-" D)"0D)9F]U;F0 /2!T<G5E.PT*"0D)
M"0ER96UO=F4 /2!I.PT*"0D)"0EG<F]U<"YO<'1I;VYS('X](&\[#0H)"0D)
M"6)R96%K.PT*"0D)?0E]#0H)"0EI9B`H9F]U;F0I('L-" D)"0DO+R!R96UO
M=F4 9G)O;2!B87-I8T]P=&EO;G, 86YD('-H:69T(')E;6%I;FEN9R!T;R!P
M<F5S97)V92!O<F1E< T*"0D)"7=H:6QE("AR96UO=F4 *R`Q(#P 8F%S:6-/
M<'1I;VYS+FQE;F=T:"D >PT*"0D)"0EB87-I8T]P=&EO;G-;<F5M;W9E72`]
M(&)A<VEC3W!T:6]N<UMR96UO=F4 *R`Q73L-" D)"0D)<F5M;W9E*RL[#0H)
M"0D)?0T*"0D)"6]P=&EO;D=R;W5P<ULP72YO<'1I;VYS(#T 8F%S:6-/<'1I
M;VYS6S`N+B0M,5T[#0H)"0E]#0H)"0EE;'-E#0H)"0D)=&AR;W< ;F5W($]P
M=%!A<G-E17)R;W(H;VX ?B`B(&]P=&EO;B!N965D<R!T;R!B92!A9&1E9"!B
M969O<F4 :70 8V%N(&)E('!U="!I;B!A(&=R;W5P(BD[#0H)"7T-" T*"0EO
M<'1I;VY'<F]U<', ?CT 9W)O=7`[#0H)?0T*#0H)+RHJ#0H)("H 4&%R<V4 
M8V]M;6%N9"UL:6YE(&%R9W5M96YT<RX 87)G<ULP72!I<R!A<W-U;65D('1O
M(&)E('1H92!P<F]G<F%M+6YA;64-" D *B!A;F0 :7, <VMI<'!E9"X ($-H
M96-K<R!A<F=S(&UE971S('1H92!S<&5C:69I960 ;W!T:6]N<RX (&%R9W, 
M:7, <F5S970-" D *B!T;R!B92!A;B!A<G)A>2!O9B!A;&P ;F]N+6]P=&EO
M;B!A<F=U;65N=', *'1H;W-E('1H870 9&\ ;F]T('-T87)T('=I=& -" D 
M*B`G+2< 86YD(&1O(&YO="!F;VQL;W< 82!V86QU92UT86MI;F< ;W!T:6]N
M*2X (%)E='5R;G, 86X 3W!T:6]N<R!W:&EC:`T*"2`J(&ES('5S960 =&AU
M<R!T;R!C:&5C:R!F;W( 9F]U;F0 ;W!T:6]N<SH *")O<'1N86UE(B!I;B!O
M<'1I;VYS*3L 86YD#0H)("H =7-E9"!T:'5S('1O(')E=')I979E(&]P=&EO
M;B!V86QU97,Z(&]P=&EO;G-;(F]P=&YA;64B72YG971686QU92$H5"DN#0H)
M("HO#0H)3W!T:6]N<R!P87)S92`H:6YO=70 8VAA<EM=6UT 87)G<RD-" E[
M#0H)"61E8G5G('=R:71E9FQN*"(E<RYP87)S92AA<F=S+FQE;F=T:#TE9"DB
M+"!T:&ES+"!A<F=S+FQE;F=T:"D[#0H-" D)3W!T:6]N<R!F;W5N9$]P=&EO
M;G,[#0H)"2\O(&-O<'D 9&5F875L=%9A;'5E3W!T:6]N<R!I;G1O(&9O=6YD
M3W!T:6]N<R!S;R!T:&5Y)W)E(&9O=6YD(&)Y(&1E9F%U;'0-" D)9F]R96%C
M:"`H8VAA<EM=(&]P='-T<FEN9RP 0F%S94]P=&EO;B!O.R!D969A=6QT5F%L
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
M.PT*"0D)"0D)8G)E86L[#0H)"0D)"6-A<V4 4W5P<&]R=&5D5'EP97,N26YT
M07)R87DZ#0H)"0D)"0ED96)U9R!W<FET969L;B B7'1<="5S(&]P=&EO;CH 
M<&%R<VEN9R!<(B5S7"( 87, :6YT6UTB+"!O+"!V*3L-" D)"0D)"2AC87-T
M*$]P=&EO;B$H:6YT6UTI*6\I+G9A;'5E(#T <&%R<V5!<G)A>2$H:6YT*2AV
M+"`F=&]);G0I.PT*"0D)"0D)8G)E86L[#0H)"0D)"6-A<V4 4W5P<&]R=&5D
M5'EP97,N54EN=#H-" D)"0D)"61E8G5G('=R:71E9FQN*")<=%QT)7, ;W!T
M:6]N.B!P87)S:6YG(%PB)7-<(B!A<R!U:6YT(BP ;RP =BD[#0H)"0D)"0DH
M8V%S="A/<'1I;VXA*'5I;G0I*6\I+G9A;'5E(#T =&]5:6YT*'8I.PT*"0D)
M"0D)8G)E86L[#0H)"0D)"6-A<V4 4W5P<&]R=&5D5'EP97,N54EN=$%R<F%Y
M. T*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I;VXZ('!A<G-I
M;F< 7"(E<UPB(&%S('5I;G1;72(L(&\L('8I.PT*"0D)"0D)*&-A<W0H3W!T
M:6]N(2AU:6YT6UTI*6\I+G9A;'5E(#T <&%R<V5!<G)A>2$H=6EN="DH=BP 
M)G1O56EN="D[#0H)"0D)"0EB<F5A:SL-" D)"0D)8V%S92!3=7!P;W)T9614
M>7!E<RY,;VYG. T*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I
M;VXZ('!A<G-I;F< 7"(E<UPB(&%S(&QO;F<B+"!O+"!V*3L-" D)"0D)"2AC
M87-T*$]P=&EO;B$H;&]N9RDI;RDN=F%L=64 /2!T;TQO;F<H=BD[#0H)"0D)
M"0EB<F5A:SL-" D)"0D)8V%S92!3=7!P;W)T9614>7!E<RY,;VYG07)R87DZ
M#0H)"0D)"0ED96)U9R!W<FET969L;B B7'1<="5S(&]P=&EO;CH <&%R<VEN
M9R!<(B5S7"( 87, ;&]N9UM=(BP ;RP =BD[#0H)"0D)"0DH8V%S="A/<'1I
M;VXA*&QO;F=;72DI;RDN=F%L=64 /2!P87)S94%R<F%Y(2AL;VYG*2AV+"`F
M=&],;VYG*3L-" D)"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U<'!O<G1E9%1Y
M<&5S+E5,;VYG. T*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I
M;VXZ('!A<G-I;F< 7"(E<UPB(&%S('5L;VYG(BP ;RP =BD[#0H)"0D)"0DH
M8V%S="A/<'1I;VXA*'5L;VYG*2EO*2YV86QU92`]('1O56QO;F<H=BD[#0H)
M"0D)"0EB<F5A:SL-" D)"0D)8V%S92!3=7!P;W)T9614>7!E<RY53&]N9T%R
M<F%Y. T*"0D)"0D)9&5B=6< =W)I=&5F;&XH(EQT7'0E<R!O<'1I;VXZ('!A
M<G-I;F< 7"(E<UPB(&%S('5L;VYG6UTB+"!O+"!V*3L-" D)"0D)"2AC87-T
M*$]P=&EO;B$H=6QO;F=;72DI;RDN=F%L=64 /2!P87)S94%R<F%Y(2AU;&]N
M9RDH=BP )G1O56QO;F<I.PT*"0D)"0D)8G)E86L[#0H)"0D)"6-A<V4 4W5P
M<&]R=&5D5'EP97,N1FQO870Z#0H)"0D)"0ED96)U9R!W<FET969L;B B7'1<
M="5S(&]P=&EO;CH <&%R<VEN9R!<(B5S7"( 87, 9FQO870B+"!O+"!V*3L-
M" D)"0D)"2AC87-T*$]P=&EO;B$H9FQO870I*6\I+G9A;'5E(#T =&]&;&]A
M="AV*3L-" D)"0D)"6)R96%K.PT*"0D)"0EC87-E(%-U<'!O<G1E9%1Y<&5S
M+D9L;V%T07)R87DZ#0H)"0D)"0ED96)U9R!W<FET969L;B B7'1<="5S(&]P
M=&EO;CH <&%R<VEN9R!<(B5S7"( 87, 9FQO871;72(L(&\L('8I.PT*"0D)
M"0D)*&-A<W0H3W!T:6]N(2AF;&]A=%M=*2EO*2YV86QU92`]('!A<G-E07)R
M87DA*&9L;V%T*2AV+"`F=&]&;&]A="D[#0H)"0D)"0EB<F5A:SL-" D)"0D)
M8V%S92!3=7!P;W)T9614>7!E<RY$;W5B;&4Z#0H)"0D)"0ED96)U9R!W<FET
M969L;B B7'1<="5S(&]P=&EO;CH <&%R<VEN9R!<(B5S7"( 87, 9&]U8FQE
M(BP ;RP =BD[#0H)"0D)"0DH8V%S="A/<'1I;VXA*&1O=6)L92DI;RDN=F%L
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
M;65T859A<CL-" D)"0E]#0H)"0D):68 *&\N:&5L<"YL96YG=& I#0H)"0D)
M"6]P=$AE;'` ?CT 86QI9VY/<'1(96QP4W1R*&\N:&5L<"P ;W!T2&5L<"YL
M96YG=& I.PT*"0D)"6AE;'` ?CT ;W!T2&5L<"!^(")<;B([#0H)"0E]#0H)
M"7T-" D)=W)I=&5F*&AE;'`I.PT*"7T-" T*"79O:60 <')I;G1697)S:6]N
M(" I#0H)>PT*"0EW<FET969L;B B)7, )7,B+"!P<F]G3F%M92P =F5R*3L-
M" E]#0H-" EV;VED(&5R<F]R17AI="`H8VAA<EM=(&US9RD-" E[#0H)"7=R
M:71E9FQN*"(E<SH 97)R;W(Z("5S7&XB+"!P<F]G3F%M92P ;7-G*3L-" D)
M<')I;G1(96QP*"D[#0H)"65X:70H,2D[#0H)?0T*#0H)<')I=F%T92!T96UP
M;&%T92!P87)S94%R<F%Y("A4*2![#0H)5%M=('!A<G-E07)R87D *&-H87);
M72!V<RP 5"!F=6YC=&EO;B`H8VAA<EM=*2!P87)S950I#0H)>PT*"0ED96)U
M9R!W<FET969L;B B)7,N<&%R<V5!<G)A>2$H)7,I*'9S/5PB)7-<(B!P87)S
M950])7,I(BP =&AI<RP ='EP96ED*%0I+"!V<RP <&%R<V54*3L-" D)5%M=
M(&$[#0H)"6-H87);75M=('-S(#T =G,N<W!L:70H(BPB*3L-" D)9F]R96%C
M:"`H8VAA<EM=(',[('-S*0T*"0D):68 *',N;&5N9W1H*0T*"0D)"6$ ?CT 
M<&%R<V54*',I.PT*"0ER971U<FX 83L-" E]('T-"GT-" T*#0HO*BH-"B`J
M(%)E='5R;F5D(&9R;VT 3W!T:6]N4&%R<V5R+G!A<G-E*"DN#0H *B!);G1E
M;F1E9"!T;R!B92!U<V5D('-O;65T:&EN9R!L:6ME. T*("H :68 *")O<'1I
M;VXB(&EN(&]P=&EO;G,I#0H *B` ("` 5"!B;&%H(#T ;W!T:6]N<ULB;W!T
M:6]N(ETN9V5T5F%L=64A*%0I.PT*("HO#0IT>7!E9&5F($)A<V5/<'1I;VY;
M8VAA<EM=72!/<'1I;VYS.PT*#0H-"G!R:79A=&4 8VQA<W, 3W!T:6]N1W)O
M=7`-"GL-" EC:&%R6UT =&ET;&4[#0H)0F%S94]P=&EO;EM=(&]P=&EO;G,[
M#0H-" ET:&ES("AC:&%R6UT ="D-" E[#0H)"71I=&QE(#T =#L-" E]#0I]
M#0H-" T*+RHJ#0H *B!!('1Y<&4 =&AA="!M96%N<R!A;B!O<'1I;VX 9&]E
M<R!N;W0 :&%V92!A('9A;'5E+ T*("HO#0IP<FEV871E(&-L87-S($YO5F%L
M=64 >R!]#0H-" T*+RHJ#0H *B!);7!L96UE;G1S(&UE;6)E<G, 8V]M;6]N
M('1O(&%L;"!O<'1I;VYS(&%N9"!P<F]V:61E<R!T96UP;&%T92!F;W(-"B`J
M(')E=')I979I;F< ;W!T:6]N('9A;'5E<R!A<R!T:&4 8V]R<F5C="!T>7!E
M+ T*("HO#0IP<FEV871E(&%B<W1R86-T(&-L87-S($)A<V5/<'1I;VX-"GL-
M" EC:&%R6UT <VAO<G1.86UE+"!L;VYG3F%M93L-" EC:&%R6UT :&5L<"P 
M;65T859A<CL-" EB;V]L(&UA;F1A=&]R>3L-" E3=7!P;W)T9614>7!E<R!T
M>7!E.PT*"7!R:79A=&4 5'EP94EN9F\ 7W1Y<&4[#0H-" ET:&ES("A3=7!P
M;W)T9614>7!E<R!T+"!4>7!E26YF;R!T:2P 8VAA<EM=('-.86UE+"!C:&%R
M6UT ;$YA;64L(&-H87);72!H+"!C:&%R6UT ;59A<BD-" EI;B![#0H)"6%S
M<V5R="`H=&D (3T](&YU;&PI.PT*"0EA<W-E<G0 *'-.86UE+FQE;F=T:"!\
M?"!L3F%M92YL96YG=& I.PT*"7T-" EB;V1Y('L-" D)='EP92`]('0[#0H)
M"5]T>7!E(#T =&D[#0H)"7-H;W)T3F%M92`]('-.86UE.PT*"0EL;VYG3F%M
M92`](&Q.86UE.PT*"0EH96QP(#T :#L-" D);65T859A<B`](&U687([#0H)
M"61E8G5G('=R:71E9FQN*"(E<RYT:&ES*"D 9&]N92`M+2!T>7!E(#T )60 
M(%]T>7!E(#T )7,B+"!T:&ES+"!C87-T*&EN="ET>7!E+"!?='EP92D[#0H)
M?0T*#0H)+RHJ#0H)("H 9V5T5F%L=64A*%0I*"D +2T 4F5T=7)N<R!T:&ES
M(&]P=&EO;B=S('9A;'5E(&%S('1H92!C;W)R96-T('1Y<&4N#0H)("H ("` 
M("` ("` ("` ("` ("` 268 =&AE('=R;VYG('1Y<&4 :7, 871T96UP=&5D
M+"!/<'1087)S945R<F]R(&ES('1H<F]W;BX-" D *B\-" ET96UP;&%T92!G
M971686QU92`H5"D-" E[#0H)5"!G971686QU92`H*0T*"7L-" D):68 *'1Y
M<&4 /3T 4W5P<&]R=&5D5'EP97,N3F]686QU92D-" D)"71H<F]W(&YE=R!/
M<'1087)S945R<F]R*&9O<FUA=" B)7, ;W!T:6]N(&1O97, ;F]T(&AA=F4 
M82!V86QU92!T;R!R971R:65V92(L('1H:7,I*3L-" T*"0ET<GD >PT*"0D)
M:68 *&=E=%-4(2A4*2`A/2!T>7!E*0T*"0D)"71H<F]W(&YE=R!/<'1087)S
M945R<F]R*&9O<FUA=" B)7, ;W!T:6]N(&UU<W0 8F4 <F5T<FEE=F5D(&%S
M('1Y<&4 )7,L(&YO="!T>7!E("5S(BP =&AI<RP 7W1Y<&4L('1Y<&5I9"A4
M*2DI.PT*"0E]#0H)"6-A=&-H("A5;E-U<'!O<G1E9%1Y<&5%<G)O<B!U<W1E
M*0T*"0D)=&AR;W< ;F5W($]P=%!A<G-E17)R;W(H9F]R;6%T*"(E<R!O<'1I
M;VX 8V%N(&YO="!B92!R971R:65V960 87, =6YS=7!P;W)T960 ='EP92`E
M<R(L('1H:7,L('5S=&4N='EP92DI.PT*#0H)"7)E='5R;B`H8V%S="A/<'1I
M;VXA*%0I*71H:7,I+G9A;'5E.PT*"7T ?0T*#0H)8VAA<EM=('1O4W1R:6YG
M(" I#0H)>PT*"0ER971U<FX ;W!T5&]3=')I;F<H<VAO<G1.86UE+"!L;VYG
M3F%M92D[#0H)?0T*?0T*#0H-"G!R:79A=&4 8VAA<EM=(&]P=%1O4W1R:6YG
M("AC:&%R6UT <VAO<G1.86UE+"!C:&%R6UT ;&]N9TYA;64I#0I[#0H)<F5T
M=7)N("AS:&]R=$YA;64N;&5N9W1H(#\ (BTB?G-H;W)T3F%M92`Z("(B*2!^
M(" H<VAO<G1.86UE+FQE;F=T:"`F)B!L;VYG3F%M92YL96YG=& I(#\ (B`O
M("( .B`B(BD ?B`H;&]N9TYA;64N;&5N9W1H(#\ (BTM(GYL;VYG3F%M92`Z
M("(B*3L-"GT-" T*#0HO*BH-"B`J($$ 8V]M;6%N9"UL:6YE(&]P=&EO;BX 
M(%!A<F%M971E<FEZ960 8GD 82!T>7!E('1O('-P96-I9FEY(&$ =F%L=64-
M"B`J(&ES(&5X<&5C=&5D(&%N9"!W:&%T('1Y<&4L(&]R($YO5F%L=64 =&\ 
M;65A;B!T:&4 ;W!T:6]N(&1O97, ;F]T#0H *B!E>'!E8W0 82!V86QU92X-
M"B`J+PT*<')I=F%T92!C;&%S<R!/<'1I;VX *%0I(#H 0F%S94]P=&EO; T*
M>PT*"6EF='EP92`H5"`Z($YO5F%L=64I('M]#0H)96QS92![(%0 =F%L=64[
M('T-" T*"71H:7, *&-H87);72!S:&]R=$YA;64L(&-H87);72!L;VYG3F%M
M92P 8VAA<EM=(&AE;'`L(&-H87);72!M971A5F%R*0T*"7L-" D)=')Y('L-
M" D)"7-U<&5R*&=E=%-4(2A4*2P ='EP96ED*%0I+"!S:&]R=$YA;64L(&QO
M;F=.86UE+"!H96QP+"!M971A5F%R*3L-" D)?0T*"0EC871C:"`H56Y3=7!P
M;W)T9614>7!E17)R;W( =7-T92D >PT*"0D)=&AR;W< ;F5W($]P=%!A<G-E
M17)R;W(H9F]R;6%T*"(E<R!O<'1I;VX 8V%N(&YO="!B92!U;G-U<'!O<G1E
M9"!T>7!E("5S(BP ;W!T5&]3=')I;F<H<VAO<G1.86UE+&QO;F=.86UE*2P 
M=7-T92YT>7!E*2D[#0H)"7T-" E]#0I]#0H-" T*=6YI='1E<W0-"GL-" ED
M96)U9R!W<FET969L;B B8F5G:6X )7, =6YI='1E<W0B+"!?7T9)3$5?7RD[
M#0H-" E/<'1I;VY087)S97( ;W!T:6]N4&%R<V5R.PT*"6-H87);75M=(&%R
M9W,[#0H)<W1A=&EC(&-H87);75M=('-H86)A;F=$9FQT(#T 6R)Z>'DB+")O
M;F4B+")Q=V5R='DB73L-" T*"79O:60 ;F5W3W!T:6]N4&%R<V5R(" I#0H)
M>PT*"0EO<'1I;VY087)S97( /2!N97< 3W!T:6]N4&%R<V5R*%]?1DE,15]?
M6S`N+B0M,ETL(");;W!T:6]N(%MV86QU95U=(BP (C`N,"(I.PT*"0EO<'1I
M;VY087)S97(N861D3W!T:6]N(2 I*")V(BP (G9E<F)O<V4B*3L-" D);W!T
M:6]N4&%R<V5R+F%D9$]P=&EO;B$H9FQO870I*")F(BP (F9O;R(L(&YU;&PL
M(&YU;&PL(&YU;&PL('1R=64I.PT*"0EO<'1I;VY087)S97(N861D3W!T:6]N
M(2AI;G0I*")X(BP (GAE;F\B+"`B9&]E<R!T:&ES(&%N9"!T:&%T(BP (E1(
M24Y'(BP ,3(S*3L-" D);W!T:6]N4&%R<V5R+F%D9$]P=&EO;B$H:6YT6UTI
M*")A(BP (F%P<&QE(BP (FUA:V4 87!P;&5S875C92(L(&YU;&PI.PT*"0EO
M<'1I;VY087)S97(N861D3W!T:6]N(2AL;VYG*2 B;"(L(")L;VYG(BP (F)E
M(&QO;F=E<B(L("),3TY'(BD[#0H)"6]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA
M*&1O=6)L92DH(F0B+"`B9&]U8FQE(BP ;G5L;"P (D1/54),12(I.PT*"0EO
M<'1I;VY087)S97(N861D3W!T:6]N(2AU:6YT6UTI*")U:2(L(")U:6YT(BP 
M;G5L;"P (E5)3E0L+BXN(BD[#0H)"6]P=&EO;E!A<G-E<BYM86ME1W)O=7`H
M(FYU;6)E<B!O<'1I;VYS(BP (F8B+"`B>"(L(")A(BP (FPB+"`B9"(L(")U
M:2(I.PT*"0EO<'1I;VY087)S97(N861D3W!T:6]N(2AC:&%R6UTI*&YU;&PL
M(")B87(B+"`B;6%K92!I="!H87!P96XB+"`B0DQ/0B(L(")D969A=6QT+79A
M;'5E(BD[#0H)"6]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&-H87);75M=*2 B
M<V(B+"`B<VAA8F%N9R(L(")B;&]W('5P(BP (DE4(BP <VAA8F%N9T1F;'0I
M.PT*"0EO<'1I;VY087)S97(N;6%K94=R;W5P*")S=')I;F< ;W!T:6]N<R(L
M(")B87(B+"`B<V(B*3L-" E]#0H-" EN97=/<'1I;VY087)S97(H*3L-" ED
M96)U9R!O<'1I;VY087)S97(N<')I;G1(96QP*"D[#0H)87)G<R`]('-P;&ET
M*")M>6%P<"!L86QA("UV("TM9F]O/3DX-RXV-2`M+6)A<B!B87(M<W1R:6YG
M(&AO:&\ +6$Q+#(L,RPT+#4 +7-B(&%B8RQD+&5F+'IZ>GIZ>B!A<V1F(BD[
M#0H)3W!T:6]N<R!O<'1I;VYS(#T ;W!T:6]N4&%R<V5R+G!A<G-E*&%R9W,I
M.PT*"7-T871I8R!C:&%R6UU;72!L969T;W9E<B`](%LB;&%L82(L(FAO:&\B
M+")A<V1F(ET[#0H)87-S97)T("AA<F=S(#T](&QE9G1O=F5R*3L-" EA<W-E
M<G0 *")V97)B;W-E(B!I;B!O<'1I;VYS("8F(")V(B!I;B!O<'1I;VYS*3L-
M" EA<W-E<G0 *")F;V\B(&EN(&]P=&EO;G, )B8 (F8B(&EN(&]P=&EO;G,I
M.PT*"6%S<V5R="`H;W!T:6]N<ULB9F]O(ETN9V5T5F%L=64A*&9L;V%T*2`]
M/2`Y.#<N-C5F*3L-" EA<W-E<G0 *")B87(B(&EN(&]P=&EO;G,I.PT*"6%S
M<V5R="`H;W!T:6]N<ULB8F%R(ETN9V5T5F%L=64A*&-H87);72D /3T (F)A
M<BUS=')I;F<B*3L-" EA<W-E<G0 *")A<'!L92( :6X ;W!T:6]N<R`F)B`B
M82( :6X ;W!T:6]N<RD[#0H)<W1A=&EC(&EN=%M=(&%P<&QE24$ /2!;,2PR
M+#,L-"PU73L-" EA<W-E<G0 *&]P=&EO;G-;(F$B72YG971686QU92$H:6YT
M6UTI(#T](&%P<&QE24$I.PT*"6%S<V5R="`H(G-H86)A;F<B(&EN(&]P=&EO
M;G, ("8F(")S8B( :6X ;W!T:6]N<RD[#0H)<W1A=&EC(&-H87);75M=('-H
M86)A;F=#04$ /2!;(F%B8R(L(F0B+")E9B(L(GIZ>GIZ>B)=.PT*"6%S<V5R
M="`H;W!T:6]N<ULB<VAA8F%N9R)=+F=E=%9A;'5E(2AC:&%R6UU;72D /3T 
M<VAA8F%N9T-!02D[#0H-" EN97=/<'1I;VY087)S97(H*3L-" EA<F=S(#T 
M<W!L:70H(FUY87!P("TM=F5R8F]S92`M+6%P<&QE/2P ;&%L82!H;VAO(&%S
M9&8 +2US:&%B86YG(&]N;'E/;F4 +68M,"XY,S%E+34B*3L-" EO<'1I;VYS
M(#T ;W!T:6]N4&%R<V5R+G!A<G-E*&%R9W,I.PT*"6%S<V5R="`H87)G<R`]
M/2!L969T;W9E<BD[#0H)87-S97)T(" B9F]O(B!I;B!O<'1I;VYS*3L-" EA
M<W-E<G0 *&]P=&EO;G-;(F8B72YG971686QU92$H9FQO870I(#T]("TP+CDS
M,64M-68I.PT*"6%S<V5R="`H(F$B(&EN(&]P=&EO;G,I.PT*"2\O(&EF('EO
M=2!R96%L;'D =V%N="!T;R!G:79E(&$ ;G5L;"!V86QU92UA<G)A>2P >6]U
M(&-A;B!G:79E(&IU<W0 82`G+"<-" EA<W-E<G0 *&]P=&EO;G-;(F%P<&QE
M(ETN9V5T5F%L=64A*&EN=%M=*2`]/2!N=6QL*3L-" EA<W-E<G0 *")S:&%B
M86YG(B!I;B!O<'1I;VYS*3L-" ES=&%T:6, 8VAA<EM=6UT <VAA8F%N9T-!
M03( /2!;(F]N;'E/;F4B73L-" EA<W-E<G0 *&]P=&EO;G-;(G-B(ETN9V5T
M5F%L=64A*&-H87);75M=*2`]/2!S:&%B86YG0T%!,BD[#0H-" EN97=/<'1I
M;VY087)S97(H*3L-" EA<F=S(#T <W!L:70H(FUY87!P("TM9F]O(#$N,B`M
M;"`M,3$U,CDR,34P-#8P-C T-CDW-B`M9"`Q+C<Y-S8P92LR.3$ +2UU:6YT
M/3DY+"PB*3L-" EO<'1I;VYS(#T ;W!T:6]N4&%R<V5R+G!A<G-E*&%R9W,I
M.PT*"6%S<V5R="`H(G-H86)A;F<B(&EN(&]P=&EO;G, )B8 (G-B(B!I;B!O
M<'1I;VYS*3L-" EA<W-E<G0 *&]P=&EO;G-;(G-B(ETN9V5T5F%L=64A*&-H
M87);75M=*2`]/2!S:&%B86YG1&9L="D[#0H)87-S97)T(" B>&5N;R( :6X 
M;W!T:6]N<R`F)B`B>"( :6X ;W!T:6]N<RD[#0H)87-S97)T("AO<'1I;VYS
M6R)X96YO(ETN9V5T5F%L=64A*&EN="D /3T ,3(S*3L-" EA<W-E<G0 *")B
M87(B(&EN(&]P=&EO;G,I.PT*"6%S<V5R="`H;W!T:6]N<ULB8F%R(ETN9V5T
M5F%L=64A*&-H87);72D /3T (F1E9F%U;'0M=F%L=64B*3L-" EA<W-E<G0 
M*")L;VYG(B!I;B!O<'1I;VYS("8F(")L(B!I;B!O<'1I;VYS*3L-" EA<W-E
M<G0 *&]P=&EO;G-;(FQO;F<B72YG971686QU92$H;&]N9RD /3T +3$Q-3(Y
M,C$U,#0V,#8X-#8Y-S8I.PT*"6%S<V5R="`H(F1O=6)L92( :6X ;W!T:6]N
M<R`F)B`B9"( :6X ;W!T:6]N<RD[#0H)87-S97)T("AO<'1I;VYS6R)D;W5B
M;&4B72YG971686QU92$H9&]U8FQE*2`]/2`Q+C<Y-S8P92LR.3$I.PT*"7-T
M871I8R!U:6YT6UT =6EA(#T 6SDY=5T[#0H)87-S97)T(" B=6EN="( :6X 
M;W!T:6]N<R`F)B`B=6DB(&EN(&]P=&EO;G,I.PT*"6%S<V5R="`H;W!T:6]N
M<ULB=6DB72YG971686QU92$H=6EN=%M=*2`]/2!U:6$I.PT*#0H)+R\ 8VAE
M8VL 3W!T:6]N17)R;W( *'1H97-E(&-A=7-E('!R;V-E<W, =&\ 97AI="P 
M<V\ 8V%N)W0 =6YC;VUM96YT(&)Y(&1E9F%U;'0N#0H)+R\ ("` ("` ("` 
M("` ("` ("` ($D 8VAE8VME9"!T:&5M(&%L;"!O;F4 8GD ;VYE*0T*"2\O
M(&UI<W-I;F< =F%L=65S#0H)+R]N97=/<'1I;VY087)S97(H*3L-" DO*V%R
M9W, /2!S<&QI=" B;7EA<'` +2UB87(B*3L-" EO<'1I;VYS(#T ;W!T:6]N
M4&%R<V5R+G!A<G-E*&%R9W,I.RLO#0H)+RMA<F=S(#T <W!L:70H(FUY87!P
M("TM8F%R/2(I.PT*"6]P=&EO;G, /2!O<'1I;VY087)S97(N<&%R<V4H87)G
M<RD[*R\-" DO+R!N;R!S=6-H(&]P=&EO; T*"2\K87)G<R`]('-P;&ET*")M
M>6%P<"`M+6YO+7-U8V M;W!T:6]N(BD[#0H);W!T:6]N<R`](&]P=&EO;E!A
M<G-E<BYP87)S92AA<F=S*3LK+PT*"2\O('9A;'5E('!A<G-E(&5R<F]R#0H)
M+R]A<F=S(#T <W!L:70H(FUY87!P("TM>&5N;SUO;W!S(BD[#0H)+R]O<'1I
M;VYS(#T ;W!T:6]N4&%R<V5R+G!A<G-E*&%R9W,I.PT*"2\K87)G<R`]('-P
M;&ET*")M>6%P<"`M9B!O;W!S(BD[#0H);W!T:6]N<R`](&]P=&EO;E!A<G-E
M<BYP87)S92AA<F=S*3LK+PT*"2\K87)G<R`]('-P;&ET*")M>6%P<"`M+75I
M;G0 -34L,C,L+3$R+#DY(BD[#0H);W!T:6]N<R`](&]P=&EO;E!A<G-E<BYP
M87)S92AA<F=S*3LK+PT*"2\O(&UI<W-I;F< ;6%N9&%T;W)Y(&]P=&EO;B`M
M+69O;PT*"2\K87)G<R`]('-P;&ET*")M>6%P<"(I.PT*"6]P=&EO;G, /2!O
M<'1I;VY087)S97(N<&%R<V4H87)G<RD[*R\-"B\K#0H)8F]O;"!F86EL<R`H
M=F]I9"!D96QE9V%T92`H*2!D9RD-" E[#0H)"6)O;VP 9F%I;&5D.PT*"0ET
M<GD >PT*"0D)+R]D96)U9R!W<FET969L;B B9F%I;', 86)O=70 =&\ 8V%L
M;"!D9R`E<R(L("9D9RD[#0H)"0ED9R I.PT*"0E]#0H)"6-A=&-H("A/<'10
M87)S945R<F]R(&]P92D >PT*"0D)9F%I;&5D(#T =')U93L-" D)"61E8G5G
M('=R:71E9FQN*")E>'!E8W1E9"!F86EL.B`E<R(L(&]P92D[#0H)"7T-" D)
M<F5T=7)N(&9A:6QE9#L-" E]#0HK+PT*"2\O(&-H96-K($]P=%!A<G-E17)R
M;W(-" DO+R!$340 8G5G('=I=&  ;F5S=&5D(&1E;&5G871E<R!T:')O=VEN
M9R]C871C:&EN9R!P<F5V96YT<R!F86EL<R I(&9R;VT =V]R:VEN9RP-" DO
M+R!S;R!U;G1I;"!T:&%T)W, 9FEX960L(&)E;&]W(&%R92!N;W0 87-S97)T
M*&9A:6QS*"XN+BDI('-O($D 8V]U;&0 =&5S="!T:&5M(&5A8V -" EN97=/
M<'1I;VY087)S97(H*3L-" DO+R!C;VYF;&EC=&EN9R!O<'1I;VYS#0H)+R]A
M<W-E<G0 *&9A:6QS*&1E;&5G871E('9O:60 *"D >V]P=&EO;E!A<G-E<BYA
M9&1/<'1I;VXA*&-H87);72DH(G B*3M]*2D[("\O($1-1"!B=6<Z('1H92!/
M<'1087)S945R<F]R(&ES;B=T(&-A=6=H="!B>2!F86EL<PT*"2\O;W!T:6]N
M4&%R<V5R+F%D9$]P=&EO;B$H8VAA<EM=*2 B>"(I.PT*"2\O('5N<W5P<&]R
M=&5D('1Y<&4-" DO+V]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&-D;W5B;&4I
M*")Z(BPB>GIZ(BD[#0H)+R]O<'1I;VY087)S97(N861D3W!T:6]N(2A/8FIE
M8W0I*")O(BPB;V)J96-T(BD[#0H)+R\ =W)O;F< 9&5F875L=%9A;'5E('1Y
M<&4-" DO+V]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&-H87);72DH(GHB+&YU
M;&PL;G5L;"QN=6QL+#8V-BD[#0H)+R\ =W)O;F< ;6%N9&%T;W)Y('1Y<&4-
M" DO+V]P=&EO;E!A<G-E<BYA9&1/<'1I;VXA*&EN="DH(GHB+&YU;&PL;G5L
M;"QN=6QL+&YU;&PL,2D[#0H)+R\ 3F]686QU92!C86X ;F]T(&AA=F4 9&5F
M875L="!V86QU90T*"2\O;W!T:6]N4&%R<V5R+F%D9$]P=&EO;B$H*2 B>B(L
M;G5L;"QN=6QL+&YU;&PL,3(S*3L-" DO+R!.;U9A;'5E(&1E9F%U;'1686QU
M92!M=7-T(#T](&YU;&P =VAE;B!M86YD871O<GD-" DO+V]P=&EO;E!A<G-E
M<BYA9&1/<'1I;VXA*"DH(GHB+&YU;&PL;G5L;"QN=6QL+#$R,RQT<G5E*3L-
M" DO+R!W<F]N9R!G971686QU92!T>7!E#0H)+R]A<F=S(#T <W!L:70H(FUY
M87!P("UV(&%S9&8 +2UX96YO/34T,S(Q('AY>B`M9C`N.3DB*3L-" DO+V]P
M=&EO;G, /2!O<'1I;VY087)S97(N<&%R<V4H87)G<RD[#0H)+R]D;W5B;&4 
M=W)O;F< /2!O<'1I;VYS6R)X96YO(ETN9V5T5F%L=64A*&1O=6)L92D[#0H)
M+R\ 9V5T5F%L=64 ;VX ;F\ =F%L=64 ;W!T:6]N#0H)+R]I;G0 ;F]V86QU
M92`](&]P=&EO;G-;(G9E<F)O<V4B72YG971686QU92$H:6YT*3L-" DO+V%S
M<V5R="`H9F%I;',H9&5L96=A=&4 =F]I9"`H*2![(&]P=&EO;G-;(G9E<F)O
M<V4B72YG971686QU92$H8F]O;"D[('TI*3L ("\O(&-A=7-E<R!$340 8G5G
M($D 8V%N)W0 <F5P<F]D=6-E('-I;7!L97(L(&EF(&)O;VP 8B`]('-T871M
M96YT(&ES(&1O;F4L(&ET('=O<FMS+BXN#0H)+R]O<'1I;VYS6R)V97)B;W-E
M(ETN9V5T5F%L=64A*&)O;VPI.R` +R\ <VEM:6QA<B!$340 8G5G#0H)+R\ 
M;6%K94=R;W5P('=I=&  =6XM861D960 ;W!T:6]N#0H)+R]O<'1I;VY087)S
M97(N;6%K94=R;W5P*")C<F%P(&]P=&EO;G,B+"`B;6ES<VEN9R(I.PT*"2\O
M(&UI<W-I;F< <VAO<G0 86YD(&QO;F< ;F%M92!P87)A;65T97)S#0H)+R]O
M<'1I;VY087)S97(N861D3W!T:6]N(2 I*&YU;&PL(&YU;&PL(")W:&%T(&%M
M($D 9&]I;F<_(2(I.PT*"2\O(&UI<W-I;F< 9W)O=7` =&ET;&4-" DO+V]P
M=&EO;E!A<G-E<BYM86ME1W)O=7`H;G5L;"P (G9E<F)O<V4B*3L-" DO+R!W
M<F]N9R!O<'1I;VXM;F%M92!T>7!E#0H)+R]O<'1I;VY087)S97(N;6%K94=R
M;W5P*")C<F%P(&]P=&EO;G,B+"`Q,C,I.PT*#0H)9&5B=6< =W)I=&5F;&XH
M(B5S('5N:71T97-T('-U8V-E<W,B+"!?7T9)3$5?7RD[#0I]#0H-" T*=F5R
M<VEO;B`H3W!T4&%R<V5-86EN*0T*>PT*"2\J* T*"2`J(%=O<FMI;F< 97AA
M;7!L92!U<V%G92X-" D *B\-" EI;G0 ;6%I;B`H8VAA<EM=6UT 87)G<RD-
M" E[#0H)"6EN="!V97)B;W-I='D[#0H)"6-H87);72!O=71F:6QE.PT*"0EC
M:&%R6UU;72!F:6QE<SL-" T*"0DO+R!C;VYS=')U8W1O<B!A<F=S(&%R92!U
M<V5D(&EN('!R:6YT:6YG(&AE;'`-" D)+R\ ;W!T:6]N("UH("\ +2UH96QP
M(&ES(&%L=V%Y<R!A9&1E9"!B>2!D969A=6QT(&%N9"!U<V5S('!R;V=R86TM
M;F%M92!A;F0 =7-A9V4-" D)+R\ ;W!T:6]N("TM=F5R<VEO;B`H;F\ <VAO
M<G0 ;F%M92D :7, 861D960 8GD 9&5F875L="!I9B!V97)S:6]N(&ES(&=I
M=F5N#0H)"2\O("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("` ("!P
M<F]G<F%M+6YA;64 ("` ("` ("` ("` ("!U<V%G92` ("` ("` ("` ("` 
M("!V97)S:6]N#0H)"4]P=&EO;E!A<G-E<B!O<"`](&YE=R!/<'1I;VY087)S
M97(H7U]&24Q%7U];,"XN)"TR72P (EMO<'1I;VYS72`M+69I;&5S/68Q+&9.
M(%MO=71F:6QE72(L("(P+C,B*3L-" T*"0DO+R!I;G0L('-H;W)T(&%N9"!L
M;VYG+"!H96QP+"!M971A=F%R+"!N;R!D969A=6QT+"!N;W0 ;6%N9&%T;W)Y
M#0H)"6]P+F%D9$]P=&EO;B$H:6YT*2 B=B(L(")V97)B;W-E(BP (D)E(&UO
M<F4 86YD(&UO<F4 86YD(&UO<F4 86YD(&UO<F4 86YD(&UO<F4 86YD(&UO
M<F4 86YD(&UO<F4 =F5R8F]S92XB+"`B3$5614PB*3L-" D)+R\ 8V]M;6$M
M<V5P87)A=&5D('-T<FEN9R!L:7-T+"!S:&]R="!A;F0 ;&]N9RP :&5L<"P 
M;65T879A<BP ;F\ 9&5F875L="P ;6%N9&%T;W)Y#0H)"6]P+F%D9$]P=&EO
M;B$H8VAA<EM=6UTI*")F<R(L(")F:6QE<R(L(")&:6QE<R!T;R!P<F]C97-S
M+"!A;F0 ;6%K92!T:&ES(&$ <F5A;&QY(&QO;F< :&5L<"!S=')I;F< 87, 
M=V5L;"!T;R!T97-T(&%L:6=N:6YG+B(L(")&24Q%+$9)3$4L+BXN(BP ;G5L
M;"P =')U92D[#0H)"2\O(&9L;V%T+"!L;VYG+6]N;'DL(&AE;'`L(&UE=&%V
M87(L(&1E9F%U;'0L(&YO="!M86YD871O<GD-" D);W`N861D3W!T:6]N(2AF
M;&]A="DH;G5L;"P (G1H:6YG(BP (D1O(&ET('=I=&  =&AI<RXB+"`B1DQ/
M050B+"`M-"XR.3=E,C%F*3L-" D)+R\ ;F\M=F%L=64L('-H;W)T+6]N;'DL
M('=I=&  :&5L<"P ;F\ ;65T879A<BP ;F\ 9&5F875L="P ;F]T(&UA;F1A
M=&]R>0T*"0EO<"YA9&1/<'1I;VXA*"DH(F$B+"!N=6QL+"`B57-E(&%L=&5R
M;F%T92!M971H;V0N(BD[#0H)"6]P+FUA:V5'<F]U<" B97-O=&5R:6, ;W!T
M:6]N<R(L(")T:&EN9R(L(")A(BD[#0H-" D)+R\ 4&%R<V4 8V]M;6%N9"UL
M:6YE(&%R9W5M96YT<RP :6YC;'5D:6YG(&%R9W-;,%T <')O9W)A;2UN86UE
M("AI="=S('-K:7!P960I+ T*"0DO+R!!<F=S('=I;&P 8F4 <F5S970 =&\ 
M=&AE(')E;6%I;FEN9R!N;VXM;W!T:6]N(&-O;6UA;F0M;&EN90T*"0DO+R!A
M<F=U;65N=', :6X =&AE(&]R9&5R('1H97D 87!P96%R960N#0H)"4]P=&EO
M;G, ;W!T:6]N<R`](&]P+G!A<G-E*&%R9W,I.PT*#0H)"2\O($-H96-K(&EF
M(&]P=&EO;B!W87, 9VEV96X ;VX =&AE(&-O;6UA;F0M;&EN90T*"0DO+R!B
M>2!U<VEN9R`H8VAA<EM=(&EN($]P=&EO;G,I+ T*"0DO+R!)9B!T:&4 ;W!T
M:6]N(&AA<R!B;W1H('-H;W)T(&%N9"!L;VYG(&YA;65S+"!E:71H97( 8V%N
M(&)E('5S960N#0H)"6EF(" B=F5R8F]S92( :6X ;W!T:6]N<RD-" D)"2\O
M($EF(&]P=&EO;B!W87, 9VEV96X 86YD(&ET(&AA<R!A('9A;'5E+`T*"0D)
M+R\ <F5T<FEE=F4 :70 8GD :6YD97AI;F< 3W!T:6]N<R!W:71H('-H;W)T
M(&]R(&QO;F< ;F%M92`H;W( ;VYL>2!O;F4 :68 ;VYL>2!O;F4I#0H)"0DO
M+R!A;F0 9&\ 9V5T5F%L=64A*%9A;'5E5'EP92D-" D)"79E<F)O<VET>2`]
M(&]P=&EO;G-;(G9E<F)O<V4B72YG971686QU92$H:6YT*3L-" T*"0EI9B`H
M=F5R8F]S:71Y(#X ,"D-" D)"7=R:71E9FQN*")))VQL('-A>2!A(&QI='1L
M92XB*3L-" D):68 *'9E<F)O<VET>2`^(#$I#0H)"0EW<FET969L;B B22=L
M;"!S87D 82!L;W0 ;6]R92XB*3L-" T*"0DO+R!A<F=S('=A<R!R97-E="!B
M>2!P87)S92!T;R!T:&4 <F5M86EN:6YG(&YO;BUO<'1I;VX 8V]M;6%N9"UL
M:6YE(&%R9W5M96YT<PT*"0EI9B`H87)G<RYL96YG=&  /3T ,2D-" D)"2\O
M('5S92!T:&4 9FER<W0 ;F]N+6]P=&EO;B!A<F=U;65N=`T*"0D);W5T9FEL
M92`](&%R9W-;,%T[#0H)"65L<V4 :68 *&%R9W,N;&5N9W1H(#X ,2D-" D)
M"2\O($]P=&EO;D5R<F]R+F5R<F]R17AI=" B;65S<V%G92(I(&-A;B!B92!U
M<V5D('1O('!R:6YT(&AE;'` 86YD(&5X:70 <')O8V5S<SL-" D)"2\O('5S
M969U;"!W:&5N(&-H96-K:6YG(&YO;BUO<'1I;VX 87)G=6UE;G1S#0H)"0EO
M<"YE<G)O<D5X:70H(FUO<F4 =&AA;B!O;F4 ;W5T<'5T(&9I;&4 <W!E8VEF
M:65D(BD[#0H-" D)+R\ ;6%N9&%T;W)Y(&]P=&EO;G, 8V%N(&)E(&%S<W5M
M960 =&\ 8F4 =&AE<F4 869T97( <&%R<V4H87)G<RD-" D)87-S97)T(" B
M9FEL97,B(&EN(&]P=&EO;G,I.PT*"0EF:6QE<R`](&]P=&EO;G-;(F9I;&5S
M(ETN9V5T5F%L=64A*&-H87);75M=*3L-" D):68 *&9I;&5S+FQE;F=T:"`]
M/2`P*0T*"0D);W`N97)R;W)%>&ET*")N965D('1O('-P96-I9FEY(&%T(&QE
M87-T(&]N92!I;G!U="!F:6QE(BD[#0H-" D):68 *'9E<F)O<VET>2`^(#`I
M#0H)"7L-" D)"6EF(" B=&AI;F<B(&EN(&]P=&EO;G,I#0H)"0D)=W)I=&5F
M;&XH(FUY('1H:6YG(&ES.B`B+"!O<'1I;VYS6R)T:&EN9R)=+F=E=%9A;'5E
M(2AF;&]A="DI.PT*#0H)"0DO+R!N;RUV86QU92!O<'1I;VYS(&%R92!S:6UP
M;'D =&5S=&5D(&9O<B!B96EN9R!I;B!/<'1I;VYS#0H)"0EI9B`H(F$B(&EN
M(&]P=&EO;G,I#0H)"0D)=W)I=&5F;&XH(DD =V]U;&0 <')O8V5S<R!F:6QE
M<R!U<VEN9R!A;'1E<FYA=&4 ;65T:&]D.B(I.PT*"0D)96QS90T*"0D)"7=R
M:71E9FQN*"))('=O=6QD('!R;V-E<W, 9FEL97, =7-I;F< ;F]R;6%L(&UE
M=&AO9#HB*3L-" D)"69O<F5A8V  *&-H87);72!F.R!F:6QE<RD-" D)"0EW
M<FET969L;B B7'0B+&8I.PT*"0D)=W)I=&5F;&XH(F%N9"!O=71P=70 =&\ 
M(BP ;W5T9FEL92YL96YG=&  /R!O=71F:6QE(#H (CQS=&1O=70^(BD[#0H)
:"7T-" T*"0ER971U<FX ,#L-" E]#0I]#0IE
`
end
Jun 01 2005
prev sibling parent reply "Andrew Fedoniouk" <news terrainformatica.com> writes:
Cool, Derick!

What about using box values there?

Having them and use TypeList instead of

  optionParser = new OptionParser(__FILE__[0..$-2], "[option [value]]", 
"0.0");
  optionParser.addOption!()("v","verbose");
  optionParser.addOption!(float)("f","foo",null,null,null,true);
  optionParser.addOption!(int)("x","xeno","does this and that","THING",123);

will allow to build such declarations in compile time - statically.

Just hypothesis....

Andrew.



<derick_eddington nospam.yashmoo.com> wrote in message 
news:d7g5nd$3i3$1 digitaldaemon.com...
 I've made a command-line option helper similar to Python's optparse.  It 
 allows
 you to specify what D-type you want the option as, short name, long name, 
 help,
 and more.  It automatically creates a formatted help message and prints it 
 on
 errors.  It checks that clients' usage of the module is proper; and it 
 checks
 that the command-line arguments meet what was specified.  It has a 
 compehensive
 unittest that demonstrates more.  The source is attached.

 : /**
 :  * Example usage:
 :  */
 : int main (char[][] args)
 : {
 :     int verbosity;
 :     char[] outfile;
 :     char[][] files;
 :
 :     // Constructor parameters are used in printing help.
 :     // -h / --help is always added by default
 :     // and uses program-name and usage.
 :     // --version (no short name) is added by
 :     // default if version is given.
 :     //                                   program-name
 :     OptionParser op = new OptionParser(__FILE__[0..$-2],
 :     //                 usage                version
 :         "[options] --files=f1,fN [outfile]", "0.2");
 :
 :     // int, short and long, help, metavar,
 :     // no default, not mandatory
 :     op.addOption!(int)("v", "verbose",
 :         "Be more and more and more and more and more "
 :         "and more and more verbose.", "LEVEL");
 :     // comma-separated string list, short and long, help,
 :     // metavar, no default, mandatory
 :     op.addOption!(char[][])("fs", "files",
 :         "Files to process, and make this a really long help "
 :         "string as well to test aligning.", "FILE,FILE,...",
 :         null, true);
 :     // float, long-only, help, metavar, default, not mandatory
 :     op.addOption!(float)(null, "thing", "Do it with this.",
 :         "FLOAT", -4.297e21f);
 :     // no-value, short-only, with help, no metavar,
 :     // no default, not mandatory
 :     op.addOption!()("a", null, "Use alternate method.");
 :
 :     // Parse command-line arguments, including args[0]
 :     // program-name (it's skipped).
 :     // args will be reset to the remaining non-option
 :     // command-line arguments in the order they appeared.
 :     Options options = op.parse(args);
 :
 :     // Check if option was given on the command-line
 :     // by using (char[] in Options).
 :     // If the option has both short and long names,
 :     // either can be used.
 :     if ("verbose" in options)
 :         // If option was given and it has a value,
 :         // retrieve it by indexing Options with short
 :         // or long name (or only one if only one)
 :         // and do getValue!(T)
 :         verbosity = options["verbose"].getValue!(int);
 :
 :     if (verbosity > 0)
 :         writefln("I'll say a little.");
 :     if (verbosity > 1)
 :         writefln("I'll say a lot more.");
 :
 :     // args was reset by parse to the remaining
 :     // non-option command-line arguments
 :     if (args.length == 1)
 :         // use the first non-option argument
 :         outfile = args[0];
 :     else if (args.length > 1)
 :         // OptionError.errorExit("message") can be used to
 :         // print help and exit process;
 :         // useful when checking non-option arguments
 :         op.errorExit("more than one output file specified");
 :
 :     // mandatory options can be assumed to be
 :     // there after successful parse
 :     assert ("files" in options);
 :     files = options["files"].getValue!(char[][]);
 :     if (files.length == 0)
 :         op.errorExit("need to specifiy at least one input file");
 :
 :     if (verbosity > 0)
 :     {
 :         if ("thing" in options)
 :             writefln("my thing is: ",
 :                 options["thing"].getValue!(float));
 :
 :         // no-value options are simply tested for being in Options
 :         if ("a" in options)
 :             writefln("I would process files using alternate method:");
 :         else
 :             writefln("I would process files using normal method:");
 :         foreach (char[] f; files)
 :             writefln("\t",f);
 :         writefln("and output to ",
 :             outfile.length ? outfile : "<stdout>");
 :     }
 :
 :     return 0;
 : }

 Example command-line output of above program:

 ---------------------------------------------------------------

 $ ./example -h
 usage:  optparse [options] --files=f1,fN [outfile]

 options:
 -h, --help            Show this help message and exit.
 --version             Show program's version number and exit.
 -vLEVEL, --verbose=LEVEL
 Be more and more and more and more and more and more
 and more verbose.
 -fsFILE,FILE,..., --files=FILE,FILE,...
 Files to process, and make this a really long help
 string as well to test aligning.
 --thing=FLOAT         Do it with this.
 -a                    Use alternate method.

 ---------------------------------------------------------------

 $ ./example -v2 --files=somefile,anotherfile,nextfile --thing -4.23e-6 -a
 outputfile
 I'll say a little.
 I'll say a lot more.
 my thing is: -4.23e-06
 I would process files using alternate method:
 somefile
 anotherfile
 nextfile
 and output to outputfile

 ---------------------------------------------------------------

 $ ./example --asdf
 optparse: error: no such option: --asdf

 [help]

 ---------------------------------------------------------------

 $ ./example
 optparse: error: -fs / --files option is mandatory

 [help]



 

May 31 2005
parent reply derick_eddington nospam.yashmoo.com writes:
If it could be setup statically at compile-time and have the same conciseness,
flexibility, and ease of checking for options and retrieving their values, that
would be awesome, but I don't follow what you mean about box values and
TypeList.  Could you elaborate?

The only way to parameterize something at compile-time is with templates, right?
But they can only take integral values, not char[] for option names or arbitrary
types for default values.  Statically-initialized structs could be used but then
they still have to be given to an OptionParser and variables for them would also
need to be declared.  I don't think it can be done and retain the same degree of
simpleness of use.


In article <d7iifp$2jhh$1 digitaldaemon.com>, Andrew Fedoniouk says...
Cool, Derick!

What about using box values there?

Having them and use TypeList instead of

  optionParser = new OptionParser(__FILE__[0..$-2], "[option [value]]", 
"0.0");
  optionParser.addOption!()("v","verbose");
  optionParser.addOption!(float)("f","foo",null,null,null,true);
  optionParser.addOption!(int)("x","xeno","does this and that","THING",123);

will allow to build such declarations in compile time - statically.

Just hypothesis....

Andrew.

Jun 01 2005
parent "Andrew Fedoniouk" <news terrainformatica.com> writes:
<derick_eddington nospam.yashmoo.com> wrote in message 
news:d7jvl1$1420$1 digitaldaemon.com...
 If it could be setup statically at compile-time and have the same 
 conciseness,
 flexibility, and ease of checking for options and retrieving their values, 
 that
 would be awesome, but I don't follow what you mean about box values and
 TypeList.  Could you elaborate?

 The only way to parameterize something at compile-time is with templates, 
 right?
 But they can only take integral values, not char[] for option names or 
 arbitrary
 types for default values.  Statically-initialized structs could be used 
 but then
 they still have to be given to an OptionParser and variables for them 
 would also
 need to be declared.  I don't think it can be done and retain the same 
 degree of
 simpleness of use.

Yep. You are right. I was thinking about simple implementation of something close to boost::spirit http://spirit.sourceforge.net/ but it seems like even simple implementation is an overkill for such task. Andrew.
 In article <d7iifp$2jhh$1 digitaldaemon.com>, Andrew Fedoniouk says...
Cool, Derick!

What about using box values there?

Having them and use TypeList instead of

  optionParser = new OptionParser(__FILE__[0..$-2], "[option [value]]",
"0.0");
  optionParser.addOption!()("v","verbose");
  optionParser.addOption!(float)("f","foo",null,null,null,true);
  optionParser.addOption!(int)("x","xeno","does this and 
 that","THING",123);

will allow to build such declarations in compile time - statically.

Just hypothesis....


Andrew.


Jun 01 2005