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

experimental patch for very much faster dpkg -R



Below is a patch against Ian's CVS tree which can massively accelerate
the `dpkg -iGROEB' call from the disk method of dselect (and
elsewhere).

It works by parsing filenames to determine whether it can skip
particular files, instead of looking inside them.  When most of the
packages on your system are up to date, it leads to an enormous
speedup, as instead of opening and parsing thousands of *.deb files it 
just does a bit of work on the filenames.

In this version there are two special rules that you must follow:

 * Firstly your binary-* directories must contain .can.parse.filenames
   files for the new code to take effect.  You might say e.g.

    touch dists/slink/{main,contrib,non-free}/binary-i386/.can.parse.filenames

   to make this take effect.

   IMHO this test should be removed from production code, unless there is
   a really good reason for keeping it in.  (If you do have an archive
   with unsuitable filenames everything should just work, unless you make
   the filenames lie about their version number, in which case you
   deserve what you get).

   If you don't have direct control over the contents of the archive
   you use, then I recommend you just disable the test and always
   parse filenames.

 * Secondly, all version numbers must be unique EXCLUDING THE EPOCH.
   What this means is that if you have two instances of a package where
   the version number differs only in the epoch, you will get files
   ignored when possibly they should not be.

   I do not know how many packages this effects.  Hopefully it is none
   at all.  Clearly it is possible for it to be none at all, since we
   have the Debian-specific revision field.

   If this patch is adopted then either (1) the rule must become
   mandatory or (2) all filenames must be modified to include the
   epoch and this patch adjusted to take advantage of this.

   Other package management tools would benefit from this too, I
   imagine.

This patch is EXPERIMENTAL, do not run a dpkg that uses it unless you
know exaclty what you are doing.  That said I would be interested in
anyone's experience with it.

ttfn/jk

begin 644 faster.dpkg.diff
M/R!D;V,O<"YD:69F"DEN9&5X.B!V97)S:6]N+F@*/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/0I20U,@9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O=F5R<VEO;BYH
M+'8*<F5T<FEE=FEN9R!R979I<VEO;B`Q+C0*9&EF9B`M=2`M<C$N-"!V97)S
M:6]N+F@*+2TM('9E<G-I;VXN:`DQ.3DY+S`W+S(U(#$W.C(U.C4R"3$N-`HK
M*RL@=F5R<VEO;BYH"3$Y.3DO,#@O,34@,3(Z,#@Z,S8*0$`@+3$@*S$@0$`*
M+2-D969I;F4@1%!+1U]615)324].("(Q+C4N,R(@+RH@5&AI<R!L:6YE(&UO
M9&EF:65D(&)Y($UA:V5F:6QE("HO"BLC9&5F:6YE($102T=?5D524TE/3B`B
M,2XU+C0M<FIK(B`O*B!4:&ES(&QI;F4@;6]D:69I960@8GD@36%K969I;&4@
M*B\*26YD97@Z(&1O8R]P<F]G<F%M;65R+G-G;6P*/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/0I20U,@9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O9&]C+W!R;V=R
M86UM97(N<V=M;"QV"G)E=')I979I;F<@<F5V:7-I;VX@,2XQ"F1I9F8@+74@
M+7(Q+C$@<')O9W)A;6UE<BYS9VUL"BTM+2!D;V,O<')O9W)A;6UE<BYS9VUL
M"3$Y.3@O,3`O,C4@,C(Z,C0Z,#,),2XQ"BLK*R!D;V,O<')O9W)A;6UE<BYS
M9VUL"3$Y.3DO,#@O,34@,3(Z,#@Z,S8*0$`@+3,S,C0L-R`K,S,R-"PW($!`
M"B`\=&%G/CQT="]U<&1A=&4O"B`\=&%G/CQT="]I;G-T86QL+PH@/&ET96T^
M97AE8W5T86)L92!P<F]G<F%M<RP@=&AE('-C<FEP=',@=&AE;7-E;'9E<RX*
M+3QT86<^/'1T+V1E<V,N/'9A<B]O<'1I;VXO+PHK/'1A9SX\='0O9&5S8RX\
M=F%R+VUE=&AO9"\O"B`\:71E;3YD97-C<FEP=&EO;B!F:6QE+@H@/"]T86=L
M:7-T/@H@/'`^"D!`("TS,S4R+#$Q("LS,S4R+#$Q($!`"B`\=F%R+V=R;W5P
M+R!A;F0@/'9A<B]M971H;V0O+B`@/'9A<B]V87)D:7(O(&ES('1H92!B87-E
M(&1I<F5C=&]R>2!F;W(*('-T;W)I;F<@/'!R9VXO9'!K9R\@86YD(#QP<F=N
M+V1S96QE8W0O)W,@<W1A=&4L('5S=6%L;'D*(#QT=#XO=F%R+VQI8B]D<&MG
M/"\^.R!T:&ES(&ES('!A<W-E9"!I;B!S;R!T:&%T('1H92`\='0O+2UA9&UI
M;F1I<B\*+6]P=&EO;B!T;R`\<')G;B]D<V5L96-T+R!I<R!H;VYO=7)E9"DN
M"BMM971H;V0@=&\@/'!R9VXO9'-E;&5C="\@:7,@:&]N;W5R960I+@H@/'`^
M"B`*+45A8V@@;W!T:6]N(&UA>2!H879E(&%N(&5X=&5N9&5D(&1E<V-R:7!T
M:6]N(&EN"BT\='0O9&5S8RX\=F%R+V]P=&EO;B\O+B`@5&AI<R!S:&]U;&0@
M8F4@9F]R;6%T=&5D(&QI:V4@=&AE(&5X=&5N9&5D"BM%86-H(&UE=&AO9"!M
M87D@:&%V92!A;B!E>'1E;F1E9"!D97-C<FEP=&EO;B!I;@HK/'1T+V1E<V,N
M/'9A<B]M971H;V0O+RX@(%1H:7,@<VAO=6QD(&)E(&9O<FUA='1E9"!L:6ME
M('1H92!E>'1E;F1E9`H@9&5S8W)I<'1I;VX@<&%R="!O9B!A(#QT="]$97-C
M<FEP=&EO;B\@9FEE;&0@96YT<GD@/&5M+W-H:69T960@;VYE"B!C:&%R86-T
M97(@=&\@=&AE(&QE9G0O+@H@/'`^"DEN9&5X.B!I;F-L=61E+V1P:V<N:`H]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]"E)#4R!F:6QE.B`O=7-R+W-R8R]#5E,O
M9'!K9R]I;F-L=61E+V1P:V<N:"QV"G)E=')I979I;F<@<F5V:7-I;VX@,2XQ
M"F1I9F8@+74@+7(Q+C$@9'!K9RYH"BTM+2!I;F-L=61E+V1P:V<N:`DQ.3DX
M+S$P+S(U(#(R.C(U.C`W"3$N,0HK*RL@:6YC;'5D92]D<&MG+F@),3DY.2\P
M."\Q-2`Q,CHP.#HS-@I`0"`M,3$P+#@@*S$Q,"PQ,R!`0`H@("`@+RH@=7-E
M<B!D:60@;F]T(&5D:70@*B\@("`@>R`@("`@8V9O7VME97`L("`@("`@("`@
M("!C9F]?:6YS=&%L;"`@("!]+"`@("`@("`@7`H@("`@+RH@=7-E<B!D:60@
M961I="`@("`@*B\@("`@>R`@("`@8V9O7VME97`L("`@("`@("`@8V9O7W!R
M;VUP=%]K965P("!]"B`*+2-D969I;F4@05)#2$E615]&24Q%3D%-15]00514
M15).("(J+F1E8B(**R-D969I;F4@05)#2$E615]&24Q%3D%-15]0051415).
M("(J(B!$14)%6%0*(`HK+RH@:68@=&AI<R!F:6QE(&5X:7-T<R!A="!T:&4@
M=&]P(&QE=F5L(&]F(&%N(&%R8VAI=F4L(&1P:V<@+5(@=VEL;`HK("`@871T
M96UP="!T;R!P87)S92!F:6QE;F%M97,@=&\@96QI;6EN871E('5N=V%N=&5D
M(&9I;&5S('=I=&AO=70**R`@(&AA=FEN9R!T;R!O<&5N('1H96T@*B\**R-D
M969I;F4@1DY&3U)-051!4U-%4E1.04U%("(N8V%N+G!A<G-E+F9I;&5N86UE
M<R(**PH@(V1E9FEN92!"04-+14Y$("`@("`@(F1P:V<M9&5B(@H@(V1E9FEN
M92!34$Q)5%1%4B`@("`@(F1P:V<M<W!L:70B"B`C9&5F:6YE($U$-5-532`@
M("`@("`B;60U<W5M(@I`0"`M,38X+#8@*S$W,RPW($!`"B!I;G0@;5]F;W)K
M*'9O:60I.PH@=F]I9"!M7V1U<#(H:6YT(&]L9&9D+"!I;G0@;F5W9F0I.PH@
M=F]I9"!M7W!I<&4H:6YT(&9D<ULR72D["BMV;VED(&U?8VQO<V4H:6YT(&9D
M*3L*(`H@=F]I9"!C:&5C:W-U8G!R;V-E<G(H:6YT('-T871U<RP@8V]N<W0@
M8VAA<B`J9&5S8W)I<'1I;VXL(&EN="!S:6=P:7!E;VLI.PH@=F]I9"!W86ET
M<W5B<')O8RAP:61?="!P:60L(&-O;G-T(&-H87(@*F1E<V-R:7!T:6]N+"!I
M;G0@<VEG<&EP96]K*3L*26YD97@Z(&QI8B]M;&EB+F,*/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/0I20U,@9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O;&EB+VUL
M:6(N8RQV"G)E=')I979I;F<@<F5V:7-I;VX@,2XQ"F1I9F8@+74@+7(Q+C$@
M;6QI8BYC"BTM+2!L:6(O;6QI8BYC"3$Y.3@O,3`O,C4@,C(Z,C4Z,3<),2XQ
M"BLK*R!L:6(O;6QI8BYC"3$Y.3DO,#@O,34@,3(Z,#@Z,S8*0$`@+3$R,BPS
M("LQ,C(L.2!`0`H@("!I9B`H<B`A/2!P:60I('L@;VYE<G)?86)O<G0K*SL@
M;VAS:&ET92@B=V%I="!F;W(@)7,@9F%I;&5D(BQD97-C<FEP=&EO;BD[('T*
M("`@8VAE8VMS=6)P<F]C97)R*'-T871U<RQD97-C<FEP=&EO;BQS:6=P:7!E
M;VLI.PH@?0HK"BMV;VED(&U?8VQO<V4H:6YT(&9D*2!["BL@(&EF*"%C;&]S
M92AF9"DI(')E='5R;CL**R`@;VYE<G)?86)O<G0K*SL**R`@;VAS:&ET92@B
M9F%I;&5D('1O(&-L;W-E(&1E<V-R:7!T;W(B*3L**WT@(`I);F1E>#H@;6%I
M;B]A<F-H:79E<RYC"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T*4D-3(&9I;&4Z
M("]U<W(O<W)C+T-64R]D<&MG+VUA:6XO87)C:&EV97,N8RQV"G)E=')I979I
M;F<@<F5V:7-I;VX@,2XU"F1I9F8@+74@+7(Q+C4@87)C:&EV97,N8PHM+2T@
M;6%I;B]A<F-H:79E<RYC"3$Y.3DO,#<O,C(@,#`Z-3,Z,C$),2XU"BLK*R!M
M86EN+V%R8VAI=F5S+F,),3DY.2\P."\Q-2`Q,CHP.#HS-@I`0"`M-#(L-B`K
M-#(L."!`0`H@(VEN8VQU9&4@(FUA:6XN:"(*("-I;F-L=61E(")A<F-H:79E
M<RYH(@H@"BMS=&%T:6,@:6YT(&EG;F]R969I;&4H8V]N<W0@8VAA<B`J<&%T
M:"D["BL*(&EN="!F:6QE<V%V97-P86-K86=E*'-T<G5C="!F:6QE:6YL:7-T
M("IF:6QE+"!S=')U8W0@<&MG:6YF;R`J<&MG=&]B97-A=F5D+`H@("`@("`@
M("`@("`@("`@("`@("`@<W1R=6-T('!K9VEN9F\@*G!K9V)E:6YG:6YS=&%L
M;&5D*2!["B`@('-T<G5C="!P:V=I;F9O("ID:79P:V<L("IT:&ER9'!K9SL*
M0$`@+38X,"PQ-R`K-C@R+#4Q($!`"B`@('-T871I8R!S=')U8W0@=F%R8G5F
M(&9I;F1O=71P=70["B`@(&-O;G-T(&-H87(@*BIA<F=L:7-T.PH@("!C:&%R
M("IP.PHK("!I;G0@<&%R<V5N86UE<SL**R`@<W1R=6-T('9A<F)U9B!A<W-E
M<G1P871H.PHK("!I;G0@87-S97)T9F0["BL@(&-O;G-T(&-H87(@*F-O;G-T
M("IA<#L*(`H@("!C:&5C:W!A=&@H*3L**PHK("!M;V1S=&%T9&)?:6YI="AA
M9&UI;F1I<BP**R`@("`@("`@("`@("`@("`@9E]N;V%C="`_("`@("`@("`@
M("`@("`@("`@("`@;7-D8G)W7W)E861O;FQY"BL@("`@("`@("`@("`@("`Z
M(&-I<&%C=&EO;BT^87)G(#T](&%C=%]A=F%I;"`_(&US9&)R=U]W<FET90HK
M("`@("`@("`@("`@("`@.B!F8U]N;VYR;V]T(#\@("`@("`@("`@("`@("`@
M("!M<V1B<G=?=W)I=&4**R`@("`@("`@("`@("`@(#H@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@;7-D8G)W7VYE961S=7!E<G5S97(I.PH@("`*
M("`@:68@*&9?<F5C=7)S:79E*2!["B`@("`@"B`@("`@:68@*"$J87)G=BD*
M("`@("`@(&)A9'5S86=E*"(M+25S("TM<F5C=7)S:79E(&YE961S(&%T(&QE
M87-T(&]N92!P871H(&%R9W5M96YT(BQC:7!A8W1I;VXM/F]L;VYG*3L*("`@
M("`**R`@("!I9BAC:7!A8W1I;VXM/F%R9R`]/2!A8W1?:6YS=&%L;"!\?"!C
M:7!A8W1I;VXM/F%R9R`]/2!A8W1?=6YP86-K*2!["BL@("`@("`O*B!S964@
M:68@86QL('!A<G1S(&]F('1H92!A<F-H:79E(&%S<V5R=',@=&AA="!T:&4@
M9FEL96YA;65S"BL)(&%R92!S96YS:6)L92X@($EF('-O+"!W92!W:6QL('!A
M<G-E(&9I;&5N86UE<R!T;R!D:7-C87)D"BL)('1H:6YG<R!T:&%T(&%R92!O
M8G9I;W5S;'D@;F]T('=A;G1E9"X**PHK("`@("`@("`@5VAA="!W92!A8W1U
M86QL>2!C:&5C:R!F;W(@:7,@9FEL96YA;65S(&QI:V4**R`@("`@("`@("]V
M87(O;&EB+V1P:V<O;65T:&]D<R]M;G0O9&5B:6%N+V1I<W1S+W-T86)L92]M
M86EN+V)I;F%R>2UI,S@V+RYC86XN<&%R<V4N9FEL96YA;65S("HO"BL@("`@
M("!P87)S96YA;65S(#T@,3L**R`@("`@('9A<F)U9FEN:70H)F%S<V5R='!A
M=&@I.PHK("`@("`@9F]R("AA<#UA<F=V.R`J87`[(&%P*RLI('L**PDO*B!8
M6%@@=F%R8G5F<')I;G1F(&1O97-N)W0@=V]R:S\@*B\**PEV87)B=69R97-E
M="@F87-S97)T<&%T:"D["BL)=F%R8G5F861D<W1R*"9A<W-E<G1P871H+"`J
M87`I.PHK"79A<F)U9F%D9&,H)F%S<V5R='!A=&@L("<O)RD["BL)=F%R8G5F
M861D<W1R*"9A<W-E<G1P871H+"!&3D9/4DU!5$%34T525$Y!344I.PHK"79A
M<F)U9F%D9&,H)F%S<V5R='!A=&@L(#`I.PHK"6EF*"AA<W-E<G1F9"`](&]P
M96XH87-S97)T<&%T:"YB=68L($]?4D1/3DQ9*2D@/"`P*2!["BL)("!P87)S
M96YA;65S(#T@,#L**PD@(&)R96%K.PHK"7T**PEM7V-L;W-E*&%S<V5R=&9D
M*3L**R`@("`@('T**R`@("!](&5L<V4@>PHK("`@("`@<&%R<V5N86UE<R`]
M(#`["BL@("`@?0H@("`@(&U?<&EP92AP:2D["B`@("`@:68@*"$H9F,](&U?
M9F]R:R@I*2D@>PHM("`@("`@8V]N<W0@8VAA<B`J8V]N<W0@*F%P.PH@("`@
M("`@:6YT(&D["B`@("`@("!M7V1U<#(H<&E;,5TL,2D[(&-L;W-E*'!I6S!=
M*3L*("`@("`@(&9O<B`H:3TP+"!A<#UA<F=V.R`J87`[(&%P*RLL(&DK*RD[
M"D!`("TW,SDL-R`K-S<U+#<@0$`*("`@("!A<F=L:7-T/2!M7VUA;&QO8RAS
M:7IE;V8H8VAA<BHI*BAN9FEL97,K,2DI.PH@("`@('`](&9I;F1O=71P=70N
M8G5F.R!I/3`["B`@("`@=VAI;&4@*"IP*2!["BT@("`@("!A<F=L:7-T6VDK
M*UT]('`["BL@("`@("!I9B@A*'!A<G-E;F%M97,@)B8@:6=N;W)E9FEL92AP
M*2DI(&%R9VQI<W1;:2LK73T@<#L*("`@("`@('=H:6QE("@H8ST@*G`K*RD@
M(3T@,"D["B`@("`@?0H@("`@(&%R9VQI<W1;:5T](#`["D!`("TW-3,L,3(@
M*S<X.2PV($!`"B`@("`@"B`@('T*(`HM("!M;V1S=&%T9&)?:6YI="AA9&UI
M;F1I<BP*+2`@("`@("`@("`@("`@("`@9E]N;V%C="`_("`@("`@("`@("`@
M("`@("`@("`@;7-D8G)W7W)E861O;FQY"BT@("`@("`@("`@("`@("`Z(&-I
M<&%C=&EO;BT^87)G(#T](&%C=%]A=F%I;"`_(&US9&)R=U]W<FET90HM("`@
M("`@("`@("`@("`@.B!F8U]N;VYR;V]T(#\@("`@("`@("`@("`@("`@("!M
M<V1B<G=?=W)I=&4*+2`@("`@("`@("`@("`@(#H@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@;7-D8G)W7VYE961S=7!E<G5S97(I.PHM"B`@(&-U
M<G)E;G1T:6UE/2!T:6UE*#`I.PH@"B`@('9A<F)U9F%D9'-T<B@F9FYA;65V
M8BQI;G-T9&ER*3L@=F%R8G5F861D8R@F9FYA;65V8BPG+R<I.PI`0"`M-SDX
M+#0@*S@R."PQ,#@@0$`*("`@?0H@"B`@(&UO9'-T871D8E]S:'5T9&]W;B@I
M.PHK?0HK"BLO*B!D971E<FUI;F4@=VAE=&AE<B!W92!A<F4@:6YT97)E<W1E
M9"!I;B!T:&4@9FEL92!@<&%T:"<N("!)9B!W92!A<F4L"BL@("!W92!R971U
M<FX@,"X@($EF('=E('=A;G0@=&\@:6=N;W)E(&ET+"!W92!R971U<FX@,2X*
M*PHK("`@5V4@;VYL>2!D;R!T:&ES(&9O<B`M+75N<&%C:R!A;F0@+2UI;G-T
M86QL+"!S;R!T:&4@=&EM97,@=VAE;B!W90HK("`@=V%N="!T;R!I9VYO<F4@
M82!F:6QE(&%R92!A<R!F;VQL;W=S.@HK("`@"BL@("`J(&EF('1H92!P86-K
M86=E(&ES(&YO="!M87)K960@9F]R(&EN<W1A;&PN("!);B!T:&%T(&-A<V4@
M:70@:7,@;F]T"BL@("`@(&]F(&EN=&5R97-T('1O('5S+B`@*$EN(&9A8W0@
M=V4@<&QA>2!I="!A(&)I="!S869E<B!T:&%N('1H:7,L"BL@("`@('-E92!B
M96QO=RXI"BL**R`@("H@:68@=&AE('!A8VMA9V4@:7,@;6%R:V5D(&%S(&EN
M<W1A;&P@8G5T('1H92!V97)S:6]N(&EN('1H90HK("`@("!F:6QE<WES=&5M
M(&ES(&YO="!A<R!U<"!T;R!D871E(&%S('1H92!I;G-T86QL960@=F5R<VEO
M;BX@($EN"BL@("`@('!R86-T:6-E('=H870@=V4@9&\@:7,@=V4@;VYL>2!I
M9VYO<F4@=&AE(&9I;&4@:68@=&AE(&%V86EL86)L90HK("`@("!V97)S:6]N
M(&YU;6)E<B!I<R!I9&5N=&EC86P@=&\@=&AE(&EN<W1A;&QE9"!V97)S:6]N
M(&YU;6)E<BX**PHK("`@5&AE<F4@:7,@82!P<F]B;&5M(&AE<F4Z(&5P;V-H
M<RX@($5P;V-H<R!A<F4@<F5C;W)D960@:6X@=&AE('-T871U<PHK("`@9FEL
M92!A;F0@879A:6QA8FQE(&9I;&4L(&)U="!D;R!N;W0@='5R;B!U<"!I;B!F
M:6QE;F%M97,N("!4:&4**R`@('-O;'5T:6]N(&%D;W!T960@:7,@=&\@<W1R
M:7`@97!O8VAS('=H97)E=F5R('=E('-E92!T:&5M+"!A;F0**R`@(&EN=')O
M9'5C92!T:&4@<G5L92!T:&%T('1W;R!V97)S:6]N<R!O9B!A('!A8VMA9V4@
M35535"!.3U0@9&EF9F5R"BL@("!O;FQY(&EN('1H96ER(&5P;V-H+@HK("`@
M("`**R`@("HO"BL**W-T871I8R!I;G0@:6=N;W)E9FEL92AC;VYS="!C:&%R
M("IP871H*2!["BL@(&-O;G-T(&-H87(@*G!T<CL**R`@8V]N<W0@8VAA<B`J
M9FEL93L)"2\J(&9I;&5N86UE("HO"BL@(&-H87(@*G9E<G-I;VXL("IP86-K
M86=E.PDO*B!V97)S:6]N(&YU;6)E<B`K('!A8VMA9V4@;F%M92`J+PHK("!S
M=')U8W0@<&MG:6YF;R`J<&MG.PD)+RH@<&%C:V%G92!I;F9O('-T<G5C='5R
M92`J+PHK("!S=')U8W0@=F5R<VEO;G)E=FES:6]N(')V97)S:6]N.R`O*B!P
M87)S960@=F5R<VEO;B!N=6UB97(@*B\**PHK("`O*B!F:6YD('1H92!F:6QE
M;F%M92`J+PHK("!I9B`H(2AF:6QE(#T@<W1R<F-H<BAP871H+"`G+R<I*2D@
M9FEL92`]('!A=&@["BL@(&5L<V4@9FEL92LK.PHK"BL@("\J(&9I;F0@+6]U
M9VAT+2!T;R!G=6%R86YT964@=&AI<R!F;W(@=7,L(&)U="!W92!C:&5C:R!I
M="!A;GEW87D@*B\**R`@:68@*'-T<FQE;BAF:6QE*2`\('-T<FQE;BA$14)%
M6%0I"BL@("`@("!\?"!S=')C;7`H9FEL92`K('-T<FQE;BAF:6QE*2`M('-T
M<FQE;BA$14)%6%0I+"!$14)%6%0I*0HK("`@(')E='5R;B`P.PHK("`**R`@
M+RH@:68@=&AE(&9I;&5N86UE(&1O97-N)W0@;&]O:R!L:6ME('1H92!R:6=H
M="!S:&%P92P@=V4@;&]O:R!M;W)E"BL@("`@(&-A<F5F=6QL>2!A="!I="`J
M+PHK("!I9B`H(2AP='(@/2!S=')R8VAR*&9I;&4L("=?)RDI*2!R971U<FX@
M,#L**PHK("`O*B!E>'1R86-T('1H92!P86-K86=E(&YA;64@*B\**R`@<&%C
M:V%G92`](&U?;6%L;&]C*'!T<B`M(&9I;&4@*R`Q*3L**R`@;65M8W!Y*'!A
M8VMA9V4L(&9I;&4L('!T<B`M(&9I;&4I.PHK("!P86-K86=E6W!T<B`M(&9I
M;&5=(#T@,#L**PHK("`O*B!E>'1R86-T('1H92!V97)S:6]N(&YU;6)E<B`J
M+PHK("!P='(K*SL**R`@=F5R<VEO;B`](&U?;6%L;&]C*'-T<FQE;BAP='(I
M*3L**R`@;65M8W!Y*'9E<G-I;VXL('!T<BP@<W1R;&5N*'!T<BD@+2!S=')L
M96XH1$5"15A4*2D["BL@('9E<G-I;VY;<W1R;&5N*'!T<BD@+2!S=')L96XH
M1$5"15A4*5T@/2`P.PHK"BL@("\J(&9I;F0@=&AE('!A8VMA9V4@:6X@=&AE
M('-T871U<R!F:6QE("HO"BL@('!K9R`](&9I;F1P86-K86=E*'!A8VMA9V4I
M.PHK"BL@("\J('-E92!W:&%T('1H92!D97-I<F5D('-T871E(&ES("HO"BL@
M('-W:71C:"AP:V<M/G=A;G0I('L**R`@("`O*B!I9B!T:&4@<&%C:V%G92!I
M<R!O;B!H;VQD(&]R(&ES('1O(&)E(&1E:6YS=&%L;&5D("AO<B!P=7)G960I
M"BL@("`@("`@=&AE;B!W92!A<F4@;F]T(&EN=&5R97-T960@:6X@:70N("HO
M"BL@(&-A<V4@=V%N=%]H;VQD.@HK("!C87-E('=A;G1?9&5I;G-T86QL.@HK
M("!C87-E('=A;G1?<'5R9V4Z"BL@(&-A<V4@=V%N=%]U;FMN;W=N.@HK("`@
M(&=O=&\@:6=N;W)E7W!A8VMA9V4["BL@("`@+RH@:68@=&AE(&1E<VER960@
M<W1A=&4@:7,@=&AA="!T:&4@<&%C:V%G92!B92!I;G-T86QL960L('=E(&%R
M90HK("`@("`@(&EN=&5R97-T960@*B\**R`@8V%S92!W86YT7VEN<W1A;&PZ
M"BL@("`@8G)E86L["BL@("`@+RH@:68@=&AE(&1E<VER960@<W1A=&4@:7,@
M86YY=&AI;F<@96QS92!W92!P;&%Y(&ET('-A9F4@*B\**R`@9&5F875L=#H*
M*R`@("!G;W1O(&1O;G1?:6=N;W)E7W!A8VMA9V4["BL@('T**PHK("`O*B!I
M9B!W92!G970@:&5R92!T:&5N('1H92!D97-I<F5D('-T871E(&ES('1H870@
M=&AE('!A8VMA9V4@8F4**R`@("`@:6YS=&%L;&5D+B`@3F]W('=E(&AA=F4@
M82!L;V]K(&%T('1H92!V97)S:6]N(&YU;6)E<BX@("HO"BL**R`@+RH@:68@
M=&AE<F4G<R!N;R!I;G-T86QL960@=F5R<VEO;B!N=6UB97(L('1H96X@=V4@
M9&5F:6YI=&5L>2!W86YT"BL@("`@('1O(&QO;VL@870@=&AI<R!F:6QE("HO
M"BL@(&EF*"%P:V<M/F-O;F9I9W9E<G-I;VXN=F5R<VEO;B!\?"`A<&MG+3YC
M;VYF:6=V97)S:6]N+G)E=FES:6]N*0HK("`@(&=O=&\@9&]N=%]I9VYO<F5?
M<&%C:V%G93L**PHK("`O*B!P87)S92!T:&4@=F5R<VEO;B!N=6UB97(@:6X@
M=&AE(&9I;&5N86UE("HO"BL@(&EF*'!A<G-E=F5R<VEO;B@F<G9E<G-I;VXL
M('9E<G-I;VXI*0HK("`@(&=O=&\@9&]N=%]I9VYO<F5?<&%C:V%G93L)+RH@
M8V%N)W0@<&%R<V4@=F5R<VEO;B!I;B!F:6QE;F%M92`J+PHK("`**R`@+RH@
M:68@=&AE('9E<G-I;VX@:7,@=&AE('-A;64L('=E(&EG;F]R92!T:&4@<&%C
M:V%G92`J+PHK("!I9BAS=')C;7`H<G9E<G-I;VXN=F5R<VEO;BP@<&MG+3YC
M;VYF:6=V97)S:6]N+G9E<G-I;VXI"BL@("`@('Q\('-T<F-M<"AR=F5R<VEO
M;BYR979I<VEO;BP@<&MG+3YC;VYF:6=V97)S:6]N+G)E=FES:6]N*2D**R`@
M("!G;W1O(&1O;G1?:6=N;W)E7W!A8VMA9V4["BL@("\J(%A86"!W92!I9VYO
M<F4@=&AE(&5P;V-H(&9O<B!N;W<@*B\**R`@"BL@:6=N;W)E7W!A8VMA9V4Z
M"BL@(&9R964H<&%C:V%G92D["BL@(&9R964H=F5R<VEO;BD["BL@(')E='5R
M;B`Q.PHK("`**V1O;G1?:6=N;W)E7W!A8VMA9V4Z"BL@(&9R964H<&%C:V%G
M92D["BL@(&9R964H=F5R<VEO;BD["BL@(')E='5R;B`P.PH@?0I);F1E>#H@
M;65T:&]D<R]D:7-K+FEN<W1A;&P*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0I2
M0U,@9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O;65T:&]D<R]D:7-K+FEN<W1A
M;&PL=@IR971R:65V:6YG(')E=FES:6]N(#$N,@ID:69F("UU("UR,2XR(&1I
M<VLN:6YS=&%L;`HM+2T@;65T:&]D<R]D:7-K+FEN<W1A;&P),3DY.2\P-R\R
M,B`P,#HQ,CHQ,@DQ+C(**RLK(&UE=&AO9',O9&ES:RYI;G-T86QL"3$Y.3DO
M,#@O,34@,3(Z,#@Z,S8*0$`@+3<L."`K-RPQ,"!`0`H@"B!C9"`B)'9A<F1I
M<B]M971H;V1S+V1I<VLB"B`**R,@<F5A9"!O<'1I;VYS('-E="!B>2!D:7-K
M+G-E='5P"B`N("XO<VAV87(N)&]P=&EO;@H@"BLC('5N;6]U;G0@9FEL92!S
M>7-T96T@;VX@97AI=`H@>&ET/3$*('1R87`@)PH@"6EF(%L@+6X@(B1U;6]U
M;G0B(%T*0$`@+3$X+#8@*S(P+#<@0$`*(`EE>&ET("1X:70*("<@,`H@"BLC
M(&UO=6YT(&9I;&4@<WES=&5M"B!I9B!;("UN("(D<%]B;&]C:V1E=B(@70H@
M=&AE;@H@"75M;W5N=#TB)'!?;6]U;G1P;VEN="(*0$`@+3,P+#8@*S,S+#$Q
M($!`"B`);6]U;G0@+7)T(&YF<R`B)'!?;F9S(B`M;R!N;W-U:60L;F]D978@
M(B1P7VUO=6YT<&]I;G0B"B!F:0H@"BLC(&AA;F1L92!P<F5D97!E;F1S"BLC
M(&1P:V<@+2UP<F5D97`M<&%C:V%G92!E>&ET<R!A<R!F;VQL;W=S.@HK(R`@
M(#`@<')I;G1E9"!T:&4@;F%M92!O9B!T:&4@;F5X="!P86-K86=E('1O(&EN
M<W1A;&P**R,@("`Q(&YO(&UO<F4@<')E9&5P96YD<R!T;R!B92!S871I<V9I
M960**R,@("`R(&5R<F]R"B!P<F5D97`](B1V87)D:7(O<')E9&5P+7!A8VMA
M9V4B"B!W:&EL92!T<G5E"B!D;PI`0"`M,3`V+#8@*S$Q-"PX($!`"B`)"61I
M92`B9F%I;&5D('1O(&5X96,@9'!K9SH@)"%<;B(["B`))R`M+2`B)'!?;6]U
M;G1P;VEN="1P7VUA:6Y?8FEN87)Y(B`B)'!R961E<"(*(&1O;F4**PHK(R!D
M;R!T:&4@;6%I;B!I;G-T86QL"B`*(&9O<B!F(&EN(&UA:6X@8W1B(&YF(&YU
M<R!L8VP*(&1O"DEN9&5X.B!M971H;V1S+VAD+G-E='5P"CT]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T*4D-3(&9I;&4Z("]U<W(O<W)C+T-64R]D<&MG+VUE=&AO
M9',O:&0N<V5T=7`L=@IR971R:65V:6YG(')E=FES:6]N(#$N,0ID:69F("UU
M("UR,2XQ(&AD+G-E='5P"BTM+2!M971H;V1S+VAD+G-E='5P"3$Y.3@O,3`O
M,C4@,C(Z,C8Z,#4),2XQ"BLK*R!M971H;V1S+VAD+G-E='5P"3$Y.3DO,#@O
M,34@,3(Z,#@Z,S8*0$`@+3$L-"`K,2PT($!`"BTC(2]B:6XO<&5R;`HK(R$O
M=7-R+V)I;B]P97)L"B`C"B`C"4-O<'ER:6=H="`H0RD@,3DY-"!#87)L(%-T
B<F5E=&5R(#QS=')E971E<D!C864N=VES8RYE9'4^"B`C"@``
`
end


Reply to: