John, The actual filter in deployment here only stores the user object once in the session. I thought that was a major oversight on my part and I had to go check the actual code when you mentioned it; Thanks for the comment. The filter, checks to see if the user object is valid and if not, but the user has been authenticated by the container, then the user object is created and stored in the session, otherwise the user is sent to an error.jsp or login.jsp page. From that point, the filter always checks the user object in the session, but does not create it again. This was left out during the cutting and pasting of code, sorry about that. So with regards to you first question/comment, I would agree with creating the user object only once.
Our filter mapping is handled at the /app/do/* and /app/pages/ level where app is the specific web application. All our actions are currently mapped to the /do/* and you are required to be logged in to perform any action under specific applications, i.e. a Buyer Site and Supplier Site exchange type application. We also have the basic portal or informational site which is a different /app and requires no authentication to get into. All .jsp's are stored in the pages directory with the exception of those required to support the login.jsp, error.jsp and index.jsp. When a user first hits the site they are presented with the index.jsp which is using tiles to define the screen layout. One of the tiles created is the "login" tile which allows a valid user to login to either/or the Buy/Supplier Site. The links for Buyer/Supplier point to an action /app/do/loginAct?action=Buyer or /app/do/loginAct?action=Supplier. Since the /app/do is a protected resource the container presents the Form based login.jsp page. If the user is authenticated, we get the request in the filter, create the user object, and the pass the action to the loginAct. The login action is our case does little more then forward the user to the appropriate page based on login success. If there are any problems with the login, the filter catches them and forwards the user to an error.jsp page with the appropriate error messages. The above could be done just as easily in the action, but we opted to do it in the filter since at some point we my use our on security model and by pass the container implementation completely. So by doing things here in the filter, we are all set if we decide for any reason we need to change the flow of the application. (I think) Regards, Todd -----Original Message----- From: John Regan [mailto:[EMAIL PROTECTED]] Sent: Thursday, March 21, 2002 12:49 PM To: 'Struts Users Mailing List' Subject: RE: Using 2.3 Filters and Struts Thanks Todd! I've developed a very similar solution. Here are a couple of questions/comments about the code: 1. I noticed that you are storing the user object in the session every time this filter is invoked with a valid user. My solution sets the user object once in the session after a successful login in the LoginAction class. Do you see any issues with setting it once? 2.How do you handle the filter mapping? Do you have a directory that contains all the pages that a user has to be logged in to be able to view? Thanks for the help, JBR -----Original Message----- From: Todd G. Nist [mailto:[EMAIL PROTECTED]] Sent: Thursday, March 21, 2002 7:09 AM To: 'Struts Users Mailing List' Subject: RE: Using 2.3 Filters and Struts In your filter, you can do something like the below. We have implemented something similar to this but have container managed security on top of it. So the container managed security gets invoked first and then the filter, processes the request. This lets us add any additional information to the session to ensure "logged inness". Now when the session times out, the any resource which is protected is first processed by the container managed security, and then the filter is invoked. You could just as easily use only the filter for ensuring "logged inness". Hope the below helps. Regards, Todd G. Nist import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; public class SecurityFilter implements Filter { private FilterConfig config = null; private ServletContext ctx = null; private User user = null; public void init(FilterConfig config) throws ServletException { this.config = config; this.ctx = config.getServletContext(); this.ctx.log("Filter SecurityFilter initialized."); } public void destroy() { this.user = null; this.ctx = null; this.config = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; String action = null; ctx.log("User is: " + req.getRemoteUser()); ctx.log("URI requested: " + req.getRequestURI()); /** * Do logic to see if user is currently valid, and if not redirect to login.jsp, * otherwise just chain to the request resource. */ if (!user.valid) { // log what ever information we can to the standard logs about an invalid user ctx.log("SecurityFilter - Invalid user or session timeout for:"); ctx.log(" User: " + req.getRemoteAddr()); ctx.log(" IP: " + req.getRemoteAddr()); ctx.log(" Host: " + req.getRemoteHost()); req.setAttribute("securityFilterError", "Error"); HttpServletResponse rsp = (HttpServletResponse)response; // get the RequestDispatcher and forward request to login.jsp RequestDispatcher rd = request.getRequestDispatcher("/login.jsp"); // forward the request rd.forward(req, rsp); // log and error to the logs/xxx.log file ctx.log("User unauthenticated, request for " + req.getRequestURI() + " redirected to login.jsp."); // ensuer we don't chain to requested resource return; } // store user object into session else { req.getSession(false).setAttribute(Constants.USER_KEY, user); } // pass request to requested resource chain.doFilter(request, response); } // ---- End doFilter ---- -----Original Message----- From: John Regan [mailto:[EMAIL PROTECTED]] Sent: Wednesday, March 20, 2002 12:31 PM To: Struts Users (E-mail) Subject: Using 2.3 Filters and Struts Hello everyone, What is the best way to redirect a request to a login page from within a filter? Any examples? Thanks, JBR -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> begin 666 ATT00011.htm M/"%$3T-465!%($A434P@4%5"3$E#("(M+R]7,T,O+T141"!(5$U,(#,N,B\O M14XB/@T*/$A434P^#0H\2$5!1#X-"CQ-151!($A45% M15%5258](D-O;G1E M;G0M5'EP92(@0T].5$5.5#TB=&5X="]H=&UL.R!C:&%R<V5T/5=I;F1O=W,M M,3(U,B(^#0H\345402!.04U%/2)'96YE<F%T;W(B($-/3E1%3E0](DU3($5X M8VAA;F=E(%-E<G9E<B!V97)S:6]N(#8N,"XU-S8R+C,B/@T*/%1)5$Q%/E)% M.B!5<VEN9R R+C,@1FEL=&5R<R!A;F0@4W1R=71S/"]4251,13X-"CPO2$5! M1#X-"CQ"3T19/@T*/"$M+2!#;VYV97)T960@9G)O;2!T97AT+W!L86EN(&9O M<FUA=" M+3X-"@T*/% ^/$9/3E0@4TE:13TR/DIO:&XL/"]&3TY4/@T*/"]0 M/@T*#0H\4#X\1D].5"!325I%/3(^5&AE(&%C='5A;"!F:6QT97(@:6X@9&5P M;&]Y;65N="!H97)E(&]N;'D@<W1O<F5S('1H92!U<V5R(&]B:F5C="!O;F-E M(&EN('1H92!S97-S:6]N+B9N8G-P.R!)('1H;W5G:'0@=&AA="!W87,@82!M M86IO<B!O=F5R<VEG:'0@;VX@;7D@<&%R="!A;F0@22!H860@=&\@9V\@8VAE M8VL@=&AE(&%C='5A;"!C;V1E('=H96X@>6]U(&UE;G1I;VYE9"!I=#L@5&AA M;FMS(&9O<B!T:&4@8V]M;65N="XF;F)S<#L@5&AE(&9I;'1E<BP@8VAE8VMS M('1O('-E92!I9B!T:&4@=7-E<B!O8FIE8W0@:7,@=F%L:60@86YD(&EF(&YO M="P@8G5T('1H92!U<V5R(&AA<R!B965N(&%U=&AE;G1I8V%T960@8GD@=&AE M(&-O;G1A:6YE<BP@=&AE;B!T:&4@=7-E<B!O8FIE8W0@:7,@8W)E871E9"!A M;F0@<W1O<F5D(&EN('1H92!S97-S:6]N+"!O=&AE<G=I<V4@=&AE('5S97(@ M:7,@<V5N="!T;R!A;B!E<G)O<BYJ<W @;W(@;&]G:6XN:G-P('!A9V4N)FYB M<W [($9R;VT@=&AA="!P;VEN="P@=&AE(&9I;'1E<B!A;'=A>7,@8VAE8VMS M('1H92!U<V5R(&]B:F5C="!I;B!T:&4@<V5S<VEO;BP@8G5T(&1O97,@;F]T M(&-R96%T92!I="!A9V%I;BXF;F)S<#L@5&AI<R!W87,@;&5F="!O=70@9'5R M:6YG('1H92!C=71T:6YG(&%N9"!P87-T:6YG(&]F(&-O9&4L('-O<G)Y(&%B M;W5T('1H870N)FYB<W [(%-O('=I=&@@<F5G87)D<R!T;R!Y;W4@9FER<W0@ M<75E<W1I;VXO8V]M;65N="P@22!W;W5L9"!A9W)E92!W:71H(&-R96%T:6YG M('1H92!U<V5R(&]B:F5C="!O;FQY(&]N8V4N/"]&3TY4/CPO4#X-"@T*/% ^ M/$9/3E0@4TE:13TR/D]U<B!F:6QT97(@;6%P<&EN9R!I<R!H86YD;&5D(&%T M('1H92 O87!P+V1O+RH@86YD("]A<' O<&%G97,O(&QE=F5L('=H97)E(&%P M<"!I<R!T:&4@<W!E8VEF:6,@=V5B(&%P<&QI8V%T:6]N+B9N8G-P.R!!;&P@ M;W5R(&%C=&EO;G,@87)E(&-U<G)E;G1L>2!M87!P960@=&\@=&AE("]D;R\J M(&%N9"!Y;W4@87)E(')E<75I<F5D('1O(&)E(&QO9V=E9"!I;B!T;R!P97)F M;W)M(&%N>2!A8W1I;VX@=6YD97(@<W!E8VEF:6,@87!P;&EC871I;VYS+"!I M+F4N(&$@0G5Y97(@4VET92!A;F0@4W5P<&QI97(@4VET92!E>&-H86YG92!T M>7!E(&%P<&QI8V%T:6]N+B9N8G-P.R!792!A;'-O(&AA=F4@=&AE(&)A<VEC M('!O<G1A;"!O<B!I;F9O<FUA=&EO;F%L('-I=&4@=VAI8V@@:7,@82!D:69F M97)E;G0@+V%P<"!A;F0@<F5Q=6ER97,@;F\@875T:&5N=&EC871I;VX@=&\@ M9V5T(&EN=&\N)FYB<W [($%L;" N:G-P)W,@87)E('-T;W)E9"!I;B!T:&4@ M<&%G97,@9&ER96-T;W)Y('=I=&@@=&AE(&5X8V5P=&EO;B!O9B!T:&]S92!R M97%U:7)E9"!T;R!S=7!P;W)T('1H92!L;V=I;BYJ<W L(&5R<F]R+FIS<"!A M;F0@:6YD97@N:G-P+CPO1D].5#X\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CY7 M:&5N(&$@=7-E<B!F:7)S="!H:71S('1H92!S:71E('1H97D@87)E('!R97-E M;G1E9"!W:71H('1H92!I;F1E>"YJ<W @=VAI8V@@:7,@=7-I;F<@=&EL97,@ M=&\@9&5F:6YE('1H92!S8W)E96X@;&%Y;W5T+B9N8G-P.R!/;F4@;V8@=&AE M('1I;&5S(&-R96%T960@:7,@=&AE("9Q=6]T.VQO9VEN)G%U;W0[('1I;&4@ M=VAI8V@@86QL;W=S(&$@=F%L:60@=7-E<B!T;R!L;V=I;B!T;R!E:71H97(O M;W(@=&AE($)U>2]3=7!P;&EE<B!3:71E+B9N8G-P.R!4:&4@;&EN:W,@9F]R M($)U>65R+U-U<'!L:65R('!O:6YT('1O(&%N(&%C=&EO;B O87!P+V1O+VQO M9VEN06-T/V%C=&EO;CU"=7EE<B9N8G-P.R!O<B O87!P+V1O+VQO9VEN06-T M/V%C=&EO;CU3=7!P;&EE<BX@4VEN8V4@=&AE("]A<' O9&\@:7,@82!P<F]T M96-T960@<F5S;W5R8V4@=&AE(&-O;G1A:6YE<B!P<F5S96YT<R!T:&4@1F]R M;2!B87-E9"!L;V=I;BYJ<W @<&%G92XF;F)S<#L@268@=&AE('5S97(@:7,@ M875T:&5N=&EC871E9"P@=V4@9V5T('1H92!R97%U97-T(&EN('1H92!F:6QT M97(L(&-R96%T92!T:&4@=7-E<B!O8FIE8W0L(&%N9"!T:&4@<&%S<R!T:&4@ M86-T:6]N('1O('1H92!L;V=I;D%C="XF;F)S<#L@5&AE(&QO9VEN(&%C=&EO M;B!I<R!O=7(@8V%S92!D;V5S(&QI='1L92!M;W)E('1H96X@9F]R=V%R9"!T M:&4@=7-E<B!T;R!T:&4@87!P<F]P<FEA=&4@<&%G92!B87-E9"!O;B!L;V=I M;B!S=6-C97-S+B9N8G-P.R!)9B!T:&5R92!A<F4@86YY('!R;V)L96US('=I M=&@@=&AE(&QO9VEN+"!T:&4@9FEL=&5R(&-A=&-H97,@=&AE;2!A;F0@9F]R M=V%R9',@=&AE('5S97(@=&\@86X@97)R;W(N:G-P('!A9V4@=VET:"!T:&4@ M87!P<F]P<FEA=&4@97)R;W(@;65S<V%G97,N)FYB<W [(#PO1D].5#X\+U ^ M#0H-"CQ0/CQ&3TY4(%-)6D4],CY4:&4@86)O=F4@8V]U;&0@8F4@9&]N92!J M=7-T(&%S(&5A<VEL>2!I;B!T:&4@86-T:6]N+"!B=70@=V4@;W!T960@=&\@ M9&\@:70@:6X@=&AE(&9I;'1E<B!S:6YC92!A="!S;VUE('!O:6YT('=E(&UY M('5S92!O=7(@;VX@<V5C=7)I='D@;6]D96P@86YD(&)Y('!A<W,@=&AE(&-O M;G1A:6YE<B!I;7!L96UE;G1A=&EO;B!C;VUP;&5T96QY+B9N8G-P.R!3;R!B M>2!D;VEN9R!T:&EN9W,@:&5R92!I;B!T:&4@9FEL=&5R+"!W92!A<F4@86QL M('-E="!I9B!W92!D96-I9&4@9F]R(&%N>2!R96%S;VX@=V4@;F5E9"!T;R!C M:&%N9V4@=&AE(&9L;W<@;V8@=&AE(&%P<&QI8V%T:6]N+B H22!T:&EN:RD\ M+T9/3E0^/"]0/@T*#0H\4#X\1D].5"!325I%/3(^4F5G87)D<RP@/"]&3TY4 M/@T*#0H\0E(^/$9/3E0@4TE:13TR/E1O9&0\+T9/3E0^#0H\+U ^#0H\0E(^ M#0H\0E(^#0H-"CQ0/CQ&3TY4(%-)6D4],CXM+2TM+4]R:6=I;F%L($UE<W-A M9V4M+2TM+3PO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CY&<F]M.B!*;VAN M(%)E9V%N(%L\02!(4D5&/2)M86EL=&\Z2G)E9V%N0&-S871R879E;'!R;W1E M8W1I;VXN8V]M(CYM86EL=&\Z2G)E9V%N0&-S871R879E;'!R;W1E8W1I;VXN M8V]M/"]!/ET\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^4V5N=#H@5&AU M<G-D87DL($UA<F-H(#(Q+" R,# R(#$R.C0Y(%!-/"]&3TY4/@T*#0H\0E(^ M/$9/3E0@4TE:13TR/E1O.B G4W1R=71S(%5S97)S($UA:6QI;F<@3&ES="<\ M+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^4W5B:F5C=#H@4D4Z(%5S:6YG M(#(N,R!&:6QT97)S(&%N9"!3=')U=',\+T9/3E0^#0H\+U ^#0H\0E(^#0H- M"CQ0/CQ&3TY4(%-)6D4],CY4:&%N:W,@5&]D9"$\+T9/3E0^#0H-"CQ"4CX\ M1D].5"!325I%/3(^22=V92!D979E;&]P960@82!V97)Y('-I;6EL87(@<V]L M=71I;VXN)FYB<W [($AE<F4@87)E(&$@8V]U<&QE(&]F/"]&3TY4/@T*#0H\ M0E(^/$9/3E0@4TE:13TR/G%U97-T:6]N<R]C;VUM96YT<R!A8F]U="!T:&4@ M8V]D93H\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^,2X@22!N;W1I8V5D M('1H870@>6]U(&%R92!S=&]R:6YG('1H92!U<V5R(&]B:F5C="!I;B!T:&4@ M<V5S<VEO;B!E=F5R>2!T:6UE/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR M/G1H:7,@9FEL=&5R(&ES(&EN=F]K960@=VET:"!A('9A;&ED('5S97(N)FYB M<W [($UY('-O;'5T:6]N('-E=',@=&AE('5S97(@;V)J96-T/"]&3TY4/@T* M#0H\0E(^/$9/3E0@4TE:13TR/F]N8V4@:6X@=&AE('-E<W-I;VX@869T97(@ M82!S=6-C97-S9G5L(&QO9VEN(&EN('1H92!,;V=I;D%C=&EO;B!C;&%S<RXF M;F)S<#L@1&\\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^>6]U('-E92!A M;GD@:7-S=65S('=I=&@@<V5T=&EN9R!I="!O;F-E/SPO1D].5#X-"@T*/$)2 M/CQ&3TY4(%-)6D4],CXR+DAO=R!D;R!Y;W4@:&%N9&QE('1H92!F:6QT97(@ M;6%P<&EN9S\F;F)S<#L@1&\@>6]U(&AA=F4@82!D:7)E8W1O<GD@=&AA=#PO M1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CYC;VYT86EN<R!A;&P@=&AE('!A M9V5S('1H870@82!U<V5R(&AA<R!T;R!B92!L;V=G960@:6X@=&\@8F4@86)L M92!T;R!V:65W/SPO1D].5#X-"CPO4#X-"@T*/% ^/$9/3E0@4TE:13TR/E1H M86YK<R!F;W(@=&AE(&AE;' L/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR M/DI"4B9N8G-P.R \+T9/3E0^#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CXM M+2TM+4]R:6=I;F%L($UE<W-A9V4M+2TM+3PO1D].5#X-"@T*/$)2/CQ&3TY4 M(%-)6D4],CY&<F]M.B!4;V1D($<N($YI<W0@6SQ!($A2148](FUA:6QT;SIT M;FES=$!B96QL<V]U=&@N;F5T(CYM86EL=&\Z=&YI<W1 8F5L;'-O=71H+FYE M=#PO03Y=/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR/E-E;G0Z(%1H=7)S M9&%Y+"!-87)C:" R,2P@,C P,B W.C Y($%-/"]&3TY4/@T*#0H\0E(^/$9/ M3E0@4TE:13TR/E1O.B G4W1R=71S(%5S97)S($UA:6QI;F<@3&ES="<\+T9/ M3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^4W5B:F5C=#H@4D4Z(%5S:6YG(#(N M,R!&:6QT97)S(&%N9"!3=')U=',\+T9/3E0^#0H\+U ^#0H\0E(^#0H-"CQ0 M/CQ&3TY4(%-)6D4],CY);B!Y;W5R(&9I;'1E<BP@>6]U(&-A;B!D;R!S;VUE M=&AI;F<@;&EK92!T:&4@8F5L;W<N)FYB<W [(%=E(&AA=F4@:6UP;&5M96YT M960\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^<V]M971H:6YG('-I;6EL M87(@=&\@=&AI<R!B=70@:&%V92!C;VYT86EN97(@;6%N86=E9"!S96-U<FET M>2!O;B!T;W @;V8@:70N/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR/E-O M('1H92!C;VYT86EN97(@;6%N86=E9"!S96-U<FET>2!G971S(&EN=F]K960@ M9FER<W0@86YD('1H96X@=&AE(&9I;'1E<BP\+T9/3E0^#0H-"CQ"4CX\1D]. M5"!325I%/3(^<')O8V5S<V5S('1H92!R97%U97-T+B9N8G-P.R!4:&ES(&QE M=',@=7,@861D(&%N>2!A9&1I=&EO;F%L(&EN9F]R;6%T:6]N('1O('1H93PO M1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CYS97-S:6]N('1O(&5N<W5R92 F M<75O=#ML;V=G960@:6YN97-S)G%U;W0[+B9N8G-P.R!.;W<@=VAE;B!T:&4@ M<V5S<VEO;B!T:6UE<R!O=70L('1H92!A;GD\+T9/3E0^#0H-"CQ"4CX\1D]. M5"!325I%/3(^<F5S;W5R8V4@=VAI8V@@:7,@<')O=&5C=&5D(&ES(&9I<G-T M('!R;V-E<W-E9"!B>2!T:&4@8V]N=&%I;F5R(&UA;F%G960\+T9/3E0^#0H- M"CQ"4CX\1D].5"!325I%/3(^<V5C=7)I='DL(&%N9"!T:&5N('1H92!F:6QT M97(@:7,@:6YV;VME9"X\+T9/3E0^#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4] M,CY9;W4@8V]U;&0@:G5S="!A<R!E87-I;'D@=7-E(&]N;'D@=&AE(&9I;'1E M<B!F;W(@96YS=7)I;F<@)G%U;W0[;&]G9V5D(&EN;F5S<R9Q=6]T.RX\+T9/ M3E0^#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CY(;W!E('1H92!B96QO=R!H M96QP<RX\+T9/3E0^#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CY296=A<F1S M+#PO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CY4;V1D($<N($YI<W0\+T9/ M3E0^#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CYI;7!O<G0@:F%V82YI;RXJ M.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CYI;7!O<G0@:F%V87@N<V5R M=FQE="XJ.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CYI;7!O<G0@:F%V M87@N<V5R=FQE="YH='1P+BH[/"]&3TY4/@T*/"]0/@T*#0H\4#X\1D].5"!3 M25I%/3(^:6UP;W)T(&]R9RYA<&%C:&4N<W1R=71S+F%C=&EO;BY!8W1I;VY% M<G)O<CL\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^:6UP;W)T(&]R9RYA M<&%C:&4N<W1R=71S+F%C=&EO;BY!8W1I;VY%<G)O<G,[/"]&3TY4/@T*/"]0 M/@T*#0H\4#X\1D].5"!325I%/3(^<'5B;&EC(&-L87-S(%-E8W5R:71Y1FEL M=&5R(&EM<&QE;65N=',@1FEL=&5R('L\+T9/3E0^#0H\+U ^#0H-"CQ0/CQ& M3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#L@<')I=F%T92!&:6QT97)# M;VYF:6<@8V]N9FEG(#T@;G5L;#L\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I% M/3(^)FYB<W [)FYB<W [)FYB<W [('!R:79A=&4@4V5R=FQE=$-O;G1E>'0@ M8W1X(#T@;G5L;#L\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^)FYB<W [ M)FYB<W [)FYB<W [('!R:79A=&4@57-E<B!U<V5R(#T@;G5L;#L\+T9/3E0^ M#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#L@ M<'5B;&EC('9O:60@:6YI="A&:6QT97)#;VYF:6<@8V]N9FEG*2!T:')O=W,@ M4V5R=FQE=$5X8V5P=&EO;B![/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR M/B9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R!T M:&ES+F-O;F9I9R ](&-O;F9I9SL\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I% M/3(^)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [ M('1H:7,N8W1X(#T@8V]N9FEG+F=E=%-E<G9L971#;VYT97AT*"D[/"]&3TY4 M/@T*#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R!T:&ES+F-T>"YL;V<H)G%U;W0[1FEL=&5R M(%-E8W5R:71Y1FEL=&5R(&EN:71I86QI>F5D+B9Q=6]T.RD[/"]&3TY4/@T* M#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P.R!]/"]&3TY4 M/@T*/"]0/@T*#0H\4#X\1D].5"!325I%/3(^)FYB<W [)FYB<W [)FYB<W [ M('!U8FQI8R!V;VED(&1E<W1R;WDH*2![/"]&3TY4/@T*#0H\0E(^/$9/3E0@ M4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N M8G-P.R!T:&ES+G5S97(@/2!N=6QL.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-) M6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#L@=&AI<RYC='@@/2!N=6QL.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4] M,CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#L@ M=&AI<RYC;VYF:6<@/2!N=6QL.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4] M,CXF;F)S<#LF;F)S<#LF;F)S<#L@?3PO1D].5#X-"CPO4#X-"@T*/% ^/$9/ M3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P.R!P=6)L:6,@=F]I9"!D;T9I M;'1E<BA397)V;&5T4F5Q=65S="!R97%U97-T+"!397)V;&5T4F5S<&]N<V4@ M<F5S<&]N<V4L/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N M8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N M8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R!&:6QT M97)#:&%I;B!C:&%I;BD@=&AR;W=S($E/17AC97!T:6]N+#PO1D].5#X-"@T* M/$)2/CQ&3TY4(%-)6D4],CY397)V;&5T17AC97!T:6]N('L\+T9/3E0^#0H\ M+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#LF;F)S<#L@2'1T<%-E<G9L971297%U97-T(')E<2 ] M("A(='1P4V5R=FQE=%)E<75E<W0I<F5Q=65S=#L\+T9/3E0^#0H-"CQ"4CX\ M1D].5"!325I%/3(^)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB M<W [)FYB<W [(%-T<FEN9R!A8W1I;VX@/2!N=6QL.SPO1D].5#X-"CPO4#X- M"@T*/% ^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N M8G-P.R9N8G-P.R9N8G-P.R!C='@N;&]G*"9Q=6]T.U5S97(@:7,Z("9Q=6]T M.R K(')E<2YG971296UO=&55<V5R*"DI.SPO1D].5#X-"@T*/$)2/CQ&3TY4 M(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF M;F)S<#L@8W1X+FQO9R@F<75O=#M54DD@<F5Q=65S=&5D.B F<75O=#L@*R!R M97$N9V5T4F5Q=65S=%5222@I*3L\+T9/3E0^#0H\+U ^#0H-"CQ0/B9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R \1D].5"!3 M25I%/3(^)FYB<W [("\J*CPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CXF M;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#L@*B!$;R!L;V=I8R!T;R!S964@:68@=7-E<B!I<R!C=7)R96YT;'D@=F%L M:60L(&%N9"!I9B!N;W0@<F5D:7)E8W0\+T9/3E0^#0H-"CQ"4CX\1D].5"!3 M25I%/3(^=&\@;&]G:6XN:G-P+#PO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4] M,CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF M;F)S<#L@*B!O=&AE<G=I<V4@:G5S="!C:&%I;B!T;R!T:&4@<F5Q=65S="!R M97-O=7)C92X\+T9/3E0^#0H-"CQ"4CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#LF;F)S<#L@/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P M.R J+SPO1D].5#X-"CPO4#X-"@T*/% ^/$9/3E0@4TE:13TR/B9N8G-P.R9N M8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R!I9B H(75S97(N M=F%L:60I('L\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^)FYB<W [)FYB M<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [ M)FYB<W [)FYB<W [("\O(&QO9R!W:&%T(&5V97(@:6YF;W)M871I;VX@=V4@ M8V%N('1O('1H92!S=&%N9&%R9"!L;V=S(&%B;W5T/"]&3TY4/@T*#0H\0E(^ M/$9/3E0@4TE:13TR/F%N(&EN=F%L:60@=7-E<CPO1D].5#X-"@T*/$)2/CQ& M3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#L@8W1X+FQO9R@F<75O M=#M396-U<FET>49I;'1E<B M($EN=F%L:60@=7-E<B!O<B!S97-S:6]N('1I M;65O=70\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^9F]R.B9Q=6]T.RD[ M/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N M8G-P.R!C='@N;&]G*"9Q=6]T.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R!5 M<V5R.B9N8G-P.R F<75O=#L@*R!R97$N9V5T4F5M;W1E061D<B@I*3L\+T9/ M3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^)FYB<W [)FYB<W [)FYB<W [)FYB M<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [ M(&-T>"YL;V<H)G%U;W0[)FYB<W [)FYB<W [)FYB<W [)FYB<W [($E0.B9N M8G-P.R9N8G-P.R9N8G-P.R F<75O=#L@*R!R97$N9V5T4F5M;W1E061D<B@I M*3L\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^)FYB<W [)FYB<W [)FYB M<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [ M)FYB<W [(&-T>"YL;V<H)G%U;W0[)FYB<W [)FYB<W [)FYB<W [)FYB<W [ M($AO<W0Z)FYB<W [("9Q=6]T.R K(')E<2YG971296UO=&5(;W-T*"DI.SPO M1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF M;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#L@<F5Q+G-E=$%T=')I8G5T92@F<75O=#MS96-U<FET>49I;'1E<D5R<F]R M)G%U;W0[+" F<75O=#M%<G)O<B9Q=6]T.RD[/"]&3TY4/@T*/"]0/@T*#0H\ M4#X\1D].5"!325I%/3(^)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [ M)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [($AT='!397)V M;&5T4F5S<&]N<V4@<G-P(#T@*$AT='!397)V;&5T4F5S<&]N<V4I<F5S<&]N M<V4[/"]&3TY4/@T*/"]0/@T*#0H\4#XF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#LF;F)S<#L@/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R O+R!G970@=&AE(%)E<75E<W1$:7-P871C M:&5R(&%N9"!F;W)W87)D(')E<75E<W0@=&\@;&]G:6XN:G-P/"]&3TY4/@T* M#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N M8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R!297%U M97-T1&ES<&%T8VAE<B!R9" ]/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR M/G)E<75E<W0N9V5T4F5Q=65S=$1I<W!A=&-H97(H)G%U;W0[+VQO9VEN+FIS M<"9Q=6]T.RD[/"]&3TY4/@T*#0H\0E(^)FYB<W [)FYB<W [)FYB<W [)FYB M<W [)FYB<W [)FYB<W [)FYB<W [("9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R \1D].5"!325I%/3(^+R\@9F]R=V%R9"!T M:&4@<F5Q=65S=#PO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CXF;F)S<#LF M;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#L@<F0N9F]R=V%R9"AR97$L(')S<"D[/"]&3TY4/@T* M#0H\0E(^)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB M<W [("9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P M.R \1D].5"!325I%/3(^+R\@;&]G(&%N9"!E<G)O<B!T;R!T:&4@;&]G<R]X M>'@N;&]G(&9I;&4\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^)FYB<W [ M)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB M<W [)FYB<W [)FYB<W [(&-T>"YL;V<H)G%U;W0[57-E<B!U;F%U=&AE;G1I M8V%T960L(')E<75E<W0@9F]R("9Q=6]T.R K/"]&3TY4/@T*#0H\0E(^/$9/ M3E0@4TE:13TR/G)E<2YG971297%U97-T55))*"D@*R F<75O=#L@<F5D:7)E M8W1E9"!T;R!L;V=I;BYJ<W N)G%U;W0[*3L\+T9/3E0^#0H-"CQ"4CXF;F)S M<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#L@)FYB<W [ M)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [(#Q&3TY4(%-) M6D4],CXO+R!E;G-U97(@=V4@9&]N)W0@8VAA:6X@=&\@<F5Q=65S=&5D(')E M<V]U<F-E/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N M8G-P.R9N8G-P.R!R971U<FX[/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR M/B9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R!] M/"]&3TY4/@T*#0H\0E(^/$9/3E0@4TE:13TR/B9N8G-P.R9N8G-P.R9N8G-P M.R9N8G-P.R9N8G-P.R9N8G-P.R9N8G-P.R O+R!S=&]R92!U<V5R(&]B:F5C M="!I;G1O('-E<W-I;VX\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^)FYB M<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [)FYB<W [(&5L<V4@ M>SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF M;F)S<#L@<F5Q+F=E=%-E<W-I;VXH9F%L<V4I+G-E=$%T=')I8G5T92A#;VYS M=&%N=',N55-%4E]+15DL('5S97(I.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-) M6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#L@?3PO1D].5#X-"CPO4#X-"@T*/% ^)FYB<W [)FYB<W [)FYB<W [)FYB M<W [)FYB<W [)FYB<W [)FYB<W [(#Q&3TY4(%-)6D4],CXF;F)S<#L@+R\@ M<&%S<R!R97%U97-T('1O(')E<75E<W1E9"!R97-O=7)C93PO1D].5#X-"@T* M/$)2/CQ&3TY4(%-)6D4],CXF;F)S<#LF;F)S<#LF;F)S<#LF;F)S<#LF;F)S M<#LF;F)S<#LF;F)S<#L@8VAA:6XN9&]&:6QT97(H<F5Q=65S="P@<F5S<&]N M<V4I.SPO1D].5#X-"CPO4#X-"@T*/% ^/$9/3E0@4TE:13TR/B9N8G-P.R9N M8G-P.R9N8G-P.R!]("\O("TM+2T@16YD(&1O1FEL=&5R("TM+2T\+T9/3E0^ M#0H\+U ^#0H-"CQ0/CQ&3TY4(%-)6D4],CXM+2TM+4]R:6=I;F%L($UE<W-A M9V4M+2TM+3PO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CY&<F]M.B!*;VAN M(%)E9V%N(%L\02!(4D5&/2)M86EL=&\Z2G)E9V%N0&-S871R879E;'!R;W1E M8W1I;VXN8V]M(CYM86EL=&\Z2G)E9V%N0&-S871R879E;'!R;W1E8W1I;VXN M8V]M/"]!/ET\+T9/3E0^#0H-"CQ"4CX\1D].5"!325I%/3(^4V5N=#H@5V5D M;F5S9&%Y+"!-87)C:" R,"P@,C P,B Q,CHS,2!033PO1D].5#X-"@T*/$)2 M/CQ&3TY4(%-)6D4],CY4;SH@4W1R=71S(%5S97)S("A%+6UA:6PI/"]&3TY4 M/@T*#0H\0E(^/$9/3E0@4TE:13TR/E-U8FIE8W0Z(%5S:6YG(#(N,R!&:6QT M97)S(&%N9"!3=')U=',\+T9/3E0^#0H\+U ^#0H\0E(^#0H-"CQ0/CQ&3TY4 M(%-)6D4],CY(96QL;R!E=F5R>6]N92P\+T9/3E0^#0H-"CQ"4CX\1D].5"!3 M25I%/3(^5VAA="!I<R!T:&4@8F5S="!W87D@=&\@<F5D:7)E8W0@82!R97%U M97-T('1O(&$@;&]G:6X@<&%G92!F<F]M('=I=&AI;B!A/"]&3TY4/@T*#0H\ M0E(^/$9/3E0@4TE:13TR/F9I;'1E<C\F;F)S<#L@06YY(&5X86UP;&5S/SPO M1D].5#X-"CPO4#X-"@T*/% ^/$9/3E0@4TE:13TR/E1H86YK<RP\+T9/3E0^ M#0H-"CQ"4CX\1D].5"!325I%/3(^2D)2/"]&3TY4/@T*/"]0/@T*/$)2/@T* M/$)2/@T*/$)2/@T*#0H\4#X\1D].5"!325I%/3(^+2T\+T9/3E0^#0H-"CQ" M4CX\1D].5"!325I%/3(^5&\@=6YS=6)S8W)I8F4L(&4M;6%I;#H\+T9/3E0^ M#0H-"CQ"4CX\1D].5"!325I%/3(^)FQT.SQ!($A2148](FUA:6QT;SIS=')U M=',M=7-E<BUU;G-U8G-C<FEB94!J86MA<G1A+F%P86-H92YO<F<B/FUA:6QT M;SIS=')U=',M=7-E<BUU;G-U8G-C<FEB94!J86MA<G1A+F%P86-H92YO<F<\ M+T$^)F=T.SPO1D].5#X-"@T*/$)2/CQ&3TY4(%-)6D4],CY&;W(@861D:71I M;VYA;"!C;VUM86YD<[EMAIL PROTECTED]].5#X-"@T*/$)2/CQ&3TY4(%-) M6D4],CXF;'0[/$$@2%)%1CTB;6%I;'1O.G-T<G5T<RUU<V5R+6AE;'! :F%K M87)T82YA<&%C:&4N;W)G(CYM86EL=&\Z<W1R=71S+75S97(M:&5L<$!J86MA M<G1A+F%P86-H92YO<F<\+T$^)F=T.SPO1D].5#X-"CPO4#X-"@T*/"]"3T19 */@T*/"](5$U,/@`` ` end -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>