Enhancement suggestion (half-baked)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Enhancement suggestion (half-baked)

Bill Schwab-2
Hi Andy,

Some time ago, and probably for no valid reason, I shot myself in the foot a
little by using splash screens for some things that would (I think) be
better handled with progress dialogs.  Looking at what I have to fix, I'm
starting to see a pattern.  Most of the tasks in question are things that
might be best limited in time with some text descriptions to be displayed at
certain milestones.

The time-based stuff is easy to do.  My suggestion surrounds methods like
ProgressDialog class>>showModalWhile:.  Currently, they pass a value adapter
to the block; could ProgressDialog implement #value: (pass it on to the
progress bar) and then allow #showModalWhile: and friends to pass the
progress dialog itself to the block?  Then we could access the text as well
as progress value.   What do you think?

Have a good one,

Bill

--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Enhancement suggestion (half-baked)

Christopher J. Demers
Bill Schwab <[hidden email]> wrote in message
news:9rsfhi$vn802$[hidden email]...
...
> The time-based stuff is easy to do.  My suggestion surrounds methods like
> ProgressDialog class>>showModalWhile:.  Currently, they pass a value
adapter
> to the block; could ProgressDialog implement #value: (pass it on to the
> progress bar) and then allow #showModalWhile: and friends to pass the
> progress dialog itself to the block?  Then we could access the text as
well
> as progress value.   What do you think?
...

I like your suggestion.  In fact I had to do something similar recently.  If
ProgressDialog worked as you suggest it would have been a bit easier for me.
This is the code I ended up using:
==============
 progDialog := ProgressDialog operation: [:progress |
  Cursor wait makeCurrent.
  progDialog caption: 'Loading Compounds...'.
  self  importCompounds: progress.
  progDialog caption: 'Loading Equipment...'.
  self importEquipment: progress.
  progDialog caption: 'Loading Process...'.
  newProcess := self  importProcess: progress.
  Cursor arrow makeCurrent].
 progDialog allowCancel: false.
 progDialog showModal.
==============

Chris


Reply | Threaded
Open this post in threaded view
|

Re: Enhancement suggestion (half-baked)

Bill Schwab-2
Chris,

> I like your suggestion.  In fact I had to do something similar recently.
If
> ProgressDialog worked as you suggest it would have been a bit easier for
me.

> This is the code I ended up using:
> ==============
>  progDialog := ProgressDialog operation: [:progress |
>   Cursor wait makeCurrent.
>   progDialog caption: 'Loading Compounds...'.
>   self  importCompounds: progress.
>   progDialog caption: 'Loading Equipment...'.
>   self importEquipment: progress.
>   progDialog caption: 'Loading Process...'.
>   newProcess := self  importProcess: progress.
>   Cursor arrow makeCurrent].
>  progDialog allowCancel: false.
>  progDialog showModal.
> ==============

There's also a #text: selector that you might like better than #caption:.

Since I shot myself in the foot _many_ times<g>, I'm being very careful to
write a very convenient helper method do something like what you've done
above, but hide the details.  Do you have any ideas about what to do if the
block terminates abnormally?  I will probably end up trapping Error and
setting one of a couple of flags, but, (I think anyway) it would be nice to
have the progress dialog go away if the process it "protects" terminates.
My splash screens seem to do that well enough, but, they are not modal so
impatient users can (and do) get themselves into trouble.

Re the potential change, the only thing I can think of in D4 that would
cause trouble is if somebody went from adapter->subject->parent (or whatever
it would take) to locate the progress dialog and set the text.  For D5, I
suppose there could be collisions with the refactored presenter hierarchy,
but, since ProgressDialog probably isn't a value presenter, it might not
matter???

Have a good one,

Bill

--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Enhancement suggestion (half-baked)

Bill Schwab-2
Hello all,

There is a problem with my half-baked suggestion: ProgressDialog is a value
dialog :(   It appears that #forkOperation: takes advantage of this to cache
the value returned by the block (the one that does the real work).  However,
it might be possible to use another mechanism for caching and still get the
same behavior of making the dialog the argument rather than the value
adapter on the progress bar.  Actually, one could introduce another object
that responds to #value: and #text:, and maybe that's the better solution.

Having spent much of today trying to get something that works like my splash
screens but is modal, I now recall why I felt forced to use splash screens
some time ago: this is kinda tricky.  If I get anything that's useful and
not tied to proprietary stuff, I'll make it available for general use and
(hopefully) better suggestions.

Have a good one,

Bill

--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Enhancement suggestion (half-baked)

Bill Schwab-2
Hello all,

You might want to (cautiously please) have a look at the following:

  http://needle.anest.ufl.edu/anest4/bills/TimedEvaluator.zip

File it in and look at the class side methods.  Comments/bug reports/better
ideas are all welcome.

Have a good one,

Bill

--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Enhancement suggestion (half-baked)

Christopher J. Demers
In reply to this post by Bill Schwab-2
Bill Schwab <[hidden email]> wrote in message
news:9ru56s$vsbtk$[hidden email]...

> There's also a #text: selector that you might like better than #caption:.

I don't remember why I used #caption: rather than #text:.  I think I was
going to use text for a more detailed progress display such as showing the
name of the item being imported and let the caption be more general.
However my design prohibits me form doing that since I pass the progress
value holder rather than a reffereence to the progress dialog.

> Since I shot myself in the foot _many_ times<g>, I'm being very careful to
> write a very convenient helper method do something like what you've done
> above, but hide the details.  Do you have any ideas about what to do if
the
> block terminates abnormally?  I will probably end up trapping Error and
...

Code terminate abnormally?  Of course that never happens. ;)   Actually I
did run into that problem as I was developing the code and I ended up having
to do a  few (ProgressDialog allInstances first close)'s, or something like
that.  My code is not in a production environment yet so I do not have all
the error handling in place yet.  I think I could just use an #ifCurtailed:
around a block to close the ProgressDialog, or add more robust error
handling as needed.

I just saw your message with the attachment, I shall look at that now.

Chris


Reply | Threaded
Open this post in threaded view
|

Re: Enhancement suggestion (half-baked)

Andy Bower
In reply to this post by Bill Schwab-2
Bill,

> There is a problem with my half-baked suggestion: ProgressDialog is a
value
> dialog :(   It appears that #forkOperation: takes advantage of this to
cache
> the value returned by the block (the one that does the real work).
However,
> it might be possible to use another mechanism for caching and still get
the
> same behavior of making the dialog the argument rather than the value
> adapter on the progress bar.  Actually, one could introduce another object
> that responds to #value: and #text:, and maybe that's the better solution.
>
> Having spent much of today trying to get something that works like my
splash
> screens but is modal, I now recall why I felt forced to use splash screens
> some time ago: this is kinda tricky.  If I get anything that's useful and
> not tied to proprietary stuff, I'll make it available for general use and
> (hopefully) better suggestions.

For D5 we've taken this suggestion on board and moved ProgressDialog so it's
no longer a subclass of ValueDialog. Attached is the new CLS file that you
should be able to try under D4 (although I haven't verified this). The
example methods on the class side illustrate its use.

Best Regards,

Andy Bower
Dolphin Support
http://www.object-arts.com
---
Are you trying too hard?
http://www.object-arts.com/Relax.htm
---






















begin 666 ProgressDialog.cls
M(D9I;&5D(&]U="!F<F]M($1O;'!H:6X@4VUA;&QT86QK(#(P,# @<F5L96%S
M92 U+C P(B$-"@T*1&EA;&]G('-U8F-L87-S.B C4')O9W)E<W-$:6%L;V<-
M"@EI;G-T86YC959A<FEA8FQE3F%M97,Z("=P<F]G<F5S<U!R97-E;G1E<B!O
M<&5R871I;VX@<')O8V5S<R!T97AT4')E<V5N=&5R(&%L;&]W0V%N8V5L('!R
M:6]R:71Y)PT*"6-L87-S5F%R:6%B;&5.86UE<SH@)R<-"@EP;V]L1&EC=&EO
M;F%R:65S.B G)PT*"6-L87-S26YS=&%N8V5687)I86)L94YA;65S.B G)R$-
M"E!R;V=R97-S1&EA;&]G(&=U:60Z("A'54E$(&9R;VU3=')I;F<Z("=[.#="
M-$,V04(M,#(V12TQ,40S+3E&1#<M,#!!,$-#,T4T03,R?2<I(0T*4')O9W)E
M<W-$:6%L;V<@8V]M;65N=#H@)U!R;V=R97-S1&EA;&]G(&ES(&$@/'9A;'5E
M1&EA;&]G4')E<V5N=&5R/B!T:&%T(&-A;B!B92!U<V5D('1O(&EN9&EC871E
M('1H92!P<F]G<F5S<R!O9B!A(&)A8VMG<F]U;F0@;W!E<F%T:6]N+B!4:&4@
M/'9A;'5E36]D96P^(&ES('5S960@=&\@:&]L9"!A(#QN=6UB97(^('1H870@
M9&5S8W)I8F5S('1H92!C=7)R96YT(&%M;W5N="!O9B!P<F]G<F5S<R!T:')O
M=6=H('1H92!O<&5R871I;VXN(%1Y<&EC86QL>2P@=VET:"!T:&4@<W1A;F1A
M<F0@=FEE=W,L('1H:7,@=VEL;"!B92!A;B \:6YT96=E<CX@8F5T=V5E;B P
M(&%N9" Q,# E+@T*#0I4:&4@=F%R:6]U<R!;:6YS=&%N8V4@8W)E871I;VY=
M(&UE=&AO9',@86-C97!T(&$@/&UO;F%D:6-686QU86)L93X@;W!E<F%T:6]N
M('=H:6-H(&ES(&5V86QU871E9"!I;B!A(&)A8VMG<F]U;F0@<')O8V5S<RX@
M5&AE('!A<F%M971E<B!P87-S960@=&\@=&AE(&]P97)A=&EO;B!I<R!T:&4@
M/'9A;'5E36]D96P^(&]F('1H92!0<F]G<F5S<T1I86QO9RX@270@:7,@=&AE
M;B!T:&4@<F5S<&]N<VEB:6QI='D@;V8@=&AE(&]P97)A=&EO;BP@87,@:70@
M<')O9W)E<W-E<RP@=&\@<&5R:6]D:6-A;&QY('5P9&%T92!T:&ES('=I=&@@
M=&AE('-T871E(&]F('!R;V=R97-S+@T*#0I4:&4@8VQA<W,@:6YC;'5D97,@
M82!N=6UB97(@;V8@97AA;7!L97,@=&\@9&5M;VYS=')A=&4@:71S('5S93H-
M"E!R;V=R97-S1&EA;&]G(&5X86UP;&4Q+@T*4')O9W)E<W-$:6%L;V<@97AA
M;7!L93(N#0I0<F]G<F5S<T1I86QO9R!E>&%M<&QE,RX-"@T*26YS=&%N8V4@
M5F%R:6%B;&5S.@T*"7!R;V=R97-S4')E<V5N=&5R"0D\3G5M8F5R4')E<V5N
M=&5R/B!D:7-P;&%Y:6YG('1H92!C=7)R96YT('-T871E(&]F('!R;V=R97-S
M+@T*"6]P97)A=&EO;@D)"3QM;VYA9&EC5F%L=6%B;&4^(&AO;&1I;F<@=&AE
M(&]P97)A=&EO;B!T;R!B92!P97)F;W)M960N#0H)<')O8V5S<PD)"3Q0<F]C
M97-S/B!E=F%L=6%T:6YG('1H92!O<&5R871I;VXN#0H)=&5X=%!R97-E;G1E
M<@D)/%1E>'10<F5S96YT97(^(&1I<W!L87EI;F<@=&AE(&1E<V-R:7!T:79E
M('1E>'0@=&\@9&5S8W)I8F4@=&AE(&]P97)A=&EO;BX-"@T*#0HG(0T*(5!R
M;V=R97-S1&EA;&]G(&-A=&5G;W)I97-&;W)#;&%S<R%-5E M4')E<V5N=&5R
M<R$@(0T*(5!R;V=R97-S1&EA;&]G(&UE=&AO9'-&;W(A#0H-"F%L;&]W0V%N
M8V5L#0H)(D%N<W=E<B!W:&5T:&5R('1H92!U<V5R(&ES('!E<FUI='1E9"!T
M;R!C86YC96P@=&AE(&]P97)A=&EO;BXB#0H-"@E>86QL;W=#86YC96PA#0H-
M"F%L;&]W0V%N8V5L.B!A0F]O;&5A;@T*"2)3970@=VAE=&AE<B!T:&4@=7-E
M<B!I<R!P97)M:71T960@=&\@8V%N8V5L('1H92!O<&5R871I;VXN(@T*#0H)
M86QL;W=#86YC96P@.CT@84)O;VQE86XN#0H)<V5L9B!I;G9A;&ED871E57-E
M<DEN=&5R9F%C92$-"@T*86YS=V5R#0H)(D%N<W=E<B!T:&4@;6]D96P@:68@
M=&AE(')E8V5I=F5R('=A<R!C;VYF:7)M960@*'=I=&@@(V%P<&QY+" C;VMA
M>2D@#0H);W(@;FEL(&]T:&5R=VES92X@1&5R969E<F5N8V4@=&AE('9A;'5E
M(&9R;VT@=&AE(&UO9&5L('-I;F-E('1H:7,@=VEL; T*"6)E(&UO<W0@=7-E
M9G5L(@T*#0H)7G-E;&8@:7-#;VYF:7)M960-"@D):694<G5E.B!;('-E;&8@
M;6]D96P@<W5B:F5C="!V86QU92!=#0H)"6EF1F%L<V4Z(%L@;FEL(%TA#0H-
M"F-A;F-E; T*"2)#86YC96P@=&AE(&]P97)A=&EO;B!A;F0@8VQO<V4@=&AE
M(')E8V5I=F5R+B(-"@T*"7!R;V-E<W,@=&5R;6EN871E+@T*"7!R;V-E<W,@
M.CT@;FEL+@T*"7-U<&5R(&-A;F-E;"$-"@T*8W)E871E0V]M<&]N96YT<PT*
M"2)#<F5A=&4@=&AE('!R97-E;G1E<G,@8V]N=&%I;F5D(&)Y('1H92!R96-E
M:79E<B(-"@T*"7-U<&5R(&-R96%T94-O;7!O;F5N=',N#0H)<')O9W)E<W-0
M<F5S96YT97(@.CT@<V5L9B!A9&0Z($YU;6)E<E!R97-E;G1E<B!N97<@;F%M
M93H@)W!R;V=R97-S)RX-"@ET97AT4')E<V5N=&5R(#H]('-E;&[hidden email]!4
M97AT4')E<V5N=&5R(&YE=R!N86UE.B G=&5X="<-"@T*(0T*#0IF;W)K3W!E
M<F%T:6]N#0H)(E!R:79A=&4@+2!3=&%R="!T:&4@<F5C96EV97(G<R!O<&5R
M871I;VX@870@=&AE(&-U<G)E;G0@<')I;W)I='D-"@DH=&AE('5S97(@<W5P
M<&QI960@;W!E<F%T:6]N(&-A;B!M;V1I9GD@=&AE('!R:6]R:71Y+"!I9B!D
M97-I<F5D+ T*"6)Y(&UE86YS(&]F(&$@)U!R;V-E<W-O<B!A8W1I=F50<F]C
M97,@<')I;W)I='DZ(%@G(&5X<')E<W-I;VXI+B(-"@T*"7!R;V-E<W,@.CT@
M6W-E;&8@;6]D96P@<W5B:F5C="!V86QU93H@*&]P97)A=&EO;B!V86QU93H@
M<V5L9BDN('-E;&8@;VM=(&9O<FM!=#H@<V5L9B!P<FEO<FET>2$-"@T*:6YI
M=&EA;&EZ90T*"2)0<FEV871E("T@26YI=&EA;&EZ92!T:&4@<F5C96EV97(B
M#0H-"@ES=7!E<B!I;FET:6%L:7IE+@T*"6%L;&]W0V%N8V5L(#H]('1R=64N
M#0H)<')I;W)I='D@.CT@4')O8V5S<V]R('5S97)"86-K9W)O=6YD4')I;W)I
M='DN(0T*#0IO<&5R871I;VX-"@DB06YS=V5R('1H92!V86QU92!O9B!T:&4@
M<F5C96EV97(G<R!I;G-T86YC92!V87)I86)L92 G;W!E<F%T:6]N)RX-"@E4
M:&ES(&UE=&AO9"!W87,@875T;VUA=&EC86QL>2!G96YE<F%T960L(&)U="!M
M87D@8F4@;6]D:69I960N(@T*#0H)7F]P97)A=&EO;B$-"@T*;W!E<F%T:6]N
M.B!A;D]B:F5C= T*"2)3970@=&AE('9A;'5E(&]F('1H92!R96-E:79E<B=S
M(&EN<W1A;F-E('9A<FEA8FQE("=O<&5R871I;VXG('1O(&%N3V)J96-T+@T*
M"51H:7,@;65T:&]D('=A<R!A=71O;6%T:6-A;&QY(&=E;F5R871E9"P@8G5T
M(&UA>2!B92!M;V1I9FEE9"XB#0H-"@EO<&5R871I;VX@.CT@86Y/8FIE8W0A
M#0H-"G!R:6]R:71Y#0H)(D%N<W=E<B!T:&4@<')I;W)I='D@870@=VAI8V@@
M=&AE(&]P97)A=&EO;B!W87,@;W(@=VEL;"!B92!F;W)K960N(@T*#0H)7G!R
M:6]R:71Y(0T*#0IP<FEO<FET>3H@86Y);G1E9V5R#0H)(E-E="!T:&4@<')I
M;W)I='D@870@=VAI8V@@=&AE(&]P97)A=&EO;B!W87,@;W(@=VEL;"!B92!F
M;W)K960N#0H)5&AI<R!M=7-T(&)E(&$@=F%L:60@<')O8V5S<R!P<FEO<FET
M>2!L979E;"XB#0H-"@DH<')I;W)I='D@8F5T=V5E;CH@4')O8V5S<V]R('-Y
M<W1E;4)A8VMG<F]U;F10<FEO<FET>2 -"@D)"6%N9#H@4')O8V5S<V]R(&AI
M9VA)3U!R:6]R:71Y*2!I9D9A;'-E.B!;<V5L9B!E<G)O<CH@)TEN=F%L:60@
M<')I;W)I='DG72X-"@EP<FEO<FET>2 Z/2!A;DEN=&5G97(-"@T*(0T*#0IP
M<F]G<F5S<PT*"2)!;G-W97(@=&AE(&-U<G)E;G0@<')O9W)E<W,@=F%L=64N
M#0H)57-E9G5L('=I=&@@;6]D96QE<W,@<')O9W)E<W,@9&EA;&]G<RXB#0H-
M"@E><')O9W)E<W-0<F5S96YT97(@=F%L=64A#0H-"G%U97)Y0V]M;6%N9#H@
M<75E<GD-"@DB4')I=F%T92 M($5N=&5R<R!D971A:6QS(&%B;W5T(&$@<&]T
M96YT:6%L(&-O;6UA;F0@9F]R('1H92!R96-E:79E<B!I;G1O('1H92 -"@D\
M0V]M;6%N9%%U97)Y/BP@('%U97)Y+B(-"@T*"7P@8VUD('P-"@EC;60@.CT@
M<75E<GD@8V]M;6%N9%-Y;6)O;"X-"@T*"6-M9" ]/2 C8V%N8V5L(&EF5')U
M93H@6PT*"0DB3F]T92!T:&%T('=E(&YE960@=&\@9F]R8V4@;W5R<V5L=F5S
M(&%S('1H92!C;VUM86YD('1A<F=E="!T;R!D:7-A8FQE(&-A;F-E;"(-"@D)
M<75E<GD@:7-%;F%B;&5D.B!S96QF(&%L;&]W0V%N8V5L.R!R96-E:79E<CH@
M<V5L9BX-"@D)7G1R=65=+@T*#0H)7G-U<&5R('%U97)Y0V]M;6%N9#H@<75E
M<GD-"@T*(0T*#0IS:&]W#0H)(E-T87)T('1H92!O<&5R871I;VXL(&%N9"!S
M:&]W('1H92!R96-E:79E<B!M;V1E;&5S<VQY+@T*"51H92!R97-U;'0@;V8@
M=&AE(&]P97)A=&EO;B H86YD('1H92!P<F]G<F5S<RD@8V%N(&)E('%U97)I
M960@9G)O;0T*"71H92!R96-E:79E<B!A="!A;GD@=&EM92!U<VEN9R!T:&4@
M;65S<V%G97,@(VES0V]N9FER;65D+" C=F%L=64L( T*"6%N9" C<')O9W)E
M<W,N#0H)(@T*#0H)<V5L9B!F;W)K3W!E<F%T:6]N+@T*"5YS=7!E<B!S:&]W
M(0T*#0IS:&]W36]D86P-"@DB4W1A<G0@=&AE(&]P97)A=&EO;BP@86YD('-H
M;W<@=&AE(')E8V5I=F5R)W,@=FEE=R!A<R!A(&UO9&%L(&1I86QO9RX-"@E!
M;G-W97(@=&AE(')E<W5L="!O9B!T:&4@;W!E<F%T:6]N(&EF('1H92!P<F]C
M97-S(')U;G,@=&\@8V]M<&QE=&EO;BP-"@EO<B!I9B!C86YC96QL960@;W(@
M=&AE('!R;V-E<W,@97AP97)I96YC97,@86X@97AC97!T:6]N+B(-"@T*"7-E
M;&8@9F]R:T]P97)A=&EO;BX-"@E><W5P97(@<VAO=TUO9&%L(0T*#0IT97AT
M.B!P<F]G<F5S<U1E>'0-"@DB4V5T('1H92!D97-C<FEP=&EV92!T97AT(&1I
M<W!L87EE9"!I;B!T:&4@<F5C96EV97(@=&\@8F4@=&AE(#QR96%D86)L95-T
M<FEN9SXL#0H)<')O9W)E<W-497AT+B(-"@T*"71E>'10<F5S96YT97(@;6]D
M96P@=F%L=64Z('!R;V=R97-S5&5X="$-"@T*=F%L=64Z('!R;V=R97-S5F%L
M=64-"@DB4V5T('1H92!N=6UE<FEC('!R;V=R97-S(&1I<W!L87EE9"!I;B!T
M:&4@<F5C96EV97(@=&\@8F4@=&AE(#Q);G1E9V5R/BP-"@EP<F]G<F5S<U9A
M;'5E+B(-"@T*"7!R;V=R97-S4')E<V5N=&5R('9A;'5E.B!P<F]G<F5S<U9A
M;'5E(2 A#0HA4')O9W)E<W-$:6%L;V<@8V%T96=O<FEE<T9O<CH@(V%L;&]W
M0V%N8V5L(6%C8V5S<VEN9R%P=6)L:6,A("$-"B%0<F]G<F5S<T1I86QO9R!C
M871E9V]R:65S1F]R.B C86QL;W=#86YC96PZ(6%C8V5S<VEN9R%P=6)L:6,A
M("$-"B%0<F]G<F5S<T1I86QO9R!C871E9V]R:65S1F]R.B C86YS=V5R(7!U
M8FQI8R$@(0T*(5!R;V=R97-S1&EA;&]G(&-A=&5G;W)I97-&;W(Z("-C86YC
M96PA8V]M;6%N9',A<'5B;&EC(2 A#0HA4')O9W)E<W-$:6%L;V<@8V%T96=O
M<FEE<T9O<CH@(V-R96%T94-O;7!O;F5N=',A:6YI=&EA;&EZ:6YG(7!U8FQI
M8R$@(0T*(5!R;V=R97-S1&EA;&]G(&-A=&5G;W)I97-&;W(Z("-F;W)K3W!E
M<F%T:6]N(6]P97)A=&EO;G,A<'5B;&EC(2 A#0HA4')O9W)E<W-$:6%L;V<@
M8V%T96=O<FEE<T9O<CH@(VEN:71I86QI>F4A:6YI=&EA;&EZ:6YG(7!R:79A
M=&4A("$-"B%0<F]G<F5S<T1I86QO9R!C871E9V]R:65S1F]R.B C;W!E<F%T
M:6]N(6%C8V5S<VEN9R%P=6)L:6,A("$-"B%0<F]G<F5S<T1I86QO9R!C871E
M9V]R:65S1F]R.B C;W!E<F%T:6]N.B%A8V-E<W-I;F<A<'5B;&EC(2 A#0HA
M4')O9W)E<W-$:6%L;V<@8V%T96=O<FEE<T9O<CH@(W!R:6]R:71Y(6%C8V5S
M<VEN9R%P=6)L:6,A("$-"B%0<F]G<F5S<T1I86QO9R!C871E9V]R:65S1F]R
M.B C<')I;W)I='DZ(6%C8V5S<VEN9R%P=6)L:6,A("$-"B%0<F]G<F5S<T1I
M86QO9R!C871E9V]R:65S1F]R.B C<')O9W)E<W,A86-C97-S:6YG(7!U8FQI
M8R$@(0T*(5!R;V=R97-S1&EA;&]G(&-A=&5G;W)I97-&;W(Z("-Q=65R>4-O
M;6UA;F0Z(6-O;6UA;F1S(7!R:79A=&4A("$-"B%0<F]G<F5S<T1I86QO9R!C
M871E9V]R:65S1F]R.B C<VAO=R%O<&5R871I;VYS(7!U8FQI8R$@(0T*(5!R
M;V=R97-S1&EA;&]G(&-A=&5G;W)I97-&;W(Z("-S:&]W36]D86PA;W!E<F%T
M:6]N<R%P=6)L:6,A("$-"B%0<F]G<F5S<T1I86QO9R!C871E9V]R:65S1F]R
M.B C=&5X=#HA86-C97-S:6YG(7!U8FQI8R$@(0T*(5!R;V=R97-S1&EA;&]G
M(&-A=&5G;W)I97-&;W(Z("-V86QU93HA<'5B;&EC(2 A#0H-"B%0<F]G<F5S
M<T1I86QO9R!C;&%S<R!M971H;V1S1F]R(0T*#0IC<F5A=&4Z('9I97=.86UE
M(&]P97)A=&EO;CH@;W!E<F%T:6]N#0H)(D%N<W=E<B!A(&YE=R!I;G-T86YC
M92!O9B!T:&4@<F5C96EV97(@=VET:"!A('9I97<@:61E;G1I9FEE9"!B>2!V
M:65W3F%M90T*"71O(&5V86QU871E('1H92!M;VYA9&EC('9A;'5A8FQE(&%R
M9W5M96YT+"!O<&5R871I;VXL('=H96X@=&AE( T*"6EN<W1A;F-E(&ES('-U
M8G-E<75E;G1L>2!S:&]W;B H92YG+B!B>2!S96YD:6YG(&ET("-S:&]W36]D
M86PI+@T*"5=H96X@=&AE('9I97<@:7,@<VAO=VX@=&AE(&]P97)A=&EO;B!I
M<R!E=F%L=6%T960@:6X@82!B86-K9W)O=6YD( T*"7!R;V-E<W,L(&%N9"!I
M<R!P87-S960@=&AE('!R;V=R97-S(&1I86QO9R!T;R!B92!U<&1A=&5D('=I
M=&@@:71S( T*"7!R;V=R97-S("@C=F%L=64Z(# N+C$P,"P@(W1E>'0Z(&%3
M=')I;F<I+B!)9B!T:&4@:6YS=&%N8V5S(&-A;F-E;"!B=71T;VX-"@EI<R!P
M<F5S<V5D+"!T:&5N('1H92!O<&5R871I;VX@:7,@=&5R;6EN871E9"!A;F0@
M=&AE(&%N<W=E<B!I<R!N:6PN($EF('1H92!O<&5R871I;VX@#0H)<G5N<R!T
M;R!C;VUP;&5T:6]N+"!T:&5N('1H92!A;G-W97(@:7,@<F5S=6QT(&]F('1H
M92!E=F%L=6%T:6]N+B(-"@T*"5XH<V5L9B!C<F5A=&4Z('9I97=.86UE*0T*
M"0EO<&5R871I;VXZ(&]P97)A=&EO;B$-"@T*9&5F875L=$UO9&5L#0H)(D%N
M<W=E<B!A(&1E9F%U;'0@;6]D96P@=&\@8F4@87-S:6=N960@=&\@=&AE(')E
M8V5I=F5R('=H96X@:70-"@EI<R!I;FET:6%L:7IE9"XB#0H-"@E>;FEL(&%S
M5F%L=64A#0H-"F5X86UP;&4Q#0H)(D$@<VEM<&QE(&UO9&%L('!R;V=R97-S
M(&1I86QO9RX@3F]T:6-E(&AO=R!T:&4@<')O9W)E<W,@=&5X="!C86X@86QS
M;R!B92!S970@=VET:&EN#0H)=&AE(&]P97)A=&EO;B!B;&]C:RX@5')Y('!R
M97-S:6YG(&-A;F-E;"!T;R!S964@=&AE(&5F9F5C="!O;B!T:&4@86YS=V5R
M+@T*"0E0<F]G<F5S<T1I86QO9R!E>&%M<&QE,0T*"2(-"@T*"5YS96QF('-H
M;W=-;V1A;%=H:6QE.B!;.G!R;V=R97-S('P@#0H)"3$@=&\Z(#$P,"!D;SH@
M6SII('P@4')O8V5S<V]R('-L965P.B S,"X@<')O9W)E<W,@=F%L=64Z(&D[
M('1E>'0Z(&D@9&ES<&QA>5-T<FEN9RP@)R4G72X@)V-O;7!L971E9"==(0T*
M#0IE>&%M<&QE,@T*"2)!('-I;7!L92!M;V1E;&5S<R!P<F]G<F5S<R!D:6%L
M;V<N#0H)"7@@.CT@4')O9W)E<W-$:6%L;V<@97AA;7!L93(-"@E4<GD@979A
M;'5A=&EN9R!T:&5S92!E>'!R97-S:6]N<R!W:&EL92!T:&4@<')O9W)E<W,@
M9&EA;&]G(&ES('5P.@T*"0EX('!R;V=R97-S+@T*"0EX(&ES0V]N9FER;65D
M+@T*"0EX(&%N<W=E<BX-"@DB#0H-"@E>*'-E;&8@;W!E<F%T:6]N.B -"@D)
M"5LZ<')O9W)E<W,@?" -"@D)"3$@=&\Z(#$P, T*"0D)"61O.B -"@D)"0D)
M6SII('P@#0H)"0D)"5!R;V-E<W-O<B!S;&5E<#H@,3 P+@T*"0D)"0EP<F]G
M<F5S<PT*"0D)"0D)=F%L=64Z(&D[#0H)"0D)"0ET97AT.B!I(&1I<W!L87E3
M=')I;F<@+" G)2==+@T*"0D))V-O;7!L971E9"==*0T*"0EC87!T:6]N.B G
M36]D96QE<W,@<')O9W)E<W,N+BXG.PT*"0ES:&]W(0T*#0IE>&%M<&QE,PT*
M"2)!('-I;7!L92!M;V1A;"!P<F]G<F5S<R!D:6%L;V<@=VET:"!A;B!A;'1E
M<FYA=&EV92!V:65W+@T*"0E0<F]G<F5S<T1I86QO9R!E>&%M<&QE,PT*"2(-
M"@T*"5XH<V5L9B -"@D)8W)E871E.B G3G5M97)I8R!P<F]G<F5S<R!D:6%L
M;V<G#0H)"6]P97)A=&EO;CH@6SIP<F]G<F5S<R!\( T*"0DQ,"!T;SH@,2!B
M>3H@+3$@9&\Z(%LZ:2!\('!R;V=R97-S('9A;'5E.B!I+B!0<F]C97-S;W(@
M<VQE97 Z(#0P,%TN("=C;VUP;&5T960G72D-"@D)"6-A<'1I;VXZ("=#;W5N
M="!D;W=N("XN+B<[#0H)"0EA;&QO=T-A;F-E;#H@9F%L<V4[#0H)"0ES:&]W
M36]D86PA#0H-"FEC;VX-"@DB06YS=V5R<R!A;B!)8V]N('1H870@8V%N(&)E
M('5S960@=&\@<F5P<F5S96YT('1H:7,@8VQA<W,N(@T*#0H)7E1I;64@:6-O
M;@T*(0T*#0IO<&5R871I;VXZ(&]P97)A=&EO;@T*"2)!;G-W97(@82!N97<@
M:6YS=&%N8V4@;V8@=&AE(')E8V5I=F5R('=I=&@@=&AE(&1E9F%U;'0@=FEE
M=R -"@ET;R!E=F%L=6%T92!T:&4@;6]N861I8R!V86QU86)L92!A<F=U;65N
M="P@;W!E<F%T:6]N+"!W:&5N('1H92 -"@EI;G-T86YC92!I<R!S=6)S97%U
M96YT;'D@<VAO=VX@*&4N9RX@8GD@<V5N9&EN9R!I=" C<VAO=TUO9&%L*2X-
M"@E7:&5N('1H92!V:65W(&ES('-H;W=N('1H92!O<&5R871I;VX@:7,@979A
M;'5A=&5D(&EN(&$@8F%C:V=R;W5N9" -"@EP<F]C97-S+"!A;F0@:7,@<&%S
M<V5D(&$@<')O9W)E<W,@9&EA;&]G('1O(&)E('5P9&%T960@=VET:"!I=',@
M#0H)<')O9W)E<W,@*"-V86QU93H@,"XN,3 P+" C=&5X=#H@85-T<FEN9RDN
M($EF('1H92!I;G-T86YC97,@8V%N8V5L(&)U='1O;@T*"6ES('!R97-S960L
M('1H96X@=&AE(&]P97)A=&EO;B!I<R!T97)M:6YA=&5D(&%N9"!T:&4@86YS
M=V5R(&ES(&YI;"X@268@=&AE(&]P97)A=&EO;B -"@ER=6YS('1O(&-O;7!L
M971I;VXL('1H96X@=&AE(&%N<W=E<B!I<R!R97-U;'0@;V8@=&AE(&5V86QU
M871I;VXN(@T*#0H)7G-E;&8@8W)E871E.B!S96QF(&1E9F%U;'16:65W(&]P
M97)A=&EO;CH@;W!E<F%T:6]N(0T*#0IS:&]W36]D86PZ('9I97=.86UE('=H
M:6QE.B!O<&5R871I;VX-"@DB0W)E871E(&$@;F5W(&EN<W1A;F-E(&]F('1H
M92!R96-E:79E<B!W:71H(&$@=FEE=R!I9&5N=&EF:65D(&)Y('9I97=.86UE
M#0H)=&\@979A;'5A=&4@=&AE(&UO;F%D:6,@=F%L=6%B;&4@87)G=6UE;G0L
M(&]P97)A=&EO;BX@5&AE('9I97<@:7,@#0H)9&ES<&QA>65D(&UO9&%L('1O
M('1H92!C=7)R96YT(&%C=&EV92!W:6YD;W<N(%1H92!O<&5R871I;VX@:7,@
M979A;'5A=&5D( T*"6EN(&$@8F%C:V=R;W5N9"!P<F]C97-S+"!A;F0@:7,@
M<&%S<V5D(&$@<')O9W)E<W,@9&EA;&]G('1O(&)E('5P9&%T960@=VET:"!I
M=',@#0H)<')O9W)E<W,@*"-V86QU93H@,"XN,3 P+" C=&5X=#H@85-T<FEN
M9RDN($EF('1H92!I;G-T86YC97,@8V%N8V5L(&)U='1O;B!I<R!P<F5S<V5D
M+"!T:&5N( T*"71H92!O<&5R871I;VX@:7,@=&5R;6EN871E9"!A;F0@=&AE
M(&%N<W=E<B!I<R!N:6PN($EF('1H92!O<&5R871I;VX@#0H)<G5N<R!T;R!C
M;VUP;&5T:6]N+"!T:&5N('1H92!A;G-W97(@:7,@<F5S=6QT(&]F('1H92!E
M=F%L=6%T:6]N+B(-"@T*"5XH<V5L9B!C<F5A=&4Z('9I97=.86UE(&]P97)A
M=&EO;CH@;W!E<F%T:6]N*0T*"0ES:&]W36]D86PA#0H-"G-H;W=-;V1A;%=H
M:6QE.B!O<&5R871I;VX-"@DB0W)E871E(&$@;F5W(&EN<W1A;F-E(&]F('1H
M92!R96-E:79E<B!W:71H(&ET<R!D969A=6QT('9I97<L#0H)=&\@979A;'5A
M=&4@=&AE(&UO;F%D:6,@=F%L=6%B;&4@87)G=6UE;G0L(&]P97)A=&EO;BX@
M5&AE('9I97<@:7,@#0H)9&ES<&QA>65D(&UO9&%L('1O('1H92!C=7)R96YT
M(&%C=&EV92!W:6YD;W<N(%1H92!O<&5R871I;VX@:7,@979A;'5A=&5D( T*
M"6EN(&$@8F%C:V=R;W5N9"!P<F]C97-S+"!A;F0@:7,@<&%S<V5D(&$@<')O
M9W)E<W,@9&EA;&]G('1O(&)E('5P9&%T960@=VET:"!I=',@#0H)<')O9W)E
M<W,@*"-V86QU93H@,"XN,3 P+" C=&5X=#H@85-T<FEN9RDN($EF('1H92!I
M;G-T86YC97,@8V%N8V5L(&)U='1O;B!I<R!P<F5S<V5D+"!T:&5N( T*"71H
M92!O<&5R871I;VX@:7,@=&5R;6EN871E9"!A;F0@=&AE(&%N<W=E<B!I<R!N
M:6PN($EF('1H92!O<&5R871I;VX@#0H)<G5N<R!T;R!C;VUP;&5T:6]N+"!T
M:&5N('1H92!A;G-W97(@:7,@<F5S=6QT(&]F('1H92!E=F%L=6%T:6]N+B(-
M"@T*"5YS96QF('-H;W=-;V1A;#H@<V5L9B!D969A=6QT5FEE=R!W:&EL93H@
M;W!E<F%T:6]N(2 A#0HA4')O9W)E<W-$:6%L;V<@8VQA<W,@8V%T96=O<FEE
M<T9O<CH@(V-R96%T93IO<&5R871I;VXZ(6EN<W1A;F-E(&-R96%T:6]N(7!U
M8FQI8R$@(0T*(5!R;V=R97-S1&EA;&]G(&-L87-S(&-A=&5G;W)I97-&;W(Z
M("-D969A=6QT36]D96PA<'5B;&EC(2 A#0HA4')O9W)E<W-$:6%L;V<@8VQA
M<W,@8V%T96=O<FEE<T9O<CH@(V5X86UP;&4Q(65X86UP;&5S(7!U8FQI8R$@
M(0T*(5!R;V=R97-S1&EA;&]G(&-L87-S(&-A=&5G;W)I97-&;W(Z("-E>&%M
M<&QE,B%E>&%M<&QE<R%P=6)L:6,A("$-"B%0<F]G<F5S<T1I86QO9R!C;&%S
M<R!C871E9V]R:65S1F]R.B C97AA;7!L93,A97AA;7!L97,A<'5B;&EC(2 A
M#0HA4')O9W)E<W-$:6%L;V<@8VQA<W,@8V%T96=O<FEE<T9O<CH@(VEC;VXA
M8V]N<W1A;G1S(7!U8FQI8R$@(0T*(5!R;V=R97-S1&EA;&]G(&-L87-S(&-A
M=&5G;W)I97-&;W(Z("-O<&5R871I;VXZ(6EN<W1A;F-E(&-R96%T:6]N(7!U
M8FQI8R$@(0T*(5!R;V=R97-S1&EA;&]G(&-L87-S(&-A=&5G;W)I97-&;W(Z
M("-S:&]W36]D86PZ=VAI;&4Z(6EN<W1A;F-E(&-R96%T:6]N(7!U8FQI8R$@
M(0T*(5!R;V=R97-S1&EA;&]G(&-L87-S(&-A=&5G;W)I97-&;W(Z("-S:&]W
K36]D86Q7:&EL93HA:6YS=&%N8V4@8W)E871I;VXA<'5B;&EC(2 A#0H-"@``
`
end