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

another 10% speedup to dpkg -S



This one works by eliminating string copies while reading *.list
files.  I get about 10% speedup on `dpkg -S /bin/ls'.  With my
previous patch this should bring a total improvement of over 30%.

I tried implementing the same thing using mmap() and MAP_PRIVATE
rather than read(), but it wasn't as fast.  In retrospect this is not
surprising: mmap() has to do lots more work updating page tables
(there are over 800 files to map on mine) but you still get the
kernel-mode copy that read() has to do, as we write into the mapped
area.

The patch creates a flag parameter to findnamenode() which indicate
whether it is allowed avoid copying the filename; each call to
findnamenode() is modified.  There may be some cases where the copy
can be avoided, but (in this patch) isn't.

The patch also contains a comment describing the structure of the
filename list for the low-memory version.

ttfn/rjk

begin 644 fnn.diff
M26YD97@Z("YC=G-I9VYO<F4*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0I20U,@
M9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O+F-V<VEG;F]R92QV"G)E=')I979I
M;F<@<F5V:7-I;VX@,2XS"F1I9F8@+74@+7(Q+C,@+F-V<VEG;F]R90HM+2T@
M+F-V<VEG;F]R90DQ.3DY+S`W+S(U(#$U.C(X.C,V"3$N,PHK*RL@+F-V<VEG
M;F]R90DQ.3DY+S`W+S(V(#`Y.C$U.C0U"D!`("TT+#,@*S0L-"!`0`H@8V]N
M9FEG+G-T871U<PH@=F5R<VEO;BYH+FYE=PH@8G5I;&0**V=M;VXN;W5T"DEN
M9&5X.B!M86EN+V%R8VAI=F5S+F,*/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;6%I;B]A<F-H:79E<RYC+'8*
M<F5T<FEE=FEN9R!R979I<VEO;B`Q+C4*9&EF9B`M=2`M<C$N-2!A<F-H:79E
M<RYC"BTM+2!M86EN+V%R8VAI=F5S+F,),3DY.2\P-R\R,B`P,#HU,SHR,0DQ
M+C4**RLK(&UA:6XO87)C:&EV97,N8PDQ.3DY+S`W+S(V(#`Y.C$U.C0V"D!`
M("TR,C<L-R`K,C(W+#<@0$`*("`@("H@8F5E;B!S=')I<'!E9"!B>2!487)%
M>'1R86-T;W(@*&QI8B]T87)F;BYC*2X*("`@("HO"B`@(&YI9F0](&U?;6%L
M;&]C*'-I>F5O9BAS=')U8W0@9FEL96EN;&ES="DI.PHM("!N:69D+3YN86UE
M;F]D93T@9FEN9&YA;65N;V1E*'1I+3Y.86UE*3L**R`@;FEF9"T^;F%M96YO
M9&4](&9I;F1N86UE;F]D92AT:2T^3F%M92P@,"D["B`@(&YI9F0M/FYE>'0]
M(#`[("IT8RT^;F5W9FEL97-P/2!N:69D.R!T8RT^;F5W9FEL97-P/2`F;FEF
M9"T^;F5X=#L*("`@;FEF9"T^;F%M96YO9&4M/F9L86=S('P](&9N;F9?;F5W
M7VEN87)C:&EV93L*(`I);F1E>#H@;6%I;B]E;G%U:7)Y+F,*/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/0I20U,@9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O;6%I
M;B]E;G%U:7)Y+F,L=@IR971R:65V:6YG(')E=FES:6]N(#$N,PID:69F("UU
M("UR,2XS(&5N<75I<GDN8PHM+2T@;6%I;B]E;G%U:7)Y+F,),3DY.2\P-R\R
M-2`Q-3HR.#HT,`DQ+C,**RLK(&UA:6XO96YQ=6ER>2YC"3$Y.3DO,#<O,C8@
M,#DZ,34Z-#8*0$`@+3,U.2PW("LS-3DL-R!`0`H@("`@("`@=&AI<V%R9ST@
M=F(N8G5F.PH@("`@('T*("`@("!I9B`H<W1R8W-P;BAT:&ES87)G+"(J6S]<
M7"(I(#T]('-T<FQE;BAT:&ES87)G*2D@>PHM("`@("`@;F%M96YO9&4](&9I
M;F1N86UE;F]D92AT:&ES87)G*3L**R`@("`@(&YA;65N;V1E/2!F:6YD;F%M
M96YO9&4H=&AI<V%R9RP@,"D["B`@("`@("!F;W5N9"`K/2!S96%R8VAO=71P
M=70H;F%M96YO9&4I.PH@("`@('T@96QS92!["B`@("`@("!I=#T@:71E<F9I
M;&5S=&%R="@I.PI);F1E>#H@;6%I;B]F:6QE<V1B+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;6%I;B]F
M:6QE<V1B+F,L=@IR971R:65V:6YG(')E=FES:6]N(#$N-`ID:69F("UU("UR
M,2XT(&9I;&5S9&(N8PHM+2T@;6%I;B]F:6QE<V1B+F,),3DY.2\P-R\R,B`P
M,CHT,SHU-@DQ+C0**RLK(&UA:6XO9FEL97-D8BYC"3$Y.3DO,#<O,C8@,#DZ
M,34Z-#8*0$`@+30W+#$W("LT-RPR,"!`0`H@"B!S=&%T:6,@:6YT('-A:61R
M96%D/3`["B`**R\J(&QO860@=&AE(&QI<W0@;V8@9FEL97,@:6X@=&AI<R!P
M86-K86=E(&EN=&\@;65M;W)Y+"!O<B!U<&1A=&4@=&AE"BL@("!L:7-T(&EF
M(&ET(&ES('1H97)E(&)U="!S=&%L92`J+PHK"B!V;VED(&5N<W5R95]P86-K
M86=E9FEL97-?879A:6QA8FQE*'-T<G5C="!P:V=I;F9O("IP:V<I('L*("`@
M<W1A=&EC('-T<G5C="!V87)B=68@9FYV8CL*+2`@<W1A=&EC(&-H87(@<W1D
M:6]B=69;.#$Y,ET["B`@(`H@("!&24Q%("IF:6QE.PH@("!C;VYS="!C:&%R
M("IF:6QE;&ES=&9I;&4["B`@('-T<G5C="!F:6QE:6YL:7-T("HJ;&5N9'`L
M("IN97=E;G0L("IC=7)R96YT.PH@("!S=')U8W0@9FEL97!A8VMA9V5S("IP
M86-K86=E<VQU;7`["BT@(&EN="!S96%R8V@L(&9I;F1L87-T+"!P=71A="P@
M;#L*+2`@8VAA<B`J=&AE9FEL96YA;64["BT@(&-H87(@;&EN96)U9ELQ,#(T
M73L**R`@:6YT('-E87)C:"P@9FEN9&QA<W0L('!U=&%T.PHK("!S=')U8W0@
M<W1A="!S=&%T7V)U9CL**R`@8VAA<B`J;&]A9&5D7VQI<W0L("IL;V%D961?
M;&ES=%]E;F0L("IT:&ES;&EN92P@*FYE>'1L:6YE+"`J<'1R.PHK("!S<VEZ
M95]T(&)Y=&5S+"!R96%D9&5N.PH@"B`@(&EF("AP:V<M/F-L:65N=&1A=&$@
M)B8@<&MG+3YC;&EE;G1D871A+3YF:6QE<VQI<W1V86QI9"D@<F5T=7)N.PH@
M("!E;G-U<F5?<&%C:V%G95]C;&EE;G1D871A*'!K9RD["D!`("TQ,C<L-#4@
M*S$S,"PT-R!`0`H@("!]"B`*("`@<'5S:%]C;&5A;G5P*&-U7V-L;W-E9FEL
M92QE:&9L86=?8F]M8F]U="P@,"PP+"`Q+"AV;VED*BEF:6QE*3L*+2`@"BT@
M(&EF("AS971V8G5F*&9I;&4L<W1D:6]B=68L7TE/1D)&+'-I>F5O9BAS=&1I
M;V)U9BDI*0HM("`@(&]H<VAI=&4H(G5N86)L92!T;R!S970@8G5F9F5R:6YG
M(&]N(&`E+C(U,',G(BQF:6QE;&ES=&9I;&4I.PHK"BL@(&EF*&9S=&%T*&9I
M;&5N;RAF:6QE*2P@)G-T871?8G5F*2D**R`@("!O:'-H:71E*")U;F%B;&4@
M=&\@<W1A="!F:6QE<R!L:7-T(&9I;&4@9F]R('!A8VMA9V4@8"4N,C4P<R<B
M+'!K9RT^;F%M92D["BL@("\J(%A86"!N9FUA;&QO8R@I(&%S('=R:71T96X@
M9W5A<F%N=&5E<R!N;W0@=&\@<F5T=7)N($Y53$P@979E;B!I9@HK("`@("!S
M:7IE/3`L(&ES('1H:7,@86QW87ES(&=O:6YG('1O(&)E('1R=64_("HO"BL@
M(&QO861E9%]L:7-T(#T@;F9M86QL;V,H<W1A=%]B=68N<W1?<VEZ92D["BL@
M(&QO861E9%]L:7-T7V5N9"`](&QO861E9%]L:7-T("L@<W1A=%]B=68N<W1?
M<VEZ93L**R`@+RH@<W1D:6\@:7,@86X@97AT<F$@8V]P>2P@:&5N8V4@=V4@
M=7-E(')E860H*2`J+PHK("!R96%D9&5N(#T@,#L)"0DO*B!W<FET92T^=W)I
M='1E;BP@<F5A9"T^<F5A9&1E;B`J+PHK("!W:&EL92`H<F5A9&1E;B`\('-T
M871?8G5F+G-T7W-I>F4I('L**R`@("!B>71E<R`](')E860H9FEL96YO*&9I
M;&4I+`HK"0D@;&]A9&5D7VQI<W0@*R!R96%D9&5N+"!S=&%T7V)U9BYS=%]S
M:7IE("T@<F5A9&1E;BD["BL@("`@:68@*&)Y=&5S(#P@,"D@>PHK("`@("`@
M:68@*&5R<FYO(#T]($5)3E12*2!C;VYT:6YU93L**R`@("`@(&]H<VAI=&4H
M(G5N86)L92!T;R!R96%D(&9I;&5S(&QI<W0@9F]R('!A8VMA9V4@8"4N,C4P
M<R<B+'!K9RT^;F%M92D["BL@("`@?0HK("`@(&EF("@A8GET97,I"BL@("`@
M("!O:'-H:70H(G5N97AP96-T960@96YD(&]F(&9I;&4@:6X@9FEL97,@;&ES
M="!F;W(@<&%C:V%G92!@)2XR-3!S)R(L<&MG+3YN86UE*3L**R`@("!R96%D
M9&5N("L](&)Y=&5S.PHK("!]"B`@(`H@("!L96YD<#T@)G!K9RT^8VQI96YT
M9&%T82T^9FEL97,["BT@('9A<F)U9G)E<V5T*"9F;G9B*3L*+2`@=VAI;&4@
M*&9G971S*&QI;F5B=68L<VEZ96]F*&QI;F5B=68I+&9I;&4I*2!["BT@("`@
M+RH@5&AI<R!I<R!A('9E<GD@:6UP;W)T86YT(&QO;W`L(&%N9"!I="!I<R!T
M:&5R969O<F4@<F%T:&5R(&UE<W-Y+@HM("`@("`J(%=E(&)R96%K('1H92!V
M87)B=68@86)S=')A8W1I;VX@979E;B!M;W)E('1H86X@=7-U86PL(&%N9"!W
M90HM("`@("`J(&%V;VED(&-O<'EI;F<@=VAE<F4@<&]S<VEB;&4N"BT@("`@
M("HO"BT@("`@;#T@<W1R;&5N*&QI;F5B=68I.PHM("`@(&EF("AL(#T](#`I
M(&]H<VAI="@B9F=E=',@9V%V92!A;B!E;7!T>2!N=6QL+71E<FUI;F%T960@
M<W1R:6YG(&9R;VT@8"4N,C4P<R<B+`HM("`@("`@("`@("`@("`@("`@("`@
M("!F:6QE;&ES=&9I;&4I.PHM("`@(&PM+3L*+2`@("!I9B`H;&EN96)U9EML
M72`A/2`G7&XG*2!["BT@("`@("!V87)B=69A9&1S='(H)F9N=F(L;&EN96)U
M9BD["BT@("`@("!C;VYT:6YU93L*+2`@("!](&5L<V4@:68@*"%F;G9B+G5S
M960@)B8@;#XP("8F(&QI;F5B=69;;"TQ72`A/2`G+R<I('L@+RH@9F%S="!P
M871H("HO"BT@("`@("!L:6YE8G5F6VQ=/2`P.PHM("`@("`@=&AE9FEL96YA
M;64](&QI;F5B=68["BT@("`@?2!E;'-E('L*+2`@("`@(&EF("AL/C`@)B8@
M;&EN96)U9EML+3%=(#T]("<O)RD@;"TM.R`O*B!S=')I<"!T<F%I;&EN9R!S
M;&%S:&5S("HO"BT@("`@("!L:6YE8G5F6VQ=/2`P.PHM("`@("`@=F%R8G5F
M861D<W1R*"9F;G9B+&QI;F5B=68I.PHM("`@("`@=F%R8G5F861D8R@F9FYV
M8BPP*3L*+2`@("`@(&9N=F(N=7-E9#T@,#L*+2`@("`@('1H969I;&5N86UE
M/2!F;G9B+F)U9CL*+2`@("!]"BT@("`@:68@*"$J=&AE9FEL96YA;64I"BL@
M('1H:7-L:6YE(#T@;&]A9&5D7VQI<W0["BL@('=H:6QE("AT:&ES;&EN92`\
M(&QO861E9%]L:7-T7V5N9"D@>PHK("`@(&EF("@A*'!T<B`](&UE;6-H<BAT
M:&ES;&EN92P@)UQN)RP@;&]A9&5D7VQI<W1?96YD("T@=&AI<VQI;F4I*2D@
M"BL@("`@("!O:'-H:70H(F9I;&5S(&QI<W0@9FEL92!F;W(@<&%C:V%G92!@
M)2XR-3!S)R!I<R!M:7-S:6YG(&9I;F%L(&YE=VQI;F4B+'!K9RT^;F%M92D[
M"BL@("`@+RH@=VAE<F4@=&\@<W1A<G0@;F5X="!T:6UE(&%R;W5N9"`J+PHK
M("`@(&YE>'1L:6YE(#T@<'1R("L@,3L**R`@("`O*B!S=')I<"!T<F%I;&EN
M9R`B+R(@*B\**R`@("!I9B`H<'1R(#X@=&AI<VQI;F4@)B8@<'1R6RTQ72`]
M/2`G+R<I('!T<BTM.PHK("`@("\J(&%D9"!T:&4@9FEL92!T;R!T:&4@;&ES
M="`J+PHK("`@(&EF("AP='(@/3T@=&AI<VQI;F4I"B`@("`@("!O:'-H:70H
M(F9I;&5S(&QI<W0@9FEL92!F;W(@<&%C:V%G92!@)2XR-3!S)R!C;VYT86EN
M<R!E;7!T>2!F:6QE;F%M92(L<&MG+3YN86UE*3L**R`@("`J<'1R(#T@,#L*
M("`@("!N97=E;G0](&YF;6%L;&]C*'-I>F5O9BAS=')U8W0@9FEL96EN;&ES
M="DI.PHM("`@(&YE=V5N="T^;F%M96YO9&4](&9I;F1N86UE;F]D92AT:&5F
M:6QE;F%M92D["BL@("`@;F5W96YT+3YN86UE;F]D93T@9FEN9&YA;65N;V1E
M*'1H:7-L:6YE+"!F;FY?;F]C;W!Y*3L*("`@("!N97=E;G0M/FYE>'0](#`[
M"B`@("`@*FQE;F1P/2!N97=E;G0["B`@("`@;&5N9'`]("9N97=E;G0M/FYE
M>'0["BL@("`@=&AI<VQI;F4@/2!N97AT;&EN93L*("`@?0HM("!I9B`H9F5R
M<F]R*&9I;&4I*0HM("`@(&]H<VAI=&4H(F5R<F]R(')E861I;F<@9FEL97,@
M;&ES="!F:6QE(&9O<B!P86-K86=E(&`E+C(U,',G(BQP:V<M/FYA;64I.PH@
M("!P;W!?8VQE86YU<"AE:&9L86=?;F]R;6%L=&ED>2D[("\J(&9I;&4](&9O
M<&5N*"D@*B\*("`@:68@*&9C;&]S92AF:6QE*2D*("`@("!O:'-H:71E*")E
M<G)O<B!C;&]S:6YG(&9I;&5S(&QI<W0@9FEL92!F;W(@<&%C:V%G92!@)2XR
M-3!S)R(L<&MG+3YN86UE*3L*0$`@+3,U,BPW("LS-3<L-R!`0`H@("`@(&EF
M("AL(#T](#`I(&]H<VAI="@B9F=E=',@9V%V92!A;B!E;7!T>2!S=')I;F<@
M9G)O;2!D:79E<G-I;VYS(%MI72(I.PH@("`@(&EF("AL:6YE8G5F6RTM;%T@
M(3T@)UQN)RD@;VAS:&ET*")D:79E<G-I;VYS(&9I;&4@:&%S('1O;RUL;VYG
M(&QI;F4@;W(@14]&(%MI72(I.PH@("`@(&QI;F5B=69;;%T](#`["BT@("`@
M;VEA;'1N86UE+3YC86UE9G)O;3T@9FEN9&YA;65N;V1E*&QI;F5B=68I.PHK
M("`@(&]I86QT;F%M92T^8V%M969R;VT](&9I;F1N86UE;F]D92AL:6YE8G5F
M+"`P*3L*("`@("!O:6%L=&YA;64M/G5S96EN<W1E860](#`["B`@("`@"B`@
M("`@:68@*"%F9V5T<RAL:6YE8G5F+'-I>F5O9BAL:6YE8G5F*2QF:6QE*2D*
M0$`@+3,V,BPW("LS-C<L-R!`0`H@("`@(&EF("AL(#T](#`I(&]H<VAI="@B
M9F=E=',@9V%V92!A;B!E;7!T>2!S=')I;F<@9G)O;2!D:79E<G-I;VYS(%MI
M:5TB*3L*("`@("!I9B`H;&EN96)U9ELM+6Q=("$]("=<;B<I(&]H<VAI="@B
M9&EV97)S:6]N<R!F:6QE(&AA<R!T;V\M;&]N9R!L:6YE(&]R($5/1B!;:6E=
M(BD["B`@("`@;&EN96)U9EML73T@,#L*+2`@("!O:6-O;G1E<W0M/G5S96EN
M<W1E860](&9I;F1N86UE;F]D92AL:6YE8G5F*3L**R`@("!O:6-O;G1E<W0M
M/G5S96EN<W1E860](&9I;F1N86UE;F]D92AL:6YE8G5F+"`P*3L*("`@("!O
M:6-O;G1E<W0M/F-A;65F<F]M/2`P.PH@("`@(`H@("`@(&EF("@A9F=E=',H
M;&EN96)U9BQS:7IE;V8H;&EN96)U9BDL9FEL92DI"D!`("TT,3@L-B`K-#(S
M+#(V($!`"B`*("\J*BH@1&%T82!S=')U8W1U<F5S(&9O<B!L;W<M;65M;W)Y
M+69O;W1P<FEN="!I;BUC;W)E(&9I;&5S(&1A=&%B87-E("HJ*B\*(`HK+RH@
M=&AE(&ED96$@:7,@=&AA="!Y;W4@:&%V92!A('1R964@<W1R=6-T=7)E(&EN
M(&UE;6]R>2!W:&EC:"!H87,@=&AE"BL@("!S86UE('-T<G5C='5R92!A<R!T
M:&4@;F%M97,@=&AE;7-E;'9E<RX**PHK("`@16%C:"!N;V1E(&EN('1H92!T
M<F5E(&=E=',@86X@9F1I<FYO9&4N("!4:&ES(&UA>2!H879E(&$**R`@(&9I
M;&5N86UE;F]D92!A='1A8VAE9"!T;R!I="`H:68@=&AE<F4@:7,@<F5A;&QY
M(&$@9FEL96YA;64**R`@(&-O<G)E<W!O;F1I;F<@=&\@=&AE('!A=&@@9&]W
M;B!T:&4@=')E92!T;R!G970@:&5R92D@86YD(&%N"BL@("!F9&ER96YT<R`H
M:68@=&AE<F4@:7,@86YY=&AI;F<@8F5L;W<@=&AI<R!P;VEN="XI"BL**R`@
M(%1H92!F9&ER96YT<R!S=')U8W1U<F4@;&ES=',@=&AE(&5N=')I97,@:6X@
M82!D:7)E8W1O<GDN("!)9B!T:&5R90HK("`@:7,@;VYL>2`Q(&YO9&4@8F5L
M;W<@=7,@=&AE;B!T:&5R92=S(&IU<W0@;VYE(&9D:7)E;G1S('=I=&@@80HK
M("`@<VEN9VQE(&5N=')Y.R!I9B!T:&5R92!A<F4@;6]R92!T:&5N('1H96X@
M;F5X="!O;F4@*&%S(&1E9FEN960@8GD**R`@('1H92`G;6]R92<@9FEE;&0I
M(&-O;G1A:6YS('1W;R!E;G1R:65S.R!T:&4@;F5X="!F;W5R.R!E=&,N"BL*
M*R`@(%1H:7,@9&]U8FQI;F<@969F96-T(&ES(&5N9F]R8V5D(&)Y(&9I;F1N
M86UE;F]W7VQO=R@I(')A=&AE<B!T:&%N"BL@("!B>2!A(&-O=6YT(&9I96QD
M(&EN('1H92!S=')U8W1U<F4N"BL**R`@(#$Y.3DM,#<M,C8@4DI+"BL@("`*
M*RHO"BL*('-T<G5C="!F9&ER96YT<R!["B`@('-T<G5C="!F9&ER96YT<R`J
M;6]R93L*("`@<W1R=6-T('L@8V]N<W0@8VAA<B`J8V]M<&]N96YT.R!S=')U
M8W0@9F1I<FYO9&4@*F=O.R!](&5N=')I97-;,5T["D!`("TU,C4L,34@*S4U
M,"PQ-R!`0`H@("!]("`@(`H@?0H@"BUS=&%T:6,@<W1R=6-T(&9I;&5N86UE
M;F]D92`J9FEN9&YA;65N;V1E7VAI9V@H8V]N<W0@8VAA<B`J;F%M92D["BUS
M=&%T:6,@<W1R=6-T(&9I;&5N86UE;F]D92`J9FEN9&YA;65N;V1E7VQO=RAC
M;VYS="!C:&%R("IN86UE*3L**W-T871I8R!S=')U8W0@9FEL96YA;65N;V1E
M("IF:6YD;F%M96YO9&5?:&EG:"AC;VYS="!C:&%R("IN86UE+`HK"0D)"0D@
M("`@("!E;G5M(&9N;F9L86=S(&9L86=S*3L**W-T871I8R!S=')U8W0@9FEL
M96YA;65N;V1E("IF:6YD;F%M96YO9&5?;&]W*&-O;G-T(&-H87(@*FYA;64L
M"BL)"0D)"2`@("`@96YU;2!F;FYF;&%G<R!F;&%G<RD["B`@(`HM<W1R=6-T
M(&9I;&5N86UE;F]D92`J9FEN9&YA;65N;V1E*&-O;G-T(&-H87(@*FYA;64I
M('L**W-T<G5C="!F:6QE;F%M96YO9&4@*F9I;F1N86UE;F]D92AC;VYS="!C
M:&%R("IN86UE+"!E;G5M(&9N;F9L86=S(&9L86=S*2!["B`@('-W:71C:"`H
M9E]L87)G96UE;2D@>PH@("!C87-E(#$Z"BT@("`@<F5T=7)N(&9I;F1N86UE
M;F]D95]H:6=H*&YA;64I.PHK("`@(')E='5R;B!F:6YD;F%M96YO9&5?:&EG
M:"AN86UE+"!F;&%G<RD["B`@(&-A<V4@+3$Z"BT@("`@<F5T=7)N(&9I;F1N
M86UE;F]D95]L;W<H;F%M92D["BL@("`@<F5T=7)N(&9I;F1N86UE;F]D95]L
M;W<H;F%M92P@9FQA9W,I.PH@("!D969A=6QT.@H@("`@(&EN=&5R;F5R<B@B
M9FEN9&YA;65N;V1E(&YO(&9?;&%R9V5M96TB*3L*("`@?0I`0"`M-30Q+#$T
M("LU-C@L,38@0$`*(`H@+RHJ*B!#;V1E(&9O<B!L;W<M;65M;W)Y+69O;W1P
M<FEN="!I;BUC;W)E(&9I;&5S(&1A=&%B87-E("HJ*B\*("`@"BUS=&%T:6,@
M<W1R=6-T(&9I;&5N86UE;F]D92`J9FEN9&YA;65N;V1E7VQO=RAC;VYS="!C
M:&%R("IN86UE*2!["BMS=&%T:6,@<W1R=6-T(&9I;&5N86UE;F]D92`J9FEN
M9&YA;65N;V1E7VQO=RAC;VYS="!C:&%R("IN86UE+`HK"0D)"0D@("`@(&5N
M=6T@9FYN9FQA9W,@9FQA9W,I('L*("`@<W1R=6-T(&9D:7)N;V1E("IT<F%V
M97)S93L*("`@<W1R=6-T(&9D:7)E;G1S("IE;G1S+"`J*F%D9'1O.PH@("!C
M;VYS="!C:&%R("IN86UE;&5F="P@*G-L87-H.PH@("!C:&%R("IP.PH@("!S
M=')U8W0@9FEL96YA;65S8FQO8VL@*FYE=V)L;V-K.PH@("!I;G0@;BP@:2P@
M;F5N=')I97-H97)E+"!A;&QO8SL*+0HK("!C;VYS="!C:&%R("IO<FEG7VYA
M;64@/2!N86UE.PHK("`*("`@+RH@5V4@<VMI<"!I;FET:6%L('-L87-H97,@
M86YD("XO('!A:7)S+"!A;F0@861D(&]U<B!O=VX@<VEN9VQE(&QE861I;F<@
M<VQA<V@N("HO"B`@(&YA;64]('-K:7!?<VQA<VA?9&]T<VQA<V@H;F%M92D[
M"B`*0$`@+38P-"PQ.2`K-C,S+#(S($!`"B`@('1R879E<G-E+3YH97)E+3YF
M;&%G<ST@,#L*("`@=')A=F5R<V4M/FAE<F4M/F1I=F5R=#T@,#L*(`HM("!N
M/2!S=')L96XH;F%M92DK,CL*+2`@:68@*&YA;65S87)E86QE9G0@/"!N*2![
M"BT@("`@;F5W8FQO8VL](&U?;6%L;&]C*'-I>F5O9BAS=')U8W0@9FEL96YA
M;65S8FQO8VLI*3L*+2`@("!A;&QO8ST@,C4V*C$P,C0["BT@("`@:68@*&%L
M;&]C/&XI(&%L;&]C/2!N.PHM("`@(&YE=V)L;V-K+3YD871A/2!M7VUA;&QO
M8RAA;&QO8RD["BT@("`@;F5W8FQO8VLM/FYE>'0](&YA;65S87)E83L*+2`@
M("!N86UE<V%R96$](&YE=V)L;V-K.PHM("`@(&YA;65S87)E86QE9G0](&%L
M;&]C.PHM("!]"BT@(&YA;65S87)E86QE9G0M/2!N.PHM("!P/2!N86UE<V%R
M96$M/F1A=&$K;F%M97-A<F5A;&5F=#L*+2`@=')A=F5R<V4M/FAE<F4M/FYA
M;64]('`[("IP*RL]("<O)SL@<W1R8W!Y*'`L;F%M92D["BL@(&EF*"AF;&%G
M<R`F(&9N;E]N;V-O<'DI("8F(&YA;64@/B!O<FEG7VYA;64@)B8@;F%M95LM
M,5T@/3T@)R\G*2!["BL@("`@=')A=F5R<V4M/FAE<F4M/FYA;64@/2`H8VAA
M<B`J*6YA;64@+2`Q.PHK("!](&5L<V4@>PHK("`@(&X]('-T<FQE;BAN86UE
M*2LR.PHK("`@(&EF("AN86UE<V%R96%L969T(#P@;BD@>PHK("`@("`@;F5W
M8FQO8VL](&U?;6%L;&]C*'-I>F5O9BAS=')U8W0@9FEL96YA;65S8FQO8VLI
M*3L**R`@("`@(&%L;&]C/2`R-38J,3`R-#L**R`@("`@(&EF("AA;&QO8SQN
M*2!A;&QO8ST@;CL**R`@("`@(&YE=V)L;V-K+3YD871A/2!M7VUA;&QO8RAA
M;&QO8RD["BL@("`@("!N97=B;&]C:RT^;F5X=#T@;F%M97-A<F5A.PHK("`@
M("`@;F%M97-A<F5A/2!N97=B;&]C:SL**R`@("`@(&YA;65S87)E86QE9G0]
M(&%L;&]C.PHK("`@('T**R`@("!N86UE<V%R96%L969T+3T@;CL**R`@("!P
M/2!N86UE<V%R96$M/F1A=&$K;F%M97-A<F5A;&5F=#L**R`@("!T<F%V97)S
M92T^:&5R92T^;F%M93T@<#L@*G`K*ST@)R\G.R!S=')C<'DH<"QN86UE*3L*
M*R`@?0H@"B`@('1R879E<G-E+3YH97)E+3YN97AT/2!A;&QF:6QE<SL*("`@
M86QL9FEL97,]('1R879E<G-E+3YH97)E.PI`0"`M-C,R+#@@*S8V-2PQ,"!`
M0`H@("!R971U<FX@=CL*('T*(`HM<W1R=6-T(&9I;&5N86UE;F]D92`J9FEN
M9&YA;65N;V1E7VAI9V@H8V]N<W0@8VAA<B`J;F%M92D@>PHK<W1R=6-T(&9I
M;&5N86UE;F]D92`J9FEN9&YA;65N;V1E7VAI9V@H8V]N<W0@8VAA<B`J;F%M
M92P**PD)"0D)("`@("!E;G5M(&9N;F9L86=S(&9L86=S*2!["B`@('-T<G5C
M="!F:6QE;F%M96YO9&4@*BIP;VEN=&5R<"P@*FYE=VYO9&4["BL@(&-O;G-T
M(&-H87(@*F]R:6=?;F%M92`](&YA;64["B`*("`@+RH@5V4@<VMI<"!I;FET
M:6%L('-L87-H97,@86YD("XO('!A:7)S+"!A;F0@861D(&]U<B!O=VX@<VEN
M9VQE(&QE861I;F<@<VQA<V@N("HO"B`@(&YA;64]('-K:7!?<VQA<VA?9&]T
M<VQA<V@H;F%M92D["D!`("TV-#@L."`K-C@S+#$R($!`"B`*("`@;F5W;F]D
M93T@;F9M86QL;V,H<VEZ96]F*'-T<G5C="!F:6QE;F%M96YO9&4I*3L*("`@
M;F5W;F]D92T^<&%C:V%G97,](#`["BT@(&YE=VYO9&4M/FYA;64](&YF;6%L
M;&]C*'-T<FQE;BAN86UE*2LR*3L*+2`@;F5W;F]D92T^;F%M95LP73T@)R\G
M.R!S=')C<'DH;F5W;F]D92T^;F%M92LQ+&YA;64I.PHK("!I9B@H9FQA9W,@
M)B!F;FY?;F]C;W!Y*2`F)B!N86UE(#X@;W)I9U]N86UE("8F(&YA;65;+3%=
M(#T]("<O)RD**R`@("!N97=N;V1E+3YN86UE(#T@*&-H87(@*BEN86UE("T@
M,3L**R`@96QS92!["BL@("`@;F5W;F]D92T^;F%M93T@;F9M86QL;V,H<W1R
M;&5N*&YA;64I*S(I.PHK("`@(&YE=VYO9&4M/FYA;65;,%T]("<O)SL@<W1R
M8W!Y*&YE=VYO9&4M/FYA;64K,2QN86UE*3L**R`@?0H@("!N97=N;V1E+3YF
M;&%G<ST@,#L*("`@;F5W;F]D92T^;F5X=#T@,#L*("`@;F5W;F]D92T^9&EV
M97)T/2`P.PI);F1E>#H@;6%I;B]F:6QE<V1B+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;6%I;B]F:6QE
M<V1B+F@L=@IR971R:65V:6YG(')E=FES:6]N(#$N,0ID:69F("UU("UR,2XQ
M(&9I;&5S9&(N:`HM+2T@;6%I;B]F:6QE<V1B+F@),3DY."\Q,"\R-2`R,CHR
M-3HT,`DQ+C$**RLK(&UA:6XO9FEL97-D8BYH"3$Y.3DO,#<O,C8@,#DZ,34Z
M-#<*0$`@+30V+#8@*S0V+#$R($!`"B`*('-T<G5C="!P:V=I;F9O.PH@"BLO
M*B!F;&%G<R!T;R!F:6YD;F%M96YO9&4H*2`J+PHK"BME;G5M(&9N;F9L86=S
M('L**R`@("!F;FY?;F]C;W!Y/2`@("`@("`@("`@("`@("`@,#`P,#`Q+"`O
M*B!D;R!N;W0@;F5E9"!T;R!C;W!Y(&9I;&5N86UE("HO"BM].PHK"B!S=')U
M8W0@9FEL96YA;65N;V1E('L*("`@<W1R=6-T(&9I;&5N86UE;F]D92`J;F5X
M=#L*("`@8VAA<B`J;F%M93L*0$`@+3$Q-2PW("LQ,C$L-R!`0`H@=F]I9"!E
M;G-U<F5?86QL:6YS=&9I;&5S7V%V86EL86)L92AV;VED*3L*('9O:60@96YS
M=7)E7V%L;&EN<W1F:6QE<U]A=F%I;&%B;&5?<75I970H=F]I9"D["B!V;VED
M(&YO=&5?;75S=%]R97)E861?9FEL97-?:6YP86-K86=E*'-T<G5C="!P:V=I
M;F9O("IP:V<I.PHM<W1R=6-T(&9I;&5N86UE;F]D92`J9FEN9&YA;65N;V1E
M*&-O;G-T(&-H87(@*F9I;&5N86UE*3L**W-T<G5C="!F:6QE;F%M96YO9&4@
M*F9I;F1N86UE;F]D92AC;VYS="!C:&%R("IF:6QE;F%M92P@96YU;2!F;FYF
M;&%G<R!F;&%G<RD["B!V;VED('=R:71E7V9I;&5L:7-T7V5X8V5P="AS=')U
M8W0@<&MG:6YF;R`J<&MG+"!S=')U8W0@9FEL96EN;&ES="`J;&ES="P@:6YT
M(&QE879E;W5T*3L*(`H@<W1R=6-T(')E=F5R<V5F:6QE;&ES=&ET97(@>R!S
M=')U8W0@9FEL96EN;&ES="`J=&]D;SL@?3L*26YD97@Z(&UA:6XO:&5L<"YC
M"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T*4D-3(&9I;&4Z("]U<W(O<W)C+T-6
M4R]D<&MG+VUA:6XO:&5L<"YC+'8*<F5T<FEE=FEN9R!R979I<VEO;B`Q+C,*
M9&EF9B`M=2`M<C$N,R!H96QP+F,*+2TM(&UA:6XO:&5L<"YC"3$Y.3DO,#,O
M,#(@,C,Z,3<Z,SD),2XS"BLK*R!M86EN+VAE;'`N8PDQ.3DY+S`W+S(V(#`Y
M.C$U.C0W"D!`("TT-3$L-R`K-#4Q+#<@0$`*("`@<W1R=6-T(&9I;&5N86UE
M;F]D92`J;F%M96YO9&4["B`@(`H@("!W:&EL92`H<V5A<F-H8V]N9F8I('L*
M+2`@("!N86UE;F]D93T@9FEN9&YA;65N;V1E*'-E87)C:&-O;F9F+3YN86UE
M*3L**R`@("!N86UE;F]D93T@9FEN9&YA;65N;V1E*'-E87)C:&-O;F9F+3YN
M86UE+"`P*3L@+RH@6%A8("HO"B`@("`@;F%M96YO9&4M/F9L86=S('P](&9N
M;F9?;VQD7V-O;F9F.PH@("`@(&1E8G5G*&1B9U]C;VYF9F1E=&%I;"P@(F]L
M9&-O;F9F<V5T9FQA9W,@8"5S)R!N86UE;F]D92`E<"!F;&%G<R`E;R(L"B`@
M("`@("`@("`@<V5A<F-H8V]N9F8M/FYA;64L(&YA;65N;V1E+"!N86UE;F]D
M92T^9FQA9W,I.PI);F1E>#H@;6%I;B]P<F]C97-S87)C+F,*/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/0I20U,@9FEL93H@+W5S<B]S<F,O0U93+V1P:V<O;6%I
M;B]P<F]C97-S87)C+F,L=@IR971R:65V:6YG(')E=FES:6]N(#$N,PID:69F
M("UU("UR,2XS('!R;V-E<W-A<F,N8PHM+2T@;6%I;B]P<F]C97-S87)C+F,)
M,3DY.2\P,R\P,B`R,SHQ-SHT,@DQ+C,**RLK(&UA:6XO<')O8V5S<V%R8RYC
M"3$Y.3DO,#<O,C8@,#DZ,34Z-#<*0$`@+3,Q-2PW("LS,34L-R!`0`H@("`@
M("`@*G`](#`["B`@("`@("!N97=C;VYF9CT@;5]M86QL;V,H<VEZ96]F*'-T
M<G5C="!F:6QE:6YL:7-T*2D["B`@("`@("!N97=C;VYF9BT^;F5X=#T@,#L*
M+2`@("`@(&YE=V-O;F9F+3YN86UE;F]D93T@9FEN9&YA;65N;V1E*&-O;F9F
M:6QE;F%M96)U9BD["BL@("`@("!N97=C;VYF9BT^;F%M96YO9&4](&9I;F1N
M86UE;F]D92AC;VYF9FEL96YA;65B=68L(#`I.PH@("`@("`@*FYE=V-O;F9F
M:6QE<VQA<W1P/2!N97=C;VYF9CL*("`@("`@(&YE=V-O;F9F:6QE<VQA<W1P
M/2`F;F5W8V]N9F8M/FYE>'0["B`@("`@("!N97=C;VYF9BT^;F%M96YO9&4M
;/F]L9&AA<V@]($Y%5T-/3D9&24Q%1DQ!1SL*
`
end


Reply to: