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]>

Reply via email to