zsh-workers
 help / color / mirror / code / Atom feed
* bug (?) in 3.0-pre1
@ 1996-06-28 17:12 gene
  1996-06-28 17:50 ` Zoltan Hidvegi
  0 siblings, 1 reply; 11+ messages in thread
From: gene @ 1996-06-28 17:12 UTC (permalink / raw)
  To: zsh-workers


HPUX 9.01 s700.

Start a new shell and do 'cd -' generates BUG.

 % exec $SHELL
 % cd -
 ~/app/gnuplot/gnuplot
 BUG: permanent allocation in doshfunc
 %


Gene
gene@bear.com

--
*******************************************************************************
Bear Stearns is not responsible for any recommendation, solicitation, offer or
agreement or any information about any transaction, customer account or account
activity contained in this communication.
*******************************************************************************



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: bug (?) in 3.0-pre1
  1996-06-28 17:12 bug (?) in 3.0-pre1 gene
@ 1996-06-28 17:50 ` Zoltan Hidvegi
  1996-06-28 19:04   ` Steven L Baur
  1996-06-29 19:13   ` Bart Schaefer
  0 siblings, 2 replies; 11+ messages in thread
From: Zoltan Hidvegi @ 1996-06-28 17:50 UTC (permalink / raw)
  To: gene; +Cc: zsh-workers

> 
> HPUX 9.01 s700.
> 
> Start a new shell and do 'cd -' generates BUG.
> 
>  % exec $SHELL
>  % cd -
>  ~/app/gnuplot/gnuplot
>  BUG: permanent allocation in doshfunc
>  %

I added an additional test to doshfunc() which revealed a memory leak
again.  Below is the patch to fix that.

Zoltan

*** Src/builtin.c	1996/06/28 02:05:24	2.49
--- Src/builtin.c	1996/06/28 17:46:27
***************
*** 1269,1275 ****
--- 1269,1277 ----
      if ((l = getshfunc("chpwd"))) {
  	fflush(stdout);
  	fflush(stderr);
+ 	heapalloc();
  	doshfunc(dupstruct(l), NULL, 0, 1);
+ 	permalloc();
      }
  
      /* handle directory stack sizes out of range */



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: bug (?) in 3.0-pre1
  1996-06-28 17:50 ` Zoltan Hidvegi
@ 1996-06-28 19:04   ` Steven L Baur
  1996-06-29 19:13   ` Bart Schaefer
  1 sibling, 0 replies; 11+ messages in thread
From: Steven L Baur @ 1996-06-28 19:04 UTC (permalink / raw)
  To: zsh-workers

>>>>> "Zoltan" == Zoltan Hidvegi <hzoli@cs.elte.hu> writes:
>> BUG: permanent allocation in doshfunc

Zoltan> I added an additional test to doshfunc() which revealed a memory leak
Zoltan> again.  Below is the patch to fix that.

Yes it does.  Thanks.
-- 
steve@miranova.com baur
Unsolicited commercial e-mail will be proofread for $250/hour.
Andrea Seastrand: For your vote on the Telecom bill, I will vote for anyone
except you in November.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: bug (?) in 3.0-pre1
  1996-06-28 17:50 ` Zoltan Hidvegi
  1996-06-28 19:04   ` Steven L Baur
@ 1996-06-29 19:13   ` Bart Schaefer
  1996-06-30 16:13     ` Zoltan Hidvegi
  1 sibling, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 1996-06-29 19:13 UTC (permalink / raw)
  To: Zoltan Hidvegi, zsh-workers

On Jun 28,  7:50pm, Zoltan Hidvegi wrote:
} Subject: Re: bug (?) in 3.0-pre1
}
} I added an additional test to doshfunc() which revealed a memory leak
} again.  Below is the patch to fix that.

Once again, I ask:  Might it not be better to add at the top of doshfunc:

	int luh = useheap;

	if (!luh)
	    heapalloc();

and then before returning:

	if (!luh)
	    permalloc();

Seems like almost any of the MUSTUSEHEAP() functions should adjust and
then restore the allocation strategy internally, rather than relying on
every caller to do so ...


-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: bug (?) in 3.0-pre1
  1996-06-29 19:13   ` Bart Schaefer
@ 1996-06-30 16:13     ` Zoltan Hidvegi
  1996-06-30 19:21       ` Bart Schaefer
  0 siblings, 1 reply; 11+ messages in thread
From: Zoltan Hidvegi @ 1996-06-30 16:13 UTC (permalink / raw)
  To: schaefer; +Cc: zsh-workers

> Seems like almost any of the MUSTUSEHEAP() functions should adjust and
> then restore the allocation strategy internally, rather than relying on
> every caller to do so ...

But usually it is a bug if the caller use permanent allocation.  In most
places zsh uses heap allocation.  It is an exception when a function uses
permanent allocation and in that case it must always be very careful.  I
know that you do not like this heap very much but I still think that it
simplifies the code and makes memory management faster.

Zoltan



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: bug (?) in 3.0-pre1
  1996-06-30 16:13     ` Zoltan Hidvegi
@ 1996-06-30 19:21       ` Bart Schaefer
  1996-06-30 21:50         ` Action, not words (Re: bug (?) in 3.0-pre1) Bart Schaefer
  0 siblings, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 1996-06-30 19:21 UTC (permalink / raw)
  To: Zoltan Hidvegi, zsh-workers

On Jun 30,  6:13pm, Zoltan Hidvegi wrote:
} Subject: Re: bug (?) in 3.0-pre1
}
} > Seems like almost any of the MUSTUSEHEAP() functions should adjust and
} > then restore the allocation strategy internally, rather than relying on
} > every caller to do so ...
} 
} But usually it is a bug if the caller use permanent allocation.  In most
} places zsh uses heap allocation.  It is an exception when a function uses
} permanent allocation and in that case it must always be very careful.

That's true, but it's at odds with the code-structure model implied by
the heapalloc()/permalloc()/lastalloc() conventions.  A function that
calls permalloc() should be able to expect the allocation strategy to
remain "permanent" locally to that function, regardless of other calls
it may make, up until one of heapalloc() or lastalloc() is called.

Similarly, a function that *knows* it needs the heap should be both able
to call and responsible for calling heapalloc() without worrying what
strategy its caller was using.  That's why lastalloc() exists; the only
problem with lastalloc() is that it's a toggle rather than a stack.

} I know that you do not like this heap very much but I still think that
} it simplifies the code and makes memory management faster.

It's not the heap itself I object to.  What I don't like is that the
allocation strategy (heap or "permanent") at any given point in the code
is *implicit* rather than *explicit*.  Because the strategy is changed
globally whenever it changes, a function calling e.g. heapalloc() can't
be sure that some other function down the call tree won't permalloc(),
thus messing up the allocation strategy expected by the caller.

If every function that ever calls heapalloc() or permalloc() were forced
to also restore the previous allocation strategy before returning, much
of this potential confusion would go away.

By the way, I applied your patch from a couple of messages back on this
thread, and yet I *still* get:

zagzig[83] cd ..
BUG: permanent allocation in doshfunc

How many of these are you going to track down before you give up and make
doshfunc() set up heap allocation on its own?

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Action, not words (Re: bug (?) in 3.0-pre1)
  1996-06-30 19:21       ` Bart Schaefer
@ 1996-06-30 21:50         ` Bart Schaefer
  1996-07-02  7:24           ` Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1)) Zefram
  0 siblings, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 1996-06-30 21:50 UTC (permalink / raw)
  To: Zoltan Hidvegi, zsh-workers

On Jun 30, 12:21pm, Bart Schaefer wrote:
} Subject: Re: bug (?) in 3.0-pre1
}
} By the way, I applied your patch from a couple of messages back on this
} thread, and yet I *still* get:
} 
} zagzig[83] cd ..
} BUG: permanent allocation in doshfunc
} 
} How many of these are you going to track down before you give up and make
} doshfunc() set up heap allocation on its own?

Here's a patch that cleans up much of the heapalloc/permalloc mess.  What
this does is:

1.  Rename heapalloc/permalloc/lastalloc as global_heapalloc/et.al.

2.  Introduce macros for heapalloc/permalloc that start with an open
    brace, and a macro for lastalloc that ends with a close brace, so
    it's syntatically required that every heapalloc/permalloc have a
    matching lastalloc.  As this introduces a new block context, use a
    block-local variable in heapalloc/permalloc to remember the state
    of the useheap global, and test the block-local in lastalloc to
    reset the global state appropriately.

    (I normally don't approve of that sort of macro game, but in this
    case it makes more sense than what was there.)

3.  Change a number of permalloc/heapalloc calls to lastalloc, so that
    the block contexts balance.

4.  Where it's not possible to balance the contexts, use the global_*
    calls explicitly.  Ideally, the only place that the global_* calls
    should appear is in main(), so the other uses make it very obvious
    where potential allocation problem areas exist.

5.  Replace two occurrences of MUSTUSEHEAP with two heapalloc/lastalloc
    pairs.  The remaining instances of MUSTUSEHEAP thus also point out
    problem areas, involving `goto's and functions that have a large
    number of `return' exit points.

For those who consider this too sweeping, here's a shorter patch that
fixes only the `BUG: ...' mentioned above:

*** Src/builtin.c.0	Fri Jun 28 06:43:49 1996
--- Src/builtin.c	Sun Jun 30 14:45:32 1996
***************
*** 956,963 ****
  	heapalloc();
  	return 1;
      }
-     cd_new_pwd(func, dir);
      heapalloc();
  
      if (stat(unmeta(pwd), &st1) < 0) {
  	zsfree(pwd);
--- 956,963 ----
  	heapalloc();
  	return 1;
      }
      heapalloc();
+     cd_new_pwd(func, dir);
  
      if (stat(unmeta(pwd), &st1) < 0) {
  	zsfree(pwd);

However, I recommend the uuencoded patch below instead.  This patch is
against 3.0-pre1 with Zoltan's previous patch from this thread already
applied.

begin 644 alloc.diff
M9&EF9B`M<F-0('IS:"TS+C`M<')E,2]3<F,O8G5I;'1I;BYC('IS:"TS+C`M
M<')E,2UW;W)K+U-R8R]B=6EL=&EN+F,**BHJ('IS:"TS+C`M<')E,2]3<F,O
M8G5I;'1I;BYC"49R:2!*=6X@,C@@,#8Z-#,Z-#D@,3DY-@HM+2T@>G-H+3,N
M,"UP<F4Q+7=O<FLO4W)C+V)U:6QT:6XN8PE3=6X@2G5N(#,P(#$S.C0S.C0X
M(#$Y.38**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`S,S$L,S,W("HJ*BH*("`)<F5T
M=7)N(#`["B`@("`@('!E<FUA;&QO8R@I.PH@("`@("!X(#T@87)R9'5P*&%R
M9W,@*R!A<G)A>2D["B$@("`@(&AE87!A;&QO8R@I.PH@("`@("!I9B`H87)R
M87DI"B`@"2\J(&-R96%T92!A;B!A<G)A>2!W:71H('1H92!S<&5C:69I960@
M96QE;65N=',@*B\*("`)<V5T87!A<F%M*"IA<F=S+"!X*3L*+2TM(#,S,2PS
M,S<@+2TM+0H@(`ER971U<FX@,#L*("`@("`@<&5R;6%L;&]C*"D["B`@("`@
M('@@/2!A<G)D=7`H87)G<R`K(&%R<F%Y*3L*(2`@("`@;&%S=&%L;&]C*"D[
M"B`@("`@(&EF("AA<G)A>2D*("`)+RH@8W)E871E(&%N(&%R<F%Y('=I=&@@
M=&AE('-P96-I9FEE9"!E;&5M96YT<R`J+PH@(`ES971A<&%R86TH*F%R9W,L
M('@I.PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#DR,"PY,S0@*BHJ*@H@("`@("`O
M*B!R97!L86-E('1H92!S=&%C:R!W:71H('1H92!S<&5C:69I960@9&ER96-T
M;W)I97,@*B\*("`@("`@<&5R;6%L;&]C*"D["B`@("`@(&P@/2!N97=L:6YK
M;&ES="@I.PHA("`@("!I9B`H(2IA<F=V*2!["B$@"6AE87!A;&QO8R@I.PHA
M(`ER971U<FX@,#L*("`@("`@?0HA("`@("!W:&EL92`H*F%R9W8I"B$@"6%D
M9&QI;FMN;V1E*&PL('IT<F1U<"@J87)G=BLK*2D["B$@("`@(&9R965L:6YK
M;&ES="AD:7)S=&%C:RP@9G)E97-T<BD["B$@("`@(&1I<G-T86-K(#T@;#L*
M(2`@("`@:&5A<&%L;&]C*"D["B`@("`@(')E='5R;B`P.PH@('T*("`*+2TM
M(#DR,"PY,S(@+2TM+0H@("`@("`O*B!R97!L86-E('1H92!S=&%C:R!W:71H
M('1H92!S<&5C:69I960@9&ER96-T;W)I97,@*B\*("`@("`@<&5R;6%L;&]C
M*"D["B`@("`@(&P@/2!N97=L:6YK;&ES="@I.PHA("`@("!I9B`H*F%R9W8I
M('L*(2`)=VAI;&4@*"IA<F=V*0HA(`D@("`@861D;&EN:VYO9&4H;"P@>G1R
M9'5P*"IA<F=V*RLI*3L*(2`)9G)E96QI;FML:7-T*&1I<G-T86-K+"!F<F5E
M<W1R*3L*(2`)9&ER<W1A8VL@/2!L.PH@("`@("!]"B$@("`@(&QA<W1A;&QO
M8R@I.PH@("`@("!R971U<FX@,#L*("!]"B`@"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ
M*BH@.34S+#DV,R`J*BHJ"B`@("`@('!U<VAN;V1E*&1I<G-T86-K+"!Z=')D
M=7`H<'=D*2D["B`@("`@(&EF("@A*&1I<B`](&-D7V=E=%]D97-T*&YA;2P@
M87)G=BP@;W!S+"!F=6YC*2DI('L*("`)>G-F<F5E*&=E=&QI;FMN;V1E*&1I
M<G-T86-K*2D["B$@"6AE87!A;&QO8R@I.PH@(`ER971U<FX@,3L*("`@("`@
M?0H@("`@("!C9%]N97=?<'=D*&9U;F,L(&1I<BD["BT@("`@(&AE87!A;&QO
M8R@I.PH@(`H@("`@("!I9B`H<W1A="AU;FUE=&$H<'=D*2P@)G-T,2D@/"`P
M*2!["B`@"7IS9G)E92AP=V0I.PHM+2T@.34Q+#DV,2`M+2TM"B`@("`@('!U
M<VAN;V1E*&1I<G-T86-K+"!Z=')D=7`H<'=D*2D["B`@("`@(&EF("@A*&1I
M<B`](&-D7V=E=%]D97-T*&YA;2P@87)G=BP@;W!S+"!F=6YC*2DI('L*("`)
M>G-F<F5E*&=E=&QI;FMN;V1E*&1I<G-T86-K*2D["B$@"6=L;V)A;%]L87-T
M86QL;V,H*3L*("`)<F5T=7)N(#$["B`@("`@('T**R`@("`@;&%S=&%L;&]C
M*"D["B`@("`@(&-D7VYE=U]P=V0H9G5N8RP@9&ER*3L*("`*("`@("`@:68@
M*'-T870H=6YM971A*'!W9"DL("9S=#$I(#P@,"D@>PH@(`EZ<V9R964H<'=D
M*3L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`R.#DQ+#(X.3<@*BHJ*@H@(`D@("`@
M?2!E;'-E(&EF("AL;V-A;&QI<W0@)B8@9G5N8R`A/2!"24Y?15A03U)4*2![
M"B`@"0EP97)M86QL;V,H*3L*("`)"6%D9&QI;FMN;V1E*&QO8V%L;&ES="P@
M>G1R9'5P*&%S9RT^;F%M92DI.PHA(`D):&5A<&%L;&]C*"D["B`@"2`@("!]
M"B`@"2`@("`O*B!C<F5A=&4@82!N97<@;F]D92!F;W(@82!P87)A;65T97(@
M=VET:"!T:&4@9FQA9W,@:6X@8&]N)R!M:6YU<R!T:&4@<F5A9&]N;'D@9FQA
M9R`J+PH@(`D@("`@<&T@/2!C<F5A=&5P87)A;2AZ=')D=7`H87-G+3YN86UE
M*2P@;VX@)B!^4$U?4D5!1$].3%DI.PHM+2T@,C@X.2PR.#DU("TM+2T*("`)
M("`@('T@96QS92!I9B`H;&]C86QL:7-T("8F(&9U;F,@(3T@0DE.7T584$]2
M5"D@>PH@(`D)<&5R;6%L;&]C*"D["B`@"0EA9&1L:6YK;F]D92AL;V-A;&QI
M<W0L('IT<F1U<"AA<V<M/FYA;64I*3L*(2`)"6QA<W1A;&QO8R@I.PH@(`D@
M("`@?0H@(`D@("`@+RH@8W)E871E(&$@;F5W(&YO9&4@9F]R(&$@<&%R86UE
M=&5R('=I=&@@=&AE(&9L86=S(&EN(&!O;B<@;6EN=7,@=&AE(')E861O;FQY
M(&9L86<@*B\*("`)("`@('!M(#T@8W)E871E<&%R86TH>G1R9'5P*&%S9RT^
M;F%M92DL(&]N("8@?E!-7U)%041/3DQ9*3L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ
M*B`S,3(P+#,Q,C8@*BHJ*@H@("`@("`O*B!E9&ET('1H92!P87)A;65T97(@
M=F%L=64@*B\*("`@("`@<&5R;6%L;&]C*"D["B`@("`@('!U<VAN;V1E*&)U
M9G-T86-K+"!Z=')D=7`H<RDI.PHA("`@("!H96%P86QL;V,H*3L*("`@("`@
M:6Y?=F%R960@/2`A;W!S6R=H)UT["B`@("`@('0@/2`H8VAA<B`J*2!Z;&5R
M96%D*'`Q+"!P,BD["B`@("`@(&EN7W9A<F5D(#T@,#L*+2TM(#,Q,3@L,S$R
M-"`M+2TM"B`@("`@("\J(&5D:70@=&AE('!A<F%M971E<B!V86QU92`J+PH@
M("`@("!P97)M86QL;V,H*3L*("`@("`@<'5S:&YO9&4H8G5F<W1A8VLL('IT
M<F1U<"AS*2D["B$@("`@(&QA<W1A;&QO8R@I.PH@("`@("!I;E]V87)E9"`]
M("%O<'-;)V@G73L*("`@("`@="`]("AC:&%R("HI('IL97)E860H<#$L('`R
M*3L*("`@("`@:6Y?=F%R960@/2`P.PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#0Q
M,#4L-#$Q,2`J*BHJ"B`@("`@(&EF("AO<'-;)WHG72D@>PH@(`EP97)M86QL
M;V,H*3L*("`)<'5S:&YO9&4H8G5F<W1A8VLL('IT<F1U<"AS97!J;VEN*&%R
M9W,L($Y53$PI*2D["B$@"6AE87!A;&QO8R@I.PH@(`ER971U<FX@,#L*("`@
M("`@?0H@("`@("`O*B`M<R!O<'1I;VX@+2T@861D('1H92!A<F=U;65N=',@
M=&\@=&AE(&AI<W1O<GD@;&ES="`J+PHM+2T@-#$P,RPT,3`Y("TM+2T*("`@
M("`@:68@*&]P<ULG>B==*2!["B`@"7!E<FUA;&QO8R@I.PH@(`EP=7-H;F]D
M92AB=69S=&%C:RP@>G1R9'5P*'-E<&IO:6XH87)G<RP@3E5,3"DI*3L*(2`)
M;&%S=&%L;&]C*"D["B`@"7)E='5R;B`P.PH@("`@("!]"B`@("`@("\J("US
M(&]P=&EO;B`M+2!A9&0@=&AE(&%R9W5M96YT<R!T;R!T:&4@:&ES=&]R>2!L
M:7-T("HO"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-#$S-"PT,30P("HJ*BH*("`)
M96YT+3YT97AT(#T@>G1R9'5P*'IJ;VEN*&%R9W,L("<@)RDI.PH@(`EE;G0M
M/G-T:6T@/2!E;G0M/F9T:6T@/2!T:6UE*$Y53$PI.PH@(`EE;G0M/F9L86=S
M(#T@,#L*(2`):&5A<&%L;&]C*"D["B`@"7)E='5R;B`P.PH@("`@("!]"B`@
M("`@("\J("UU(&%N9"`M<"`M+2!O=71P=70@=&\@;W1H97(@=&AA;B!S=&%N
M9&%R9"!O=71P=70@*B\*+2TM(#0Q,S(L-#$S."`M+2TM"B`@"65N="T^=&5X
M="`]('IT<F1U<"AZ:F]I;BAA<F=S+"`G("<I*3L*("`)96YT+3YS=&EM(#T@
M96YT+3YF=&EM(#T@=&EM92A.54Q,*3L*("`)96YT+3YF;&%G<R`](#`["B$@
M"6QA<W1A;&QO8R@I.PH@(`ER971U<FX@,#L*("`@("`@?0H@("`@("`O*B`M
M=2!A;F0@+7`@+2T@;W5T<'5T('1O(&]T:&5R('1H86X@<W1A;F1A<F0@;W5T
M<'5T("HO"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-#,Q,RPT,S$Y("HJ*BH*("`@
M("`@("`@("`@("`@("`@("`@(&P@/2!N=6T["B`@("`@("`@("`@("`@("`@
M('!E<FUA;&QO8R@I.PH@("`@("`@("`@("`@("`@("!S(#T@87)R9'5P*',@
M*R!L*3L*(2`@("`@("`@("`@("`@("`@:&5A<&%L;&]C*"D["B`@("`@("`@
M("`@("`@("`@('-E=&%P87)A;2@J87)G=BP@<RD["B`@("`@("`@("`@("`@
M?0H@("`@("!](&5L<V4@>PHM+2T@-#,Q,2PT,S$W("TM+2T*("`@("`@("`@
M("`@("`@("`@("`@(&P@/2!N=6T["B`@("`@("`@("`@("`@("`@('!E<FUA
M;&QO8R@I.PH@("`@("`@("`@("`@("`@("!S(#T@87)R9'5P*',@*R!L*3L*
M(2`@("`@("`@("`@("`@("`@;&%S=&%L;&]C*"D["B`@("`@("`@("`@("`@
M("`@('-E=&%P87)A;2@J87)G=BP@<RD["B`@("`@("`@("`@("`@?0H@("`@
M("!](&5L<V4@>PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#0S,C$L-#,R-R`J*BHJ
M"B`@("`@("`@("`@("`@;G5M(#T@87)R;&5N*'!P87)A;7,I.PH@("`@("`@
M("`@<&5R;6%L;&]C*"D["B`@("`@("`@("!S(#T@87)R9'5P*'!P87)A;7,@
M*R!N=6TI.PHA("`@("`@("`@:&5A<&%L;&]C*"D["B`@("`@("`@("!F<F5E
M87)R87DH<'!A<F%M<RD["B`@("`@("`@("!P<&%R86US(#T@<SL*("`@("`@
M?0HM+2T@-#,Q.2PT,S(U("TM+2T*("`@("`@("`@("`@("!N=6T@/2!A<G)L
M96XH<'!A<F%M<RD["B`@("`@("`@("!P97)M86QL;V,H*3L*("`@("`@("`@
M(',@/2!A<G)D=7`H<'!A<F%M<R`K(&YU;2D["B$@("`@("`@("!L87-T86QL
M;V,H*3L*("`@("`@("`@(&9R965A<G)A>2AP<&%R86US*3L*("`@("`@("`@
M('!P87)A;7,@/2!S.PH@("`@("!]"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-#4R
M."PT-3,T("HJ*BH*("`@("`@:68@*&%R9W9;,5TI('L*("`)<&5R;6%L;&]C
M*"D["B`@"7!P87)A;7,@/2!A<G)D=7`H87)G=B`K(#$I.PHA(`EH96%P86QL
M;V,H*3L*("`@("`@?0H@("`@("!E;F%M(#T@87)G,"`]('IT<F1U<"@J87)G
M=BD["B`@("`@(&EF("AE;75L871I;VX@(3T@14U53$%415]+4T@@)B8@96UU
M;&%T:6]N("$]($5-54Q!5$5?4T@I"BTM+2`T-3(V+#0U,S(@+2TM+0H@("`@
M("!I9B`H87)G=ELQ72D@>PH@(`EP97)M86QL;V,H*3L*("`)<'!A<F%M<R`]
M(&%R<F1U<"AA<F=V("L@,2D["B$@"6QA<W1A;&QO8R@I.PH@("`@("!]"B`@
M("`@(&5N86T@/2!A<F<P(#T@>G1R9'5P*"IA<F=V*3L*("`@("`@:68@*&5M
M=6QA=&EO;B`A/2!%355,051%7TM32"`F)B!E;75L871I;VX@(3T@14U53$%4
M15]32"D*9&EF9B`M<F-0('IS:"TS+C`M<')E,2]3<F,O97AE8RYC('IS:"TS
M+C`M<')E,2UW;W)K+U-R8R]E>&5C+F,**BHJ('IS:"TS+C`M<')E,2]3<F,O
M97AE8RYC"49R:2!*=6X@,C@@,#8Z-#,Z-#D@,3DY-@HM+2T@>G-H+3,N,"UP
M<F4Q+7=O<FLO4W)C+V5X96,N8PE3=6X@2G5N(#,P(#$S.C0Y.C(P(#$Y.38*
M*BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Q-34R+#$U-3@@*BHJ*@H@(`D@("`@:68@
M*"%F;W)K960@)B8@(6%S<VEG;BD@>PH@(`D)<&5R;6%L;&]C*"D["B`@"0ES
M879E7W!A<F%M<RAC;60I.PHA(`D):&5A<&%L;&]C*"D["B`@"2`@("!]"B`@
M"2`@("`*("`)("`@(&EF("AC;60M/G9A<G,I('L*+2TM(#$U-3(L,34U."`M
M+2TM"B`@"2`@("!I9B`H(69O<FME9"`F)B`A87-S:6=N*2!["B`@"0EP97)M
M86QL;V,H*3L*("`)"7-A=F5?<&%R86US*&-M9"D["B$@"0EL87-T86QL;V,H
M*3L*("`)("`@('T*("`)("`@(`H@(`D@("`@:68@*&-M9"T^=F%R<RD@>PHJ
M*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#(P-C@L,C`W-"`J*BHJ"B`@("`@(&EF("@A
M:F]B=&%B6W1H:7-J;V)=+F9I;&5L:7-T*0H@(`EJ;V)T86);=&AI<VIO8ETN
M9FEL96QI<W0@/2!N97=L:6YK;&ES="@I.PH@("`@("!A9&1L:6YK;F]D92AJ
M;V)T86);=&AI<VIO8ETN9FEL96QI<W0L(&YA;2D["B$@("`@(&AE87!A;&QO
M8R@I.PH@("`@("!C:&EL9%]B;&]C:R@I.PH@("`@("!F9"`](&]P96XH;F%M
M+"!/7U=23TY,62!\($]?0U)%050@?"!/7T580TPL(#`V,#`I.R`O*B!C<F5A
M=&4@=&AE(&9I;&4@*B\*("`*+2TM(#(P-C@L,C`W-"`M+2TM"B`@("`@(&EF
M("@A:F]B=&%B6W1H:7-J;V)=+F9I;&5L:7-T*0H@(`EJ;V)T86);=&AI<VIO
M8ETN9FEL96QI<W0@/2!N97=L:6YK;&ES="@I.PH@("`@("!A9&1L:6YK;F]D
M92AJ;V)T86);=&AI<VIO8ETN9FEL96QI<W0L(&YA;2D["B$@("`@(&QA<W1A
M;&QO8R@I.PH@("`@("!C:&EL9%]B;&]C:R@I.PH@("`@("!F9"`](&]P96XH
M;F%M+"!/7U=23TY,62!\($]?0U)%050@?"!/7T580TPL(#`V,#`I.R`O*B!C
M<F5A=&4@=&AE(&9I;&4@*B\*("`**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`R,34T
M+#(Q-C`@*BHJ*@H@("`@("!I9B`H(6IO8G1A8EMT:&ES:F]B72YF:6QE;&ES
M="D*("`):F]B=&%B6W1H:7-J;V)=+F9I;&5L:7-T(#T@;F5W;&EN:VQI<W0H
M*3L*("`@("`@861D;&EN:VYO9&4H:F]B=&%B6W1H:7-J;V)=+F9I;&5L:7-T
M+"!Z=')D=7`H<&YA;2DI.PHA("`@("!H96%P86QL;V,H*3L*("`@("`@:68@
M*'IF;W)K*"DI('L*("`C96QS90H@("`@("!M<&EP92AP:7!E<RD["BTM+2`R
M,34T+#(Q-C`@+2TM+0H@("`@("!I9B`H(6IO8G1A8EMT:&ES:F]B72YF:6QE
M;&ES="D*("`):F]B=&%B6W1H:7-J;V)=+F9I;&5L:7-T(#T@;F5W;&EN:VQI
M<W0H*3L*("`@("`@861D;&EN:VYO9&4H:F]B=&%B6W1H:7-J;V)=+F9I;&5L
M:7-T+"!Z=')D=7`H<&YA;2DI.PHA("`@("!L87-T86QL;V,H*3L*("`@("`@
M:68@*'IF;W)K*"DI('L*("`C96QS90H@("`@("!M<&EP92AP:7!E<RD["BHJ
M*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,C(Y-2PR,S`U("HJ*BH*("`)("`@('-I9VYU
M;2`](&=E='-I9VYU;2AS("L@-"D["B`@"2`@("!I9B`H<VEG;G5M("$]("TQ
M*2!["B`@"0ES971T<F%P*'-I9VYU;2P@8VUD+3YU+FQI<W0I.PHA(`D)<&5R
M;6%L;&]C*"D["B`@"2`@("!]"B`@"7T*("`@("`@?0HA("`@("!H96%P86QL
M;V,H*3L*("`@("`@<F5T=7)N(#`["B`@?0H@(`HM+2T@,C(Y-2PR,S`U("TM
M+2T*("`)("`@('-I9VYU;2`](&=E='-I9VYU;2AS("L@-"D["B`@"2`@("!I
M9B`H<VEG;G5M("$]("TQ*2!["B`@"0ES971T<F%P*'-I9VYU;2P@8VUD+3YU
M+FQI<W0I.PHA(`D)9VQO8F%L7W!E<FUA;&QO8R@I.PH@(`D@("`@?0H@(`E]
M"B`@("`@('T*(2`@("`@;&%S=&%L;&]C*"D["B`@("`@(')E='5R;B`P.PH@
M('T*("`**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`R,S(X+#(S,S0@*BHJ*@H@(`EP
M97)M86QL;V,H*3L*("`)<VAF+3YF;&%G<R`F/2!^4$U?54Y$149)3D5$.PH@
M(`EF=6YC9&5F(#T@<VAF+3YF=6YC9&5F(#T@*$QI<W0I(&1U<'-T<G5C="AF
M=6YC9&5F*3L*(2`):&5A<&%L;&]C*"D["B`@"7!O<&AE87`H*3L*("`*("`)
M+RH@17AE8W5T92!T:&4@9G5N8W1I;VX@9&5F:6YI=&EO;BP@=V4@:G5S="!R
M971R:79E9"`J+PHM+2T@,C,R."PR,S,T("TM+2T*("`)<&5R;6%L;&]C*"D[
M"B`@"7-H9BT^9FQA9W,@)CT@?E!-7U5.1$5&24Y%1#L*("`)9G5N8V1E9B`]
M('-H9BT^9G5N8V1E9B`]("A,:7-T*2!D=7!S=')U8W0H9G5N8V1E9BD["B$@
M"6QA<W1A;&QO8R@I.PH@(`EP;W!H96%P*"D["B`@"B`@"2\J($5X96-U=&4@
M=&AE(&9U;F-T:6]N(&1E9FEN:71I;VXL('=E(&IU<W0@<F5T<FEV960@*B\*
M*BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`R,S8S+#(S-CD@*BHJ*@H@("`@("!,:7-T
M('AE>&ET9FX["B`@("`@(&-H87(@<V%V96]P='-;3U!47U-)6D5=.PH@(`HA
M("`@("!-55-455-%2$5!4"@B9&]S:&9U;F,B*3L*("`@("`@<'5S:&AE87`H
M*3L*("`@("`@;VQD;&%S='9A;"`](&QA<W1V86P["B`@("`@('AE>&ET='(@
M/2!S:6=T<F%P<&5D6U-)1T58251=.PHM+2T@,C,V,RPR,S8Y("TM+2T*("`@
M("`@3&ES="!X97AI=&9N.PH@("`@("!C:&%R('-A=F5O<'1S6T]05%]325I%
M73L*("`*(2`@("`@:&5A<&%L;&]C*"D["B`@("`@('!U<VAH96%P*"D["B`@
M("`@(&]L9&QA<W1V86P@/2!L87-T=F%L.PH@("`@("!X97AI='1R(#T@<VEG
M=')A<'!E9%M324=%6$E473L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`R-#`Q+#(T
M,#<@*BHJ*@H@("`@("!P97)M86QL;V,H*3L*("`@("`@;VQI<W0@/2!L;V-A
M;&QI<W0["0DO*B!S879E('1H92!O;&0@;&]C86QL:7-T('-I;F-E('-H96QL
M(&9U;F-T:6]N<R!M87D@8F4@;F5S=&5D("HO"B`@("`@(&QO8V%L;&ES="`]
M(&YE=VQI;FML:7-T*"D["2\J(&UA:V4@82!N97<@;&ES="!O9B!L;V-A;"!V
M87)I86)L97,@=&AA="!W92!H879E('1O(&1E<W1R;WD@*B\*(2`@("`@:&5A
M<&%L;&]C*"D["B`@("`@(&QO8V%L;&5V96PK*SL*("`@("`@;W4@/2!Z=')D
M=7`H=6YD97)S8V]R92D["B`@("`@(&5X96-L:7-T*&1U<'-T<G5C="AL:7-T
M*2P@,2P@,"D["BTM+2`R-#`Q+#(T,#<@+2TM+0H@("`@("!P97)M86QL;V,H
M*3L*("`@("`@;VQI<W0@/2!L;V-A;&QI<W0["0DO*B!S879E('1H92!O;&0@
M;&]C86QL:7-T('-I;F-E('-H96QL(&9U;F-T:6]N<R!M87D@8F4@;F5S=&5D
M("HO"B`@("`@(&QO8V%L;&ES="`](&YE=VQI;FML:7-T*"D["2\J(&UA:V4@
M82!N97<@;&ES="!O9B!L;V-A;"!V87)I86)L97,@=&AA="!W92!H879E('1O
M(&1E<W1R;WD@*B\*(2`@("`@;&%S=&%L;&]C*"D["B`@("`@(&QO8V%L;&5V
M96PK*SL*("`@("`@;W4@/2!Z=')D=7`H=6YD97)S8V]R92D["B`@("`@(&5X
M96-L:7-T*&1U<'-T<G5C="AL:7-T*2P@,2P@,"D["BHJ*BHJ*BHJ*BHJ*BHJ
M*@HJ*BH@,C0T.2PR-#4T("HJ*BH*+2TM(#(T-#DL,C0U-2`M+2TM"B`@("`@
M(&EF("AN;W)E='5R;G9A;"D*("`);&%S='9A;"`](&]L9&QA<W1V86P["B`@
M("`@('!O<&AE87`H*3L**R`@("`@;&%S=&%L;&]C*"D["B`@?0H@(`H@("\J
M(%-E87)C:"!F<&%T:"!F;W(@86X@=6YD969I;F5D(&9U;F-T:6]N+B`J+PHJ
M*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#(T-SDL,C0X-2`J*BHJ"B`@"0D@("`@96QS
M92!["B`@"0D):&5A<&%L;&]C*"D["B`@"0D)<B`]('!A<G-E7W-T<FEN9RAD
M*3L*(2`)"0EP97)M86QL;V,H*3L*("`)"2`@("!]"B`@"0D@("`@>F9R964H
M9"P@;&5N("L@,2D["B`@"0D@("`@<F5T=7)N('(["BTM+2`R-#@P+#(T.#8@
M+2TM+0H@(`D)("`@(&5L<V4@>PH@(`D)"6AE87!A;&QO8R@I.PH@(`D)"7(@
M/2!P87)S95]S=')I;F<H9"D["B$@"0D);&%S=&%L;&]C*"D["B`@"0D@("`@
M?0H@(`D)("`@('IF<F5E*&0L(&QE;B`K(#$I.PH@(`D)("`@(')E='5R;B!R
M.PID:69F("UR8U`@>G-H+3,N,"UP<F4Q+U-R8R]I;FET+F,@>G-H+3,N,"UP
M<F4Q+7=O<FLO4W)C+VEN:70N8PHJ*BH@>G-H+3,N,"UP<F4Q+U-R8R]I;FET
M+F,)1G)I($IU;B`R."`P-CHT,SHU,"`Q.3DV"BTM+2!Z<V@M,RXP+7!R93$M
M=V]R:R]3<F,O:6YI="YC"5-U;B!*=6X@,S`@,3(Z-#8Z,S`@,3DY-@HJ*BHJ
M*BHJ*BHJ*BHJ*BH**BHJ(#0V+#4R("HJ*BH*("`@("`@<V5T;&]C86QE*$Q#
M7T%,3"P@(B(I.PH@("-E;F1I9@H@(`HA("`@("!P97)M86QL;V,H*3L*("`*
M("`@("`@9F]R("AT(#T@87)G=CL@*G0[("IT(#T@;65T869Y*"IT+"`M,2P@
M345405]!3$Q/0RDL('0K*RD["B`@"BTM+2`T-BPU,B`M+2TM"B`@("`@('-E
M=&QO8V%L92A,0U]!3$PL("(B*3L*("`C96YD:68*("`*(2`@("`@9VQO8F%L
M7W!E<FUA;&QO8R@I.PH@(`H@("`@("!F;W(@*'0@/2!A<F=V.R`J=#L@*G0@
M/2!M971A9GDH*G0L("TQ+"!-151!7T%,3$]#*2P@="LK*3L*("`**BHJ*BHJ
M*BHJ*BHJ*BHJ"BHJ*B`V."PW-"`J*BHJ"B`@("`@(&EN:71?:6\H*3L*("`@
M("`@<V5T=7!V86QS*"D["B`@("`@(&EN:71?<VEG;F%L<R@I.PHA("`@("!H
M96%P86QL;V,H*3L*("`@("`@<G5N7VEN:71?<V-R:7!T<R@I.PH@("`@("!I
M;FET7VUI<V,H*3L*("`*+2TM(#8X+#<T("TM+2T*("`@("`@:6YI=%]I;R@I
M.PH@("`@("!S971U<'9A;',H*3L*("`@("`@:6YI=%]S:6=N86QS*"D["B$@
M("`@(&=L;V)A;%]H96%P86QL;V,H*3L*("`@("`@<G5N7VEN:71?<V-R:7!T
M<R@I.PH@("`@("!I;FET7VUI<V,H*3L*("`*9&EF9B`M<F-0('IS:"TS+C`M
M<')E,2]3<F,O;&5X+F,@>G-H+3,N,"UP<F4Q+7=O<FLO4W)C+VQE>"YC"BHJ
M*B!Z<V@M,RXP+7!R93$O4W)C+VQE>"YC"49R:2!*=6X@,C@@,#8Z-#,Z-3`@
M,3DY-@HM+2T@>G-H+3,N,"UP<F4Q+7=O<FLO4W)C+VQE>"YC"5-U;B!*=6X@
M,S`@,3,Z-3,Z,C@@,3DY-@HJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#$Q-#,L,3$T
M.2`J*BHJ"B`@>PH@("`@("!I;G0@;"`]('-T<FQE;BAS*2P@97)R.PH@(`HA
M("`@("!-55-455-%2$5!4"@B<&%R<V5S='(B*3L*("`@("`@;&5X<V%V92@I
M.PH@("`@("!U;G1O:V5N:7IE*',I.PH@("`@("!I;G!U<V@H9'5P<W1R:6YG
M*',I+"`P*3L*+2TM(#$Q-#,L,3$T.2`M+2TM"B`@>PH@("`@("!I;G0@;"`]
M('-T<FQE;BAS*2P@97)R.PH@(`HA("`@("!H96%P86QL;V,H*3L*("`@("`@
M;&5X<V%V92@I.PH@("`@("!U;G1O:V5N:7IE*',I.PH@("`@("!I;G!U<V@H
M9'5P<W1R:6YG*',I+"`P*3L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Q,3<Q+#$Q
M-S8@*BHJ*@HM+2T@,3$W,2PQ,3<W("TM+2T*("`)96QS90H@(`D@("`@>F5R
M<B@B<&%R<V4@97)R;W(B+"!.54Q,+"`P*3L*("`@("`@?0HK("`@("!L87-T
M86QL;V,H*3L*("`@("`@<F5T=7)N(&5R<CL*("!]"B`@"F1I9F8@+7)C4"!Z
M<V@M,RXP+7!R93$O4W)C+VUE;2YC('IS:"TS+C`M<')E,2UW;W)K+U-R8R]M
M96TN8PHJ*BH@>G-H+3,N,"UP<F4Q+U-R8R]M96TN8PE&<FD@2G5N(#(X(#`V
M.C0S.C4P(#$Y.38*+2TM('IS:"TS+C`M<')E,2UW;W)K+U-R8R]M96TN8PE3
M=6X@2G5N(#,P(#$R.C(V.C(Q(#$Y.38**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Y
M,BPY."`J*BHJ"B`@"B`@+RHJ+PH@('9O:60*(2!H96%P86QL;V,H=F]I9"D*
M("!["B`@("`@(&%L;&]C(#T@:&-A;&QO8SL*("`@("`@;F-A;&QO8R`](&AA
M;&QO8SL*+2TM(#DR+#DX("TM+2T*("`*("`O*BHO"B`@=F]I9`HA(&=L;V)A
M;%]H96%P86QL;V,H=F]I9"D*("!["B`@("`@(&%L;&]C(#T@:&-A;&QO8SL*
M("`@("`@;F-A;&QO8R`](&AA;&QO8SL**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`Q
M,#<L,3$S("HJ*BH*("`*("`O*BHO"B`@=F]I9`HA('!E<FUA;&QO8RAV;VED
M*0H@('L*("`@("`@;&%S=&-A;&QO8R`](&%L;&]C.PH@("`@("!L87-T;F-A
M;&QO8R`](&YC86QL;V,["BTM+2`Q,#<L,3$S("TM+2T*("`*("`O*BHO"B`@
M=F]I9`HA(&=L;V)A;%]P97)M86QL;V,H=F]I9"D*("!["B`@("`@(&QA<W1C
M86QL;V,@/2!A;&QO8SL*("`@("`@;&%S=&YC86QL;V,@/2!N8V%L;&]C.PHJ
M*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#$R,BPQ,C@@*BHJ*@H@(`H@("\J*B\*("!V
M;VED"B$@;&%S=&%L;&]C*'9O:60I"B`@>PH@("`@("!A;&QO8R`](&QA<W1C
M86QL;V,["B`@("`@(&YC86QL;V,@/2!L87-T;F-A;&QO8SL*+2TM(#$R,BPQ
M,C@@+2TM+0H@(`H@("\J*B\*("!V;VED"B$@9VQO8F%L7VQA<W1A;&QO8RAV
M;VED*0H@('L*("`@("`@86QL;V,@/2!L87-T8V%L;&]C.PH@("`@("!N8V%L
M;&]C(#T@;&%S=&YC86QL;V,["F1I9F8@+7)C4"!Z<V@M,RXP+7!R93$O4W)C
M+VUE;2YH('IS:"TS+C`M<')E,2UW;W)K+U-R8R]M96TN:`HJ*BH@>G-H+3,N
M,"UP<F4Q+U-R8R]M96TN:`E7960@1&5C(#,Q(#$V.C`P.C`P(#$Y-CD*+2TM
M('IS:"TS+C`M<')E,2UW;W)K+U-R8R]M96TN:`E3=6X@2G5N(#,P(#$R.C0P
M.C0U(#$Y.38**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`P("HJ*BH*+2TM(#$L.#D@
M+2TM+0HK("\J"BL@("H@)$ED.B!M96TN8RQV(#(N,B`Q.3DV+S`V+S(X(#`R
M.C`U.C(T(&AZ;VQI($5X<"`D"BL@("H**R`@*B!M96TN:"`M(&UE;6]R>2!M
M86YA9V5M96YT"BL@("H**R`@*B!4:&ES(&9I;&4@:7,@<&%R="!O9B!Z<V@L
M('1H92!:('-H96QL+@HK("`J"BL@("H@0V]P>7)I9VAT("AC*2`Q.3DR+3$Y
M.38@4&%U;"!&86QS=&%D"BL@("H@06QL(')I9VAT<R!R97-E<G9E9"X**R`@
M*@HK("`J(%!E<FUI<W-I;VX@:7,@:&5R96)Y(&=R86YT960L('=I=&AO=70@
M=W)I='1E;B!A9W)E96UE;G0@86YD('=I=&AO=70**R`@*B!L:6-E;G-E(&]R
M(')O>6%L='D@9F5E<RP@=&\@=7-E+"!C;W!Y+"!M;V1I9GDL(&%N9"!D:7-T
M<FEB=71E('1H:7,**R`@*B!S;V9T=V%R92!A;F0@:71S(&1O8W5M96YT871I
M;VX@9F]R(&%N>2!P=7)P;W-E+"!P<F]V:61E9"!T:&%T('1H90HK("`J(&%B
M;W9E(&-O<'ER:6=H="!N;W1I8V4@86YD('1H92!F;VQL;W=I;F<@='=O('!A
M<F%G<F%P:',@87!P96%R(&EN"BL@("H@86QL(&-O<&EE<R!O9B!T:&ES('-O
M9G1W87)E+@HK("`J"BL@("H@26X@;F\@979E;G0@<VAA;&P@4&%U;"!&86QS
M=&%D(&]R('1H92!:<V@@1&5V96QO<&UE;G0@1W)O=7`@8F4@;&EA8FQE"BL@
M("H@=&\@86YY('!A<G1Y(&9O<B!D:7)E8W0L(&EN9&ER96-T+"!S<&5C:6%L
M+"!I;F-I9&5N=&%L+"!O<B!C;VYS97%U96YT:6%L"BL@("H@9&%M86=E<R!A
M<FES:6YG(&]U="!O9B!T:&4@=7-E(&]F('1H:7,@<V]F='=A<F4@86YD(&ET
M<R!D;V-U;65N=&%T:6]N+`HK("`J(&5V96X@:68@4&%U;"!&86QS=&%D(&%N
M9"!T:&4@6G-H($1E=F5L;W!M96YT($=R;W5P(&AA=F4@8F5E;B!A9'9I<V5D
M(&]F"BL@("H@=&AE('!O<W-I8FEL:71Y(&]F('-U8V@@9&%M86=E+@HK("`J
M"BL@("H@4&%U;"!&86QS=&%D(&%N9"!T:&4@6G-H($1E=F5L;W!M96YT($=R
M;W5P('-P96-I9FEC86QL>2!D:7-C;&%I;2!A;GD**R`@*B!W87)R86YT:65S
M+"!I;F-L=61I;F<L(&)U="!N;W0@;&EM:71E9"!T;RP@=&AE(&EM<&QI960@
M=V%R<F%N=&EE<R!O9@HK("`J(&UE<F-H86YT86)I;&ET>2!A;F0@9FET;F5S
M<R!F;W(@82!P87)T:6-U;&%R('!U<G!O<V4N("!4:&4@<V]F='=A<F4**R`@
M*B!P<F]V:61E9"!H97)E=6YD97(@:7,@;VX@86X@(F%S(&ES(B!B87-I<RP@
M86YD(%!A=6P@1F%L<W1A9"!A;F0@=&AE"BL@("H@6G-H($1E=F5L;W!M96YT
M($=R;W5P(&AA=F4@;F\@;V)L:6=A=&EO;B!T;R!P<F]V:61E(&UA:6YT96YA
M;F-E+`HK("`J('-U<'!O<G0L('5P9&%T97,L(&5N:&%N8V5M96YT<RP@;W(@
M;6]D:69I8V%T:6]N<RX**R`@*@HK("`J+PHK(`HK("\J"BL@"BL@"51H97)E
M(&%R92!T=V\@=V%Y<R!T;R!A;&QO8V%T92!M96UO<GD@:6X@>G-H+B`@5&AE
M(&9I<G-T('=A>2!I<PHK(`ET;R!C86QL('IA;&QO8R]Z8V%L;&]C+"!W:&EC
M:"!C86QL(&UA;&QO8R]C86QL;V,@9&ER96-T;'DN("!)=`HK(`EI<R!L96=A
M;"!T;R!C86QL(')E86QL;V,H*2!O<B!F<F5E*"D@;VX@;65M;W)Y(&%L;&]C
M871E9"!T:&ES('=A>2X**R`)5&AE('-E8V]N9"!W87D@:7,@=&\@8V%L;"!H
M86QL;V,O:&-A;&QO8RP@=VAI8V@@86QL;V-A=&5S(&UE;6]R>0HK(`EF<F]M
M(&]N92!O9B!T:&4@;65M;W)Y('!O;VQS(&]N('1H92!H96%P('-T86-K+B`@
M4W5C:"!M96UO<GD@<&]O;',@"BL@"7=I;&P@875T;VUA=&EC86QL>2!C<F5A
M=&5D('=H96X@=&AE(&AE87`@86QL;V-A=&EO;B!R;W5T:6YE<R!A<F4**R`)
M8V%L;&5D+B`@5&\@8F4@<W5R92!T:&%T('1H97D@87)E(&9R965D(&%T(&%P
M<')O<')I871E('1I;65S"BL@"6]N92!S:&]U;&0@8V%L;"!P=7-H:&5A<"@I
M(&)E9F]R92!O;F4@<W1A<G1S('5S:6YG(&AE87!S(&%N9`HK(`EP;W!H96%P
M*"D@869T97(@=&AA="`H=VAE;B!T:&4@;65M;W)Y(&%L;&]C871E9"!O;B!T
M:&4@:&5A<',@<VEN8V4**R`)=&AE(&QA<W0@<'5S:&AE87`H*2!I<VXG="!N
M965D960@86YY;6]R92DN"BL@"7!U<VAH96%P*"D@<V%V97,@=&AE('-T871E
M<R!O9B!A;&P@8W5R<F5N=&QY(&%L;&]C871E9"!H96%P<R!A;F0**R`)<&]P
M:&5A<"@I(')E<V5T<R!T:&5M('1O('1H92!L87-T('-T871E('-A=F5D(&%N
M9"!D97-T<F]Y<R!T:&4**R`):6YF;W)M871I;VX@86)O=70@=&AA="!S=&%T
M92X@($EF('EO=2!C86QL960@<'5S:&AE87`H*2!A;F0**R`)86QL;V-A=&5D
M('-O;64@;65O<GD@;VX@=&AE(&AE87!S(&%N9"!T:&5N(&-O;64@=&\@82!P
M;&%C92!W:&5R90HK(`EY;W4@9&]N)W0@;F5E9"!T:&4@86QL;V-A=&5D(&UE
M;6]R>2!A;GEM;W)E(&)U="!Y;W4@<W1I;&P@=V%N=`HK(`ET;R!A;&QO8V%T
M92!M96UO<GD@;VX@=&AE(&AE87`L('EO=2!S:&]U;&0@8V%L;"!F<F5E:&5A
M<"@I+B`@5&AI<PHK(`EW;W)K<R!L:6ME('!O<&AE87`H*2P@;VYL>2!T:&%T
M(&ET(&1O97-N)W0@9G)E92!T:&4@:6YF;W)M871I;VX**R`)86)O=70@=&AE
M(&AE87`@<W1A=&5S("AI+F4N('1H92!H96%P<R!A<F4@;&EK92!A9G1E<B!T
M:&4@8V%L;"!T;PHK(`EP=7-H:&5A<"@I(&%N9"!Y;W4@:&%V92!T;R!C86QL
M('!O<&AE87`@<V]M92!T:6UE(&QA=&5R*2X**R`**R`)365M;W)Y(&%L;&]C
M871E9"!I;B!T:&ES('=A>2!D;V5S(&YO="!H879E('1O(&)E(&9R965D(&5X
M<&QI8VET;'D["BL@"6ET('=I;&P@86QL(&)E(&9R965D('=H96X@=&AE('!O
M;VP@:7,@9&5S=')O>65D+B`@26X@9F%C="P**R`)871T96UP=&EN9R!T;R!F
M<F5E('1H:7,@;65M;W)Y(&UA>2!R97-U;'0@:6X@82!C;W)E(&1U;7`N"BL@
M"51H92!P86ER(&]F('!O:6YT97)S(&YC86QL;V,@86YD(&%L;&]C(&UA>2!P
M;VEN="!T;R!E:71H97(**R`)>F%L;&]C("8@>F-A;&QO8R!O<B!H86QL;V,@
M)B!H8V%L;&]C.R!P97)M86QL;V,H*2!S971S('1H96T@=&\@=&AE"BL@"69O
M<FUE<BP@86YD(&AE87!A;&QO8R@I('-E=',@=&AE;2!T;R!T:&4@;&%T=&5R
M+B!4:&ES(&-A;B!B92!U<V5F=6PN"BL@"49O<B!E>&%M<&QE+"!T:&4@9'5P
M<W1R=6-T*"D@<F]U=&EN92!D=7!L:6-A=&5S(&$@<WEN=&%X('1R964L"BL@
M"6%L;&]C871I;F<@=&AE(&YE=R!M96UO<GD@9F]R('1H92!T<F5E('5S:6YG
M(&%L;&]C*"DN("!)9B!Y;W4@=V%N=`HK(`ET;R!D=7!L:6-A=&4@82!S=')U
M8W1U<F4@9F]R(&$@;VYE+71I;64@=7-E("AI+F4N('1O(&5X96-U=&4@=&AE
M(&QI<W0**R`):6X@82!F;W(@;&]O<"DL(&-A;&P@:&5A<&%L;&]C*"DL('1H
M96X@9'5P<W1R=6-T*"DN("!)9B!Y;W4@=V%N=`HK(`ET;R!D=7!L:6-A=&4@
M82!S=')U8W1U<F4@:6X@;W)D97(@=&\@<')E<V5R=F4@:70@*&DN92X@82!F
M=6YC=&EO;@HK(`ED969I;FET:6]N*2P@8V%L;"!P97)M86QL;V,H*2P@=&AE
M;B!D=7!S=')U8W0H*2X**R`**R`)268@=V4@=7-E('IS:"=S(&]W;B!A;&QO
M8V%T;W(@=V4@=7-E(&$@<VEM<&QE('1R:6-K('1O(&%V;VED('1H870**R`)
M=&AE("@J<F5A;"HI(&AE87`@9FEL;',@=7`@=VET:"!E;7!T>2!Z<V@M:&5A
M<',Z('=E(&%L;&]C871E(&$**R`);&%R9V4@8FQO8VL@;V8@;65M;W)Y(&)E
M9F]R92!A;&QO8V%T:6YG(&$@:&5A<"!P;V]L+"!T:&ES(&UE;6]R>0HK(`EI
M<R!F<F5E9"!A9V%I;B!I;6UE9&EA=&QY(&%F=&5R('1H92!P;V]L(&ES(&%L
M;&]C871E9"X@268@=&AE<F4**R`)87)E(&]N;'D@<VUA;&P@8FQO8VMS(&]N
M('1H92!F<F5E(&QI<W0@=&AI<R!G=6%R96YT965S('1H870@=&AE"BL@"6UE
M;6]R>2!F;W(@=&AE('!O;VP@:7,@870@=&AE(&5N9"!O9B!T:&4@;65M;W)Y
M('=H:6-H(&UE86YS('1H870**R`)=V4@8V%N(&=I=F4@:70@8F%C:R!T;R!T
M:&4@<WES=&5M<R!W:&5N('1H92!P;V]L(&ES(&9R965D+@HK("HO"BL@"BL@
M+RH@<V5T(&1E9F%U;'0@86QL;V-A=&EO;B!T;R!H96%P('-T86-K("HO"BL@
M"BL@(V1E9FEN92!H96%P86QL;V,H*2!D;R![(%P**R`)"0EI;G0@;F]N;&]C
M86Q?=7-E:&5A<"`]('5S96AE87`[(%P**R`)"0EG;&]B86Q?:&5A<&%L;&]C
M*"D**R`**R`C9&5F:6YE('!E<FUA;&QO8R@I(&1O('L@7`HK(`D)"6EN="!N
M;VYL;V-A;%]U<V5H96%P(#T@=7-E:&5A<#L@7`HK(`D)"6=L;V)A;%]P97)M
M86QL;V,H*0HK(`HK("-D969I;F4@;&%S=&%L;&]C*"D@7`HK(`D)"6EF("AN
M;VYL;V-A;%]U<V5H96%P*2!G;&]B86Q?:&5A<&%L;&]C*"D[(%P**R`)"0EE
M;'-E(&=L;V)A;%]P97)M86QL;V,H*3L@7`HK(`D)?2!W:&EL92@P*0ID:69F
M("UR8U`@>G-H+3,N,"UP<F4Q+U-R8R]S:6=N86QS+F,@>G-H+3,N,"UP<F4Q
M+7=O<FLO4W)C+W-I9VYA;',N8PHJ*BH@>G-H+3,N,"UP<F4Q+U-R8R]S:6=N
M86QS+F,)1G)I($IU;B`R."`P-CHT,SHU,"`Q.3DV"BTM+2!Z<V@M,RXP+7!R
M93$M=V]R:R]3<F,O<VEG;F%L<RYC"5-U;B!*=6X@,S`@,3,Z,#,Z,3`@,3DY
M-@HJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#8T,RPV-#D@*BHJ*@H@("`@("`@("`@
M<VEG=')A<'!E9%MS:6==(#T@,3L*("`@("`@("`@('!E<FUA;&QO8R@I.PH@
M("`@("`@("`@<VEG9G5N8W-;<VEG72`]("A,:7-T*2!D=7!S=')U8W0H;"D[
M"B$@("`@("`@("!H96%P86QL;V,H*3L*("`@("`@?0H@('T*("`*+2TM(#8T
M,RPV-#D@+2TM+0H@("`@("`@("`@<VEG=')A<'!E9%MS:6==(#T@,3L*("`@
M("`@("`@('!E<FUA;&QO8R@I.PH@("`@("`@("`@<VEG9G5N8W-;<VEG72`]
M("A,:7-T*2!D=7!S=')U8W0H;"D["B$@("`@("`@("!L87-T86QL;V,H*3L*
M("`@("`@?0H@('T*("`**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`V.#<L-CDS("HJ
M*BH*("`@("`@3&EN:TQI<W0@87)G<SL*("`@("`@8VAA<B`J;F%M92P@;G5M
M6S1=.PH@("`@("!I;G0@<V%V(#T@<VEG=')A<'!E9%MS:6==.PHM("`@("!I
M;G0@;'5H.PH@("`*("`@("`@+RH@:68@<VEG;F%L(&ES(&)E:6YG(&EG;F]R
M960@;W(@=&AE('1R87`@9G5N8W1I;VX)"2`@("`@("H*("`@("`@("H@:7,@
M3E5,3"P@=&AE;B!R971U<FX)"0D)"2`@("`@("H*+2TM(#8X-RPV.3(@+2TM
M+0HJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#<P-"PW,3`@*BHJ*@H@(`H@("`@("!L
M97AS879E*"D["B`@("`@(&5X96-S879E*"D["BT@("`@(&QU:"`]('5S96AE
M87`["B`@("`@('!E<FUA;&QO8R@I.PH@("`@("!A<F=S(#T@;F5W;&EN:VQI
M<W0H*3L*("`@("`@;F%M92`]("AC:&%R("HI('IA;&QO8R@U("L@<W1R;&5N
M*'-I9W-;<VEG72DI.PHM+2T@-S`S+#<P."`M+2TM"BHJ*BHJ*BHJ*BHJ*BHJ
M*@HJ*BH@-S$S+#<R-2`J*BHJ"B`@("`@('-P<FEN=&8H;G5M+"`B)60B+"!S
M:6<I.PH@("`@("!A9&1L:6YK;F]D92AA<F=S+"!N=6TI.PH@("`@("!T<F%P
M<F5T=7)N(#T@+3$["B$@("`@(&AE87!A;&QO8R@I.PH@("`@("!P=7-H:&5A
M<"@I.PH@("`@("!D;W-H9G5N8RAS:6=F=6YC<UMS:6==+"!A<F=S+"`P+"`Q
M*3L*("`@("`@35535%5314A%05`H(F1O=')A<"(I.PH@("`@("!P;W!H96%P
M*"D["B$@("`@(&EF("@A;'5H*0HA(`EP97)M86QL;V,H*3L*("`@("`@97AE
M8W)E<W1O<F4H*3L*("`@("`@;&5X<F5S=&]R92@I.PH@("`@("!F<F5E;&EN
M:VQI<W0H87)G<RP@*$9R965&=6YC*2!.54Q,*3L*+2TM(#<Q,2PW,C(@+2TM
M+0H@("`@("!S<')I;G1F*&YU;2P@(B5D(BP@<VEG*3L*("`@("`@861D;&EN
M:VYO9&4H87)G<RP@;G5M*3L*("`@("`@=')A<')E='5R;B`]("TQ.PHA("`@
M("!G;&]B86Q?:&5A<&%L;&]C*"D["B`@("`@('!U<VAH96%P*"D["B`@("`@
M(&1O<VAF=6YC*'-I9V9U;F-S6W-I9UTL(&%R9W,L(#`L(#$I.PH@("`@("!-
M55-455-%2$5!4"@B9&]T<F%P(BD["B`@("`@('!O<&AE87`H*3L*(2`@("`@
M;&%S=&%L;&]C*"D["B`@("`@(&5X96-R97-T;W)E*"D["B`@("`@(&QE>')E
M<W1O<F4H*3L*("`@("`@9G)E96QI;FML:7-T*&%R9W,L("A&<F5E1G5N8RD@
M3E5,3"D["F1I9F8@+7)C4"!Z<V@M,RXP+7!R93$O4W)C+W5T:6QS+F,@>G-H
M+3,N,"UP<F4Q+7=O<FLO4W)C+W5T:6QS+F,**BHJ('IS:"TS+C`M<')E,2]3
M<F,O=71I;',N8PE&<FD@2G5N(#(X(#`V.C0S.C4Q(#$Y.38*+2TM('IS:"TS
M+C`M<')E,2UW;W)K+U-R8R]U=&EL<RYC"5-U;B!*=6X@,S`@,3,Z,#4Z,#8@
M,3DY-@HJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#8U-RPV-C0@*BHJ*@H@(`D@("`@
M:6YT(&-T(#T@,3L*("`*("`)("`@(&EF("AL;V-K*2!["BT@"0EP=7-H:&5A
M<"@I.PH@(`D):&5A<&%L;&]C*"D["B`@"0EL(#T@;F5W;&EN:VQI<W0H*3L*
M("`)"7)E861D:7(H;&]C:RD["B`@"0ER96%D9&ER*&QO8VLI.PHM+2T@-C4W
M+#8V-"`M+2TM"B`@"2`@("!I;G0@8W0@/2`Q.PH@(`H@(`D@("`@:68@*&QO
M8VLI('L*("`)"6AE87!A;&QO8R@I.PHK(`D)<'5S:&AE87`H*3L*("`)"6P@
M/2!N97=L:6YK;&ES="@I.PH@(`D)<F5A9&1I<BAL;V-K*3L*("`)"7)E861D
M:7(H;&]C:RD["BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-C<X+#8X,R`J*BHJ"BTM
M+2`V-S@L-C@T("TM+2T*("`)"7=H:6QE("@H*F%P*RL@/2`H8VAA<B`J*75G
M971N;V1E*&PI*2D["B`@"0EC:&5C:VUA:6QP871H*&%R<BD["B`@"0EP;W!H
M96%P*"D["BL@"0EL87-T86QL;V,H*3L*("`)("`@('T*("`)?2!E;'-E('L*
M("`)("`@(&EF("AS="YS=%]S:7IE("8F('-T+G-T7V%T:6UE(#P]('-T+G-T
M7VUT:6UE("8F"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-CDX+#<P,R`J*BHJ"BTM
M+2`V.3DL-S`U("TM+2T*("`)"0EF9FQU<V@H<W1D97)R*3L*("`)"2`@("!]
M"B`@"0D@("`@=6YD97)S8V]R92`]('5S878["BL@"0D@("`@;&%S=&%L;&]C
M*"D["B`@"0E]"B`@"2`@("!I9B`H:7-S970H34%)3%=!4DY)3D<I("8F('-T
M+G-T7V%T:6UE(#X@<W0N<W1?;71I;64@)B8*("`)"7-T+G-T7V%T:6UE(#X@
M;&%S=&UA:6QC:&5C:R`F)B!S="YS=%]S:7IE*2!["BHJ*BHJ*BHJ*BHJ*BHJ
M*@HJ*BH@,3<Q-RPQ-S(S("HJ*BH*("`@("`@:68@*"AN+3YN='EP92`F($Y4
M7TA%05`I("8F("%U<V5H96%P*2!["B`@"6AE87!A;&QO8R@I.PH@(`EN(#T@
M*'-T<G5C="!N;V1E("HI(&1U<'-T<G5C=#(H*'9O:60@*BD@;BD["B$@"7!E
M<FUA;&QO8R@I.PH@(`EN(#T@<VEM<&QI9GES=')U8W0H;BD["B`@("`@('T*
M("`@("`@<B`]("AS=')U8W0@;F]D92`J*61U<'-T<G5C=#(H*'9O:60@*BD@
M;BD["BTM+2`Q-S$Y+#$W,C4@+2TM+0H@("`@("!I9B`H*&XM/FYT>7!E("8@
M3E1?2$5!4"D@)B8@(75S96AE87`I('L*("`):&5A<&%L;&]C*"D["B`@"6X@
M/2`H<W1R=6-T(&YO9&4@*BD@9'5P<W1R=6-T,B@H=F]I9"`J*2!N*3L*(2`)
M;&%S=&%L;&]C*"D["B`@"6X@/2!S:6UP;&EF>7-T<G5C="AN*3L*("`@("`@
M?0H@("`@("!R(#T@*'-T<G5C="!N;V1E("HI9'5P<W1R=6-T,B@H=F]I9"`J
M*2!N*3L*9&EF9B`M<F-0('IS:"TS+C`M<')E,2]3<F,O>FQE7VUA:6XN8R!Z
M<V@M,RXP+7!R93$M=V]R:R]3<F,O>FQE7VUA:6XN8PHJ*BH@>G-H+3,N,"UP
M<F4Q+U-R8R]Z;&5?;6%I;BYC"49R:2!*=6X@,C@@,#8Z-#,Z-3$@,3DY-@HM
M+2T@>G-H+3,N,"UP<F4Q+7=O<FLO4W)C+WIL95]M86EN+F,)4W5N($IU;B`S
M,"`Q,CHU,#HR,B`Q.3DV"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-#@U+#0Y,2`J
M*BHJ"B`@("`@('1R87-H>FQE*"D["B`@("`@('IL96%C=&EV92`](#`["B`@
M("`@(&%L87)M*#`I.PHA("`@("!H96%P86QL;V,H*3L*("`@("`@>G-F<F5E
M*&-U<FAI<W1L:6YE*3L*("`@("`@9G)E92AL87-T;&EN92D["0DO*B!F<F5E
M=6YD;R`J+PH@("`@("!I9B`H96]F<V5N="D@>PHM+2T@-#@U+#0Y,2`M+2TM
M"B`@("`@('1R87-H>FQE*"D["B`@("`@('IL96%C=&EV92`](#`["B`@("`@
M(&%L87)M*#`I.PHA("`@("!L87-T86QL;V,H*3L*("`@("`@>G-F<F5E*&-U
M<FAI<W1L:6YE*3L*("`@("`@9G)E92AL87-T;&EN92D["0DO*B!F<F5E=6YD
M;R`J+PH@("`@("!I9B`H96]F<V5N="D@>PID:69F("UR8U`@>G-H+3,N,"UP
M<F4Q+U-R8R]Z;&5?;6ES8RYC('IS:"TS+C`M<')E,2UW;W)K+U-R8R]Z;&5?
M;6ES8RYC"BHJ*B!Z<V@M,RXP+7!R93$O4W)C+WIL95]M:7-C+F,)1G)I($IU
M;B`R."`P-CHT,SHU,2`Q.3DV"BTM+2!Z<V@M,RXP+7!R93$M=V]R:R]3<F,O
M>FQE7VUI<V,N8PE3=6X@2G5N(#,P(#$R.C4P.C4X(#$Y.38**BHJ*BHJ*BHJ
M*BHJ*BHJ"BHJ*B`V-3`L-C4V("HJ*BH*("`)"0EI9B`H>'@@/"!A;6)I9RD*
M("`)"0D@("`@86UB:6<@/2!X>#L*("`)"2`@("!]"B$@"0EP97)M86QL;V,H
M*3L*("`)"6EF("AE;7!T>2AC;61L;"DI"B`@"0D@("`@9F5E<"@I.PH@(`D)
M96QS92!I9B`H8VUD(#T]('I?;&ES=&-H;VEC97,@?'P@8VUD(#T]('I?9&5L
M971E8VAA<F]R;&ES="D@>PHM+2T@-C4P+#8U-B`M+2TM"B`@"0D):68@*'AX
M(#P@86UB:6<I"B`@"0D)("`@(&%M8FEG(#T@>'@["B`@"0D@("`@?0HA(`D)
M;&%S=&%L;&]C*"D["B`@"0EI9B`H96UP='DH8VUD;&PI*0H@(`D)("`@(&9E
M97`H*3L*("`)"65L<V4@:68@*&-M9"`]/2!Z7VQI<W1C:&]I8V5S('Q\(&-M
M9"`]/2!Z7V1E;&5T96-H87)O<FQI<W0I('L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ
M*B`X-C@L.#@Q("HJ*BH*("`*("`@("`@:68@*&ES<V5T*%!23TU05%-50E-4
M*2D@>PH@(`EI;G0@;VQD97)R(#T@97)R9FQA9SL*+2`):6YT(&QU:"`]('5S
M96AE87`["B`@"B`@"6AE87!A;&QO8R@I.PH@(`EF;2`](&1U<'-T<FEN9RAF
M;2D["B`@"6EF("@A<&%R<V5S='(H9FTI*0H@(`D@("`@<VEN9W-U8B@F9FTI
M.PHA(`EI9B`H(6QU:"D*(2`)("`@('!E<FUA;&QO8R@I.PH@(`DO*B!)9VYO
M<F4@97)R;W)S(&EN('!R;VUP="!S=6)S=&ET=71I;VX@*B\*("`)97)R9FQA
M9R`](&]L9&5R<CL*("`@("`@?0HM+2T@.#8X+#@W.2`M+2TM"B`@"B`@("`@
M(&EF("AI<W-E="A04D]-4%1354)35"DI('L*("`):6YT(&]L9&5R<B`](&5R
M<F9L86<["B`@"B`@"6AE87!A;&QO8R@I.PH@(`EF;2`](&1U<'-T<FEN9RAF
M;2D["B`@"6EF("@A<&%R<V5S='(H9FTI*0H@(`D@("`@<VEN9W-U8B@F9FTI
M.PHA(`EL87-T86QL;V,H*3L*("`)+RH@26=N;W)E(&5R<F]R<R!I;B!P<F]M
M<'0@<W5B<W1I='5T:6]N("HO"B`@"65R<F9L86<@/2!O;&1E<G(["B`@("`@
M('T*9&EF9B`M<F-0('IS:"TS+C`M<')E,2]3<F,O>FQE7W1R:6-K>2YC('IS
M:"TS+C`M<')E,2UW;W)K+U-R8R]Z;&5?=')I8VMY+F,**BHJ('IS:"TS+C`M
M<')E,2]3<F,O>FQE7W1R:6-K>2YC"49R:2!*=6X@,C@@,#8Z-#,Z-3$@,3DY
M-@HM+2T@>G-H+3,N,"UP<F4Q+7=O<FLO4W)C+WIL95]T<FEC:WDN8PE3=6X@
M2G5N(#,P(#$S.C$P.C$W(#$Y.38**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`S,S0L
M,S0P("HJ*BH*("`@("`@;65T869Y7VQI;F4H*3L*("`@("`@9&]?<VEN9VQE
M*"IM96YU8W5R*3L*("`@("`@=6YM971A9GE?;&EN92@I.PHA("`@("!P97)M
M86QL;V,H*3L*("!]"B`@"B`@+RH@06-C97!T<R!T:&4@8W5R<F5N="!C;VUP
M;&5T:6]N(&%N9"!S=&%R=',@82!N97<@87)G+"`J"BTM+2`S,S0L,S0P("TM
M+2T*("`@("`@;65T869Y7VQI;F4H*3L*("`@("`@9&]?<VEN9VQE*"IM96YU
M8W5R*3L*("`@("`@=6YM971A9GE?;&EN92@I.PHA("`@("!L87-T86QL;V,H
M*3L*("!]"B`@"B`@+RH@06-C97!T<R!T:&4@8W5R<F5N="!C;VUP;&5T:6]N
M(&%N9"!S=&%R=',@82!N97<@87)G+"`J"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@
M-S@U+#<Y,2`J*BHJ"B`@("`@(&UE=&%F>5]L:6YE*"D["B`@("`@(&1O7W-I
M;F=L92@J;65N=6-U<BD["B`@("`@('5N;65T869Y7VQI;F4H*3L*(2`@("`@
M<&5R;6%L;&]C*"D["B`@?0H@(`H@("\J(#$@:68@>"!A9&1E9"!T;R!C;VUP
M;&5T92!I;B!A(&)L86YK(&)E='=E96X@=V]R9',@*B\*+2TM(#<X-2PW.3$@
M+2TM+0H@("`@("!M971A9GE?;&EN92@I.PH@("`@("!D;U]S:6YG;&4H*FUE
M;G5C=7(I.PH@("`@("!U;FUE=&%F>5]L:6YE*"D["B$@("`@(&QA<W1A;&QO
M8R@I.PH@('T*("`*("`O*B`Q(&EF('@@861D960@=&\@8V]M<&QE=&4@:6X@
M82!B;&%N:R!B971W965N('=O<F1S("HO"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@
M,3`T-RPQ,#4S("HJ*BH*("`)("`@(&QI;F5;;&P@*R!A9&1E9'A=(#T@)UPP
M)SL*("`)?0H@(`EP;W!H96%P*"D["B$@"7!E<FUA;&QO8R@I.PH@(`EL97AR
M97-T;W)E*"D["B`@"6=O=&\@<W1A<G0["B`@("`@('T*+2TM(#$P-#<L,3`U
M,R`M+2TM"B`@"2`@("!L:6YE6VQL("L@861D961X72`]("=<,"<["B`@"7T*
M("`)<&]P:&5A<"@I.PHA(`EG;&]B86Q?<&5R;6%L;&]C*"D["B`@"6QE>')E
M<W1O<F4H*3L*("`)9V]T;R!S=&%R=#L*("`@("`@?0HJ*BHJ*BHJ*BHJ*BHJ
M*BH**BHJ(#$P.#DL,3$P,R`J*BHJ"B`@"2`@("!T;7`@/2!.54Q,.PH@(`D@
M("`@;&EN<'1R(#T@*&-H87(@*BEL:6YE.PH@(`D@("`@<&]P:&5A<"@I.PHA
M(`D@("`@<&5R;6%L;&]C*"D["B`@"2`@("!L97AR97-T;W)E*"D["B`@"2`@
M("!G;W1O('-T87)T.PH@(`E]"B`@"69E97`H*3L*("`);F]A;&EA<V5S(#T@
M,#L*(2`)<&5R;6%L;&]C*"D["B$@"6QE>')E<W1O<F4H*3L*(2`)<F5T=7)N
M($Y53$P["B`@("`@('T*("`*("`@("`@;F]A;&EA<V5S(#T@,#L*+2TM(#$P
M.#DL,3$P,B`M+2TM"B`@"2`@("!T;7`@/2!.54Q,.PH@(`D@("`@;&EN<'1R
M(#T@*&-H87(@*BEL:6YE.PH@(`D@("`@<&]P:&5A<"@I.PHA(`D@("`@9VQO
M8F%L7W!E<FUA;&QO8R@I.PH@(`D@("`@;&5X<F5S=&]R92@I.PH@(`D@("`@
M9V]T;R!S=&%R=#L*("`)?0H@(`EF965P*"D["B`@"6YO86QI87-E<R`](#`[
M"B$@"7,@/2`P.PHA(`EG;W1O(&9I;FES:#L*("`@("`@?0H@(`H@("`@("!N
M;V%L:6%S97,@/2`P.PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#$Q-S@L,3$X-"`J
M*BHJ"B`@"7IS9G)E92AQ=V]R9"D["B`@"7%W;W)D(#T@>G1R9'5P*'1T*3L*
M("`@("`@?0HA("`@("!P97)M86QL;V,H*3L*("`@("`@;&5X<F5S=&]R92@I
M.PH@(`H@("`@("!R971U<FX@*&-H87(@*BES.PHM+2T@,3$W-RPQ,3@T("TM
M+2T*("`)>G-F<F5E*'%W;W)D*3L*("`)<7=O<F0@/2!Z=')D=7`H='0I.PH@
M("`@("!]"B$@("!F:6YI<V@Z"B$@("`@(&QA<W1A;&QO8R@I.PH@("`@("!L
M97AR97-T;W)E*"D["B`@"B`@("`@(')E='5R;B`H8VAA<B`J*7,["BHJ*BHJ
M*BHJ*BHJ*BHJ*@HJ*BH@,3$Y-"PQ,C`Q("HJ*BH*("`@("`@8VAA<B`J<W,[
M"B`@"B`@("`@($105513*'5S96AE87`L(")"54<Z('5S96AE87`@:6X@9&]E
M>'!A;G-I;VXH*2(I.PHM("`@("!P=7-H:&5A<"@I.PH@("`@("!H96%P86QL
M;V,H*3L*("`@("`@=FP@/2!N97=L:6YK;&ES="@I.PH@("`@("!S<R`](&1U
M<'-T<FEN9RAS*3L*("`@("`@861D;&EN:VYO9&4H=FPL('-S*3L*+2TM(#$Q
M.30L,3(P,2`M+2TM"B`@("`@(&-H87(@*G-S.PH@(`H@("`@("!$4%544RAU
M<V5H96%P+"`B0E5'.B!U<V5H96%P(&EN(&1O97AP86YS:6]N*"DB*3L*("`@
M("`@:&5A<&%L;&]C*"D["BL@("`@('!U<VAH96%P*"D["B`@("`@('9L(#T@
M;F5W;&EN:VQI<W0H*3L*("`@("`@<W,@/2!D=7!S=')I;F<H<RD["B`@("`@
M(&%D9&QI;FMN;V1E*'9L+"!S<RD["BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,3(U
M-2PQ,C8Q("HJ*BH*("`@("`@?0H@("`@96YD.@H@("`@("!P;W!H96%P*"D[
M"B$@("`@('!E<FUA;&QO8R@I.PH@('T*("`*("`O*B!4:&ES(&ES(&-A;&QE
M9"!F<F]M('1H92!L97AE<B!T;R!G:79E('5S('=O<F0@<&]S:71I;VYS+B`J
M+PHM+2T@,3(U-2PQ,C8Q("TM+2T*("`@("`@?0H@("`@96YD.@H@("`@("!P
M;W!H96%P*"D["B$@("`@(&QA<W1A;&QO8R@I.PH@('T*("`*("`O*B!4:&ES
M(&ES(&-A;&QE9"!F<F]M('1H92!L97AE<B!T;R!G:79E('5S('=O<F0@<&]S
M:71I;VYS+B`J+PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#(R,3,L,C(Q.2`J*BHJ
M"B`@("`@(&EF("AC<R`^(&QL*0H@(`EC<R`](&QL.PH@("`@("!P;W!H96%P
M*"D["B$@("`@('!E<FUA;&QO8R@I.PH@('T*("`*("`O*B!#<F5A=&4@=&AE
M(&-O;7!L971I;VX@;&ES="X@(%1H:7,@:7,@8V%L;&5D('=H96YE=F5R('-O
M;64@8FET(&]F("`J"BTM+2`R,C$S+#(R,3D@+2TM+0H@("`@("!I9B`H8W,@
M/B!L;"D*("`)8W,@/2!L;#L*("`@("`@<&]P:&5A<"@I.PHA("`@("!L87-T
M86QL;V,H*3L*("!]"B`@"B`@+RH@0W)E871E('1H92!C;VUP;&5T:6]N(&QI
M<W0N("!4:&ES(&ES(&-A;&QE9"!W:&5N979E<B!S;VUE(&)I="!O9B`@*@HJ
M*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#(Y.#,L,CDX.2`J*BHJ"B`@("`@('%U;W1E
M<')E<W5F*"9F<W5F*3L*("`@("`@<75O=&5P<F5S=68H)G!P<F4I.PH@("`@
M("!Q=6]T97!R97-U9B@F<'-U9BD["B$@("`@(&AE87!A;&QO8R@I.PH@(`H@
M("`@("`O*B!'970@=&AE(&5X<&QA;F%T:6]N('-T<FEN9R!W92!W:6QL(&AA
M=F4@=&\@<')I;G0N("HO"B`@("`@(&5X<&P@/2!C8RT^97AP;&%I;CL*+2TM
M(#(Y.#,L,CDX.2`M+2TM"B`@("`@('%U;W1E<')E<W5F*"9F<W5F*3L*("`@
M("`@<75O=&5P<F5S=68H)G!P<F4I.PH@("`@("!Q=6]T97!R97-U9B@F<'-U
M9BD["B$@("`@(&QA<W1A;&QO8R@I.PH@(`H@("`@("`O*B!'970@=&AE(&5X
M<&QA;F%T:6]N('-T<FEN9R!W92!W:6QL(&AA=F4@=&\@<')I;G0N("HO"B`@
M("`@(&5X<&P@/2!C8RT^97AP;&%I;CL**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B`S
M.#8Q+#,X-C<@*BHJ*@H@(`D@("`@:68@*'9I:6YS8F5G:6X@/B!F:6YD8F]L
M*"DI"B`@"0EV:6EN<V)E9VEN(#T@9FEN9&)O;"@I.PH@(`D@("`@<&]P:&5A
M<"@I.PHA(`D@("`@<&5R;6%L;&]C*"D["B`@"2`@("!R971U<FX@,3L*("`)
M?0H@("`@("!]"BTM+2`S.#8Q+#,X-C<@+2TM+0H@(`D@("`@:68@*'9I:6YS
M8F5G:6X@/B!F:6YD8F]L*"DI"B`@"0EV:6EN<V)E9VEN(#T@9FEN9&)O;"@I
M.PH@(`D@("`@<&]P:&5A<"@I.PHA(`D@("`@9VQO8F%L7VQA<W1A;&QO8R@I
M.PH@(`D@("`@<F5T=7)N(#$["B`@"7T*("`@("`@?0HJ*BHJ*BHJ*BHJ*BHJ
M*BH**BHJ(#,X-S(L,S@W."`J*BHJ"B`@("`@('5N;65T869Y7VQI;F4H*3L*
M("`*("`@("`@<&]P:&5A<"@I.PHA("`@("!P97)M86QL;V,H*3L*("`@("`@
M<F5T=7)N(#`["B`@?0H@(`HM+2T@,S@W,BPS.#<X("TM+2T*("`@("`@=6YM
M971A9GE?;&EN92@I.PH@(`H@("`@("!P;W!H96%P*"D["B$@("`@(&QA<W1A
M;&QO8R@I.PH@("`@("!R971U<FX@,#L*("!]"B`@"BHJ*BHJ*BHJ*BHJ*BHJ
M*@HJ*BH@,SDR-RPS.3,S("HJ*BH*("`@("`@:6YP;W`H*3L*("`@("`@97)R
M9FQA9R`]('IL97!A<G-E(#T@,#L*("`@("`@;&5X<F5S=&]R92@I.PHA("`@
M("!P97)M86QL;V,H*3L*("`@("`@<F5T=7)N(',["B`@?0H@(`HM+2T@,SDR
M-RPS.3,S("TM+2T*("`@("`@:6YP;W`H*3L*("`@("`@97)R9FQA9R`]('IL
M97!A<G-E(#T@,#L*("`@("`@;&5X<F5S=&]R92@I.PHA("`@("!L87-T86QL
M;V,H*3L*("`@("`@<F5T=7)N(',["B`@?0H@(`ID:69F("UR8U`@>G-H+3,N
M,"UP<F4Q+U-R8R]Z<V@N:"!Z<V@M,RXP+7!R93$M=V]R:R]3<F,O>G-H+F@*
M*BHJ('IS:"TS+C`M<')E,2]3<F,O>G-H+F@)1G)I($IU;B`R."`P-CHT,SHU
M,B`Q.3DV"BTM+2!Z<V@M,RXP+7!R93$M=V]R:R]3<F,O>G-H+F@)4W5N($IU
M;B`S,"`Q,CHS,3HR-"`Q.3DV"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,3(W,2PQ
M,C<S("HJ*BH*+2TM(#$R-S$L,3(W-"`M+2TM"B`@(VEN8VQU9&4@(F=L;V)A
M;',N:"(*("`C:6YC;'5D92`B<')O=&]T>7!E<RYH(@H@("-I;F-L=61E(")H
?87-H=&%B;&4N:"(**R`C:6YC;'5D92`B;65M+F@B"@``
`
end

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1))
  1996-06-30 21:50         ` Action, not words (Re: bug (?) in 3.0-pre1) Bart Schaefer
@ 1996-07-02  7:24           ` Zefram
  1996-07-02 17:52             ` Bart Schaefer
  0 siblings, 1 reply; 11+ messages in thread
From: Zefram @ 1996-07-02  7:24 UTC (permalink / raw)
  To: schaefer; +Cc: hzoli, zsh-workers

Bart wrote:
>2.  Introduce macros for heapalloc/permalloc that start with an open
>    brace, and a macro for lastalloc that ends with a close brace, so
>    it's syntatically required that every heapalloc/permalloc have a
>    matching lastalloc.  As this introduces a new block context, use a
>    block-local variable in heapalloc/permalloc to remember the state
>    of the useheap global, and test the block-local in lastalloc to
>    reset the global state appropriately.

Probably a good idea, but as these macros now introduce new syntax
let's make them *look* like syntax, rather than function calls.

The 3.0-pre2-test patch contains:
:+ # define heapalloc() do { \
:+ 			int nonlocal_useheap = useheap; \
:+ 			global_heapalloc()

I recommend changing heapalloc() to heapalloc, and similarly removing
the parentheses for permalloc and lastalloc.

:+ # define lastalloc_return \
:+ 			if (nonlocal_useheap) global_heapalloc(); \
:+ 			else global_permalloc(); \
:+ 			return

This won't work as the body of an if or while.  The following is always
safe:

#define lastalloc_return \
  if( (nonlocal_useheap ? global_heapalloc() : global_permalloc()) , 0 ) \
    ; \
  else \
    return

On a related point, I've been meaning to clean up execerr() in exec.c
for a while:

exec.c contains:
$#define execerr() { if (forked) _exit(1); \
$	closemnodes(mfds); lastval = 1; return; }

This should be

#define execerr \
  do { \
    if(forked) _exit(1); \
    closemnodes(mfds); \
    lastval = 1; \
    return; \
  } while(0)

It should then be invoked as "execerr;", rather than "execerr()"
(whereas it's currently *actually* being invoked as "execerr();").

YYERROR and YYERRORV in parse.c have a similar problem (they need do
... while(0) bracketing -- and this actually affected me when producing
a recent patch).

-zefram



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1))
  1996-07-02  7:24           ` Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1)) Zefram
@ 1996-07-02 17:52             ` Bart Schaefer
  1996-07-02 18:24               ` Zefram
  0 siblings, 1 reply; 11+ messages in thread
From: Bart Schaefer @ 1996-07-02 17:52 UTC (permalink / raw)
  To: Zefram; +Cc: hzoli, zsh-workers

On Jul 2,  8:24am, Zefram wrote:
} Subject: Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1))
}
} Bart wrote:
} >2.  Introduce macros for heapalloc/permalloc that start with an open
} >    brace, and a macro for lastalloc that ends with a close brace, so
} >    it's syntatically required that every heapalloc/permalloc have a
} >    matching lastalloc.
} 
} Probably a good idea, but as these macros now introduce new syntax
} let's make them *look* like syntax, rather than function calls.

I would normally have done so, but I was trying to make the change as
minimal as possible.

If that's not a concern, I'd probably do something like this:

#define ALLOC_BEGIN	do { int nonlocal_useheap = useheap; 0
#define ALLOC_RESTORE	do { \
			    if (nonlocal_useheap) global_heapalloc(); \
			    else global_permalloc(); \
			} while (0)
#define ALLOC_END	ALLOC_RESTORE; } while (0)

#define HEAPALLOC	ALLOC_BEGIN; global_heapalloc(); do
#define PERMALLOC	ALLOC_BEGIN; global_permalloc(); do
#define LASTALLOC	while (0); ALLOC_END

And then I'd write:

	HEAPALLOC {
	    /* ... stuff ... */
	} LASTALLOC;

That makes the block context obvious.  The macros are upper-case because
I don't like introducing new "keywords".

However, the above implies changing indentation and all sorts of stuff.
I didn't want the patch to come out that large.

So it could be:

#define HEAPALLOC	ALLOC_BEGIN; global_heapalloc()
#define PERMALLOC	ALLOC_BEGIN; global_permalloc()
#define LASTALLOC	ALLOC_END

Then write:

	HEAPALLOC;
	/* ... stuff ... */
	LASTALLOC;

} :+ # define lastalloc_return \
} :+ 			if (nonlocal_useheap) global_heapalloc(); \
} :+ 			else global_permalloc(); \
} :+ 			return

That's not in my original patch; Zoltan must have come up with it ...

} This won't work as the body of an if or while.  The following is always
} safe:
} 
} #define lastalloc_return \
}   if( (nonlocal_useheap ? global_heapalloc() : global_permalloc()) , 0 ) \
}     ; \
}   else \
}     return

Hmm ... I seem to recall that some compilers don't like having void
expressions (e.g. (?:) where both branches are void functions) used
anywhere in a comma-expression.  In particular, I think AIX either
rejects this or compiles it wrong.  However, I could be confusing that
with something else ... I know for a fact that AIX could not handle
an `if (x,y)' construct we used in zmail, forcing us to rewrite it
as `if (x?0:y)' -- which doesn't work in general, it just happened
that for us x was always 0 to begin with.

If I'm confused and the comma-expression above turns out to be OK, I'd
change ALLOC_RESTORE and add LASTALLOC_RETURN:

#define ALLOC_RESTORE \
	    ((nonlocal_useheap ? global_heapalloc() : global_permalloc()), 0)
#define LASTALLOC_RETURN	if (ALLOC_RESTORE); else return

Otherwise, I'd just leave it up to the programmer to write:

	HEAPALLOC;
	/* ... stuff ... */
	if (getmeoutofhere()) {
	    ALLOC_RESTORE;
	    return(-1);
	}
	/* ... more stuff ... */
	LASTALLOC;



-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1))
  1996-07-02 17:52             ` Bart Schaefer
@ 1996-07-02 18:24               ` Zefram
  1996-07-02 19:19                 ` Bart Schaefer
  0 siblings, 1 reply; 11+ messages in thread
From: Zefram @ 1996-07-02 18:24 UTC (permalink / raw)
  To: schaefer; +Cc: A.Main, hzoli, zsh-workers

>And then I'd write:
>
>	HEAPALLOC {
>	    /* ... stuff ... */
>	} LASTALLOC;
>
>That makes the block context obvious.  The macros are upper-case because
>I don't like introducing new "keywords".

Yes, I think this is preferable.  As we are introducing a new block,
there should be a new indentation level for it, and the braces make it
clearer.  And there's a bonus with this syntax:

    PERMALLOC
	some_function();
    LASTALLOC;

is legal, matching other bits of C syntax.  I think the size of the
resulting patch should not be a consideration.

>} #define lastalloc_return \
>}   if( (nonlocal_useheap ? global_heapalloc() : global_permalloc()) , 0 ) \
>}     ; \
>}   else \
>}     return
>
>Hmm ... I seem to recall that some compilers don't like having void
>expressions (e.g. (?:) where both branches are void functions) used
>anywhere in a comma-expression.  In particular, I think AIX either
>rejects this or compiles it wrong.  However, I could be confusing that
>with something else ... I know for a fact that AIX could not handle
>an `if (x,y)' construct we used in zmail, forcing us to rewrite it
>as `if (x?0:y)' -- which doesn't work in general, it just happened
>that for us x was always 0 to begin with.

Curious.  It's a perfectly legal expression, so any compiler that can't
grok it is broken.  However, if a common compiler barfs on that, maybe
we could have global_{heap,perm}alloc() return 0, so the comma operator
is unnecessary and there are no void subexpressions.

>If I'm confused and the comma-expression above turns out to be OK, I'd
>change ALLOC_RESTORE and add LASTALLOC_RETURN:
>
>#define ALLOC_RESTORE \
>	    ((nonlocal_useheap ? global_heapalloc() : global_permalloc()), 0)
>#define LASTALLOC_RETURN	if (ALLOC_RESTORE); else return

Cleaner, I think, to have

#define ALLOC_RESTORE \
    ( nonlocal_useheap ? global_heapalloc() : global_permalloc() )
#define LASTALLOC_RETURN if(ALLOC_RESTORE, 0) ; else return

but the semantics of these two are identical.  ("ALLOC_RESTORE;" is a
legal statement in both cases.)

>	if (getmeoutofhere()) {
>	    ALLOC_RESTORE;
>	    return(-1);
>	}

I'd rather have the convenience of LASTALLOC_RETURN -- at least, if
this is often required.

-zefram



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1))
  1996-07-02 18:24               ` Zefram
@ 1996-07-02 19:19                 ` Bart Schaefer
  0 siblings, 0 replies; 11+ messages in thread
From: Bart Schaefer @ 1996-07-02 19:19 UTC (permalink / raw)
  To: Zefram; +Cc: hzoli, zsh-workers

On Jul 2,  7:24pm, Zefram wrote:
} Subject: Re: Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1)
}
} I think the size of the resulting patch should not be a consideration.

I don't either, now that I've convinced people this is a good idea. :-)
Before, I didn't want to scare anyone off by making this look like a
major code change.

} >I know for a fact that AIX could not handle
} >an `if (x,y)' construct we used in zmail, forcing us to rewrite it
} >as `if (x?0:y)'
} 
} Curious.  It's a perfectly legal expression, so any compiler that can't
} grok it is broken.

Oh, the compiler grokked it, but then generated buggy assembly code so that
it didn't work right.

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~1996-07-02 19:26 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1996-06-28 17:12 bug (?) in 3.0-pre1 gene
1996-06-28 17:50 ` Zoltan Hidvegi
1996-06-28 19:04   ` Steven L Baur
1996-06-29 19:13   ` Bart Schaefer
1996-06-30 16:13     ` Zoltan Hidvegi
1996-06-30 19:21       ` Bart Schaefer
1996-06-30 21:50         ` Action, not words (Re: bug (?) in 3.0-pre1) Bart Schaefer
1996-07-02  7:24           ` Sick macros (was: Action, not words (Re: bug (?) in 3.0-pre1)) Zefram
1996-07-02 17:52             ` Bart Schaefer
1996-07-02 18:24               ` Zefram
1996-07-02 19:19                 ` Bart Schaefer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).