Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
p5pRT opened this issue Dec 10, 2002 · 20 comments
Closed

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

p5pRT opened this issue Dec 10, 2002 · 20 comments

Comments

@p5pRT
Copy link

p5pRT commented Dec 10, 2002

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

Searchable as RT19017$

@p5pRT
Copy link
Author

p5pRT commented Dec 10, 2002

From [email protected]

Created by [email protected]

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 [email protected]'
    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
Copy link
Author

p5pRT commented Dec 10, 2002

From @andk

On 10 Dec 2002 14​:49​:15 -0000, David Dyck (via RT) <perlbug-followup@​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@​fdgroup.com>
  Date​: Sun, 24 Nov 2002 22​:19​:06 +0000
  Message-ID​: <20021124221906.A25386@​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
Copy link
Author

p5pRT commented Dec 10, 2002

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
Copy link
Author

p5pRT commented Dec 10, 2002

From [email protected]

On 10 Dec 2002 at 18​:40 -0000, Andreas Koenig <perlbug-followup@​perl.org>
wrote​:

On 10 Dec 2002 14​:49​:15 -0000, David Dyck (via RT) <perlbug-followup@​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
Copy link
Author

p5pRT commented Dec 11, 2002

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
Copy link
Author

p5pRT commented Dec 11, 2002

From @mjdominus

Dave Mitchell <davem@​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
Copy link
Author

p5pRT commented Dec 11, 2002

From @gsar

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

Dave Mitchell <davem@​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'@​)(.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@​*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<XM>.<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,@​1^^*2A><IR_1`%\
M)`$_-)GWW*%KY9&*Q=P%OPU"[NS."4&!*'7.@​R".N​:C​::?EB"CM<>!>​:M_++
M3<MCEBCXC6VQ,<RB*.LS0S/BN3@​*"FHS%/?W>W​:*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<@​"Z]U8=UWRDL`S=​:OF"K/R\0W?E*8R*=X#QONA>)$QC*@​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@​.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@​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@​/6H@​5X[1V0+^,T*QLG+49>M^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@​5Z@​H5ZA3S(*>]_)&%Y@​+
M<]EDWEYP>5F6N'-?-JWS%J%C)Y]ESLJVZ9W!O;Y\ULJD/5I96;F;TJ1EB1UG
MMI'<@​1+IFV^G;+7\_,@​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<HK2BUD>/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@​H;?*1=!F-.YA]Z0U[$/M2B+2​: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@​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/;!!@​T9>A2'AHB4JGG7C0@​\XO+RZ-GX.U;I/,Z0G]L'"T1&&C%DQR
MM/^$'9G*EJ-;1O6'5/_S_ONG​:3G)D0#465<?II'D2Q@​*,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​:5H@​UAMR)=)$@​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​:%@​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<R>@​)ZU#
M&SS#68GY"$FE​:]$(K;(4LY&[V6*4=!?!1]A<V>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<O>%*IU7​:1T;8"HVTE​:^OG
M9;`&YKGV94F>,PJO2F9V'1(@​/[;C5"J&Z`5N1$><K2K9JE>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`.@​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@​#W`$;%JSPC6)^$T9F!UQ&1EYZ]9EO>U
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@​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!>#@​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<@​%(F08;U.F^@​7^ID`@​&<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`>@​>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@​=RC8PQ'.K+92MY;N)>(&
M.+7$D3Y-EV8​:=Z*@​[_K=#?1*A<A$,N\W[&\7%@​TY`+W&R=63+2J>C^A!SD9)
MB9D'1<UZ4#@​NF(BN-Q!2YA\-.3?7<G>Y.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@​ZH6;5CO​:_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</JO>75
MZG'%''V9<76+7#ZZ=X,B;8'%\@​Q`"&U]YGZ4'KUE3​: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<ZLM>;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-?@​>0?;\)​:=FPL5U%Q;7JFS
MEY-\N8@​&P'<#@​!MTS"5Y*S>1​: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@​6Y5\,*P9Z4?KU1!$.W)_8G6KFCGC%HZ%.3ECXXFK=+7>6)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@​Z]566RU*S=Q9>J`,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\@​;/I90K^9SW-=#-PL.'>?D\4]
M6G>S&`<DRB​:YEK`$!]GZQ,@​?/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]@​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@​4W​:T)8/B)S<NJ?Y5G\4ZHK4Z3L.J@​^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@​$'L>CV-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<​:6!@​RE!CKW​:_V(/PI_M`"5>810CX7"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@​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@​I!#CZ@​L'&JI3&\/E>#KSD+EIODA\G'^WY>7VN7UNG]OG
:]KE];I_;Y_​:Y?6Z?V^?/??X?D/2PPP!``0``
`
end

@p5pRT
Copy link
Author

p5pRT commented Dec 11, 2002

From @hvds

Mark Jason Dominus <mjd@​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
Copy link
Author

p5pRT commented Dec 11, 2002

From @mjdominus

hv@​crypt.org​:

Mark Jason Dominus <mjd@​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
Copy link
Author

p5pRT commented Dec 11, 2002

From @pjscott

In article <rt-19017-44686.8.44962310026816@​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
Copy link
Author

p5pRT commented Dec 11, 2002

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
Copy link
Author

p5pRT commented Dec 11, 2002

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
Copy link
Author

p5pRT commented Dec 12, 2002

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
--- ./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
--- ./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<eval BLOCK> does I<not> count as a loop, so the loop control statements
 C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
 
+Note that as a very special case, an C<eval ''> executed within the C<DB>
+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
--- ./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
--- ./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
Copy link
Author

p5pRT commented Dec 13, 2002

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
--- 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<V> [I<pkg> [I<vars>]]	List some (default all) variables in package (default current).
 		Use B<~>I<pattern> and B<!>I<pattern> for positive and negative regexps.
 B<X> [I<vars>]	Same as \"B<V> I<currentpackage> [I<vars>]\".
+B<y> [I<n> [I<Vars>]]   List lexicals in higher scope <n>.  Vars same as B<V>.
 B<x> I<expr>		Evals expression in list context, dumps the result.
 B<m> I<expr>		Evals expression in list context, prints methods callable
 		on the first element of the result.


-- 

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

@p5pRT
Copy link
Author

p5pRT commented Dec 14, 2002

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
--- 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
Copy link
Author

p5pRT commented Dec 16, 2002

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
Copy link
Author

p5pRT commented Dec 16, 2002

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
Copy link
Author

p5pRT commented Dec 17, 2002

From [email protected]

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
Copy link
Author

p5pRT commented Dec 24, 2002

From @jhi

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

@p5pRT
Copy link
Author

p5pRT commented Dec 24, 2002

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant