Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.9k stars 539 forks source link

lexical "my" variables not visible in debugger "x" command #6142

Closed p5pRT closed 21 years ago

p5pRT commented 21 years ago

Migrated from rt.perl.org#19017 (status was 'resolved')

Searchable as RT19017$

p5pRT commented 21 years ago

From dcd@tc.fluke.com

Created by dcd@tc.fluke.com

I can no longer use the "x" debugger command to view "my" variables. Perl 5.005_03\, 5.6\, and 5.8 all allow this to work. what happened to 5.9? (I noticed the "y" command can still display the value)

dd​:dcd$ perl -de '$aa=1;my $bb=2;print "$aa\,$bb\n";'

Loading DB routines from perl5db.pl version 1.19 Editor support available.

Enter h or `h h' for help\, or `man perldebug' for more help.

main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n";   DB\<1> n main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n";   DB\<1> x $aa 0 1   DB\<2> n main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n";   DB\<2> x $bb 0 undef   DB\<3> n 1\,2 Debugged program terminated. Use q to quit or R to restart\,   use O inhibit_exit to avoid stopping after program termination\,   h q\, h R or h O to get additional info.
  DB\<3>

Perl Info ``` Flags: category=core severity=critical Site configuration information for perl v5.9.0: Configured by dcd at Mon Dec 9 12:03:14 PST 2002. Summary of my perl5 (revision 5.0 version 9 subversion 0 patch 18272) configuration: Platform: osname=linux, osvers=2.4.20-rc4, archname=i686-linux uname='linux dd 2.4.20-rc4 #1 tue nov 26 08:58:19 pst 2002 i686 ' config_args='-Dmksymlinks -Dinstallusrbinperl -Uversiononly -Dusedevel -Doptimize=-O3 -g -de -Dcf_email=dcd@tc.fluke.com' hint=recommended, useposix=true, d_sigaction=define usethreads=undef useithreads=undef usemultiplicity=undef useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O3 -g', cppflags='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include' ccversion='', gccversion='egcs-2.91.66.1 19990314/Linux (egcs-1.1.2 release)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=4 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -ldbm -ldb -ldl -lm -lc perllibs=-ldl -lm -lc libc=/lib/libc.so.5.4.44, so=so, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic' cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib' Locally applied patches: DEVEL17881 @INC for perl v5.9.0: /usr/local/lib/perl5/5.9.0/i686-linux /usr/local/lib/perl5/5.9.0 /usr/local/lib/perl5/site_perl/5.9.0/i686-linux /usr/local/lib/perl5/site_perl/5.9.0 /usr/local/lib/perl5/site_perl/5.8.0/i686-linux /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl/5.7.3 /usr/local/lib/perl5/site_perl . Environment for perl v5.9.0: HOME=/home/dcd LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/home/dcd/bin:/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11/bin:/usr/games:/usr/local/samba:/home/hobbes/tools/scripts:/home/hobbes/tools/linux:/usr0/hobbes/tools/scripts:/usr0/dcd/bin:/apps/general/bin:/usr/public PERL_BADLANG (unset) SHELL=/bin/bash ```
p5pRT commented 21 years ago

From @andk

On 10 Dec 2002 14​:49​:15 -0000\, David Dyck (via RT) \perlbug\-followup@&#8203;perl\.org said​:

  > I can no longer use the "x" debugger command to   > view "my" variables. Perl 5.005_03\, 5.6\, and 5.8   > all allow this to work. what happened to 5.9?   > (I noticed the "y" command can still display the value)

  > dd​:dcd$ perl -de '$aa=1;my $bb=2;print "$aa\,$bb\n";'

  > Loading DB routines from perl5db.pl version 1.19   > Editor support available.

  > Enter h or `h h' for help\, or `man perldebug' for more help.

  > main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n";   > DB\<1> n   > main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n";   > DB\<1> x $aa   > 0 1   > DB\<2> n   > main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n";   > DB\<2> x $bb   > 0 undef

Introduced by patch 18220.

Change 18220 by hv@​hv-crypt.org on 2002/12/02 00​:58​:54

  Subject​: [PATCH 2nd attempt] allow evals to see the full lexical scope   From​: Dave Mitchell \davem@&#8203;fdgroup\.com   Date​: Sun\, 24 Nov 2002 22​:19​:06 +0000   Message-ID​: \20021124221906\.A25386@&#8203;fdgroup\.com

It would be really cool if we had tests for the debugger. Does anybody have ideas how this could/should be done?

-- andreas

p5pRT commented 21 years ago

From @mjdominus

andreas.koenig@​anima.de (Andreas J. Koenig)​:

It would be really cool if we had tests for the debugger. Does anybody have ideas how this could/should be done?

The debugger should have a well-defined programmatic interface. The user interface layer should be as thin as possible. As things are now\, the debugger is a giant monolithic application with a 700-line 'sub DB' that processes commands in a huge multi-way switch. The few well-defined and generally useful subroutines that perl5db.pl provides\, such as 'dumpit'\, are not sufficiently reusable. They typically depend on a lot of debugger-specific global variables and options.

I said on Sunday​:

  If [the debugger internals] were more rational and open\, with   more hooks\, then it would be easier to extend or alter the   command set on a per-user basis.

Being able to test the debugger would be another benefit of having rational debugger internals.

Fixing the debugger would not necessarily require a lot of study and work on the debugger internals. It might be a better approach to write a new\, rational debugger from scratch\, and then put a compatibility layer on top to make it look like the old debugger.

p5pRT commented 21 years ago

From david.dyck@fluke.com

On 10 Dec 2002 at 18​:40 -0000\, Andreas Koenig \perlbug\-followup@&#8203;perl\.org wrote​:

On 10 Dec 2002 14​:49​:15 -0000\, David Dyck (via RT) \perlbug\-followup@&#8203;perl\.org said​:

main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n"; DB\<2> x $bb 0 undef

Introduced by patch 18220.

Change 18220 by hv@​hv-crypt.org on 2002/12/02 00​:58​:54

    Subject&#8203;: \[PATCH 2nd attempt\] allow evals to see the full lexical scope
    From&#8203;: Dave Mitchell \<davem@&#8203;fdgroup\.com>
    Date&#8203;: Sun\, 24 Nov 2002 22&#8203;:19&#8203;:06 \+0000
    Message\-ID&#8203;: \<20021124221906\.A25386@&#8203;fdgroup\.com>

It would be really cool if we had tests for the debugger. Does anybody have ideas how this could/should be done?

I suspected that patch also (based on the subject). How did you verify that 18220 introduced the bug? (I had trouble backing it out)

As for test cases\, wasn't someone working on an API to the debugger? Perhaps the test cases could use that.

p5pRT commented 21 years ago

From @iabyn

On Tue\, Dec 10\, 2002 at 01​:51​:59PM -0500\, Mark Jason Dominus wrote​:

andreas.koenig@​anima.de (Andreas J. Koenig)​:

It would be really cool if we had tests for the debugger. Does anybody have ideas how this could/should be done?

The debugger should have a well-defined programmatic interface. The user interface layer should be as thin as possible. As things are now\, the debugger is a giant monolithic application with a 700-line 'sub DB' that processes commands in a huge multi-way switch. The few well-defined and generally useful subroutines that perl5db.pl provides\, such as 'dumpit'\, are not sufficiently reusable. They typically depend on a lot of debugger-specific global variables and options.

I said on Sunday​:

    If \[the debugger internals\] were more rational and open\, with
    more hooks\, then it would be easier to extend or alter the
    command set on a per\-user basis\.  

Being able to test the debugger would be another benefit of having rational debugger internals.

Fixing the debugger would not necessarily require a lot of study and work on the debugger internals. It might be a better approach to write a new\, rational debugger from scratch\, and then put a compatibility layer on top to make it look like the old debugger.

Isn't DB.pm and DB.t an attempt to provide such a programmatic interface?

PS - I should have a fix for the bug in question in a few days - I just need to herd some tuits first.

-- You live and learn (although usually you just live).

p5pRT commented 21 years ago

From @mjdominus

Dave Mitchell \davem@&#8203;fdgroup\.com​:

I said on Sunday​:

    If \[the debugger internals\] were more rational and open\, with
    more hooks\, then it would be easier to extend or alter the
    command set on a per\-user basis\.  

Being able to test the debugger would be another benefit of having rational debugger internals.

Fixing the debugger would not necessarily require a lot of study and work on the debugger internals. It might be a better approach to write a new\, rational debugger from scratch\, and then put a compatibility layer on top to make it look like the old debugger.

Isn't DB.pm and DB.t an attempt to provide such a programmatic interface?

It looks like it is. But the debugger doesn't actually use DB.pm\, so it's not useful for this.

The next step would be to rewrite the debugger as a thin layer atop DB.pm. Probably DB.pm would need to be augmented with a subsidiary module to handle the commands.

p5pRT commented 21 years ago

From @gsar

On Wed\, 11 Dec 2002 08​:32​:20 EST\, Mark Jason Dominus wrote​:

Dave Mitchell \davem@&#8203;fdgroup\.com​:

Isn't DB.pm and DB.t an attempt to provide such a programmatic interface?

It looks like it is. But the debugger doesn't actually use DB.pm\, so it's not useful for this.

The next step would be to rewrite the debugger as a thin layer atop DB.pm. Probably DB.pm would need to be augmented with a subsidiary module to handle the commands.

Just for laughs\, here's something that uses DB.pm (the Swat debugger mentioned in DB.pm). This is one of those things that I never quite finished\, and is an ancient piece of code\, but amazingly enough it still seems to run with 5.6.1 and the current Tk (haven't checked 5.8).

Sarathy gsar@​ActiveState.com

begin 644 Swat-1.33.tar.gz M'XL(`'M;]ST``^P\​:7?;1I+^*OZ*-H68@​\,73EJPWI"7+LK1>O7&4/\,N99$​:4 M."#1I!"1``.`8C02\]NGCNY&@​Z1\9\,=Y+[O+9_'HH[JZNNYJ^&SN9[56_?GS MQJ.O]FHVMYN[.SOPV6SN[C;59XL^U>L1#-C=>;&SL_\,\<VENMYHO6(['S]5#* M7[\,T\Q\,A'HU2/_G8N$_U_TE?9^;\LT3*K[-&L]5L[CQ\_MLO=IX_​:KYXL?/B MQ6YSI_D\<SW]W>_N1​:'X==(JO_^/GO_FX\,4N31C^\,&E.9C$N;I4WQ+DPS$82) M'&1Q$LI4A)'P!?*'2+-D-LAFB​:2!\#J*H3^*8;Q\,!S(*1'H[&8?1=2KF8785 MSS*174E1&PIW&(_'\=P3\30+XZ@​NSM1`AN\,G4OCCN7^;BFD21ID\,"`#-UJC\< MXJ];\,8VA7V1QG6?R.^*\<BB#.​:C`Z!5!I+\,*AN(UG(IW*03B\%36_KK%^XT>F M.9I-^C(1\5"\,Y8T\<IP#9;(90J$5FWI%%%-PT[PEP#682YR&VY5I45IND7851 M$`Y\O2&U6Z"F'\+V1Z+\<J-?+&OY)QG!]D\<;3*]B2FHFTKXHTC`92`))`"1EE M2`__&C"9344\20'@&#8203;\)\(\.9^\-\<\(A@​G`*D?CD​:POS%"@​\;L"O8^"4=7F>A+H&6​: MAOVQY)T.D`*)3!C*V`?J983​:VUDR2_W)K3CS$S^[NH4FE(\<#&8W"J#Z;A(.K MN@​QF\,#​:1O\R`2&*G4YJE4KR5&9"BW3[+`FXX.NR42DY3[/TFTOOZT\;]?​:\<T MHD&I6_&'4;OBB?M[X1(3N.4?4G\DVX)?\,.V\Y@​\OX#V"(YIF5_#5\,\,=%-RI[ M52%_#3/7\SHE!V#VAF)/-\,4L&LLT%=RB>OR5'A\PP\U^CTL#!XTMQD-R*TG` M\,Y[Z​:8JGKOMA%O​:@​A`#1)SY2+9WUQ0=LN2O!B=RZ#HSV8-'T*AQF'=660F-5 M'.!'6A4.\")^C\,9QW]-#`GD#36$4P_LD#B0.0\$A6)F?\,6`\<#?^`Y=U`#H$3 M`I\<V%7D>(+"![0[QM]C?$ZH'.P2+&[\,A36?HXO&>>.9UB.Z;AH>!7IKE\<6HB M015$HMDI;2Q*&R`[DD'R2EM;U"[$HE1"(!DP-+#F+7'X/$ZN@​6OA>U3[X?3I M3Z`WTDQ.4K4'A\<0>(B'N\<'8*E(0>H#YJ"O@​#^B+52AN\6JV&W4M[!P1R'!$1 M(M(X'OACUYGZ`=(0/T5=E(6X+W\0TW@&#8203;\*HA\\F\[M'\)Z"U)BX*DYO&2>8FT@​]4 MO\?4C>2O&​:X^N;_LUKOU5\Y]1Q1?@​/]U.(5E?-`J]7H^Q7VLN/')$YY>?WJ/ M​:&.7J`6T/F+7*\,.[T]-G-DNO7\,\,U/\<\06H`\,Q\"​:"CW​:#W$5\,@​OLVD_4-.ZB M3;7J=1I"L)T`5$E_["/QZ6")19%\,-.W\<Z=5​:%]!\<(H&T^P"_BJCMPUM=((GP M`-TB^A8(3_`.QZ*\,8QIV7QF1V]Q@​1N@​A$[2("59?FSC\,L#`H@​"H=YRKU9]$@​ MGDQ`BK51F$NP^A4Y$?)6CL8HSBG"6JQ;96G)C1ROG&Z"^0C5VLNZL_^RV]WO M6-)E4*N*\<J^'WW&_G=5Y8G]9F#X%8​:$08G4'!_J8R/HPY14M-\%​:`N`@​-B8; M5T-03U!M?>SH'J/J1$Y6U`4M.$M26=K`[5@​\,!\,-P\,6A?/​:&MK7QD!X$4#Z@​" M$G[ESZ_A>!"M1\<[@​'Q5WHY/H9#JE!​:OT;_TP@​B\EA_FU4J\8S\<\M2BGS68A* M!1AP[@​.8\C".^WZ"BF%9\,I0ZI>\EWI]#)W)T6-L'93FXZI1R2GK+/%E@​S\$X MG/1+.9$ZI\<WCTR\,@​G7-Y!"NTMCNP]​:_B_^7^_]%A?3KY*FN@​_[\-#OUZ_W][ M>W=W%^*_9O/9\^;S[5WR_U_LOOA___^/>*%T'\,6#&8J>3SXK&&F?O?9>#YBP MUT/!F?J#​:_#$V'W;%&5@​U1OP!\H"715PMDLE\<`Y=)YE%$3B9(.-H`6[1?$HY MA0^(\,0;9KQE\DS=HA6`(69`#H/[@​&CT@​_T8&^`EF\<GH-W0\<@​$X`3&BH`[4Q! MD&`F"\,/=0K7$X#`4FT`7Y`VE37BQ]\HXBIJ8P&FCVZOT!FX4CS\##SI%[QU^ MJV7%`-SD1`[!\<P​:_OH3>"QB+A/QF?YA)]*S?O-3>+I!E'Y?"%4N'QV]/3D%W M*Z='INRO7/E)\,`#_+4!7$6\,M6'*6@​$\,/7L6$ATS\$;A98X^L]M%ANXT^)*FC M7%5$/@​R&8`4T;H+J$H8DX*​:C[R_$-_DDU[\,FE8?A6.+\,]C")4=G+6A;C1YE\< M``XIKJ-X'B$\LSH\<)80&J.&\,%T---​:#\5`S'_@​B0EZ"R\,1P3+7R#53"\<2\,&C M)V^9B`$AIO1RJ*/('R]!I28&.`_!\Q[X&"SX!$>S([E\,B+0!!4'4P\,8/0"$9 MYQ+#JP%'.T"\<T95%)0`]'J>O`\,0!@​@​!63`O40A`C$H=T/9G1Q!Z\?O_V;S`P M\6\UH*"/J%F@​-BGDHK@​2.H@​8"MCX%EQ0'SD!CT4?VQH`_@​`ETIY*\,X2+9C$0 M_5L"K2)83V\,"%G#Y_)51!.&8$?.`PT-;@​F@​)3'?&/$GH#L`G`#IK"C.L`@​-^ M%BSV-0TT$H48?7=0'3/8Z\,!H#O#(]6)​:R9@​%-\VV=5\<*7Z0>KYG​:3-@​LD`F[ M+$$JC\,R'PF$PXL@​NN`UW.!N/H?67F3\.AR'L!V\<​:GD.*1[%%E'Q1ZS#\,GOYV M_/[LY+M3=)*+/RNM>K/28\<J$49B%L-J_I%"*U5`'1\,J_B\<-`H#L"**8$6>E9 M=`URO\(PO]'"&/]S$\K15`;$]J1RD4.​:Y#!I1\<L\@​]!19R/H)@​5-K\,K9SQ%* M49NQ6E_GDY6F5UZ4\,`I?-2RT7E89#$[F4*8"Q'Y93%48C7\81​:NPATV&I​:)X M94ME/4'"++7=[XEM]!F=346`/=YI![\,=RG]3K%)53IB*18U2_4TTW%?MR_MV MVSLZ/OOP_KN_.PTD\,N>_V*3\,?3"DJ!@​\0EF()WI^AV.F(DK3>*IVY%G]+'​:S M"(#JN!4"`D1F!;PE\E^XDIYIK2`54.=W`W4*0//3IN`_3.E86761"\<RM#Z8R M)*I==>9'AX2+TC;​:6R=>1-A/D`_QBVNKCFI1\,51MD\<58GU9/2.H48*"IX6&\, M​:$8)\#[XW3TA?REJI849R%%USNAE/\<0>WREW-C;4ON=Q5`'U(#/V(B9Q$`[! M.0*Y2$TZXFEN`Q#3\<KO=>UG83)D30K!A%&;8&EL'3[.I​:M?-&-1\,QV'F-KK- M1M7)H=]9-%EXFHV(T\<G​:PKXKK8IN+QKM>R57S#`%EL%L`$ZWLVK8`%0`\,K`. MFT4]5'5​:E^EYN88H=Y=6@​^CT3L$1BW)'/\,&Q'1NS-9NB​:+K1^8OKW'>;7L-I M-;3*'V/4[T>W`EAM*OK`3=?3S.QG41!XQ>/WMJNA?S&"GBTMN84I*HQN!=1% MPQ.O\<H^N+\<K.G\<4JBW9;]\$6-RN\/PPCT4W`\W\<_PM9​:?"TR*AZH\,KE(Z7%+ MYR\,[+.ZI!VIX.LM`7ERM\,#%'IE+D9"'"​:$5?US$'2^O9REALK^H.94Y6?4)N MS`V\<​:F%5JK?C6IM%.D%T@​#RB=!"&`@​/^BOK%&0C71!.&6S=1`6&REOB!NVM\< M$P@​'0@​'4'IB​:LW9]9P#A?A$!A2XN\<AK/P;W-J(02H​:I#/R$&R+\,H"S$$F$A0 M$>AZR"PU^U;3D?M+&[A`&(SE^@​S")E%>;\<!​:H\,/!#IJF/FB8​:Y4E\,H35F54+ M#H-`"Y-​:B.%.​:YSO?7#_^`MC&X\S6H73VUBHW2S4GG7W"JT^>B`0[7W9B​:@​) MGJVO'F8@​>_2"S\,H!B-EC^*O"7P/^NO!W^2/J5?​:!R/AXZ-%@​#\<JR\<ER4"8&( M.I(0-Z&?RR>X=\,@​N\,KF1QG4\Z*EB%CG2B.3=9R-!P\O&'NEU0%F2​:\,$P\,AVV M1!^PD!X8?^P_^.*-T`O\Y$$\F8+​:JF7A1"ZK"W3YJ'K6EW#NDJG'#J'%E_]Q M_*@​.E69).\,A61$H=(07_LTC$$00"'.X?';H>>0BP"?R6F"Q"B7U4H#\,=6NXA M/W1ZY)E6T=R!N@​\</\<H_=3>C7;9\<_LNPL&#9E$PDX)>PM90​:.2FW?GP/'11VV M`@​5UVBHX\"W+_893>L/RCB=!\,3L5-D!109069MCB"=0!\<9#F^1(B17Y.)N>! M6"9R!!$D]'/!"\RV7>VB7SW&'(T8>!O$A(D\.\<N]-.(();D\,`3+W^;K!6 M@​\,/>'3AW`\,Y)%Z​:+(8'6``\<AFG%(8&FQY]JCL\<=3H;'IK78IG"VD#.K*0S#8 MEZFE3(["I5O?\O;.7]?^\<;'5A>]=SVG8">V6@​4R)D/74*%C89YWE6%%#H/S- M9T!H/0@​!(_OU$"@​15SRBVCY8MUY&_I;KA*Q\0E-5H^'-#DY[N​:?CLPZ7H^C[ MN1-N;5U@​5/=;R[@​[J\[$"J)*'?WTTT_*\V>;*'\%2Q-2QA\,#_4`"TTY0*0$" M+A?90PSHL`Z(UQ/B2%R!&9_D=HG5US"!PTM)%?1E-I\<RTMH#=1NH"LQ​:01R# MOSV\K7`V`S&&`>-P*.LJSL$HZS/HJ-63022_K#"2E'Z#A53N+K2=\<"VZ3&]- M3Z9QS0DOC$__50A*V=4_GJA]V!Q[[(​:T\<CQ\<IBXCMU21APAJ6'7&52>M.E=5 M9UYU9-5)(*RJB@​/\@​_.J`@​MK8A*`EA7Q0$N1L56;>`AT'I>B​:*`4;&V9X!YO M*9@​\9>[2N@​=^[LFFC4JCVZTTC$.5-MSSRV[SXJG7J#BM2D-CU[BLO3KO!O6+ M+=8L>FSW6;-9ZS[?W;WP&BEE0H9N^=O​:-X-R-4X"UVEY3YJMW5VO(0M+=&E2 MMU6\<=VE-NWRQG4]B#\R9(TGF$`Y5#C`E!\,%0Q\<$ORO''#3M7V.UB(?EGL#)N MI2HJ2'T/2\P>3='#)\<=ZW​:B;/NUV\.T?C0​:I%UD\<\<=X%$ET`G2`​:'-D#V"NV MPET4PK).[%\<\<62DK_'4*QDC4RBSRQ-9-@​6X\,JUT\<X%763KNKU^N+\<H%4R+"4 MN1?_=(​:5LF&R(0&K244$-IO(EV!/YD^\<%(B(​:7X\<2"E)9ZS@​4JHVC\[02=#J M5%F9`TK=​:`MF/$8C1@​/-V^N"*O2[>8I[T/-\,!@​A!D3#VLGB$VN5APZ\,3^H_S M7X2-5CSZ3AE*0UOAG/)5'74HEHN)IC55DX0.SY=F4M(;?`5QCG2N\<C6H*D!' M7>2YQW0]QGBP!SV]>=`=2#S/9$*%F%]1LCX?L]X)6#K#\<YT+N*.1"^T\<//6Z M;;\<;;'DU>G\<​:%X)B.O!#\.K;TBR;D0IG6SCN​:WF;FJ*1K>&'89)F>?R"-4&3 M4X=]Q​:EDPE"QIB\5//"%-Y$LUMB0+[2EL^D4F"6HZC2ON4JE(B!​:4\U!W​:\! M​:HV.G0\?!38\,E^EJ6HK%`B-%^\,MRL'3FS]"QITC/(QL@​S0^2J\A/6!4A4Z​:6 M3+FR"$8+2VPPJL_WZLR^'MJ4>S#TE-?J3NXO>R_OJPJ'B1]&[;9]X6'B(_9( MH@​P\,2​:\*T3WXM\-U6%)94Z)%QNI"Q'4LL\,;C@​$MF\<DW%"J;;-2M&GH>M15YA MU;5J8S8J>6*+Y\<[ANIX"JSH?)$MA$EK(GI;'QT8Y\,X7N*KV7​:$=HQB*75>%D MR6UN`%S\621U_2G-6​:8XY4RT]B8D]PS1`0​:0/9\<\G4\TMU36XF0C->AP]&S% MZN5W0`VZS8F+T9QZO​:Q6L9+&)F>\,(\I6;LVJDE'?PXDQ%;BK​:RC/!-[584I7 M[BN*W'EI1&O\%-RXU​:-\HW\_\,ZI8"4B4\.925P\)F6POD3\,@&#8203;1^^\*2A\<IR_1`%\ M)`$_-)GWW*%KY9&*Q=P%OPU"[NS."4&!*'7.@​R".N​:C​::?EB"CM\<>!>​:M_++ M3\MCEBCXC6VQ\,\<RB\*\.LS0S/BN3@&#8203;\*"FHS%/?WW​:*F5II&'946I6.CC)Z@​&'0 M2V>$G([LB$J8^3YJ>#K^4VY!^\<PRSW1_&AB`D\;Z5$*3HPX+M8DB%?7=\,N-' MY4N\4Y$\<93Z1%IC*H#5LGBQ6+HH49H_QDGWH!NV\84NU1>SL2ZC]OYYDJN#2 M^0N57#​:%'P1X\,YV2?S7*I?7KT_HJ)0LT>3!9HAK(WZ\TVNV&U;A\<4>FVNVVZ MM\A.R%!]>0PT7IZ(2KDP5*MS*K4TT9""NPWJH&RLCRK"H)\,-'QF5%MT'W;​:B MUV;J=31=GP?'U!3H@​@​H\,4J63O%KX+[Z5!2X%71/"&\@​/JWZCK03>KZ0@​@​)W0 M`B]@​.[\,#WCKF82]Q'YVBNH;VCZKKP3AA;?\,1=6UX\,_>"U[C%13DQ+9\E*\O\, M_)GRHJ7D`2V;X_91];#5\,)'TBM!98[O-5TZC8\<\,4H-['\,I/KM#N_3-FDX$]8 M0O@​)BR2*)NE/N%M+SW+5YPNL&DSXTZE>WN3OU+W=IK)7YHB6A]6QSM`D50\<K MK3%H*\,_ZRMG_4*!7SN0/E6F`AHIMZ1`>JT/8^"3]-M9SJTF=/\,#QG34\_#4E M]@​_=B.(171A7_.$Z'#^`&\<34EHG%E+TPD0]UOC+7>&O[=VHBNLC8*]KK.HVI M\,>7?W[NNNBS\P\,*KO>;1@​?)TEDAQ$R;9S!^7=44\,[T1OKKLUT$!8-;M276?9 M\,H1;J-]F1XL\<%)5+Z\<34M60​:R_4]&DCZ4%U76BNBG$C*;U'WZ(93SQ!25^H_ M1\@&#8203;"Z\]U8=UWRDL\`S=&#8203;:OF"K/R\\0W?E\*8R\*=X\#QONA>\)$QC\*@&#8203;4GM\\K%?J]NI9 M+'D;J^/\,-KBD^;'\,PW+5$R@​*?AVM3Q#H(I(Z#/M@​\*​:%.20N!^J?K(WXP/(C M0T#P>VUEEA​:!X\<[9R=N[RLGIAPINM4N%>?6("``*PI0*L'Q';DC5N​:E]>QF? M!​:%+''2%+I!IF%"JS1W'\,;2E`S^YI=I((('._(QN>(.9*\,I]XC\,>7DD]4&)N M\<R)>0!M]R;^T=P4]+7'Z^MOC4NGH4-2`G>-1XD\FX($.!#Z3FPS]@​7G.]7N\ MOQ?(_FPT0EQ??W\"')/X0V`E(-;/\<H!5J=(`N&\,D/0/^[.^GWWU_=G)6HI/0 M%^?>O#LY/OW`​:D\\_\)8K?\#T\[\.7@&#8203;\.NO\\S=HT\-E&\)2\[S/?J756MED%J\;​:?5]​: M%PTIRTCGD@​/@​!6O[NF8-3"L8L*EB^_J`-9+J/G$^&​:O2>B)/#F3-S">WFAY? MMFE4`*#$U*U\<A8%LM_&]XM%%WO0​:TX5HZX#​:Q)ZAJH\,I;`IP4+C\<\Q__^_C] M\85GD\,$+#!0S3/!RA\<N7;P[?'[_^*UT\,CO@​^MKH$YQ41`PZT=\8`57$0.PNC ML1Z]9C36F%$M+!%\96A^IYQ(MO;!AAR`*>U98`P`.FK*\,-.--7R\,.PGI4>PE M)$`&EM!0]ZCF5Z!IU\<&#XPG"CQ(7+R%AES-RUE'EC>5;+ES4P$=WBS0&=>2> MG_UP>&;.+-^(!2.\,^)'BY4U0YGAE$VK^\<AHZ54]WD(8N@​*$\<[L-@​/O'D@​@​5' M9W3_Z^3=\?7=R>FQ\)SC/J\\H\!I\*\#P\#BSSG;Z4@&#8203;7BM\(\,1\)0'5+D@​\,+!TS8J3= M[`MAAK8Z#Z​:EHGK^YKO3HPMO9516&%;LS^-;]_S=R=F'-=-Y\<9=F5U^_^7#R MW>DJ#(7A6B#​:'KMG']Z?G+XEZ​:=Z(/]&VN>/)^#`2M&6​:CC*O0"&HGD72'SU M0`​:='YI\-4]?MZ)G`O1E0P-'N24YH$_"@​95G$X2C5/\,'4LU​:'>L*D=+'ZED> M?PK&99J$Z"%@​=BBMJ\EG8*4%*(V4HA`8=!\,BNP4Q*D.\CZ@​'GN*5H'BH#`$I M?;20]54=CT​:XJ*85+B3KI)W)>N$XNK\<GQ\\,E;0CT*+`US53G`MQ(3SL5UPS& M2Z​:!@​R3U'(9PE97R5R]N+O\,/N2!NKM9_YF?8B/1X!ZDP7`5\,R&A>8​:]TZ9#^ M7X/H5CLR5)7"G=\,E#LSC&S-]='SVYOW)]\C/I5)NZ6UEA(IQB'5RU@​NJ8AZ0 MT6(\<;Y7I@​].LEOI8ML7_E0.​:01?.QKHLAODNME-E\<J31R[​:7P?^.@​SR.\,"G] M'&\,$$N.C`[=54`+7^\,!\,C-HE`0XJ?​:#_88"`_[N];^]KXTC​:_=OS*68%7DF. M+H#M)`L&&QOL\<(YOQ^`D>X#U.T@​CF$5HE!D)67'8SW[JJ​:KNZ1F-!'​:\<[+OO M8?​:W\,9KI2_6MNJJZ^BD_@​!&/5E[*?$\<GDIP5RZSQSUAXHCZ)199A"6\<0]+UL MP^Z-!Z*3]Z\,156CN"%X&212/*2^$=7MSDN^+.5(1T>35​:*?5'5N;"_=​:WM21 M>\<K..[HF^%(E->4T[%8\<H​:$;C(*ZA_D2\$H​:D%0^\<J6+R[`?#_F8EAL&7YGX MXB*6Q=JBN6%Y-XE678_Z'P)A0X`LB-SVP;G_XOV>I9HZ\G6\,=0ER+\;]442M M]"M4(^DZ\-ZI\'+KLU\,B=Q]7FA=SJ'F4\,QB$U$_]*5%QH!=`T\,N#KLQ($B\<C MZEEF`EC;*0^IT__"X+D]O'M@​/\0?(%=[+875%BRDX5#@​V1'PPU&'​:C_\<A\D@​ M]0=1AQ*>\.2WME8QK(8RICBICI.1WVSZ+_​:WWQU[WMZ`AC`A&7C\<#Y*&9\,2J MZ0+ZYNDCFN];9GXQ18*0X4Z?=)T6%FM(#^@​/$E\<O_'N>AX&%[#_L!U/GM6DL M%=D)TY09Z\Q'FI`!P#0&-+'XTDR6A`8Y\<​:3UVF@​TA;Q'DOSP3&^7;D*(PG(Q M=U/=03GAOKBDCDJ-1W91CD[M3*-^**Z[$>Y6C%)3%/&'X'PJJI0_​:26MD?_L MD>.!N\4#"H;JF2MN3))\<).U2Z\<*3UO0​:K_\C+3Y\2KD!3F\7;A​:*_X=1!]BW M]61​:WH"GX21(=\,++?D+\,\<-SO\KY%PT\<C"\Y602$XQJBTS'A^;SK>^@​W0XBG\< MT\,U=+U2IKF7SW;7YT!H^​:S​:TG06DRPMAZLUB1#J\L-=UM\<B4IOEN0$N2;V9Z M\\-F@&#8203;/6H@&#8203;5X\[1V0\+^\,T\*QLG\+49M^74%K?._9HUKE;KI^M]N\VZTTK`-#PS?7 MAFGZ\[WA^E​:KT'+6#3QOOW!!F(CZ224`4DL-A`NO'Y8\,9B[XVGM@​\,Q7`70D5 MV+O"+5MT*BZ0@​=0A5U/9#T4]H2\<!)@​*ITB/P0YT"%[3L.F\<AZ0G0W;G'^08R M"CH!"^!C*XP_BS?`A4D"->GD2&\,!7U\<!ET#_*D7%-N-ZP#57D[/"K>.?YSTC MWAM$`QFX​:RXH\[U/I'OVB.\I;ZF#!Y&A/C\>=;J@&#8203;5Z@&#8203;H5ZA3S\(\*]_)&%Y@​+ M\<]EDWEYP>5F6N'-?-JWS%J%C)Y]ESLJVZ9W!O;Y\ULJD/5I96;F;TJ1EB1UG MMI'\@&#8203;1\+IFV^G;\+7\\\_\,@&#8203;99=I\[Z^CX?\,?8Z=K\<\#6'4_.%V+O&WK.R[L&GXEP6 M9S3/>SZ>O6D\K^8RYN$\<TF.T;'>JJ*&KPU[\,'NA0"_M7MHII^4JMF@​6.RI@​$ M*L?KU-EYZI\$$+B!F4-CMFT$6\,B07M#!EJ4\U.0DKFLN%\<#GJ'​:/=LQ[S(MI MNJO'T85B​:?6G]88GWL)FR9R'X5!6S3EWC​:Y>LWR0S"G>NPAA\/6OT M\;Q9\<T_\,MJNVG1KYO$5]S?\,6​:FO9#?A\\,=;RLV/\,/IXWS^B#OC0RY$Q3Q@​-N M19FI)S"V'7`=^HMX7;\<^0PA;>CS/M>T4DHAYAY)8@​TXA@​=C!2*"YWOI5F'MZ M!>49302\GS\</*T7SN]G5C84Z)YT()YGR]/=F+(&84K0V7`64K[)@​\,F=BKQXK MJ66?I&8V6DRB-&QDK>*RV*U!Z"!ADR0?TA\,`​:I​:I#O@​​:D#!LU5K/JJW​:G/E3 M5717XBRJ/?/]FW*5M57\,.V\,2\+SWZ9@​]]*W95\,​:)9IU.\,.J$O1[N;65[#)B` MX-TU/.-!R*I#[HJD\<NL9(IB"K`%EBK-?F[39+]\<7!S*6+V8*$HW​:*>BFZO1L MO\R8.+YRQ^2O*L[KF5E.\<A\,BMM-SQ754EB-B]K-'*&X+]S3G\J`9"JQMP?9J MT;8PD\6U+^0'-6='(/)H'P5V(Q`+1*IO^&&2Q*J1U5FN%UY@​;`Y/W[_8EY6? M​:2^Y!9XI&?@​K8MU(V)YJ]*22@​I-W9>M//1@​]2\,&MNLII3J7G#J6=M7.F>EU6 M\<YD&X)U%IV>\*6?W7\<R=0#WP\.7`HV5;M?W^X(\<W[SRO"*%YAP$T\,^A\,$1]Y MO"CC982+A]U@​​:&\\!A/D@&#8203;H;?\*1=\!F\-\.YA\]Z0U\[$/M2B\+2&#8203;:Z$9H=TO2​:;^C^Y MEV;8-/&6!%LQEFS2%/$\<_"]T_Q^#\,;48_PMH7R[^[QKPOQ[>7[O%__HSGE7L MEL$)#A&3\<`(H6;5(\/5^`​:C2-RUOC1+O!*-@​?7UG?$&3SZ+4L`U/.!%MJR-​: M"M#\<[T\,CO\<3W​:&"L2UV9XEU&Q'"AA%)KV&MY#Z`UPKS$]\\_8J\<1>[#8​:X`= MVO(>HO2/G?ZXF]\<D9+G0CLA4^&RIKC%PL"QN6LCBM0+;4I?​:P;I=+U\</\<S2L MF\<E9W-?B6​:F30HE[?4NUOPK.Z378@​VJ0(2Q+(_K=X$47)Z\<DB?X​:BH![$HY& M\,*Y]9W*2=CH(?OUU2@​+U8`"^9\<'(6M[WE.AY=`K7`]QWF9RI@​*/F'Y**NL1E M!5>$&2Y7'E/E%]PXIMAT*/'@​\,$JZ_L$Y$4&*5!0GU(*_417[I*4"^ZR3Q)#` M$BHBZ\<H-W\[Y`!(0F'5#AY8O\<L3^^!1CM+K2\O=E?G!;Q​:0LA.F$.(N3Z->8 MF​:2M@​1C/OWO*WS[.D_'_E/Y*.G]$'=?P__NKJ]\5\-_7UK[[[I;__QD/;N\,L M^>\M/&Z0NJI1R\/E?DFS_/K-Z_V#-V\=R4B-7"L65)?/-JS2QQY!R#H)HI&1 M6O=>[+T^\,#(F8P$)A#DQAB5;!7OMF'K?[^^^?+.]LV^4/JV5X08OP$AS-;(& MN[1D[0.9LD$\GBW/6YF-40Z'!+!1'&Q`A​:W0)6\,;%O?\,GBR^`>/4W)BZN_UR M;WN?3;;H-/]_&R-79LXG4?8C6VE_=&Q\<\#6/1F\,QE5FK#4H0E*CL](-9NF+B M4S(I#[VF56]Z2S6^PM.GO\<O?W/*K​:?L?]#=\<T-M#O#T=G>%6;KO​:X'0"UR3I M^.]​:\,/HM&M3;)R8%Z6​:VI&%Z=-(>&F`_D^*7\,0VAIL#?M​:.4​:H/J\<+3\<KGI+ M==-].+&!MQ)W>"\\,^YZ@​4"S1O(#W62?N0S?`)'';2WT4T(@​\>[7S_\,WK@​SN; M?K5YK]D?=Z)N\,)H.PPG4I*1Y$7​:C\05]D?^MKJW(7]4-S?OB#K*>]$G?\,.^> MRKL^$#U/DV"*]X8\<)N\,L[`^M%J/[&F7]8??EVQO0DAA​:5AQ​:2INKTI7H\,KR? MLL&(B'RSL^O4U*&/44D%^\<8BSTQKZ​:4VE]3F43B7%/'\,F$3=4X`1J\<6/1H[* MH/\N​:O5)W._.(0DYI?*_AS#HF)=*T4Z0G+](PG!@​J'+H\<>Z'FKZ1(`?+S]Z_ MPUD\E4%%=*;!X+ZT5%X_?Y'K@​$*I52/&544XS`1=&64JAQC`[K\,#*=U\,#GVY MN&RQE.LQRV6H%CB&M-$#+2J(?;"D\<`!ID0!ZOLHU\(?/JX#57QSY-2U&"ZNW M5)JXHQ2*T[=2>YQ`5^6Z^8ZU#R.A?[#]-.L3\<1["L86@​]P^F@​L$)QXXN1H)2 M_[2W\\_\`\#E??\]QJUL\]Y\_V9/\+?0=R\-\_Y@&#8203;ZKM/\_UQ\[\.Z/\_?WLI\_?\\Z3\\\_H\]+/S MQF\BU`9IV21\,T7(/&_XT%!BY4P9U03R​:S&​:7\Q\,2?P)SZF2=8P01V![P]L() M*?[]$-*4-7R[?A%L^X_ZAAV+GP4(@​*\,YO>Z.AWV)1I)=L"?QCJ0EOM8.A]W1 M6>IEVB]P9V233\<5\<;_\,UN%Q.G]F)B80]0[N]#=^DC1-;\,(I7CZ/R#!-VBU%Y MP4VRC\U/;\!\!@&#8203;T9A2'AHB4JGG7C0@​\XO+RZ-GX.U;I/\,Z0G]L'"T1&&C%DQR MM/^$'9G*EJ-;1O6'5/_S_ONG​:3G)D0#465\?II'D2Q@&#8203;\*\,Z\<G\]\(1Z"BD\\FB@​ MAM141O61^PML​:A;[A\DY"3GL"\X+@​)=SBN-R@​"Q/77+>J@​=-X)^\,H_ZH"3-V M-QK%B3VP_'\<OE?^13\;_7VV_WGN^NW_P]>NXAO^OK#WXUL9_6%M[`/U_]>'# M6_[_9SQ\Z/*\,SRQ2CYF%MP//D#8F1OY7^WD$AZS\N[=!\\<V/03+!*S.?/!@​[ MV4_D[4N/!-P=VFD@​​:WC"OSQ$S;I#S^['`!Q)SU^A​:MM`*K=+_P][G/6?#=-7 MKN/​:\Y_[#PORW_V5M97;]?]G//#$W/TX>C^*^NGZ.N8`_I]LB!AAYD3-N\<F- M!^(BS#X53)]*H_!U9V__H)CBCGQZ^PHO/Y'​:#U939=/1\<FWO]?[!AY=[3Q&R M3.(058MEFJ>​:XT[E!>12W*`@​R]BN*2Y+=Y-"E0]>5Z9)=I\,BA=E>5Z))Y5\5 MR]3H$Q^>OWO#XU!=W%55DII'7-NG9V]>O7VWN[^_N54]_34​:^LV_]​:H-?__] M\^=[/W-)I[]6K_+9Z[?6@​/^`QXG_Q7/ACZCC\<^(_\UY`\A_X_VW\YS_^*8X_ M\<Y"O7\,?-QE_D_V_7'O+^OWH;__M/>4K'7_>DKU7'-?(?*7L/"O+?`Q(`;^6_ M/^.Q@​?TP^NOK&/[U=8R_A&L^.-\PF..3#.ATN=/PER\<(YO=QF.!/]M7I\,CIR M.LI`)!0NBZ/L3II;SP'M7&LF83\*>RP\<)CAJJD@​L6DG\<#T["_H1S])I;+_&K MUN0S.4J_G*-2CZ1\,X"')R9?AV8I&-?'Q#O(I@​0(\KC^\<2M&\,F]5ISN1\,I9PS M5V?6NNII$L>7(\<E)3(BQYW&ATG'274J(;0"&1&FBK'`]Y+[JA[V1`052QRE8 M!]/​:)Q+CV\,&81;7E7H/2HJ@​*_Y12Z1TWNV)KGUS1P'7J&?8BTCE#C.'E=^YP MYM`LY6L..HJH_Z257Y6/A&12\*$\K%$&W3&OF"J74[7(2$KZQ(9'R$BW(YX1 M+\5*-\Q2EQL>DSO#GX$!TL"-]&\<P*3%U@​%-B1^)*\"=U\,!D-V2*77\,27&\<A= MKBPI@​RNO7FG>​:B].3D-MM"3@​GEF4P%(Q/XFM9#SL!B/J6OA7CX+T/"U-U​:6) MFL33$AIFOCB5VV\"-?+OYG6WS^Q3NO\;/?\<KU;%X_U]]0/\K[O\/5F[MOW_* M4[K_\_AG`H"B\-0.SND3]G!L6?CQ$WN*-+>>&="A6A59=^2P#8Q$(_4.$5.% MV=];^AMN^@​5VC>L?];S8D'82`WK@​B@​_U+`4NC_2C3ECG%)2^)\,U)/)J;)I-0 ML`'P_F^2-[\\.\<\.N\)\(YHWTW\!T2I\*\*V&#8203;:5H@&#8203;UAMR\)=\)$@&#8203;SO9"8/;/J\#$!;OGQF M&2+WN5R​:L\,F3D&2&L096+T_^HN%+​:IR)79?ZZ0NQZ=RA'$ZG?$Q/N+6F`YM; M^\8_M]​:\,$[Y!@​[9D#KQ5)_=4\<V=]59[[\,L2E^7S>3IP\,PJ10N\<J%9R%'5T9# MB\,#FUKOP%YI@​H[.L"?PT)WC)R​:9NLIP4"2^9.0/*Q\P;4\_FX&#8203;:%@&#8203;EQ>\,[)T\ MU0^S=U-QBS8N@​O11(IWJ=_E'6DGTBAAQAQ^\YUG;W)I>1N&D5H54\,8JKC>4/ MARO')IV2=Z4E&JE5\<V82D\,RHC^7DZ'`8"F!6Y.3SJ5]\,/%[S`"VDW1)NJ68J M'*EMEDYMUT\<N56@​UF​:?79LZ1Q)GS/9PO3S^-@​M-GF7C​:&2\<H!1*_LSIG)X=Q M7FMH7^66_KSDSU\LK#LE\<8SJ!4)O(J#`I#-\,*UD5BR@​R_FXW(\@​XPBVDASW? MKNL)]80SU2ZL59WC%E8JOF_7U6I\<X&Y4K?&B\,_4*!U/!.E//JE#/JOFY6DS" MT>-!7`\N\,GCS$;](&].96)UF)63LL5@​\,?2D4DIODI82YZ9U*M!.O)Y38Z-E\ M6G7I​:#%R29554?$%64B+*8.WYNN​:NIB\,C-\<7RY&;\,9]1%(LL0*N%@​_D'_J5B M@​G#OPZ=\T8>S/\<U\/-_PW)OA+1I1X22)S\/!T​:!R=3Q;BL(EM%JM+RYB5S$W M/[>\,​:M\,\U=E"GT>#[N\A"OG]UU#;?U\<);Y/P\G-**\,SP$RJC5GUT?ZO​:T'P? M\<&U*1Y85\(81`Z\*T_J+\I*\NMUE"2@​-​:WX5PL=)_+&​:+0M_3DJ@​.*0VJ;C[ M.DF%V>T/PTY*B4G(V'[_\F!.L3MA/SRE^3`_I2*9FK!*$M#$W'!NP.$8GKY) MR#!^#M@​(H_\Q\<JH&_U![!JV1K@​8-F\<'DY5LB]!TV`N.`5[WB\,-LF\,`@​+]6*' MHV3[XQ-Q1​:_9[JN;5/V3LF2V[VRZR$8$&04G`NRQZ5?H?Q\+;-ZX\,4ML[QDJ M-7​:*-$&IE505'J(*X[KF@​MW8!`K_)TGN%I+DQ+`F7TQ1>3.Y\,*(SM?8FJ48P MN``\N%9=;​:W09*V$@​VXE*V'>1QKE&P\<V89.5A!PHP&O+M.N\<Q1=#2>(L(@​6F M'K7M*+1/-TS0`[U.-(0L.650A]A>=`&(FX'6XS9$@​Y162HV);U@​LF\,K=AUU​: M^C3SHKK=/XN)*TR*`5​:_6M3Y"LC;O​:[["^F*(O7G*'0W5.>\,'X4L\@​)ZU# M&SS#68GY"$FE​:]$(K;(4LY&[V6*4=!?!1]A\D5QP*4D/Z92ISZZ2"\<&.5L M2=$;?\(%V^)M+`N-%*7FMH2@​;?#2\,TAI4L"%(!7X8K[L^HII9>[^!WV]*7$2 M=G!#(K@​\,(HYRJ]F[X\3\<W!H&2\<K!;R]"W!]N^`).9F^(&?3+8&2"&3\,P5-TB M5L;**/W`\<\,I(`^\Q.F+*^"N(R"RX/`.#T6.`E9R.8?!ZSKJE\,[@​;?N0)[#?] M5;]3\<\<SM/"R&_QJ+N\,Q]&@​Z\,V]*G/(NZ\,GMB8=PW\<POV)AQ)DI'L_8ZMV​:[F M\,\->9M**IC(_W7​:WZQ8HZ[​:U4LG^E$!1U"G?2*?\,9I\<Z/BMK&H8UFZ%^36?D M5WYQ)>9B6&$E9DN0&.A=_;SI&MU\<W%NS>9TWEB_M3G;]4BQTLU'`9C>#?#JK M\,\TDU+@​.(\,0G2JA^OA^D]%M$>)Z'X8B*S"I=/I>SMLOFUN'J\\<9L0ENKFW+M M6%AS%OB#TN9%"WHQP]9NWCTWVD1U#DE5-YQ"-YHH)A9F\<.K$.\<K​:];D-LC%Y M)`*&CBI[\C+Q5O0Q&W;&4/"YQ3$>C7R0[=*MUCT-`6&.XVSP/J5^E\,6?_H.I M-Q305Y3@​THWQP"_$-*W4G0AH?>E\<T\TJH/L5^E(A`=VDDD​:8YI2F4AY44I9^ M\<5/.*\<]-"​:S_\0B(I]\,\,&E0C8&5ZICT​:I(V)3​:GYLT9HI?JIN?4J'(QQ?!DD M\<8_/G%=(1​:)M​:XQ;%2E>'#[Y\<)SKRF$6WC738K)H$-B^C35\<AE-TX>;66U9W MFO2+;^Q@​\<E/CTCB!6D9O@​P$)?_)^\,-'I?GOH]]_]*3W_$P_2KU;'-?X_#^ZO MS?C_K'QWZ__]ISREYW\T_E]V^K\<#%`;*S4=_\,\=]N\<.^W';!0=]S;D+FB[SE M[\VMW\<$HF=​:6YA_>N+Y%Z7AP'@​XJ^F&A/1YH`*R%W2G8@​F?2/7_1\,\,FN=0^R MAYA9`^2@​+.S"5)'R7F@​/@​W`F98[14H%4F%0;64'LAR-64F=+[6LQ&KJLGY=" MM)OL@​​:5SQ+;Z4-[\,​:8?@​+4B2FW7=-6\<8INO\4O\%*IU7​:1T;8"HVTE​:^OG M9;`&YKGV94F>\,PJO2F9V'1(@​/[;C5"J&Z`5N1$>\VG6Q0K#QZQSOR M5L58%9%​:0;_]*U'PS;P1LO.V​:U&I9\V'​:69H3/N^)=]-Q.M(DH19BD6F19"1 MI9QK6)0*5;X(AK@​5ZA[TU_\,1X=B09U9]SHR7%@​T\,4VM;\,$​:%-/HU-%8%S#QH M)B+&%@​+1U9[8TV".O\,L!C!NNRBN>2WEKD68R>K4>KP#\,2UR]\*\<Y==%[RO*A MPTW0E88F+.43_\<MO?ZP==>_5E]LF/^.PF.*;6=HFU$HWB9AM^\,\<C?\48V\,P! M)7^H.]$Y22S\,^&ZN[^=UN#42KC2JU`^.TM*YZ.;$?I8373$1LFDX.Y8RU6S0 M4QM2C/.J`ADZU>8-`J$=EA6MS]CN'\,]!(]F&K"3D-\,C.>%1P-$E"Q'M-79N8 M&K#\,1\,Q&5GQ\,NM9?\8;S5?(X\P1CJO4Z8]IW6ZWU\/A*]JU-C+"V0VZ^)X6V M`!$Z[\,VZ.&IJ9E2​:*'-D5`93OBIYKLJ)RO[!SNZ[=W[E)YZ+ZU1T)>N%K.9" MC9+DKYJ@​EN>;=9?(`C-5\GIQ9SR/.)-W=G8UMSC?K\<KQ^4^9_/\U97\\B^7_ M;Q_>__8[Y_[/*NY_/%AY\<"O__QD/CO_\_(WO)6$##\,?_MB0^C"38#P5X3>\,' M"I05K4(;#J\<%4*$2]\<)H%AS5+WXS"'\<9JWF'Y\,T//VWO'?C;+U]^V/UQ]_7! M?EW2SO--G'-G85​:5\9;D\7_GH\5H__B[W\C$"\\G\`\.@&#8203;P47I2^8(_#!05QO(/ M^J-00*V`A-8RA6IQ>Z1%A4&WP=F!E\%@​S"9\<$&PNB4​:823D4%R5++`@​(GY#D MBM\,!3.52O9L\,\3]R(P7TE&(S_(RZK]MW'I]Q_.\,-3INJK_9I>[F_5H4H4`!Y MFX$[$S-M$_AB#U8LUALPQHJ8;)^3]3J0M059\Y!H9V'_\,H2_H\%"FY_SRE/I MY7?@​VOT>'+HO0);[8OPW!#^=1>";`\!7!E]7AEY7ABDW!U+.*X>**T>**\-] M*X5]FP?A5H;@​5HK#-@​>&S2O`J3&K9>0U1E5BM\,MH)\,&\,`KOXG0@​K$D4C3AB^ M&1"10$22F*V(8;ED&\<\</;U[M9JF)%_T07'+(CX$$\,5A8.\,J1\$)!.B46-47Y M%9;"XUZO(M!Q"JL\,=A\</PES%V!J6DXXPK4V?-%N_TFIKC14$;'9^(D#S[NL? M/R'CE=_R*_;+AF\Y^U=ZO\#\(V\]SH6@&#8203;\#W\`$;%JSPC6\)^$T9F\!UQ&1EYZ\]9EOU MJ>\,HQA(OB0]!Y)29X^SQG1LO;W3)T%17)\,XP;#V\,%HU3​:AT?%_R449L*Q]]S M2W=04DWQOL8>BT​:I1[_RZ76\B?TW>Z6?\,/WS6[K`%;"O2?G[*B17K)M"H&`3 M0]B)\,R;O'/!RN9Q0N\NAU!K^7;[K!(\#^6L0LU8VY\,#8N(FW/`S8MPG_.1F/ MV"32D$B3R^BO\<​:JOEC]@​&^U^H+^`(0K-F8O1'W!OT5^GXPB?I`Q]H9\[&@​R= M_]3PY-0P/LX+$%\BA$&@​FE;E'6)P]D>#6`\<C=[!L8K)LY%^;$#349Z](-14] MS\\\,NZX\56=\[\+L\-FUD@&#8203;Q?/\,%L[EW\1G​:\,Y^[X\')V-`LOF2P_-R0;2]DM#= MQH[C6'#0Z\TM\,275EC_4\<^J]]B@​G9;'"Z6);0#8&4+@​!UQ[UIJXWC'4'RE+J M_83FUH$&RMKP"B6-HE$_K%71.?XS]4GD`$S[8_IA3!YH(7+)]4?_T​:/=-^QA M=L_$.R2N>'B"T$;A*#UF1.!X*/XK&@​_+"6$\,K+HP5;1CB2ACX-SSY;10P4$2 M1!Q=J=JN@​EN;\<GEC0)"^!''\,*.'+>!(F'8[I).T09.*Q!B.!7(^#>"JJ#>\​: M]IH![9SY/0W\,-9EAHD9F-G84LA/-Y\/1\,?@​-LB)YAIB​:;O@​\,V\\XR280CQ]& M"E([.O\,/P3;6CSD`EOK4\<+3I0U4[UM>/G​:A9"%95​:57\&H)WQ-VZ[*E@​"R[. MK\,`LGT4T#2$H\<[S0A)\<Y@​D""8T​:C++J``ANZ#DK2\,+PY9GYZ2(M\,6\@​-Y+0\< MZ(MAH9W`8T3AWU7V!U65>T0KM-\,Z52.Z`\<@​0VIP>`XD2#)"+SB*.2C0SID=' MI\FMHRU+1`2!502^HPO66)LZ1#Q"Y+DD[C\<OMUB=(=[#_\<4=DD28ZMH;F*$2 M>(H^#P!)&-CQQ87CH]'1"/$&$\,A44KO19AR@​W$-@​0#NC\<\<S^8!K#K.5MFU)1 MX`Y;T$R!M!87E\<-Y96`.#_]RW-9ET#ZVY1Q27QZ;B-*\J+2`8PUAS7'V4O^0 M^NV8^DA#5&A!+>^1;>G1​:%?]QK*X$OGP.J3037D[;WE;-\@​F7O62BR\,N#T7) M]DYL+Q\BS['T\J&-@​!=0BYQ>"49.H]`M;6K1AB>5@​RE*Q&OP4X>$4%W+4QO4 M\-#PH.IJE7KV​:\FH7%\<KY\[K\!>\#@&#8203;LX0O&Q\.NXI&$Z1P\.B7Z8J;11\-/\,5​:#44 M\AR"STP/0DW8GU)+B0!B-L?YT6)D4WK-&5​:/'0&JP8CT$F0$?A.SX1YUX.4X M2+`]9X\,ZMKST\^N5^-X%\<1$A1('B[`0.]1Z]VSUX_^[UEM`Q#-$%M-+]3L\,? M-'RP51]AN@​1\7F/N)I*.\,5&QVGL\'$+>/B7ML/U#0CY&(^NP20.(?@​#3DCAF M"AE*13R?F08\@&#8203;%\(F08;U\.F^@&#8203;7^ID\`@&#8203;&\<D\,E.W.'`^?.6]LM;W_>9'2H\<$9O M$3%EQ8^D​:P[B4P3​:R\(2\</10OQ;XO6#0@​3;5/V^​:X`4V]J​:XMYIPD'`^/9#B MF#8>DXPRF@​2=\<U\,N`\&2WL;HK.@​1G@​I4P(^Z\,RUH;68.NDDS39`RSY8F+#]( M​:"H0SYL$B>Y8^GV#​:(%$TG;EDY;W6#\_=K+C#'IN_L?Y_-[08​:=O1-R4D+`​: M\,LME;#7#V7@​OAZSB3\,B/3D';W6X.VY\<)\<0L2​:8+=D2643SP$J/#/[K)5MD8O MFA!?J`1G>(YSY5\,[?I%\,_P\Q%FH\`>@&#8203;G2GV$#R-&T@​D!)3&(.\,`VO)&]30P; MXD)S​:Y43]SB\,@​I\/''TH#54N$TAH"^)MY=L0!P61GLM\M1V[@​!UXDFZ]HJ`L M%WDR!)#*3I0B=ML\,​:B`_BZ%>5-TJYEGDH\,!6H\<9BYP2V)I63\,WM-U&T;&&(W M"2;^5;UX1E_YJ&X';OI7$DW"@​4\,QRH%>ZI[;`\<;​:-UN/X^'@​​:#\2NB33\<!R% MB73\,O\,*D2F=.81+-]"8*DZ2\<KS"9DER%"​:\<)[SFNQDVTI7O$-`LR-L\<%85-& MZG+XAF7O)N9=(09W/-!87BY\<N$17​:*>C​:9\1R​:F^5['9+3/95D&X\<R'1N_'X M1$3N4\<+0V9U^U#GG/==6-*\,?^+X&R;​:)A770JA=.;JI4%;#"%PSA\&J$ETK# M!!K+ZS"ROP]41\<A%S[#-('X5=46.TZ8@​891HUTG[#V*.LE\,0O`)I!P/TJNZ@​ M\<8Y+FBGG&!*V.5;Y0[I+VFTSI$9#1#JY/@​'\\<!9WI2%&'RF21`-P$6AO9PW$ MT-N>1245R\,/2A]IMTDCH6AA4%&OGS0B\<+@​!PP1AQ;HR!;30=FN)4U]`F&P8A MT6H&"!$Y&N5JEHN=MFH94RUDXL0O5XAU5V/A2-X0UKAT[G?TPTFX4`'EQ5%L M(I)S44%R$I%H0%J$1\,​:S>WP#T.LP`V*;=.5(CM=96E$6K$\<6)/XXDS\,Q​:CL\, MC;NT?9BF8WS-;LM)-"BIKN_*\,W98>1MT;0​::9#2U>^\,^!];DSV51\'"7*$)\ M`H2%CEGF1%A2CBE%A>_)B=Q(!*_*`>2BBH_0X+G`41J./ASF0DNSK1?14/IQ M\R*6NGABFV;​:-​:E$-_3​:!'M1F(G@​V%.C41​:/NS"'=.//K``\,Q)^\,AU(5@​CPC M​:K​:9VW)J1QU--#O32YM[%G2UR5V_\E9"%F2M=L+(G\,​:S%.6$1FE@​D)NP.!P) M.>I?P^&U%_#U1&0##9$@​RH'-9.YJ&​:.%)\<29!#)K^(*)G0;\<E6**T\<@​)=M#T M*DUMCIA?G]/%67VB==FJM+%AZ@​KH\,7@​"JX​:.)I[CKHZ​:YLI`9N_[GR@​#F;;= M5`8RZ1?(0+]+!\,)?LWZ;CGPS1R3B"&​:0?'+&\61@&#8203;=RC8PQ'\.K\+92MY;N\)(& M.+7$D3Y-EV8​:=Z*@​[_K=#?1*A\A$\,N\\W\[&\\7%@&#8203;TY\`\+W&R=63\+2JC^A!SD9) MB9D'1\UZ4\#@&#8203;NF\(BN\-Q\!2YA\\\-\.3?7\<GY.WJ5>^;"E;UZJ\,O/7"8U)=0DVTH] MEYAOT$A)>"^W?^4`+0LI&+"2RL'@​U>B)>Y8H#E)"S3H2\NUC5G&-W+K$)SU# MCI?​:CT5)/6\,M76^?H6FXXO1;ZU[[M]]$H\,T-N@​​:WKG#2HT\,FM0+_[);61[W$ MAEN​:3-7U]2K.*1M_=;\\<K_LXKZS@​W[KD1!`#!1*0$H\=A`]W)*]F!DG"I6P6 M+F`-@​ZY9D7​:@​+KHY/SES\]V3>Z5+_J\,MHLHU[&"?0\\<B*_ND_N\,HO;?\<%N^] MO^(H[Y-^\<\Z;V+NOM\,>V.''%K?(7JA&​::[Z67W+5_!6+S\G#\,19S\,1&1&VTQ MSKNU]E'Z3;O!+393@​98G$>@​OLQK[​:3FZ\,C\,"PH9?.3*U9PDJ\P=_^8DX83Z1 M(;&D!=0\F\`"\,E\.PV\*C@&#8203;ZH6;5CO&#8203;:\_J=(/`1\<K#]N^[G.S!^]A​:\,/4E!M>;6Q M?)^QAG)+​:L.P*71ZUC]$1\,[BG>8)V59"_O*X3O\>M4')\<IX0Y?#YVW?6*W?- M.$3#;1KC@​([_\<)J$PP^\_(A​:2M3(MX​:%>*3=*"V\<RS&?2F?/CCD9\<J5P"&.9 MB=*OR#T)K\,15K#LH'[S4*G7X!%C+5'MY;;U2+ZVNTT^TUU-MG'7_+G1^KAWJ M`KY1UM-S^Q?]Q[-6R)6Y6_5QWW6U#H\&N0O;M]P0#_.UZ'#EF'VC[K%7U)UK M>DQE(D&.0\</O/`&40\T6​:E#YU>7HNO)$63&74M#=2Q'Z.W4Z&^-3H3_^23*1 M-.J)Q5W(*IS?]]%G=GRV`$YT%6;B7GX!G)B5>*^NP]->O`JY(%Z$​:S==A$^S M1>A(G7DZGOZ'+\2\<.%VR&/VOLQKEJ.EW+\​:G\Q​:C_V]8C>Z\<^!HK\,BOOCUF5 M9@​P^>U&​:]=`A$HP2G%\%'5T%75Z-Y?\,_Y\W2J5H​:\,$X\<_XE*1M!B[\ZZ7S/C MQ*H#`P?1;[U[70\<T2I9'@​%+6G3)R8SRW-3W*\S)F]SI`GLO1C=NHGIUL\<QB_ MD32I#>Y4^HNB(LT9\<-#)ZW?^-($@​290Y`O;J3.)YS7J.9L'F;X_1\JUZ7F!8 MCQ=O;4)I$\<&"WQJ*)$TYUS+Y(6BM+>1(S[F02CFG\,4RH\,G\,N17RGO5ZQ%5TW MA\<^HP!](4\SWR5E^TI[&H]C_J]K8\PSHAWDI2?5TJGEI!F&.M2)?_\<M9B;R` M%T+Z0;^_​:*L​:4(6P#O&)​:[[TP>R*S*_%076#%P].F\,M+'U+I;_FND#U=R\[# M\K4-YW)HMNT@​&Q9Y>3T)ZRZ+#\?=RI+KFI9HTZBRVL\,YE​::FZXB\.%]^>EWY MJ9​:/W^6E[YN9X.ZJSHG​:+-O9_[P%​:D2&4OG`+E'VFRA?H5+`]0MT/R\<6E"W3 M&ZS2$J%E=I&.J+CRP_-\3XWF[C6E#6!S\,(/"$?$8-2[R@​UJ+J2FPW5-#X-A\< MOY;(`SNPV1E\GKR#​:Y;U;\,?*L3T7B-X"C;"/\<-FU[^IS)O"/AA)KX\,_3\​:-. MJ'N_'1Y-UH^JQ]_4YRS1&​:Y#)​:8Z4^94_E'E]`4'YGEJ/CH\,(E\<YE\!Z\IRJ M?L[$\?SQN5O\SW/YCY3?Z\VOX!%54.*4I6Y\<QLDF7]^C4A%!I1JW.U$\<E5`3 M.;3T4[4ZA["M\<L+$/\,TN8C-T;=V8KACL;`YAYMM\<RMJ4Y;DX?/@​I.W`4;$T+ M%"((4-&`6$1.@​C*O_N6GZ[7#?QP='=?;R^O+J^MY​:9T3T8J!=$`B4UDNRG1T MU%X_);F\<[4.?G+(OVO)WFUISQ[O#93YQRIMK\,MK`-\\,3[EQ1S3E#GK​:&RRY* M;.P$;0Q]L^​:_#2\<9;M-O​:FKWO1SF;&​:F1O\,1*ZZVL\<&T?_.-R7C'UK\<JW28_ MM_SEI65SZ_T.6PF=KYN;7#\^69`Z-FGRYV/MO6*KVY'V6\$(S)FDUU`1]UF^ M6XKU>G\<>E_/)DDK7^6BZAX.."JL%4!W*+​:N&D\,5\<_3%+("1#X3I!V7Q>N!O? M\<#X?/?Y*$_K_C_G\<;\,[.9S.!W8G[​:--?^8^​:T(]G*GW\U2?TINS/[;ZX2;+[ M5WY*;\Z;S`8-T)VG"E7(!I​:L!&\,35Y-XNRY36*WPYU>;E?1?R^?_6K[\5V5C MCA5D^1QMNLQ\,2!PRBL\<K5\]RF\NV."#G\)>C#CD/IZG>\*GKP`F]ERC74E*7 M\<R&2[(F@​HW^!6OKKM^75WS33O(.BC+P[3CBK11F.1EFU)M_L9#&;JC-PN?*P MT.&9($\<_.)A\<LCBED[-@​!%XEE[%.X8`S3C/X!U6W[-D1?N2Q0?@​S8P'B4$B@​ M`)'2P#8)]@​T/@​DG​:_L?AT=VC)\\<8\<HB3(DS*J#"[0UYD/3PZXDS'C\75 MZG'%''V9\76\+7\#ZZ=X\,B;8'%\\@&#8203;Q\`"&U\]YGZ4'KUE3&#8203;:2RCTCXK;)L-7VZ4​:A M[$-\,?IKU1T]H2\,!=-^54J\<I%6'-5[D$SB/0G;F2T_%\,V-XXJKV\,X'TW"?K^I M'F​:95+?N5X\JI2?_/G0K)8?^.JI4CXX&1]!F0\,-1O91$>IP6U\<H3796]M-D* M7X]E1$T_.P-1/G$?/​:KLOCG`"BCKC(M@​2(+9T?*'YM;[-/SEEQJ$\<_ZY-^CB MK/N^^8V[?!(FQ/2M\<\4/UHN)3MRZ1_79\,WH5KNTJ2(E_!4ZH.[6\<VUAW_/%Q M=BV/USW]LYZ]RJ!RC(#\!​:7K3;]\<\?K.EJ\J40;%\,[.$\?9RPJ-J5JK>;OPD MJ>T1​:3F7FHC7;Q_WC*>^9E7\<;'=A425Y&X/`\,&BWZ[7)B\<0ZI$6H]R+K#9.Y MQ&&D!'S+UWA\@​_B3*8*1;;A@​-T'6/.Z_B9F!!B!(\,Q\;SPLAC4AG;.98 MTU'W&W"BQ[XB^&0$​:N^N"X_9N*;[B^]ADP(JK[1*"I])-.L^\,!.]+S=*Y6/\, MC8%8D1]>[PI9-"0DKHVZ4\,​:%ZYILZV​:'B/S+#.!X.75QC6N2VOKZ1KS!X​:]_ MBB.*2'C+D>[>I)H%)+^18G)"+\<)>7L0>9H0F>$\O8[TUEL60R@​N-AH*3XKS? M=%GJGJ_@​[HGQ7]&K\<_\E!%;7*V+ZZMEK>G]9_N\<WW\R4XN+/K_MW4T​:@​5Z"J M^FR=>K>*9X10[->U)OPHRR`-6L>6)">SDEQ^2(8EUVL(KBC1Z2#HF[F/WE5G M4QD.Y7R\T^>J>H37"VHJ%*\,\;K​:\<K87E7&53RQJOY\TNYYP!5=CCA>R​:L'[_ M9'LNF[(SEX4S*Z==[]$`F'A\M7L$R#\<7]'​:NM6'V4Z​:!+1GT+"D12'.F*8DT MA/9​:G^5P=B`$27[XRS@​B_LZ7*E+_@​2^W/'JX​:9G\Q5\,WEBH*8"XD1!/O0>;​: M7]JHJAT+^>ORTGU7K_+E?"U%``Y4MT0YU'FB5B'[)W\X3L^85EQCKYN38RV/ M%N&5%\,#\<Q3R+"J"​:3&86*​:0`)4FZ2LXK?ZM*.-QZUFNBKB[​:J5A3Q4==`C4+ M#Z\O4\*\*\-\<K\(WB$81"=^\_ZN5\+OH\<\,D"\)O66XP9\-?@&#8203;0?;\)​:=FPL5U%Q;7JFS MEY-\N8@​&P'\\#@&#8203;\!MTS"5Y\*S1​:I6@​RV$G[CV/!PQ7+​:`I​:3!('>"4U34N;\DA M";ZH/#O4QU\N_0L$H[EFH1BIE$_>\\UI36[1"693`T`B'/GCH?'EQW+@​\GO] M-\,MD"K`Y30J&\,C4IFUL*?'==L&0'XS0'00JP​:AL6;_6!DZR>59EVDGZA6B?\< MH\,W^?3XVT*&2BZA.`$>LPNN.W^40.V=#V!TZE0*#-1RY6?/PH1*2>7X\KU63 M$\7\-9\.8@&#8203;6Y5\\\,\*P9Z4?KU1\!$\.W\)\_8G6KFCGC%HZ%\.3ECXXFK=\+76)6P1&X/ M%DBA2>(24B​:&"3J?NF$​:AOVDIU8​:8\<VZF]_M814R​:_MDO"UIY3_IL0\,MS4"J MMM?C*RQ^-)KE>$MJZ'G2J^\\*8"77\\DH/1\\R?GO0@&#8203;Z\]566RU\*S=Q9J`\,3U(_ M98"2UD1`)+L8Z57!+7+7%@​YS\<^L1+Q​:O%Z3HG_#\<M8EM=''K"8YCYTJ]\,"(Z M(%FL1UXY.CQEHX.Q4.HV/+!@​^Q.RMEO_C"OZLPMPJ>N\<SK\,H@​J\<+_\,O+OSUW MP@​K.^)*;`W6KPYF^J$H\<N​:IU$​:>^G`F'KJ#-3N^43M[/ZQ$B^=_>([BD]V4] M\J\,\.\<=O\_\!;R\`EZ?H\_X=5\./E6&W?N\*/7L3X\\@&#8203;;/I90K^9SW\-=\#\-PL\.'?D\4] M6G>S&`\DRB&#8203;:YEK\`$\!\]GZQ\,@&#8203;?/CQ6?%X[/I&MN$LL;#!Z>'M98NK9]%8P7X* M1\<W&MZ_NF2L[52G^SHR#$UXN]F3R'VL$5..\--^/R2'NROG;&"(_A_*LS1NY MC%PS=\,32RIPQ$!^-.0.7][G(C;​:YG6?';IZ7IM/RA@​(#*2RQ2W+Q\<H([2_@​* MV8+*'(>X@​K_8@​E*S2W[S6V"\O;]2$Q95Y[K​:?D8CLGM7Y\<7F-;9BSGUX)Y1G MO-​:AP6YS\,YX-LP3"RFEJ\<5R'G-6$(+U9KI_8)2"7S7H4E&\<2?6-VQ\CV^.*& M`3/DX\IQXX8\[QN\_;\,\-S\]@&#8203;BM/98O11GB1IR\<I)S/​:6G57M&L7MM​:/]]\<!.B\< M#"J?VT3E)+)0N/*KW]'\<16U]=A9VSD^*LH!\<%LUB0UPSOI0F'P#`WE+BF*1? MM-FZX')\'2\<O​:LZSON8@​Z2QK$8J\,$V@​#P57[X3J\<A3-5ZL'#64(SV\<)*I#FJ MO​:7\<)Z\<)N4SU+Z.7`;[BA@​1'+5([CUC#5ZP`_865Z]4N])7&;"I0L%;27Z+\< M0=)RBBZ_'^EA=KL#​:X*HP)HA\,U_AU6M'?\TN?]F/"GU.["PW.VA\<=^2​:=HT- M#&R.+YD_4DB!?(FDD9N​:Y​:$QI-@​OS\]\,^)I%49[3\<];NW\,[OER\<HZNWSJE"# MSD7PD\<T\​:RLKI#7BOV*R852*&/BSL-J\<AD!H2​::X​:PQM%JZJ(^(%?38@​DU`8 M)^N`O4Y#A.8​:Q8R-`'C71$`D+L(@​E​:B4@​WC0[(W[_6GSEW'0%]@​[L)Y4S4ZF MIEKE_LK'U8\\\B016N12@&#8203;4W&#8203;:T\)8/B\)S\<NJ?Y5G\\4ZHK4Z3L\.J@&#8203;^T"P);Q2WD MMV]LRP"ND)NT$L_L`(49;">^T!TP(!'#6B"6JU]#YZKLA^\,D](85;$7C3CU\< ML&-8\,78EAFHN5]ZA[R>A/T'​:7A#UZRW?W^T;N`N-2GP/+;HG!BV.9@​SI`N+" M>"@​7]HD0B2>J+=4XHW/@​4A\7Y6ZFF_I8H\<X];_.\,WJSZK[=?[7H>(YHTB7Z@​ MFC!(CNTUDW#_[Z_?O-W?VY=H)9RFV>5​:?\<#Z?\,";#X+SZ.FQ​:K\,)=(5F4W[3 MT(6#2__M[KN7#W>>^E4!;?UD^\=IAW]5=6LIJ\\!0M;\.\[\_^S=WEO@&#8203;$'LCV-D M\<7X\<5`0​:O`!0PB-$K8.O+`80I?J#J`/?@​N"$0]IYO9`X71*F-$3/]4]!&`"` MHPW`BFG%\`(NI#RC1GHVC4(@​\,'*%0*5`C6CX#J8=0@​5#4&^X\!T>.E20(CM^ MAEO"N\,\,X=1​:L`G$396`W)'8\9#T#92#'V"ECI5F\C.PT'E@​9-\,>X;Q@​2X"(& M!`LC\,Z1`&1P"4Q.X%3G\<189SX"[4*ZM!RL?]U-S#]P\,'@​G'=`WP\,\,;&)&$L% M3@​%+JA\,\,M;L;BL\,RZ/3'7091&80>XRW(G8)T5MP>`6>E`[2$\8B8#\,QN*%\,8 M3YC66\>8!R%\,8N`/X]3`5V"H0*@​OC&\,\Z-*0C​:2S@​$F"X31W-T_@​I>11JAQ" M30XX1X$K\<HB;-!SZVF*=>\,#?/`EI_3(S;`.6I3^]`?2)K_I1*O@​Q7CSH3P4[ M.PT'J\&#8203;:6\!@&#8203;RE\!CKW&#8203;:\_V\(/PI\_M\`"5810CX7"4M@​7QC[1`\,1​:9LOSGLL4HW[J M@​*\,)0`V#U1@​DT\<#"QA00​:RRHB*>X%!G\=PZS!)`@​%G-3H4LM2)]!Q\,GZD8_- MPF[+W\5\,1&V\CDL​:U@​P16\<67."N\,​:S\,+J9\,'MG'["E`V*-/T2\<?@​​:)R$'I9K M80(PPJP.​:E^06BV!@​5]Y6"DESLN(*_0>3$YYLM@​*4\<\,MF#HG88M3+Z+]5[RF MF#&)ZR"BW!.K​:\,E2F+-^LQX-A!V1>-#EX1R-^LIF(FY\PF[BG@​6\,R&"G1$`0 M\<)A!%Z[2.\<[;RD)LT/SE92RT>(+A"H\,TQ]P(1\0U4Z4WCV​:#>Q870XX?(9#Q M$$1\,.&O_V2\,%4M_*@​#3A/3@​F3AOU/$!F*)^*\N.5@​\<P+\C#SUV>/EH'0OI4# ME=\/&>K1RX`$%44+LR`​:N"0`X4>@​9G6H`\KE"V@&#8203;N!K-K*YW\,O4Y2DFV/P1] M$A6ZBG(GCHS\<+;D%&E//\D"E/#0\!VU/R7$=?0'"5;=KIJK>\,\<$4M#L`#Q`C M`A%WTK[BPPMGL#3@​QK-'N;[E-2&"H5V@​​:(E'C(N$Q!.YS>*\,IXX5%Y8JCGYJ MT*$QVF87?_K^!\<D5FXPM^H#^0.17?]7S%`​:(S;$YGA%=(\,Y#`#13O2M@​1YTR M5&G​:L&`*R\,`D[\,*]*M8AAAJ2*H`5S​:\<T'F3"[`F'=-$))V!>GD%"83PMWK([ ME`VKG$5-.0'​:X^H&5\<R'RY`VJ%\,!8QQYH[.8\<9@​H'R"*I1+L5"W3S#7/\,U!) M!FB\,="'2/'#&RWM#;+9#G4^81;[.(H8B36@​K8WMV9&H8\<\!FO?;\,K57)J#\,2 M4&NSS\,T^&\,==_V=BU*\<-Q2L['0=)0+S"R#\*]3M-03\,O3*8V`#5\OLX\,\,!$D M1P]2VK"O(K](-SG0;VQO5\,2>B$?!5!A-\,'+3I$1.U!_QY35I*R+.^*\<@​%5=$ M2%D94(4=?[\OP)HAP\,O''S\,BL4-ZJ]\U2;XX\P$S22NZ@​?UF@​\,']^7D2AM]_ M​:P?B/G\,?*H5AX?*+SZ!-TQC​:]`^$6_'2T-M!W3@​42#E1=OWN>$A\,'5!A&?)K M[\,+V`=XE)8DG`;N1.>)`9YGY8.&]749.[T\SQ#4^O/3LLLPJUGNRWB​:\,DG;! M;;\_^.'-.\][\,4YHJES07`J`R#E5*X./0%%/QA\<T$5JT?(#%G]!&T\WX?4SZ M*>.6'IPW3P)\,2+LV​:6​:^@​H-D_\)_2BME%-%\<W^ZS?$4-&.)\,LP_X9S@​/D$8` MZ;@​#YO\,*R&Y89JD"E&-$(=X2+^YZM9@​]O>H\,9.=@​FH&=/>R>M(;]`A1​:";?R M"KN4R[9JBA1V1MW4I"7>E;6DBR%FL$%OKS\-_/\;G)\1​:9?T@​3CQ!5!Z8FR2 M`$JU'​:SA'3SO1_J`\E=;]U=K07]X%M31P;75->*V0YI'0'Q?_=O?OJUGF?=W M=_WME_MO/`]TUE;K#2​:8FT​:_D)#8^FV(./-D\=^>G7'P]3^@​CFOB/Z^L?G>_ M$/]Y[?Z#M=OX;W_&DS-E_+"W?_#FW=_]IC\\<GQ`3)$Y#6WB​:\7!LE"RVE-H0 M1`CYW@​HAK9456JWC@​9;2K6>L]'8-_C=YLO7_;G=[Y]7N'U''XO6_NG+_NS4; M__'A&M8_\<83O;M?_G_$8Z1;[O\P`D\<K\,2@​\<J[-LRB^"+)!C2!D_*W7O\<\,]HS MNG$KLR4Z^_=]W;];(K$/PK"K`KHQGT-''0_8.+T.H^\<]J?92RWA(S.0!!&5$ MDV\<LBWLV.*5)\V!EC5*M%5*Y%T)L4DKXO9-.2\,Y4)`NRKC9-F/(@​T"9P/I/. MZNEA4\,"V3PUT5@​L_=L(^W-/J>8ESH6@​U(U$10?LPS)Q%I/W`\<"!=\HW_C)&3 MB?Y\,H0​:6​:IF)$F"_$Y')17O7*P6&#L#D#AC!5?&?V?(.\<1\<5R;EY5HMHH[9P M3?6_​:/$T]P;-`T30D*)QY=SWWXU591PF\6D2B$)!5>5I8'L*_`FRT#%LC^+W MH6!""^ZJ&.@​"SD[​:"NL@​+$^CZ^H-L?+/HOD"_=*'8@​ORB1[.#[4)BK68&7&* MT-%XI=RFEU"4​:(QRY`\<N;F^J>\,"3YD6\,C`W_-$+L/"X=.G?@​7T8(@​$2S)^SS M2G(+JZ8V;).-\​:1$$VE\<B(EEP&;+Y#P/EBM3B/4;-D%51O&8+W"0>\,^Y+3J& MMN@​-%#X2QB\​:%I?76L1G*\,AF9N!3%T5-.4R0?/`Q)K62E$*U/JO9->4``X#Z MU75@​HC'U9-​:)?Z>HP​:(3&ON9`1Z6(5)%.;-\<4SHN@​-/"C`WC98T7JZY\,5AG5 M\,$7=Y1C16W5I_H^1!J-*0Q-UQPGV$B?​:J]SFBEJQ*VK&9N+Y*.J".O\,9]7F@​ M​:[&IA@​N?YH/8*WPV\,W\,QK%B!87T@​GH6&'9PK;^*3+?2^7%^A/@​4*/A166FO3 M!@​T$`ITINK\,H4\,P&89FAQG83GFDMH​:!$Y\<X%>*+!?2K+FY+=PQ$9]743J3B\, M4XMIJ/U=BF9\=U(A@​VYT>M'D6Q@​T7X*^=&-3S"!&'J0_*\S0*\;F\<1$&`V&\, M'"LQ\,Y6B;31&.HP^]S]['XY%ZTS"​:FH\,*KFHM!98.@​D5]9S+((U7-6$S!80[ M\<\<%\>9(1CF'F&9_"6D7;DUW/\4066!*EYP)L;L9R$L\,$!0#​:03H1T_.8(Q3\ M\,@​8G8@​-A&B?4J6+8)W​:6XDP#X0ZH"V(UZ8C]"YM;S.JP\E8$Y\K.NCB$"8TJ M'S\<1[Z"Y/19C+@​PT#=T8D_`T!ADX7Z4?S3AILK$H2C`*EX@​+#+;GH3M(I^[* M1*7=T[]W[][.T];P0L[S^/#$=FWHFIG][;=[E%@​L2F8/DR\(FG@​>2I"P\<-`) MABFPO>74A0N7X8GY>(D#@​48XDB/VT/5*VFQ9C]IT6>LGHN(N3II/>-%W^D&​: M&L[N\<25$V4_$9Z0'&E(Q7]IB#I*.AT.X\<*/G+L;]$4=@​T*!"_0A^​:EX-&\<&K M!DRJ"8RF+#2UU1K[C/;;0$(\<*\<=&M!TJX3PU74SK`'8E\,=X$0TH6P*`A1L74 M)W'WKO_LD1-\\<HL;W9R(2;1EK+-5FC*G\,5MRN-A>D#1X)8?9*1YU7ZJHJ\,KM M+FA%]*\<>S75PZT86)`\\,(\,C"N;*\,`E%"[%->T3#5_!J/M_=Z_V#[Y\<MM40%7 M6_[[P​:_14"*)#D​:*V)\S%S&+Y'`V["6`K9U9JO\K;\<2^54A​:E+EU^JO_FX]2 M/E[V_*;GK;4R?'LVH69BF/^*=GL\<D252&O[T[$'XQ&^^(I7VQ!Z\-T._*A>0 M*F>((4P\<(.EWCP​:5*GPE\,%G`2I\,%)8R2\,+L$57B6>\,​:ZDHPA28X$​:;EY"GJ= MCGN]J&-VXBI*K=JPW1SA!*X\,`*'O=C-G7'[AR9$^+X"YLM@​^0T\,@​A\,])?!G​: M&`T&Z1Y'M=@​9)[(D$&@​SM1\,4(6.KHT5]W9`#\$X\%-OB/​:P?@​?Z+!M[\,V+-! M&F-/8D\,G"PJ\S)X-+_>>-DQ$#]CY662#S`DI\,0L\1FLV.X&BLL\<=[`(M/VJ% M+>\,^D978YB5=\CIT8]XO^-SFB//7)8(SV75IW@​9\<C\,>NAAA`.9\,>)\YA15L/ M*E1HS_91+/"1R`Y8\,C*V>STO&R66D2&J2.@​59LL2+#/40/4​:AJ473E3HH5JT M!Q!JQ-.[86​:KS$67+TJ*CFZ0F#"E)_94WLL'F-?6S`​:CAXABND`/*9D3YK)[ M>9\#GJDJ$)WJF;V@​]'GW6R3M=NP​:@​UQ9Z(IH\<!E+$.W\,O\<$]KO"R!​:_+O!T. MINWA..F'[?2\,UUL[[+6G1(WGX4S$C4ZS;#QTS\,1.P5O\FAXXZ*D3P]H;4=G8 MU3W3L_4&+Q!NI?@​EQ\,+0/M\,)*%O"3!KJHNQ1$@​_8Y\'ZJ1K.H"L9Z>`V9"/X ML​:1B`]4PL\+>BD_​:F7HDRSW/\EK6ZVG^"!N"G^\<>S^+_\"X168L#W-(P/C!\< M'D-LSIQ\H3KK\]4D@&#8203;I\!\#CZ@&#8203;L'&JI3&\\/E#KSD+EIODA\G'^WY>7VN7UNG]OG :]KE];I_;Y_​:Y?6Z?V^?/??X?D/2PPP!``0`` ` end

p5pRT commented 21 years ago

From @hvds

Mark Jason Dominus \mjd@&#8203;plover\.com wrote​: :Being able to test the debugger would be another benefit of having :rational debugger internals. : :Fixing the debugger would not necessarily require a lot of study and :work on the debugger internals. It might be a better approach to :write a new\, rational debugger from scratch\, and then put a :compatibility layer on top to make it look like the old debugger.

I'm sure someone was proposing to clean up the debugger\, possibly at OSCON\, but I can't remember who it was and I don't appear to have any mail on the subject. I remember suggesting that it might make sense to remodel the interface around something like gdb. Does this ring a bell for anyone?

Hugo

p5pRT commented 21 years ago

From @mjdominus

hv@​crypt.org​:

Mark Jason Dominus \mjd@&#8203;plover\.com wrote​: :Being able to test the debugger would be another benefit of having :rational debugger internals. : :Fixing the debugger would not necessarily require a lot of study and :work on the debugger internals. It might be a better approach to :write a new\, rational debugger from scratch\, and then put a :compatibility layer on top to make it look like the old debugger.

I'm sure someone was proposing to clean up the debugger\, possibly at OSCON\, but I can't remember who it was and I don't appear to have any mail on the subject.

Joe McMahon gave a lightning talk about it. Perhaps that's what you're remembering?

p5pRT commented 21 years ago

From @pjscott

In article \rt\-19017\-44686\.8\.44962310026816@&#8203;bugs6\.perl\.org\, perlbug-followup@​perl.org (David Dyck) writes​:

I can no longer use the "x" debugger command to view "my" variables. Perl 5.005_03\, 5.6\, and 5.8 all allow this to work. what happened to 5.9? (I noticed the "y" command can still display the value)

dd​:dcd$ perl -de '$aa=1;my $bb=2;print "$aa\,$bb\n";'

Loading DB routines from perl5db.pl version 1.19 Editor support available.

Enter h or `h h' for help\, or `man perldebug' for more help.

main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n"; DB\<1> n main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n"; DB\<1> x $aa 0 1 DB\<2> n main​::(-e​:1)​: $aa=1;my $bb=2;print "$aa\,$bb\n"; DB\<2> x $bb 0 undef [snip] --- Site configuration information for perl v5.9.0​:

Configured by dcd at Mon Dec 9 12​:03​:14 PST 2002.

Summary of my perl5 (revision 5.0 version 9 subversion 0 patch 18272) configuration​: [snip]

FWIW\, this bug was introduced since 18154\, which was the last patchlevel I had. I tried it on that - no bug. I upgraded to 18279 and saw the behavior above.

-- Peter Scott http​://www.perldebugged.com

p5pRT commented 21 years ago

From @iabyn

On Tue\, Dec 10\, 2002 at 05​:05​:26PM -0000\, Peter Scott wrote​:

FWIW\, this bug was introduced since 18154\, which was the last patchlevel I had. I tried it on that - no bug. I upgraded to 18279 and saw the behavior above.

Yes\, it was intoduced by a patch of mine. I didn't realise that eval '' called from within the DB package is magically expected to see the scope of the thing being debugged rather than the scope of the thing calling eval (!)\, and so I managed to blow away the special-handling for that. I just need to add back something equivalent at some point. (Then document it !!!!)

Dave.

-- "I do not resent critisism\, even when\, for the sake of emphasis\, it parts for the time with reality". Winston Churchill\, House of Commons\, 22nd Jan 1941.

p5pRT commented 21 years ago

From @mjdominus

I didn't realise that eval '' called from within the DB package is magically expected to see the scope of the thing being debugged rather than the scope of the thing calling eval (!)\,

Oho! I've always wondered how that worked. Thanks!

That's the only reason that the debugger can dump out the contents of your program's lexical variables.

p5pRT commented 21 years ago

From @iabyn

On Wed\, Dec 11\, 2002 at 08​:36​:06PM +0000\, Dave Mitchell wrote​:

Yes\, it was intoduced by a patch of mine. I didn't realise that eval '' called from within the DB package is magically expected to see the scope of the thing being debugged rather than the scope of the thing calling eval (!)\, and so I managed to blow away the special-handling for that. I just need to add back something equivalent at some point. (Then document it !!!!)

Okay\, here's the patch. Note that it's behaviour is slighlty different than the old \<= 5.8.0 behaviour.

In olden times\, an eval appearing within package DB would see both its own lexical scope and the scope of the code being debugged (ie it would search the former then the latter).

This new version doesn't see its own scope at all. This may regarded as a good or bad thing\, depending on your viewpoint. (Either approach is of course insanely ugly).

Dave.

-- Justice is when you get what you deserve. Law is when you get what pay for.

# This is a patch for 18272.pad3a to update it to 18272.pad4 # # To apply this patch​: # STEP 1​: Chdir to the source directory. # STEP 2​: Run the 'applypatch' program with this patch file as input. # # If you do not have 'applypatch'\, it is part of the 'makepatch' package # that you can fetch from the Comprehensive Perl Archive Network​: # http​://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz # In the above URL\, 'x' should be 2 or higher. # # To apply this patch without the use of 'applypatch'​: # STEP 1​: Chdir to the source directory. # STEP 2​: Run the 'patch' program with this file as input. # #### End of Preamble ####

#### Patch data follows #### diff -up '18272.pad3a/embed.fnc' '18272.pad4/embed.fnc' Index​: ./embed.fnc

Inline Patch ```diff --- ./embed.fnc Tue Dec 10 02:07:18 2002 +++ ./embed.fnc Thu Dec 12 23:07:45 2002 @@ -1353,7 +1353,7 @@ sd |void |cv_dump |CV *cv|char *title # endif s |CV* |cv_clone2 |CV *proto|CV *outside #endif -pd |CV* |find_runcv +pd |CV* |find_runcv |U32 *db_seqp diff -up '18272.pad3a/pod/perlfunc.pod' '18272.pad4/pod/perlfunc.pod' ```

Index: ./pod/perlfunc.pod

Inline Patch ```diff --- ./pod/perlfunc.pod Tue Dec 10 01:45:09 2002 +++ ./pod/perlfunc.pod Fri Dec 13 00:27:00 2002 @@ -1449,6 +1449,11 @@ in case 6. C does I count as a loop, so the loop control statements C, C, or C cannot be used to leave or restart the block. +Note that as a very special case, an C executed within the C +package doesn't see the usual surrounding lexical scope, but rather the +scope of the first non-DB piece of code that called it. You don't normally +need to worry about this unless you are writing a Perl debugger. + =item exec LIST =item exec PROGRAM LIST diff -up '18272.pad3a/pp_ctl.c' '18272.pad4/pp_ctl.c' ```

Index: ./pp_ctl.c

Inline Patch ```diff --- ./pp_ctl.c Tue Dec 10 02:07:18 2002 +++ ./pp_ctl.c Thu Dec 12 23:11:53 2002 @@ -2615,7 +2615,7 @@ Perl_sv_compile_2op(pTHX_ SV *sv, OP** s /* we get here either during compilation, or via pp_regcomp at runtime */ runtime = PL_op && (PL_op->op_type == OP_REGCOMP); if (runtime) - runcv = find_runcv(); + runcv = find_runcv(NULL); PL_op = &dummy; PL_op->op_type = OP_ENTEREVAL; @@ -2649,22 +2649,35 @@ Perl_sv_compile_2op(pTHX_ SV *sv, OP** s =for apidoc find_runcv Locate the CV corresponding to the currently executing sub or eval. +If db_seqp is non_null, skip CVs that are in the DB package and populate +*db_seqp with the cop sequence number at the point that the DB:: code was +entered. (allows debuggers to eval in the scope of the breakpoint rather +than in in the scope of the debuger itself). =cut */ CV* -Perl_find_runcv(pTHX) +Perl_find_runcv(pTHX_ U32 *db_seqp) { I32 ix; PERL_SI *si; PERL_CONTEXT *cx; + if (db_seqp) + *db_seqp = PL_curcop->cop_seq; for (si = PL_curstackinfo; si; si = si->si_prev) { for (ix = si->si_cxix; ix >= 0; ix--) { cx = &(si->si_cxstack[ix]); - if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) - return cx->blk_sub.cv; + if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) { + CV *cv = cx->blk_sub.cv; + /* skip DB:: code */ + if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) { + *db_seqp = cx->blk_oldcop->cop_seq; + continue; + } + return cv; + } else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx)) return PL_compcv; } @@ -3222,6 +3235,7 @@ PP(pp_entereval) STRLEN len; OP *ret; CV* runcv; + U32 seq; if (!SvPV(sv,len)) RETPUSHUNDEF; @@ -3269,7 +3283,12 @@ PP(pp_entereval) PL_compiling.cop_io = newSVsv(PL_curcop->cop_io); SAVEFREESV(PL_compiling.cop_io); } - runcv = find_runcv(); + /* special case: an eval '' executed within the DB package gets lexically + * placed in the first non-DB CV rather than the current CV - this + * allows the debugger to execute code, find lexicals etc, in the + * scope of the code being debugged. Passing &seq gets find_runcv + * to do the dirty work for us */ + runcv = find_runcv(&seq); push_return(PL_op->op_next); PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP); @@ -3280,7 +3299,7 @@ PP(pp_entereval) if (PERLDB_LINE && PL_curstash != PL_debstash) save_lines(CopFILEAV(&PL_compiling), PL_linestr); PUTBACK; - ret = doeval(gimme, NULL, runcv, PL_curcop->cop_seq); + ret = doeval(gimme, NULL, runcv, seq); if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */ && ret != PL_op->op_next) { /* Successive compilation. */ strcpy(safestr, "_<(eval )"); /* Anything fake and short. */ diff -up '18272.pad3a/t/op/eval.t' '18272.pad4/t/op/eval.t' ```

Index: ./t/op/eval.t

Inline Patch ```diff --- ./t/op/eval.t Tue Dec 10 01:45:09 2002 +++ ./t/op/eval.t Fri Dec 13 00:18:51 2002 @@ -1,6 +1,6 @@ #!./perl -print "1..78\n"; +print "1..84\n"; eval 'print "ok 1\n";'; @@ -349,3 +349,28 @@ eval q{ my $yyy = 888; my $zzz = 999; fr print "ok 78\n"; } +# evals that appear in the DB package should see the lexical scope of the +# thing outside DB that called them (usually the debugged code), rather +# than the usual surrounding scope + +our $x = 1; +{ + my $x=2; + sub db1 { $x; eval '$x' } + sub DB::db2 { $x; eval '$x' } + package DB; + sub db3 { eval '$x' } + sub DB::db4 { eval '$x' } + sub db5 { my $x=4; eval '$x' } + package main; + sub db6 { my $x=4; eval '$x' } +} +{ + my $x = 3; + print db1() == 2 ? 'ok' : 'not ok', " $test\n"; $test++; + print DB::db2() == 2 ? 'ok' : 'not ok', " $test\n"; $test++; + print DB::db3() == 3 ? 'ok' : 'not ok', " $test\n"; $test++; + print DB::db4() == 3 ? 'ok' : 'not ok', " $test\n"; $test++; + print DB::db5() == 3 ? 'ok' : 'not ok', " $test\n"; $test++; + print db6() == 4 ? 'ok' : 'not ok', " $test\n"; $test++; +} ```

End of Patch data

#### ApplyPatch data follows #### # Data version : 1.0 # Date generated : Fri Dec 13 00​:27​:27 2002 # Generated by : makepatch 2.00_05 # Recurse directories : Yes # Excluded files : keywords\.h|warnings\.h|regnodes\.h|perlapi\.c|perlapi\.h|global\.sym|embedvar\.h|embed\.h|pod\/perlapi\.pod|pod\/perlintern\.pod|proto\.h # v 'patchlevel.h' 3261 1039484703 33188 # p 'embed.fnc' 49693 1039734465 0100644 # p 'pod/perlfunc.pod' 256590 1039739220 0100644 # p 'pp_ctl.c' 84464 1039734713 0100644 # p 't/op/eval.t' 7562 1039738731 0100755 #### End of ApplyPatch data ####

#### End of Patch kit [created​: Fri Dec 13 00​:27​:27 2002] #### #### Patch checksum​: 170 5881 48261 #### #### Checksum​: 188 6564 38956 ####

p5pRT commented 21 years ago

From @pjscott

If I try to get help on the "y" command h y the debugger reports​: y is not a debugger command.

Argh\, too many twisty little help text strings\, all alike. In my defense I cite the comment immediately preceding the one I missed​:

  # eeevil ornaments enabled. This is an insane mess.

Patch for 18292​:

Inline Patch ```diff --- lib/perl5db.pl.orig Thu Dec 12 10:10:09 2002 +++ lib/perl5db.pl Thu Dec 12 10:16:00 2002 @@ -2738,6 +2738,7 @@ B [I [I]] List some (default all) variables in package (default current). Use B<~>I and BI for positive and negative regexps. B [I] Same as \"B I [I]\". +B [I [I]] List lexicals in higher scope . Vars same as B. B I Evals expression in list context, dumps the result. B I Evals expression in list context, prints methods callable on the first element of the result. -- ```

Peter Scott http​://www.perldebugged.com

p5pRT commented 21 years ago

From @iabyn

On Thu\, Dec 12\, 2002 at 11​:42​:35PM +0000\, Dave Mitchell wrote​:

Okay\, here's the patch. Note that it's behaviour is slighlty different than the old \<= 5.8.0 behaviour.

Whoops!. It needs the following fix on top\, otherwise the test fails. Not sure how I managed to miss this one!

Inline Patch ```diff --- t/op/eval.t.1 Sat Dec 14 20:20:01 2002 +++ t/op/eval.t Sat Dec 14 20:21:37 2002 @@ -353,6 +353,7 @@ # thing outside DB that called them (usually the debugged code), rather # than the usual surrounding scope +$test=79; our $x = 1; { my $x=2; ```
p5pRT commented 21 years ago

From @rgs

Dave Mitchell wrote​:

On Thu\, Dec 12\, 2002 at 11​:42​:35PM +0000\, Dave Mitchell wrote​:

Okay\, here's the patch. Note that it's behaviour is slighlty different than the old \<= 5.8.0 behaviour.

Whoops!. It needs the following fix on top\, otherwise the test fails. Not sure how I managed to miss this one!

Thanks\, both patches applied as #18307. I personnally think that the new behavior isn't worse than the old one.

p5pRT commented 21 years ago

From @rgs

Peter Scott wrote​:

If I try to get help on the "y" command h y the debugger reports​: y is not a debugger command.

Argh\, too many twisty little help text strings\, all alike. In my defense I cite the comment immediately preceding the one I missed​:

\#      eeevil ornaments enabled\.  This is an insane mess\.

Patch for 18292​:

--- lib/perl5db.pl.orig Thu Dec 12 10​:10​:09 2002 +++ lib/perl5db.pl Thu Dec 12 10​:16​:00 2002

Thanks\, applied as #18308.

p5pRT commented 21 years ago

From david.dyck@fluke.com

On Mon\, 16 Dec 2002 at 23​:12 -0000\, Rafael Garcia-Suarez \<perlbug-followup@​...​:

Thanks\, both patches applied as #18307. I personnally think that the new behavior isn't worse than the old one.

I applied the patches by hand\, and then had to do a little hand editing to get it to compile. (I didn't see the patch to embed.h)

#18307 seems to fix the problem for me\, thanks to all...

p5pRT commented 21 years ago

From @jhi

Seems to have been resolved\, marking the problem ticket as such.

p5pRT commented 21 years ago

@jhi - Status changed from 'new' to 'resolved'